2,新增“Apps”; 3,新增“Common”; 4,新增“FileList”; 5,新增“MediaX”; 6,新增“OpenSource”; 7,新增“Samples”; 8,新增“SoftwareBusinessLines”.
127 lines
4.4 KiB
C++
127 lines
4.4 KiB
C++
#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
|