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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? inter_b.c

?? H264EncPlayer,H264協(xié)議解碼與播放代碼
?? 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲另类一区二区| 亚洲免费观看视频| 日韩一级成人av| 欧美精品乱码久久久久久| 色婷婷激情一区二区三区| 91浏览器打开| 久久99精品久久久久| 亚洲黄色av一区| 精品99999| 欧美日韩精品三区| 国产一区二区免费在线| 天天综合色天天| 中文字幕在线播放不卡一区| 日韩欧美一区二区视频| 91国在线观看| 91在线视频免费观看| 欧美一区二区三区在| 亚洲制服丝袜av| 一区二区三区日韩精品视频| 亚洲一区在线观看视频| 亚洲一区二区成人在线观看| 午夜精品一区在线观看| 免费欧美日韩国产三级电影| 久久国内精品视频| 国产大陆精品国产| 色综合久久久久久久久久久| 欧美亚洲丝袜传媒另类| 正在播放亚洲一区| 久久久久青草大香线综合精品| 欧美激情综合网| 一区二区三区四区亚洲| 视频一区二区中文字幕| 国内精品伊人久久久久影院对白| 成人永久看片免费视频天堂| 91福利国产成人精品照片| 欧美丰满一区二区免费视频 | 国产精品99久久久| 成人av电影免费在线播放| 欧日韩精品视频| 日韩女优av电影| 中文字幕一区二区在线播放| 亚洲成人三级小说| 国产精品综合二区| 色婷婷综合视频在线观看| 欧美成人精品3d动漫h| 亚洲欧洲日产国产综合网| 午夜激情综合网| 福利一区二区在线| 欧美日本国产一区| 欧美国产精品v| 日韩黄色免费电影| 99精品视频一区二区三区| 欧美精品精品一区| 日韩理论片在线| 精品一区二区在线观看| 国产精品日产欧美久久久久| 午夜精品久久久久久久久久| 高清beeg欧美| 日韩精品综合一本久道在线视频| 日韩一区在线看| 精品综合久久久久久8888| 91精品办公室少妇高潮对白| 2024国产精品| 五月激情综合婷婷| 91看片淫黄大片一级在线观看| 日韩美女一区二区三区| 亚洲图片欧美视频| 成人av电影在线网| 精品福利av导航| 蜜桃一区二区三区在线观看| 日本久久一区二区| 国产精品日韩成人| 国产精品资源网站| 91精品国产综合久久久蜜臀粉嫩| 亚洲欧美激情小说另类| 国产精品一区二区久激情瑜伽| 日韩一区二区不卡| 一区二区三区在线观看网站| 不卡视频在线观看| 久久精品一区二区三区av| 开心九九激情九九欧美日韩精美视频电影 | 亚洲电影一区二区| 99国产精品久| 亚洲国产成人在线| 国内不卡的二区三区中文字幕| 欧美日韩国产乱码电影| 亚洲精品日日夜夜| 99精品一区二区| 国产精品伦理在线| 丰满少妇久久久久久久| 精品国产乱码久久久久久免费| 日本欧美一区二区三区乱码| 欧美亚洲国产一区二区三区va | 香蕉影视欧美成人| 色婷婷激情综合| 亚洲精品一二三| 91丨九色丨蝌蚪丨老版| 国产欧美中文在线| 福利一区在线观看| 国产精品另类一区| 成人黄色电影在线| 国产精品久久久久久久久免费相片| 国产精品77777| 国产三区在线成人av| 国产乱码精品一区二区三区五月婷| 2020国产成人综合网| 国模大尺度一区二区三区| 精品国产一区二区三区四区四 | 日韩欧美在线1卡| 免费视频最近日韩| 欧美不卡在线视频| 国产成人在线影院| 国产精品理伦片| 色噜噜狠狠成人网p站| 一区二区在线免费| 欧美日本在线看| 麻豆一区二区在线| 久久毛片高清国产| 成人黄色网址在线观看| 亚洲男同性视频| 欧美日韩精品福利| 蜜臀av性久久久久蜜臀aⅴ| 欧美成人猛片aaaaaaa| 国产91在线观看丝袜| 亚洲美女淫视频| 91精品久久久久久久99蜜桃| 九九国产精品视频| 国产精品亲子乱子伦xxxx裸| 91免费在线播放| 天天爽夜夜爽夜夜爽精品视频| 日韩美一区二区三区| 国产99久久久国产精品潘金| 亚洲欧美日韩久久| 欧美高清www午色夜在线视频| 韩国成人在线视频| 日韩理论片一区二区| 欧美日韩一级视频| 国产一区二区三区在线观看精品 | 日韩精品专区在线影院观看| 成人激情免费网站| 亚欧色一区w666天堂| 精品国产在天天线2019| 91蜜桃免费观看视频| 青青国产91久久久久久| 亚洲国产岛国毛片在线| 欧美日韩一区国产| 国产乱码字幕精品高清av| 亚洲最新在线观看| 久久久久久毛片| 欧美色图激情小说| 国产一区二区三区免费| 一区二区在线电影| 2020国产精品自拍| 欧美日韩另类国产亚洲欧美一级| 精品国产乱码久久久久久闺蜜 | 欧美一区二区三区婷婷月色| 国产不卡视频一区二区三区| 亚洲一区在线播放| 久久精品欧美一区二区三区不卡| 色94色欧美sute亚洲13| 国产综合色在线视频区| 亚洲国产精品一区二区久久恐怖片 | 日本va欧美va瓶| 国产精品每日更新| 日韩欧美国产三级| 在线视频亚洲一区| 国产成人免费视频网站高清观看视频 | 日韩激情中文字幕| 中文字幕一区二区三区蜜月| 4438成人网| 色先锋aa成人| 国产91丝袜在线观看| 男女男精品视频网| 一区二区三区在线播放| 欧美激情综合五月色丁香| 日韩午夜电影在线观看| 欧美自拍丝袜亚洲| www.99精品| 国产精品 欧美精品| 日本最新不卡在线| 亚洲激情五月婷婷| 国产精品美女视频| 国产欧美日韩综合| 欧美精品一区二区在线播放| 欧美日韩一区不卡| 欧美性猛交xxxx乱大交退制版 | 国产精品免费视频观看| 久久亚洲捆绑美女| 日韩三级视频在线看| 欧美性色aⅴ视频一区日韩精品| av影院午夜一区| 国产sm精品调教视频网站| 激情文学综合插| 久久精品理论片| 全国精品久久少妇| 日韩电影网1区2区| 性久久久久久久久久久久| 亚洲午夜精品17c| 亚洲免费成人av| 1000部国产精品成人观看|