📄 pthread_live.c
字号:
/* 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 + -