H.264对帧场编码问题支持的比较完整,因为曾经有人问我,在h.264码流中,是否有判别帧场编码的元素。
我当时对H.264如果认定码流帧场编码不太了解,更别说是宏块级帧场编码了。其实H.264对帧场编码有两种级别,分为
帧级和宏块级.帧级是对整个帧一开始就分为top field,bottom field.对两个field分别进行ME,MC,mode decision等.
而宏块级Field编码,就不一样了。
我当时对H.264如果认定码流帧场编码不太了解,更别说是宏块级帧场编码了。其实H.264对帧场编码有两种级别,分为
帧级和宏块级.帧级是对整个帧一开始就分为top field,bottom field.对两个field分别进行ME,MC,mode decision等.
而宏块级Field编码,就不一样了。
我的答案是一个宏块级field编码,是这样子的,JM里面给出解释的是Field MB pair,场宏块对。也就是a couple of Field
没有单独存在的一个Field宏块,只有Field MB pair.上面一个是Top field MB(两个MB的偶数行),下面一个是Bottom MB
(两个宏块的奇数行),宏块序号上下是连续的,这个和一般的编号方式不同,上面一个是偶数,下面一个是奇数.
而不是象上面那段话那样,只有半个宏块的问题.
对此,我们做出解释,现在我们研究函数void dpb_split_field(FrameStore *fs),该函数完成的任务是对即将送入DPB的重建帧
进行帧场分解,解出top,bottom field,对顶底场进行1/4象素插值,复制场参数,分解运动向量,参考帧序号,参考帧id等。
宏块级帧场自适应模式需要对宏块对进行场模式和帧模式分别编码,计算她们的RDCOST,选其中最少的RDCOST作为编码方式,所以
自适应方式做最佳编码是付出了计算复杂度大大增加的代价。同样帧级帧场自适应方式需要帧编码,和场编码分别进行,
计算RDCOST最少值作为最佳编码,同样付出计算复杂度.
回到文章开始时候提出的问题,码流中是否有标志指示后面访问单元(Access Unit)的帧场编码方式,答案是肯定的,在一个
SPS(sequence parameter set)中能找到frame_mbs_only_flag标志,该标志显示是否帧编码,如果为0,那么还有一个参数
mb_adaptive_frame_field_flag,下面对配置参数和以上两个元素的关系进行说明
PicInterlace代表帧级隔行扫描,MbInterlace代表宏块级隔行扫描
没有单独存在的一个Field宏块,只有Field MB pair.上面一个是Top field MB(两个MB的偶数行),下面一个是Bottom MB
(两个宏块的奇数行),宏块序号上下是连续的,这个和一般的编号方式不同,上面一个是偶数,下面一个是奇数.
而不是象上面那段话那样,只有半个宏块的问题.
对此,我们做出解释,现在我们研究函数void dpb_split_field(FrameStore *fs),该函数完成的任务是对即将送入DPB的重建帧
进行帧场分解,解出top,bottom field,对顶底场进行1/4象素插值,复制场参数,分解运动向量,参考帧序号,参考帧id等。
宏块级帧场自适应模式需要对宏块对进行场模式和帧模式分别编码,计算她们的RDCOST,选其中最少的RDCOST作为编码方式,所以
自适应方式做最佳编码是付出了计算复杂度大大增加的代价。同样帧级帧场自适应方式需要帧编码,和场编码分别进行,
计算RDCOST最少值作为最佳编码,同样付出计算复杂度.
回到文章开始时候提出的问题,码流中是否有标志指示后面访问单元(Access Unit)的帧场编码方式,答案是肯定的,在一个
SPS(sequence parameter set)中能找到frame_mbs_only_flag标志,该标志显示是否帧编码,如果为0,那么还有一个参数
mb_adaptive_frame_field_flag,下面对配置参数和以上两个元素的关系进行说明
PicInterlace代表帧级隔行扫描,MbInterlace代表宏块级隔行扫描
PicInterlace = 0 # Picture AFF (0: frame coding, 1: field coding, 2:adaptive frame/field coding)
MbInterlace = 0 # Macroblock AFF (0: frame coding, 1: field coding, 2:adaptive frame/field coding)
MbInterlace = 0 # Macroblock AFF (0: frame coding, 1: field coding, 2:adaptive frame/field coding)
交叉位置(frame_mbs_only_flag, mb_adaptive_frame_field_flag),N/A为不需要该元素
PicInterlace 0 1 2
MbInterlace
0 (1,N/A) (0,0) (0,0)
MbInterlace
0 (1,N/A) (0,0) (0,0)
1 (0,1) (0,1) (0,1)
2 (0,1) (0,1) (0,1)