cvideomixcontroller.h

来自「最近在学习directshow, Directshow实务精选的源代码」· C头文件 代码 · 共 85 行

H
85
字号
//
// 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 + =
减小字号Ctrl + -
显示快捷键?