#ifndef IMEDIADECODER_H #define IMEDIADECODER_H #include #include #include #include namespace AVPlayer2 { namespace Core { /** * 解码器状态枚举 */ enum class DecoderState { Idle, // 空闲状态 Decoding, // 解码中 Paused, // 暂停状态 Stopped, // 停止状态 Error // 错误状态 }; /** * 媒体类型枚举 */ enum class MediaType { Audio, // 音频 Video, // 视频 Subtitle // 字幕 }; /** * 解码器类型枚举 */ enum class DecoderType { Software, // 软件解码 Hardware // 硬件解码 }; } // namespace Core namespace Types { /** * 媒体包数据 */ struct MediaPacket { unsigned char* data; // 数据指针 int size; // 数据大小 double timestamp; // 时间戳(秒) int64_t pts; // 显示时间戳 int64_t dts; // 解码时间戳 int streamIndex; // 流索引 bool isKeyFrame; // 是否关键帧 Core::MediaType mediaType; // 媒体类型 }; /** * 解码器配置 */ struct DecoderConfig { Core::DecoderType type; // 解码器类型 std::string codecName; // 编解码器名称 int threadCount; // 线程数 bool enableHardwareAccel; // 是否启用硬件加速 std::string hwAccelDevice; // 硬件加速设备 }; /** * 解码统计信息 */ struct DecoderStats { int framesDecoded; // 已解码帧数 int framesDropped; // 丢弃帧数 double averageDecodeTime; // 平均解码时间(毫秒) double currentFps; // 当前解码帧率 }; } // namespace Types namespace Core { /** * 媒体解码器抽象接口 * 提供与平台无关的媒体解码功能 */ class IMediaDecoder { public: virtual ~IMediaDecoder() = default; /** * 初始化解码器 * @param config 解码器配置 * @return 是否初始化成功 */ virtual bool initialize(const Types::DecoderConfig& config) = 0; /** * 开始解码 * @return 是否开始成功 */ virtual bool start() = 0; /** * 停止解码 */ virtual void stop() = 0; /** * 暂停解码 */ virtual void pause() = 0; /** * 恢复解码 */ virtual void resume() = 0; /** * 输入媒体包进行解码 * @param packet 媒体包数据 * @return 是否输入成功 */ virtual bool inputPacket(const Types::MediaPacket& packet) = 0; /** * 获取解码后的音频帧 * @param audioFrame 输出音频帧数据 * @return 是否获取成功 */ virtual bool getAudioFrame(Types::AudioFrame& audioFrame) = 0; /** * 获取解码后的视频帧 * @param videoFrame 输出视频帧数据 * @return 是否获取成功 */ virtual bool getVideoFrame(Types::VideoFrame& videoFrame) = 0; /** * 刷新解码器缓冲区 */ virtual void flush() = 0; /** * 重置解码器 */ virtual void reset() = 0; /** * 获取当前状态 * @return 解码器状态 */ virtual DecoderState getState() const = 0; /** * 获取支持的媒体类型 * @return 支持的媒体类型列表 */ virtual std::vector getSupportedMediaTypes() const = 0; /** * 检查是否支持硬件加速 * @return 是否支持硬件加速 */ virtual bool isHardwareAccelSupported() const = 0; /** * 获取解码统计信息 * @return 解码统计信息 */ virtual Types::DecoderStats getStats() const = 0; /** * 设置状态变化回调 * @param callback 状态变化回调函数 */ virtual void setStateCallback(std::function callback) = 0; /** * 设置帧解码完成回调 * @param callback 帧解码完成回调函数 */ virtual void setFrameDecodedCallback(std::function callback) = 0; /** * 设置解码错误回调 * @param callback 解码错误回调函数 */ virtual void setErrorCallback(std::function callback) = 0; }; /** * 媒体解码器工厂接口 */ class IMediaDecoderFactory { public: virtual ~IMediaDecoderFactory() = default; /** * 创建解码器实例 * @param mediaType 媒体类型 * @return 解码器智能指针 */ virtual std::unique_ptr createDecoder(MediaType mediaType) = 0; /** * 获取支持的编解码器列表 * @param mediaType 媒体类型 * @return 支持的编解码器名称列表 */ virtual std::vector getSupportedCodecs(MediaType mediaType) = 0; /** * 检查是否支持指定编解码器 * @param codecName 编解码器名称 * @param mediaType 媒体类型 * @return 是否支持 */ virtual bool isCodecSupported(const std::string& codecName, MediaType mediaType) = 0; /** * 获取可用的硬件加速设备列表 * @return 硬件加速设备名称列表 */ virtual std::vector getAvailableHwAccelDevices() = 0; }; } // namespace Core } // namespace AVPlayer2 #endif // IMEDIADECODER_H