Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162708
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 256
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-10 09:15
个人简介

熟悉多种视频标准,如h.264, MPEG-2/MPEG-4, AVS.

文章分类

全部博文(47)

文章存档

2015年(5)

2014年(22)

2013年(20)

我的朋友

分类: 嵌入式

2014-03-19 10:48:03


        case X264_ME_DIA://钻石搜索算法
        {
            /* diamond search, radius 1 */
            bcost <<= 4;
            int i = i_me_range;
            do
            {
                COST_MV_X4_DIR( 0,-1, 0,1, -1,0, 1,0, costs );//计算中心的周围4个点cost
                COPY1_IF_LT( bcost, (costs[0]<<4)+1 );
                COPY1_IF_LT( bcost, (costs[1]<<4)+3 );
                COPY1_IF_LT( bcost, (costs[2]<<4)+4 );
                COPY1_IF_LT( bcost, (costs[3]<<4)+12 );
               //通过与中心点比较,得出最小的cost点 
                if( !(bcost&15) )//如果中心点cost最小,提前结束
                    break;
                //将bcost值移出,将上面计算中心周围4个点的编号(1,3,4,12)移到高位,
                //再右移30位,得到正确的选择的周围4个点的坐标偏移
                bmx -= (bcost<<28)>>30;
                bmy -= (bcost<<30)>>30;
                bcost &= ~15;//将低4位数据消除
            } while( --i && CHECK_MVRANGE(bmx, bmy) );
            bcost >>= 4;
            break;
        }
例如,假如选择点(0,-1),则对应(costs[0]<<4)+1,   则(bcost<<28)>>30的值为0,(bcost<<30)>>30的值为1,所以bmx -= 0;bmy -= 1;即选择坐标为(0,-1)的点。
假如选择点(1,0),则对应(costs[0]<<4)+12,   则(bcost<<28)>>30的值为-1,(bcost<<30)>>30的值为0,所以bmx -= -1;bmy -= 0;即选择坐标为(1,0)的点。
阅读(950) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~