interface_headers.h 1.86 KB
#ifndef _INTERFACE_HEADERS_H_
#define _INTERFACE_HEADERS_H_


#include<string>
#include <queue>
#include <mutex>

#include "DeviceRgbMemory.hpp"

using namespace std;

/**************************************************
* 接口:DXDECODER_CALLBACK
* 功能:解码数据回调接口
* 参数:const dx_void * userPtr 用户自定义数据
*       AVFrame * gpuFrame 解码结果帧数据,在设置的对应的gpu上,要十分注意这一点,尤其是多线程情况
* 返回:无
* 备注:当解码库数据源为实时流时(RTSP/GB28181),本接
*       口内不可进行阻塞/耗时操作。当解码库数据源为
*       非实时流时(本地/网络文件),本接口可以进行
*       阻塞/耗时操作
**************************************************/
typedef void(*POST_DECODE_CALLBACK)(const void * userPtr, DeviceRgbMemory* devFrame);

typedef void(*DECODE_FINISHED_CALLBACK)(const void* userPtr);

typedef bool(*DECODE_REQUEST_STREAM_CALLBACK)(const char* deviceId);

struct FFDecConfig{
    string uri;                             // 视频地址
    POST_DECODE_CALLBACK post_decoded_cbk;  // 解码数据回调接口
    DECODE_FINISHED_CALLBACK decode_finished_cbk; // 解码线程结束后的回调接口
    string gpuid;                           // gpu id
    bool force_tcp{true};                   // 是否指定使用tcp连接
    int skip_frame{1};                      // 跳帧数
    string dec_name;

    int port;                               // gb28181接收数据的端口号
    DECODE_REQUEST_STREAM_CALLBACK request_stream_cbk;  // gb28181请求流
};

enum DECODER_TYPE{ 
    DECODER_TYPE_GB28181, 
    DECODER_TYPE_FFMPEG,
    DECODER_TYPE_DVPP
};

struct FFImgInfo{
    string dec_name;
    int width;
    int height;
    unsigned char * pData;
    int data_type;  // 默认0=rgb, 1=nv12
    long timestamp;
    long index;
};

#endif