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

📄 lrecctl.h

📁 jpeg and mpeg 编解码技术源代码
💻 H
字号:
#ifndef __LRECCTL_H__
#define __LRECCTL_H__

#ifdef	__RECCTL_CPP__
#define GLOBAL
#else	// !__RECCTL_CPP__
#define GLOBAL	extern
#endif	// __RECCTL_CPP__

#ifdef __cplusplus
extern "C" {
#endif	// __cplusplus

#define PWM_RECCTL_INIT					(WM_USER + 1)
#define PWM_RECCTL_START_WAIT_EVENT		(WM_USER + 2)
#define PWM_RECCTL_STOP_CAPTURE			(WM_USER + 3)
#define PWM_RECCTLL_CLOSE_THREAD		(WM_USER + 4)

#define RECCTL_CONFIG_REGISTRY		"SOFTWARE\\MPEG-I\\WMPEG200"
#define RECCTL_LOG_FILENAME			"\\RecCtl.log"

#define USE_LOG_FILE				"UseLogFile"
#define AUDIO_INPUT_SOURCE			"FromSoundCard"
#define AUDIO_PLAYBACK_PCM			"PlayPCM"
#define ADJUST_QUALITY_TO_BUS		"AdjustQualityToBus"
#define OUT_OF_SYNC_THRESHOLD		"OutOfSyncThreshold"
#define LOG_QUEUE_INFO				"LogQueueInfo"
#define MUX_FREE_RUN				"MuxFreeRun"

#define	DEFAULT_AUDIO_BIT_RATE		224
#define	DEFAULT_SUDIO_SAMPLE_RATE	44100
#define	DEFAULT_VIDEO_BIT_RATE		1150000
#define	DEFAULT_VIDEO_QUALITY		8

typedef struct _RECCTL_AUDIO_BITRATE_TRANSLATE
{
	DWORD						dwAudioBitRate;
	MPJ_AudioEncodingBitRate	KMAudioBitRate;
} RECCTL_AUDIO_BITRATE_TRANSLATE, *PRECCTL_AUDIO_BITRATE_TRANSLATE;

typedef struct _RECCTL_THREAD_PARAMETERS
{
	DWORD	dwSlotNumber;			// The device's slot number
	HANDLE	hThreadFinishEvent;		// The thread finish event
	HANDLE	hThreadReadyEvent;
} RECCTL_THREAD_PARAMETERS, *PRECCTL_THREAD_PARAMETERS;

typedef enum _RECCTL_WAIT_EVENTS
{
	VBV_EVENT,
	OOS_EVENT,
	TO_EVENT,
	AO_EVENT,
	VIDEO_FINISH_EVENT,
	AUDIO_FINISH_EVENT,

#ifndef	GENERAL_SYSTEM_MUXER
	SYSMUX_ERROR_EVENT,
#endif	// !GENERAL_SYSTEM_MUXER

	RECCTL_TOTAL_WAIT_EVENTS
} RECCTL_WAIT_EVENTS, *PRECCTL_WAIT_EVENTS;

typedef struct _RECCTL_GLOBAL_CONFIG
{
	int		iUseLogFile;			// Dump other information.
	int		iFromSoundCard;			// Indicate the audio input source is sound card or not.
	int		iPlaybackPCM;			// Indicate whether playback the PCM to sound card or not.
	int		iAdjustQualityToBus;	// Indicate flag for "Adjust the quality to bus" function.
	int		iOutOfSyncThreshold;	// Indicate the video out of sync threshold.
	int		iLogQueueInfo;			// Dump the queue status information.
	int		iVideoTimeOut;			// Indicate the time interval that should detect any picture.
	int		iMuxFreeRun;			// Indicate the system muxer synchronization strategy.
									// 0: MUX_AV_SYNC_BY_V_TS and 1:MUX_AV_NO_SYNC.
} RECCTL_GLOBAL_CONFIG, *PRECCTL_GLOBAL_CONFIG;

typedef struct _RECCTL_GDS
{
	PRECCTL_GLOBAL_CONFIG			pGlobalConfig;	// Point to a global configuration structure.
	COMMON_PHandleBufferFunction	pRealtimeBufferFunction;	// Point to a real time buffer handle function.
	HWND			hMessageWnd;	// The window handle that processes the messages.

	MPJ_SessionID	SessionID;		// Current session ID, MPJ_DUMMY_SESSION_ID
									// means this slot is idle now.
	MPJ_CaptureConfigValues	CaptureConfig;	// Current capture configurations.
	MPJ_StreamType	CaptureStreamType;	// The stream type user want to capture.

	HANDLE			hThread;		// The thread handle for each device slot.
	DWORD			dwThreadID;		// The thread ID for each device slot.
	HANDLE			hThreadFinishEvent;			// The thread will be ended when the event signaled.
	HANDLE			hVideoCaptureFinishEvent;	// The video thread will signale this event when capture end.
	HANDLE			hAudioCaptureFinishEvent;	// The audio thread will signale this event when capture end.
	HANDLE			hThreadReadyEvent;	// Make sure thread is ready.
	HANDLE			hThreadIdleEvent;	// Record control thread is idle when this event is on.

	MPJ_ReportEvent	VBVEvent;				// VBV underflow event
	MPJ_ReportEvent	OOSEvent;				// Video out of synchronization event
	MPJ_ReportEvent	TOEvent;				// Time out event
	MPJ_ReportEvent	AOEvent;				// Audio overflow event

	COMMON_OperationMode	dwOperationMode;
	DWORD			dwStartTicks;
	BOOL			fVideoSourceOK;	// Whether video source is OK now
	BOOL			fCaptureAV;		// This slot is capture audio and video in the same time.
	BOOL			fSpeedLock;		// Lock the audio speed
	BOOL			fPreSpeedLock;	// Prepare to lock the audio speed
	BOOL			fErrorStop;		// Indicate capture stop is caused by some error or not

//	DWORD			dwAudioBitRate;	// Indicate the audio bit rate for sound card.
	BOOL			fNeedMux;		// Indicate the streams need send to system muxer.
	int				iAudioSpeed;	// Indicate the audio encoder's power consumption. 0 is highest.
	DWORD			dwLastIncreaseSpeedTicks;
	DWORD			dwPrevQueueFullness;

	DWORD			dwOOSCount;			// Record how mamy OOS event happened.

	FILE			*fpVideoStream;		// Output video only elementary stream.

#ifdef	GENERAL_SYSTEM_MUXER
	MxHandle		SysMuxHandle;
	MxParams		SysMuxParams;
	MxBuffer		SysMuxBuffer;

#else	// !GENERAL_SYSTEM_MUXER

	HANDLE			hSysMuxErrorEvent;		// Report the SysMux thread status
	SYSMUX_CONFIG	SysMuxConfig;			// Structure for SysMux configuration
	SYSMUX_BUFFER	SysMuxBuffer;			// Structure for adding buffer to SysMux
#endif	// GENERAL_SYSTEM_MUXER
} RECCTL_GDS, *PRECCTL_GDS;

GLOBAL PRECCTL_GDS	_pGDS;				// Point to the global data structure.
GLOBAL DWORD		_dwTotalSlotnumber;	// Keep the total slots in system.
GLOBAL RECCTL_GLOBAL_CONFIG		_GlobalConfig;	// Keep the global information.
GLOBAL int			_iCaptureAVCounter;	// Record how many slots capture audio
										// and video in the same time.
GLOBAL DWORD		_dwTotalSlotNumber;	// Record the total slot number at system.

// For audio thread using
GLOBAL DWORD		_dwAudioError;
GLOBAL DWORD		_dwAudioThreadID;
GLOBAL MPJ_SessionID	_SessionID;

//GLOBAL MPJ_CaptureConfigValues	_CaptureDeafultConfig;	// Keep the current default
														// capture configuration.

GLOBAL MPJ_CaptureConfigValues	_CAPTURE_DEFAULT_CONFIG;
/* = {
		MPJ_LIVE_VIDEO,		// MPJ_CAPTURE_TYPE,
		MPJ_MPEG1,			// MPJ_COMPRESS_METHOD,
		MPJ_OFF,			// MPJ_VIDEO_IN_BLANK,
		MPJ_SIF,			// MPJ_PICTURE_RESOLUTION,
		MPJ_NTSC,			// MPJ_VIDEO_STANDARD,
		1,					// MPJ_FRAME_DISTANCE,
		8,					// MPJ_QUALITY,
		MPJ_OFF,			// MPJ_LOGO_ENABLE,
		MPJ_CONST_BIT_RATE,	// MPJ_MPEG_RC_METHOD,
		1150000,			// MPJ_MPEG_BIT_RATE,
		20,					// MPJ_MPEG_VBV_SIZE,
		19,					// MPJ_MPEG_VBV_INITIAL_FULLNES,
		1,					// MPJ_MPEG_GOP_HEAD_FREQ,
		3,					// MPJ_MPEG_SEQUENCE_HEAD_FREQ,
		1,					// MPJ_MPEG_SLICE_HEAD_FREQ,
		3,					// MPJ_MPEG_NUMBER_OF_B,
		5,					// MPJ_MPEG_INTRA_DISTANCE,
		MPJ_ON,				// MPJ_MPEG_CLOSED_GOP,
		MPJ_OFF,			// MPJ_MPEG_B_START,
		MPJ_ON,				// MPJ_MPEG_SCENE_CHANGE,
		MPJ_OFF,			// MPJ_MPEG_TELECINE,
		MPJ_ON,				// MPJ_MPEG_HALF_PEL,
		0,					// MPJ_MPEG_TC_HOUR,
		0,					// MPJ_MPEG_TC_MINUTES,
		0,					// MPJ_MPEG_TC_SECONDS,
		0,					// MPJ_MPEG_TC_FRAME_NUMBER,
		MPJ_OFF,			// MPJ_MPEG_TIME_STAMP,
		MPJ_OFF,			// MPJ_MPEG_DUPLICATE_B,
		MPJ_ON,				// MPJ_AUDIO_VIDEO_SYNC,
		MPJ_OFF,			// MPJ_AUDIO_LOSS_COMPENSATION,
		0,					// MPJ_AUDIO_COMPENSATION_VALUE,
		MPJ_RESET,			// MPJ_AUDIO_ENCODING_BIT_RATE,
		MPJ_RESET,			// MPJ_AUDIO_ORIGINAL_COPY,
		MPJ_RESET,			// MPJ_AUDIO_COPYRIGHTED_MATERIAL,
		MPJ_RESET,			// MPJ_AUDIO_EMPHASIS,
		MPJ_RESET,			// MPJ_AUDIO_MODE,
		MPJ_RESET,			// MPJ_AUDIO_EXTERNAL_SOURCE,
		MPJ_RESET			// MPJ_AUDIO_STEREO
		}	// end of _CAPTURE_DEFAULT_CONFIG
*/

GLOBAL DWORD _AUDIO_BIT_RATE_TABLE[MAX_AUDIO_ENCODING_BIT_RATE + 1];
/* =
{ 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 };
*/

//========================================
// Declare the local functions
//========================================
void InitModule( LPBYTE lpRegistryPath );
char *GetVideoRegisterName( MPJ_VideoRegisterName VideoRegisterName );
DWORD ControlThread( PRECCTL_THREAD_PARAMETERS lpThreadParam );
int WINAPI RECCTL_HandleVideoBuffer( PCOMMON_BUFFER_INFO pBufferInfo );
MPJ_AudioEncodingBitRate TranslateAudioBitRate( DWORD dwAudioBitRate );

#ifdef __cplusplus
}
#endif	// __cplusplus

#endif	// __LRECCTL_H__

⌨️ 快捷键说明

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