视频编码方法和装置的制造方法

文档序号:9551781阅读:462来源:国知局
视频编码方法和装置的制造方法
【技术领域】
[0001]本发明的实施方式涉及视频编码,并且具体而言,涉及支持多路编码通道的视频编码中的应用层编码线程唤醒。
【背景技术】
[0002]当前,硬件编码器件能够支持多个独立的编码通道,从而实现了多路并行编码,满足了不同应用层编码线程同时需要进行视频编码的需求。
[0003]当完成了一个编码通道上的数据编码后,该编码通道会产生中断通知,以通知其驱动模块,驱动模块需要唤醒应用层编码线程,以读取该编码通道的码流。当前,对于多路编码,多采用线程唤醒后查询的方式。当一次编码成功后,所有的应用层编码线程都被唤醒,然后通过查询可以得知分配给自己的编码通路没有编码数据,然后再次进入休眠等待。这样使系统浪费在了很多无谓的工作上,使系统效率下降。
[0004]例如,图1示出了根据现有技术的在一个编码通道编码完成后、唤醒应用层编码线程的示意图。硬件编码器件120可以支持多个编码通道122-1、122-2、……122_n。硬件编码器件120的驱动模块124针对应用层110的编码线程1 112分配编码通道1 122-1,针对应用层110的编码线程2 114分配编码通道2 122-2,并且维持了这样的分配关系。如图1所示,假如在编码通道1完成数据编码,则编码通道1将产生中断以通知驱动模块124,如图中的箭头130所示,驱动模块124将唤醒所有的应用层编码线程,即112和114,如图中的箭头132和134所示。之后,应用层编码线程112和114都将向驱动模块124查询分配给它自己的编码通路有没有编码数据。如图1所示,编码线程2 114在被唤醒后,经过查询,发现在分配给自己的编码通道上尚无可用编码码流,再次进入休眠等待状态。编码线程2 114的此次唤醒和再次休眠,无疑是系统资源的浪费。
[0005]举例而言,在硬件编码器件120的驱动模块采用Linux系统进行开发的情形下,对于多路编码,多采用select函数查询,当该函数被唤醒返回后,通过系统调用来查询该路是否有编码好的数据产生,如果有,则将数据读走处理,如果没有,则将继续休眠等待。在驱动程序中的处理一般为当有一路编码生成后,通过poll函数唤醒所有在该器件上等待的线程,对于所有的η路编码,只有一路是真正能获取数据的,其他η-l路都被唤醒,查询无数据后再次休眠。这样,其他η-l路的被唤醒和查询都是无效率的和无谓的,加重的系统的负载而没有实际的效率。

【发明内容】

[0006]因此,本发明的目的在于解决前述的一个或多个问题,提供一种创新性的支持多路编码通道的视频编码中的应用层编码线程唤醒。
[0007]根据本发明的一个方面,提供一种视频编码方法,利用硬件编码器件的多个编码通道支持对多个应用层编码线程的同时编码。该方法包括:将所述多个应用层编码线程中的至少一个应用层编码线程与所述多个编码通道中的一个编码通道相绑定;激活所述多个编码通道中的所述被绑定的编码通道,以便对视频进行编码;以及在所述多个编码通道中的一个编码通道完成编码后,唤醒与所述多个编码通道中的所述一个编码通道相绑定的至少一个应用层编码线程。
[0008]根据本发明的有一个方面,提供一种视频编码装置,利用硬件编码器件的多个编码通道支持对多个应用层编码线程的同时编码。所述视频编码装置包括:绑定模块,用于将所述多个应用层编码线程中的至少一个应用层编码线程与所述多个编码通道中的一个编码通道相绑定;编码模块,用于激活所述多个编码通道中的所述被绑定的编码通道,以便对视频进行编码;以及唤醒模块,用于在所述多个编码通道中的一个编码通道完成编码后,唤醒与所述多个编码通道中的所述一个编码通道相绑定的至少一个应用层编码线程。
[0009]根据本发明的实施方式,能够在硬件编码器件的编码通道完成编码后,精确地唤醒该次编码所对应的应用层编码线程,而不影响其他线程。
【附图说明】
[0010]结合附图并参考以下详细说明,本发明各实施方式的特征、优点及其他方面将变得更加明显。在附图中:
[0011]图1示出了根据现有技术的唤醒应用层编码线程的示意图;
[0012]图2示出了根据本发明的实施方式的唤醒应用层编码线程的示意图;
[0013]图3示出了根据本发明的实施方式的视频编码方法的流程图;以及
[0014]图4示出了根据本发明的实施方式的视频编码装置的方框图。
【具体实施方式】
[0015]下文将结合附图参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。
[0016]图2示出了根据本发明的实施方式的在一个编码通道编码完成后应用层编码线程被唤醒的示意图。与图1所示的现有技术的处理方式不同,本发明的实施方式在为一个应用层编码线程打开一个编码通道时,建立应用层编码线程和硬件编码通道的绑定关系。这样,当硬件编码器件完成一帧码流的编码后,驱动程序根据该绑定关系,可以精确地唤醒等待在该路上的线程,以便该编码线程可以获取编好的码流。
[0017]如图2所示,驱动模块124例如可以在接收到应用层编码线程1 112的编码请求时,为该编码线程分配并打开编码通道1 122-1,并且记录与应用层编码线程1 112的绑定关系。假如在编码通道1完成数据编码,则编码通道1将产生中断以通知驱动模块124,如图中的箭头130所示。驱动模块124获悉编码通道1与应用层编码线程1 112的绑定关系,则只唤醒该应用层编码线程1 112,而不会去唤醒应用层编码线程2 114。与图1的现有技术的唤醒方案相比,也有可能省略应用层编码线程1和2对驱动模块124的查询过程。
[0018]图3示出了根据本发明的实施方式的视频编码方法300的流程图。该方法开始于步骤S300。
[0019]步骤S310,将多个应用层编码线程中的一个应用层编码线程与多个编码通道中的一个编码通道相绑定。通常,硬件编码器件所能支持的最大编码路数是固定,例如,如果同时支持16路编码,那么就有16个编码通道,一个通道可以支持一个应用线程获取码流。可以在驱动模块为一个应用层编码线程打开硬件编码器件中的一个编码通道时,建立该应用层编码线程与该编码通道的绑定关系。
[0020]步骤S320,激活所述多个编码通道中的所述被绑定的编码通道,以便对视频进行编码。
[0021]步骤S330,在所述多个编码通道中的一个编码通道完成编码后,根据所述绑定,唤醒与所述多个编码通道中的所述一个编码通道相绑定的应用层编码线程。
[0022]至此,方法300在步骤S340结束。
[0023]在一个实施例中,一个编码通道只与一个应用层编码线程绑定,在该编码通道完成编码后,解除其与该应用层编码线程的绑定。这特别适合于期望同时编码的应用层编码线程的数量小于硬件编码器件所能支持的编码通道的数量的情形。
[0024]在一个实施例中,可以针对一个编码通道建立编码线程队列,该编码通道与多个应用层编码线程绑定,该多个应用层编码线程构成了该编码线程队列。这特别适合于存活的应用层编码线程的数量大于硬件编码器件所能支持的编码通道的数量的情形。在此情形下,可以在一个编码通道上的编码完成之后,唤醒针对该编码通道的编码线程队列中的所有应用层编码线程。
[0025]编码线程队列可以采用先入先出队列,在队列头的应用层编码线程读取出编码通道的码流中,可以将该应用层编码线程从编码线程队列中删除。
[0026]下面描述根据本发明实施方式的一个例子,其驱动模块采用Linux系统进行开发。但是,应当理解,本发明的实施方式还可以适用于采用其他操作系统或者编程环境进行开发的硬件编码器件的驱动模块。
[0027]硬件编码器件的驱动工作在Linux内核(kernel)部分。硬件编码器件底层能够提供多路同时编码,比如,出16路不同分辨率的码流。而编码线程是工作在应用层的程序,对应于硬件的16路编码,可以有16个应用线程同时运行,来获取不同分辨率的16路码流。举例而言,用户A启动了一个应用,需要编码一路640X480的码流,这算一个编码线程;用户B又启动了一个应用,需要编码一路720X576的码流,这也算一个编码线程。这两个线程看上去是同时在获取码流的,它们工作在应用层,所以称为应用层的编码线程。而这两路编码都是由底层的编码驱动模块通过一个硬件来完成。
[0028]当用户A启动应用开始编码时,用户A的编码线程需要调用底层硬件编码器件,并且从底层硬件编码器件获取编码完毕的码流。用户A的编码线程通过系统调用函数OpenO来获取硬件编码器件的驱动模块分配的句柄,该句柄用于编码线程和驱动模块之间的交互信息,然后,用户A的编码线程调用其自己的select函数进行等待。例如,驱动模块把句柄a分配给用户A的编码线程,并且把16路编码通道中的编码通道1分配给它。这样,在驱动模块中建立了句柄a和编码通道1的绑定。换而言之,对于驱动模块而言,句柄a就代表了用户A的应用层编码线程,而硬件编码器件的编码通道1就是句柄a绑定的通道。同样,用户B
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1