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

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

?? mot_util.c

?? MPEG4編解碼系統(tǒng)代碼
?? C
字號:

/**************************************************************************
該文件包含了運動信息估計與運動補償?shù)暮瘮?shù)代碼
 **************************************************************************/

#include "mom_structs.h"
#include "vm_common_defs.h"

#include "mot_util.h"

/* ------------------------------------------------------------------------- */

/* Macro to compute the MB absolute error difference of the inside the shape */

//static Int P_diff;
#define DIFF1(v1,v2,idx) (P_diff = (v1[idx]-v2[idx]), ABS(P_diff))

/***********************************************************CommentBegin******
 *
 * -- InterpolateImage -- Interpolates a complete  (SInt)image
 *
 * Purpose :
 *      Interpolates a complete  (SInt) image for easier half pel prediction
 *
 ***********************************************************CommentEnd********/

Void
InterpolateImage(
Image   *input_image,							  /* <-- image to interpolate (SInt) */
Image   *output_image,							  /* --> interpolated image (SInt)  */
Int     rounding_control
)
{
	SInt   *ii, *oo;
	UInt    i, j;
	UInt   width, height;

	width = input_image->x;
	height = input_image->y;
	ii = (SInt*)GetImageData(output_image);
	oo = (SInt*)GetImageData(input_image);

	/* main image */
	for (j = 0; j < height-1; j++)
	{
		for (i = 0; i  < width-1; i++)
		{
			*(ii + (i<<1)) = *(oo + i);
			*(ii + (i<<1)+1) = (*(oo + i) + *(oo + i + 1) + 1- rounding_control)>>1;
			*(ii + (i<<1)+(width<<1)) = (*(oo + i) + *(oo + i + width) + 1-
				rounding_control)>>1;
			*(ii + (i<<1)+1+(width<<1)) = (*(oo+i) + *(oo+i+1) +
				*(oo+i+width) + *(oo+i+1+width) + 2-
				rounding_control)>>2;
		}
		/* last pels on each line */
		*(ii+ (width<<1) - 2) = *(oo + width - 1);
		*(ii+ (width<<1) - 1) = *(oo + width - 1);
		*(ii+ (width<<1)+ (width<<1)-2) = (*(oo+width-1)+*(oo+width+width-1)+1-
			rounding_control)>>1;
		*(ii+ (width<<1)+ (width<<1)-1) = (*(oo+width-1)+*(oo+width+width-1)+1-
			rounding_control)>>1;
		ii += (width<<2);
		oo += width;
	}

	/* last lines */
	for (i = 0; i < width-1; i++)
	{
		*(ii+ (i<<1)) = *(oo + i);
		*(ii+ (i<<1)+1) = (*(oo + i) + *(oo + i + 1) + 1- rounding_control)>>1;
		*(ii+ (width<<1)+ (i<<1)) = *(oo + i);
		*(ii+ (width<<1)+ (i<<1)+1) = (*(oo + i) + *(oo + i + 1) + 1-
			rounding_control)>>1;
	}

	/* bottom right corner pels */
	*(ii + (width<<1) - 2) = *(oo + width -1);
	*(ii + (width<<1) - 1) = *(oo + width -1);
	*(ii + (width<<2) - 2) = *(oo + width -1);
	*(ii + (width<<2) - 1) = *(oo + width -1);

	return;
}


/***********************************************************CommentBegin******
 *
 * -- GetMotionImages --
 *
 * Purpose :
 *      Translate the MVs data from the resulting separated four
 *      (Float) Images (16x16/8x8, X,Y) of the motion estimation process
 *      into two Images, which contain the 16x16 and 8x8 MVs
 *      values acording to the modes (MBM_INTRA, MBM_INTER16,
 *      MBM_INTER8). It also
 *      makes a copy of imode16 (SInt-Image of modes).
 *
 * Return values :
 *      1 on success, -1 on error
 *
 ***********************************************************CommentEnd********/

Int
GetMotionImages(
Image   *imv16_w,								  /* <-- 16x16 horiz. MV Float-Image (MxN) (cuad.)   */
Image   *imv16_h,								  /* <-- 16x16 verti. MV Float-Image   (MxN) (cuad.) */
Image   *imv8_w,								  /* <-- 8x8  horizontal MV Float-Image  (MxN)       */
Image   *imv8_h,								  /* <-- 8x8  vertical MV Float-Image    (MxN)       */
Image   *imode16,								  /* <-- SInt-Image of modes            (M/2xN/2)    */
Image   **mv_x,									  /* --> horizontal MV Float-Image      (MxN)        */
Image   **mv_y,									  /* --> vertical   MV Float-Image      (MxN)        */
Image   **mode									  /* --> SInt-Image of modes           (M/2xN/2)     */
)
{

	Int     i, j;
	Int     width, height, base;
	Float   val_x, val_y;
	Float   *data_x, *data_y,
			*mv16_w, *mv16_h,
			*mv8_w,  *mv8_h;
	SInt    *mode16, *data_mode;
	SInt    modo;

	width = imode16->x; height = imode16->y;

	(*mode)=AllocImage(width,height,SHORT_TYPE);
	(*mv_x)=AllocImage(width*2,height*2,FLOAT_TYPE);
	(*mv_y)=AllocImage(width*2,height*2,FLOAT_TYPE);
	data_x = (Float*)GetImageData((*mv_x));
	data_y = (Float*)GetImageData((*mv_y));
	data_mode = (SInt*)GetImageData((*mode));
	mode16=(SInt*)GetImageData(imode16);
	mv16_w=(Float*)GetImageData(imv16_w);
	mv16_h=(Float*)GetImageData(imv16_h);
	mv8_w=(Float*)GetImageData(imv8_w);
	mv8_h=(Float*)GetImageData(imv8_h);

	for(j=0;j<height;j++)
	{
		for(i=0;i< width;i++)
		{
			modo=data_mode[j*width+i]=mode16[j*width+i];
			if ( modo==MBM_INTRA)				  /*INTRA*/
			{
				base=2*j*2*width+2*i;
				data_x[base]=0.0;  data_x[base+1]=0.0;
				data_y[base]=0.0;  data_y[base+1]=0.0;
				base+=width*2;
				data_x[base]=0.0;  data_x[base+1]=0.0;
				data_y[base]=0.0;  data_y[base+1]=0.0;
			}
			else if(modo==MBM_INTER16)			  /*INTER 16*/
			{
				base=2*j*2*width+2*i;
				val_x=mv16_w[base];val_y=mv16_h[base];

				data_x[base]=val_x; data_x[base+1]=val_x;
				data_y[base]=val_y; data_y[base+1]=val_y;
				base+=width*2;
				data_x[base]=val_x; data_x[base+1]=val_x;
				data_y[base]=val_y; data_y[base+1]=val_y;
			}
			else if (modo==MBM_INTER8)			  /*INTER4*8*/
			{
				base=2*j*2*width+2*i;

				data_x[base]   = mv8_w[base];
				data_y[base]   = mv8_h[base];
				data_x[base+1] = mv8_w[base+1];
				data_y[base+1] = mv8_h[base+1];
				base+=width*2;
				data_x[base]   = mv8_w[base];
				data_y[base]   = mv8_h[base];
				data_x[base+1] = mv8_w[base+1];
				data_y[base+1] = mv8_h[base+1];
			}
		}										  /* end for*/
	}											  /* end for*/

	return(1);
}


/***********************************************************CommentBegin******
 *
 * -- ChooseMode -- chooses coding mode INTRA/INTER dependig on the SAD values
 *
 * Purpose :
 *      chooses coding mode INTRA/INTER dependig on the SAD values
 *
 * Return values :
 *      1 for INTER, 0 for INTRA
 *
 ***********************************************************CommentEnd********/

Int
ChooseMode(
SInt   *curr,									  /* <-- current Y values (not extended)          */
Int    x_pos,									  /* <-- upper-left MB corner hor. coor.          */
Int    y_pos,									  /* <-- upper-left MB corner ver. coor.          */
Int    min_SAD,									  /* <-- min SAD (from integer pel search)        */
UInt   width									  /* <-- current Y picture width                  */
)
{
	Int   i, j;
	Int   MB_mean = 0, A = 0;
	Int   y_off;

	for (j = 0; j < MB_SIZE; j++)
	{
		y_off = (y_pos + j) * width;
		for (i = 0; i < MB_SIZE; i++)
		{
			MB_mean += *(curr + x_pos + i + y_off);
		}
	}

	MB_mean /= 256;

	for (j = 0; j < MB_SIZE; j++)
	{
		y_off = (y_pos + j) * width;
		for (i = 0; i < MB_SIZE; i++)
		{
				A += abs( *(curr + x_pos + i + y_off) - MB_mean );
		}
	}

	if (A < (min_SAD - 2*256))
		return 0;
	else
		return 1;
}


/***********************************************************CommentBegin******
 *
 * -- SAD_Macroblock -- obtains the SAD for a Macroblock
 *
 * Purpose :
 *      obtains the SAD for a Macroblock
 *
 * Return values :
 *      sad of the MB
 *
 ***********************************************************CommentEnd********/

Int
SAD_Macroblock(
SInt   *ii,										  /* <-- Pointer to the upper-left pel of first MB */
SInt   *act_block,								  /* <-- Id, second MB (width=16)                  */
UInt   h_length,								  /* <-- Width of first area                       */
Int    Min_FRAME								  /* <-- Minimum prediction error so far           */
)
{
/*	Int    i;
	Int    sad = 0;
	SInt   *kk;
	register Int P_diff;

	kk = act_block;
	i = 16;
	while (i--)
	{
		sad += (DIFF1(ii,kk,0)+DIFF1(ii,kk,1)
			+DIFF1(ii,kk,2)+DIFF1(ii,kk,3)
			+DIFF1(ii,kk,4)+DIFF1(ii,kk,5)
			+DIFF1(ii,kk,6)+DIFF1(ii,kk,7)
			+DIFF1(ii,kk,8)+DIFF1(ii,kk,9)
			+DIFF1(ii,kk,10)+DIFF1(ii,kk,11)
			+DIFF1(ii,kk,12)+DIFF1(ii,kk,13)
			+DIFF1(ii,kk,14)+DIFF1(ii,kk,15)
			);

		ii += h_length;
		kk += 16;
		if (sad > Min_FRAME)
			return MV_MAX_ERROR;
	}

	return sad;
*/
	int i, j;
	int sad = 0;
	SInt *p1 = ii, *p2 = act_block;

	i = 16;
	while (i--) {
		j = 16;
		while (j --)
			sad += abs((int)*(p1++) - (int)*(p2++));
		if (sad > Min_FRAME)
			return MV_MAX_ERROR;
		p1 += h_length - 16;
	}

	return sad;
}


/***********************************************************CommentBegin******
 *
 * -- SAD_Block -- obtains the SAD for a Block
 *
 * Purpose :
 *      obtains the SAD for a Block
 *
 * Return values :
 *      sad of the Block
 *
 ***********************************************************CommentEnd********/

Int
SAD_Block(
SInt   *ii,										  /* <-- First area                      */
SInt   *act_block,								  /* <-- Id. second MB (width=16)        */
UInt   h_length,								  /* <-- Width of first area             */
Int    min_sofar								  /* <-- Minimum prediction error so far */
)
{
/*	Int    i;
	Int    sad = 0;
	SInt   *kk;
	register Int P_diff;

	kk = act_block;
	i = 8;
	while (i--)
	{
		sad += (DIFF1(ii,kk,0)+DIFF1(ii,kk,1)
			+DIFF1(ii,kk,2)+DIFF1(ii,kk,3)
			+DIFF1(ii,kk,4)+DIFF1(ii,kk,5)
			+DIFF1(ii,kk,6)+DIFF1(ii,kk,7)
			);

		ii += h_length;
		kk += 16;
		if (sad > min_sofar)
			return INT_MAX;
	}

	return sad;
*/
	int i, j;
	int sad = 0;
	SInt *p1 = ii, *p2 = act_block;

	i = 8;
	while (i--) {
		j = 8;
		while (j --)
			sad += abs((int)*(p1++) - (int)*(p2++));
		if (sad > min_sofar)
			return INT_MAX;
		p1 += h_length - 8;
		p2 += 16 - 8;
	}

	return sad;
}



/***********************************************************CommentBegin******
 *
 * -- LoadArea -- fills array with a image-data
 *
 * Purpose :
 *      fills array with a image-data
 *
 * Return values :
 *      Pointer to the filled array
 *
 ***********************************************************CommentEnd********/

Void
LoadArea(
SInt	*im,									  /* <-- pointer to image         */
Int		x,										  /* <-- horizontal pos           */
Int		y,										  /* <-- vertical  pos            */
Int		x_size,									  /* <-- width of array           */
Int		y_size,									  /* <-- height of array          */
Int		lx,										  /* <-- width of the image data  */
SInt	*block									  /* <-> pointer to the array     */
)
{
	SInt   *in;
	SInt   *out;
	Int    i = x_size;
	Int    j = y_size;

	in = im + (y*lx) + x;
	out = block;

	while (j--)
	{
		while (i--)
			*out++ = *in++;
		i = x_size;
		in += lx - x_size;
	}

	return;
}


/***********************************************************CommentBegin******
 *
 * -- SetArea -- fills a image-data with an array
 *
 * Purpose :
 *      fills a image-data with an array
 *
 ***********************************************************CommentEnd********/

Void
SetArea(
SInt   *block,									  /* <-- pointer to array         */
Int    x,										  /* <-- horizontal pos in image  */
Int    y,										  /* <-- vertical  pos in image   */
Int    x_size,									  /* <-- width of array           */
Int    y_size,									  /* <-- height of array          */
Int    lx,										  /* <-- width of the image data  */
SInt   *im										  /* --> pointer to image         */
)
{
	SInt   *in;
	SInt   *out;
	Int    i = x_size;
	Int    j = y_size;

	in  = block;
	out = im + (y*lx) + x;

	while (j--)
	{
		while (i--)
			*out++ = *in++;
		i = x_size;
		out += lx - x_size;
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久老虎| 国产九九视频一区二区三区| 欧美亚洲一区三区| 亚洲综合视频在线观看| 欧美亚洲一区三区| 麻豆国产精品一区二区三区| 久久婷婷久久一区二区三区| 成人免费看黄yyy456| 亚洲美女少妇撒尿| 在线不卡欧美精品一区二区三区| 美女视频黄a大片欧美| 久久久久久一二三区| 白白色亚洲国产精品| 亚洲第一二三四区| 2021中文字幕一区亚洲| 成人开心网精品视频| 亚洲国产裸拍裸体视频在线观看乱了| 欧美午夜一区二区| 亚洲精品中文在线观看| 91精品在线免费观看| 国产精品自拍一区| 亚洲国产aⅴ成人精品无吗| 日韩免费高清电影| 一本久久a久久精品亚洲| 美脚の诱脚舐め脚责91 | 国产欧美在线观看一区| 色爱区综合激月婷婷| 激情综合色综合久久| 一区二区三区免费观看| 久久久久国产成人精品亚洲午夜| 色哟哟欧美精品| 国产精品资源站在线| 亚洲成年人影院| 中文字幕一区二区不卡| 欧美成人aa大片| 欧美私模裸体表演在线观看| 国产成人在线网站| 天天综合网天天综合色| 1000精品久久久久久久久| 精品99久久久久久| 欧美三区在线观看| 91亚洲男人天堂| 国产激情视频一区二区三区欧美| 视频一区国产视频| 亚洲欧美电影院| 久久新电视剧免费观看| 欧美三区在线观看| av网站一区二区三区| 国产制服丝袜一区| 天天av天天翘天天综合网| 激情成人综合网| 亚洲午夜三级在线| 亚洲精品精品亚洲| 国产精品人人做人人爽人人添| 欧美成人aa大片| 欧美精品丝袜中出| 欧美怡红院视频| 91啪亚洲精品| proumb性欧美在线观看| 国产suv一区二区三区88区| 久久国产综合精品| 麻豆精品新av中文字幕| 午夜av一区二区| 午夜激情一区二区| 亚洲成人av电影| 午夜精品久久久久久久久久久 | 色婷婷久久99综合精品jk白丝| 成人av电影观看| av一区二区三区黑人| a级精品国产片在线观看| 国产大陆精品国产| 成人小视频免费观看| 成人听书哪个软件好| 高清不卡在线观看| 白白色 亚洲乱淫| 91在线视频免费91| 在线精品视频一区二区三四| 欧美偷拍一区二区| 在线亚洲高清视频| 欧美精品日韩一本| 日韩欧美成人一区二区| 日韩欧美一卡二卡| 久久精品人人爽人人爽| 欧美激情一区二区三区全黄| 国产精品视频免费看| 精品午夜久久福利影院| 国产乱码精品一区二区三| 国产剧情av麻豆香蕉精品| 国产成人精品1024| 91视频精品在这里| 欧美三级日韩在线| 日韩视频一区二区在线观看| 精品卡一卡二卡三卡四在线| 久久精子c满五个校花| 国产精品理论片| 亚洲资源在线观看| 奇米精品一区二区三区四区 | 亚洲一卡二卡三卡四卡| 日韩中文字幕不卡| 国产毛片精品一区| 国产伦理精品不卡| 91蜜桃在线免费视频| 欧美一区二区三区四区久久| 久久久www成人免费毛片麻豆| 国产精品美女久久久久久久久| 亚洲一区二区五区| 蜜桃久久精品一区二区| www.亚洲在线| 欧美一级淫片007| 亚洲欧美综合色| 日韩电影免费在线看| 国产精品一二三| 欧美日韩一卡二卡三卡| 久久综合狠狠综合久久激情| 一区二区三区国产精品| 精品一区二区在线看| 色综合视频在线观看| 欧美成人高清电影在线| 亚洲欧美日韩小说| 黑人巨大精品欧美黑白配亚洲| 91亚洲精品久久久蜜桃网站| 精品国精品国产| 亚洲一区二区免费视频| 丁香激情综合国产| 日韩亚洲欧美综合| 亚洲线精品一区二区三区八戒| 久久精品免费观看| 欧美日韩一级二级| 欧美国产日产图区| 麻豆成人av在线| 欧美午夜精品理论片a级按摩| 国产精品素人视频| 国产一区美女在线| 日韩欧美激情四射| 亚洲精品高清视频在线观看| 国产精品一品二品| 精品久久国产97色综合| 亚洲成人先锋电影| 色琪琪一区二区三区亚洲区| 国产女人18毛片水真多成人如厕 | 亚洲午夜精品在线| 成人黄色大片在线观看| 精品久久免费看| 蜜桃免费网站一区二区三区| 欧美日韩另类一区| 一区二区三区免费看视频| 91视频一区二区三区| 国产精品午夜在线观看| 国产精品白丝jk白祙喷水网站| 日韩三级av在线播放| 日韩国产在线观看一区| 欧美日韩专区在线| 亚洲一线二线三线久久久| 一道本成人在线| 亚洲精品伦理在线| 91麻豆免费在线观看| 综合网在线视频| 99久久99久久精品免费看蜜桃| 亚洲国产精品传媒在线观看| 成人午夜视频网站| 国产精品家庭影院| 99久久免费精品| 亚洲人成网站在线| 91国产丝袜在线播放| 亚洲一区在线观看网站| 欧美日韩国产一二三| 日韩福利视频网| 日韩欧美黄色影院| 国产综合色在线| 国产亚洲精久久久久久| 成人午夜av在线| 亚洲女同ⅹxx女同tv| 欧美在线观看18| 日韩成人免费电影| 精品久久一区二区| 成人免费看片app下载| 亚洲人成精品久久久久| 欧美日韩精品欧美日韩精品一综合| 午夜精品久久久久久久久久| 日韩美女视频在线| 国产黄色精品视频| 亚洲免费视频中文字幕| 欧美日韩免费一区二区三区 | 亚洲国产精品激情在线观看| 成人动漫精品一区二区| 亚洲另类在线一区| 欧美肥胖老妇做爰| 国产成人午夜精品影院观看视频| 中文字幕一区二区三| 欧美精品xxxxbbbb| 国产老肥熟一区二区三区| 亚洲欧美福利一区二区| 欧美一区二区三区影视| 国产精品一区二区在线观看不卡 | 久久疯狂做爰流白浆xx| 国产欧美一区二区三区在线看蜜臀 | 一区二区三区国产精华| 日韩亚洲欧美成人一区| 9人人澡人人爽人人精品| 五月婷婷激情综合网|