📄 linux2video.c
字号:
/*****************************************************************************
*
* 版本 0.0.1
*
* 设计者: 保密 2006 3
* 单进程
*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <getopt.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <linux/types.h>
#include <linux/videodev.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <math.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
#include <errno.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <sys/time.h> /* gettimeofday() */
#include <dirent.h>
#include <limits.h>
extern int errno;
#ifdef HAVE_LIBJPEG
#include "jpeglib.h"
#include <setjmp.h>
#endif
#include "v4l.h"
#include "rs232.c"
#include "bmp.c"
#include "crc.h"
#include "headfile.h"
#define VIDEO_DEV "/dev/video0"
#define MYDRV_DEV "/dev/mydrv"
#define FMT_UNKNOWN 0
#define FMT_PPM 1
#define FMT_PGM 2
#define FMT_PNG 3
#define FMT_JPEG 4
#define FMT_YUV4MPEG 5
#define IN_TV 0
#define IN_COMPOSITE 1
#define IN_COMPOSITE2 2
#define IN_SVIDEO 3
#define NORM_PAL 0
#define NORM_NTSC 1
#define NORM_SECAM 2
#define QUAL_DEFAULT 80
#define DST_PORT_DEFAULT 1024
#define DST_IP_DEFAULT "192.168.6.39"
#define MAX_CTRL_BUF_SIZE 256
#define TIMEBUFSIZE 6
#define WIDTH_DEFAULT_s 384
#define HEIGHT_DEFAULT_s 288
#define WIDTH_DEFAULT_f 600
#define HEIGHT_DEFAULT_f 480
#define FRONT_COLOR 0
#define BACK_COLOR 0xff
#define JIMAGEQUALITY 60
#define JPGMAX 0XFF
/* globals */
struct timeval time_start,time_end;
int my_filesize_fd;
struct stat file_stat_struct;
unsigned char buf_to_8031[12];
unsigned char info_from_mcu[2];
DIR * dir;
struct dirent * dir_hd;
time_t timep;
struct tm * date_struct; //time define
int connect_up_yn=-1;
int SendPicFilename[19];
char sendPicFilename_compress[9];
/*variable for net transport */
int send_socket_descriptor;
struct sockaddr_in Send_address;
struct sockaddr_in recv_address;
int DST_port=DST_PORT_DEFAULT;
char *dst_ip=DST_IP_DEFAULT;
/*variable for device setting */
struct video_mbuf vid_buf;
struct video_mmap vid_mmap;
int width = WIDTH_DEFAULT_s, height = HEIGHT_DEFAULT_s;
int quality = QUAL_DEFAULT; /* default jpeg quality setting */
int input = INPUT_DEFAULT; /* this means take over current device settings*/
int norm = NORM_DEFAULT;
/*variable for jpeg compress */
struct jpeg_compress_struct cjpeg;
struct jpeg_error_mgr jerr;
char *frame_end="stop";
JSAMPROW row_ptr[1];
int row_stride;
/*variable for thread sync */
sem_t mutex_sem,cam_empty_sem,cam_full_sem,mem_empty_sem,mem_full_sem;
int cam_in,in,out,finished;/*point to the frame to read and compress*/
int num=100,not_loop=1;
void print_currenttime()
{
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; // time define
printf("\ntime : ");
time(&timep);
date_struct=gmtime(&timep);
printf("%d %d %d ",(1900+date_struct->tm_year), (1+date_struct->tm_mon),date_struct->tm_mday);
printf("%s %d %d %d\n", wday[date_struct->tm_wday], date_struct->tm_hour, date_struct->tm_min, date_struct->tm_sec);
}
void send_picfile(unsigned char *send_picfilename,unsigned char chedao,unsigned char speed)
{
FILE *pic_fd;
int my_filesize_fd;
unsigned char * pic_Filebuffer;
unsigned char * sendpicbuffer;
unsigned long seconds;
//////////////////////////////////////////////////////////////////////////
//----------------------define masthead
struct tagPACKETINFO
{
unsigned long dwTime; //到达时间
float fSpeed; //行驶速度
float fLength; //车辆长度
unsigned char szLaneName; //车道号
unsigned char szDirection; //行驶方向
unsigned int szPicLenth; //图片文件大小不用
}PACKETINFO,* PPACKETINFO_p;
chdir("/hd/");
if( (pic_fd=fopen(send_picfilename,"rb")) ==NULL )
printf("ERROR open %s!!\n",send_picfilename);
else
{
my_filesize_fd=open(send_picfilename,O_RDONLY);
fstat(my_filesize_fd,&file_stat_struct);
printf("SEND %s(%d)\n",send_picfilename,file_stat_struct.st_size);//close(my_filesize_fd);
close(my_filesize_fd);
sendpicbuffer=malloc(file_stat_struct.st_size);
memset(sendpicbuffer,0,file_stat_struct.st_size);
PPACKETINFO_p=&PACKETINFO;
memset(PPACKETINFO_p,0,sizeof(PACKETINFO));
seconds= time((time_t*)NULL)-8*3600;
//printf("\n%d\n",seconds);
PPACKETINFO_p->dwTime=seconds;
PPACKETINFO_p->fLength=1;
PPACKETINFO_p->fSpeed=speed;
PPACKETINFO_p->szDirection=1;
PPACKETINFO_p->szLaneName=chedao;//send chedao
PPACKETINFO_p->szPicLenth=file_stat_struct.st_size;
// fseek(pic_fd,100,SEEK_SET);
if((fread(sendpicbuffer,sizeof(unsigned char),(file_stat_struct.st_size),pic_fd))<0)//读取图片数据
perror("\n\nError num reading!!\n\n");
fclose(pic_fd);
send(send_socket_descriptor,&(PACKETINFO.dwTime),sizeof(unsigned long),0);
send(send_socket_descriptor,&(PACKETINFO.fSpeed),sizeof(float),0);
send(send_socket_descriptor,&(PACKETINFO.fLength),sizeof(float),0);
send(send_socket_descriptor,&(PACKETINFO.szLaneName),sizeof(unsigned char),0);
send(send_socket_descriptor,&(PACKETINFO.szDirection),sizeof(unsigned char),0);
if((send(send_socket_descriptor,&(PACKETINFO.szPicLenth),sizeof(unsigned int),0))<0)
{//send baotou first
if(errno==EBADF)printf ("\nTimeout! EBADF\n");
if(errno==EFAULT)printf ("\nTimeout! EFAULT \n");
if(errno==ENOTSOCK)printf ("\nTimeout! ENOTSOCK \n");
if(errno==EISCONN)printf ("\nTimeout! EISCONN\n");
if(errno==ECONNREFUSED)printf ("\nTimeout! ECONNREFUSED\n");
if(errno==ETIMEDOUT)printf ("\nTimeout! ETIMEDOUT\n");
if(errno==ENETUNREACH)printf ("\nTimeout! ENETUNREACH \n");
if(errno==EAFNOSUPPORT)printf ("\nTimeout! EAFNOSUPPORT \n");
if(errno==EALREADY)printf ("\nTimeout! EALREADY\n");
perror ("\n!!ERROR send PACKETINFO!");
}else
{//then send file context
if((send(send_socket_descriptor,sendpicbuffer,file_stat_struct.st_size,0))<0)
{
if(errno==EBADF)printf ("\nTimeout! EBADF\n");
if(errno==EFAULT)printf ("\nTimeout! EFAULT \n");
if(errno==ENOTSOCK)printf ("\nTimeout! ENOTSOCK \n");
if(errno==EISCONN)printf ("\nTimeout! EISCONN\n");
if(errno==ECONNREFUSED)printf ("\nTimeout! ECONNREFUSED\n");
if(errno==ETIMEDOUT)printf ("\nTimeout! ETIMEDOUT\n");
if(errno==ENETUNREACH)printf ("\nTimeout! ENETUNREACH \n");
if(errno==EAFNOSUPPORT)printf ("\nTimeout! EAFNOSUPPORT \n");
if(errno==EALREADY)printf ("\nTimeout! EALREADY\n");
perror("\n\n\nffffffff\n\n\n");
} else
{
if(unlink(send_picfilename)<0)perror("\n!!del file\n");else printf("...");//del file after send
printf("ACK\n");
}
}
free(sendpicbuffer);
}
}
unsigned char init_eth()
{
//--------------initsocket //be client
// close(send_socket_descriptor);
send_socket_descriptor=socket(AF_INET,SOCK_STREAM,0);
bzero(&Send_address,sizeof(Send_address));
Send_address.sin_family=AF_INET;
Send_address.sin_port=htons(DST_PORT_DEFAULT);
Send_address.sin_addr.s_addr=inet_addr(DST_IP_DEFAULT);
////----------------end init
connect_up_yn=connect(send_socket_descriptor,(struct sockaddr *)&Send_address,sizeof(struct sockaddr));
if(connect_up_yn<0)
{
perror("!!Error connect\n");
printf("connect %s:\nTimeout!",dst_ip);
return 0;
}
else
{
printf("connect %s: OK\n",dst_ip);
return 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -