自适应关于帧场编码问题

 
H.264对帧场编码问题支持的比较完整,因为曾经有人问我,在h.264码流中,是否有判别帧场编码的元素。
我当时对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代表宏块级隔行扫描
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)
交叉位置(frame_mbs_only_flag, mb_adaptive_frame_field_flag),N/A为不需要该元素
 
PicInterlace          0     1  2
MbInterlace
  0  (1,N/A)  (0,0)        (0,0)
             
  1  (0,1) (0,1)       (0,1)
  
  2  (0,1) (0,1)       (0,1)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值