📄 umc_audio_spl.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(¶ms); 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 + -