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

📄 main.c

📁 这个是Linux下的应用程序
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <stdio.h>#include <stdlib.h>#include <asm/ioctl.h>#include <asm/errno.h>#include <linux/slab.h>#include <fcntl.h>#include <pthread.h>#include <string.h>#include <time.h>#include <unistd.h>                                                                                                                                                                #include "main.h"#include "typedef.h"#include "at2041reg.h"                                                                                #include "stream_server.h"/*netbsd*/#include "packet.h"//#include "netpacket/packet.h"#include "linux/if_packet.h"#include "linux/if_ether.h"#include "linux/if.h"#include "common.h"#include "hanzi_display.h"                                                                                #include "state_define.h"                                                                                #define ENV_TO_FLASH    0x1000#define CFG_ENV_SIZE    0x20000#define ENV_HEADER_SIZE (sizeof(unsigned long))#define ENV_SIZE (CFG_ENV_SIZE - ENV_HEADER_SIZE)                                                                                unsigned char env_dat_sv[CFG_ENV_SIZE];volatile unsigned long frame_number_5=0;FILE *fp,*fb,*fp1;char *time_str;int fl;time_t t;struct tm *tm_t;char filename[50]="/mnt/nfs/";unsigned int file_state = 0;unsigned char replay_state = 0;long file_length = 0;unsigned int capture_state;unsigned int file_i = 0;unsigned char  key_value = 0;unsigned char  input_state;unsigned char record_state=0;int u_alarm = 0;unsigned char	create_state =0;int i_num = 0;int length = 0;unsigned int frame_i = 0;//uns8 image_data[6000];uns8 palette_data[80];        int i;        int ch;        int num;        uns16 *mux_data;        uns32 m,n;        uns16 rx_id;        uns16 id_conf;        uns16 enc_txmsg_size = 4;        uns16 key;        unsigned long decoder_size;        unsigned long stream_size;        unsigned char temp;        unsigned char string1[20];        unsigned char string0[5];        uns32 count;        uns8 y_data,u_data,v_data;        uns8 r_data,g_data,b_data;        uns8 trans_data,mode_data;        char a,b,c;        char focus_index=0;        	unsigned char file_name[10][80];        unsigned int line_count;	unsigned int line_current;	unsigned int line_sel;	//image_data[0]=5;        //image_data[1]=0;        //image_data[2]=100;        //image_data[3]=0;        //image_data[4]=100; 	unsigned char bool_state=0; #define BOOL_STATE_NONE 0x0#define BOOL_STATE_SELECT 0X01unsigned char play_state=0;#define PLAY_STOP       0X0#define PLAY_START      0X01#define PLAY_PAUSE      0X02char file_to_play[200];                                                                              /*2005-04-15 netbsd*/volatile unsigned long gop_number_1=0;volatile unsigned long frame_number_1=0;uns8 palette_data[80];#define FALSE 0#define TURE 1unsigned char quick_record_state=0;int open_mykey(void){	fl = open("/dev/my_key",O_RDWR);        if(!fl)        {                printf("open device is fail !!! \n");                return 0;        }	printf("key device is normal !!!\n");	return 1;}#define KEY_UP 		0X01#define KEY_DOWN 	0X02unsigned char key_state=KEY_UP;unsigned int key_count=0;unsigned char mykey(void){	uns16 temp = 0;	read(fl,&key_value,sizeof(short));	if(key_value != 0xff)	{		//usleep(500);		key_count++;		if(quick_record_state !=TRUE)		{			switch(input_state)			{		   	case INPUT_RECORD:		    //if(key_count<2)                     //     return 0xff;                  	  break;		  	 case INPUT_PLAY_START:		  	 break;		    	default:							if(key_count<100)					return 0xff;		   	 break;			}		}		read(fl,&key_value,sizeof(short));		if(key_value != 0x006f && key_state==KEY_UP)		{	key_state=KEY_DOWN;			switch(key_value)			{				case 0x7f : temp = 1;break;				case 0xbf : temp = 2;break;				//case 0xdf : temp = 3;break;				case 0xfb : temp = 3;break;				case 0xfe : temp = 4;break;				case 0xfd : temp = 5;break;				case 0xef : temp = 6;break;				//case 0xfb : temp = 7;break;				case 0xdf : temp = 7;break;				case 0xf7 : temp = 8;break;				default     : temp = 0xffff;						break;			}			printf("the key value is %d\n",temp);			key_count=0;			return temp&0xff;		}		else		{			key_count=0;			return 0xff;		}	}	else	{                if( key_state==KEY_DOWN)                {                        key_state=KEY_UP;                }		temp = 0xffff;return temp&0xff;	}	}void rgb_to_yuv(uns8 R,uns8 G,uns8 B,uns8 *y,uns8 *u,uns8 *v){	double Y,U,V; 	#if 0	//Y =((0.257*R)+(0.504*G)+(0.098*B))+16;        //U =((-0.148*R)-(0.291*G)+(0.439*B))+128;        //V =((0.439*R)-(0.368*G)-(0.071*B))+128;        //#else	Y =((0.229*R)+(0.587*G)+(0.114*B));        U =0.564*(B-Y);        V =0.713*(R-Y);	//#else	//Y =((0.257*R)+(0.504*G)+(0.098*B))+16;        //Y =((0.229*R)+(0.587*G)+(0.114*B))+16;	//U=((-0.147*R)-(0.281*G)+(0.436*B))+128;        //V =((0.615*R)-(0.518*G)-(0.01*B))+128;	#else	Y =((0.229*R)+(0.587*G)+(0.114*B));        V =((-0.1687*R)-(0.3133*G)+(0.5*B))+128;        U =((0.5*R)-(0.4187*G)-(0.0813*B))+128;	#endif	//U=U+128;        //V=V+128;        if(Y>255) Y=255;        if(U>255) U=255;        if(V>255) V=255;        if(Y<0) Y=0;        if(U<0) U=0;        if(V<0) V=0;	*y=(uns8)Y;	*u=(uns8)U;	*v=(uns8)U;}void set_palette_color(uns8 trans,uns8 mode){	int i;	//int trans=0;	//int mode=0;	uns8 y_data,u_data,v_data;	//black	i=0;	rgb_to_yuv(0xff,0x70,0x90,&y_data,&u_data,&v_data);	palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=2;        palette_data[5*i+4]=mode;	//blue	i=1;        rgb_to_yuv(0x0,0xff,0x0,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//dark green	i=2;        rgb_to_yuv(0xff,0x0,0x0,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//dark cyan	i=3;        rgb_to_yuv(0x90,0x90,0x00,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//maroon	i=4;	rgb_to_yuv(0xff,0xff,0xff,&y_data,&u_data,&v_data);        //rgb_to_yuv(0xef,0xae,0x5a,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//purple	i=5;	rgb_to_yuv(0x0,0x0,0x0,&y_data,&u_data,&v_data);        //rgb_to_yuv(0xdb,0xfc,0xa5,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//olive	i=6;	rgb_to_yuv(0x90,0x0,0x90,&y_data,&u_data,&v_data);        //rgb_to_yuv(0x9c,0xcf,0xa4,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        //palette_data[5*i+4]=mode;	palette_data[5*i+4]=1;	//light gray 	i=7;	rgb_to_yuv(0x50,0x50,0x50,&y_data,&u_data,&v_data);        //rgb_to_yuv(0x94,0xae,0xce,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;	palette_data[5*i+4]=mode;        //palette_data[5*i+4]=2;	//dark gray	i=8;	rgb_to_yuv(0x30,0x0,0xff,&y_data,&u_data,&v_data);        //rgb_to_yuv(0x81,0x81,0x81,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//blue	i=9;	rgb_to_yuv(0xff,0x80,0xff,&y_data,&u_data,&v_data);        //rgb_to_yuv(0x52,0xa6,0xe7,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//green	i=10;	rgb_to_yuv(0x0,0x0,0x90,&y_data,&u_data,&v_data);        //rgb_to_yuv(0x2e,0x37,0x39,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//cyan	i=11;	rgb_to_yuv(0x50,0x56,0xff,&y_data,&u_data,&v_data);        //rgb_to_yuv(0xa9,0xa9,0x8b,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//red	i=12;	rgb_to_yuv(0xaf,0x56,0x90,&y_data,&u_data,&v_data);       // rgb_to_yuv(0x78,0x78,0x78,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//megenta	i=13;        rgb_to_yuv(0xff,0x10,0x90,&y_data,&u_data,&v_data);	// rgb_to_yuv(0xcf,0xcf,0xcf,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//yellow	i=14;        rgb_to_yuv(0xcf,0xff,0x40,&y_data,&u_data,&v_data); 	//rgb_to_yuv(0x56,0x56,0x56,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=trans;        palette_data[5*i+4]=mode;	//white	i=15;        rgb_to_yuv(0xef,0x56,0x90,&y_data,&u_data,&v_data); 	//rgb_to_yuv(0xff,0x0,0x0,&y_data,&u_data,&v_data);        palette_data[5*i+0]=y_data;        palette_data[5*i+1]=u_data;        palette_data[5*i+2]=v_data;        palette_data[5*i+3]=4;        palette_data[5*i+4]=mode;}extern const unsigned char image_data0[];extern const unsigned char image_data1[];uns16 image_buffer[4000];void image_fill_data(char *image_from,char* image_to,int width,int height){    	uns16 i,j;	for(j=0; j<height; j++)	{			for(i=0;i<width;i++)		{			image_to[j*width+i]=image_from[j*width+i];			#if 0			if(i%2 == 0)			{			    image_to[j*width+i/2]=4<<(image_from[j*width+i]/27);				}			else			{			    image_to[j*width+i/2]|=(image_from[j*width+i]/27);			}				#endif		}		}}#define CREATE_FILE_OK   0x01#define CREATE_FILE_NO	 0x00/******************************************************************/// 功能:	录像////// 2007.12.18// 2008.1.14  修改 1. 添加U盘容量监测//		   2.保存文件时,无U盘报警//author: 齐晓龙 	/*****************************************************************/int kinescope(void){	char kin_tip[]="Don't Write File";	if(u_alarm == 2000)	{		u_memory();		u_alarm = 0;	}	u_alarm++;	encoding_stream_read(mux_data);        printf("the first word is 0x%4x\n",mux_data[0]);        if((mux_data[0] & 0x0002) != 0x0002)        {                printf("###### Stream Format is Wrong !!! ######\n");                return 0;        }        stream_size = mux_data[1]*16*2;        //fwrite((mux_data +4),sizeof(unsigned short),(unsigned long)(stream_size/2),fp); 	if(fwrite((mux_data +4),sizeof(unsigned short),(unsigned long)(stream_size/2),fp) != (stream_size/2))	{		fill_rect(100,300,500,48,6,0);               	display_string(200,316,kin_tip,0);				usleep(200000);		quick_record_state=FALSE;               	video_encoder_stop(VIDEO_ONLY);               	fclose(fp);               	fill_rect(0,0,720,576,15,0);			}	file_i++;	if(file_i == 65535)	{		file_i = 0;		fclose(fp);		video_encoder_stop(VIDEO_ONLY);		usleep(5);		create_file();	}	usleep(1);}/******************************************************************************/// 功能		回放 //// 2007.12.18// 2007.12.26	修改 添加 快进 暂停功能// 2007.12.27	修改 添加 播放图片功能// 2008.1.16	修改 添加 播放进度条// author:齐晓龙/*****************************************************************************/#define REPLAY_NORMAL 0x00#define REPLAY_FAST   0x01#define REPLAY_STOP   0x02#define REPLAY_PAUSE  0x03#define REPLAY_PICTURE 0x04                                                                                    void get_file_length(void){	int temp = 0;	char replay_name[50]="/mnt/nfs/";		//temp = strlen(file_to_play);	printf("file_to_play[7] is %c\n",file_to_play[7]);	if(file_to_play[7] == 'v')	{		replay_state = REPLAY_NORMAL;	}	else	{		replay_state = REPLAY_PICTURE;	}	printf("Get file bath !!! \n");	strcat(replay_name,file_to_play);	printf("the file bath is %s\n",replay_name);		if((fp = fopen(replay_name,"r")) == NULL)	{		printf("Open file is fail !!!\n");               	return ;        }	fseek(fp,0L,SEEK_END);	file_length = ftell(fp);	fseek(fp,0L,SEEK_SET);	fill_rect(0,0,720,576,15,0);	rx_id = RxID(0x09, 0, 0x01, W_FLAG);write_rx_fifo (rx_id);	if(replay_state == REPLAY_PICTURE)	{		rx_id = 1;write_rx_fifo (rx_id);	//JPEG	}	else	{        	rx_id = 1;write_rx_fifo (rx_id);		//MPEG-1 4 IS MPEG-4		fill_rect(25,546,675,30,14,0);	}        //usleep(1000);	length = (int)(file_length >> 16);        video_decoder_start(VIDEO_ONLY);	//usleep(2);	//fill_rect(0,0,720,576,15,0);}int replay(void){	char kin_tip[]="Don't Read FILE";	int i_fast;	int temp ;	//float temp1;	printf("replay is start !!! \n");        switch(replay_state)	{		case REPLAY_NORMAL	:			fread(mux_data,sizeof(unsigned short),3,fp);                	rx_id = ((mux_data[2] & 0xff00) >> 8);                	decoder_size = ((mux_data[2] << 8) & 0xff00) + rx_id;                	printf("&&&& PES packet length is %x &&&&\n",decoder_size);			file_length -= decoder_size;                	fread((mux_data + 3),sizeof(unsigned short),decoder_size/2,fp);			#if 0			if(fread((mux_data + 3),sizeof(unsigned short),decoder_size/2,fp) != (decoder_size/2))			{				fill_rect(100,300,500,48,6,0);                		display_string(200,316,kin_tip,0);				usleep(200000);				replay_state = REPLAY_STOP;			}			#endif                	decoding_stream_write(mux_data,(unsigned long )decoder_size+6);			if(i_num == 100)			{				temp = ((length - (int)(file_length >> 16))*675/length);				printf("temp1 is %f\n",temp);				fill_rect(25,546,temp,30,1,0);				usleep(50); 				i_num = 0;			}			i_num++;			if(file_length <= 0)				replay_state = REPLAY_STOP;			break;		case REPLAY_FAST	:

⌨️ 快捷键说明

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