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

📄 boostvideo.cpp

📁 把C语言的thread和socket封装了一层.希望能给初学者带来帮助.
💻 CPP
字号:

#include "BoostVideo.h"
unsigned char 	rawdata[MAX_IMAGE_SIZE];
int BoostVideo::InitVideoSource(void)
{
	return open("/dev/saa7113", O_RDWR);
}
void BoostVideo::InitCoding(int quality,int Image_mode,int colorbyte)
{
	cod_setquality(quality);

	switch(Image_mode)
	{
	case CIF:
		cod_setsize(352,288,colorbyte);  
		break;
	case QVGA:
		cod_setsize(320,240,colorbyte);   
		break;
	case QCIF:
		cod_setsize(176,144,colorbyte);   
		break;
	case D1:
		cod_setsize(704,488,colorbyte);   
		break; 
	}
}
int BoostVideo::JpegTest(int device)
{
	int rawdatalen,jpegdatalen;
	char *data;
    rawdatalen  = GetVideoFrameData(&data,&rawdatalen,device,D1);
    cod_inputorgdata(data,rawdatalen);  
    cod_getcodedata((char **)&jpegdata,&jpegdatalen);            
	return jpegdatalen;
}
int BoostVideo::GetVideoFrameData(char **data,int *len,int devctx,int videomode)
{
	int ret,IMAGE_SIZE = 0;
	unsigned char tempdata[MAX_IMAGE_SIZE];
	switch(videomode)
	{
	case CIF:
		IMAGE_SIZE = 352*288*2;  
		break;
	case QVGA:
		IMAGE_SIZE = 320*240*2;   
	case QCIF:
		IMAGE_SIZE = 176*144*2;  
		break;
	case D1:
		IMAGE_SIZE = 720*488*2;  
		break;		
	}
	if ((ret = read(devctx, tempdata, IMAGE_SIZE)) <0)
   	{
		printf("No available image!\n");				
		//readout =1;
		//		return 0;												//sh no picture no stop
	}
	yuv4222yuv444(tempdata,rawdata,ret);
	FrameConcate(rawdata,tempdata,D1);
	memcpy(rawdata,tempdata,D1_IMAGE_SIZE);
	*data = (char *)rawdata; 
	*len = 	(ret/2)*3;
	return *len;
}
int BoostVideo::yuv4222yuv444(unsigned char *indata,unsigned char *outdata,int len)
{
	int i,pixeln = len/2;
	unsigned char Cr = *(indata + 0),Cb = *(indata + 2);
	for(i = 0;i<pixeln;i++)
	{
		if(i%2 == 0)
		{
			Cr = *(indata+i*2+0);
		}
		else
		{
			Cb = *(indata+i*2+0);
		}
		*(outdata+i*3) = *(indata+i*2+1);
		*(outdata+i*3+1) = Cr;
		*(outdata+i*3+2) = Cb;
	}
	return 0;
}
void BoostVideo::FrameConcate(unsigned char *inframe,unsigned char *outframe,int framemode)
{
	int w1,w2,h;
	int i;
	unsigned char * ptr = outframe;
	if(inframe == NULL || outframe == NULL)
	{
		printf("Frame concate invalid data input\n!");
	}
	switch(framemode)
	{
	case D1:
		w1 = 720;
		w2 = 704;
		w1 *= 3;
		w2 *= 3;
		h = 488/2;//488/2
		for(i=0;i<h;i++)
		{
			memcpy(ptr + i*w2*2,inframe + i*w1 + 8*3,w1 - 16);	//w1 - 16  8*3	i*w2*2	
			memcpy(ptr + i*w2*2 + w2,inframe + (i+h)*w1+ 8*3,w1 - 16);//w1 - 16  8*3 i*w2*2
			
		}
		break;
	default:
		break;
	}
}

⌨️ 快捷键说明

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