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

📄 cif.c

📁 在海尔的DM642开发板实现RF5框架
💻 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 + -