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

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

?? macroblock.c

?? 圖象壓縮程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************** * macroblock.c: h264 encoder library ***************************************************************************** * Copyright (C) 2003 Laurent Aimar * $Id: macroblock.c,v 1.6 2003/12/13 20:30:28 fenrir Exp $ * * Authors: Laurent Aimar <fenrir@via.ecp.fr> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#include <stdlib.h>#include <stdio.h>#include <string.h>#include <stdint.h>#include "common.h"static const uint8_t block_idx_x[16] ={    0, 1, 0, 1, 2, 3, 2, 3, 0, 1, 0, 1, 2, 3, 2, 3};static const uint8_t block_idx_y[16] ={    0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 3, 3, 2, 2, 3, 3};static const uint8_t block_idx_xy[4][4] ={    { 0, 2, 8,  10},    { 1, 3, 9,  11},    { 4, 6, 12, 14},    { 5, 7, 13, 15}};static const int dequant_mf[6][4][4] ={    { {10, 13, 10, 13}, {13, 16, 13, 16}, {10, 13, 10, 13}, {13, 16, 13, 16} },    { {11, 14, 11, 14}, {14, 18, 14, 18}, {11, 14, 11, 14}, {14, 18, 14, 18} },    { {13, 16, 13, 16}, {16, 20, 16, 20}, {13, 16, 13, 16}, {16, 20, 16, 20} },    { {14, 18, 14, 18}, {18, 23, 18, 23}, {14, 18, 14, 18}, {18, 23, 18, 23} },    { {16, 20, 16, 20}, {20, 25, 20, 25}, {16, 20, 16, 20}, {20, 25, 20, 25} },    { {18, 23, 18, 23}, {23, 29, 23, 29}, {18, 23, 18, 23}, {23, 29, 23, 29} }};#if 0static const int i_chroma_qp_table[52] ={     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,    10, 11, 12, 13, 14, 15, 16, 17, 18, 19,    20, 21, 22, 23, 24, 25, 26, 27, 28, 29,    29, 30, 31, 32, 32, 33, 34, 34, 35, 35,    36, 36, 37, 37, 37, 38, 38, 38, 39, 39,    39, 39};#endif/**************************************************************************** * x264_macroblocks_new: allocate and init macroblock. ****************************************************************************/x264_macroblock_t *x264_macroblocks_new( int i_mb_width, int i_mb_height ){    x264_macroblock_t *mb = x264_malloc( i_mb_width * i_mb_height * sizeof( x264_macroblock_t ) );    int x, y;    for( y = 0; y < i_mb_height; y++ )    {        for( x = 0; x < i_mb_width; x++ )        {            int i_mb_xy = y * i_mb_width + x;            mb[i_mb_xy].i_mb_x = x;            mb[i_mb_xy].i_mb_y = y;            mb[i_mb_xy].i_neighbour = 0;            mb[i_mb_xy].i_neighbour |= ( x > 0 ) ? MB_LEFT : 0x00;            mb[i_mb_xy].i_neighbour |= ( y > 0 ) ? MB_TOP  : 0x00;            mb[i_mb_xy].i_neighbour |= ( y > 0 && x + 1 < i_mb_width ) ? MB_TOPRIGHT : 0;        }    }    return mb;}int x264_mb_predict_intra4x4_mode( x264_t *h, x264_macroblock_t *mb, int idx ){    x264_macroblock_t *mba = mb->context->block[idx].mba;    x264_macroblock_t *mbb = mb->context->block[idx].mbb;    int i_mode_a = I_PRED_4x4_DC;    int i_mode_b = I_PRED_4x4_DC;    if( !mba || !mbb )    {        return I_PRED_4x4_DC;    }    if( mba->i_type == I_4x4 )    {        i_mode_a = mb->context->block[idx].bka->i_intra4x4_pred_mode;    }    if( mbb->i_type == I_4x4 )    {        i_mode_b = mb->context->block[idx].bkb->i_intra4x4_pred_mode;    }    return X264_MIN( i_mode_a, i_mode_b );}int x264_mb_predict_non_zero_code( x264_t *h, x264_macroblock_t *mb, int idx ){    int i_z_a = 0x80, i_z_b = 0x80;    int i_ret;    /* none avail -> 0, one avail -> this one, both -> (a+b+1)>>1 */    if( mb->context->block[idx].mba )    {        i_z_a = mb->context->block[idx].bka->i_non_zero_count;    }    if( mb->context->block[idx].mbb )    {        i_z_b = mb->context->block[idx].bkb->i_non_zero_count;    }    i_ret = i_z_a+i_z_b;    if( i_ret < 0x80 )    {        i_ret = ( i_ret + 1 ) >> 1;    }    return i_ret & 0x7f;}/**************************************************************************** * Scan and Quant functions ****************************************************************************/void x264_mb_dequant_2x2_dc( int16_t dct[2][2], int i_qscale ){    const int i_qbits = i_qscale/6 - 1;    if( i_qbits >= 0 )    {        const int i_dmf = dequant_mf[i_qscale%6][0][0] << i_qbits;        dct[0][0] = dct[0][0] * i_dmf;        dct[0][1] = dct[0][1] * i_dmf;        dct[1][0] = dct[1][0] * i_dmf;        dct[1][1] = dct[1][1] * i_dmf;    }    else    {        const int i_dmf = dequant_mf[i_qscale%6][0][0];        dct[0][0] = ( dct[0][0] * i_dmf ) >> 1;        dct[0][1] = ( dct[0][1] * i_dmf ) >> 1;        dct[1][0] = ( dct[1][0] * i_dmf ) >> 1;        dct[1][1] = ( dct[1][1] * i_dmf ) >> 1;    }}void x264_mb_dequant_4x4_dc( int16_t dct[4][4], int i_qscale ){    const int i_qbits = i_qscale/6 - 2;    int x,y;    if( i_qbits >= 0 )    {        const int i_dmf = dequant_mf[i_qscale%6][0][0] << i_qbits;        for( y = 0; y < 4; y++ )        {            for( x = 0; x < 4; x++ )            {                dct[y][x] = dct[y][x] * i_dmf;            }        }    }    else    {        const int i_dmf = dequant_mf[i_qscale%6][0][0];        const int f = 1 << ( 1 + i_qbits );        for( y = 0; y < 4; y++ )        {            for( x = 0; x < 4; x++ )            {                dct[y][x] = ( dct[y][x] * i_dmf + f ) >> (-i_qbits);            }        }    }}void x264_mb_dequant_4x4( int16_t dct[4][4], int i_qscale ){    const int i_mf = i_qscale%6;    const int i_qbits = i_qscale/6;    int y;    for( y = 0; y < 4; y++ )    {        dct[y][0] = ( dct[y][0] * dequant_mf[i_mf][y][0] ) << i_qbits;        dct[y][1] = ( dct[y][1] * dequant_mf[i_mf][y][1] ) << i_qbits;        dct[y][2] = ( dct[y][2] * dequant_mf[i_mf][y][2] ) << i_qbits;        dct[y][3] = ( dct[y][3] * dequant_mf[i_mf][y][3] ) << i_qbits;    }}void x264_mb_partition_set( x264_macroblock_t *mb, int i_list, int i_part, int i_sub, int i_ref, int mx, int my ){    int x,  y;    int w,  h;    int dx, dy;    x264_mb_partition_getxy( mb, i_part, i_sub, &x, &y );    x264_mb_partition_size ( mb, i_part, i_sub, &w, &h );    for( dx = 0; dx < w; dx++ )    {        for( dy = 0; dy < h; dy++ )        {            mb->partition[x+dx][y+dy].i_ref[i_list] = i_ref;            mb->partition[x+dx][y+dy].mv[i_list][0] = mx;            mb->partition[x+dx][y+dy].mv[i_list][1] = my;        }    }}void x264_mb_partition_get( x264_macroblock_t *mb, int i_list, int i_part, int i_sub, int *pi_ref, int *pi_mx, int *pi_my ){    int x,y;    x264_mb_partition_getxy( mb, i_part, i_sub, &x, &y );    if( pi_ref )    {        *pi_ref = mb->partition[x][y].i_ref[i_list];    }    if( pi_mx && pi_my )    {        *pi_mx  = mb->partition[x][y].mv[i_list][0];        *pi_my  = mb->partition[x][y].mv[i_list][1];    }}/* ARrrrg so unbeautifull, and unoptimised for common case */void x264_mb_predict_mv( x264_macroblock_t *mb, int i_list, int i_part, int i_subpart, int mv[2] ){    int x, y, xn, yn;    int w, h;    int i_ref;    int i_refa = -1;    int i_refb = -1;    int i_refc = -1;    int mvxa = 0, mvxb = 0, mvxc = 0;    int mvya = 0, mvyb = 0, mvyc = 0;    x264_macroblock_t *mbn;    x264_mb_partition_getxy( mb, i_part, i_subpart, &x, &y );    x264_mb_partition_size( mb, i_part, i_subpart, &w, &h );    i_ref = mb->partition[x][y].i_ref[i_list];    /* Left  pixel (-1,0)*/    xn = x - 1;    mbn = mb;    if( xn < 0 )    {        xn += 4;        mbn = mb->context->mba;    }    if( mbn )    {        i_refa = -2;        if( !IS_INTRA( mbn->i_type ) && mbn->partition[xn][y].i_ref[i_list] != -1 )        {            i_refa = mbn->partition[xn][y].i_ref[i_list];            mvxa   = mbn->partition[xn][y].mv[i_list][0];            mvya   = mbn->partition[xn][y].mv[i_list][1];        }    }    /* Up ( pixel(0,-1)*/    yn = y - 1;    mbn = mb;    if( yn < 0 )    {        yn += 4;        mbn = mb->context->mbb;    }    if( mbn )    {        i_refb = -2;        if( !IS_INTRA( mbn->i_type ) && mbn->partition[x][yn].i_ref[i_list] != -1 )        {            i_refb = mbn->partition[x][yn].i_ref[i_list];            mvxb   = mbn->partition[x][yn].mv[i_list][0];            mvyb   = mbn->partition[x][yn].mv[i_list][1];        }    }    /* Up right pixel(width,-1)*/    xn = x + w;    yn = y - 1;    mbn = mb;    if( yn < 0 && xn >= 4 )    {        if( mb->context->mbc )        {            xn -= 4;            yn += 4;            mbn = mb->context->mbc;        }        else        {            mbn = NULL;        }    }    else if( yn < 0 )    {        yn += 4;        mbn = mb->context->mbb;    }    else if( xn >= 4 || ( xn == 2 && ( yn == 0 || yn == 2 ) ) )    {        mbn = NULL; /* not yet decoded */    }    if( mbn == NULL )    {        /* load top left pixel(-1,-1) */        xn = x - 1;        yn = y - 1;        mbn = mb;        if( yn < 0 && xn < 0 )        {            if( mb->context->mba && mb->context->mbb )            {                xn += 4;                yn += 4;                mbn = mb->context->mbb - 1;            }            else            {                mbn = NULL;            }        }        else if( yn < 0 )        {            yn += 4;            mbn = mb->context->mbb;        }        else if( xn < 0 )        {            xn += 4;            mbn = mb->context->mba;        }    }    if( mbn )    {        i_refc = -2;        if( !IS_INTRA( mbn->i_type ) && mbn->partition[xn][yn].i_ref[i_list] != -1 )        {            i_refc = mbn->partition[xn][yn].i_ref[i_list];            mvxc   = mbn->partition[xn][yn].mv[i_list][0];            mvyc   = mbn->partition[xn][yn].mv[i_list][1];        }    }    if( mb->i_partition == D_16x8 && i_part == 0 && i_refb == i_ref )    {        mv[0] = mvxb;        mv[1] = mvyb;    }    else if( mb->i_partition == D_16x8 && i_part == 1 && i_refa == i_ref )    {        mv[0] = mvxa;        mv[1] = mvya;    }    else if( mb->i_partition == D_8x16 && i_part == 0 && i_refa == i_ref )    {        mv[0] = mvxa;        mv[1] = mvya;    }    else if( mb->i_partition == D_8x16 && i_part == 1 && i_refc == i_ref )    {        mv[0] = mvxc;        mv[1] = mvyc;    }    else    {        int i_count;        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 )        {            mv[0] = x264_median( mvxa, mvxb, mvxc );            mv[1] = x264_median( mvya, mvyb, mvyc );        }        else if( i_count == 1 )        {            if( i_refa == i_ref )            {                mv[0] = mvxa;                mv[1] = mvya;            }            else if( i_refb == i_ref )            {                mv[0] = mvxb;                mv[1] = mvyb;            }            else            {                mv[0] = mvxc;                mv[1] = mvyc;            }        }        else if( i_refb == -1 && i_refc == -1 && i_refa != -1 )        {            mv[0] = mvxa;            mv[1] = mvya;        }        else        {            mv[0] = x264_median( mvxa, mvxb, mvxc );            mv[1] = x264_median( mvya, mvyb, mvyc );        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品美国一| 91蜜桃网址入口| 色婷婷久久久亚洲一区二区三区| 国产午夜精品一区二区三区嫩草 | 视频一区国产视频| 色婷婷久久久亚洲一区二区三区| 中文字幕一区二区在线播放| 国产精品18久久久久| 久久久久国产成人精品亚洲午夜| 午夜精品免费在线| 欧美一级日韩一级| 美国毛片一区二区| 精品久久国产字幕高潮| 久久99久久久欧美国产| 欧美一级黄色片| 精品一区二区三区av| 久久夜色精品国产噜噜av| 精品亚洲成av人在线观看| 久久欧美中文字幕| 成人av网站在线观看免费| 国产精品国产馆在线真实露脸| 波多野结衣91| 亚洲图片欧美综合| 欧美一级理论性理论a| 国产在线一区观看| 亚洲欧美中日韩| 欧美视频在线不卡| 日韩福利电影在线| 精品国产一区二区三区忘忧草 | 国内精品国产成人国产三级粉色| 亚洲一级二级三级| 69p69国产精品| 国产一区二区三区在线观看免费视频| 国产色91在线| 91国偷自产一区二区使用方法| 图片区小说区区亚洲影院| 在线视频你懂得一区| 久久不见久久见中文字幕免费| 久久久一区二区三区捆绑**| 成人教育av在线| 日韩中文字幕av电影| www久久精品| 色综合久久久久久久| 另类的小说在线视频另类成人小视频在线| 国产清纯白嫩初高生在线观看91 | 95精品视频在线| 日韩国产欧美一区二区三区| 久久亚洲精品小早川怜子| 色老头久久综合| 国产自产2019最新不卡| 亚洲裸体xxx| 欧美三级视频在线| 懂色中文一区二区在线播放| 亚洲成a人片在线观看中文| 91麻豆精品久久久久蜜臀| 福利视频网站一区二区三区| 日韩电影免费在线观看网站| 亚洲欧洲成人精品av97| 欧美伊人久久久久久久久影院 | 久久精品视频在线看| 91欧美一区二区| 久久国产精品区| 亚洲第一久久影院| 久久久一区二区三区| 日韩一级片网站| 欧美日韩一区二区三区四区| 成人午夜激情片| 美女网站色91| 天天色 色综合| 亚洲免费看黄网站| 国产精品久久午夜夜伦鲁鲁| 26uuu国产电影一区二区| 欧美蜜桃一区二区三区| 91国偷自产一区二区三区观看| 国产美女精品一区二区三区| 青青草伊人久久| 亚洲一区二区在线免费观看视频| 日本一区二区三级电影在线观看| 欧美日韩精品久久久| 在线免费观看不卡av| 99国产精品久久| 国产精品白丝jk黑袜喷水| 久久99精品国产.久久久久久| 午夜视频在线观看一区| 亚洲综合网站在线观看| 日韩美女精品在线| 中文字幕制服丝袜一区二区三区| 久久精品亚洲一区二区三区浴池 | 久久久久久久久久久久久女国产乱 | 精品黑人一区二区三区久久| 在线电影国产精品| 成人黄色软件下载| 成人app网站| 99精品久久只有精品| 不卡欧美aaaaa| 欧美午夜电影一区| 精品国产伦一区二区三区免费| 国产亚洲一区字幕| 伊人色综合久久天天| 日韩av在线免费观看不卡| 国产揄拍国内精品对白| 99久久精品国产导航| 在线播放91灌醉迷j高跟美女 | 黄一区二区三区| 成人免费视频视频在线观看免费| 91丨九色丨黑人外教| 欧美精选午夜久久久乱码6080| 精品少妇一区二区三区免费观看| 国产精品日日摸夜夜摸av| 亚洲一二三四久久| 国产一区91精品张津瑜| 色天使色偷偷av一区二区| 欧美一区二区三区免费大片| 国产日韩av一区| 天堂av在线一区| 成人av免费在线| 日韩久久久久久| 亚洲精品中文在线观看| 精品一区二区在线视频| 色噜噜狠狠色综合欧洲selulu| 精品国产乱码久久久久久夜甘婷婷| 中文字幕一区二区日韩精品绯色| 免费在线观看视频一区| 91片黄在线观看| 久久久精品tv| 日本vs亚洲vs韩国一区三区二区 | 日韩视频在线一区二区| 国产精品美女一区二区| 天天影视色香欲综合网老头| 不卡电影一区二区三区| 精品国产凹凸成av人网站| 亚洲午夜三级在线| 成人免费看的视频| 欧美tickling挠脚心丨vk| 亚洲成人免费影院| 91麻豆国产自产在线观看| 久久精品免费在线观看| 日本不卡123| 欧美日高清视频| 亚洲美女在线一区| 成人综合激情网| 久久视频一区二区| 爽好多水快深点欧美视频| 91麻豆国产自产在线观看| 中文字幕av资源一区| 激情六月婷婷久久| 欧美日韩激情在线| 一区二区三区在线不卡| 国产精品视频免费看| 国产一区二区三区观看| 精品嫩草影院久久| 看片的网站亚洲| 欧美二区三区91| 日韩av中文字幕一区二区| 欧美美女视频在线观看| 亚洲成av人影院| 欧美片网站yy| 三级精品在线观看| 7777精品伊人久久久大香线蕉 | 亚洲五月六月丁香激情| 在线视频你懂得一区二区三区| 亚洲美女视频一区| 色网综合在线观看| 亚洲国产一区二区a毛片| 91福利在线播放| 亚洲图片欧美视频| 欧美精品黑人性xxxx| 午夜精品免费在线| 欧美一区二区三区在线观看视频| 亚洲成人免费观看| 日韩一二三四区| 激情成人午夜视频| 日本一区二区高清| 99久久久国产精品| 亚洲国产日韩在线一区模特| 欧美日韩免费高清一区色橹橹| 亚洲va韩国va欧美va精品| 欧美一级艳片视频免费观看| 蜜桃av一区二区| 国产女主播一区| 在线视频观看一区| 奇米色777欧美一区二区| 欧美v亚洲v综合ⅴ国产v| 粉嫩aⅴ一区二区三区四区| 亚洲欧洲中文日韩久久av乱码| 欧美日韩国产另类不卡| 免费精品99久久国产综合精品| 精品国产成人在线影院| 粉嫩欧美一区二区三区高清影视| 国产精品久久一卡二卡| 欧美三级日韩在线| 国产一区二区导航在线播放| 国产精品情趣视频| 欧美色图免费看| 国产自产2019最新不卡| 亚洲色图丝袜美腿| 91精品麻豆日日躁夜夜躁| 国产美女精品在线| 亚洲福利视频一区| 国产日韩欧美激情|