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

📄 lists.h

📁 神龙卡 SDK_84xx_DShow_145_02.zip 这个是 windows 上二个是linux
💻 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 + -