📄 yuvtorgb.c
字号:
#include <services\services.h> // system services
#include <drivers\adi_dev.h> // device manager includes
#include <drivers\ppi\adi_ppi.h> // PPI driver includes
#include "ppi_L1_ppi_line_transfers.h"
void convertyuvrgb(
unsigned short OutSize, unsigned long *OutData,
unsigned short InSize, u16 *InData)
{
unsigned short i,j;
long r,g,b,r1,g1,b1,cb,cr,y0,y1;
u8 *yuv;
InData+=138;
for (j=0;j<OutSize;j++)
{
yuv = (u8*)(&InData[j]);
y1 = (*(yuv+3)*298)-16;
cr = *(yuv+2)-128;
y0 = (*(yuv+1)*298)-16;
cb = *yuv-128;
r = (409*cr);
g = (100*cb + 208*cr);
b = (516*cb);
r1=y0+r;
g1=y0-g;
b1=y0+b;
if(r1>0xFFFF) r1 = 255;
else if(r1<0) r1 = 0;
else r1>>=8;
if(g1>0xFFFF) g1 = 255;
else if(g1<0) g1 = 0;
else g1>>=8;
if(b1>0xFFFF) b1 = 255;
else if(b1<0) b1 = 0;
else b1>>=8;
//subsampled the Y component /2
OutData[j]=
((b1<<24) & 0xF8000000)|
((g1<<19) & 0x07E00000)|
((r1<<13) & 0x001F0000)|
((b1<<8) & 0x0000F800)|
((g1<<3) & 0x000007E0)|
((r1>>3) & 0x0000001F);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -