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

📄 umc_audio_spl.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
字号:
/*//////////////////////////////////////////////////////////////////////////////////                  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-2005 Intel Corporation. All Rights Reserved.//*/#include "umc_mpeg2_spl_defs.h"#include "umc_audio_spl.h"using namespace UMC;MPEG2AudioSplitter::MPEG2AudioSplitter():MPEG2AVSplitter(){    m_bFistAudioFrame[0] = false;    m_bFistAudioFrame[1] = false;    m_bFirstValidAPTS       = true;    m_uiTargetMPEGASyncWord = 0;}Status MPEG2AudioSplitter::ProcessPackets(int count){    Status ret = UMC_OK;    int curr_pos  = (unsigned int) m_pDataReader->GetPosition();    int full_size = (unsigned int) m_pDataReader->GetSize() - curr_pos;    int get_size  =  full_size > PORTION_TO_READ?PORTION_TO_READ:full_size;    if(get_size <= 0)//in case remote server does not return file size    {         get_size = PORTION_TO_READ;    }    m_bFistAudioFrame[0] = false;    m_bFistAudioFrame[1] = false;    m_bFirstValidAPTS = true;    m_pESArray[0].m_audioStreamInfo.streamPID = 0;    //reset chosen PIDS since only one stream availble in pure    m_iChoosedVideo = -1;    m_iChoosedAudio[0] = -1;    m_iChoosedAudio[1] = -1;    while(ret == UMC_OK && get_size && !m_bStop)    {        if(m_pESArray[0].m_audioStreamInfo.stream_type == AC3_AUDIO)        {            ret = FindAC3Sync(&m_pESArray[0],get_size);        }        else if(m_pESArray[0].m_audioStreamInfo.stream_type & MPEG1_AUDIO ||                m_pESArray[0].m_audioStreamInfo.stream_type & MPEG2_AUDIO)        {            ret = FindMPEGASync(&m_pESArray[0],get_size);        }        full_size        -= get_size;        get_size        =  full_size > PORTION_TO_READ?PORTION_TO_READ:full_size;        if(get_size <= 0)//in case remote server does not return file size        {            get_size = PORTION_TO_READ;        }    }    return ret;}Status MPEG2AudioSplitter::InitAudioFrameBuffer(){    Status umcRes;    MediaBufferParams params;    m_pAudioBuffer[0] = new LinearBuffer;    if(!m_pAudioBuffer[0])        return UMC_ALLOC;    params.m_prefInputBufferSize  = 8*1024;    params.m_numberOfFrames       = 64;    params.m_prefOutputBufferSize = 8*1024;    umcRes = m_pAudioBuffer[0]->Init(&params);    m_pAudioBuffer[1] = NULL;    return umcRes;}Status MPEG2AudioSplitter::MoveToNextSyncWord(){    m_bFistAudioFrame[0] = false;    m_bFistAudioFrame[1] = false;    m_bFirstValidAPTS = true;    return UMC_OK;}Status MPEG2AudioSplitter::GetPosition(double& pos){    if(m_pDataReader)    {        vm_var64 size      = m_pDataReader->GetSize();        vm_var64 bitrate   = m_pESArray[0].m_audioStreamInfo.bitrate;        double dur;        if(bitrate <= 0)        {            bitrate = 192;        }        dur  = ((double)(vm_var64s)(size))/((double)(vm_var64s)(bitrate*125));        pos  = (double)dur;        return UMC_OK;    }    return UMC_NOT_INITIALIZED;}Status MPEG2AudioSplitter::GetInfo(SplitterInfo* pSplInfo){    MPEG2AVSplitter::GetInfo(pSplInfo);     if(m_pDataReader)    {        vm_var64 size      = m_pDataReader->GetSize();        vm_var64 bitrate   = m_pESArray[0].m_audioStreamInfo.bitrate;        if(bitrate <= 0)        {            bitrate = 192;        }        pSplInfo->m_audio_info.duration  =            ((double)(vm_var64s)(size))/((double)(vm_var64s)(bitrate*125));    }    return UMC_OK;}

⌨️ 快捷键说明

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