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

📄 aac_dec_api_int.c

📁 audio-video-codecs.rar语音编解码器
💻 C
📖 第 1 页 / 共 4 页
字号:
        tmp = (tmp + ( 1 << (scaleFactorAAC -1) ) ) >> scaleFactorAAC;
        tmp0 = tmp;
        if (tmp > 32767) tmp0 = 32767;
        if (tmp < -32768) tmp0 = -32768;
        *tmpPtr = (Ipp16s)tmp0;
        tmpPtr++;
        srcPrt++;
      }
    }
  } else if (m_channel_number == 2) {
    for (j = 0; j < m_channel_number; j++) {
      Ipp16s *tmpPtr = outPointer + j;
      Ipp32s num = state->com.m_up_sample * 1024;
      Ipp32s *srcPrt = state->m_ordered_samples[j];

      for (i = 0; i < num; i++) {
        Ipp32s tmp = *srcPrt;
        Ipp32s tmp0;
        tmp = (tmp + ( 1 << (scaleFactorAAC -1) ) ) >> scaleFactorAAC;
        tmp0 = tmp;
        if (tmp > 32767) tmp0 = 32767;
        if (tmp < -32768) tmp0 = -32768;
        *tmpPtr = (Ipp16s)tmp0;
        tmpPtr += 2;
        srcPrt++;
      }
    }
  } else {
    for (j = 0; j < m_channel_number; j++) {
      Ipp16s *tmpPtr = outPointer + j;
      Ipp32s num = state->com.m_up_sample * 1024;
      Ipp32s *srcPrt = state->m_ordered_samples[j];

      for (i = 0; i < num; i++) {
        Ipp32s tmp = *srcPrt;
        Ipp32s tmp0;
        tmp = (tmp + ( 1 << (scaleFactorAAC -1) ) ) >> scaleFactorAAC;
        tmp0 = tmp;
        if (tmp > 32767) tmp0 = 32767;
        if (tmp < -32768) tmp0 = -32768;
        *tmpPtr = (Ipp16s)tmp0;
        tmpPtr += m_channel_number;
        srcPrt++;
      }
    }
  }

  state_com->decodedBytes = 0;
  state_com->m_frame_number++;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecSetSamplingFrequency(Ipp32s sampling_frequency_index,
                                      AACDec *state)
{
  return aacdecSetSamplingFrequencyCom(sampling_frequency_index,
                                       &(state->com));
}

/********************************************************************/

AACStatus aacidecSetSBRModeDecode(Ipp32s ModeDecodeHEAAC,
                                  AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  if (state->com.ModeDecodeHEAACprofile != ModeDecodeHEAAC) {
    state->com.ModeDecodeHEAACprofile = ModeDecodeHEAAC;
    sbridecInitFilter(state);
  }

  return AAC_OK;
}


/********************************************************************/

AACStatus aacidecSetSBRModeDwnmx(Ipp32s ModeDwnsmplHEAAC,
                                 AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  state->com.ModeDwnsmplHEAACprofile = ModeDwnsmplHEAAC;

  return AAC_OK;
}


/********************************************************************/

AACStatus aacidecSetSBRSupport(eSBR_SUPPORT flag, AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  state->com.m_flag_SBR_support_lev = flag;

  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecSetAudioObjectType(enum AudioObjectType audio_object_type,
                                    AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  state->com.m_audio_object_type = audio_object_type;
  return AAC_OK;
}


/********************************************************************/

AACStatus aacidecSetPCE(sProgram_config_element *pce,
                        AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  ippsCopy_8u((Ipp8u*)pce, (Ipp8u*)(&(state->com.m_pce)),
              sizeof(sProgram_config_element));

  state->com.m_is_pce_valid = 1;

  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecSetAdtsChannelConfiguration(Ipp32s adts_channel_configuration,
                                             AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  if ((adts_channel_configuration < 0) || (adts_channel_configuration > 7))
    return AAC_BAD_PARAMETER;

  state->com.adts_channel_configuration = adts_channel_configuration;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecInitCRC(Ipp32s crc_enable,
                         AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  bs_CRC_reset((Ipp32u*)&state->com.crc);
  state->com.crc_enable = crc_enable;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecSetCRC(Ipp32s crc,
                        AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  state->com.crc = crc;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetCRC(Ipp32s *crc,
                        AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  if (!crc)
    return AAC_NULL_PTR;

  *crc = state->com.crc;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetSbrFlagPresent(Ipp32s *SbrFlagPresent,
                                   AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  *SbrFlagPresent = state->com.SbrFlagPresent;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetFrameSize(Ipp32s *frameSize,
                              AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  *frameSize = state->com.m_frame_size * state->com.m_up_sample;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetSampleFrequency(Ipp32s *freq,
                                    AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  *freq = state->com.m_sampling_frequency * state->com.m_up_sample;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetNumDecodedFrames(Ipp32s *num,
                                     AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  *num = state->com.m_frame_number;
  return AAC_OK;
}


/********************************************************************/

AACStatus aacidecGetChannels(Ipp32s *ch,
                             AACDec *state)
{
  if (!state)
    return AAC_NULL_PTR;

  *ch = state->com.m_channel_number;
  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetInfo(cAudioCodecParams *a_info,
                         AACDec *state)
{
  if (!a_info)
    return AAC_NULL_PTR;

  a_info->m_SuggestedInputSize = CH_MAX * 768;
  a_info->m_SuggestedOutputSize = CH_MAX * 1024 * 2 /* upsampling SBR */ * sizeof(Ipp16s);
  a_info->is_valid = 0;

  if (!state)
    return AAC_OK;

  if (state->com.m_frame_number > 0) {
    a_info->m_info_in.bitPerSample = 0;
    a_info->m_info_out.bitPerSample = 16;

    a_info->m_info_in.bitrate = 0;
    a_info->m_info_out.bitrate = 0;

    a_info->m_info_in.channels = state->com.m_channel_number;
    a_info->m_info_out.channels = state->com.m_channel_number;

    a_info->m_info_in.sample_frequency = state->com.m_sampling_frequency;
    a_info->m_info_out.sample_frequency = state->com.m_sampling_frequency * state->com.m_up_sample;

    a_info->m_info_in.stream_type = AAC_AUD;
    a_info->m_info_out.stream_type = PCM_AUD;

    a_info->m_frame_num = state->com.m_frame_number;

    a_info->is_valid = 1;

    return AAC_OK;
  }

  return AAC_OK;
}

/********************************************************************/

AACStatus aacidecGetDuration(Ipp32f *p_duration,
                             AACDec *state)
{
  Ipp32f  duration;

  duration = (Ipp32f)(state->com.m_frame_number) * 1024;
  *p_duration = duration / (Ipp32f)(state->com.m_sampling_frequency);

  return AAC_OK;
}

/********************************************************************/

AACStatus aacidec_GetID3Len(Ipp8u  *in,
                            Ipp32s inDataSize,
                            AACDec *state)
{
  if (state->com.FirstID3Search != 0)
    return AAC_OK;

  if (inDataSize < 10)
    return AAC_NOT_ENOUGH_DATA;

  if ((in[0] == 'I') && (in[1] == 'D') && (in[2] == '3') && /* 'ID3' */
      (in[3] < 0xFF) && (in[4] < 0xFF) &&                   /* Version or revision will never be 0xFF */
      (in[6] < 0x80) && (in[7] < 0x80) && (in[8] < 0x80) && (in[9] < 0x80)) { /* size */
    state->com.id3_size = (in[6] << 21) + (in[7] << 14) + (in[8] << 7) + in[9] +
      (in[5] & 0x10 ? 20 : 10);
  } else {
    state->com.id3_size = 0;
  }

  state->com.FirstID3Search = 1;

  return AAC_OK;
}

/********************************************************************/

AACStatus aacidec_SkipID3(Ipp32s inDataSize,
                          Ipp32s *skipped,
                          AACDec *state)
{
  *skipped = 0;
  if (state->com.id3_size > 0) {
    if (inDataSize < state->com.id3_size) {
      *skipped = inDataSize;
      state->com.id3_size -= inDataSize;
      return AAC_NOT_ENOUGH_DATA;
    } else {
      *skipped = state->com.id3_size;
      state->com.id3_size = 0;
      return AAC_OK;
    }
  }
  return AAC_OK;
}

/********************************************************************/

⌨️ 快捷键说明

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