本技术涉及计算机,具体涉及视频处理领域,尤其涉及一种视频处理方法、一种视频处理装置、一种计算机设备、一种计算机可读存储介质及一种计算机程序产品。
背景技术:
1、随着计算机技术的不断发展,各式各样的视频遍布于日常生活中的方方面面。在视频领域,客户端侧的完整的视频处理过程通常包括:视频帧的解码处理、对解码处理的结果进行渲染处理、输出并播放渲染后的视频画面。
2、目前,客户端侧的常规的视频处理流程通常是由单张显卡独自完成解码和渲染等处理过程,处理效率较低。
技术实现思路
1、本技术实施例提出了一种视频处理方法、装置、计算机设备、介质及产品,支持将解码过程和渲染过程分别交由两张显卡单独执行,可提高视频处理效率,降低视频帧处理的延时。
2、一方面,本技术实施例提供了一种视频处理方法,应用于视频客户端,视频客户端配置有第一显卡和第二显卡;该方法包括:
3、获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
4、将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
5、从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
6、一方面,本技术实施例提供了一种视频处理装置,其特征在于,应用于视频客户端,视频客户端配置有第一显卡和第二显卡;该装置包括:
7、获取单元,用于获取待处理的视频帧;
8、处理单元,用于通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;
9、存储单元,用于将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于所述第二显卡的渲染线程中的任一个线程操作所述解码输出缓存;
10、获取单元,还用于从双向链表中获取待渲染的解码帧数据;
11、处理单元,用于通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。
12、在一种可能的实现方式中,处理单元还用于执行以下操作:
13、创建链表头和链表尾,链表头用于存储存入到解码输出缓存中的第一个节点的指针,链表尾用于存储存入到解码输出缓存中最后一个节点的指针;
14、基于创建的链表头和链表尾,生成初始状态下的双向链表;
15、其中,初始状态下的双向链表中链表头、以及链表尾各自对应存储的节点指针均为空。
16、在一种可能的实现方式中,处理单元基于第一显卡启动的解码线程对待处理的视频帧进行解码处理,得到解码帧数据之后,还用于执行以下操作:
17、通过解码线程基于线程加锁的方式获取解码输出缓存的写入权限;
18、根据解码处理得到的解码帧数据获取目标节点,并将目标节点添加至所述初始状态下的双向链表中;
19、在确定目标节点被成功添加至双向链表中后,调用解码线程执行释放锁的操作。
20、在一种可能的实现方式中,目标节点用于存储:解码帧数据、用于指向前项节点的前指针、和用于指向后项节点的后指针;前项节点是指在解码输出缓存中位于目标节点的前一个节点,后项节点是指在解码输出缓存中位于目标节点的后一个节点。
21、在一种可能的实现方式中,处理单元将目标节点添加至初始状态下的双向链表中,用于执行以下操作:
22、将目标节点用于指向前项节点的前指针指向双向链表的链表头,并将目标节点用于指向后项节点的后指针指向链表头指向的第一个节点;
23、将链表头指向目标节点,以将目标节点添加至双向链表中;
24、若双向链表的链表尾指向的节点为空,则将链表尾指向目标节点。
25、在一种可能的实现方式中,处理单元从双向链表中获取待渲染的解码帧数据,用于执行以下操作:
26、通过渲染线程查询双向链表中是否存在可用节点,若存在,则基于线程加锁的方式获取解码输出缓存的读取权限;
27、将查询得到的可用节点从双向链表中移除;
28、若确定可用节点已成功从双向链表中移除,则通过渲染线程执行释放锁的操作。
29、在一种可能的实现方式中,若双向链表的链表尾所指向的节点不为空,则确定双向链表中存在可用节点,且可用节点为双向链表中的最后一个节点;处理单元将查询得到的可用节点从双向链表中移除,用于执行以下操作:
30、若双向链表中存在至少两个节点,则将双向链表的链表尾的指针指向双向链表中最后一个节点的前一个节点,以将最后一个节点从双向链表中移除;或者,
31、若可用节点为双向链表中的唯一节点,则将双向链表的链表尾的指针指向的节点设置为空,以将最后一个节点从双向链表中移除。
32、在一种可能的实现方式中,处理单元还用于执行以下操作:
33、检测视频客户端中是否配置有集成显卡,若有,则将集成显卡作为第一显卡,并将独立显卡作为第二显卡;
34、若无,则将工作显卡作为第二显卡,并将除工作显卡之外的显卡作为第一显卡。
35、在一种可能的实现方式中,处理单元还用于执行以下操作:
36、判断第二显卡是否满足空闲条件,若满足,则调用第二显卡的渲染线程从双向链表中获取待渲染的解码帧数据并执行渲染操作;
37、若不满足,则调用第一显卡的解码线程从双向链表中获取待渲染的解码帧数据并执行渲染操作。
38、一方面,本技术实施例提供一种计算机设备,该计算机设备包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述的视频处理方法。
39、一方面,本技术实施例提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被计算机设备的处理器读取并执行时,使得计算机设备执行上述的视频处理方法。
40、一方面,本技术实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述的视频处理方法。
41、本技术实施例中,视频客户端中配置有第一显卡和第二显卡。首先,第一显卡可以获取待处理的视频帧,并通过第一显卡的解码线程对待处理的视频帧进行解码处理,得到解码帧数据;然后,可以将解码帧数据存储至解码输出缓存中,解码输出缓存中是基于双向链表的数据存储结构来存储解码帧数据的,允许解码线程和基于第二显卡的渲染线程中的任一个线程操作解码输出缓存;最后,从双向链表中获取待渲染的解码帧数据,并通过渲染线程对待渲染的解码帧数据进行渲染处理,得到渲染后的视频帧画面。由此可见,本技术将视频帧的解码任务和渲染任务分给两张显卡处理,能够降低单张显卡的负载,相比传统的基于单显卡来执行解码和渲染处理,避免了由于负载过高导致的单张显卡性能下降;另外,双显卡的工作方式能有效缓解视频客户端由于单张显卡性能不足、或者网络波动导致的视频播放帧率低于视频流接收帧率(即播放延时)的问题,从而提高视频处理的效率,降低视频帧处理的延时。