SfxDecoder.h 3.14 KB
#ifndef __SFX__SfxDecoder__MODULE__
#define __SFX__SfxDecoder__MODULE__
#include "SfxStreamHandlerInterface.h"

#include <string>

using namespace std;

typedef enum DxLogLevel
{
    DX_LOG_LEVEL_UNKNOW = 0,        // 未知日志等级
    DX_LOG_LEVEL_INFO,              // 普通日志信息 (如:无关紧要的信息输出)
    DX_LOG_LEVEL_IMPORTANT,         // 重要的日志通知,模块一切正常(如:重要流程通知)
    DX_LOG_LEVEL_WARNING,           // 警告日志,即将可能发生致命错误(如:资源不足)
    DX_LOG_LEVEL_FATAL,             // 致命错误,模块将停止工作(如:网络断开)
	DX_LOG_LEVEL_CLEANUP            // 此模块已退出所有线程、流程,不再执行任何代码,
	                                // 通常通过该日志等级回调,实现在回调内释放模块自身
									// 本日志等级在模块生命周期内只会发生一次调用
}DxLogLevel;

typedef int (*DxLogHandler)( const void * userPtr,  DxLogLevel level, const char * log, unsigned int logLen );


typedef void(*LOG_ALL_CALLBACK)(const void * userPtr, int log_level, const char* log, unsigned int logLen);


typedef void (*DXDECODER_CALLBACK)( const void * userPtr, void * buf, unsigned int size, int width, int height, unsigned long long timestamp );


typedef struct DxDecoderConfig
{
	DxLogHandler logcbk;             // 日志回调接口
	LOG_ALL_CALLBACK log_all{ nullptr };
	void* log_user_ptr{nullptr};
	const void * userPtr;            // 用户数据
	DXDECODER_CALLBACK escbk;        // 解码后帧数据回调接口
	int devId;
	string uri;  
	string dec_name;
}DxDecoderConfig;

typedef struct DxVideoConfig        // 视频相关配置信息,根据实际应用,填充部分或全部数据
{
	float minQP;                    // 编码时最小量化步长(仅在打开编码器时填充)
	float maxQP;                    // 编码时最大量化步长(仅在打开编码器时填充)
	int width;                      // 图像宽度值
	int height;                     // 图像高度值
	int gopSize;                    // 视频流GOP大小(仅在打开编码器时填充)
	//DxCodecType codec;              // 视频编解码器类型
	unsigned int frame_count{1};
}DxVideoConfig;


class SfxDecoder
{
public:
	SfxDecoder();
	~SfxDecoder();

	bool OpenDecoder(DxDecoderConfig& cfg);

	bool isFinished();

	int CloseDecoder();

	unsigned int GetFrameCount();

public:
	DxVideoConfig m_video;
	SfxStreamHandlerInterface * m_handler;

	string m_dec_name;

private:
	static sfx_32 sfx_stdcall SfxStreamCallback( 
												const sfx_void * userPtr,
												SfxFrameType type,
												const sfx_u8 * buf, 
												sfx_u32 segLen, 
												sfx_u32 len, 
												sfx_u32 timestamp 
												);
	
	static sfx_32 sfx_stdcall SfxLogDefaultHandler(
												   const sfx_void * userPtr,
												   SfxLogLevel level,
												   const sfx_8 * log,
												   sfx_u32 logLen
												   );

private:
	DxDecoderConfig m_cfg;
	sfx_bool m_bRun;

	bool m_bReal{false};

};


#endif