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

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

?? intra.c

?? 經過開源的H.264壓縮算法代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
            p += t->edged_stride;
        }
    }
    else if(mb_neighbour & MB_TOP)
    {
        preds[0] = Intra_4x4_TOP;
        preds[1] = Intra_4x4_DCTOP;
        
        preds[2] = Intra_4x4_DIAGONAL_DOWNLEFT;
        preds[3] = Intra_4x4_VERTICAL_LEFT;
        *modes = 4;

        p = dst - t->edged_stride;
        if (mb_neighbour & MB_TOPRIGHT)
        {
            for(i = -1 ; i < 8 ; i ++)
            {
                top[i] = p[i];
            }
        }
        else
        {
            for(i = -1 ; i < 4 ; i ++)
            {
                top[i] = p[i];
            }
            
            for( ; i < 8 ; ++ i)
                top[i] = p[3];
        }
    }
    else
    {
        preds[0] = Intra_4x4_DC128;
        *modes = 1;
    }
}

void 
T264_encode_intra_y(_RW T264_t* t)
{
    if (t->mb.mb_mode == I_16x16)
    {
        T264_encode_intra_16x16(t);
    }
    else if (t->mb.mb_mode == I_4x4)
    {
    }
}

void
T264_encode_intra_16x16(_RW T264_t* t)
{
    DECLARE_ALIGNED_MATRIX(dct, 17, 16, int16_t, 16);

    int32_t qp = t->qp_y;
    int32_t i;
    int16_t* curdct;

    t->expand8to16sub(t->mb.pred_i16x16, 16 / 4, 16 / 4, dct, t->mb.src_y, t->stride);
    curdct = dct;
    for(i = 0 ; i < 16 ; i ++)
    {
        t->fdct4x4(curdct);
        dct[256 + i] = curdct[0];

        t->quant4x4(curdct, qp, TRUE);
        scan_zig_4x4(t->mb.dct_y_z[luma_index[i]], curdct);
        t->iquant4x4(curdct, qp);

        curdct += 16;
    }

    t->fdct4x4dc(curdct);
    t->quant4x4dc(curdct, qp);
    scan_zig_4x4(t->mb.dc4x4_z, curdct);
    // i don't know why to do so, if someone knows tell me.
    t->idct4x4dc(curdct);
    t->iquant4x4dc(curdct, qp);

    curdct = dct;
    for(i = 0 ; i < 16 ; i ++)
    {
        curdct[0] = dct[256 + i];
        t->idct4x4(curdct);
        curdct += 16;
    }

    t->contract16to8add(dct, 16 / 4, 16 / 4, t->mb.pred_i16x16, t->mb.dst_y, t->edged_stride);
}

void
T264_encode_intra_4x4(_RW T264_t* t, uint8_t* pred, int32_t i)
{
    DECLARE_ALIGNED_MATRIX(dct, 1, 16, int16_t, 16);

    int32_t qp = t->qp_y;
    int32_t row = i / 4;
    int32_t col = i % 4;

    //residual saved in t->pred_16x16_4x4
    uint8_t* src = t->mb.src_y + (row * t->stride << 2) + (col << 2);

    //reconstructed MB saved in t->dst
    uint8_t* dst = t->mb.dst_y + (row * t->edged_stride << 2) + (col << 2);

    t->expand8to16sub(pred, 4 / 4, 4 / 4, dct, src, t->stride);

    t->fdct4x4(dct);
    t->quant4x4(dct, qp, t->slice_type == SLICE_I);
    scan_zig_4x4(t->mb.dct_y_z[luma_index[i]], dct);
    t->iquant4x4(dct, qp);
    t->idct4x4(dct);

    t->contract16to8add(dct, 4 / 4, 4 / 4, pred, dst, t->edged_stride);
}

uint32_t
T264_mode_decision_intra_uv(_RW T264_t* t)
{
    DECLARE_ALIGNED_MATRIX(pred8x8u, 8, 8, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(pred8x8v, 8, 8, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(topcacheu, 1, 8 + CACHE_SIZE, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(leftcacheu, 1, 8 + CACHE_SIZE, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(topcachev, 1, 8 + CACHE_SIZE, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(leftcachev, 1, 8 + CACHE_SIZE, uint8_t, CACHE_SIZE);
    
    uint32_t sad8x8 = -1;
    uint8_t* pred8x8freeu0 = pred8x8u;
    uint8_t* pred8x8freeu1 = t->mb.pred_i8x8u;
    uint8_t* pred8x8freev0 = pred8x8v;
    uint8_t* pred8x8freev1 = t->mb.pred_i8x8v;
    int32_t modes;
    int32_t bestmode;
    int32_t preds[9];
    int32_t i;
    uint8_t* top_u, *left_u;
    uint8_t* top_v, *left_v;

    static const uint8_t fixmode[] =
    {
        Intra_8x8_DC,
        Intra_8x8_LEFT,
        Intra_8x8_TOP,
        Intra_8x8_PLANE,
        Intra_8x8_DC,
        Intra_8x8_DC,
        Intra_8x8_DC
    };

    top_u  = &topcacheu[CACHE_SIZE];
    top_v  = &topcachev[CACHE_SIZE];
    left_u = &leftcacheu[CACHE_SIZE];
    left_v = &leftcachev[CACHE_SIZE];

    T264_intra_8x8_available(t, preds, &modes, top_u, left_u, top_v, left_v);

    for(i = 0 ; i < modes ; i ++)
    {    
        int32_t mode = preds[i];
        uint32_t sad;

        t->pred8x8[mode](
            pred8x8freeu1,
            8,
            top_u,
            left_u);
        t->pred8x8[mode](
            pred8x8freev1,
            8,
            top_v,
            left_v);

        sad = t->cmp[MB_8x8](t->mb.src_u, t->stride_uv, pred8x8freeu1, 8) + 
              t->cmp[MB_8x8](t->mb.src_v, t->stride_uv, pred8x8freev1, 8) +
              t->mb.lambda * eg_size_ue(t->bs, fixmode[mode]);
        if (sad < sad8x8)
        {
            SWAP(uint8_t, pred8x8freeu0, pred8x8freeu1);
            SWAP(uint8_t, pred8x8freev0, pred8x8freev1);
            sad8x8 = sad;
            bestmode = mode;
        }
    }

    if (pred8x8freeu0 != t->mb.pred_i8x8u)
    {
        memcpy(t->mb.pred_i8x8u, pred8x8freeu0, sizeof(uint8_t) * 8 * 8);
    }
    if (pred8x8freev0 != t->mb.pred_i8x8v)
    {
        memcpy(t->mb.pred_i8x8v, pred8x8freev0, sizeof(uint8_t) * 8 * 8);
    }

	//fixed prediction mode DCLEFT DCTOP DC128 = DC
    t->mb.mb_mode_uv = fixmode[bestmode];

    return sad8x8;
}

void
T264_intra_8x8_available(T264_t* t, int32_t preds[], int32_t* modes, uint8_t* top_u, uint8_t* left_u, uint8_t* top_v, uint8_t* left_v)
{
    int32_t i;
    uint8_t* p_u, *p_v;

    if ((t->mb.mb_neighbour & (MB_LEFT | MB_TOP)) == (MB_LEFT | MB_TOP))
    {
        preds[0] = Intra_8x8_DC;
        preds[1] = Intra_8x8_TOP;
        preds[2] = Intra_8x8_LEFT;
        preds[3] = Intra_8x8_PLANE;
        *modes = 4;

        p_u = t->mb.dst_u - t->edged_stride_uv;
        p_v = t->mb.dst_v - t->edged_stride_uv;
        for(i = -1 ; i < 8 ; i ++)
        {
            top_u[i] = p_u[i];
            top_v[i] = p_v[i];
        }

        p_u --;
        p_v --;

        for(i = -1 ; i < 8 ; i ++)
        {
            left_u[i] = p_u[0];
            left_v[i] = p_v[0];
            p_u += t->edged_stride_uv;
            p_v += t->edged_stride_uv;
        }
    }
    else if(t->mb.mb_neighbour & MB_LEFT)
    {
        preds[0] = Intra_8x8_DCLEFT;
        preds[1] = Intra_8x8_LEFT;
        *modes = 2;

        p_u = t->mb.dst_u - 1;
        p_v = t->mb.dst_v - 1;

        for(i = 0 ; i < 8 ; i ++)
        {
            left_u[i] = p_u[0];
            left_v[i] = p_v[0];
            p_u += t->edged_stride_uv;
            p_v += t->edged_stride_uv;
        }
    }
    else if(t->mb.mb_neighbour & MB_TOP)
    {
        preds[0] = Intra_8x8_DCTOP;
        preds[1] = Intra_8x8_TOP;
        *modes = 2;

        p_u = t->mb.dst_u - t->edged_stride_uv;
        p_v = t->mb.dst_v - t->edged_stride_uv;
        for(i = 0 ; i < 8 ; i ++)
        {
            top_u[i] = p_u[i];
            top_v[i] = p_v[i];
        }
    }
    else
    {
        preds[0] = Intra_8x8_DC128;
        *modes = 1;
    }
}

void
T264_encode_intra_uv(_RW T264_t* t)
{
    DECLARE_ALIGNED_MATRIX(dct, 10, 8, int16_t, CACHE_SIZE);

    int32_t qp = t->qp_uv;
    int32_t i, j;
    int16_t* curdct;
    uint8_t* start;
    uint8_t* dst;
    uint8_t* src;
    int32_t intra = t->slice_type == SLICE_I ? 1 : 0;

    start = t->mb.pred_i8x8u;
    src   = t->mb.src_u;
    dst   = t->mb.dst_u;
    for(j = 0 ; j < 2 ; j ++)
    {
        int32_t run, k;
        int32_t coeff_cost;

        coeff_cost = 0;

        t->expand8to16sub(start, 8 / 4, 8 / 4, dct, src, t->stride_uv);
        curdct = dct;
        for(i = 0 ; i < 4 ; i ++)
        {
            run = -1;

            // we will count coeff cost, from jm80
            t->fdct4x4(curdct);
            dct[64 + i] = curdct[0];

            t->quant4x4(curdct, qp, intra);
            scan_zig_4x4(t->mb.dct_uv_z[j][i], curdct);
            {
                for(k = 1 ; k < 16 ; k ++)
                {
                    run ++;
                    if (t->mb.dct_uv_z[j][i][k] != 0)
                    {
                        if (ABS(t->mb.dct_uv_z[j][i][k]) > 1)
                        {
                            coeff_cost += 16 * 16 * 256;
                            break;
                        }
                        else
                        {
                            coeff_cost += COEFF_COST[run];
                            run = -1;
                        }
                    }
                }
            }
            t->iquant4x4(curdct, qp);

            curdct += 16;
        }
        if (coeff_cost < CHROMA_COEFF_COST)
        {
            memset(&t->mb.dct_uv_z[j][0][0], 0, 4 * 16 * sizeof(int16_t));
            memset(dct, 0, 8 * 8 * sizeof(int16_t));
        }
        t->fdct2x2dc(curdct);
        t->quant2x2dc(curdct, qp, intra);
        scan_zig_2x2(t->mb.dc2x2_z[j], curdct);
        t->iquant2x2dc(curdct, qp);
        t->idct2x2dc(curdct);

        curdct = dct;
        for(i = 0 ; i < 4 ; i ++)
        {
            curdct[0] = dct[64 + i];
            t->idct4x4(curdct);
            curdct += 16;
        }

        t->contract16to8add(dct, 8 / 4, 8 / 4, start, dst, t->edged_stride_uv);

        //
        // change to v
        //
        start = t->mb.pred_i8x8v;
        dst   = t->mb.dst_v;
        src   = t->mb.src_v;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品欧美一区二区在线观看| 国产成人精品一区二| 在线观看亚洲专区| 亚洲国产成人精品视频| 欧美日本一区二区三区四区| www国产精品av| 中文在线一区二区| 不卡的看片网站| 亚洲人成7777| 欧美色大人视频| 久久电影网站中文字幕| 国产欧美一区二区精品性色| 成人激情开心网| 亚洲综合小说图片| 精品久久久久久最新网址| 国产一区二区电影| 亚洲柠檬福利资源导航| 在线成人高清不卡| 国产精品88av| 亚洲成人av电影在线| 欧美电影免费观看高清完整版 | 亚洲va韩国va欧美va精品| 欧美精品vⅰdeose4hd| 国产美女精品人人做人人爽| 亚洲欧洲三级电影| 欧美日韩一区国产| 成人激情小说乱人伦| 五月天视频一区| 欧美激情一区二区三区全黄| 欧美日免费三级在线| 国产成人精品免费在线| 亚洲国产毛片aaaaa无费看 | 欧美一区二区视频网站| 国产成人午夜片在线观看高清观看| 亚洲同性同志一二三专区| 欧美电视剧在线观看完整版| 日韩欧美在线网站| 91丨九色丨国产丨porny| 日韩专区一卡二卡| 国产精品久久久久久福利一牛影视 | 蜜臀a∨国产成人精品| 国产精品国产三级国产专播品爱网 | 91伊人久久大香线蕉| 久久国产婷婷国产香蕉| 亚洲在线视频免费观看| 国产亚洲一区二区三区| 日韩欧美一区二区视频| 精品视频在线免费观看| av午夜精品一区二区三区| 韩国一区二区视频| 综合久久久久综合| 国产日韩欧美a| 日韩一区二区视频| 91国偷自产一区二区使用方法| 国产精品18久久久久久久久久久久| 亚洲观看高清完整版在线观看| 日本一二三四高清不卡| 日韩欧美一区二区视频| 91精品中文字幕一区二区三区| 一本大道av一区二区在线播放 | 国产一区在线看| 天堂一区二区在线免费观看| 一区二区三区四区中文字幕| 亚洲国产精品av| 日本一区二区三区在线不卡| 337p粉嫩大胆噜噜噜噜噜91av| 欧美一区二区三区公司| 欧美日韩免费视频| 欧美专区日韩专区| 在线看日本不卡| 91黄色免费看| 91福利小视频| 欧美日韩国产首页| 欧美视频在线一区| 欧美日韩在线一区二区| 欧美在线观看视频一区二区| 欧美亚洲高清一区| 欧美日免费三级在线| 91精品久久久久久蜜臀| 制服丝袜中文字幕一区| 欧美一区二区视频在线观看2020| 欧美疯狂性受xxxxx喷水图片| 欧美区一区二区三区| 日韩视频在线永久播放| 精品国产污网站| 欧美激情中文字幕一区二区| 成人欧美一区二区三区1314| 最好看的中文字幕久久| 亚洲精品高清视频在线观看| 亚洲最新视频在线播放| 日韩不卡一区二区| 国产一区二区免费视频| jizzjizzjizz欧美| 欧美中文字幕一区二区三区亚洲| 欧美日韩日日夜夜| 精品精品国产高清一毛片一天堂| 久久夜色精品国产噜噜av| 欧美国产一区视频在线观看| 亚洲欧美日韩系列| 午夜av电影一区| 国产一区 二区 三区一级| 不卡一区在线观看| 欧美日韩综合不卡| 欧美电影免费观看高清完整版在| 国产午夜亚洲精品理论片色戒 | 一区二区三区在线免费视频| 婷婷久久综合九色综合绿巨人| 久久电影网电视剧免费观看| 成人高清视频免费观看| 在线播放91灌醉迷j高跟美女| 久久免费看少妇高潮| 曰韩精品一区二区| 国内精品在线播放| 日本韩国欧美在线| 久久久久青草大香线综合精品| 亚洲欧洲av另类| 蜜桃精品在线观看| 色悠久久久久综合欧美99| 日韩欧美三级在线| 亚洲情趣在线观看| 久久99久久99小草精品免视看| 91网站黄www| www国产成人| 五月婷婷综合激情| av在线一区二区| 精品国产凹凸成av人网站| 亚洲乱码国产乱码精品精小说| 精品一区在线看| 欧美理论片在线| 亚洲黄色片在线观看| 国产精品夜夜嗨| 欧美一区二区精品久久911| 亚洲天堂2016| 粉嫩aⅴ一区二区三区四区| 日韩一区二区视频| 亚洲观看高清完整版在线观看| 成人精品免费看| 精品成人免费观看| 日本亚洲免费观看| 欧美亚洲一区三区| 亚洲日本在线看| 成人午夜又粗又硬又大| 精品久久一二三区| 免费高清在线一区| 欧美三级三级三级爽爽爽| 亚洲色图20p| 成人中文字幕电影| 久久婷婷久久一区二区三区| 人人精品人人爱| 欧美日韩一区国产| 亚洲黄色免费网站| 91网站最新地址| **欧美大码日韩| 99精品热视频| 亚洲欧洲制服丝袜| 91免费国产视频网站| 亚洲欧洲一区二区在线播放| 成人午夜免费视频| 国产免费观看久久| 成人av第一页| 国产精品国产三级国产aⅴ中文| 国产精品69毛片高清亚洲| 精品成人一区二区三区| 久久99精品久久久久久动态图| 日韩一二三区视频| 六月丁香婷婷久久| 欧美v亚洲v综合ⅴ国产v| 久久97超碰国产精品超碰| 欧美一区二区免费视频| 日本伊人精品一区二区三区观看方式| 欧美亚洲动漫精品| 日韩国产成人精品| 欧美电视剧在线观看完整版| 国产一区二区三区最好精华液| 欧美精品一区二区三区高清aⅴ | 久久精品夜色噜噜亚洲aⅴ| 国产尤物一区二区| 久久精品亚洲国产奇米99| 国产精品一区二区在线观看不卡 | 视频一区视频二区中文| 7777精品久久久大香线蕉| 日本欧美韩国一区三区| 精品国产免费一区二区三区四区 | 色老汉一区二区三区| 亚洲伦理在线免费看| 欧美性一区二区| 蜜桃一区二区三区四区| 国产婷婷色一区二区三区| 成人av网站在线观看免费| 亚洲综合一区在线| 日韩免费视频一区| 成人免费视频免费观看| 亚洲精品国产精华液| 日韩一区二区电影| 成人美女视频在线看| 亚洲一区二区三区小说| 精品久久久久av影院| 99热这里都是精品| 秋霞电影网一区二区| 国产精品久久久久久久久久免费看 |