3.10. sample_gpu_2d 使用说明
sample_gpu_2d 通过调用 2D GPU 接口 实现如下功能:
旋转
矩形填充
透明度混合
颜色空间转换
位块拷贝
裁剪
拼接
放大和缩放
多源透明度混合
外部内存转换成 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]
3.10.1. sample_rotation
3.10.1.1. 功能概述
功能描述:sample_rotation 完成对图像进行顺时针旋转 90 度的功能
软件架构说明

代码位置及目录结构
代码位置
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 !!!
效果说明:
程序读取输入文件后,顺时针旋转 90 度,并将翻转后结果保存文件输出, 效果如下:
输入文件:

输出文件:

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 完成对图像进行 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
│ ├── 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和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目录中读取文件RGBA8888_640x480.bmp进行不同种类的颜色空间转换首先将输入图片转换成 如下格式中的一种
再转换成输入文件的格式(
RGBA8888),并保存成文件
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
};
注意:由于程序的功能是将输入文件的颜色空间转换成 yuv_format[i],
再转换回输入文件对应的颜色空间,所以 输出文件和输入文件是没有区别的。
输入文件:

输出文件:

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
│ ├── 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和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/RGBA8888_640x480.bmp [640*480] ==> output file ./copy_sample_640_480.bmp [640*480]
Stop !!!
效果说明:
程序从
resource目录中读取文件RGBA8888_640x480.bmp进行拷贝将拷贝后的图像保存到文件:
copy_sample_640_480.bmp
输入文件:

输出文件:

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
│ ├── 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/RGBA8888_640x480.bmp [640*480] ==> output file ./crop_sample_160_120.bmp [160*120]
Stop !!!
效果说明:
程序从
resource目录中读取文件RGBA8888_640x480.bmp根据矩形框 (0,0,160,120) 对输入的文件进行裁剪
将裁剪的结果保存到
crop_sample_160_120.bmp
输入文件:

输出文件:

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 | 同步滤波器,多指 Sinc Filter 或同步插值滤波,理论上可以保持图像频域特性,减少混叠。计算量较大。 | 高质量缩放、对清晰度要求极高的图像处理。 |
| N2D_FILTER_BLUR | 模糊滤波器,进行平滑或低通处理,使图像柔化,细节减少,噪点降低。 | 降噪、背景虚化、缩略图生成。 |
| N2D_FILTER_BILINEAR | 双线性插值滤波,最常用的插值算法之一,速度快,质量中等。 | 实时缩放、视频播放、GUI渲染。 |
| 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/bit_filter_1920_1080.bmp [1920*1080] ==> output file ./resize_sample_3840_2160_sync.bmp [3840*2160]
Resize input file ../resource/bit_filter_1920_1080.bmp [1920*1080] ==> output file ./resize_sample_3840_2160_blur.bmp [3840*2160]
Resize input file ../resource/bit_filter_1920_1080.bmp [1920*1080] ==> output file ./resize_sample_3840_2160_bilinear.bmp [3840*2160]
Resize input file ../resource/bit_filter_1920_1080.bmp [1920*1080] ==> output file ./resize_sample_3840_2160_bicubic.bmp [3840*2160]
Stop !!!
效果说明:
程序从
resource目录中读取文件bit_filter_1920_1080.bmp分别使用 4 种过滤器算法,将图像横向和纵向各放大两倍
将放大的图像保存到文件
resize_sample_3840_2160_sync.bmp、resize_sample_3840_2160_blur.bmp、resize_sample_3840_2160_bilinear.bmp、resize_sample_3840_2160_bicubic.bmp、
输入文件:

3.10.9. sample_stitch
3.10.9.1. 功能概述
功能描述:sample_stitch 完成对 4 个输入的图像进行拼接成 1 个图像的功能
软件架构说明

代码位置及目录结构
代码位置
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_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 [640*480] ==> output file ./stitch_sample_1280_960.bmp [1280*960]
Stop !!!
效果说明:
程序从
resource目录中读取文件scenery01.bmp、scenery02.bmp、scenery03.bmp、scenery04.bmp将 4 张输入的图片按照 4 宫格的方式拼接成 1 张图片
将拼接后的图片保存到
stitch_sample_1280_960.bmp
输入文件 :




输出文件:

3.10.10. sample_create_n2d_buffer
3.10.10.1. 功能概述
功能描述:sample_create_n2d_buffer 实现将如下两种方式申请的内存转换成 2D GPU API 接口使用的图像缓存结构体 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并且完成拼接的操作
注意: 示例程序中会调用 cache 相关操作的接口,如下,详细请参考:Hbmem
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