Files
CodeRepository/Samples/Sample.Vlc/gdvlcmodule.h
chenzhen 222dda1e43 1,新增“App_ThermalImageSystem”;
2,新增“Apps”;
3,新增“Common”;
4,新增“FileList”;
5,新增“MediaX”;
6,新增“OpenSource”;
7,新增“Samples”;
8,新增“SoftwareBusinessLines”.
2026-02-14 23:03:23 +08:00

127 lines
4.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef GDVLCMODULE_H
#define GDVLCMODULE_H
#include <QString>
#ifdef _WIN32
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif
#include "vlc.h"
#define VLCMODULE_FAILED(hr) (((int)(hr)) != 0)
#define VLCMODULE_SUCCESS(hr) (((int)(hr)) == 0)
typedef unsigned int bool_t;
typedef int int32_t;
typedef unsigned int uint32_t;
#define X_FALSE 0
#define X_TRUE 1
#define X_NULL 0
#define X_ERR_OK 0
#define X_ERR_UNKNOW (-1)
//回调图像数据格式类型
typedef enum _VideoDataFormat_
{
VideoDataFormatRGBA = 0, //RGBARGBARGBA
VideoDataFormatOther,
}VideoDataFormat;
typedef void (* VIDEO_CALLBACK)(unsigned char* pFrame, long lFrameWidth, long lFrameHeight, long lFrameSize, VideoDataFormat eType, void* pUser);
//视频预览模式
typedef enum _VideoPlayMode_
{
VideoPlayModeWindow = 0, //采用窗口句柄方式预览视频,内部渲染视频帧
VideoPlayModeCallbackData = 1, //采用回调获取图像数据方式预览视频,由用户自己外部渲染视频帧
}VideoPlayMode;
typedef struct tagVIDEO_PLAY_PARAM
{
VideoPlayMode ePlayMode; //视频播放方式
void* pUserData; //用户数据指针,在回调函数中传回
void* pWindowHand; //视频显示句柄,当ePlayMode值为VideoPlayModeWindow时有效
VIDEO_CALLBACK pVideoCallback; //视频数据回调当ePlayMode值为VideoPlayModeCallbackData时有效
}VIDEO_PLAY_PARAM, *LPVIDEO_PLAY_PARAM;
class GdVlcModule
{
public:
GdVlcModule();
~GdVlcModule();
/**********************************************************/
/**
* @brief 初始化vlc模块,
* @param [in ] nArgc : 默认传入0。
* @param [in ] cArgv : 默认传入NULL。
* @return int
* - 成功,返回 0表示预览成功
* - 失败,返回错误码。
*/
static int Init(int nArgc , const char *const *cArgv);
/**********************************************************/
/**
* @brief 释放vlc模块
*/
static void UnInit(void);
/**********************************************************/
/**
* @brief 开始预览视频
* @param [in ] cUrl : 视频流地址。
* @param [in ] stParamInfo : 预览参数。
* @return int
* - 成功,返回 0表示预览成功
* - 失败,返回错误码。
*/
int StartVideoPlay(const char* cUrl, VIDEO_PLAY_PARAM stParamInfo);
/**********************************************************/
/**
* @brief 开始预览视频
*/
void StopVideoPlay(void);
bool IsPlay(){return m_bIsPlay;}
private:
void ProcssVideoCallbackFormat(char *pChroma, unsigned *pWidth, unsigned *pHeight, unsigned *pPitches, unsigned *pLines);
void ProcessVideoCallbackDisplay(void *pPicture, void *const *ppPlanes);
bool_t VideoParseWh(void* pVlcMediaPlayer, int32_t & nWidth, int32_t & nHeight);
private:
static void* VideoCallbackLock(void *pOpaque, void **ppPlanes);
static void VideoCallbackUnlock(void *pOpaque, void *pPicture, void *const *ppPlanes);
static void VideoCallbackDisplay(void *pOpaque, void *pPicture);
static unsigned VideoCallbackFormat(void **ppOpaque, char *pChroma, unsigned *pWidth, unsigned *pHeight, unsigned *pPitches, unsigned *pLines);
static void VideoCallbackEvent(const struct libvlc_event_t *pEvent, void *pData);
static libvlc_instance_t* m_pLibvlcInst;
libvlc_media_player_t* m_pLibvlcMediaPlayer;
libvlc_media_t* m_pLibvlcMedia;
bool m_bIsPlay;
unsigned char* m_pDataBuffer;
bool_t m_booltVideoParse; ///< 标识视频参数是否已经被解析
int32_t m_nVideoBits; ///< 视频图像的像素位数24 或 32
int32_t m_nVideoPitch; ///< 视频图像解码缓存的行步长(字节数)
int32_t m_nVideoWidth; ///< 视频图像的宽度
int32_t m_nVideoHeight; ///< 视频图像的高度
QString m_strUrl;
VIDEO_PLAY_PARAM m_stParamInfo;
};
#endif // GDVLCMODULE_H