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

📄 umc_aac_decoder.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }    Byte_alignment(&BS);    GET_BITS_COUNT(&BS, tmp_decodedBytes)    tmp_decodedBytes >>= 3;    nDecodedBytes = 0;    result = aacdecGetFrame(inPointer + tmp_decodedBytes, &nDecodedBytes,                            (Ipp16s *)out->GetDataPointer(), state);    nDecodedBytes += tmp_decodedBytes;    aacdecGetSbrFlagPresent(&SbrFlagPresent, state);    aacdecGetFrameSize(&frameSize, state);    aacdecGetSampleFrequency(&freq, state);    aacdecGetChannels(&ch, state);    if ((0 == initSubtype) && (1 == SbrFlagPresent)) {      initSubtype = 1;      if (m_info.m_stream_subtype == AAC_MAIN_PROFILE) {        m_info.m_stream_subtype =          (UMC::AudioStreamSubType) (AAC_MAIN_PROFILE | AAC_HE_PROFILE);      } else if (m_info.m_stream_subtype == AAC_LC_PROFILE) {        m_info.m_stream_subtype =          (UMC::AudioStreamSubType) (AAC_LC_PROFILE | AAC_HE_PROFILE);      } else if (m_info.m_stream_subtype == AAC_SSR_PROFILE) {        m_info.m_stream_subtype =          (UMC::AudioStreamSubType) (AAC_SSR_PROFILE | AAC_HE_PROFILE);      } else if (m_info.m_stream_subtype == AAC_LTP_PROFILE) {        m_info.m_stream_subtype =          (UMC::AudioStreamSubType) (AAC_LTP_PROFILE | AAC_HE_PROFILE);      }    }    if (AAC_MPEG4_STREAM == m_info.m_init_stream_type) {      in->MoveDataPointer(in->GetDataSize());    } else {      in->MoveDataPointer(nDecodedBytes);    }    out->SetDataSize(frameSize * sizeof(short) * ch);    if (pts_start < 0)      pts_start = m_pts_prev;    m_pts_prev = pts_end = pts_start + (1024.0 / (double)freq);    in->SetTime(pts_end);    out->SetTime(pts_start, pts_end);    m_info.m_frame_number++;    if (AAC_OK == result) {      AudioData* pAudio = DynamicCast<AudioData,MediaData>(out);      if (pAudio) {        pAudio->m_info.bitPerSample = 16;        pAudio->m_info.bitrate = 0;        pAudio->m_info.channels = ch;        pAudio->m_info.sample_frequency = freq;        pAudio->m_info.stream_type = PCM_AUDIO;        switch (pAudio->m_info.channels) {        case 1:          pAudio->m_info.channel_mask = CHANNEL_FRONT_CENTER;          break;        case 2:          pAudio->m_info.channel_mask  = CHANNEL_FRONT_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_RIGHT;          break;        case 3:          pAudio->m_info.channel_mask  = CHANNEL_FRONT_CENTER;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_RIGHT;          break;        case 4:          pAudio->m_info.channel_mask  = CHANNEL_FRONT_CENTER;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_RIGHT;          pAudio->m_info.channel_mask |= CHANNEL_LOW_FREQUENCY;          break;        case 5:          pAudio->m_info.channel_mask  = CHANNEL_FRONT_CENTER;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_RIGHT;          pAudio->m_info.channel_mask |= CHANNEL_BACK_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_BACK_RIGHT;          break;        case 6:          pAudio->m_info.channel_mask  = CHANNEL_FRONT_CENTER;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_FRONT_RIGHT;          pAudio->m_info.channel_mask |= CHANNEL_BACK_LEFT;          pAudio->m_info.channel_mask |= CHANNEL_BACK_RIGHT;          pAudio->m_info.channel_mask |= CHANNEL_LOW_FREQUENCY;          break;        default:          break;        }      }    }    return StatusAAC_2_UMC(result);  }/********************************************************************/  AACDecoder::~AACDecoder()  {    Close();  }/********************************************************************/  Status AACDecoder::Close()  {    aacdecClose(state);    state = NULL;    return UMC_OK;  }/********************************************************************/  Status  AACDecoder::Reset()  {    aacdecReset(state);    return UMC_OK;  }/********************************************************************/  Status  AACDecoder::GetInfo(BaseCodecParams * info)  {    if (!info)      return UMC_NULL_PTR;    AudioCodecParams *p_info =      DynamicCast < AudioCodecParams, BaseCodecParams > (info);    aacdecGetInfo(&params, state);    info->m_SuggestedInputSize = params.m_SuggestedInputSize;    if (params.is_valid) {      p_info->m_info_in.bitPerSample = params.m_info_in.bitPerSample;      p_info->m_info_out.bitPerSample = params.m_info_out.bitPerSample;      p_info->m_info_in.channels = params.m_info_in.channels;      p_info->m_info_out.channels = params.m_info_out.channels;      p_info->m_info_in.stream_type = AAC_AUDIO;      p_info->m_info_out.stream_type = PCM_AUDIO;      p_info->m_info_in.sample_frequency = params.m_info_in.sample_frequency;      p_info->m_info_out.sample_frequency = params.m_info_out.sample_frequency;      p_info->m_frame_num = m_info.m_frame_number;      p_info->m_info_in.bitrate = params.m_info_in.bitrate;      p_info->m_info_out.bitrate = params.m_info_out.bitrate;      p_info->m_info_in.stream_subtype = m_info.m_stream_subtype;      p_info->m_info_in.channel_mask = 0;      switch (p_info->m_info_in.channels) {      case 1:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_CENTER;        break;      case 2:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_RIGHT;        break;      case 3:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_CENTER;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_RIGHT;        break;      case 4:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_CENTER;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_RIGHT;        p_info->m_info_in.channel_mask |= CHANNEL_LOW_FREQUENCY;        break;      case 5:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_CENTER;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_RIGHT;        p_info->m_info_in.channel_mask |= CHANNEL_BACK_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_BACK_RIGHT;        break;      case 6:        p_info->m_info_in.channel_mask  = CHANNEL_FRONT_CENTER;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_FRONT_RIGHT;        p_info->m_info_in.channel_mask |= CHANNEL_BACK_LEFT;        p_info->m_info_in.channel_mask |= CHANNEL_BACK_RIGHT;        p_info->m_info_in.channel_mask |= CHANNEL_LOW_FREQUENCY;        break;      default:        break;      }      p_info->m_info_out.channel_mask = p_info->m_info_in.channel_mask;    }    return UMC_OK;  }/********************************************************************/  Status AACDecoder::GetDuration(float *p_duration)  {    aacdecGetDuration(p_duration, state);    return UMC_OK;  }/********************************************************************/  Status AACDecoder::StatusAAC_2_UMC(AACStatus st)  {    Status res;    if (st == AAC_OK)      res = UMC_OK;    else if (st == AAC_NOT_ENOUGH_DATA)      res = UMC_NOT_ENOUGH_DATA;    else if (st == AAC_BAD_FORMAT)      res = UMC_BAD_FORMAT;    else if (st == AAC_ALLOC)      res = UMC_ALLOC;    else if (st == AAC_BAD_STREAM)      res = UMC_BAD_STREAM;    else if (st == AAC_NULL_PTR)      res = UMC_NULL_PTR;    else if (st == AAC_NOT_FIND_SYNCWORD)      res = UMC_NOT_FIND_SYNCWORD;    else if (st == AAC_UNSUPPORTED)      res = UMC_UNSUPPORTED;    else if (st == AAC_BAD_PARAMETER)      res = UMC_UNSUPPORTED;    else      res = UMC_UNSUPPORTED;    return res;  }};      // namespace UMC

⌨️ 快捷键说明

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