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

📄 umc_mpeg2_spl_av.h

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 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 + -