📄 lrecctl.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 + -