📄 umc_avi_spl_base.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 + -