zoukankan      html  css  js  c++  java
  • JM8.6中的MV计算及上层块预测方法

    JM8.6中的运动估计

    BlockMotionSearch函数对不同帧间模式block type (1-16x16 ... 7-4x4)进行运动搜索.

    从该函数中,我们可以发现,有一个局部变量,通过下面的语句将img->pred_mvpred_mv联系了起来,

    这样其实通过调用函数SetMotionVectorPredictor来计算运动矢量的预测值(MVpred), 代码中向SetMotionVectorPredictor函数传递了pred_mv这个整型指针(指向img->pred_mv具体要保存的地方), 这样在函数SetMotionVectorPredictor中求出运动矢量的预测值,其实就存在了img->pred_mv中了.

    具体在函数SetMotionVectorPredictor中预测MV的求解如下:

    对水平和垂直两个方向进行循环

    具体的计算如下

    根据不同的mvPredType计算得出相应的pred_vec, 然后存在pmv[hv]中.

     

     

     

    2011年4月21日11:01:18

    JM8.6中对上层块模式预测的实现

    下面的几个变量是定义的保存上层块预测的结果

    上面这个三个数组应该都是和快速搜索有关的.

    具体的pred_MV_uplayer是在函数BlockMotionSearch,如代码:

    但是看代码可以发现上层块预测只在FMEable的情况下才使用的.在函数BlockMotionSearch中有对各个搜索函数的调用.

    由于pred_MV_uplayer是一个全局变量, 所以在函数FastIntegerPelBlockMotionSearch中有使用pred_MV_uplayer,如下

    对于模式1[16x16]是没有上层块预测的,所以只有在模式2-7的情况下可以使用的

    在函数FastSubPelBlockMotionSearch中也有使用

    总结上面的,我们可以发现,在进行求MVD的时候, 我们是使用利用中值预测求出来的MV的预测值, 没有使用上层块预测的结果,而上层块预测的结果是只在运动搜索中使用的.

     

  • 相关阅读:
    deflate树与deflate编码
    生产者消费者模式下的并发无锁环形缓冲区
    环形缓冲区的设计及其在生产者消费者模式下的使用(并发有锁环形队列)
    zeromq源码分析笔记之无锁队列ypipe_t(3)
    zeromq源码分析笔记之线程间收发命令(2)
    zeromq源码分析笔记之架构(1)
    PHP和golang差异见解
    关于助力红包随机分配思考总结
    TCP四次挥手
    TCP三次握手
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2612127.html
Copyright © 2011-2022 走看看