---
title: 样例介绍
description: "单击venc_image(https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process/venc_image)获取样例"
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/aadgc/aclcppdevg_04_0044.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/aadgc/aclcppdevg_04_0044.html
indexId: 6b50a9133084f5c95e639f91d6eed2622ef8ffbe049b234220e0b1c94fa8b3f6105
---
# 样例介绍

#### 获取样例

单击venc_image(https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process/venc_image)获取样例


#### 功能描述

该样例将一张YUV420SP NV12格式的图片连续编码n次，生成一个H265格式的视频码流（n可配，通过运行应用时设置入参来配置，默认为16次）。


#### 原理介绍

在该样例中，涉及的关键功能点，如下表所示。

| 初始化 | 调用aclInit接口初始化AscendCL配置。 调用aclFinalize接口实现AscendCL去初始化。 |
| --- | --- |
| Device管理 | 调用aclrtSetDevice接口指定用于运算的Device。 调用aclrtGetRunMode接口获取软件栈的运行模式，根据运行模式的不同，内部处理流程不同。 调用aclrtResetDevice接口复位当前运算的Device，回收Device上的资源。 |
| Context管理 | 调用aclrtCreateContext接口创建Context。 调用aclrtDestroyContext接口销毁Context。 |
| 内存管理 | 调用acldvppMalloc接口申请device上内存。 调用acldvppFree释放device上的内存。 |
| 数据传输 | 如果在板端环境上运行应用，则无需进行数据传输。 |
| 媒体数据处理 | 视频编码，调用aclvencSendFrame接口将将待编码的图片传到编码器进行编码。 |


#### 目录结构

样例代码结构如下所示。

```
├── data
│   ├── dvpp_venc_128x128_nv12.yuv            //测试数据,需要按指导获取测试图片，放到data目录下
├── inc
│   ├── venc_process.h               //声明媒体数据处理相关函数的头文件
│   ├── sample_process.h               //声明模型处理相关函数的头文件
│   ├── utils.h                       //声明公共函数（例如：文件读取函数）的头文件
├── src
│   ├── acl.json               //系统初始化的配置文件
│   ├── CMakeLists.txt         //编译脚本
│   ├── main.cpp               //主函数，多图多框抠图功能的实现文件
│   ├── sample_process.cpp     //资源初始化/销毁相关函数的实现文件
│   ├── utils.cpp              //公共函数（例如：文件读取函数）的实现文件
│   ├── venc_process.cpp       //媒体数据处理相关函数的实现文件
├── CMakeLists.txt    //编译脚本，调用src目录下的CMakeLists文件
```
