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

📄 cmediacontroller.h

📁 最近在学习directshow, Directshow实务精选的源代码
💻 H
字号:
//
// CMediaController.h
// Desc: This is Controlling Center of Net Receiver Filter. Save setttings,
// create sockets, manage the network data buffer and so on.
//

#ifndef __H_CMediaController__
#define __H_CMediaController__

//#define _QOS_
//#define _DEBUG_IO

#include <stdio.h>
#include "CStreamSocket2.h"

class CFilterNetReceiver;
class CMediaController
{
private:
	CFilterNetReceiver  * mReceiveFilter;

	// Receiving buffer
	CCritSec     mSyncBuffer;
	BYTE *       mMediaBuffer;
	long         mBufferSize;
	long         mMinWorkingSize;  // When valid data less than MinWorkingSize,
	                               // we'll memmove.
	long         mReadingOffset;
	long         mWritingOffset;
	long         mCheckingSize;    // When filter connection, some data will
	                               // be read out to determine media type.
	long         mAvailabeSize;
	long		 mTotalSize;
	BOOL		 mIsWaitingToRead;
	BOOL		 mIsWaitingToAddData;

	long		 mStreamType;
	BYTE *		 mExtraBuffer;
	long		 mExtraCheckOffset; // Offset in the whole file
	long		 mExtraBufferSize; 
	long		 mExtraWritingOffset;
	long		 mExtraReadingOffset;
	BOOL		 mReadFromExtraBuffer;
	
	BOOL         mIsReadyToBeChecked;
	BOOL         mCheckingFinished;
	BOOL         mIsEOS;

	CStreamSocket2 mStrmSocket;

#ifdef _QOS_
	HANDLE		mQosThrd;
	BOOL		mMonitoring;

	BOOL StartQosMonitoring(void);
	void StopQosMonitoring(void);
	static DWORD WINAPI MonitoringThrd(void * pParam);
#endif

#ifdef _DEBUG_IO
	FILE *  fp;
#endif
	
public:
	CMediaController(CFilterNetReceiver * inFilter);
	~CMediaController();

	void StartStreaming(void);
	void StopStreaming(void);

	// Interface methods
	void SetStreamType(long inType);
	void SetStreamSocket(SOCKET inSocket);
	void SetSize(long inTotalSize, long inCheckOffset);
	BOOL StartReceiving(void);
	void StopReceiving(void);

	// Status check
	BOOL IsReadToBeChecked(void);

	// Buffer operations
	BOOL AddData(char * inData, long inLength);
	void EndOfStream(void);

	// Delegating output stream pin's methods
	HRESULT SetPointer(LONGLONG llPos);
	HRESULT Read(PBYTE pbBuffer, DWORD dwBytesToRead, BOOL bAlign, LPDWORD pdwBytesRead);
	LONGLONG Size(LONGLONG *pSizeAvailable);
	void MakeSpaceForAddData(void);
};

#endif // __H_CMediaController__

⌨️ 快捷键说明

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