📄 aac_dec_api_int.c
字号:
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 + -