📄 umc_mpeg2_spl_av.h
字号:
/*////////////////////////////////////////////////////////////////////////////////// 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.//*/#ifndef __UMC_AUDIO_SPL_AV_H__#define __UMC_AUDIO_SPL_AV_H__#include "umc_mpeg2_spl_base.h"#include "umc_mpeg4_pure_detect.h"//Base mpeg2 splitter extended with audio and video splitternamespace UMC{ typedef struct __StartCodePos { unsigned int m_startCode; unsigned int m_StartCodePos; }StartCodePos; typedef struct __InfoFromPrevPES { unsigned char m_Last5Bytes[12]; // the last 5 bytes of prev. PES packet double m_video_pts; double m_video_dts; bool m_bStartInPrevPES; }InfoFromPrevPES;#define MAX_CODE_COUNT 2000#define PORTION_TO_READ 16*1024 class MPEG2AVSplitter : public MPEG2SplitterBase { public: MPEG2AVSplitter(); ~MPEG2AVSplitter() { } public: virtual Status GetInfo(SplitterInfo* pSplInfo); virtual Status Close(); protected: bool m_bFistAudioFrame[2]; bool m_bFirstValidAPTS; bool m_bFirstValidVPTS; unsigned int m_uiTargetMPEGASyncWord; //unsigned char m_previous3bytes[6]; this param should be replaced by m_InfoFromPrevPES InfoFromPrevPES m_InfoFromPrevPES; int m_returnedbytes; // to be taken before next, from [2] to [0] StartCodePos m_pStartCodes[MAX_CODE_COUNT]; int m_uiStartCodePos; int m_uiStartCodeOff; //temporary locked buffer for output frames MediaData m_lockedVideoBuffer; MediaData m_startCodesData; //temporary buffer with have read data from stream MediaData m_readVideoStream; //temporary allocated buffer, assigned as pointer //for m_readVideoStream, size is depent on system type unsigned char* m_pTmpDataBuffAct; //flag signals was main video header, like Sequence //Header for MPEG1/2 or SPS for H.264, find bool m_bSequenceFound; int m_isInFrame; // slice data started H264Headers m_h264Headers; unsigned int m_uiVideoAcceptanceLevel; bool m_bForwardDirection; protected: virtual void FlushBuffers (); virtual Status InitVideoHelperBuffer(int size); virtual Status CheckEndian(bool wantSwap); virtual bool IsAcceptableVideoBuffer() {return true;} //audio part Status FindMPEGASync (ElementaryStream* pEs,int size); Status FindAC3Sync (ElementaryStream* pEs, int size); Status FindPCM (int len); Status FindLPCM (int len); //video part Status ParseMPEG2SeqHeader (ElementaryStream* pES, unsigned char* ptr, int size); Status FindH263StartCode(MediaData* input, MediaData* output, InfoFromPrevPES & sInfoFromPrevPES, StartCodePos* pStartCodePos, unsigned int& rStartCodeMax, unsigned int uiStartCodeOff, bool breakIfSeq, bool& isSeqFound); Status FindH261StartCode(MediaData* input, MediaData* output, InfoFromPrevPES & sInfoFromPrevPES, StartCodePos* pStartCodePos, unsigned int& rStartCodeMax, unsigned int uiStartCodeOff, bool breakIfSeq, bool& isSeqFound); Status FindH264StartCode(MediaData* input, MediaData* output, InfoFromPrevPES & sInfoFromPrevPES, StartCodePos* pStartCodePos, unsigned int& rStartCodeMax, unsigned int uiStartCodeOff, bool breakIfSeq, bool& isSeqFound, bool& isNextAfterSeqFound); Status FindMPEG2StartCode(MediaData* input, MediaData* output, InfoFromPrevPES & sInfoFromPrevPES, StartCodePos* pStartCodePos, unsigned int& rStartCodeMax, unsigned int uiStartCodeOff, bool breakIfSeq, bool& isSeqFound, int flagInit); Status FindMPEG4StartCode(MediaData* input, MediaData* output, InfoFromPrevPES & sInfoFromPrevPES, StartCodePos* pStartCodePos, unsigned int& rStartCodeMax, unsigned int uiStartCodeOff, bool breakIfSeq, bool& isSeqFound); void Swap4BytesH264(unsigned char* ptr, int& size); void Swap4BytesH264(unsigned char* ptr, int& size, Ipp32u nNumberOfStartCodes); Status FillBufferMPEG2Video(ElementaryStream* pES, int full_size, int swapFlag); Status FillBufferMPEG4Video(ElementaryStream* pES, int full_size, int swapFlag); Status FillBufferH264Video(ElementaryStream* pES, int full_size, int swapFlag); bool IsSOP(H264SH *fs,H264SH *ss,Ipp8u pic_order_cnt_type); Status FillBufferH263Video(ElementaryStream* pES, int full_size, int swapFlag); Status FillBufferH261Video(ElementaryStream* pES, int full_size, int swapFlag); void ResetInfoFromPrevPES(); Status FindIPicturePositionMPEG2(int full_size,unsigned char* LastBytes, int &ipos, int& iIFrameStart); };} // namespace UMC#endif /* __UMC_AUDIO_SPL_AV_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -