📄 umc_cyclic_buffer.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_CYCLIC_BUFFER_H#define __UMC_CYCLIC_BUFFER_H#include "umc_media_buffer.h"#include "umc_splitter.h"#include "vm_thread.h"#include "umc_event.h"#include "umc_mutex.h"namespace UMC{class SampleInfo{public: double m_dTime; // (double) PTS of media sample double m_dTimeAux; // (double) Additional time stamp, it can be interpretet as DTS of end time size_t m_lDataSize; // (size_t) media sample size size_t m_lBufferSize; // (size_t) media sample buffer size vm_byte *m_pbData; // (vm_byte *) pointer to data SampleInfo *m_pNext; // (SampleInfo *) pointer to next media sample info};class LinearBuffer : public MediaBuffer{ DYNAMIC_CAST_DECL(LinearBuffer, MediaBuffer)public: // Default constructor LinearBuffer(void); // Destructor virtual ~LinearBuffer(void); // Initialize buffer virtual Status Init(MediaReceiverParams* init); // Lock input buffer virtual Status LockInputBuffer(MediaData* in); // Unlock input buffer virtual Status UnLockInputBuffer(MediaData* in, Status StreamStatus = UMC_OK); // Lock output buffer virtual Status LockOutputBuffer(MediaData* out); // Unlock output buffer virtual Status UnLockOutputBuffer(MediaData* out); // Stop buffer virtual Status Stop(void); // Release object virtual Status Close(void); // Reset object virtual Status Reset(void);protected: vm_mutex m_synchro; // (vm_mutex) synchro object vm_byte *m_pbAllocatedBuffer; // (vm_byte *) pointer to allocated unaligned buffer size_t m_lAllocatedBufferSize; // (size_t) size of allocated buffer vm_byte *m_pbBuffer; // (vm_byte *) pointer to allocated buffer size_t m_lBufferSize; // (size_t) size of using buffer vm_byte *m_pbFree; // (vm_byte *) pointer to free space size_t m_lFreeSize; // (size_t) size of free space size_t m_lInputSize; // (size_t) size of input data potion vm_byte *m_pbUsed; // (vm_byte *) pointer to used space size_t m_lUsedSize; // (size_t) size of used space size_t m_lDummySize; // (size_t) size of dummy size at end of buffer size_t m_lOutputSize; // (size_t) size of output data potion SampleInfo *m_pSamples; // (SampleInfo *) queue of filled sample info SampleInfo *m_pFreeSampleInfo; // (SampleInfo *) queue of free sample info structs bool m_bEndOfStream; // (bool) end of stream reached bool m_bQuit; // (bool) end of stream reached and buffer is empty MediaBufferParams m_Params; // (MediaBufferParams) parameters of current buffer};class SampleBuffer : public MediaBuffer{ DYNAMIC_CAST_DECL(SampleBuffer, MediaBuffer)public: // Default constructor SampleBuffer(void); // Destructor virtual ~SampleBuffer(void); // Initialize buffer virtual Status Init(MediaReceiverParams* init); // Lock input buffer virtual Status LockInputBuffer(MediaData* in); // Unlock input buffer virtual Status UnLockInputBuffer(MediaData* in, Status StreamStatus = UMC_OK); // Lock output buffer virtual Status LockOutputBuffer(MediaData* out); // Unlock output buffer virtual Status UnLockOutputBuffer(MediaData* out); // Stop buffer virtual Status Stop(void); // Release object virtual Status Close(void); // Reset object virtual Status Reset(void);protected: vm_mutex m_synchro; // (vm_mutex) synchro object vm_byte *m_pbAllocatedBuffer; // (vm_byte *) pointer to allocated unaligned buffer size_t m_lAllocatedBufferSize; // (size_t) size of allocated buffer vm_byte *m_pbBuffer; // (vm_byte *) pointer to allocated buffer size_t m_lBufferSize; // (size_t) size of using buffer vm_byte *m_pbFree; // (vm_byte *) pointer to free space size_t m_lFreeSize; // (size_t) size of free space size_t m_lInputSize; // (size_t) size of input data potion vm_byte *m_pbUsed; // (vm_byte *) pointer to used space size_t m_lUsedSize; // (size_t) size of used space size_t m_lOutputSize; // (size_t) size of output data potion SampleInfo *m_pSamples; // (SampleInfo *) queue of filled sample info bool m_bEndOfStream; // (bool) end of stream reached bool m_bQuit; // (bool) end of stream reached and buffer is empty MediaBufferParams m_Params; // (MediaBufferParams) parameters of current buffer};class VideoBufferParams : public MediaBufferParams{ DYNAMIC_CAST_DECL(VideoBufferParams, MediaBufferParams)public: // Default constructor VideoBufferParams(void); // Destructor virtual ~VideoBufferParams(void); vm_var32 m_lIPDistance; // (vm_var32) distance beetwen I,P & B frames vm_var32 m_lGOPSize; // (vm_var32) size of GOP};class VideoBuffer : public SampleBuffer{ DYNAMIC_CAST_DECL(VideoBuffer, SampleBuffer)public: // Default constructor VideoBuffer(void); // Destructor virtual ~VideoBuffer(void); // Initialize buffer virtual Status Init(MediaReceiverParams* init); // Lock input buffer virtual Status LockInputBuffer(MediaData* in); // Unlock input buffer virtual Status UnLockInputBuffer(MediaData* in, Status StreamStatus = UMC_OK); // Lock output buffer virtual Status LockOutputBuffer(MediaData* out); // Unlock output buffer virtual Status UnLockOutputBuffer(MediaData* out); // Release object virtual Status Close(void);protected: // Built help pattern bool BuildPattern(void); vm_var32 m_lFrameNumber; // (vm_var32) number of current frame vm_var32 m_lIPDistance; // (vm_var32) distance beetwen I,P & P frame(s) vm_var32 m_lGOPSize; // (vm_var32) size of GOP FrameType *m_pEncPattern; // (FrameType *) pointer to array of encoding pattern size_t m_nImageSize; // (size_t) size of frame(s)};} // namespace UMC#endif /* __UMC_CYCLIC_BUFFER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -