跳转到主要内容

视频解码

‘视频解码’部分允许开发人员通过硬件或软件视频解码能力增强TouchGFX HAL。

TouchGFX Generator视频解码设置

Further reading
有关如何在TouchGFX中进行MJPEG Video Decoding(视频解码)的详细信息,请参阅MJPEG Video(视频)文章。

视频软件解码允许使用与应用程序帧缓冲区不同的解码格式。 视频硬件解码仅支持像素格式与应用程序帧缓存相同的视频RGB缓冲区。

Note
不是所有MCU都支持硬件视频解码。

类型

默认情况下,视频解码的”类型”是禁用的。 如果STM32CubeMX中没有启用所需的外设,“软件”和“硬件”都将显示为灰色。 将鼠标悬停在灰色的选项上,看看需要哪些外设。

信息框显示“硬件”的视频类型依赖项

  • 软件 - 如果在STM32CubeMX的中间件和软件包部分启用了LIBJPEG,则可以选择“软件”选项,并生成软件解码器。 这意味着TouchGFX 生成器将生成一个软件MJPEG解码器。

STM32CubeMX项目中启用了LIBJPEG

  • 硬件 - 如果在多媒体部分启用了JPEG IP,并且在TouchGFX Generator中选择了兼容CMSIS的RTOS,则可以选择“硬件”选项。

STM32CubeMX项目中启用了JPEG IP

Further reading
有关不同视频解码场景的具体示例代码,请参见“场景”部分。

并发视频

“并发视频”选项可设置GUI中任意给定时间在同一屏幕上同时被解码的最大数量视频。 如果希望一块屏幕上只解码一个视频,则可以将“视频数量”设置为1。

最多可以同时解码4个视频。

策略

关于视频解码策略,开发人员有三种选择。

  • “直接到帧缓存区(Direct to Framebuffer)” - 视频在UI线程中被解码。 It can be slower than the other strategies, but saves RAM by not having a buffer for the video frames.
  • 单缓冲区 - 在专用的缓冲区中,以单独的任务进行视频解码。 该缓冲区位于内部存储器中。
  • 双缓冲区 - 在两个专用缓冲区中,以单独的任务进行视频解码,以牺牲内存为代价获得更好的性能。

采用单或双帧缓存区策略时,必须启用兼容CMSIS的操作系统。

关于CMSIS RTOS要求的信息框

Note
使用双缓冲区策略时,要注意内存消耗。
Further reading
关于配置用于视频解码的FreeRTOS的具体示例,请参见“场景”部分。

解码格式

对于软件解码,开发人员可以选择RGB缓冲区的像素格式,不管帧缓存区的像素格式是什么。 TouchGFX Generator生成的代码允许ChromART在不同的格式之间进行像素格式转换。

  • RGB565——视频RGB缓冲区为16位。
  • RGB888——视频RGB缓冲区为24位。
  • ARGB8888——视频RGB缓冲区为32位。 Alpha值为255。
Tip
在RGB888(24位)应用程序中使用RGB565(16位)中的视频解码缓冲区使,可帮助开发人员减少内存占用。

缓存大小:

缓冲区的宽度和高度设置必须大于或等于应用程序中的最大视频尺寸。 宽度值必须能被32整除。