x264_mb_predict_mv_16x16 函数分析
2012-12-08 22:13
495 查看
void x264_mb_predict_mv_16x16( x264_t *h, int i_list, int i_ref, int16_t mvp[2] ) { int i_refa = h->mb.cache.ref[i_list][X264_SCAN8_0 - 1]; //!< a块参考帧序号 int16_t *mv_a = h->mb.cache.mv[i_list][X264_SCAN8_0 - 1]; //!< a块的运动矢量 int i_refb = h->mb.cache.ref[i_list][X264_SCAN8_0 - 8]; //!< b块参考帧序号 int16_t *mv_b = h->mb.cache.mv[i_list][X264_SCAN8_0 - 8]; //!< b块的运动矢量 int i_refc = h->mb.cache.ref[i_list][X264_SCAN8_0 - 8 + 4]; //!< c块参考帧序号 int16_t *mv_c = h->mb.cache.mv[i_list][X264_SCAN8_0 - 8 + 4]; //!< c块的运动矢量 int i_count; if( i_refc == -2 ) //!< unavailable { i_refc = h->mb.cache.ref[i_list][X264_SCAN8_0 - 8 - 1]; //!< d块(左上)的参考帧序号 mv_c = h->mb.cache.mv[i_list][X264_SCAN8_0 - 8 - 1]; //!< d块的运动矢量 } i_count = 0; //!< 统计当前宏块所参考的参考帧序号与邻块所参考的参考帧序号相同数 if( i_refa == i_ref ) i_count++; if( i_refb == i_ref ) i_count++; if( i_refc == i_ref ) i_count++; if( i_count > 1 ) //!< 相同数大于1时,直接取这三个邻块的运动矢量的中值作为预测运动矢量 x264_median_mv( mvp, mv_a, mv_b, mv_c ); else if( i_count == 1 ) //!< 只有一个邻块与其相同时,预测运动矢量设置为该邻块的运动矢量 { if( i_refa == i_ref ) *(uint32_t*)mvp = *(uint32_t*)mv_a; else if( i_refb == i_ref ) *(uint32_t*)mvp = *(uint32_t*)mv_b; else *(uint32_t*)mvp = *(uint32_t*)mv_c; } //!< 没有邻块与其相同的两种情况 else if( i_refb == -2 && i_refc == -2 && i_refa != -2 ) //!< 只有a块是存在的,则预测运动矢量设置为该邻块的运动矢量 *(uint32_t*)mvp = *(uint32_t*)mv_a; else //!< b块和c块至少有一个是存在的,则取这三个邻块的运动矢量的中值作为预测运动矢量 x264_median_mv( mvp, mv_a, mv_b, mv_c ); }(转载请注明出处。)
相关文章推荐
- x264_mb_predict_mv_16x16
- x264 - x264_mb_predict_mv_16x16
- x264 - x264_mb_predict_mv_ref16x16
- x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse()
- x264代码剖析(十一):核心算法之宏块分析函数x264_macroblock_analyse()
- x264_median 函数分析
- x264_macroblock_cache_load()函数分析
- x264_macroblock_cache_load()函数分析
- x264中16x16帧内预测模式函数分析
- x264_me_search_ref函数分析
- x264 - x264_mb_predict_intra4x4_mode
- x264中的提炼半像素函数——refine_subpel 函数分析
- predict函数在回归分析中的应用
- x264源码分析 -- x264_slicetype_mb_cost
- (转)x264源码分析(1):main、parse、encode、x264_encoder_open函数代码分析
- R 函数 分析
- php中引用&的用法分析【变量引用,函数引用,对象引用】
- ORACLE 分析函数
- 一个Ip2long函数,通过调用go tool pprof分析,竟发现内存分配了3G
- ORACLE分析函数over(partition by...)中使用case when达到多重分组的效果