IVideoRenderer.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #ifndef IVIDEORENDERER_H
  2. #define IVIDEORENDERER_H
  3. #include <functional>
  4. #include <memory>
  5. #include <vector>
  6. namespace AVPlayer2 {
  7. namespace Core {
  8. /**
  9. * 视频渲染器状态枚举
  10. */
  11. enum class VideoRendererState {
  12. Stopped, // 停止状态
  13. Playing, // 播放状态
  14. Paused, // 暂停状态
  15. Error // 错误状态
  16. };
  17. /**
  18. * 视频像素格式枚举
  19. */
  20. enum class PixelFormat {
  21. RGB24, // RGB 24位
  22. RGB32, // RGB 32位
  23. YUV420P, // YUV 4:2:0 平面格式
  24. YUV422P, // YUV 4:2:2 平面格式
  25. YUV444P, // YUV 4:4:4 平面格式
  26. NV12, // NV12 格式
  27. NV21 // NV21 格式
  28. };
  29. } // namespace Core
  30. namespace Types {
  31. /**
  32. * 视频格式参数
  33. */
  34. struct VideoFormat {
  35. int width; // 视频宽度
  36. int height; // 视频高度
  37. Core::PixelFormat pixelFormat; // 像素格式
  38. float frameRate; // 帧率
  39. int bitRate; // 比特率
  40. };
  41. /**
  42. * 视频帧数据
  43. */
  44. struct VideoFrame {
  45. unsigned char* data[4]; // 视频数据平面指针
  46. int lineSize[4]; // 每个平面的行大小
  47. int width; // 帧宽度
  48. int height; // 帧高度
  49. Core::PixelFormat pixelFormat; // 像素格式
  50. double timestamp; // 时间戳(秒)
  51. int64_t pts; // 显示时间戳
  52. };
  53. /**
  54. * 渲染区域
  55. */
  56. struct RenderRect {
  57. int x; // X坐标
  58. int y; // Y坐标
  59. int width; // 宽度
  60. int height; // 高度
  61. };
  62. } // namespace Types
  63. namespace Core {
  64. /**
  65. * 视频渲染器抽象接口
  66. * 提供与平台无关的视频输出功能
  67. */
  68. class IVideoRenderer {
  69. public:
  70. virtual ~IVideoRenderer() = default;
  71. /**
  72. * 初始化视频渲染器
  73. * @param format 视频格式参数
  74. * @return 是否初始化成功
  75. */
  76. virtual bool initialize(const Types::VideoFormat& format) = 0;
  77. /**
  78. * 开始渲染
  79. * @return 是否开始成功
  80. */
  81. virtual bool start() = 0;
  82. /**
  83. * 停止渲染
  84. */
  85. virtual void stop() = 0;
  86. /**
  87. * 暂停渲染
  88. */
  89. virtual void pause() = 0;
  90. /**
  91. * 恢复渲染
  92. */
  93. virtual void resume() = 0;
  94. /**
  95. * 渲染视频帧
  96. * @param frame 视频帧数据
  97. * @return 是否渲染成功
  98. */
  99. virtual bool renderFrame(const Types::VideoFrame& frame) = 0;
  100. /**
  101. * 设置渲染区域
  102. * @param rect 渲染区域
  103. */
  104. virtual void setRenderRect(const Types::RenderRect& rect) = 0;
  105. /**
  106. * 获取渲染区域
  107. * @return 当前渲染区域
  108. */
  109. virtual Types::RenderRect getRenderRect() const = 0;
  110. /**
  111. * 设置缩放模式
  112. * @param keepAspectRatio 是否保持宽高比
  113. */
  114. virtual void setScaleMode(bool keepAspectRatio) = 0;
  115. /**
  116. * 获取当前状态
  117. * @return 渲染器状态
  118. */
  119. virtual VideoRendererState getState() const = 0;
  120. /**
  121. * 获取渲染统计信息
  122. * @param framesRendered 已渲染帧数
  123. * @param framesDropped 丢弃帧数
  124. */
  125. virtual void getRenderStats(int& framesRendered, int& framesDropped) const = 0;
  126. /**
  127. * 清空渲染缓冲区
  128. */
  129. virtual void clearBuffer() = 0;
  130. /**
  131. * 设置状态变化回调
  132. * @param callback 状态变化回调函数
  133. */
  134. virtual void setStateCallback(std::function<void(VideoRendererState)> callback) = 0;
  135. /**
  136. * 设置帧渲染完成回调
  137. * @param callback 帧渲染完成回调函数
  138. */
  139. virtual void setFrameRenderedCallback(std::function<void(const Types::VideoFrame&)> callback) = 0;
  140. /**
  141. * 设置渲染错误回调
  142. * @param callback 渲染错误回调函数
  143. */
  144. virtual void setErrorCallback(std::function<void(const std::string&)> callback) = 0;
  145. };
  146. /**
  147. * 视频渲染器工厂接口
  148. */
  149. class IVideoRendererFactory {
  150. public:
  151. virtual ~IVideoRendererFactory() = default;
  152. /**
  153. * 创建视频渲染器实例
  154. * @return 视频渲染器智能指针
  155. */
  156. virtual std::unique_ptr<IVideoRenderer> createRenderer() = 0;
  157. /**
  158. * 获取支持的视频格式列表
  159. * @return 支持的视频格式列表
  160. */
  161. virtual std::vector<Types::VideoFormat> getSupportedFormats() = 0;
  162. /**
  163. * 检查是否支持指定格式
  164. * @param format 视频格式
  165. * @return 是否支持
  166. */
  167. virtual bool isFormatSupported(const Types::VideoFormat& format) = 0;
  168. /**
  169. * 获取支持的像素格式列表
  170. * @return 支持的像素格式列表
  171. */
  172. virtual std::vector<PixelFormat> getSupportedPixelFormats() = 0;
  173. };
  174. } // namespace Core
  175. } // namespace AVPlayer2
  176. #endif // IVIDEORENDERER_H