这两种方式在渲染 YUV 数据时各有优劣,具体取决于你的应用场景、代码结构以及性能要求。
方式一:直接使用 YUV 数据和 linesize 渲染
这种方式是直接操作原始的 YUV 数据和其对应的 linesize(步幅),进行渲染。
优点:
- 性能较好:由于直接使用原始数据,省去了将数据包装到
AVFrame
结构体中的开销。 - 简单直接:对于简单的渲染任务或需要快速原型开发时,这种方法更为直接。
缺点:
- 灵活性较低:缺少了
AVFrame
结构体中提供的许多便利特性,如引用计数、时间戳等元数据。 - 代码可读性较差:直接操作原始数据数组,代码可读性和维护性可能较差。
- 缺少元数据管理:无法方便地管理与帧相关的元数据(例如帧的格式、时间戳等),这些在复杂的媒体处理管道中可能是必需的。
方式二:使用 AVFrame
结构体进行渲染
这种方式是将 YUV 数据读入 AVFrame
结构体中,通过 AVFrame
的 data
和 linesize
数组进行渲染。
优点:
- 灵活性高:
AVFrame
提供了丰富的元数据(如格式、时间戳、引用计数等),方便在复杂的媒体处理流程中使用。 - 代码可读性和可维护性较好:使用
AVFrame
结构体能使代码结构更清晰,容易维护和扩展。 - 内存管理方便:
AVFrame
内置的引用计