⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuv2yuv.c

📁 基于SAA7113的MPEG-4程序
💻 C
字号:
#include <stdio.h>

int IMAGE_HEIGHT; 
int IMAGE_WIDTH;
int PICSIZE;
int U_START;
int V_START;
int ROW_WIDTH;
/***************************************************************************
*  
*   YUV4:2:2 to YUV4:2:0
*   Src file:
              Y U Y V Y U Y V ..........Y U Y V
			  Y U Y V Y U Y V ..........Y U Y V
			             .
						 .
						 .
			  Y U Y V Y U Y V ..........Y U Y V

			total 320*2 collums, 240 rows

    Dest file:
	         Y Y Y ....................Y Y Y Y 
			 Y Y Y ....................Y Y Y Y 
			         .
					 .
					 .
			 Y Y Y ....................Y Y Y Y 
			 U U U .......U U U
			 U U U .......U U U
			         .
				     .
			 U U U .......U U U
			 V V V .......V V V
		     V V V .......V V V
			          .
					  .
			 V V V .......V V V

	      Y: 320 x 240
		  U: 160 x 120
	      V: 160 x 120

 *****************************************************************************/
#if 0
int yuv4222yuv420(int x, int y, unsigned char *src,unsigned char *dest)
{
	short m,n;
	unsigned char *ptrY,*ptrU,*ptrV;
	static first = 1;

	if(first)
	{
		IMAGE_HEIGHT = y; 
		IMAGE_WIDTH = x;
		PICSIZE = IMAGE_HEIGHT*IMAGE_WIDTH*3/2;
		U_START = IMAGE_HEIGHT*IMAGE_WIDTH;
		V_START = IMAGE_HEIGHT*IMAGE_WIDTH*5/4;
		ROW_WIDTH = IMAGE_WIDTH*2;
		first = 0;
	}
		
	ptrY = dest;
	ptrV = dest + U_START;
	ptrU = dest + V_START;

	if((x == 720) && (y == 576))
	{
		for(m=0;m<IMAGE_HEIGHT/2;m++)
			for(n=16;n<ROW_WIDTH-16;n+=8)
			{
				*ptrY++ = src[m*ROW_WIDTH + n + 1];
				*ptrY++ = src[m*ROW_WIDTH + n + 3];
				if(!(m%2))
				{		
					*ptrU++ = src[m*ROW_WIDTH + n + 0];
					*ptrV++ = src[m*ROW_WIDTH + n + 2];
				}
			}
		
		return 0;
	}
			
	for(m=0;m<IMAGE_HEIGHT;m++)
		for(n=0;n<ROW_WIDTH;n+=4)
		{
			*ptrY++ = src[m*ROW_WIDTH + n];
			*ptrY++ = src[m*ROW_WIDTH + n + 2];
			if(!(m%2))
			{		
				*ptrU++ = src[m*ROW_WIDTH + n + 1];
				*ptrV++ = src[m*ROW_WIDTH + n + 3];
			}
		}
			

	return 0;
}
#endif

int yuv4222yuv420(int width, int height, unsigned char *src,unsigned char *dest)
{
	int i,j;
	unsigned char *ptrY,*ptrU,*ptrV;
	static first = 1;

	if(first)
	{
	
		U_START = 352*288;
		V_START = 352*288*5/4;
		ROW_WIDTH = width*2;
		first = 0;
	}
		
	ptrY = dest;
	ptrU = dest + U_START;
	ptrV = dest + V_START;


	for(i=0;i<288;i++)
		for(j=0;j<352;j++)
		{
			if(!(j%2))
			{
			    if(!(i%2))
				*ptrU++ = *(src + i*ROW_WIDTH + 4*j + 16);
			    *ptrY++ = *(src + i*ROW_WIDTH + 4*j + 1+ 16);
			}
			else
			{
			    if(!(i%2))
				*ptrV++ = *(src + i*ROW_WIDTH + 4*j + 2+ 16);
			    *ptrY++ = *(src + i*ROW_WIDTH + 4*j + 3+ 16);
			}
			
		}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -