CN116366865A - 一种视频解码方法、装置、电子设备及介质 - Google Patents

一种视频解码方法、装置、电子设备及介质 Download PDF

Info

Publication number
CN116366865A
CN116366865A CN202310224279.0A CN202310224279A CN116366865A CN 116366865 A CN116366865 A CN 116366865A CN 202310224279 A CN202310224279 A CN 202310224279A CN 116366865 A CN116366865 A CN 116366865A
Authority
CN
China
Prior art keywords
decoded
decoding
video frame
video
module
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310224279.0A
Other languages
English (en)
Inventor
王立昌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202310224279.0A priority Critical patent/CN116366865A/zh
Publication of CN116366865A publication Critical patent/CN116366865A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/172Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本公开提供了一种视频解码方法、装置、电子设备及介质,涉及视频传输技术领域,尤其涉及视频解码技术领域。具体实现方案为:接收视频处理模块周期性发送的解码请求。且每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对待解码视频帧进行解码。而且,异步获取当前已完成解码的一个解码视频帧,向视频处理模块返回当前已完成解码的一个解码视频帧。从而实现了提高视频解码的速度。

Description

一种视频解码方法、装置、电子设备及介质
技术领域
本公开涉及视频传输技术领域,尤其涉及视频解码技术领域。
背景技术
随着多媒体数据的日益丰富,视频成为人们交流和学习等方面的重要数据形式。由于视频往往数据量较大,因此为保障传输速度和视频质量,对于视频的传输通常需要进行编解码。
发明内容
本公开提供了一种视频解码方法、装置、电子设备及介质。
本公开实施例的第一方面,提供了一种视频解码方法,包括:
接收视频处理模块周期性发送的解码请求;
每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对所述待解码视频帧进行解码;
异步获取当前已完成解码的一个解码视频帧,向所述视频处理模块返回当前已完成解码的一个解码视频帧。
本公开实施例的第二方面,提供了一种视频解码装置,包括:
接收模块,用于接收视频处理模块周期性发送的解码请求;
调用模块,用于每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对所述待解码视频帧进行解码;
返回模块,用于异步获取当前已完成解码的一个解码视频帧,向所述视频处理模块返回当前已完成解码的一个解码视频帧。
本公开实施例的第三方面,提供了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行第一方面中任一项所述的方法。
本公开实施例的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据第一方面中任一项所述的方法。
本公开实施例的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据第一方面中任一项所述的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是本公开实施例提供的一种视频解码方法的流程图;
图2是本公开实施例提供的另一种视频解码方法的流程图;
图3是本公开实施例提供的一种视频解码过程的示例性示意图;
图4本公开实施例提供的一种视频解码装置的结构示意图;
图5是用来实现本公开实施例的视频解码方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
由于视频的数据量较大,且数据结构较为复杂,因此对处理视频的工具效率要求较高。快速前向运动图像专家组(Fast Forward Mpeg,FFmpeg)是目前使用最广的音视频处理工具之一,能够实现视频编解码、推流拉流以及转码等功能,而且能够应用于短视频或直播等实际应用场景,具有较高的可靠性和安全性。
在FFmpeg中进行视频解码时,一般采用软件解码的方式,但软件解码依赖中央处理器(central processing unit,CPU),而CPU还需承担其他工作,导致软件解码的速度较慢。
为了提高视频解码速度,本公开实施例提供了一种视频解码方法,该方法可以应用于电子设备,具体可以应用于电子设备运行的视频处理框架中。例如,电子设备可以是服务器、台式计算机或者笔记本电脑等具备视频处理能力的设备,电子设备中的视频处理框架可以是FFmpeg或者多媒体框架库(Gstreamer)等。如图1所示,该方法包括如下步骤:
S101、接收视频处理模块周期性发送的解码请求。
视频处理模块是视频处理框架中的逻辑模块,即软件模块,用于处理视频解码流程。为方便描述,实现本公开实施例提供的视频解码方法的软件模块,称为视频解码模块。
其中,当视频处理模块需要解码待解码视频中的一个待解码视频帧时,调用视频解码模块的第一接口,从而向视频解码模块发送一次解码请求。此时解码请求中包括一个影音包(AVPacket)结构体,AVPacket中包括一个待解码视频帧以及该待解码视频帧的元数据。例如,元数据包括视频帧的尺寸、格式以及对齐信息等。其中视频帧尺寸包括宽度和高度,例如视频帧尺寸,即宽度×高度可以为4096;视频帧格式可以为颜色编码方法420(YUV420)等。
S102、每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对待解码视频帧进行解码。
视频解码模块每当接收到一个解码请求,从该解码请求包括的AVPacket中解析出待解码视频帧,并调用硬件解码器对该待解码视频帧进行解码。
本公开实施例中的硬件解码器,可以是攀登(Ascend)系列的神经网络处理器(neural-network processing units,NPU)或者数字信号处理(Digital SignalProcessing,DSP)硬件解码器等,本公开实施例对此不作具体限定。
其中,Ascend NPU是为人工智能(Artificial Intelligence,AI)数据计算领域专门设计的高性能计算芯片,是目前主流AI芯片厂商生产的主要高性能芯片,其运行能力可高达上百万亿次操作每秒(Tera Operations Per Second,TOPS),因此应用范围十分广泛。Ascend NPU具有性能强劲的数字视频处理(Digital Video Pre-Processing,DVPP)模块,在FFmpeg中使用Ascend NPU进行视频硬件解码,能够极大地提高FFmpeg的视频解码速度。而且与软件解码的方式相比,硬件解码还具有低功耗的优点。
S103、异步获取当前已完成解码的一个解码视频帧,向视频处理模块返回当前已完成解码的一个解码视频帧。
本公开实施例中,S102和S103异步执行,即每当视频解码模块接收到一个解码请求时,调用硬件解码器对该解码请求中的待解码视频帧进行解码,同时视频解码模块还获取并向视频处理模块返回当前已完成解码的一个解码视频帧。
可见,视频帧的解码过程和返回过程是异步的,使得不用等到一个视频帧解码完成并返回后,再对下一个视频帧进行进行解码,从而提高了视频解码效率。
通过上述方法,本公开实施例可以在视频处理框架中调用硬件解码器,利用硬件解码器对待解码视频帧进行解码,即使用硬件解码的方式进行视频解码。硬件解码不依赖CPU,因此与软件解码的方式相比,解码速度更快,因此本公开实施例能够提高视频解码速度。
目前,由于Ascend NPU不能支持FFmpeg,而且FFmpeg中也没有对Ascend NPU的集成方案,使得开发者无法直接通过FFmpeg中的接口或功能直接调用Ascend NPU进行视频解码。
而本公开实施例实现了在FFmpeg中调用Ascend NPU进行视频解码,使得开发者在FFmpeg中使用Ascend NPU时,不用针对FFmpeg以及Ascend NPU进行额外的开发工作,因此不需要同时熟悉FFmpeg和Ascend NPU,降低了对开发者的要求;也降低了开发者水平,对于FFmpeg与Ascend NPU之间通信的稳定性、可靠性以及高效性的影响。
以下对本公开实施例提供的视频解码方法进行具体说明:
本公开实施例中,视频解码模块可以包括第一解码模块和第二解码模块这两个软件模块。其中,第一解码模块还可以称为与FFmpeg交互的解码器(ff_atlas_decoder)模块,第二解码模块还可以称为解码(decoding)模块。
第一解码模块包括结构定义单元、初始化单元、解码单元、丢弃单元和关闭单元。其中,初始化单元还可以称为初始化解码器(init_decoder)单元,解码单元还可以称为解码(decode)单元,丢弃单元还可以称为抽出(flush)单元,关闭单元还可以称为关闭解码(close_decoder)单元。
其中,结构定义单元定义了视频解码模块的类型,是否支持刷新以及是否支持多线程等能力。而且,结构定义单元还包括过滤器,用于转换待解码视频帧的封装格式。例如,过滤器可以将待解码视频帧的封装格式由动态图像专家组4(Moving Picture ExpertsGroup 4,MP4)转换到字节流格式(Annex-B)。
init_decoder单元用于执行初始化流程,decode单元用于执行待解码视频帧的解码流程以及解码视频帧的返回流程,flush单元用于执行视频帧丢弃流程,close_decoder单元用于执行关闭硬件解码器流程。各流程的具体过程可参考后续描述。
在对待解码视频帧进行解码之前,即在上述S101之前,首先进行初始化流程,初始化流程包括以下步骤:
步骤一、接收视频处理模块发送的待解码视频的码流基本信息。
其中,码流基本信息包括:待解码视频帧的宽度和高度等视频帧元数据,以及码流编码类型和码流规格等码流元数据。例如,码流编码类型可以为:数字视频压缩格式(H.264)或者视频编码标准(H.265)等。码流规格可以为:低复杂度(Low Complexity)规格或者高效率(High Efficiency)规格等。
可选的,第一解码模块在接收到视频处理模块发送的码流基本信息后,还可以对码流基本信息进行进行校验。例如,校验待解码视频帧的宽度乘以高度,得到的视频帧尺寸是否小于或等于预设最大尺寸,以及校验码流编码类型是否属于指定编码类型集合等。并在校验通过后执行步骤二。
步骤二、基于码流基本信息,对自身以及对硬件解码器进行初始化。
视频解码模块对自身进行软件初始化时,第一解码模块的init_decoder单元向第二解码模块发送码流基本信息,第二解码模块对码流基本信息进行进行校验,校验通过后创建结果缓存队列,并对结果缓存队列加锁,从而提高解码视频帧的安全性。之后第二解码模块根据视频帧元数据生成硬件解码通道,其中硬件解码通道用于记录解码信息,例如视频帧元数据。而且第二解码模块还启动异步的解码视频帧回调线程,使得后续硬件解码器可以利用回调线程回调第二解码模块的回调(callback)单元,使callback单元从硬件解码器中获取已完成解码的解码视频帧。
第一解码模块的init_decoder单元对第二解码模块初始化后,生成内部解码对象,内部解码对象中记录有第二解码模块的句柄、第二解码模块的接口信息以及第一解码模块与第二解码模块之间的传输通道信息等。其中,句柄用于与第二解码模块通信。
视频解码模块还可以对硬件解码器进行硬件初始化,其中包括检查硬件解码器的硬件设备信息、配置硬件解码器的上下文环境以及其他基本配置项。其中,第一解码模块的init_decoder单元可以直接对硬件解码器进行初始化,或者init_decoder单元可以通过第二解码模块对硬件解码器进行初始化。
通过上述方法,本公开实施例中视频解码模块可以对自身以及硬件解码器进行初始化,从而完成解码前的准备工作,方便后续进行视频帧解码过程。
视频解码模块在上述S102中每接收到一个解码请求之后,可以通过第一解码模块的decode单元,从解码请求中解析出待解码视频帧的元数据,并对元数据进行校验。例如可以校验元数据中的视频帧尺寸是否为初始化时码流基本信息携带的视频帧尺寸,以及元数据中的视频帧格式是否为初始化时码流基本信息携带的视频帧格式等。在校验通过后,decode单元将待解码视频帧和元数据组织为预设结构体并存入主机内存,并通过预先保存的第二解码模块的句柄,调用第二解码模块,从而向第二解码模块发送结构体的内存地址。
之后,第二解码模块将待解码视频帧存入硬件解码器的内存,并向硬件解码器发送该待解码视频帧的元数据,从而调用硬件解码器对该待解码视频帧进行解码。
硬件解码器管理一个异步的待解码队列,其中包括未完成解码的待解码视频帧及其元数据,硬件解码器从待解码队列中获取待解码视频帧,并进行解码得到解码视频帧,将解码视频帧及其元数据存入硬件解码器的内存。
本公开实施例中,视频解码模块在调用硬件解码器进行视频帧解码之前,可以首先对待解码视频帧的元数据进行校验,能够提高解码流程的安全性,也减少向硬件解码器发送其无法解码的待解码视频帧的情况,提高解码效率。
视频解码模块在上述S102中调用硬件解码器之后,还可以从硬件解码器中获取已完成解码的解码视频帧。参见图2,视频解码模块从硬件解码器中获取解码视频帧的过程包括以下步骤:
S201、当被硬件解码器回调时,从硬件解码器内存中获取已完成解码的解码视频帧。
每当硬件解码器解码完成一个解码视频帧时,回调视频解码模块的第二解码模块,使第二解码模块将硬件解码器内存中的已完成解码的解码视频帧,拷贝到主机内存。
S202、将已完成解码的解码视频帧封装为指定格式,并将指定格式的解码视频帧存入结果缓存队列中。
其中,指定格式为视频处理模块支持的格式。例如,指定格式为影音帧(AVFrame)格式。
第二解码模块可以将解码视频帧及其元数据封装为指定格式,并存入结果缓存队列中。
同时,第二解码模块还可以将本次存入硬件解码器的待解码视频帧以及元数据删除,即,将本次获取的解码视频帧以及元数据,在解码前对应的数据删除,以避免造成内存泄露,保障解码过程的安全性。
在此基础上,上述S103中获取当前已完成解码的一个解码视频帧的方式,可以实现为:从结果缓存队列中获取指定格式的解码视频帧。
其中,具体可以由第一解码模块的decode单元,在接收到解码请求时,调用第二解码模块,使第二解码模块从结果缓存队列中获取指定格式的解码视频帧,并向decode单元返回获取的解码视频帧。
其中,由于本公开实施例中,视频帧解码过程和返回过程是异步的,因此decode单元在接收到解码请求时,将解码请求中的待解码视频帧及其元数据存入主机内存,并在调用第二解码模块时,还向第二解码模块发送存入的内存地址。使得第二解码模块被decode单元调用时,还异步调用硬件解码器,使硬件解码器对该待解码视频帧进行解码。
通过上述方法,本公开实施例中,每当硬件解码器解码完成一个解码视频帧,视频解码模块都能够及时获取到当前完成解码的解码视频帧,从而在下一次接收到解码请求时,及时返回该解码视频帧,保障解码视频帧的返回效率。
本公开实施例中,硬件解码器对视频帧进行解码时,需要一定的时间,而且存在有些视频帧要依赖之前的视频帧和/或之后的视频帧,才能完成解码的情况,因此可能出现视频解码模块接收到解码请求之后,当前没有获取到已完成解码的解码视频帧的情况。
因此,视频解码模块在上述S102每接收到一个解码请求之后,若从结果缓存队列中未获取到指定格式的解码视频帧,则可以通知视频处理模块当前无已完成解码的解码视频帧。
例如,视频解码模块的decode单元可以向视频处理模块发送一个AVFrame格式的数据包,数据包中无解码视频帧,且一个标志位表示当前无已完成解码的解码视频帧。
通过上述方法,本公开实施例中,视频解码模块在当前未获取到解码视频帧时,可以及时通知视频处理模块,避免视频处理模块误认为视频解码模块无响应,保障视频解码流程正常运行。
在本公开实施例中,硬件解码器对一个待解码视频帧无论是否解码成功,只要解码结束,都会回调视频解码模块。因此为了避免获取到解码失败结果,视频解码模块在从硬件解码器内存中获取已完成解码的解码视频帧之前,还可以执行:当被硬件解码器回调时,判断回调参数的结果标志位是否表示解码成功。
若是,则执行上述S201中从硬件解码器内存中获取已完成解码的解码视频帧的步骤。
若否,则不从硬件解码器中获取解码视频帧,等待硬件解码器的下一次回调。
其中,具体可以当第二解码模块的callback单元被硬件解码器回调时,判断回调参数的结果标志位是否表示解码成功。若是,则callback单元从硬件解码器内存中获取已完成解码的解码视频帧。若否,则callback单元等待硬件解码器的下一次回调。
由于硬件解码器解码失败时,得到的解码失败结果对于视频处理模块而言是无用的,而且还可能影响后续的视频播放等任务,因此可以仅获取解码成功的解码视频帧。
在本公开实施例中,当视频处理模块发送该待解码视频的最后一个待解码视频帧时,此时后续无待解码视频帧,视频处理模块可以通过解码请求的指定标志位告知视频解码模块。即,视频处理模块发送的包括最后一个待解码视频帧的解码请求中,指定标志位表示待解码视频帧已发送结束。
因此,视频解码模块在每接收到一个解码请求之后,还可以识别该解码请求包括的指定标志位。当首次识别到指定标志位表示待解码视频帧已发送结束时,通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。
第一解码模块的decode单元当首次识别到解码请求中的AVPacket中指定标志位为预设值时,说明待解码视频帧已发送结束,此时decode单元向第二解码模块发送序列结束(End of sequence,eos)标记,其中,eos标记表示待解码视频帧已发送结束。第二解码模块接收到eos标记后,向硬件解码器发送eos’标记,其中eos’标记表示待解码视频帧已发送结束。从而使得硬件解码器在接收到eos’标记时,将当前未解码的待解码视频帧解码完成后复位。其中,eos标记和eos’标记仅为了在说明时方便区分,不用于限定标记本身,在实际应用中eos标记和eos’标记可以相同或者不同。
同时,第二解码模块还可以通知并等待回调线程退出,并将初始化时为硬件解码器申请的内存资源注销,并销毁结果缓存队列从而释放空间,减少对下一次解码造成的影响。
通过上述方法,本公开实施例中,视频解码模块能够及时通知硬件解码器在解码完成后复位,从而提高硬件解码器复位的效率,减少对硬件解码器不必要的占用。
在本公开实施例中,由于视频处理模块每发送一次解码请求,不一定都能获取到解码视频帧,因此视频处理模块在发送完待解码视频的所有待解码视频帧之后,还可以继续调用视频解码模块的第一接口,即继续发送解码请求,从而获取当前未返回的已完成解码的解码视频帧。此时,视频处理模块发送最后一个待解码视频帧之后,发送的其他解码请求中均不包括待解码视频帧;而且,这些其他解码请求中,指定标志位均表示待解码视频帧已发送结束。
视频处理模块在通知硬件解码器将当前未解码的待解码视频帧解码完成后复位之后,还可以执行:若在连续指定次数接收到解码请求后,均未获取到当前已完成解码的解码视频帧,则通知视频处理模块已解码结束,以使得视频处理模块停止发送解码请求。
视频解码模块若在通知硬件解码器将当前未解码的待解码视频帧解码完成后复位之后,如果第一解码模块的decode单元连续指定次数接收到解码请求后,从结果缓存队列中均未获取到AVFrame格式的解码视频帧,即较长时间未获取到解码视频帧,说明当前已没有未返回的解码视频帧,因此可以向视频处理模块发送一个AVFrame格式的数据包,该数据包中无解码视频帧,且该数据包的一个标志位表示已解码结束。视频处理模块在检测到接收到的AVFrame格式的数据包中,该标志位表示已解码结束时,停止调用视频解码模块的第一接口,即停止发送解码请求。
通过上述方法,视频处理模块在发送完所有待解码视频帧之后,还可以继续通过发送不包括待解码视频帧的解码请求,来获取未返回的解码视频帧。同时,视频解码模块可以在解码视频帧均返回完成后,通知视频处理模块解码结束,避免视频处理模块在解码结束后仍不断地发送解码请求,保障视频处理模块与硬件解码器之间的处理状态传递的时效性。
在视频观看场景下,可能存在视频跳转场景,由于视频发生跳转后,与当前播放的视频帧距离较近的视频帧已失去播放需求,需要播放跳转到的视频帧。在这种场景下,视频解码模块还可以执行:接收视频处理模块发送的丢弃通知,并丢弃当前已完成解码的解码视频帧。其中,丢弃通知用于指示丢弃当前已完成解码的解码视频帧。
其中,视频处理模块可以调用第一解码模块的第二接口,从而向第一解码模块发送丢弃通知。此时第一解码模块中的flush单元,从结果缓存队列中取出所有的解码视频帧,并丢弃。或者,flush单元可以通知第二解码模块从结果缓存队列中取出所有的解码视频帧,并丢弃。
由于视频发生跳转时,当前已完成解码的解码视频帧已失去播放需求,无需向视频处理模块返回这些解码视频帧,因此可以将这些解码视频帧丢弃,减少无用的解码视频帧对于内存的占用。
当无需继续使用硬件解码器进行解码时,例如手动选择切换到软件解码,或者视频播放过程中提前关闭视频时,视频处理模块可以通知视频解码模块结束解码,此时视频解码模块可以执行以下步骤:
步骤1、接收视频处理模块发送的解码结束通知。其中,解码结束通知用于指示结束解码。
其中,视频处理模块可以调用第一解码模块的第三接口,从而向第一解码模块发送解码结束通知。
步骤2、确定是否已通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。若否,则执行步骤3;若是,则不再次通知。
其中,第一解码模块在向第二解码模块发送eos标记后,可以记录当前状态为已通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。使得在执行步骤2时,第一解码模块的close_decoder单元,可以通过检查当前状态,从而判断出是否已通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。
步骤3、通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。
第一解码模块的close_decoder单元通知硬件解码器将当前未解码的待解码视频帧解码完成后复位的方法,与上述decode单元通知硬件解码器的方法相同,可以参考上述描述,此处不再赘述。
通过上述方法,本公开实施例中,视频解码模块可以在无需硬件解码器继续解码时,及时通知硬件解码器,使得硬件解码器可以及时复位,减少对于硬件解码器不必要的占用,提高视频处理模块与硬件解码器之间处理需求传递的时效性。
而且,本公开实施例由于能够实现在视频处理框架中使用硬件解码器进行解码,因此本公开实施例能够在视频解码时,灵活地选择或切换硬件解码方式或者软件解码方式,从而丰富了视频处理框架的视频处理方案的生态,也使视频处理框架以及硬件解码器的应用范围更广。
参见图3,以下结合实际应用场景,对本公开实施例提供的视频解码的具体过程进行说明:
视频解码模块包括ff_atlas_decoder模块和decoding模块,视频解码模块和视频处理模块均处于FFmpeg框架中。
首先,视频处理模块调用ff_atlas_decoder模块的初始化接口,从而向ff_atlas_decoder模块发送待解码视频的码流基本信息。ff_atlas_decoder模块的init_decoder单元基于码流基本信息对decoding模块进行软件初始化,并基于码流基本信息通过decoding模块对Ascend NPU进行硬件初始化。
之后,视频处理模块周期性地持续调用ff_atlas_decoder模块的第一接口,从而持续向ff_atlas_decoder模块发送解码请求。
ff_atlas_decoder模块的过滤器(Filter),将解码请求中携带的数据的封装格式,转换为Ascend NPU支持的封装格式。之后,由ff_atlas_decoder模块的decode单元从解码请求包括的AVPacket中解析出待解码视频帧和元数据,将其组织为指定格式存入内存,并向decoding模块发送存入的内存地址。
同时,decode单元还异步地通过decoding模块从结果缓存队列中获取AVFrame格式的数据包,其中该数据包中包括解码视频帧及其元数据,之后向视频处理模块返回AVFrame格式的数据包。
相应的,decoding模块的解码(vdec)单元接收到decode单元发送的内存地址时,依据该内存地址,将待解码视频帧存入Ascend NPU的内存,并向Ascend NPU发送该元数据。同时,decoding模块还异步地从结果缓存队列中获取AVFrame格式的数据包,并返回给decode单元。
Ascend NPU通过DVPP解码模块,将待解码视频帧及其元数据存入解码队列,并从解码队列中获取待解码视频帧进行解码。在解码完成一个解码视频帧后,DVPP解码模块回调decoding模块,使得decoding模块的callback单元,将解码视频帧及其元数据从AscendNPU的内存拷贝到主机内存,并将解码视频帧及其元数据组织为AVFrame格式的数据包,存入结果缓存队列中。
当发生视频跳转时,视频处理模块向ff_atlas_decoder模块发送丢弃通知,ff_atlas_decoder模块的flush单元通知decoding模块从结果缓存队列中取出所有AVFrame格式的数据包并丢弃。
当结束使用Ascend NPU进行视频解码时,视频处理模块向ff_atlas_decoder模块发送解码结束通知。ff_atlas_decoder模块的close_decoder单元确定是否已向decoding模块发送eos标记,若否,则向decoding模块发送eos标记。
decoding模块接收到eos标记时,向Ascend NPU发送eos’标记,以使得Ascend NPU将当前未解码的待解码视频帧解码完成后复位。
本公开的技术方案中,所涉及的视频信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
基于相同的发明构思,对应于上述方法实施例,本公开实施例还提供了一种视频解码装置,如图4所示,该装置包括:接收模块401、调用模块402和返回模块403;
接收模块401,用于接收视频处理模块周期性发送的解码请求;
调用模块402,用于每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对待解码视频帧进行解码;
返回模块403,用于异步获取当前已完成解码的一个解码视频帧,向视频处理模块返回当前已完成解码的一个解码视频帧。
在本公开的一些实施例中,该装置还可以包括:
获取模块,用于当被硬件解码器回调时,从硬件解码器内存中获取已完成解码的解码视频帧;
存储模块,用于将已完成解码的解码视频帧封装为指定格式,并将指定格式的解码视频帧存入结果缓存队列中,指定格式为视频处理模块支持的格式;
返回模块403,具体用于:
从结果缓存队列中获取指定格式的解码视频帧。
在本公开的一些实施例中,该装置还可以包括:
通知模块,用于在每接收到一个解码请求之后,若从结果缓存队列中未获取到指定格式的解码视频帧,则通知视频处理模块当前无已完成解码的解码视频帧。
在本公开的一些实施例中,该装置还可以包括:
判断模块,用于在从硬件解码器内存中获取已完成解码的解码视频帧之前,当被硬件解码器回调时,判断回调参数的结果标志位是否表示解码成功;若是,则调用获取模块执行从硬件解码器内存中获取已完成解码的解码视频帧的步骤。
在本公开的一些实施例中,该装置还可以包括:
识别模块,用于在每接收到一个解码请求之后,识别解码请求包括的指定标志位;
通知模块,用于当首次识别到指定标志位表示待解码视频帧已发送结束时,通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。
在本公开的一些实施例中,
通知模块,还用于在通知硬件解码器将当前未解码的待解码视频帧解码完成后复位之后,若在连续指定次数接收到解码请求后,均未获取到当前已完成解码的解码视频帧,则通知视频处理模块已解码结束,以使得视频处理模块停止发送解码请求。
在本公开的一些实施例中,该装置还可以包括:
接收模块401,还用于接收视频处理模块发送的丢弃通知,丢弃通知用于指示丢弃当前已完成解码的解码视频帧;
丢弃模块,用于丢弃当前已完成解码的解码视频帧。
在本公开的一些实施例中,该装置还可以包括:
接收模块401,还用于接收视频处理模块发送的解码结束通知,解码结束通知用于指示结束解码;
确定模块,用于确定是否已通知硬件解码器将当前未解码的待解码视频帧解码完成后复位;
通知模块,用于若确定模块的确定结果为否,则通知硬件解码器将当前未解码的待解码视频帧解码完成后复位。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,电子设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
电子设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许电子设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如视频解码方法。例如,在一些实施例中,视频解码方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到电子设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的视频解码方法的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行视频解码方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (19)

1.一种视频解码方法,包括:
接收视频处理模块周期性发送的解码请求;
每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对所述待解码视频帧进行解码;
异步获取当前已完成解码的一个解码视频帧,向所述视频处理模块返回当前已完成解码的一个解码视频帧。
2.根据权利要求1所述的方法,所述方法还包括:
当被所述硬件解码器回调时,从所述硬件解码器内存中获取已完成解码的解码视频帧;
将已完成解码的解码视频帧封装为指定格式,并将所述指定格式的解码视频帧存入结果缓存队列中,所述指定格式为所述视频处理模块支持的格式;
所述获取当前已完成解码的一个解码视频帧,包括:
从所述结果缓存队列中获取所述指定格式的解码视频帧。
3.根据权利要求2所述的方法,在所述每接收到一个解码请求之后,所述方法还包括:
若从所述结果缓存队列中未获取到所述指定格式的解码视频帧,则通知所述视频处理模块当前无已完成解码的解码视频帧。
4.根据权利要求2所述的方法,在所述从所述硬件解码器内存中获取已完成解码的解码视频帧之前,所述方法还包括:
当被所述硬件解码器回调时,判断回调参数的结果标志位是否表示解码成功;
若是,则执行所述从所述硬件解码器内存中获取已完成解码的解码视频帧的步骤。
5.根据权利要求1所述的方法,在所述每接收到一个解码请求之后,所述方法还包括:
识别该解码请求包括的指定标志位;
当首次识别到指定标志位表示待解码视频帧已发送结束时,通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位。
6.根据权利要求5所述的方法,在所述通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位之后,所述方法还包括:
若在连续指定次数接收到解码请求后,均未获取到当前已完成解码的解码视频帧,则通知所述视频处理模块已解码结束,以使得所述视频处理模块停止发送解码请求。
7.根据权利要求1-6任一项所述的方法,所述方法还包括:
接收所述视频处理模块发送的丢弃通知,所述丢弃通知用于指示丢弃当前已完成解码的解码视频帧;
丢弃当前已完成解码的解码视频帧。
8.根据权利要求1-6任一项所述的方法,所述方法还包括:
接收所述视频处理模块发送的解码结束通知,所述解码结束通知用于指示结束解码;
确定是否已通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位;
若否,则通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位。
9.一种视频解码装置,包括:
接收模块,用于接收视频处理模块周期性发送的解码请求;
调用模块,用于每接收到一个解码请求,从该解码请求中解析出待解码视频帧,调用硬件解码器对所述待解码视频帧进行解码;
返回模块,用于异步获取当前已完成解码的一个解码视频帧,向所述视频处理模块返回当前已完成解码的一个解码视频帧。
10.根据权利要求9所述的装置,所述装置还包括:
获取模块,用于当被所述硬件解码器回调时,从所述硬件解码器内存中获取已完成解码的解码视频帧;
存储模块,用于将已完成解码的解码视频帧封装为指定格式,并将所述指定格式的解码视频帧存入结果缓存队列中,所述指定格式为所述视频处理模块支持的格式;
所述返回模块,具体用于:
从所述结果缓存队列中获取所述指定格式的解码视频帧。
11.根据权利要求10所述的装置,所述装置还包括:
通知模块,用于在所述每接收到一个解码请求之后,若从所述结果缓存队列中未获取到所述指定格式的解码视频帧,则通知所述视频处理模块当前无已完成解码的解码视频帧。
12.根据权利要求10所述的装置,所述装置还包括:
判断模块,用于在所述从所述硬件解码器内存中获取已完成解码的解码视频帧之前,当被所述硬件解码器回调时,判断回调参数的结果标志位是否表示解码成功;若是,则调用所述获取模块执行所述从所述硬件解码器内存中获取已完成解码的解码视频帧的步骤。
13.根据权利要求9所述的装置,所述装置还包括:
识别模块,用于在所述每接收到一个解码请求之后,识别该解码请求包括的指定标志位;
通知模块,用于当首次识别到指定标志位表示待解码视频帧已发送结束时,通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位。
14.根据权利要求13所述的装置,
所述通知模块,还用于在所述通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位之后,若在连续指定次数接收到解码请求后,均未获取到当前已完成解码的解码视频帧,则通知所述视频处理模块已解码结束,以使得所述视频处理模块停止发送解码请求。
15.根据权利要求9-14任一项所述的装置,所述装置还包括:
所述接收模块,还用于接收所述视频处理模块发送的丢弃通知,所述丢弃通知用于指示丢弃当前已完成解码的解码视频帧;
丢弃模块,用于丢弃当前已完成解码的解码视频帧。
16.根据权利要求9-14任一项所述的装置,所述装置还包括:
所述接收模块,还用于接收所述视频处理模块发送的解码结束通知,所述解码结束通知用于指示结束解码;
确定模块,用于确定是否已通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位;
通知模块,用于若所述确定模块的确定结果为否,则通知所述硬件解码器将当前未解码的待解码视频帧解码完成后复位。
17.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-8中任一项所述的方法。
19.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-8中任一项所述的方法。
CN202310224279.0A 2023-03-09 2023-03-09 一种视频解码方法、装置、电子设备及介质 Pending CN116366865A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310224279.0A CN116366865A (zh) 2023-03-09 2023-03-09 一种视频解码方法、装置、电子设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310224279.0A CN116366865A (zh) 2023-03-09 2023-03-09 一种视频解码方法、装置、电子设备及介质

Publications (1)

Publication Number Publication Date
CN116366865A true CN116366865A (zh) 2023-06-30

Family

ID=86940855

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310224279.0A Pending CN116366865A (zh) 2023-03-09 2023-03-09 一种视频解码方法、装置、电子设备及介质

Country Status (1)

Country Link
CN (1) CN116366865A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117746802A (zh) * 2023-11-27 2024-03-22 北京显芯科技有限公司 一种控制指令传输的方法、调光器和背光单元

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117746802A (zh) * 2023-11-27 2024-03-22 北京显芯科技有限公司 一种控制指令传输的方法、调光器和背光单元

Similar Documents

Publication Publication Date Title
US9589543B2 (en) Static frame image quality improvement for sink displays
WO2017219896A1 (zh) 视频流的传输方法及装置
US10951914B2 (en) Reliable large group of pictures (GOP) file streaming to wireless displays
CN107404654B (zh) 一种jpeg图像解压缩方法、装置及平台
US11601489B2 (en) Method for transmitting stream, streaming server and storage medium
CN116366865A (zh) 一种视频解码方法、装置、电子设备及介质
WO2023226915A1 (zh) 视频传输方法、系统、设备及存储介质
US20180152670A1 (en) Recording Video from a Bitstream
CN114422799B (zh) 视频文件的解码方法、装置、电子设备、程序产品
WO2023142716A1 (zh) 编码方法、实时通信方法、装置、设备及存储介质
CN103503444A (zh) 在视频编码中用信号通知活动层的数量
CN107613302B (zh) 解码方法及装置、存储介质、处理器
US11743461B2 (en) Video encoding apparatus, video decoding apparatus, video playback system and method
US10027969B2 (en) Parallel decoder with inter-prediction of video pictures
US20140009563A1 (en) Non-video codecs with video conferencing
CN110868610B (zh) 流媒体传输方法、装置、服务器及存储介质
CN112543374A (zh) 一种转码控制方法、装置及电子设备
CN106658154A (zh) 一种视频截图方法、装置和设备以及视频处理方法、装置和设备
US20120183234A1 (en) Methods for parallelizing fixed-length bitstream codecs
CN114513674A (zh) 互动直播数据传输/处理方法、处理系统、介质及服务端
CN106851134B (zh) 传输图像数据的方法、装置及系统
CN116033235B (zh) 数据传输方法、数字人生产设备以及数字人显示设备
US12022088B2 (en) Method and apparatus for constructing motion information list in video encoding and decoding and device
CN112351338B (zh) 视频处理方法、装置、系统和计算机可读存储介质
US9336557B2 (en) Apparatus and methods for processing of media signals

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination