3.10. sample_gpu_2d 使用说明
sample_gpu_2d 通过
旋转
矩形
填充 透明度
混合 颜色
空间 转换 位
块拷贝 裁剪
拼接
放大
和 缩放 多源
透明度 混合 外部
内存 转换成 gpu 内存
接下来,针对
注意:
每个 sample 中
增加 了 性能 测试 的 代码,其中 performance_test.sh可以测试 出 所有 sample 中 对应 接口 的 性能 数据 , 可以 在 performance_test.sh中修改 自己 感兴趣 的 分辨率 再 进行 测试。
[Case copy ] [Input 1*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 344412 us] [AverageConsume 3444 us] [FPS 290.3]
[Case format_convert ] [Input 1*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 313243 us] [AverageConsume 3132 us] [FPS 319.2]
[Case multi_source_alphablend ] [Input 4*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 541909 us] [AverageConsume 5419 us] [FPS 184.5]
[Case resize ] [Input 1*1920*1080] [Output 3840*2160] [TestTimes 100] [TotalConsume 1287105 us] [AverageConsume 12871 us] [FPS 77.7]
[Case resize ] [Input 1*1920*1080] [Output 960*540 ] [TestTimes 100] [TotalConsume 81144 us] [AverageConsume 811 us] [FPS 1232.4]
[Case stitch ] [Input 4*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 351719 us] [AverageConsume 3517 us] [FPS 284.3]
[Case stitch ] [Input 2*1920*1080] [Output 1920*540 ] [TestTimes 100] [TotalConsume 176619 us] [AverageConsume 1766 us] [FPS 566.2]
[Case alphablend ] [Input 1*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 412188 us] [AverageConsume 4121 us] [FPS 242.6]
[Case crop ] [Input 1*3840*2160] [Output 1920*1080] [TestTimes 100] [TotalConsume 314460 us] [AverageConsume 3144 us] [FPS 318.0]
[Case rectangle_fill ] [Input 1*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 298156 us] [AverageConsume 2981 us] [FPS 335.4]
[Case rotation ] [Input 1*1920*1080] [Output 1920*1080] [TestTimes 100] [TotalConsume 609109 us] [AverageConsume 6091 us] [FPS 164.2]
函数
说明:大部分 的sample都 使用 了 函数 n2d_util_load_buffer_from_raw_file, 该函数 用于 加载 不 含 数据 头 的 图片 文件,并非 表示 加载 Camera Sensor 输出 的raw图。
3.10.1. sample_rotation
3.10.1.1. 功能概述
功能sample_rotation 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_rotation
├── Makefile
└── rotation.c
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.1.2. 编译部署
编译
进入 sample_rotation 目录,执行
make编译输出
成果 物是 sample_rotation 源码 目录 下 的 rotation详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_rotation和resource上传到 开发板 /userdata目录下 进入
sample_rotation运行chmod +x rotation命令给 程序 赋予 可 执行 权限
3.10.1.3. 运行
程序运行方法
执行程序:./rotation
程序resource 目录R5G6B5_640x640.bmp 进行R5G6B5_640x640_rotated.bmp
程序参数选项说明
Usage: rotation [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./rotation -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./rotation (not need input param)
举例说明:
./rotation -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./rotation: 对输入 图像 进行 顺时针 旋转 90 度
运行效果
执行命令:
./rotation
运行日志:
./rotation
Start !!!
Save file to [./R5G6B5_640x640_rotated.bmp].
Stop !!!
效果
程序
输入

输出

3.10.2. sample_rectangle_fill
3.10.2.1. 功能概述
功能sample_rectangle_fill 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_rectangle_fill
├── Makefile
└── rectangle_fill.c
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.2.2. 编译部署
编译
进入 sample_rectangle_fill 目录,执行
make编译输出
成果 物是 sample_rectangle_fill 源码 目录 下 的 rectangle_fill详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_rectangle_fill和resource上传到 开发板 /userdata目录下 进入
sample_rectangle_fill运行chmod +x rectangle_fill命令给 程序 赋予 可 执行 权限
3.10.2.3. 运行
程序运行方法
执行程序:./rectangle_fill, 程序resource 目录R5G6B5_640x640.bmp 进行R5G6B5_640x640_rectangle_fill.bmp
程序参数选项说明
Usage: rectangle_fill [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./rectangle_fill -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./rectangle_fill (not need input param)
举例说明:
./rectangle_fill -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./rectangle_fill: 对输入 图像 进行 矩形 填充
运行效果
执行命令:
./rectangle_fill
运行日志:
./rectangle_fill
Start !!!
Save file to [./R5G6B5_640x640_rectangle_fill.bmp].
Stop !!!
效果
程序
左上角
添加 蓝色 不 透明 的 矩形框 右上角
添加 绿色 半透明 的 矩形框 左下角
添加 绿色 透明 的 矩形框 右
小角 添加 绿色 不 透明 的 矩形框
输入

输出

3.10.3. sample_alphablend
3.10.3.1. 功能概述
功能sample_alphablend 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_alphablend
├── alphablend.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.3.2. 编译部署
编译
进入 sample_alphablend 目录,执行
make编译输出
成果 物是 sample_alphablend 源码 目录 下 的 alphablend详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_alphablend上传到 开发板 /userdata目录下 进入
sample_alphablend运行chmod +x alphablend命令给 程序 赋予 可 执行 权限
3.10.3.3. 运行
程序运行方法
执行程序:./alphablend
程序参数选项说明
Usage: alphablend [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./alphablend -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./alphablend (not need input param)
举例说明:
./alphablend -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./alphablend: 执行 alpha 融合功能 的 示例
运行效果
执行命令:
./alphablend
运行日志:
./alphablend
Start !!!
Stop !!!
效果
首先
构造 两个 640*480、N2D_BGRA8888格式的 buffer 其中
一个 buffer 画 蓝色 矩形框,另外 一个 buffer 画 红色 矩形框,两个 矩形框 有 交集(查看 融合 效果) 遍历
所有 的 融合 模式,每个 融合 模式 下,改变 不同 的 透明度 将
不同 融合 模式 和 不同 透明度 的 各种 组合 的 融合 效果,保存 到 文件 中(文件名 由 融合 模式 和 透明度 参数 拼接)
src_over 模式


src_in 模式


dst_over 模式


dst_in 模式


subtract 模式


additive 模式


3.10.4. sample_format_convert
3.10.4.1. 功能概述
功能sample_format_convert 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── bit_filter_1920_1080.bmp
│ ├── nv12_1920x1080.yuv
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_format_convert
├── format_convert.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.4.2. 编译部署
编译
进入 sample_format_convert 目录,执行
make编译输出
成果 物是 sample_format_convert 源码 目录 下 的 format_convert详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_format_convert和resource上传到 开发板 /userdata目录下 进入
sample_format_convert运行chmod +x format_convert命令给 程序 赋予 可 执行 权限
3.10.4.3. 运行
程序运行方法
执行程序:./format_convert
程序参数选项说明
Usage: format_convert [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./format_convert -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./format_convert (not need input param)
举例说明:
./format_convert -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./format_convert: 执行 颜色空间 转换 功能 的 示例
运行效果
执行命令:
./format_convert
运行日志:
./format_convert
Start !!!
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv进行不同 种类 的 颜色 空间 转换 首先
将 输入 图片 转换成 如下 格式 中 的 一种 再
转换成 输入 文件 的 格式( NV12),并保存 成 文件
n2d_buffer_format_t yuv_format[] =
{
N2D_YUYV,
N2D_UYVY,
N2D_YV12,
N2D_I420,
N2D_NV12,
N2D_NV21,
N2D_NV16,
N2D_NV61,
N2D_P010_MSB,
N2D_P010_LSB,
N2D_I010
};
输入

输出

注意:在YUView软件

3.10.5. sample_copy
3.10.5.1. 功能概述
功能sample_copy 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── bit_filter_1920_1080.bmp
│ ├── nv12_1920x1080.yuv
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_copy
├── copy.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.5.2. 编译部署
编译
进入 sample_copy 目录,执行
make编译输出
成果 物是 sample_copy 源码 目录 下 的 copy详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_copy和resource上传到 开发板 /userdata目录下 进入
sample_copy运行chmod +x copy命令给 程序 赋予 可 执行 权限
3.10.5.3. 运行
程序运行方法
执行程序:./copy
程序参数选项说明
Usage: copy [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./copy -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./copy (not need input param)
举例说明:
./copy -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./copy: 执行 内存拷贝 功能 的 示例
运行效果
执行命令:
./copy
运行日志:
Run Sample[copy](sample mode ignore input param).
Start !!!
copy input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./copy_sample_1920_1080.yuv [1920*1080]
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv进行拷贝 将
拷贝 后 的 图像 保存 到 文件: copy_sample_1920_1080.yuv
输入

输出

3.10.6. sample_crop
3.10.6.1. 功能概述
功能sample_crop 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── bit_filter_1920_1080.bmp
│ ├── nv12_1920x1080.yuv
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_crop
├── crop.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例流程

3.10.6.2. 编译部署
编译
进入 sample_crop 目录,执行
make编译输出
成果 物是 sample_crop 源码 目录 下 的 crop详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_crop和resource上传到 开发板 /userdata目录下 进入
sample_crop运行chmod +x crop命令给 程序 赋予 可 执行 权限
3.10.6.3. 运行
程序运行方法
执行程序:./crop
程序参数选项说明
Usage: crop [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./crop -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./crop (not need input param)
举例说明:
./crop -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./crop: 执行图像 裁剪 功能 的 示例
运行效果
执行命令:
./crop
运行日志:
Run Sample[crop](sample mode ignore input param).
Start !!!
crop input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./crop_sample_480_270.yuv [480*270]
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv根据
矩形框 (0,0,480,270) 对 输入 的 文件 进行 裁剪 将
裁剪 的 结果 保存 到 crop_sample_480_270.yuv
输入

输出

3.10.7. sample_multi_source_alphablend
3.10.7.1. 功能概述
功能sample_multi_source_alphablend 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_multi_source_alphablend
├── multi_source_alphablend.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例程序流程

3.10.7.2. 编译部署
编译
进入 sample_multi_source_alphablend 目录,执行
make编译输出
成果 物是 sample_multi_source_alphablend 源码 目录 下 的 multi_source_alphablend详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_multi_source_alphablend和resource上传到 开发板 /userdata目录下 进入
sample_multi_source_alphablend运行chmod +x multi_source_alphablend命令给 程序 赋予 可 执行 权限
3.10.7.3. 运行
程序运行方法
执行程序:./multi_source_alphablend
程序参数选项说明
Usage: multi_source_alphablend [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./multi_source_alphablend -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./multi_source_alphablend (not need input param)
举例说明:
./multi_source_alphablend -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./multi_source_alphablend: 执行对 多个 输入 图像 同时 进行 融合 功能 的 示例
运行效果
执行命令:
./multi_source_alphablend
运行日志:
Run Sample[multi_source_alphablend](sample mode ignore input param).
Start !!!
multi_source_alphablend input file scenery0x [640*480] ==> output file ./multi_source_alphablend_sample_640_480.bmp [640*480]
Stop !!!
效果
程序
从 resource目录中 读取 文件 scenery01.bmp、scenery02.bmp、scenery03.bmp、scenery04.bmp将 4 张
图片 分别 从 不同 的 位置 进行 裁剪 后,按照 N2D_BLEND_SRC_OVER的融合 模式 进行 透明度 融合 操作 将
融合 的 结果 保存 到 文件 multi_source_alphablend_sample_640_480.bmp
输入




输出

3.10.8. sample_resize
3.10.8.1. 功能概述
功能sample_resize 完成
| 滤波器 |
含义 | 典型 |
|---|---|---|
| N2D_FILTER_SYNC | 同步 |
高质量 |
| N2D_FILTER_BLUR | 模糊 |
降噪、背景 |
| N2D_FILTER_BILINEAR | 双 |
实时 |
| N2D_FILTER_BICUBIC | 双 |
高质量 |
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── bit_filter_1920_1080.bmp
│ ├── nv12_1920x1080.yuv
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_resize
├── resize.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例程序流程

3.10.8.2. 编译部署
编译
进入 sample_resize 目录,执行
make编译输出
成果 物是 sample_resize 源码 目录 下 的 resize详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_resize和resource上传到 开发板 /userdata目录下 进入
sample_resize运行chmod +x resize命令给 程序 赋予 可 执行 权限
3.10.8.3. 运行
程序运行方法
执行程序:./resize
程序参数选项说明
Usage: resize [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./resize -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./resize (not need input param)
举例说明:
./resize -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./resize: 执行图像 放大 功能 的 示例
运行效果
执行命令:
./resize
运行日志:
Run Sample[resize](sample mode ignore input param).
Start !!!
Resize input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./resize_sample_3840_2160_sync.yuv [3840*2160]
Resize input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./resize_sample_3840_2160_blur.yuv [3840*2160]
Resize input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./resize_sample_3840_2160_bilinear.yuv [3840*2160]
Resize input file ../resource/nv12_1920x1080.yuv [1920*1080] ==> output file ./resize_sample_3840_2160_bicubic.yuv [3840*2160]
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv分别
使用 4 种 过滤器 算法,将 图像 横向 和 纵向 各 放大 两倍 将
放大 的 图像 保存 到 文件 resize_sample_3840_2160_sync.yuv、resize_sample_3840_2160_blur.yuv、resize_sample_3840_2160_bilinear.yuv、resize_sample_3840_2160_bicubic.yuv
输入

3.10.9. sample_stitch
3.10.9.1. 功能概述
功能sample_stitch 完成
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── bit_filter_1920_1080.bmp
│ ├── nv12_1920x1080.yuv
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ └── scenery04.bmp
└── sample_stitch
├── stitch.c
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序
整体流程

性能测试流程

示例程序流程

3.10.9.2. 编译部署
编译
进入 sample_stitch 目录,执行
make编译输出
成果 物是 sample_stitch 源码 目录 下 的 stitch详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_stitch和resource上传到 开发板 /userdata目录下 进入
sample_stitch运行chmod +x stitch命令给 程序 赋予 可 执行 权限
3.10.9.3. 运行
程序运行方法
执行程序:./stitch
程序参数选项说明
Usage: stitch [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./stitch -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./stitch (not need input param)
举例说明:
./stitch -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./stitch: 执行对 4 个 输入 的 图像 进行 拼接 成 1 个 图像 功能 的 示例
运行效果
执行命令: 运行日志:
Run Sample[stitch](sample mode ignore input param).
Start !!!
stitch input file pip0x [1920*1080] ==> output file ./stitch_sample_3840_2160.yuv [3840*2160]
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv4次将 4 张
输入 的 图片 按照 4 宫格 的 方式 拼接 成 1 张 图片 将
拼接 后 的 图片 保存 到 stitch_sample_3840_2160.yuv
输入

输出

3.10.10. sample_create_n2d_buffer
3.10.10.1. 功能概述
功能sample_create_n2d_buffer 实现n2d_buffer_t
物理地址
不 连续: malloc函数申请 的 内存 物理地址
连续:Hbmem 接口 申请 的 内存
软件架构说明

代码位置及目录结构
代码
位置 app/samples/platform_samples/sample_gpu_2d目录
结构
sample_gpu_2d/
├── resource
│ ├── R5G6B5_640x640.bmp
│ ├── RGBA8888_640x480.bmp
│ ├── scenery01.bmp
│ ├── scenery02.bmp
│ ├── scenery03.bmp
│ ├── scenery04.bmp
| └── nv12_1920x1080.yuv
└── sample_create_n2d_buffer
├── create_n2d_buffer.c
├── create_n2d_buffer_wraper.c
├── create_n2d_buffer_wraper.h
└── Makefile
API 流程说明
GPU 2D API 使用
准备
源 缓冲区 和 目标 缓冲区 , 源 缓冲区 和 目标 缓冲区 结构 使用 n2d_buffer_t 结构 定义 执行 blit 操作:将
执行命令 送入 指令 缓存 区 执行 commit 操作:将
指令 缓存 区中待 执行 的 指令 送入 GPU 硬件 并 阻塞 等待 GPU 硬件 处理 完成
示例
性能
测试 示例
程序,其中 提供 了 如下 3 种 示例 create_n2d_buffer_and_copy_sample: 将 hbmem 申请的 内存 转换 为 2D GPU API 接口 使用 的 图像 缓存 结构 体 n2d_buffer_thbmem 申请
的 内存 转换 为 n2d_buffer_t的本质:对 内存 描述 结构 体 另 一种 形式 的 封装,不会 涉及 内存 拷贝
create_n2d_buffer_from_normal_memory_sample: 将 malloc 申请的 内存 转换 为 2D GPU API 接口 使用 的 图像 缓存 结构 体 n2d_buffer_t,转换的 步骤 如下: create_n2d_buffer_stitch: 将 hbmem 申请的 内存 转换 为 2D GPU API 接口 使用 的 图像 缓存 结构 体 n2d_buffer_t并且完成 拼接 的 操作
注意:
示例
hb_mem_flush_bufhb_mem_invalidate_buf
示例程序整体流程

性能测试流程

create_n2d_buffer_and_copy_sample 示例流程

create_n2d_buffer_from_normal_memory_sample 示例流程

create_n2d_buffer_stitch 示例流程

3.10.10.2. 编译部署
编译
进入 sample_create_n2d_buffer 目录,执行
make编译输出
成果 物是 sample_create_n2d_buffer 源码 目录 下 的 create_n2d_buffer详细
程序 编译 方式 请 查阅 编译 方法 章节
程序部署
把
目录 sample_create_n2d_buffer和resource上传到 开发板 /userdata目录下 进入
sample_create_n2d_buffer运行chmod +x create_n2d_buffer命令给 程序 赋予 可 执行 权限
3.10.10.3. 运行
程序运行方法
执行程序:./create_n2d_buffer
程序参数选项说明
Usage: create_n2d_buffer [OPTIONS]
Options:
-m <mode> Specify running mode(0:sample, 1:performance test)
-c <image_width> Specify image width(column)
-r <image_height> Specify image height(row)
-i <iteration_number> Specify frames per second
-h <help> Show this help message
For Example, performance test: ./create_n2d_buffer -m 1 -c 1920 -r 1080 -i 1000
For Example, sample : ./create_n2d_buffer (not need input param)
举例说明:
./create_n2d_buffer -m 1 -c 1920 -r 1080 -i 1000:性能测试 模式,指定 分辨率 是 1920*1080 ,运行 1000 次,最终 打印 平均 耗时 和 帧 率 ./create_n2d_buffer: 执行把 外部 内存 转换成 2D GPU API 接口 支持 的 n2d_buffer_t功能的 示例
运行效果
执行命令:
./create_n2d_buffer
运行日志:
Run Sample[create_n2d_buffer](sample mode ignore input param).
Start !!!
Dump image to file(./create_n2d_buffer_copy_sample_hbn_1920_1080.yuv), size(3110400) succeeded
Dump image to file(./create_n2d_buffer_stitch_sample_hbn_1920_2160.yuv), size(6220800) succeeded
Dump image to file(./create_n2d_buffer_normal_memory_sample_hbn_1920_1080.yuv), size(3110400) succeeded
Stop !!!
效果
程序
从 resource目录中 读取 文件 nv12_1920x1080.yuv对
输入 图片 做 三种 操作: a. 使用 Hbmem 接口
申请 物理地址 连续 的 内存,转换成 n2d_buffer_t,使用 2D GPU 的接口 完成 图片 的 复制,结果 保存 到 文件 create_n2d_buffer_copy_sample_hbn_1920_1080.yuvb. 使用 Hbmem 在
操作 a 的 基础 上 增加 使用 2D GPU 的 接口 完成 上下 拼接 的 功能,结果 保存 到 文件 create_n2d_buffer_stitch_sample_hbn_1920_2160.yuvc. 使用
malloc申请物理地址 不 连续 的 内存,转换成 n2d_buffer_t,使用 2D GPU 的接口 完成 图片 的 复制,结果 保存 到 文件 create_n2d_buffer_normal_memory_sample_hbn_1920_1080.yuv