int playback_uninit(cdvr_thmb_t *pdvr) { if(!pdvr) { return -1; } playback_Set_PIPE_With_CMD(CMD_SET_PLAYBACK_EXIT, 1); //photo_uninit(pdvr->pPhotoInfo); //for jpeg->video->jpeg g_vid_vol = pdvr->pVideoInfo->volume;; pdvr->pPhotoInfo = NULL; int status=0; if(pdvr->pid > 0) waitpid(pdvr->pid, &status, 0); Dsp_Open(); ExtGpVideoEngineSetVolume(g_sys_vol); dvr_thmb_uninit(pdvr); pdvr = NULL; g_cdvr = NULL; pipeDelete(); return 0; }
/*========================================================== dv task entry function ===========================================================*/ int DC_task_entry( int argc, char **argv ) { UINT16 i; gp_size_t resolution; UINT8* addr; UINT16* addr1; STRING_ASCII_INFO ascii_str; STRING_INFO str; UINT16 charge_flag = 1; int ret; UINT16 *fb; UINT8 msg_id,msg_prio; struct timespec timeout; //run dv and init pipe free_size_flag = 1; DC_Set_Color(); while(dv_set.change_disp == 1); dv_set.zoom_flag = 0; dv_set.zoom_num = 0; DC_pipe_init(); dispGetResolution(hDisp, &resolution); printf("resolution.width=%d,resolution.height=%d\n",resolution.width,resolution.height); //init UI for DV DC_UI_foreground(); do { clock_gettime(CLOCK_REALTIME, &timeout); timeout.tv_nsec += 10000; ret = mq_timedreceive(menumodeMsgQ, (char *)&msg_id, 1, (unsigned int *)&msg_prio,&timeout); if(ret != -1) DC_UI_foreground(); }while((dv_set.dv_UI_flag == DV_EXIT_MODE)||(ret != -1)); dv_set.dv_UI_flag = DV_FOREGROUND_MODE; if(dv_set.display_mode == SP_DISP_OUTPUT_LCD) { LCD_Backlight_Set(1); } if(dv_set.default_setting_flag == 1) { dv_set.default_setting_flag = 0; CVR_Set_PIPE_With_CMD(CMD_SET_DEFAULT_SETTING,0); } if(dv_set.date_type_flag == 1) { CVR_Set_PIPE(CMD_SET_DATE_TYPE,setting_config_get(SET_DATA_FORMAT)); dv_set.date_type_flag = 0; } while(1) { ret = mq_receive(menumodeMsgQ, (char *)&msg_id, 1, (UINT32 *)&msg_prio); switch(msg_id){ case DV_FOREGROUND_MODE: dv_set.draw_start = 1; DC_UI_foreground(); dv_set.draw_start = 0; break; case DV_MENU_MODE: dv_set.draw_start = 1; disp_OSD0_Set_Alpha(hDisp,65); UI_Menu_draw(Playmode_flag); dv_set.draw_start = 0; break; case DV_SETTING_MODE: dv_set.draw_start = 1; DV_UI_Setting(); dv_set.draw_start = 0; break; default: break; } if(msg_id == DV_EXIT_MODE) { CVR_Set_PIPE_With_CMD(CMD_SET_EXIT,1); break; } //pend message from TimeKeyThread and update UI/send message to ipcam } pipeDelete(); return 0; }
void playback_reboot(int w, int h) { int i, idx=0; int disp = 0; pid_t cam_pid; char *argv[32]; cdvr_thmb_t *pdvr = NULL; argv[idx++] = strdup("/system/app/cvrplayer"); //argv[idx++] = strdup("/media/sdcardc1/cvrplayer"); argv[idx++] = strdup("cvrplayer"); argv[idx++] = strdup("-p"); argv[idx++] = strdup(Memory_path); argv[idx++] = strdup("-d"); argv[idx++] = (char *)malloc(32); /*if(HDMI_Check() == 1) { // for hdmi and tv check. disp = 6; } else if(TV_Check() == 1) { disp = 4; } else */{ disp = 0; } sprintf(argv[idx-1], "%d", disp); argv[idx++] = (char *)0; pipeDelete(); public_pipeinit(playback_receive_cmd_callback); signal(SIGCHLD, SIG_IGN); if((cam_pid = fork()) <0) { perror("creat pid fail\n"); return ; } else if(cam_pid==0) { for(i=0; i<idx-1; i++) { printf("%s\n", argv[i]); } execv(argv[0], &argv[1]); } else { for(i=0; i<idx-1; i++) { free(argv[i]); } pdvr = g_cdvr; if (pdvr->dispMode == DISP_NO_FILE) { pdvr->pid = cam_pid; printf("%s:%d no file mode\n", __FUNCTION__, __LINE__); } usleep(500*1000); dvr_thmb_set_info(pdvr); pdvr->pUrl = NULL; pdvr->pPath = NULL; pdvr->pVideoInfo->speed = 0; pdvr->sclIdx = 0; pdvr->pVideoInfo->volume = ExtGpVideoEngineGetVolume(); if(pdvr->pVideoInfo->volume > 8) { pdvr->pVideoInfo->volume = 8; } pdvr->pVideoInfo->videoMode = VIDEO_OPEN; pdvr->pUrl = FilelistGetFileName(0); pdvr->pPath = FilelistGetFilePath(0); FilelistGetPageLock(); if(pdvr->dispMode == DISP_THMB_SCREEN) { dvr_thmb_dispPage(g_cdvr); } else { printf("%s:%d init cvrplayer to FullScreen mode\n", __FUNCTION__, __LINE__); dvr_thmb_dispFullScreen(g_cdvr); } pdvr->pid = cam_pid; } return ; }