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

📄 cvideomixcontroller.h

📁 最近在学习directshow, Directshow实务精选的源代码
💻 H
字号:
//
// CVideoMixController.h
//

#ifndef __H_CVideoMixController__
#define __H_CVideoMixController__

#define RGB565_MASK_RED    0xF800
#define RGB565_MASK_GREEN  0x07E0
#define RGB565_MASK_BLUE   0x001F

#define RGB32_MASK_RED    0x00FF0000
#define RGB32_MASK_GREEN  0x0000FF00
#define RGB32_MASK_BLUE   0x000000FF

#define DEFAULT_RGB565_DRIFT   8
#define DEFAULT_RGB32_DRIFT    24

#define BUFFERED_FRAME_COUNT   3

#include "VideoKeyerDefs.h"
#include "CFrameList.h"
#include "IVideoKeyer.h"

class CVideoMixController
{
private:
	// Mixing buffer to hold frames
	CFrameList *  mMixingFrames;
	long          mMixingFrameSize;  // Input video info
	long          mTotalPixels;
	WORD          mBitCount;

	BOOL        mEOSMixing;          // Running status
	BOOL        mEOSMainVideo;
	BOOL        mStopped;
	BOOL        mMixingFlushing;

	DETECT_TYPE  mDetectType;
	BOOL         mDetectOnceFinished;
	BYTE         mBackColorR;
	BYTE         mBackColorG;
	BYTE         mBackColorB;
	BYTE         mBackDrift;

	BOOL		 mIsMMXSupported;

public:
	CVideoMixController();
	~CVideoMixController();

private:
	void ReleaseMixingBuffer(void);

	__inline BYTE MyAbs(__int16 inValue);
	__inline void ActualMixing16Bits(BYTE * outPrimary, BYTE * inMixing);
	__inline void ActualMixing32Bits(BYTE * outPrimary, BYTE * inMixing);

	__inline void IdealMixing16Bits(BYTE * outPrimary, BYTE * inMixing);
	__inline void IdealMixing32Bits(BYTE * outPrimary, BYTE * inMixing);

	BOOL IsMMXSupported(void);
	void IdealMMXMixing16Bits(BYTE * outPrimary, BYTE * inMixing);

public:
	void Start(void);
	void Stop(void);
	void SetInputVideoInfo(VIDEOINFOHEADER * inInfo);

	// Interface methods
	void SetDetectType(DETECT_TYPE inType);
	void GetDetectType(DETECT_TYPE * outType);
	void SetBackgroundColor(BYTE inRed, BYTE inGreen, BYTE inBlue);
	void GetBackgroundColor(BYTE * outRed, BYTE * outGreen, BYTE * outBlue);

	HRESULT ReceiveMixingVideo(IMediaSample * inMixingSample);
	HRESULT MixingEndOfStream(void);
	HRESULT MixingBeginFlush(void);
	HRESULT MixingEndFlush(void);

	HRESULT DoMixing(IMediaSample * inMainSample);
	HRESULT MainVideoEndOfStream(void);
};

#endif // __H_CVideoMixController__

⌨️ 快捷键说明

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