#ifndef IVIDEORENDERER_H #define IVIDEORENDERER_H #include #include #include namespace AVPlayer2 { namespace Core { /** * 视频渲染器状态枚举 */ enum class VideoRendererState { Stopped, // 停止状态 Playing, // 播放状态 Paused, // 暂停状态 Error // 错误状态 }; /** * 视频像素格式枚举 */ enum class PixelFormat { RGB24, // RGB 24位 RGB32, // RGB 32位 YUV420P, // YUV 4:2:0 平面格式 YUV422P, // YUV 4:2:2 平面格式 YUV444P, // YUV 4:4:4 平面格式 NV12, // NV12 格式 NV21 // NV21 格式 }; } // namespace Core namespace Types { /** * 视频格式参数 */ struct VideoFormat { int width; // 视频宽度 int height; // 视频高度 Core::PixelFormat pixelFormat; // 像素格式 float frameRate; // 帧率 int bitRate; // 比特率 }; /** * 视频帧数据 */ struct VideoFrame { unsigned char* data[4]; // 视频数据平面指针 int lineSize[4]; // 每个平面的行大小 int width; // 帧宽度 int height; // 帧高度 Core::PixelFormat pixelFormat; // 像素格式 double timestamp; // 时间戳(秒) int64_t pts; // 显示时间戳 }; /** * 渲染区域 */ struct RenderRect { int x; // X坐标 int y; // Y坐标 int width; // 宽度 int height; // 高度 }; } // namespace Types namespace Core { /** * 视频渲染器抽象接口 * 提供与平台无关的视频输出功能 */ class IVideoRenderer { public: virtual ~IVideoRenderer() = default; /** * 初始化视频渲染器 * @param format 视频格式参数 * @return 是否初始化成功 */ virtual bool initialize(const Types::VideoFormat& format) = 0; /** * 开始渲染 * @return 是否开始成功 */ virtual bool start() = 0; /** * 停止渲染 */ virtual void stop() = 0; /** * 暂停渲染 */ virtual void pause() = 0; /** * 恢复渲染 */ virtual void resume() = 0; /** * 渲染视频帧 * @param frame 视频帧数据 * @return 是否渲染成功 */ virtual bool renderFrame(const Types::VideoFrame& frame) = 0; /** * 设置渲染区域 * @param rect 渲染区域 */ virtual void setRenderRect(const Types::RenderRect& rect) = 0; /** * 获取渲染区域 * @return 当前渲染区域 */ virtual Types::RenderRect getRenderRect() const = 0; /** * 设置缩放模式 * @param keepAspectRatio 是否保持宽高比 */ virtual void setScaleMode(bool keepAspectRatio) = 0; /** * 获取当前状态 * @return 渲染器状态 */ virtual VideoRendererState getState() const = 0; /** * 获取渲染统计信息 * @param framesRendered 已渲染帧数 * @param framesDropped 丢弃帧数 */ virtual void getRenderStats(int& framesRendered, int& framesDropped) const = 0; /** * 清空渲染缓冲区 */ virtual void clearBuffer() = 0; /** * 设置状态变化回调 * @param callback 状态变化回调函数 */ virtual void setStateCallback(std::function callback) = 0; /** * 设置帧渲染完成回调 * @param callback 帧渲染完成回调函数 */ virtual void setFrameRenderedCallback(std::function callback) = 0; /** * 设置渲染错误回调 * @param callback 渲染错误回调函数 */ virtual void setErrorCallback(std::function callback) = 0; }; /** * 视频渲染器工厂接口 */ class IVideoRendererFactory { public: virtual ~IVideoRendererFactory() = default; /** * 创建视频渲染器实例 * @return 视频渲染器智能指针 */ virtual std::unique_ptr createRenderer() = 0; /** * 获取支持的视频格式列表 * @return 支持的视频格式列表 */ virtual std::vector getSupportedFormats() = 0; /** * 检查是否支持指定格式 * @param format 视频格式 * @return 是否支持 */ virtual bool isFormatSupported(const Types::VideoFormat& format) = 0; /** * 获取支持的像素格式列表 * @return 支持的像素格式列表 */ virtual std::vector getSupportedPixelFormats() = 0; }; } // namespace Core } // namespace AVPlayer2 #endif // IVIDEORENDERER_H