接口调用流程

开发应用时,如果涉及视频解码,则应用程序中必须包含视频解码的代码逻辑,关于视频解码的接口调用流程,请先参见pyACL接口调用流程了解整体流程,再查看本节中的流程说明。关于VDEC功能的详细介绍请参见功能及约束说明

图1 视频解码流程

实现视频的解码,关键接口的说明如下:

  1. 调用acl.media.vdec_create_channel接口创建视频解码处理的通道。
    • 创建视频解码处理通道前,需先执行以下操作:
      1. 调用acl.media.vdec_create_channel_desc接口创建通道描述信息。
      2. 调用acl.media.vdec_set_channel_desc系列接口设置通道描述信息的属性,包括解码通道号、线程、回调函数、视频编码协议等,其中:
        1. 回调函数需由用户提前创建,用于在视频解码后,获取解码数据,并及时释放相关资源。

          在回调函数内,用户需调用acl.media.dvpp_get_pic_desc_ret_code接口获取“ret_code”返回码判断是否解码成功,“ret_code”“0”表示解码成功,为“1”表示解码失败。如果解码失败,需要根据日志中的返回码判断具体的问题,返回码请参见返回码说明

          解码结束后,建议用户在回调函数内及时释放VDEC的输入码流内存、输出图片内存以及相应的视频码流描述信息、图片描述信息。

        2. 线程需由用户提前创建,并自定义线程函数,在线程函数内调用acl.rt.process_report接口,等待指定时间后,触发1.b.i中的回调函数。

        如果不调用acl.media.vdec_set_channel_desc_out_pic_format接口设置输出格式,则默认使用“YUV420SP NV12”

    • acl.media.vdec_create_channel接口内部封装了如下接口,无需用户单独调用:
      1. acl.rt.create_stream接口:显式创建Stream,VDEC内部使用。
      2. acl.rt.subscribe_report接口:指定处理Stream上回调函数的线程,回调函数和线程是由用户调用acl.media.vdec_set_channel_desc系列接口时指定的。
  2. 调用acl.media.vdec_send_frame接口将视频码流解码成YUV420SP格式的图片。
    • 视频解码前,需先执行以下操作:
      • 调用acl.media.dvpp_create_stream_desc接口创建输入视频码流描述信息,并调用acl.media.dvpp_set_stream_desc系列接口设置输入视频的内存地址、内存大小、码流格式等属性。
      • 调用acl.media.dvpp_create_pic_desc接口创建输出图片描述信息,并调用acl.media.dvpp_set_pic_desc系列接口设置输出图片的内存地址、内存大小、图片格式等属性。
    • acl.media.vdec_send_frame接口内部封装了acl.rt.launch_callback接口,用于在Stream的任务队列中增加一个需要执行的回调函数。用户无需单独调用acl.rt.launch_callback接口。
    • 如果用户需要获取解码的帧序号,则可以在acl.media.vdec_send_frame接口的“user_data”参数处定义,然后解码的帧序号可以通过“user_data”参数传递给VDEC的回调函数,用于确定回调函数中处理的是第几帧数据。
  3. 调用acl.media.vdec_destroy_channel接口销毁视频处理的通道。