.. _development_workflow: 开发流程 -------------------------------------------------------------------------------- 基于LXHPL和KA200的具体应用开发流程如下图所示。 .. figure:: _images/应用开发流程.png :alt: 应用开发流程 图 应用开发流程 用户应用开发流程具体描述如下: 1. 准备开发和运行环境。 2. 业务场景分析:根据用户真实的业务场景分析会用到LXHPL提供的模块(例如数据跨设备传输、图像预处理和模型推理),确定功能后,再明确涉及的命令或接口,详情参见 :ref:`development_scenario_analysis`。 3. 创建代码目录:在开发应用前,需要先创建目录,存放应用所涉及的代码文件(包括.c/.cpp源文件和.h/.hpp头文件)、编译脚本以及测试输入源(例如视频、图像),详情请参见 :ref:`create_code_directory`。 4. 开发应用:应用开发流程可以概括为三大流程,即初始化流程(Initialization),循环处理流程(Loop)和去初始化流程(Deinitialization)。 a. 初始化流程:具体包含创建Context、Stream,创建Event,各模块输出资源申请,模型加载,解封装初始化,视频图像编解码器初始化,详情请参见 :ref:`develop_runtime_resource_initialization_app`。初始化流程中必须在用户线程中创建Context和Stream,Context是所有Runtime资源的依赖,Stream是异步任务的载体,两者有其一未初始化都会导致业务异常。 b. 循环处理流程:包括多媒体解封装、数据跨侧传输(C2S)、视频/图像解码、图像预处理、模型推理、数据后处理、视频/图像编码、数据跨侧传输(S2C)等流程,循环处理流程中各步骤异步任务下发之后,可以选择在Stream中调用lynStreamAddAsyncCallback接口进行各异步操作对应的输入输出资源释放。 c. 去初始化流程:具体包括各模块输出资源释放(例如初始化阶段为各模块申请的内存池资源)、关闭编解码器、卸载模型、解封装去初始化、销毁Event、销毁Stream、销毁Context。此步骤中的可选流程具体要看初始化流程中是否初始化过相关模块,如果初始化过,则必须对相关资源按顺序进行销毁。 5. 编译应用程序,详情参见 :ref:`lynsdk_sample_usage_guide`。