📄 main.c
字号:
#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 + -