예제 #1
0
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;
}
예제 #2
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;
}
예제 #3
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 ;
}