本发明涉及视频处理,具体涉及一种动态计算宏块相对索引位置的视频编码方法及系统。
背景技术:
1、视频编解码技术中,一个视频帧(frame)可能会被分割为一个或多个片(slice),每个片包含整数个宏块(macroblock)。宏块作为视频编码中的一个基本单位,通常包含一定数量的像素数据,视频编码器会将片中的所有宏块逐个进行编码,这样可以更高效地利用编码资源,提高编码效率。
2、一个片中第一个宏块可能出现在视频帧的任意位置,同时,宏块编码时可能依赖到当前宏块左侧、左上侧、上侧、右上侧宏块的编码结果,对当前宏块进行编码需要获取其相邻宏块的可用状态。因此,获取视频片中第一个宏块在视频帧中的绝对索引位置(first_mb_in_slice),进而计算片中后续每个宏块在视频帧中的相对索引位置(mb_idx_in_x),是正确进行视频编解码的必要条件。
3、在现有的视频技术标准中,分辨率多达数十种,不同的分辨率和帧率会导致视频的像素布局和宏块位置有所不同,常规的做法是对每一个分辨率下每个可能的宏块位置,根据行数及列数的配置,通过条件语句的方式进行查找和计算,输出其相对位置。这需要处理大量的条件语句,以确定每个宏块在视频帧中的位置,不仅分支条件众多,还需要耗费大量的运算时间和资源,在软硬件实现中都缺乏灵活性,也不利于后续的升级和维护。
技术实现思路
1、针对以上问题,本发明提出一种动态计算宏块相对索引位置的视频编码方法及系统,可在任意分辨率视频的编解码中,灵活高效的计算片中第一个宏块及后续所有宏块在视频帧中的相对索引位置。
2、为了实现上述目的,本发明通过如下的技术方案来实现:
3、一种动态计算宏块相对索引位置的视频编码方法,所述方法包括:
4、获取视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_slice;
5、定义变量mb_idx_in_x作为视频片中每个宏块在视频帧中的相对索引位置;
6、通过视频帧每行的宏块个数picwidthinmbs计算视频片中起始宏块在视频行中的相对索引位置,具体包括:
7、初始化变量mb_idx_in_x为0;
8、视频帧中每行的宏块个数picwidthinmbs=ceil(视频帧宽度/16),ceil( )为向顶舍入函数;
9、应用一个加法器,对视频帧中每行的宏块个数picwidthinmbs进行累加计算;
10、应用一个减法器,将视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_slice减去加法器的结果;
11、判断减法器的结果是否小于视频帧中每行的宏块个数picwidthinmbs,若否,则返回加法器累加计算的步骤重复计算;若是,则减法器结果即mb_idx_in_x,为视频片中起始宏块在视频行中的相对索引位置;
12、依次进行宏块索引递增,计算视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x;
13、根据视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x判断每个宏块的可用状态;
14、根据每个宏块的可用状态进行视频编码处理。
15、作为本发明的一种优选方案,所述获取视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_ slice,具体包括:
16、解析视频流的元数据,包括序列参数集sps和图像参数集pps;
17、根据解析出的元数据,确定第一个宏块在视频帧中的绝对索引位置first_mb_in_slice。
18、作为本发明的一种优选方案,所述依次进行宏块索引递增,计算视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x,具体包括:
19、应用一个加法器,将视频片中起始宏块在视频行中的相对索引位置mb_idx_in_x按1依次进行累加计算,计算出视频片中其他宏块在视频帧中的相对索引位置mb_idx_in_x;
20、判断当前宏块是否为视频片中一行的最后一个宏块,若否,则继续通过加法器累加计算;
21、若是,则进一步判断当前宏块是否为视频片的最后一个宏块,若是视频片的最后一个宏块,则结束运算,若否,则将mb_idx_in_x清零后,继续通过加法器累加计算。
22、作为本发明的一种优选方案,所述根据视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x判断每个宏块的可用状态,具体包括:
23、若mb_idx_in_x表示的宏块位于视频片的第一行,则该宏块的左上侧、上侧及右上侧的宏块状态均为不可用;
24、若mb_idx_in_x表示的宏块不在视频片的第一行,则分为以下三种情况判断:
25、当mb_idx_in_x表示的宏块为视频片一行的第一个宏块时,mb_idx_in_x的值为0,则该宏块的左侧及左上侧的宏块状态为不可用,上侧及右上侧的宏块状态为可用;
26、当mb_idx_in_x表示的宏块为视频片中一行的最后一个宏块时,该宏块的左侧、左上侧及上侧的宏块状态为可用,右上侧的宏块状态为不可用;
27、当mb_idx_in_x表示的宏块不属于以上两种情况时,该宏块的左侧、左上侧、上侧及右上侧的宏块状态均为可用。
28、一种动态计算宏块相对索引位置的视频编码系统,所述系统包括:
29、绝对索引获取模块,用于获取视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_slice;
30、起始宏块计算模块,用于计算视频片中起始宏块在视频行中的相对索引位置;
31、宏块索引递增模块,用于依次进行宏块索引递增,计算视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x;
32、宏块状态判断模块,用于根据视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x判断每个宏块的可用状态;
33、宏块编码处理模块,用于根据每个宏块的可用状态进行视频编码处理。
34、作为本发明的一种优选方案,所述绝对索引获取模块中,通过解析视频流的元数据,包括序列参数集sps和图像参数集pps,根据解析出的元数据,确定视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_slice。
35、作为本发明的一种优选方案,所述起始宏块计算模块中,通过视频帧每行的宏块个数picwidthinmbs计算视频片中起始宏块在视频行中的相对索引位置,具体包括:
36、定义变量mb_idx_in_x作为视频片中每个宏块在视频帧中的相对索引位置;
37、初始化变量mb_idx_in_x为0;
38、视频帧中每行的宏块个数picwidthinmbs=ceil(视频帧宽度/16),ceil( )为向顶舍入函数;
39、应用一个加法器,对视频帧中每行的宏块个数picwidthinmbs进行累加计算;
40、应用一个减法器,将视频片中第一个宏块在视频帧中的绝对索引位置first_mb_in_slice减去加法器的结果;
41、判断减法器的结果是否小于视频帧中每行的宏块个数picwidthinmbs,若否,则返回加法器累加计算的步骤重复计算;若是,则减法器结果即mb_idx_in_x,为视频片中起始宏块在视频行中的相对索引位置。
42、作为本发明的一种优选方案,所述宏块索引递增模块中,通过应用一个加法器,将视频片中起始宏块在视频行中的相对索引位置mb_idx_in_x按1依次进行累加计算,计算出视频片中其他宏块在视频帧中的相对索引位置mb_idx_in_x;并判断当前宏块是否为视频片中一行的最后一个宏块,若否,则继续通过加法器累加计算;若是,则进一步判断当前宏块是否为视频片的最后一个宏块,若是视频片的最后一个宏块,则结束运算,若否,则将mb_idx_in_x清零后,继续通过加法器累加计算。
43、作为本发明的一种优选方案,所述宏块状态判断模块中,根据视频片中每个宏块在视频帧中的相对索引位置mb_idx_in_x判断每个宏块的可用状态,具体包括:
44、若mb_idx_in_x表示的宏块位于视频片的第一行,则该宏块的左上侧、上侧及右上侧的宏块状态均为不可用;
45、若mb_idx_in_x表示的宏块不在视频片的第一行,则分为以下三种情况判断:
46、当mb_idx_in_x表示的宏块为视频片一行的第一个宏块时,mb_idx_in_x的值为0,则该宏块的左侧及左上侧的宏块状态为不可用,上侧及右上侧的宏块状态为可用;
47、当mb_idx_in_x表示的宏块为视频片中一行的最后一个宏块时,该宏块的左侧、左上侧及上侧的宏块状态为可用,右上侧的宏块状态为不可用;
48、当mb_idx_in_x表示的宏块不属于以上两种情况时,该宏块的左侧、左上侧、上侧及右上侧的宏块状态均为可用。
49、一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如上所述的一种动态计算宏块相对索引位置的视频编码方法。
50、与现有技术相比,本发明的有益效果是:可以在有限的时钟周期内,快速计算出当前视频片起始宏块的相对索引位置,并根据宏块的顺序动态计算出其他宏块的相对索引位置,提高了编码的灵活性,并为后续计算邻块可用状态打下基础;通过使用加法器和累加器能够快速地为每个宏块分配唯一的索引值,减少了计算量;通过判断宏块的相对位置,系统能够实时准确确定其相邻宏块的可用状态,确保数据的准确传输和编码。本发明的方法可以有效减少芯片中的逻辑门电路数量,降低芯片功耗,减少芯片面积并节约成本,适用于大多数视频编码标准和格式,具有较强的通用性。