亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? estimation.c

?? H264EncPlayer,H264協議解碼與播放代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
            // top
            CHECK_CANDIDATE(0, -1, -stride_ref);
            // top-right
            CHECK_CANDIDATE(1, -1, -stride_ref + 1);
            // bottom-left
            CHECK_CANDIDATE(-1, 1, stride_ref - 1);
            // bottom
            CHECK_CANDIDATE(0, 1, stride_ref);
            // bottom-right
            CHECK_CANDIDATE(1, 1, stride_ref + 1);
        }

        mvx = better_mvx;
        mvy = better_mvy;
        ref_st = better_ref;
        if (ABS(mvx) > limit_x || ABS(mvy) > limit_y)
        {
            break;
        }
    }

    // final mv
    context->vec_best.x = mvx << 2;
    context->vec_best.y = mvy << 2;
    // mostly we use sad as cmp function
    if (t->cmp[context->mb_part] == t->sad[context->mb_part])
        return sad;

    ref = ref_st + mvy * stride_ref + mvx;
    sad = t->cmp[context->mb_part](cur, stride_cur, ref, stride_ref) +
        t->mb.lambda * (eg_size_se(t->bs, context->vec_best.x - context->vec[0].x) + 
        eg_size_se(t->bs, context->vec_best.y - context->vec[0].y));
    return sad;
}

uint32_t
diamond_search(T264_t* t, uint8_t* cur, uint8_t* ref_st, T264_search_context_t* context, int32_t stride_cur, int32_t stride_ref, uint32_t sad)
{
    int32_t limit_x = context->limit_x;
    int32_t limit_y = context->limit_y;
    //start mv
    int32_t mvx = context->vec_best.x >> 2;
    int32_t mvy = context->vec_best.y >> 2;
    // sad for start mv
    uint8_t* ref;
    uint8_t* better_ref;
    int32_t better_mvx;
    int32_t better_mvy;
    uint32_t cursad;
    uint8_t stop = 0;

    ref_st += mvy * stride_ref + mvx;

    better_mvx = mvx;
    better_mvy = mvy;
    better_ref = ref_st;

    // large diamond
    while(!stop)
    {
        stop = 1;

        // search 8 points of ldsp
        {
            // left
            CHECK_CANDIDATE(-2, 0, -2);
            // right
            CHECK_CANDIDATE(2, 0, 2);
            // top
            CHECK_CANDIDATE(0, -2, -(stride_ref << 1));
            // bottom
            CHECK_CANDIDATE(0, 2, (stride_ref << 1));
            // top-left
            CHECK_CANDIDATE(-1, -1, -stride_ref - 1);
            // top-right
            CHECK_CANDIDATE(1, -1, -stride_ref + 1);
            // bottom-left
            CHECK_CANDIDATE(-1, 1, stride_ref - 1);
            // bottom-right
            CHECK_CANDIDATE(1, 1, stride_ref + 1);
        }

        mvx = better_mvx;
        mvy = better_mvy;
        ref_st = better_ref;
        if (ABS(mvx) > limit_x || ABS(mvy) > limit_y)
        {
            break;
        }
    }

    // small diamond
	stop = 0;
    while(!stop)
    {
        stop = 1;

        // search 4 points of sdsp
        {
            // left
            CHECK_CANDIDATE(-1, 0, -1);
            // right
            CHECK_CANDIDATE(1, 0, 1);
            // top
            CHECK_CANDIDATE(0, -1, -stride_ref);
            // bottom
            CHECK_CANDIDATE(0, 1, stride_ref);
        }

        mvx = better_mvx;
        mvy = better_mvy;
        ref_st = better_ref;
        if (ABS(mvx) > limit_x || ABS(mvy) > limit_y)
        {
            break;
        }
    }
	
    // final mv
    context->vec_best.x = mvx << 2;
    context->vec_best.y = mvy << 2;
    // mostly we use sad as cmp function
    if (t->cmp[context->mb_part] == t->sad[context->mb_part])
        return sad;

    ref = ref_st + mvy * stride_ref + mvx;
    sad = t->cmp[context->mb_part](cur, stride_cur, ref, stride_ref) +
        t->mb.lambda * (eg_size_se(t->bs, context->vec_best.x - context->vec[0].x) + 
        eg_size_se(t->bs, context->vec_best.y - context->vec[0].y));
    return sad;
}

/*
*	Full Search
*/

uint32_t
T264_search_full(T264_t* t, T264_search_context_t* context)
{
    uint32_t sad;
    uint32_t cursad;
    int32_t i, j;

    int16_t mb_xy = t->mb.mb_xy;
    int16_t mb_x = t->mb.mb_x;
    int16_t mb_y = t->mb.mb_y;
    int32_t height = context->height;
    int32_t width = context->width;
    int32_t limit_x = context->limit_x;
    int32_t limit_y = context->limit_y;
    int32_t stride_cur = t->stride;
    int32_t stride_ref = t->edged_stride;
    int32_t list_index = context->list_index;

    // start point of current and reference block 
    int32_t row = context->offset / t->edged_stride;
    int32_t col = context->offset % t->edged_stride;
    uint8_t* cur = t->cur.Y[0] + row * stride_cur + col;
    uint8_t* ref_st = t->ref[list_index][0]->Y[0] + row * stride_ref + col;	
    uint8_t* ref;
    context->vec_best.refno = 0;

    // full search
    sad = width * height * 255;
    for(i = -limit_y + (context->vec[0].y >> 2); i <= (limit_y + (context->vec[0].y >> 2)) ; i++)
        for(j = -limit_x + (context->vec[0].x >> 2); j <= (limit_x + (context->vec[0].x >> 2)) ; j++)
        {
            ref = ref_st + i * stride_ref + j;
            cursad = t->sad[context->mb_part](cur, stride_cur, ref, stride_ref) +
                t->mb.lambda * (eg_size_se(t->bs, (j << 2) - context->vec[0].x) + 
                eg_size_se(t->bs, (i << 2) - context->vec[0].y));
            if(cursad < sad)
            {
                sad = cursad;
                context->vec_best.y = i;
                context->vec_best.x = j;
            }
        }

        ref = ref_st + context->vec_best.y * stride_ref + context->vec_best.x;
        context->vec_best.y <<= 2;
        context->vec_best.x <<= 2;

        sad = t->cmp[context->mb_part](cur, t->stride, ref, t->edged_stride) +
            t->mb.lambda * (eg_size_se(t->bs, context->vec_best.x - context->vec[0].x) + 
            eg_size_se(t->bs, context->vec_best.y - context->vec[0].y));

        return sad;	
}

// xxx, never used, just for compare to jm80.
uint32_t
T264_spiral_search_full(T264_t* t, T264_search_context_t* context)
{
    uint32_t sad;
    uint32_t cursad;
    int32_t i, j, k, l;

    int16_t mb_xy = t->mb.mb_xy;
    int16_t mb_x = t->mb.mb_x;
    int16_t mb_y = t->mb.mb_y;
    int32_t height = context->height;
    int32_t width = context->width;
    int32_t limit_x = context->limit_x;
    int32_t limit_y = context->limit_y;
    int32_t stride_cur = t->stride;
    int32_t stride_ref = t->edged_stride;
    int32_t list_index = context->list_index;

    // start point of current and reference block 
    int32_t row = context->offset / t->edged_stride;
    int32_t col = context->offset % t->edged_stride;
    uint8_t* cur = t->cur.Y[0] + row * stride_cur + col;
    uint8_t* ref_st = t->ref[list_index][context->vec[0].refno]->Y[0] + row * stride_ref + col;	
    uint8_t* ref;
    int32_t spiral_search_x[33 * 33];
    int32_t spiral_search_y[33 * 33];
    context->vec_best.refno = context->vec[0].refno;

    spiral_search_x[0] = spiral_search_y[0] = 0;
    for (k=1, l=1; l<=T264_MAX(1,16); l++)
    {
        for (i=-l+1; i< l; i++)
        {
            spiral_search_x[k] = l;  spiral_search_y[k++] =  i;
            spiral_search_x[k] =  -l;  spiral_search_y[k++] =  i;
        }
        for (i=-l;   i<=l; i++)
        {
            spiral_search_x[k] =  i;  spiral_search_y[k++] = l;
            spiral_search_x[k] =  i;  spiral_search_y[k++] =  -l;
        }
    }

    // full search
    sad = width * height * 255;
    for(k = 0 ; k < 33 * 33 ; k ++)
    {
        i = (context->vec[0].y / 4) + spiral_search_y[k];
        j = (context->vec[0].x / 4) + spiral_search_x[k];

        ref = ref_st + i * stride_ref + j;
        cursad = t->sad[context->mb_part](cur, stride_cur, ref, stride_ref) +
            t->mb.lambda * (eg_size_se(t->bs, (j << 2) - context->vec[0].x) + 
            eg_size_se(t->bs, (i << 2) - context->vec[0].y));
        if(cursad < sad)
        {
            sad = cursad;
            context->vec_best.y = i;
            context->vec_best.x = j;
        }
    }

    ref = ref_st + context->vec_best.y * stride_ref + context->vec_best.x;
    context->vec_best.y <<= 2;
    context->vec_best.x <<= 2;

    sad = t->cmp[context->mb_part](cur, t->stride, ref, t->edged_stride) +
        t->mb.lambda * (eg_size_se(t->bs, context->vec_best.x - context->vec[0].x) + 
        eg_size_se(t->bs, context->vec_best.y - context->vec[0].y));

    return sad;	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区免费观看| 久久午夜免费电影| 中文字幕一区三区| 色婷婷综合久久久久中文一区二区| 精品99一区二区三区| 韩国成人福利片在线播放| 亚洲精品一区二区在线观看| 免费一级欧美片在线观看| 日韩一二三区视频| 国产 日韩 欧美大片| 亚洲狠狠丁香婷婷综合久久久| 在线日韩av片| 国产精品理论片| 在线中文字幕一区二区| 一区二区三区蜜桃| 日韩精品中文字幕在线不卡尤物| 另类的小说在线视频另类成人小视频在线 | 美脚の诱脚舐め脚责91| 亚洲精品在线免费观看视频| 精品在线免费视频| 一区二区三区在线免费| 久久久久久久精| 91麻豆精品国产自产在线观看一区 | 国产一区日韩二区欧美三区| 亚洲一区二区三区视频在线| 国产午夜三级一区二区三| 欧美亚洲综合另类| 91色.com| 91亚洲精品久久久蜜桃| 国产精品自拍毛片| 久久99日本精品| 国产成人精品亚洲日本在线桃色| 美腿丝袜亚洲综合| 久久精品国产精品亚洲精品| 亚洲丰满少妇videoshd| 亚洲精品成人少妇| 亚洲福利国产精品| 奇米888四色在线精品| 久久精品免费看| 麻豆精品久久精品色综合| 麻豆91在线看| 在线日韩av片| 欧美一区二区播放| 日韩欧美国产wwwww| 精品免费日韩av| 国产日产精品1区| 1024成人网| 日韩精品亚洲专区| 国产成人免费9x9x人网站视频| 国产精品综合久久| 91国偷自产一区二区开放时间| 高清beeg欧美| 91精品国产日韩91久久久久久| 欧美日韩国产乱码电影| 精品日本一线二线三线不卡| 久久日韩精品一区二区五区| 久久久久久久久久久黄色| 亚洲女厕所小便bbb| 国产二区国产一区在线观看| 色综合视频在线观看| 在线不卡中文字幕播放| 国产精品丝袜久久久久久app| 一区二区视频免费在线观看| 丝袜亚洲另类丝袜在线| 白白色 亚洲乱淫| 精品免费国产二区三区| 日韩av中文在线观看| 91欧美一区二区| 欧美激情在线观看视频免费| 日韩专区欧美专区| 欧美在线三级电影| 亚洲男人的天堂av| 成人美女视频在线观看18| 91精品国产全国免费观看| 亚洲午夜免费视频| 91浏览器在线视频| 亚洲日本韩国一区| 国产中文字幕一区| 在线播放91灌醉迷j高跟美女 | 天天影视涩香欲综合网| 欧洲一区在线观看| 亚洲福利国产精品| 日韩三级精品电影久久久| 日韩av在线播放中文字幕| 精品国产乱码久久久久久1区2区 | 国产高清在线精品| 亚洲国产成人在线| 91视频精品在这里| 成人欧美一区二区三区小说| 欧美日韩aaa| 青青草国产精品亚洲专区无| 色综合久久久久| 亚洲欧美激情视频在线观看一区二区三区 | 中文字幕制服丝袜一区二区三区 | 国产精品二三区| 欧美日韩二区三区| 国产成人免费视频网站高清观看视频| 国产色爱av资源综合区| 欧美亚洲综合一区| 成人性视频免费网站| 石原莉奈在线亚洲二区| 最新不卡av在线| 欧美日韩国产综合久久| 激情欧美日韩一区二区| 日韩福利视频网| 樱花影视一区二区| 亚洲欧洲性图库| 26uuu国产在线精品一区二区| 在线中文字幕一区| 91同城在线观看| 国产精品中文字幕欧美| 美女精品一区二区| 视频一区二区三区入口| 亚洲一二三区在线观看| 亚洲精品福利视频网站| 国产精品网站在线| 中文字幕亚洲欧美在线不卡| 国产女人18毛片水真多成人如厕| 4hu四虎永久在线影院成人| 在线看国产日韩| 欧美日韩一区三区| 欧美影视一区二区三区| 欧美日韩精品一区视频| 91福利资源站| 精品视频一区三区九区| 欧美午夜一区二区三区免费大片| 国产精品亚洲第一| 一本大道综合伊人精品热热| 国产亚洲欧美一级| 精品三级av在线| 国产精品欧美极品| 麻豆精品国产91久久久久久| 狠狠狠色丁香婷婷综合激情| 国产成人精品影院| 欧美亚洲国产一卡| 久久久久国产精品人| 亚洲福利视频一区| 国产精品一区一区| 欧美亚男人的天堂| 国产日韩欧美一区二区三区乱码 | 午夜伦理一区二区| 精品在线免费视频| 欧美亚洲动漫制服丝袜| 久久免费视频一区| 首页国产丝袜综合| 成人av资源站| 欧美mv日韩mv亚洲| 石原莉奈在线亚洲二区| 99视频精品免费视频| 日韩你懂的在线播放| 亚洲国产欧美日韩另类综合 | 天天综合天天综合色| 91香蕉视频在线| 国产精品污www在线观看| 久久不见久久见免费视频1| 欧美性猛交xxxx乱大交退制版| 中文欧美字幕免费| 福利一区在线观看| 欧美激情中文不卡| 成人自拍视频在线| 国产亚洲成年网址在线观看| 另类小说综合欧美亚洲| 日韩欧美不卡一区| 国产大片一区二区| 日本一区二区三区电影| 国产精品18久久久久久久久久久久| 91黄色免费版| 日本午夜一本久久久综合| 91精品国产综合久久国产大片| 欧美激情一区在线| 色综合天天综合色综合av| 久久99日本精品| 3atv一区二区三区| 久久精品国产亚洲a| 日本一区二区三区电影| 成人一区在线观看| 精品久久国产老人久久综合| 婷婷中文字幕一区三区| 日韩一区二区三区四区五区六区 | 久久久久久久久久久久电影 | 99精品桃花视频在线观看| 一区二区三区在线视频观看| www.99精品| 青青草原综合久久大伊人精品| 精品国产乱码久久久久久闺蜜 | 精品一区二区av| 国产精品国模大尺度视频| 欧美日韩一级二级| 成人免费的视频| 激情文学综合插| 天堂成人国产精品一区| 久久综合九色综合欧美98 | 中文字幕一区二区日韩精品绯色| 欧美揉bbbbb揉bbbbb| 成人精品免费看| 久久99久久99小草精品免视看| 亚洲色图欧洲色图| 最新国产成人在线观看| 欧美大度的电影原声| 欧美综合欧美视频|