📄 linux2video.c
字号:
}
}
void addbanner(unsigned char * dest,unsigned char * hz_pixel,unsigned char count)
{
int row,line,i,j;
int num;
unsigned char *hz_pixel_tmp;
hz_pixel_tmp=malloc(48*48*count);
for(j=(16*count-1);j>-1;j--)
for(i=0;i<8;i++)
{
if( (hz_pixel[j] >>i)&0x01 )
{
hz_pixel_tmp[j*24+3*(8-i)-1]=0xff;
hz_pixel_tmp[j*24+3*(8-i)-2]=0xff;
hz_pixel_tmp[j*24+3*(8-i)-3]=0xff;
}
else
{
hz_pixel_tmp[j*24+3*(8-i)-1]=0;
hz_pixel_tmp[j*24+3*(8-i)-2]=0;
hz_pixel_tmp[j*24+3*(8-i)-3]=0;
}
}
// for(i=0;i<768*count;i++)
// printf("zzz %x\n",hz_pixel_tmp[i]);
for(i=0;i<count;i++)
for(row=0;row<48;row++)
for(line=0;line<48;line++)
{
dest[3*(WIDTH_DEFAULT_f*(560+row/3)+16*i)+line]=hz_pixel_tmp[48*48*i+row*48+line];
}
free(hz_pixel_tmp);
}
/*
void addbanner(unsigned char * dest,unsigned char * hz_pixel,unsigned char count)
{
int row,line,i;
int num;
for(num=31*count;num>-1;num--)
for(i=0;i<8;i++)
{
if( (*(hz_pixel+num) >>i)&0x1 )
{
*(dest+((WIDTH_DEFAULT_f*((HEIGHT_DEFAULT_f+count*16)-(31*count-num)/2)+384+(8-i)+(num%2)*8)-1)*3) =BACK_COLOR;
*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+1) =BACK_COLOR;
*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+2) =BACK_COLOR;
}
else
{
*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3) =FRONT_COLOR;
*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+1) =FRONT_COLOR;
*(dest+((WIDTH_DEFAULT_f*(HEIGHT_DEFAULT_f-(31-num)/2)+384+(8-i)+(num%2)*8)-1)*3+2) =FRONT_COLOR;
}
}
}
*/
void compress_to_jpeg_file(FILE *outfile,unsigned char * image_buffer, int quality)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */
int row_stride; /* physical row width in image buffer */
int image_width;
int image_height;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, outfile);
image_width = WIDTH_DEFAULT_f;
image_height = HEIGHT_DEFAULT_f;
cinfo.image_width = image_width; // image width and height, in pixels
cinfo.image_height = image_height;
cinfo.input_components = 3;// # of color components per pixel
cinfo.in_color_space=JCS_RGB;//JCS_RGB// colorspace of input image JCS_YCbCr
jpeg_set_defaults(&cinfo);
jpeg_set_quality(&cinfo, quality,TRUE); //limit to baseline-JPEG values
jpeg_start_compress(&cinfo,TRUE);
row_stride = image_width*3;// JSAMPLEs per row in image_buffer
while (cinfo.next_scanline<cinfo.image_height)
{
row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
}
void exchange_r_b( char * f,long size)
{
char r,b;
long i;
for( i = 0; i < size ; i++)
{
r = *f;
b = *( f + 2);
*f = b;
*(f + 2) = r;
f = f +3;
}
}
void exchange_y_CbCr(unsigned char * f,long size)
{
unsigned char cbcr,y;
long i;
for( i = 0; i < size ; i++)
{
cbcr= *f;
y = *( f + 1);
*f = y;
*(f + 1) = cbcr;
//i++;
}
}
int main (int argc, char *argv[])
{
FILE * my_file_fd;
int myfd;
int fd;
struct timeval time_start,time_end;
unsigned char hzpixel[32]={ 0x08,0x80,0x08,0x80,
0x08,0x80,0x11,0xfe,
0x11,0x02,0x32,0x04,
0x54,0x20,0x10,0x20,
0x10,0xa8,0x10,0xa4,
0x11,0x26,0x12,0x22,
0x10,0x20,0x10,0x20,
0x10,0xa0,0x10,0x40,
0x08,0x80,0x08,0x80,
0x08,0x80,0x11,0xfe,
0x11,0x02,0x32,0x04,
0x54,0x20,0x10,0x20,
0x10,0xa8,0x10,0xa4,
0x11,0x26,0x12,0x22,
0x10,0x20,0x10,0x20,
0x10,0xa0,0x10,0x40
};
int nRead=0;
unsigned int pic_number_count=0;
long pixel_num;
unsigned short * receive_SAA7114_data_yuv;
u16 * receive_SAA7114_data_rgb;
//////////////////////////////////////////////////////////////////////////
//----------serial define----------------------
int ret,portno,nWritten_8031;
int nWrite=0;
//----------serial define end------------------
//////////////////////////////////////////////////////////////////////////
long i;
/*variable for pic buf_to_8031 */
////////////////////////////////////////////////////////////////////////
printf("\n--------------------------------------------------------\n");
printf("------------Mode: dian zhi jin cha Ver:1.0.0 -------------\n");
printf("--------------------------------------------------------\n");
/////////////////////////////////////////////////////////
//connect to MCU and set date
portno=0;
ret=OpenCom(portno,"/dev/ttyS1",115200);
if(ret==-1)
{
perror("!!ERROR/dev/ttyS1");
exit(1);
}
else printf("OK open ttyS 1\n");
do
{
nWritten_8031=ComWrt(portno,"gt",2);
fflush(stdout); //更新缓冲区,将数据写入stdout
nRead=ComRd(0,buf_to_8031,12,3000);
if(nRead>0)
{
printf("Get time time is %s\n",buf_to_8031);
}
else printf("!!mcu Timeout\n");
}while(nRead==0);
//printf("Time is %s\n",buf_to_8031);
if(fork()==0)if(execl("/bin/date","date","-s",buf_to_8031,NULL)==-1)perror("ERROR STIME\n\n");
print_currenttime();
//--------set date finished
chdir("/hd/");
//////////////////////..2 //////////////////////////////////////////
//print configuration table
printf("\n########## CURRENTLY SCHEME TABLE ##############\n");//打印配置表
printf("\n###############################################\n");
//------------------------------------------------------------------
pixel_num=HEIGHT_DEFAULT_f*WIDTH_DEFAULT_f;
if((myfd=open(MYDRV_DEV,O_RDWR | O_NONBLOCK))<0) perror("!!ERROR opening video");
// printf("\n\n%d\n\n",sizeof(unsigned short));
// printf("\n\n%d\n\n",sizeof(int));
// printf("\n\n%d\n\n",sizeof(char));
receive_SAA7114_data_yuv=malloc(pixel_num*3);
memset(receive_SAA7114_data_yuv,0,pixel_num*3);
receive_SAA7114_data_rgb=malloc(pixel_num*3);
memset(receive_SAA7114_data_rgb,0,pixel_num*3);
while(1)
{
nRead=ComRd(0,info_from_mcu,2,3000);
if(nRead>0)
{
for(i=0;i<pixel_num;i++)
{
read(myfd,(receive_SAA7114_data_yuv+i),2);
}
nWritten_8031=ComWrt(portno,"1",1);//接受完数据后通知单片机
printf("\n==== routeway %x ====\n",*info_from_mcu);
exchange_y_CbCr(receive_SAA7114_data_yuv,pixel_num);//交换y与cbcr的位置
if(v4l_yuv422p2rgb(receive_SAA7114_data_rgb,receive_SAA7114_data_yuv,WIDTH_DEFAULT_f,HEIGHT_DEFAULT_f,24)<0)
printf("\n\n!!!error v4l_yuv422p2rgb\n\n");//yuv转RGB
//exchange_r_b(receive_SAA7114_data_rgb,pixel_num);
printf("myNV10 -> %x.jpg...\n",pic_number_count);
sprintf(sendPicFilename_compress,"%x.jpg",pic_number_count);
pic_number_count++;//文件名计数器加1
my_file_fd=fopen(sendPicFilename_compress,"w+");//创建这个文件
if(my_file_fd==NULL)perror("!!error creat");
compress_to_jpeg_file(my_file_fd,receive_SAA7114_data_rgb,JIMAGEQUALITY);
// fwrite(receive_SAA7114_data_yuv,2,pixel_num,my_file_fd);
fclose(my_file_fd);
if(init_eth()==1)
{
send_picfile(sendPicFilename_compress,1,88);//车道,速度
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -