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

📄 linux2video.c

📁 用嵌入式linux进行图像处理的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*
*		   版本 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 + -