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

📄 umc_avi_spl_base.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_AVI_SPL_BASE_H__#define __UMC_AVI_SPL_BASE_H__#include <string.h> //  for memset function#include "vm_types.h"#include "umc_thread.h"#include "umc_avi_types.h"#include "umc_avi_channel.h"#include "umc_splitter.h"#include "umc_fifo_buf.h"#include "umc_mail_box.h"#include "umc_avi_index.h"#include "umc_splitter_ex.h"#define UMC_DVSPL_VIDEOFIFO_LEN (25)#define UMC_DVSPL_AUDIOFIFO_LEN (8)//  Defines for bSkip parameter of GetNextFrameData method#define GET_DATA_SKIP   (true)#define GET_DATA_KEEP   (false)//Base AVI splitternamespace UMC{    class AVISplitStrmStruct    {    public:        UMC::AVIStreamHeader sStrmHdr;        vm_byte* pbStrmFmt;        vm_var32 uiStrmFmtSize;        AVISplitStrmStruct(): pbStrmFmt(NULL), uiStrmFmtSize(0)        {    memset(&sStrmHdr, 0, sizeof(sStrmHdr));   }        ~AVISplitStrmStruct() {   delete[] pbStrmFmt;    }    };    class AVIStream    {    public:        enum // file reader thread state        {            AVI_SPL_THREAD_STOP         = 0x00000001,            AVI_SPL_THREAD_RUNNING      = 0x00000002,            AVI_SPL_THREAD_EOF          = 0x00000004        };        AVIChannel  m_Channel;        int         m_iStreamInd;        FifoBuffer  m_Fifo;        Thread      m_Thread;        vm_var32    m_uiThreadState;        AVIStream():        m_iStreamInd(-1)        {            m_uiThreadState = AVI_SPL_THREAD_STOP;        }        Status PickFrame();    };    class BaseAVISplitter : public Splitter    {        DYNAMIC_CAST_DECL(BaseAVISplitter, Splitter)    public:        //////////////////Constructor/destructor////////////////        BaseAVISplitter();        virtual ~BaseAVISplitter();        /////////////////////Interface overrided functions////        virtual Status          Init                (SplitterParams& init);        virtual Status          Close               (); //Close splitter        virtual Status          Stop                (); //Stop splitter        virtual Status          GetNextVideoData    (MediaData* data);        virtual Status          GetNextAudioData    (MediaData* data);        virtual Status          CheckNextVideoData  (MediaData* data);        virtual Status          CheckNextAudioData  (MediaData* data);        virtual Status          SetPosition         (double pos); // pos from 0.0 to 1.0        virtual Status          GetPosition         (double& pos);// return current position        virtual Status          GetNextVideoData(MediaData* data, vm_var32 track_idx);        virtual Status          GetNextAudioData(MediaData* data, vm_var32 track_idx);        virtual Status          GetInfo(SplitterInfo* pIinfo);        sInfo_sample            GetSamplePositionAudio(vm_var32 uiTrackIdx, vm_var32 uiSampleIdx);        sInfo_sample            GetSamplePositionVideo(vm_var32 uiTrackIdx, vm_var32 uiSampleIdx);        static UMC::Status      GetStreamsInfo(DataReader* pDataReader, SplitterInfo& rSplInfo);    protected:        enum // file reader thread state        {            AVI_SPL_THREAD_STOP         = 0x00000001,            AVI_SPL_THREAD_RUNNING      = 0x00000002,            AVI_SPL_THREAD_EOF          = 0x00000004        };        //  AVISplitter::m_uiFlags constants        enum        {            FLAGS_AVISPL_ZERO       = 0,            FLAGS_AVISPL_RECPRESENT = 0x1,            FLAGS_AVISPL_STOPFILERD = 0x2        };        //////////////////////////////////////////////////////        //////////////////////////////////////////////////////        virtual Status SelectVideoStream(vm_var32            uiInd,            VideoStreamType&    rvType,            VideoStreamSubType& rvSubType);        virtual Status SelectAudioStream(vm_var32 uiInd,            AudioStreamType& rvType);        static Status ReadFormat(DataReader* pDataReader,            Mutex&      rMutex,            MainAVIHeader& rAviHdr,            AVISplitStrmStruct*& rpStrmArray,            AVIIndex& rAviIndex,            vm_var32& ruiFlags,            tFOURCC& rVideoChunkCode);        static Status CheckForREC_(AVIChunk& rCfgChunkRdr,            vm_var32& ruiFlags,            tFOURCC& ruiVideoChunkCode);        static Status ReadStreamsInfo(AVIChunk& rCfgChunkRdr,            AVISplitStrmStruct* pStream);        Status ExtractVideoInfo(const vm_var32 cuiStreamInd,            FifoBuffer* pFifo);        Status ExtractAudioInfo(const vm_var32 cuiStreamInd,            FifoBuffer* pFifo);        Status JumpToNewPos(double dfPos, vm_var32 uiType, vm_var32 uiIdx);        virtual void CopyChunkToFifo(vm_var32 uiType, vm_var32 uiIdx);        static unsigned int FileReadThreadProc(void* pvParam);        Status StartFileRdThrd();        virtual Status SelectStreams(SplitterParams& rInitParams);        Status FillVideoInfo(const vm_var32 cuiIdx, sVideoStreamInfo* pVinfo);        Status FillAudioInfo(const vm_var32 cuiIdx, sAudioStreamInfo* pAinfo);        UMC::MainAVIHeader m_sAviHdr;        AVISplitStrmStruct* m_pStreams;        AVIStream* m_pVideoStreams;        AVIStream* m_pAudioStreams;        vm_var32 m_uiVideoStreamCount;        vm_var32 m_uiAudioStreamCount;        double m_dfCurAudioTime;        MailBox<double> m_NewPosMailBox;        tFOURCC m_VideoChunkCode;        Mutex       m_ObjAccessMut;        Mutex       m_DataReaderMut;        vm_var32 m_uiFlags;        AVIIndex m_AviIndex;    }; // class BaseAVISplitterBase : public Splitter} // namespace UMC#endif /* __UMC_AVI_SPL_BASE_H__ */

⌨️ 快捷键说明

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