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

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

?? inter_b.c

?? H264EncPlayer,H264協議解碼與播放代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************************************************
*
*  T264 AVC CODEC
*
*  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
*               2004-2005 visionany <visionany@yahoo.com.cn>
*	2005.1.5 CloudWu<sywu@sohu.com> Modify T264_get_direct_mv
*  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-1307 USA
*
****************************************************************************/
#include "portab.h"
#include "stdio.h"
#ifndef CHIP_DM642
#include "memory.h"
#endif
#include "T264.h"
#include "inter.h"
#include "inter_b.h"
#include "intra.h"
#include "estimation.h"
#include "utility.h"
#include "interpolate.h"
#include "bitstream.h"
#include <assert.h>
#include "block.h"

static int32_t __inline
T264_detect_direct_16x16(T264_t* t)
{
    T264_vector_t vec_direct[2][16];

    T264_get_direct_mv(t, vec_direct);

    if (memcmp(vec_direct, t->mb.vec, sizeof(vec_direct)) == 0)
    {
        return 1;
    }

    return 0;
}

uint32_t
T264_mode_decision_interb_y(_RW T264_t* t)
{
    DECLARE_ALIGNED_MATRIX(pred_8x8, 16, 16, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(pred_16x8, 16, 16, uint8_t, CACHE_SIZE);
    DECLARE_ALIGNED_MATRIX(pred_8x16, 16, 16, uint8_t, CACHE_SIZE);
	DECLARE_ALIGNED_MATRIX(pred_p16x16, 16, 16, uint8_t, CACHE_SIZE);
    uint32_t sad;
    uint32_t sad_16x8;
    uint32_t sad_8x16;
	uint32_t sad_16x16;
    uint32_t sad_min;
    uint8_t sub_part[4];
    uint8_t part;
    uint8_t part_16x8[2];
    uint8_t part_8x16[2];
    uint8_t* p_min = t->mb.pred_p16x16;
	uint32_t	i,j;

    T264_vector_t vec_16x16[2][2], vec_8x8[4][2];
    T264_vector_t vec_16x8[2][2];
    T264_vector_t vec_8x16[2][2];
    T264_vector_t vec_4x4[2][16];

    sad_min = T264_mode_decision_inter_16x16b(t, vec_16x16, t->mb.pred_p16x16, &part);
    t->mb.mb_mode = B_MODE;
    copy_nvec(&vec_16x16[0][0], &t->mb.vec[0][0], 4, 4, 4);
    copy_nvec(&vec_16x16[0][1], &t->mb.vec[1][0], 4, 4, 4);
    t->mb.mb_part = MB_16x16;
    t->mb.mb_part2[0] = part;
/*
    if (t->mb.is_copy)
    {
        t->mb.sad = sad_min;
        
        return sad_min;
    }
    */

    if (t->param.block_size & SEARCH_16x8B)
    {
        vec_16x8[0][0].refno = vec_16x16[0][0].refno;
        sad_16x8 = T264_mode_decision_inter_16x8b(t, vec_16x8, pred_16x8, part_16x8);
        if (sad_16x8 < sad_min)
        {
            p_min = pred_16x8;
            t->mb.mb_part = MB_16x8;
            t->mb.mb_part2[0] = part_16x8[0];
            t->mb.mb_part2[1] = part_16x8[1];
            sad_min = sad_16x8;
            copy_nvec(&vec_16x8[0][0], &t->mb.vec[0][0], 4, 2, 4);
            copy_nvec(&vec_16x8[0][1], &t->mb.vec[1][0], 4, 2, 4);
            copy_nvec(&vec_16x8[1][0], &t->mb.vec[0][8], 4, 2, 4);
            copy_nvec(&vec_16x8[1][1], &t->mb.vec[1][8], 4, 2, 4);
        }
    }

    if (t->param.block_size & SEARCH_8x16B)
    {
        vec_8x16[0][0].refno = vec_16x16[0][0].refno;
        sad_8x16 = T264_mode_decision_inter_8x16b(t, vec_8x16, pred_8x16, part_8x16);
        if (sad_8x16 < sad_min)
        {
            p_min = pred_8x16;
            t->mb.mb_part = MB_8x16;
            t->mb.mb_part2[0] = part_8x16[0];
            t->mb.mb_part2[1] = part_8x16[1];
            sad_min = sad_8x16;
            copy_nvec(&vec_8x16[0][0], &t->mb.vec[0][0], 2, 4, 4);
            copy_nvec(&vec_8x16[0][1], &t->mb.vec[1][0], 2, 4, 4);
            copy_nvec(&vec_8x16[1][0], &t->mb.vec[0][2], 2, 4, 4);
            copy_nvec(&vec_8x16[1][1], &t->mb.vec[1][2], 2, 4, 4);
        }
    }

    if (t->param.block_size & SEARCH_8x8B)
    {
        sad = 0;
        for(i = 0 ; i < 4 ; i ++)
        {
			vec_8x8[i][0].refno = vec_16x16[0][0].refno;
            sad += T264_mode_decision_inter_8x8b(t, i, vec_8x8[i], pred_8x8, &sub_part[i]);
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = vec_8x8[i][0];

            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[1] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[1] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[1] =
            t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[1] = vec_8x8[i][1];
        }

        if (sad < sad_min)
        {
            sad_min = sad;
            t->mb.mb_part = MB_8x8;
            p_min = pred_8x8;

            t->mb.submb_part[0] = sub_part[0];
            t->mb.submb_part[luma_index[4]] = sub_part[1];
            t->mb.submb_part[luma_index[8]] = sub_part[2];
            t->mb.submb_part[luma_index[12]] = sub_part[3];

            t->mb.vec[0][0] =
            t->mb.vec[0][1] = 
            t->mb.vec[0][4] = 
            t->mb.vec[0][5] = vec_8x8[0][0];
            t->mb.vec[1][0] =
            t->mb.vec[1][1] = 
            t->mb.vec[1][4] = 
            t->mb.vec[1][5] = vec_8x8[0][1];

            t->mb.vec[0][2] =
            t->mb.vec[0][3] = 
            t->mb.vec[0][6] = 
            t->mb.vec[0][7] = vec_8x8[1][0];
            t->mb.vec[1][2] =
            t->mb.vec[1][3] = 
            t->mb.vec[1][6] = 
            t->mb.vec[1][7] = vec_8x8[1][1];

            t->mb.vec[0][8] =
            t->mb.vec[0][9] = 
            t->mb.vec[0][12] = 
            t->mb.vec[0][13] = vec_8x8[2][0];
            t->mb.vec[1][8] =
            t->mb.vec[1][9] = 
            t->mb.vec[1][12] = 
            t->mb.vec[1][13] = vec_8x8[2][1];

            t->mb.vec[0][10] =
            t->mb.vec[0][11] = 
            t->mb.vec[0][14] = 
            t->mb.vec[0][15] = vec_8x8[3][0];
            t->mb.vec[1][10] =
            t->mb.vec[1][11] = 
            t->mb.vec[1][14] = 
            t->mb.vec[1][15] = vec_8x8[3][1];
        }
    }

	t->mb.is_copy = 0;
    sad_16x16 = T264_mode_decision_inter_direct_16x16b(t, vec_4x4, pred_p16x16, &part);
	if(sad_16x16 < sad_min)
	{
		for(i = 0;i < 2; ++i)
			for(j = 0;j < 16; ++j)
				t->mb.vec[i][j] = vec_4x4[i][j];
		p_min = pred_p16x16;
		t->mb.is_copy = 1;
		t->mb.mb_part = MB_16x16;
		t->mb.mb_part2[0] = part;	//part;
		sad_min = sad_16x16;
	}
    if (t->flags & USE_INTRAININTER)
        sad = T264_mode_decision_intra_y(t);
    else
        sad = -1;

    if (sad <= sad_min)
    {
		t->mb.is_copy = 0;
        sad_min = sad;
    }
    else
    {
        t->mb.mb_mode = B_MODE;
        if (p_min != t->mb.pred_p16x16)
            memcpy(t->mb.pred_p16x16, p_min, 16 * 16 * sizeof(uint8_t));
/*        if (t->mb.mb_part == MB_16x16)
            t->mb.is_copy = T264_detect_direct_16x16(t);*/
    }

    t->mb.sad = sad_min;

    return t->mb.sad;
}

#define MINPOSITIVE(x, y) (x >= 0 && y >= 0) ? T264_MIN(x, y) : T264_MAX(x, y)
static int32_t __inline
T264_get_ref_idx(T264_t* t, int32_t list)
{
    int32_t ref_idx;
    T264_vector_t vec[3];

    vec[0] = t->mb.vec_ref[VEC_LUMA - 1].vec[list];
    vec[1] = t->mb.vec_ref[VEC_LUMA - 8].vec[list];
    vec[2] = t->mb.vec_ref[VEC_LUMA - 4].vec[list];
    if (vec[2].refno == -2)
    {
        vec[2] = t->mb.vec_ref[VEC_LUMA - 8 - 1].vec[list];
    }

    ref_idx = MINPOSITIVE(vec[1].refno, vec[2].refno);
    ref_idx = MINPOSITIVE(vec[0].refno, ref_idx);

    return ref_idx;
}
#undef MINPOSITIVE

static void __inline
T264_try_get_col_zero_mv(T264_t* t, T264_vector_t vec_direct[2][16], int32_t refl0, int32_t refl1)
{
    int32_t i;
    T264_mb_context_t* mb_n = &t->ref[1][0]->mb[t->mb.mb_xy];

	if(refl0 == 0 || refl1 == 0)
    for (i = 0 ; i < 4 * 4 ; i ++)
    {
        if (((mb_n->vec[0][i].refno == 0) && 
            ABS(mb_n->vec[0][i].x) <= 1 &&
            ABS(mb_n->vec[0][i].y) <= 1) ||
			((mb_n->vec[0][i].refno == -1) && (mb_n->vec[1][i].refno == 0) &&
            ABS(mb_n->vec[1][i].x) <= 1 && ABS(mb_n->vec[1][i].y) <= 1))
        {
            if (refl0 == 0)
            {
                vec_direct[0][i].refno = 0;
                vec_direct[0][i].x = 0;
                vec_direct[0][i].y = 0;
            }
            if (refl1 == 0)
            {
                vec_direct[1][i].refno = 0;
                vec_direct[1][i].x = 0;
                vec_direct[1][i].y = 0;
            }
        }
    }
}

void
T264_get_direct_mv(T264_t* t, T264_vector_t vec_direct[2][16])
{
    int32_t refl0, refl1;
    uint8_t mb_part;

    if (t->param.direct_flag)
    {
        // l0
        refl0 = T264_get_ref_idx(t, 0);
        refl1 = T264_get_ref_idx(t, 1);

        // directZeroPredictionFlag = 1
        if (refl0 < 0 && refl1 < 0)
        {
			int	i,j;
            //memset(vec_direct, 0, sizeof(vec_direct));
			for(i = 0;i < 2;++i)
				for(j = 0;j < 16; ++j)
				{
					vec_direct[i][j].refno = 0;
						vec_direct[i][j].x = 0;
							vec_direct[i][j].y = 0;
				}
            return;
        }

	    mb_part = t->mb.mb_part;	//save old
	    t->mb.mb_part = MB_16x16;

        if (refl0 < 0)
        {
            vec_direct[0][0].refno = refl0;
            vec_direct[0][0].x = vec_direct[0][0].y = 0;
            copy_nvec(&vec_direct[0][0], &vec_direct[0][0], 4, 4, 4);
        }
        else
        {
            // when refl0 > 0 use T264_predict_mv
            T264_vector_t vec;

            vec.refno = refl0;
            T264_predict_mv(t, 0, 0, 4, &vec); 
            copy_nvec(&vec, &vec_direct[0][0], 4, 4, 4);
        }

        if (refl1 < 0)
        {
            vec_direct[1][0].refno = refl1;
            vec_direct[1][0].x = vec_direct[1][0].y = 0;
            copy_nvec(&vec_direct[1][0], &vec_direct[1][0], 4, 4, 4);
        }
        else
        {
            T264_vector_t vec;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜乳av一区二区三区| 91蝌蚪porny成人天涯| 91精品国产91久久久久久最新毛片| 亚洲视频在线观看三级| 97成人超碰视| 亚洲伊人色欲综合网| 欧美日韩和欧美的一区二区| 亚洲h精品动漫在线观看| 91精品欧美综合在线观看最新 | 日韩成人一区二区三区在线观看| 精品视频资源站| 麻豆一区二区99久久久久| 精品国产sm最大网站免费看| 国产传媒一区在线| 亚洲色大成网站www久久九九| 欧美在线综合视频| 久久电影国产免费久久电影| 久久久不卡网国产精品二区| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 亚洲成人一区二区在线观看| 欧美一区二区三区日韩视频| 国产在线精品不卡| 国产精品久久久久天堂| 在线观看日韩国产| 久久国产夜色精品鲁鲁99| 中文字幕av资源一区| 欧美色图在线观看| 国产一区二区三区四区五区入口| 亚洲视频在线观看三级| 日韩三区在线观看| 波多野结衣在线aⅴ中文字幕不卡| 久久精品99久久久| 99热在这里有精品免费| 亚洲一区在线观看视频| 日韩亚洲欧美一区二区三区| av一区二区不卡| 日韩一区欧美二区| 亚洲素人一区二区| 欧美精品一区在线观看| 欧美亚洲国产bt| 国内精品伊人久久久久av影院| 亚洲精品视频在线观看网站| 日韩欧美久久久| 在线视频欧美精品| 国产大陆亚洲精品国产| 日韩福利电影在线观看| 国产精品久久久久久久久久久免费看| 欧美人牲a欧美精品| 欧美色视频在线| 国产一区二区福利| 亚洲制服欧美中文字幕中文字幕| 欧美精品一区二区三区蜜桃| 精品视频全国免费看| av色综合久久天堂av综合| 久久狠狠亚洲综合| 日韩和欧美的一区| 亚洲精品国产一区二区三区四区在线| 精品国产乱码久久久久久夜甘婷婷| 欧美在线视频日韩| 91在线小视频| 国产精品影视在线| 精品一区二区综合| 日本大胆欧美人术艺术动态| 亚洲国产成人porn| 亚洲精品国产高清久久伦理二区| 国产精品伦一区二区三级视频| 亚洲精品一线二线三线无人区| 欧美肥大bbwbbw高潮| 色香蕉成人二区免费| 99在线视频精品| 成人免费看视频| 国产高清无密码一区二区三区| 麻豆91精品91久久久的内涵| 日韩精品免费视频人成| 亚洲国产人成综合网站| 亚洲制服丝袜一区| 一区二区三区成人在线视频| 亚洲精品视频观看| 一区二区三区欧美| 一区二区三区波多野结衣在线观看| 综合在线观看色| 依依成人综合视频| 亚洲午夜免费福利视频| 亚洲一区在线电影| 亚洲成人1区2区| 日韩电影在线看| 另类小说图片综合网| 激情综合网av| 国产精品1区2区3区在线观看| 国产69精品一区二区亚洲孕妇| 国产成人午夜高潮毛片| 成人成人成人在线视频| av电影在线观看一区| 色欧美日韩亚洲| 欧美伦理电影网| 欧美变态口味重另类| 国产情人综合久久777777| 国产精品久久久久久久久免费桃花| 中文字幕在线不卡一区| 亚洲欧美激情小说另类| 一区二区三区四区av| 日日摸夜夜添夜夜添精品视频| 麻豆精品在线看| 国产成人免费视频网站高清观看视频| 不卡av电影在线播放| 欧美亚洲禁片免费| 在线播放国产精品二区一二区四区| 精品日韩一区二区三区免费视频| 国产丝袜美腿一区二区三区| 亚洲精品福利视频网站| 奇米888四色在线精品| 成人污视频在线观看| 在线亚洲人成电影网站色www| 欧美精品国产精品| 国产午夜亚洲精品不卡| 一区二区三区日韩精品视频| 久久精工是国产品牌吗| 99久久国产综合精品麻豆| 欧美精品三级日韩久久| 国产午夜精品理论片a级大结局| 亚洲码国产岛国毛片在线| 老司机免费视频一区二区| av一二三不卡影片| 欧美大片拔萝卜| 亚洲精品国产一区二区精华液| 国内精品国产成人国产三级粉色 | 午夜久久久影院| 国产成人免费在线视频| 欧美高清视频一二三区| 亚洲视频在线观看三级| 国产最新精品免费| 7777精品伊人久久久大香线蕉超级流畅 | 91精品国产综合久久国产大片| 国产亚洲精品免费| 精品一区二区三区视频在线观看| 色诱亚洲精品久久久久久| 久久久国产精华| 狂野欧美性猛交blacked| 欧美丝袜丝交足nylons| 中文字幕永久在线不卡| 国产一区二区三区观看| 91精品福利在线一区二区三区| 一区二区三区毛片| 97久久精品人人做人人爽| 精品国产免费人成在线观看| 午夜电影网一区| 日本韩国欧美国产| 亚洲欧洲国产日韩| va亚洲va日韩不卡在线观看| 精品电影一区二区三区 | 日本一二三不卡| 国产一区二区三区四区五区美女| 制服丝袜一区二区三区| 亚洲成人一区二区| 色偷偷成人一区二区三区91| 国产精品午夜电影| 高清日韩电视剧大全免费| 久久色成人在线| 国产乱对白刺激视频不卡| 精品国精品国产| 久久成人免费网| 久久综合资源网| 国产一区二区网址| 国产欧美一区二区三区在线看蜜臀| 激情综合网av| 国产婷婷色一区二区三区| 高清不卡一区二区| 国产精品久久久久久福利一牛影视| 国产成人免费视频精品含羞草妖精| 久久久三级国产网站| 激情欧美一区二区三区在线观看| 日韩欧美亚洲国产另类 | av中文字幕在线不卡| 国产精品高潮呻吟久久| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品久久看| 91精品福利视频| 亚洲第四色夜色| 日韩免费高清av| 国产精品一级在线| 欧美国产1区2区| 在线免费不卡电影| 日日摸夜夜添夜夜添国产精品| 日韩精品一区二区三区中文不卡| 狠狠色丁香久久婷婷综合丁香| 久久众筹精品私拍模特| 成人性生交大片| 一区二区三区在线不卡| 91精品国产色综合久久ai换脸| 蜜臀av性久久久久蜜臀aⅴ四虎 | 一区二区三区精品在线| 欧美日韩国产a| 国内精品视频666| 亚洲人成亚洲人成在线观看图片| 欧亚洲嫩模精品一区三区| 美女一区二区视频| 国产精品久久久一区麻豆最新章节| 91国偷自产一区二区使用方法| 青青草国产精品97视觉盛宴| 久久精品一区八戒影视|