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

📄 pthread_live.c

📁 1、基于韩国at2041芯片开发的Linux环境的DVR代码。 2、以原来代码进行了修改。 3、主要修改网络通讯出现异常问题处理 4、硬盘覆盖录像不起作用
💻 C
📖 第 1 页 / 共 3 页
字号:
/* set tabstop=4 *//******************************************************************************** *                                                                              * * Copyright(C) 2004  Penta-Micro                                               * *                                                                              * * ALL RIGHT RESERVED                                                           * *                                                                              * * This software is the property of Penta-Micro and is furnished under          * * license by Penta-Micro. This software may be used only in accordance         *	 * with the terms of said license. This copyright notice may not be             * * removed, modified or obliterated without the prior written permission        * * of Penta-Micro.                                                              * *                                                                              * * This software may not be copyed, transmitted, provided to or otherwise       * * made available to any other person, company, corporation	or other entity     * * except as specified in the terms of said license.                            * *                                                                              * * No right, title, ownership or other interest in the software is hereby       * * granted or transferred.                                                      * *                                                                              * * The information contained herein is subject to change without notice and     * * should not be construed as a commitment by Penta-Micro.                      * *                                                                              * ********************************************************************************   MODULE NAME:  PTHREAD_LIVE.C    REVISION HISTORY:    Date       Ver Name                  Description  ---------- --- --------------------- -----------------------------------------  06/30/2004 2.0 CheulBeck(whitefe)       Created     07/20/2005 2.1 JiGwanKang(xchannel)  Modified    ...............................................................................   DESCRIPTION:    This Module contains functions for Live.   ...............................................................................*/   /** ************************************************************************* **  ** includes ** ************************************************************************* **/#include <stdio.h>#include <sys/vfs.h>	/* statfs() */#include "main.h" #include "pthread_live.h"/** ************************************************************************* **  ** defines ** ************************************************************************* **///#define m_DEBUG(format, args...)  printf(format, ## args);fflush(stdout);#define m_DEBUG(format, args...)  #define m_MSG(format, args...)      printf(format, ## args);fflush(stdout);#define m_ERROR(format, args...)  printf(format, ## args);fflush(stdout);/** ************************************************************************* **  ** typedefs ** ************************************************************************* **/	 /** ************************************************************************* **  ** globals ** ************************************************************************* **/extern PTHREAD_STATE	      *gp_state_thread;extern SETUP_PARAM		*gp_setup_param;  /** ************************************************************************* **  ** locals ** ************************************************************************* **/static LIVE_OBJECT	*sp_live_object;/*  index for multi ch view */static S16 	playback_cur_ch = 4; /* Same mode one case ignore */static UNS8 last_ch_mode=100;#if 1//rec signal lossUNS8 rec_osd_status=FALSE;#endif/** ************************************************************************* **  ** forward declarations ** ************************************************************************* **/void *pthread_live(void *args){	UNS16			      ii;	UNS16			      input_value = 0, input_channel = 0;	S8				      temp[256];		PTHREAD_ID		start_id = 0;		PTHREAD_BUF		signal;		FUNC_ID			live;		MENU_FONT_t		*mft;		UNS16 				cur_play_speed=1;	MODE_PLAY 		last_play_mode;	m_DEBUG("\t!!!! pthread LIVE !!!!\n");	/* 1st. allocate live thread object */	if ( !(sp_live_object = (LIVE_OBJECT *) malloc (sizeof(LIVE_OBJECT))) ) {		m_ERROR("pthread_live.c:error In function 'malloc'\n");		return FAILURE;			}		memset(sp_live_object, 0, sizeof(LIVE_OBJECT));	sp_live_object->param = gp_setup_param;		/* 2th. change osd location as video mode */	live_font_ystart_init(gp_state_thread->state_main.mode);	/* 3th. set initial live menu */	sp_live_object->prev_id = LIVE_MAIN;	sp_live_object->cur_id =   LIVE_MAIN;	sp_live_object->next_id = LIVE_SINGLE_PB;		live_clear_menu(sp_live_object->cur_id);	live_create_menu(sp_live_object->cur_id);	sp_live_object->create_menu = 0;		while (1) {		/* waiting signal from input thread */		pthread_read_signal(&signal, PTHREAD_LIVE, TRUE); 		m_DEBUG("\tsignal> [live][id:%02d][value:0x%04x]\n", signal.start_id, signal.m_value);		/* receive start id */		start_id = signal.start_id;		input_value = signal.m_value;		input_channel = signal.m_channel;		switch (start_id) {			case PTHREAD_INPUT :				switch (input_value) {					case OSD :								sp_live_object->disp.state_motionosd = !sp_live_object->disp.state_motionosd;                              		live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);	                       		set_motion_block_print(sp_live_object->cur_id-1);						break;					case NUMBER0 :								sp_live_object->cur_id = LIVE_MAIN;							live_set_monitoring(L_QUAD);								live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						sp_live_object->create_menu = 0;							break;											case NUMBER1 :						sp_live_object->cur_id = LIVE_SINGLE_CH1;							live_set_monitoring(L_CH1);						live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						set_motion_block_print(sp_live_object->cur_id-1);						sp_live_object->create_menu = 0;							break;					case NUMBER2 :							sp_live_object->cur_id = LIVE_SINGLE_CH2;													live_set_monitoring(L_CH2);						live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						set_motion_block_print(sp_live_object->cur_id-1);						sp_live_object->create_menu = 0;							break;											case NUMBER3 :						sp_live_object->cur_id = LIVE_SINGLE_CH3;													live_set_monitoring(L_CH3);						live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						set_motion_block_print(sp_live_object->cur_id-1);						sp_live_object->create_menu = 0;							break;											case NUMBER4 :						sp_live_object->cur_id = LIVE_SINGLE_CH4;													live_set_monitoring(L_CH4);							live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						set_motion_block_print(sp_live_object->cur_id-1);						sp_live_object->create_menu = 0;							break;						case NUMBER5 :						sp_live_object->cur_id = LIVE_SINGLE_PB;								live_set_monitoring(L_1CH_PB);						live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						sp_live_object->create_menu = 0;							break;						case NUMBER6 :						sp_live_object->cur_id = LIVE_MULTI_4CH;							live_set_monitoring(L_4CH_PB);							live_clear_menu(sp_live_object->cur_id);						live_create_menu(sp_live_object->cur_id);						sp_live_object->create_menu = 0;							break;					}							break;			case PTHREAD_MANAGER :									switch (signal.m_signal) {					case SIGNAL_0 :		/* set record info from pthread_main */							mft = live_menu_font[LIVE_MAIN];						for (ii = 0; ii < MAX_CH_NUM; ii ++) {							if ( ((gp_setup_param->enc_ch[ii].flag_conti_rec | 								gp_setup_param->enc_ch[ii].motion.flag |								gp_setup_param->enc_ch[ii].sensor.flag_in) &&								gp_setup_param->enc_ch[ii].frame_rate) &&								(gp_state_thread->state_enc.manual_rec ||								(!gp_state_thread->state_enc.manual_rec &&								gp_state_thread->state_enc.enc_ch[ii].schedule)) )							{								mft[ii*3 + LM_REC_CH1].color = RED;								mft[ii*3 + LM_REC_CH1].attribute = NORMAL;							} else {								mft[ii*3 + LM_REC_CH1].color = WHITE;								mft[ii*3 + LM_REC_CH1].attribute = NORMAL;							}						}						for (ii = 0; ii < MAX_CH_NUM; ii ++) {													mft = live_menu_font[ii + LIVE_SINGLE_CH1];							if ( ((gp_setup_param->enc_ch[ii].flag_conti_rec | 								gp_setup_param->enc_ch[ii].motion.flag |								gp_setup_param->enc_ch[ii].sensor.flag_in) &&								gp_setup_param->enc_ch[ii].frame_rate) &&								(gp_state_thread->state_enc.manual_rec ||								(!gp_state_thread->state_enc.manual_rec &&								gp_state_thread->state_enc.enc_ch[ii].schedule)) ) 							{								mft[LS_REC_CH1].color = RED;								mft[LS_REC_CH1].attribute = NORMAL;							} else {								mft[LS_REC_CH1].color = WHITE;								mft[LS_REC_CH1].attribute = NORMAL;							}						}												mft = live_menu_font[LIVE_MULTI_4CH];						for (ii = 0; ii < MAX_CH_NUM - 1; ii ++) {							if ( ((gp_setup_param->enc_ch[ii].flag_conti_rec | 								gp_setup_param->enc_ch[ii].motion.flag |								gp_setup_param->enc_ch[ii].sensor.flag_in) &&								gp_setup_param->enc_ch[ii].frame_rate) &&								(gp_state_thread->state_enc.manual_rec ||								(!gp_state_thread->state_enc.manual_rec &&								gp_state_thread->state_enc.enc_ch[ii].schedule)) )  							{								mft[ii*3 + LM4_REC_CH1].color = RED;								mft[ii*3 + LM4_REC_CH1].attribute = NORMAL;							} else {								mft[ii*3 + LM4_REC_CH1].color = WHITE;								mft[ii*3 + LM4_REC_CH1].attribute = NORMAL;							}						}						if (gp_state_thread->state_main.state == IDLE || gp_state_thread->state_ptz.state == BUSY) {							sp_live_object->cur_id = gp_state_thread->state_live.mode_mon;														live_clear_menu(sp_live_object->cur_id);//							if(sp_live_object->cur_id >= L_CH1 && sp_live_object->cur_id <= L_CH4)							live_create_menu(sp_live_object->cur_id);							set_motion_block_print(sp_live_object->cur_id-1);						}#if 1//rec signal loss 						rec_osd_status = FALSE;#endif												break;					case SIGNAL_1 :		/* clear record info from pthread_main */							mft = live_menu_font[LIVE_MAIN];						for (ii = 0; ii < MAX_CH_NUM; ii ++) {							mft[ii*3 + LM_REC_CH1].color = WHITE;							mft[ii*3 + LM_REC_CH1].attribute = NORMAL;							strcpy(mft[ii*3 + LM_MOTION_CH1].str, " ");								strcpy(mft[ii*3 + LM_SENSOR_CH1].str, " ");						}						for (ii = 0; ii < MAX_CH_NUM; ii ++) {													mft = live_menu_font[ii + LIVE_SINGLE_CH1];							mft[LS_REC_CH1].color = WHITE;							mft[LS_REC_CH1].attribute = NORMAL;							strcpy(mft[LS_MOTION_CH1].str, " ");							strcpy(mft[LS_SENSOR_CH1].str, " ");						}												mft = live_menu_font[LIVE_MULTI_4CH];						for (ii = 0; ii < MAX_CH_NUM - 1; ii ++) {							mft[ii*3 + LM4_REC_CH1].color = WHITE;							mft[ii*3 + LM4_REC_CH1].attribute = NORMAL;							strcpy(mft[ii*3 + LM4_MOTION_CH1].str, " ");							strcpy(mft[ii*3 + LM4_SENSOR_CH1].str, " ");						}						if (gp_state_thread->state_main.state == IDLE || gp_state_thread->state_ptz.state == BUSY) {													sp_live_object->cur_id = gp_state_thread->state_live.mode_mon;														live_clear_menu(sp_live_object->cur_id);							live_create_menu(sp_live_object->cur_id);						}#if 1//rec signal loss						rec_osd_status = FALSE;#endif																	break;					case SIGNAL_2 :		/* get current time info from pthread_input */						if (gp_state_thread->state_main.state == IDLE || gp_state_thread->state_ptz.state == BUSY) {							mft = live_menu_font[LIVE_DISP_TIME];													sprintf(temp, "%04d/", gp_state_thread->state_live.cur_time.tm_year + 1900);							strcpy(mft[LDT_YEAR].str, temp);													sprintf(temp, "%02d/", gp_state_thread->state_live.cur_time.tm_mon + 1);							strcpy(mft[LDT_MONTH].str, temp);													sprintf(temp, "%02d", gp_state_thread->state_live.cur_time.tm_mday);							strcpy(mft[LDT_DAY].str, temp);													sprintf(temp, "%02d:", gp_state_thread->state_live.cur_time.tm_hour);							strcpy(mft[LDT_HOUR].str, temp);													sprintf(temp, "%02d:", gp_state_thread->state_live.cur_time.tm_min);							strcpy(mft[LDT_MINUTE].str, temp);													sprintf(temp, "%02d", gp_state_thread->state_live.cur_time.tm_sec);													strcpy(mft[LDT_SECOND].str, temp);								if(gp_state_thread->state_ptz.state == BUSY) {								sprintf(temp, "%s", " PTZ MODE");														strcpy(mft[LDT_PTZ].str, temp);									mft[LDT_PTZ].color = RED;								mft[LDT_PTZ].attribute = BLINK;

⌨️ 快捷键说明

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