📄 lists.h
字号:
/***********************************************************************/
/* lists.h : Implementation of Memory Manager lists
* REALmagic Quasar Hardware Library
* Created by Kevin Vo
* Copyright Sigma Designs Inc
* Sigma Designs Proprietary and confidential
* Created on 3/20/01
* Description:
/************************************************************************/
#ifndef __LISTS_H
#define __LISTS_H
#include "constants.h"
class CBuffer
{
public:
CBuffer(void* pMemManager, unsigned long dwBufferSize, unsigned char* buffer);
~CBuffer();
unsigned long GetSize();
void* GetBuffer();
unsigned long GetActualSize();
void SetActualSize(unsigned long ulSize);
int GetRefCount();
void AddRef(void); // Increments reference count
void Release(void); // Decrements reference count
private:
void* m_pBuffer; // Audio or Video, 32KB each
unsigned long m_ulSize; // read buffer size from file.
unsigned long m_ulActualSize; // actual data size in the buffer
int m_iRefCount;
// Pointer to Memory Manager that will be used to release this buffer
// back to free buffer list
void* m_pMemManager;
CRITICAL_SECTION crBuffer;
CBuffer *next;
CBuffer *prior;
friend class CBufferList;
};
class CBufferList
{
public:
CBufferList();
~CBufferList();
void SetBuffer(CBuffer *pBuffer);
CBuffer *GetBuffer(void);
private:
CBuffer *GetCBuffer();
void SetCBuffer(CBuffer *pBuff);
CBuffer *start;
CBuffer *current;
CBuffer *last;
};
#ifdef _COM_INTERFACE_
class CIMediaSample : public IMediaSample
#else
class CIMediaSample
#endif
{
public:
CIMediaSample(void* pMemManager);
~CIMediaSample();
CBuffer* GetCBuffer(void);
void SetCBuffer(CBuffer* pBuffer);
UCHAR* GetPayload(void);
void SetPayload(UCHAR* pPayload);
ULONGLONG GetScr(void);
void SetScr(ULONGLONG scr);
INT GetPtsFlag(void);
void SetPtsDtsFlag(INT bPtsFlag);
void SetPts(ULONGLONG pts);
void SetPts(ULONGLONG pts, INT bPtsFlag);
UCHAR GetNFrameHeaders();
void SetNFrameHeaders(UCHAR nFrameHeaders);
UINT GetFirstAccessUnit();
void SetFirstAccessUnit(UINT iFirstAccessUnit);
void SetFlags(DWORD dwFlags);
DWORD GetFlags(void);
void SetCts(ULONGLONG dwCts);
ULONGLONG GetCts(void);
void SetSampleRate(LONG rate);
LONG GetSampleRate(void);
// Overloaded methods
UCHAR* GetPointer(void);
ULONGLONG GetTime(void);
UCHAR GetMediaType(void);
void SetMediaType(UCHAR a_v);
#ifdef _COM_INTERFACE_
// IMediaSample interface virtual functions
virtual HRESULT STDMETHODCALLTYPE QueryInterface(MM_REFIID riid, void**);
virtual ULONG STDMETHODCALLTYPE AddRef( void);
virtual ULONG STDMETHODCALLTYPE Release( void);
virtual HRESULT STDMETHODCALLTYPE GetPointer(BYTE**);
virtual HRESULT STDMETHODCALLTYPE GetSize(void);
virtual HRESULT STDMETHODCALLTYPE GetActualDataLength( void);
virtual HRESULT STDMETHODCALLTYPE SetActualDataLength(LONG len);
virtual HRESULT STDMETHODCALLTYPE GetMediaTime(LONGLONG*, LONGLONG*);
virtual HRESULT STDMETHODCALLTYPE SetMediaTime(LONGLONG*, LONGLONG*);
virtual HRESULT STDMETHODCALLTYPE GetMediaType(MM_AM_MEDIA_TYPE**);
virtual HRESULT STDMETHODCALLTYPE SetMediaType(MM_AM_MEDIA_TYPE*);
virtual HRESULT STDMETHODCALLTYPE GetTime(LONGLONG* timeStart, LONGLONG* timeEnd);
virtual HRESULT STDMETHODCALLTYPE SetTime(LONGLONG*, LONGLONG*);
virtual HRESULT STDMETHODCALLTYPE IsDiscontinuity( void);
virtual HRESULT STDMETHODCALLTYPE SetDiscontinuity(BOOL);
virtual HRESULT STDMETHODCALLTYPE IsPreroll( void);
virtual HRESULT STDMETHODCALLTYPE SetPreroll(BOOL);
virtual HRESULT STDMETHODCALLTYPE IsSyncPoint( void);
virtual HRESULT STDMETHODCALLTYPE SetSyncPoint(BOOL);
#else
HRESULT QueryInterface(MM_REFIID riid, void**);
ULONG AddRef( void);
ULONG Release( void);
HRESULT GetPointer(BYTE**);
HRESULT GetSize(void);
HRESULT GetActualDataLength( void);
HRESULT SetActualDataLength(LONG len);
HRESULT GetMediaTime(LONGLONG*, LONGLONG*);
HRESULT SetMediaTime(LONGLONG*, LONGLONG*);
HRESULT GetMediaType(MM_AM_MEDIA_TYPE**);
HRESULT SetMediaType(MM_AM_MEDIA_TYPE*);
HRESULT GetTime(LONGLONG* timeStart, LONGLONG* timeEnd);
HRESULT SetTime(LONGLONG*, LONGLONG*);
HRESULT IsDiscontinuity( void);
HRESULT SetDiscontinuity(BOOL);
HRESULT IsPreroll( void);
HRESULT SetPreroll(BOOL);
HRESULT IsSyncPoint( void);
HRESULT SetSyncPoint(BOOL);
#endif // _COM_INTERFACE_
private:
INT m_iCount;
UCHAR* m_pPayload;
LONG m_lPayloadLength;
UCHAR m_bMediaType;
ULONGLONG m_ullPts;
ULONGLONG m_ullScr;
ULONGLONG m_ullCts;
INT m_bPtsDtsFlag;
DWORD m_dwFlags;
UCHAR m_bNFrameHeaders;
UINT m_iFirstAccessUnit;
CBuffer* m_pCBuffer;
LONG m_lSampleRate; // For AC3 audio sample
// Pointer to Memory Manager. Use this to release MediaSample back to Memory Manager.
void* m_pMemManager;
CIMediaSample *next;
CIMediaSample *prior;
friend class CIMediaSampleList;
};
class CIMediaSampleList
{
public:
CIMediaSampleList();
~CIMediaSampleList();
CIMediaSample *GetFirstMediaSample(void);
CIMediaSample *GetMediaSample(void);
void SetMediaSample(CIMediaSample *pMedia);
void EmptyList(void);
private:
void SetCIMediaSample(CIMediaSample *pMedia);
CIMediaSample *GetCIMediaSample();
CIMediaSample *start;
CIMediaSample *current;
CIMediaSample *last;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -