📄 cif.c
字号:
#include <std.h>
#include <sem.h>
#include <mem.h>
#include <gio.h>
#include <csl_dat.h>
#include <fvid.h>
#include"CIF.h"
PtrCIFFrame *CIFFrameBuf1;
PtrCIFFrame *CIFFrameBuf2;
/***************************************************************
name:CONYUV2_YUV1
input:*cap1_FrameBuf,store the 4:2:2 format video signal
output:*CIFBufPtr,tell the 4:2:0 format video signal buf addr.
description:convert 4:2:2 format to CIF 4:2:0
call:DAT_copy();
call by: tskVideoLoopback();
***************************************************************/
int CONYUV2_YUV1(FVID_Frame *cap1_FrameBuf, PtrCIFFrame *CIFBufPtr)
{
int i,j,bufSz;
int YsAddrOffset,CsAddrOffset;
char *curAddr ;
// allocate frame buffer
bufSz =CIF_Line_SZ* CIF_numLine*1.5;
for(i = 0; i < CIF_numFrms; i ++)
{
if((curAddr = MEM_calloc(SegId,bufSz,
ALIGNMENT)) == MEM_ILLEGAL)
return IOM_EALLOC;
}
//define the CIFFrameBuf1 Addr
CIFFrameBuf1->y = curAddr;
curAddr+=CIF_numLine*CIF_yPitch;
CIFFrameBuf1->cb = curAddr;
curAddr +=CIF_cPitch*CIF_cLine;
CIFFrameBuf1->cr = curAddr;
//define the CIFFrameBuf2 Addr
curAddr +=CIF_cPitch*CIF_cLine;
CIFFrameBuf2->y = curAddr;
curAddr +=CIF_numLine*CIF_yPitch;
CIFFrameBuf2->cb = curAddr;
curAddr +=CIF_cPitch*CIF_cLine;
CIFFrameBuf2->cr = curAddr;
for(i=0; i<numLine; i++)
{
/*copy even queue Y,Cr,Cb data in even num line ,
discard odd queue data in even num line*/
if(!(i&0x01))
{
for(j=0;j<Line_SZ-16;j++)
{
if(!(j&0x01))
{
YsAddrOffset=i*Line_SZ+j;
CsAddrOffset=i*cPitch+j;
DAT_copy(cap1_FrameBuf->frame.iFrm.y1 + YsAddrOffset,
CIFFrameBuf1->y+i*CIF_yPitch+j/2,1);
DAT_copy(cap1_FrameBuf->frame.iFrm.cb1 + CsAddrOffset,
CIFFrameBuf1->cb+(i/2)*CIF_cPitch+j/2,1);
DAT_copy(cap1_FrameBuf->frame.iFrm.cr1 + CsAddrOffset,
CIFFrameBuf1->cr+(i/2)*CIF_cPitch+j/2,1);
}
}
}
//only copy even queue Y data in odd line
else
{
for(j=0;j<Line_SZ-16;j++)
{
if(!(j&0x01))
{
YsAddrOffset=i*Line_SZ+j;
DAT_copy(cap1_FrameBuf->frame.iFrm.y1 + YsAddrOffset,
(CIFFrameBuf1->y+i*CIF_yPitch+j/2),1);
}
}
}
}
CIFBufPtr->y=CIFFrameBuf1->y;
CIFBufPtr->cb=CIFFrameBuf1->cb;
CIFBufPtr->cr=CIFFrameBuf1->cr;
CIFFrameBuf1->y=CIFFrameBuf2->y;
CIFFrameBuf1->cb=CIFFrameBuf2->cb;
CIFFrameBuf1->cr=CIFFrameBuf2->cr;
CIFFrameBuf2->y=CIFBufPtr->y;
CIFFrameBuf2->cb=CIFBufPtr->cb;
CIFFrameBuf2->cr=CIFBufPtr->cr;
return IOM_COMPLETED;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -