⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aaccmn_cce.c

📁 audio-video-codecs.rar语音编解码器
💻 C
字号:
/*//////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2003-2006 Intel Corporation. All Rights Reserved.
//
*/

#include "aaccmn_const.h"
#include "aaccmn_cce.h"
#include "aaccmn_huff.h"
#include "bstream.h"
#include "ippac.h"
#include "ipps.h"

//Ipp32u decode_sf(Ipp8u** pp_bs, Ipp32s* p_offset);

Ipp32s
unpack_coupling_channel_element(sCoupling_channel_element * p_data, Ipp8u** pp_bs,
                                Ipp32s* p_offset, Ipp32s audio_object_type, Ipp32s sampling_frequency_index)
{
  Ipp32s c;
  Ipp32s cge;
  Ipp32s t;
  Ipp32s g;
  Ipp32s sfb;
  Ipp32s res;
  IppAACMainHeader aac_main_header;
  Ipp16s p_sf[60];
  Ipp8u  p_sf_cb[60];
  Ipp32s p_spectrum[1024];
  Ipp8s  p_tns_coef[60];
  IppAACChanInfo ch_info;
  IppAACIcsInfo  ics_info;

  ippsZero_8u((Ipp8u*)&ics_info,sizeof(ics_info));
  ippsZero_8u((Ipp8u*)&ch_info,sizeof(ch_info));

  ch_info.samplingRateIndex = sampling_frequency_index;

  ch_info.pIcsInfo = &ics_info;

  p_data->element_instance_tag = get_bits(pp_bs, p_offset, 4);

  p_data->ind_sw_cce_flag = get_bits(pp_bs, p_offset, 1);
  p_data->num_coupled_elements = get_bits(pp_bs, p_offset, 3);

  p_data->num_gain_element_lists = 0;
  for (c = 0; c < p_data->num_coupled_elements + 1; c ++)
  {
    p_data->num_gain_element_lists++;
    p_data->cc_target_is_cpe[c]    = get_bits(pp_bs, p_offset, 1);
    p_data->cc_target_tag_select[c]= get_bits(pp_bs, p_offset, 4);
    if ( p_data->cc_target_is_cpe[c] )
    {
      p_data->cc_l[c] = get_bits(pp_bs, p_offset, 1);
      p_data->cc_r[c] = get_bits(pp_bs, p_offset, 1);
      if (p_data->cc_l[c] && p_data->cc_r[c] )
      {
        p_data->num_gain_element_lists++;
      }
    }
  }

  p_data->cc_domain = get_bits(pp_bs, p_offset, 1);
  p_data->gain_element_sign = get_bits(pp_bs, p_offset,1);
  p_data->gain_element_scale = get_bits(pp_bs, p_offset,2);

  res = ippsNoiselessDecode_AAC(pp_bs, p_offset, &aac_main_header,
                                p_sf, p_spectrum, p_sf_cb, p_tns_coef, &ch_info,
                                0/*windows sequence*/,0/*max_sfb*/,0/*common_win*/,
                                0,audio_object_type);

//  dec_individual_channel_stream(&p_data->stream,pBS,0,0,aydioObjectType);

  for (c = 1; c < p_data->num_gain_element_lists; c ++)
  {
    if ( p_data->ind_sw_cce_flag )
    {
      cge = 1;
    }
    else
    {
      p_data->common_gain_element_present[c] = get_bits(pp_bs, p_offset, 1);
      cge = p_data->common_gain_element_present[c];
    }
    if (cge)
    {
      t = aac_huff_decode_sf(pp_bs, p_offset);
            p_data->common_gain_element[c] = t;
    }
    else
    {
      t = 0;
            /// The branch is not tested due to the streams are absent.
            for (g = 0; g < ics_info.numWinGrp; g ++)
            {
                for (sfb = 0; sfb < ics_info.maxSfb; sfb ++)
                {
                    if (p_sf_cb[sfb] != ZERO_HCB)
                    {
                        t = aac_huff_decode_sf(pp_bs,p_offset);
//                        p_data->common_gain_element[c] = t;
                    }
                }
            }
    }
  }

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -