📄 yuv2yuv.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 + -