附录
辅助功能接口
- JpegCalBackFree类辅助接口
class JpegCalBackFree:
JpegCalBackFree() :go
~JpegCalBackFree()
JpegCalBackFree(JpegCalBackFree& others)
void setBuf(void* addr4Free)
void setBuf(void* addr4Free, size_t size4Free)
void operator() ()
const JpegCalBackFree& operator= (JpegCalBackFree& others)
- AutoBuffer类辅助接口
class AutoBuffer:
AutoBuffer()
~AutoBuffer()
void Reset()
char* allocBuffer(int size)
char* getBuffer()
int getBufferSize()
AutoBuffer(const AutoBuffer&)
const AutoBuffer& operator= (const AutoBuffer&)
- HIAI_DATA_SP类辅助接口
class HIAI_DATA_SP:
HIAI_DATA_SP()
virtual ~HIAI_DATA_SP()
void setFrameIndex(unsigned long long index)
unsigned long long getFrameIndex()
void setFrameBuffer(void * frameBuff)
void * getFrameBuffer()
void setFrameSize(unsigned int size)
unsigned int getFrameSize()
不推荐使用接口列表
- class IDVPPCAPABILITY:
virtual ~IDVPPCAPABILITY(void)
virtual int process(dvppapi_ctl_msg *MSG) = 0
virtual int init() = 0
virtual int start() = 0
virtual int stop() = 0
- class IJPEGDAPI:
virtual ~IJPEGDAPI(void)
virtual int process(dvppapi_ctl_msg* MSG) = 0
virtual int init() = 0
virtual int start() = 0
virtual int stop() = 0
- class IJPEGEAPI:
virtual ~IJPEGEAPI(){}
virtual int process(dvppapi_ctl_msg* MSG) = 0
virtual int init() = 0
virtual int start() = 0
virtual int stop() = 0
- class IVDECAPI:
virtual ~IVDECAPI(void)
virtual int process(dvppapi_ctl_msg* MSG) = 0
virtual int init() = 0
virtual int start() = 0
virtual int stop() = 0
- class IVENCAPI:
virtual ~IVENCAPI(void)
virtual int process(dvppapi_ctl_msg* MSG) = 0
virtual int init() = 0
virtual int start() = 0
- class IVPCAPI:
virtual ~IVPCAPI(void)
virtual int process(dvppapi_ctl_msg* MSG) = 0
virtual int init() = 0
virtual int start() = 0
virtual int stop() = 0
DVPP执行器样例使用说明
DVPP执行器工具集成了DVPP的六个基础功能,包括VPC、JPEGE、JPEGD、VENC、VDEC以及PNGD。
环境准备
- 将编译生成的可执行文件“sample_dvpp_hlt_ddk”复制到Device侧任意路径。
依赖SO为: libc_sec.so, libDvpp_api.so, libDvpp_jpeg_decoder.so, libDvpp_jpeg_encoder.so, libDvpp_png_decoder.so, libDvpp_vpc.so, libOMX_hisi_video_decoder.so, libOMX_hisi_video_encoder.so, libslog.so
这些SO默认已存在deivce侧的“/usr/lib64”目录,用户无需单独拷贝。
- 输入数据文件放入到可执行文件所在路径下,运行如下命令,其中,paramList是DVPP执行器样例入参说明中介绍的参数。
./sample_dvpp_hlt_ddk paramList。
DVPP执行器样例入参说明
参数 |
描述 |
---|---|
img_width |
输入图片的宽度。 |
img_height |
输入图片的高度。 |
in_format |
|
out_format |
VPC输出图片格式如下:
|
yuvStoreType |
VENC输入yuv数据的存储格式如下:
|
inWidthStride |
VPC输入图像宽度方向的步长。详细见入参:VpcUserImageConfigure中 widthStride的描述。 |
inHighStride |
VPC输入图像高度方向的步长。详细见入参:VpcUserImageConfigure中 heightStride的描述。 |
outWidthStride |
VPC输出图片的宽步长,需要16对齐。 |
outHighStride |
VPC输出图片的高步长,需要2对齐; |
hmin |
VPC用户指定抠图区域左偏移,必须为偶数。 |
hmax |
VPC用户指定抠图区域右偏移,必须为奇数。 |
vmin |
VPC用户指定抠图区域上偏移,必须为偶数。 |
vmax |
VPC用户指定抠图区域下偏移,必须为奇数。 |
outLeftOffset |
VPC用户指定输出区域左偏移,必须为偶数。 |
outRightOffset |
VPC用户指定输出区域右偏移,必须为奇数。 |
outUpOffset |
VPC用户指定输出区域上偏移,必须为偶数。 |
outDownOffset |
VPC用户指定输出区域下偏移,必须为奇数。 |
out_width |
输出图像宽度。 |
out_high |
输出图像高度。 |
in_image_file |
输入图像文件的路径,包含文件名。 |
out_image_file |
输出图像文件的路径,包含文件名。 |
rank |
|
transform |
PNGD处理图像时的转换标志:
|
test_type |
输入数据:1、2、3、4、5、6、7、8、9、10、12。
|
VPC使用说明
VPC基础功能1
./sample_dvpp_hlt_ddk --in_image_file dvpp_vpc_1920x1080_nv12.yuv --out_image_file vpc_out.yuv --inWidthStride 1920 --inHighStride 1080 --in_format 1 --out_format 0 --hmax 1919 --hmin 0 --vmax 999 --vmin 0 --outLeftOffset 0 --outRightOffset 719 --outUpOffset 0 --outDownOffset 719 --outWidthStride 720 --outHighStride 720 --test_type 1
示例描述:调用VPC实现图像的裁剪、缩放。
- 输入图像:
- 宽1920像素,高1080像素、格式为yuv420sp、名称为"dvpp_vpc_1920x1080_nv12.yuv”的图像。
- 与可执行文件放在同一目录下。
- 输出图像:
- 宽720像素、高720像素、格式为yuv420sp(nv12)、名称为“vpc_out.yuv”的图像
- 生成的图像与可执行文件在同一目录下。
- 用户可以使用图像显示软件打开vpc_out.yuv图像进行正确性验证。
VPC基础功能2
./sample_dvpp_hlt_ddk --test_type 2
示例描述:本命令实现4个功能,调用VPC实现原图缩放、抠图缩放、一图多框和8k图像缩放功能。
- 输入图像:
- 宽1920像素、高1080像素、格式为yuv420sp nv12、名称为“dvpp_vpc_1920x1080_nv12.yuv”的图像。
- 宽8192像素、高8192像素、格式为yuv420sp nv12、名称为“dvpp_vpc_8192x8192_nv12.yuv”的图像。
- 与可执行文件放在同一目录下。
- 输出图像:
- NewVpcTest1函数实现1080p yuv420sp图像缩小至1280*720 yuv420sp(nv12),输出文件名为“NewVpcTest1Out.yuv”。
- NewVpcTest2函数实现1080p yuv420sp图像中抠一张子图,并贴图至输出图片的指定位置,输出文件名为“NewVpcTest2Out.yuv”,该文件像素是1280*720,格式是yuv420sp。
- NewVpcTest3函数实现1080p yuv420sp图像中抠五张子图,并贴图至输出图片的指定位置,输出文件名为“NewVpcTest3_*Out.yuv”。该文件像素是1280*720,格式是yuv420sp。
- NewVpcTest4函数实现8192*8192的 yuv420sp图像缩放至4000*4000的yuv420sp图像,输出文件名为“NewVpcTest4Out.yuv”。
- 生成的图像与可执行文件在同一目录下。
- 用户可以使用图像显示软件打开图像进行正确性验证。
VDEC使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_vdec_h264_1frame_bp_51_1920x1080.h264 --out_image_file h264_image --in_format 0 --test_type 3 ./sample_dvpp_hlt_ddk --in_image_file dvpp_vdec_h265_1frame_mp_51_1920x1080.h265 --out_image_file h265_image --in_format 1 --test_type 3
示例描述:本命令用于调用VDEC解码*.h264和*.h265格式的码流,并调用VPC对解码后图像进行解压缩成yuv格式图像。
- 输入视频:
- 宽1920像素、高1080像素、名称为“dvpp_vdec_h264_1frame_bp_51_1920x1080.h264”的码流。
- 宽1920像素、高1080像素、名称为“dvpp_vdec_h265_1frame_mp_51_1920x1080.h265”的码流。
- 与可执行文件放在同一目录下。
- 输出图像:
- 宽1920像素、高1080像素、格式为YUV420sp的图像。
- 针对h264码流的解码,在“output_dir”目录下生成名称为“h264_image*”的图片,当前视频中只有一帧,所以只输出一张图像,如果视频中有多帧,则输出多张图像。
- 针对h265码流的解码,在“output_dir”目录下生成名称为“h265_image*”的图片,当前视频中只有一帧,所以只输出一张图像,如果视频中有多帧,则输出多张图像。
- 用户可以使用图像显示软件打开“h264_image*”、“h265_image*”图像进行正确性验证。
VENC使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_venc_128x128_nv12.yuv --img_width 128 --img_height 128 --in_format 0 --yuvStoreType 0 --test_type 4
示例描述:本命令用于调用VENC将yuv图片编码成h265格式的码流。
- 输入图像:
- 宽128像素、高128像素、格式为yuv420sp nv12、名称为“dvpp_venc_128x128_nv12.yuv”的图像。
- 与可执行文件放在同一目录下。
- in_format对应到入参:VencConfig中coding_type。
- yuvStoreType对应到入参:VencConfig中YUV_store_type。
- 输出视频:
- 输出名称为“venc.bin”的码流文件。
- 与可执行文件放在同一目录下。
- 用户可以使用ffmpeg解码venc.bin文件,使用命令“ffmpeg.exe -i venc.bin venc.jpg”解码,然后使用图像显示软件打开图像进行正确性校验。ffmpeg工具的官网路径为:http://ffmpeg.org/
JPEGE使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_jpege_444_1920x1080_1920_1080_nv12.yuv --img_width 1920 --img_height 1080 --in_format 16 --test_type 5 ./sample_dvpp_hlt_ddk --in_image_file dvpp_jpege_444_1920x1080_1920_1080_nv12.yuv --img_width 1920 --img_height 1080 --in_format 16 --test_type 6
示例描述:分别使用dvpp内部申请输出内存(test_type 5)和客户申请输出内存(test_type 6)两种调用方式,将yuv格式图像编码成jpg图像。
- 输入图像:
- 宽1920像素、高1080像素、格式为yuv420sp nv12、名称为“dvpp_jpege_444_1920x1080_1920_1080_nv12.yuv”的图像。
- 与可执行文件放在同一目录下。
- 输出图像:
- 宽1920像素、高1080像素、输出名称为“outfile_t*.jpg”(*为线程id)的图像。
- 与可执行文件放在同一目录下。
JPEGD使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_jpegd_decode_1920x1080.jpg --test_type 7 --rank 0 ./sample_dvpp_hlt_ddk --in_image_file dvpp_jpegd_decode_1920x1080.jpg --test_type 8 --rank 0
示例描述:分别使用dvpp内部申请输出内存(test_type 7)和客户申请输出内存(test_type 8)两种调用方式,将jpg图像解码成yuv图像。
- 输入图像:
- 宽1920像素、高1080像素、名称为“dvpp_jpegd_decode_1920x1080.jpg”的图像。
- 与可执行文件放在同一目录下。
- -- rank为0或不设置rank参数,输出NV21格式数据。-- rank不为0输出原格式的半平面数据。
- 输出图像:
- 宽1920像素、高1080像素、输出名称为“dvppapi_jpegd_wxx_hxx_fx_tx.yuv”的图像。
- 与可执行文件放在同一目录下。
- 用户可以使用图像显示软件打开输出的yuv图像进行正确性验证。
PNGD使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_pngd_1920x1080_RGBA.png --out_image_file pngd_out_RGBAtoRGB_1.rgb --test_type 9 --transform 1 ./sample_dvpp_hlt_ddk --in_image_file dvpp_pngd_1920x1080_RGBA.png --out_image_file pngd_out_RGBAtoRGB_2.rgb --test_type 10 --transform 1
示例描述:分别使用dvpp内部申请输出内存(test_type 9)和客户申请输出内存(test_type 10)两种调用方式,将png图像解码成rgb888格式图像。
- 输入图像:
- 宽1920像素、高1080像素、名称为“dvpp_pngd_1920x1080_RGBA.png”的图像。
- 与可执行文件放在同一目录下。
- 参数transform为1时,表示将rgba格式的png图片转成rgb888格式输出。
- 输出图像:
- 宽1920像素、高1080像素、分别输出名称为“pngd_out_RGBAtoRGB_1.rgb”(test_type 9)和“pngd_out_RGBAtoRGB_2.rgb”(test_type 10)的图像。
- 与可执行文件放在同一目录下。
- 用户可以使用图像显示软件打开pngd_out_RGBAtoRGB_1.rgb和pngd_out_RGBAtoRGB_2.rgb图像进行正确性验证。
JPEGD+VPC+JPEGE串联使用说明
./sample_dvpp_hlt_ddk --in_image_file dvpp_jpegd_vpc_jpege.jpg --out_image_file out_jpegd_vpc_jpege_new.jpg --hmax 1919 --hmin 0 --vmax 999 --vmin 0 --outLeftOffset 0 --outRightOffset 719 --outUpOffset 0 --outDownOffset 719 --outWidthStride 720 --outHighStride 720 --test_type 12
示例描述:JPEGD+VPC+JPEGE三个·模块串联使用的调用实例。其中中test_type 12使用的是客户申请输出内存的调用方式。此命令的功能是调用JPEGD将一张jpg图片进行解码生成yuv420 sp图片,送入VPC进行裁剪、缩放,然后将VPC的输出送给JPEGE进行编码,输出jpg图片。
- 输入图像:
- 宽1920像素、高1080像素、名称为“dvpp_jpegd_vpc_jpege.jpg”的图像。
- 与可执行文件放在同一目录下。
- 输出图像:
- 宽720像素、高720像素、名称为“out_jpegd_vpc_jpege_new.jpg”的图像。
- 与可执行文件放在同一目录下。
异常处理
当调用方出现调用DvppCtl或者DvppGetOutParameter失败时,也即调用该函数返回值为-1时,可通过Mind Studio界面的Log窗口查看日志,在ModuleName参数处选择DVPP,然后单击Search查询日志。根据Time列的时间查看最新日志,并根据日志的提示排查异常调用错误。
示例:调用方在使用VPC功能时,输入图片宽高不是128x16对齐,则在Content列的日志内容处提示如下信息。
The input image width should be divided by 128, high should be divided by 16, now width 512, high 456.
关于日志查看的详细操作,可参见《Ascend 310 Mind Studio开发辅助工具》中的 章节。