| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- #ifndef IVIDEORENDERER_H
- #define IVIDEORENDERER_H
- #include <functional>
- #include <memory>
- #include <vector>
- 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<void(VideoRendererState)> callback) = 0;
- /**
- * 设置帧渲染完成回调
- * @param callback 帧渲染完成回调函数
- */
- virtual void setFrameRenderedCallback(std::function<void(const Types::VideoFrame&)> callback) = 0;
- /**
- * 设置渲染错误回调
- * @param callback 渲染错误回调函数
- */
- virtual void setErrorCallback(std::function<void(const std::string&)> callback) = 0;
- };
- /**
- * 视频渲染器工厂接口
- */
- class IVideoRendererFactory {
- public:
- virtual ~IVideoRendererFactory() = default;
- /**
- * 创建视频渲染器实例
- * @return 视频渲染器智能指针
- */
- virtual std::unique_ptr<IVideoRenderer> createRenderer() = 0;
- /**
- * 获取支持的视频格式列表
- * @return 支持的视频格式列表
- */
- virtual std::vector<Types::VideoFormat> getSupportedFormats() = 0;
- /**
- * 检查是否支持指定格式
- * @param format 视频格式
- * @return 是否支持
- */
- virtual bool isFormatSupported(const Types::VideoFormat& format) = 0;
- /**
- * 获取支持的像素格式列表
- * @return 支持的像素格式列表
- */
- virtual std::vector<PixelFormat> getSupportedPixelFormats() = 0;
- };
- } // namespace Core
- } // namespace AVPlayer2
- #endif // IVIDEORENDERER_H
|