3.5. sample_osd 使用说明
3.5.1. 功能概述
sample_osd 完成 VSE 模块的初始化,配置输入和输出通道的参数,通过配置操作区域 Region,并将 Region 在图像上进行叠加操作 , 实现 OSD 填色、绘制线条、绘制文字和马赛克功能。
3.5.1.1. 软件架构说明

3.5.1.2. 代码位置及目录结构
代码位置
app/samples/platform_samples/sample_osd目录结构
sample_osd/
├── Makefile
└── sample_osd.c
3.5.1.3. API 流程说明

3.5.2. 编译部署
3.5.2.1. 编译
进入 sample_osd 目录,执行
make编译输出成果物是 sample_osd 源码目录下的
sample_osd详细程序编译方式请查阅 编译方法 章节
3.5.2.2. 程序部署
刷写系统软件镜像后 , 本 sample 的可执行文件位于板端 : /app/platform_samples/sample_osd。
需要使用的配置文件位于板端 : /app/platform_samples/sample_codec。
3.5.3. 运行
3.5.3.1. 程序运行方法
直接执行程序 ./sample_osd 可以获得帮助信息:
3.5.3.2. 程序参数选项说明
./sample_osd
Usage: sample_osd [OPTIONS]
Options:
-i, --input_file FILE Specify the input file
-w, --input_width WIDTH Specify the input width
-h, --input_height HEIGHT Specify the input height
-m, --work_mode 1.cover_test 2.draw_word_test 3.draw_line_test 4.mosaic_test
-f, --feedback Specify feedback mode
选项:
-i, --input_file FILE:指定输入文件,仅支持 NV12 格式的图像-w, --input_width WIDTH:指定输入宽度-h, --input_height HEIGHT:指定输入高度-m, --work_mode:指定工作模式 (1 :填色测试 2 :绘制文字测试 3 :绘制线条测试 )-m 1: OSD 填色功能测试-m 2: OSD 写字功能测试-m 3: OSD 画线功能测试-m 4: OSD 马赛克功能测试
-f, --feedback:使用 feedback 的方式去创建数据流
3.5.3.3. 运行效果
3.5.4. 运行效果说明
3.5.4.1. 填色功能
在一张 NV12 格式的 YUV 图像上的指定区域填充指定颜色的色块。
执行命令:
./sample_osd -i 1280x720_NV12.yuv -w 1280 -h 720 -m 1
日志输出:
Using input file:1280x720_NV12.yuv, input:1280x720
(read_yuvv_nv12_file):file read(1280x720_NV12.yuv), y-size(921600)
ichn input width = 1280
ichn input input_height = 720
hbn_vnode_set_ochn_attr: 0, 1280x720
hbn_vnode_set_ochn_attr: 1, 1280x720
hbn_vnode_set_ochn_attr: 2, 1280x720
hbn_vnode_set_ochn_attr: 3, 1280x720
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 2560x1440
... ( 省略 ) ...
Dump image to file(./vse_output_nv12_chn0_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn1_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn2_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn3_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn4_672x672_stride_672.yuv), size(451584) + size1(225792) succeeded
Dump image to file(./vse_output_nv12_chn5_2560x1440_stride_2560.yuv), size(11796480) + size1(5898240) succeeded
分别对 VSE 的 6 个通道执行色块填色功能,执行后,输出 6 张处理后的 NV12 格式的 YUV 图像,效果如下图所示:

3.5.4.2. 绘制文字
在一张 NV12 格式的 YUV 图像上的指定区域绘制文字。
执行命令:
./sample_osd -i 1280x720_NV12.yuv -w 1280 -h 720 -m 2
日志输出:
Using input file:1280x720_NV12.yuv, input:1280x720
(read_yuvv_nv12_file):file read(1280x720_NV12.yuv), y-size(921600)
ichn input width = 1280
ichn input input_height = 720
hbn_vnode_set_ochn_attr: 0, 1280x720
hbn_vnode_set_ochn_attr: 1, 1280x720
hbn_vnode_set_ochn_attr: 2, 1280x720
hbn_vnode_set_ochn_attr: 3, 1280x720
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 2560x1440
... ( 省略 ) ...
Dump image to file(./vse_output_nv12_chn0_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn1_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn2_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn3_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn4_672x672_stride_672.yuv), size(451584) + size1(225792) succeeded
Dump image to file(./vse_output_nv12_chn5_2560x1440_stride_2560.yuv), size(11796480) + size1(5898240) succeeded
分别对 VSE 的 6 个通道的图像上添加当前系统的日期和时间,执行后,输出 6 张处理后的 NV12 格式的 YUV 图像,效果如下图所示:

3.5.4.3. 绘制线条
在一张 NV12 格式的 YUV 图像上的指定区域绘制线条。
执行命令:
./sample_osd -i 1280x720_NV12.yuv -w 1280 -h 720 -m 3
日志输出:
Using input file:1280x720_NV12.yuv, input:1280x720
(read_yuvv_nv12_file):file read(1280x720_NV12.yuv), y-size(921600)
ichn input width = 1280
ichn input input_height = 720
hbn_vnode_set_ochn_attr: 0, 1280x720
hbn_vnode_set_ochn_attr: 1, 1280x720
hbn_vnode_set_ochn_attr: 2, 1280x720
hbn_vnode_set_ochn_attr: 3, 1280x720
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 2560x1440
... ( 省略 ) ...
Dump image to file(./vse_output_nv12_chn0_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn1_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn2_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn3_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn4_672x672_stride_672.yuv), size(451584) + size1(225792) succeeded
Dump image to file(./vse_output_nv12_chn5_2560x1440_stride_2560.yuv), size(11796480) + size1(5898240) succeeded
分别对 VSE 的 6 个通道的图像上绘制 4 条线条, 4 条线连接成一个多边形,执行后,输出 6 张处理后的 NV12 格式的 YUV 图像,效果如下图所示:

3.5.4.4. 绘制马赛克
在一张 NV12 格式的 YUV 图像上的指定区域设置马赛克。
执行命令:
./sample_osd -i 1280x720_NV12.yuv -w 1280 -h 720 -m 4
日志输出:
VSE vnode work mode: vflow
Using input file:1280x720_NV12.yuv, input:1280x720
(read_yuvv_nv12_file):file read(1280x720_NV12.yuv), y-size(921600)
ichn input width = 1280
ichn input input_height = 720
hbn_vnode_set_ochn_attr: 0, 1280x720
hbn_vnode_set_ochn_attr: 1, 1280x720
hbn_vnode_set_ochn_attr: 2, 1280x720
hbn_vnode_set_ochn_attr: 3, 1280x720
hbn_vnode_set_ochn_attr: 4, 672x672
hbn_vnode_set_ochn_attr: 5, 2560x1440
... ( 省略 ) ...
Dump image to file(./vse_output_nv12_chn0_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn1_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn2_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn3_1280x720_stride_1280.yuv), size(921600) + size1(460800) succeeded
Dump image to file(./vse_output_nv12_chn4_672x672_stride_672.yuv), size(451584) + size1(225792) succeeded
Dump image to file(./vse_output_nv12_chn5_2560x1440_stride_2560.yuv), size(3686400) + size1(1843200) succeeded
分别对 VSE 的 6 个通道的图像上绘制 400 * 200 的长方向马赛克区域,执行后,输出 6 张处理后的 NV12 格式的 YUV 图像,效果如下图所示:
