Ejemplo n.º 1
0
void ExtGpVideoEngineStop()
{
	int ret = 0;
	ext_printf("%s:%d\n", __FUNCTION__, __LINE__);
	ret = video_decode_stop();
	ext_printf("%s:%d ret = %d\n", __FUNCTION__, __LINE__, ret);
	ret = video_decode_parser_stop();
	ext_printf("%s:%d ret = %d\n", __FUNCTION__, __LINE__, ret);
}
Ejemplo n.º 2
0
//=================================================================================================
//	Platform demo code
//=================================================================================================
void Platform_Demo_Code(void)
{
	char 	video_path[32] ="C:\\Demo0091NBA.avi"; 
	char    audio_path[32] = "C:\\happy.mp3";
	char    image_path1[32] = "C:\\chen52.jpg";
	char    image_path2[32] = "C:\\chen53.jpg";
	INT8S	volume;
	INT32S  nRet;
	INT32U  decode_output_ptr;
	AUDIO_ARGUMENT audio_arg;
	IMAGE_ARGUMENT image_arg;
	VIDEO_ARGUMENT video_arg;
	VIDEO_INFO	information;
	MEDIA_SOURCE   src;
	AUDIO_CODEC_STATUS 	audio_status;
	IMAGE_CODEC_STATUS  image_status;
	VIDEO_CODEC_STATUS  video_status;
		
	while(1)
	{
		if(_devicemount(USE_DISK))					// Mount device
		{
			DBG_PRINT("Mount Disk Fail[%d]\r\n", USE_DISK);
	#if	USE_DISK == FS_NAND1
			nRet = _format(FS_NAND1, FAT32_Type);
			DrvNand_flush_allblk();	
			_deviceunmount(FS_NAND1); 		
	#endif									
		}
		else
		{
			DBG_PRINT("Mount Disk success[%d]\r\n", USE_DISK);
			break;
		}
	}

	switch(USE_DISK)
	{
	case FS_SD:	
		gp_memcpy((INT8S*)video_path, (INT8S*)"C:\\Demo0091NBA.avi", sizeof(video_path));
		gp_memcpy((INT8S*)audio_path, (INT8S*)"C:\\happy.mp3", sizeof(audio_path));
		gp_memcpy((INT8S*)image_path1, (INT8S*)"C:\\chen52.jpg", sizeof(image_path1));
		gp_memcpy((INT8S*)image_path2, (INT8S*)"C:\\chen53.jpg", sizeof(image_path2));
		break;
	case FS_NAND1:	
		gp_memcpy((INT8S*)video_path, (INT8S*)"A:\\Demo0091NBA.avi", sizeof(video_path));
		gp_memcpy((INT8S*)audio_path, (INT8S*)"A:\\happy.mp3", sizeof(audio_path));
		gp_memcpy((INT8S*)image_path1, (INT8S*)"A:\\chen52.jpg", sizeof(image_path1));
		gp_memcpy((INT8S*)image_path2, (INT8S*)"A:\\chen53.jpg", sizeof(image_path2));
		break;	
	case FS_USBH:	
		gp_memcpy((INT8S*)video_path, (INT8S*)"G:\\Demo0091NBA.avi", sizeof(video_path));
		gp_memcpy((INT8S*)audio_path, (INT8S*)"G:\\happy.mp3", sizeof(audio_path));
		gp_memcpy((INT8S*)image_path1, (INT8S*)"G:\\chen52.jpg", sizeof(image_path1));
		gp_memcpy((INT8S*)image_path2, (INT8S*)"G:\\chen53.jpg", sizeof(image_path2));
		break;		
	}
	
	// Initialize display device
#if C_DISPLAY_DEVICE >= C_TV_QVGA
	tv_init();
#if C_DISPLAY_DEVICE == C_TV_QVGA
	tv_start (TVSTD_NTSC_J_NONINTL, TV_QVGA, TV_NON_INTERLACE);	
#elif C_DISPLAY_DEVICE == C_TV_VGA
	tv_start (TVSTD_NTSC_J, TV_HVGA, TV_INTERLACE);
#elif C_DISPLAY_DEVICE == C_TV_D1
	tv_start (TVSTD_NTSC_J, TV_D1, TV_NON_INTERLACE);
#else
	while(1);
#endif
#else
	tft_init();
	tft_start(C_DISPLAY_DEVICE);
#endif
		
	user_defined_video_codec_entrance();
	audio_decode_entrance();
	image_decode_entrance();
	video_decode_entrance();     

	adc_key_scan_init(); //init key scan	
	volume = 0x3F;
	nRet = C_DISPLAY_DEV_HPIXEL*C_DISPLAY_DEV_VPIXEL*2;	
	decode_output_ptr = (INT32U) gp_malloc_align(nRet, 64);//malloc decode frame buffer
	while(!decode_output_ptr);
	
	while(1)
	{
		adc_key_scan();
		if(ADKEY_IO1)	
		{	//play audio
			if(video_decode_status() == VIDEO_CODEC_PROCESS_END)
			{
				src.type = SOURCE_TYPE_FS;
				src.type_ID.FileHandle = open(audio_path, O_RDONLY);
				src.Format.AudioFormat = MP3;
				
				audio_arg.Main_Channel = 1;		// Use DAC Channel A+B
				audio_arg.L_R_Channel = 3;		// Left + Right Channel
				audio_arg.mute = 0;
				audio_arg.volume = volume;		// volume level = 0~63
				
				G_snd_info.Speed = 12;					//for speed control(golbal var)
			    G_snd_info.Pitch = 12;					//for pitch control(golbal var)
				
				audio_status = audio_decode_start(audio_arg, src);
			}
		}
		else if(ADKEY_IO2)		
		{
			if(audio_decode_status(audio_arg) == AUDIO_CODEC_PROCESSING)
				audio_decode_stop(audio_arg);
		}
		else if(ADKEY_IO3)    
		{	//play image
			if(video_decode_status() == VIDEO_CODEC_PROCESS_END)
			{
				src.type = SOURCE_TYPE_FS;
				if((nRet++ % 2) == 0)
					src.type_ID.FileHandle = (INT32U)open(image_path1, O_RDONLY);
				else
					src.type_ID.FileHandle = (INT32U)open(image_path2, O_RDONLY);
				
				image_arg.OutputBufPtr=(INT8U *)decode_output_ptr;            //decode output buffer
				image_arg.OutputBufWidth = C_DISPLAY_DEV_HPIXEL;                  //width of output buffer 
				image_arg.OutputBufHeight = C_DISPLAY_DEV_VPIXEL;                 //Heigh of output buffer
				image_arg.OutputWidth = C_DISPLAY_DEV_HPIXEL;                     //scaler width of output image
				image_arg.OutputHeight = C_DISPLAY_DEV_VPIXEL;                    //scaler Heigh of output image
				image_arg.OutBoundaryColor = 0x008080;
				image_arg.ScalerOutputRatio = FIT_OUTPUT_SIZE;
				image_arg.OutputFormat = IMAGE_OUTPUT_FORMAT_YUYV;  
				
				image_decode_start(image_arg, src);
				while (1) 
				{
			 		image_status=image_decode_status();
	         		if (image_status == IMAGE_CODEC_DECODE_END) 
	         		{
						video_codec_show_image(C_DISPLAY_DEVICE, (INT32U)decode_output_ptr, C_DISPLAY_DEVICE,IMAGE_OUTPUT_FORMAT_YUYV);
						break;
			  		}
			  		else if(image_status==IMAGE_CODEC_DECODE_FAIL) 
			  		{
						DBG_PRINT("image decode failed\r\n");
						break;
			  		}
			  	}
			  	image_encode_stop();
			  	close(src.type_ID.FileHandle);
		  	}		
		}
		else if(ADKEY_IO4)     
		{
			audio_arg.Main_Channel = 1;
			if(audio_decode_status(audio_arg) == AUDIO_CODEC_PROCESS_END) 
			{
				DBG_PRINT("video_decode_start\r\n");	
				video_arg.bScaler = TRUE;
				video_arg.bUseDefBuf = FALSE;
				video_arg.DisplayWidth = C_DISPLAY_DEV_HPIXEL;		
				video_arg.DisplayHeight = C_DISPLAY_DEV_VPIXEL;	
				video_arg.DisplayBufferWidth = C_DISPLAY_DEV_HPIXEL;	
				video_arg.DisplayBufferHeight = C_DISPLAY_DEV_VPIXEL;	
				video_arg.OutputFormat = IMAGE_OUTPUT_FORMAT_YUYV;	
						
				src.type = SOURCE_TYPE_FS;
				src.Format.VideoFormat = MJPEG;	
				src.type_ID.FileHandle = open(video_path, O_RDONLY);
					
				if(src.type_ID.FileHandle < 0)
				{
					DBG_PRINT("file open fail\r\n");
					close(src.type_ID.FileHandle);
					continue;
				}
					
				video_status = video_decode_paser_header(&information, video_arg, src);
				if(video_status != VIDEO_CODEC_STATUS_OK)
				{
					DBG_PRINT("paser header fail !!!\r\n");
					continue;
				}
				video_decode_start(video_arg, src);
				audio_decode_volume(volume);
			}
		}
		else if(ADKEY_IO5)    
		{		
			if(video_decode_status() == VIDEO_CODEC_PROCESSING)
			{
				video_decode_stop();
				DBG_PRINT("video_decode_stop\r\n");
			}
		}
		else if(ADKEY_IO6)     
		{
			
		}
		else if(ADKEY_IO7)    
		{
	
		}
		else if(ADKEY_IO8)
		{
		
		}
	}
}
Ejemplo n.º 3
0
//=======================================================================================
//		avi decode start 
//=======================================================================================
CODEC_START_STATUS video_decode_start(VIDEO_ARGUMENT arg, MEDIA_SOURCE src)
{
	INT16U width, height;
	INT32U video_output_format;
	
	//display size
	if(arg.DisplayWidth == 0 || arg.DisplayHeight == 0) {
		arg.DisplayWidth = arg.TargetWidth;
		arg.DisplayHeight = arg.TargetHeight;
	}
	
	if(arg.DisplayBufferWidth == 0 || arg.DisplayBufferHeight == 0) {
		arg.DisplayBufferWidth = arg.TargetWidth;
		arg.DisplayBufferHeight = arg.TargetHeight;
	}
	
	//format
	switch(arg.OutputFormat)
	{
	case IMAGE_OUTPUT_FORMAT_RGB565: 	video_output_format = C_SCALER_CTRL_OUT_RGB565; break;
	case IMAGE_OUTPUT_FORMAT_YUYV: 		video_output_format = C_SCALER_CTRL_OUT_YUYV; break;
	case IMAGE_OUTPUT_FORMAT_UYVY: 		video_output_format = C_SCALER_CTRL_OUT_UYVY; break;
#if MCU_VERSION < GPL327XX	
	case IMAGE_OUTPUT_FORMAT_RGB1555: 	video_output_format = C_SCALER_CTRL_OUT_RGB1555; break;
	case IMAGE_OUTPUT_FORMAT_RGBG: 		video_output_format = C_SCALER_CTRL_OUT_RGBG; break;
	case IMAGE_OUTPUT_FORMAT_GRGB: 		video_output_format = C_SCALER_CTRL_OUT_GRGB; break;
	case IMAGE_OUTPUT_FORMAT_YUYV8X32: 	video_output_format = C_SCALER_CTRL_OUT_YUYV8X32; break;
	case IMAGE_OUTPUT_FORMAT_YUYV8X64:	video_output_format = C_SCALER_CTRL_OUT_YUYV8X64; break;
	case IMAGE_OUTPUT_FORMAT_YUYV16X32: video_output_format = C_SCALER_CTRL_OUT_YUYV16X32; break;
	case IMAGE_OUTPUT_FORMAT_YUYV16X64: video_output_format = C_SCALER_CTRL_OUT_YUYV16X64; break;
	case IMAGE_OUTPUT_FORMAT_YUYV32X32: video_output_format = C_SCALER_CTRL_OUT_YUYV32X32; break;
	case IMAGE_OUTPUT_FORMAT_YUYV64X64: video_output_format = C_SCALER_CTRL_OUT_YUYV64X64; break;
#endif	
	default: return CODEC_START_STATUS_ERROR_MAX;
	}
	
	//scaler
	vid_dec_get_size(&width, &height);
	if(arg.bScaler & 0x01) {
		p_vid_dec_para->scaler_flag = p_vid_dec_para->user_scaler_flag = C_SCALER_FULL_SCREEN;
		vid_dec_set_scaler(C_SCALER_FULL_SCREEN, video_output_format, arg.DisplayWidth, arg.DisplayHeight, arg.DisplayBufferWidth, arg.DisplayBufferHeight);
	} else if(arg.bScaler & 0x02) {
		p_vid_dec_para->scaler_flag = p_vid_dec_para->user_scaler_flag = C_NO_SCALER_FIT_BUFFER;
		vid_dec_set_scaler(C_NO_SCALER_FIT_BUFFER, video_output_format, arg.DisplayWidth, arg.DisplayHeight, arg.DisplayBufferWidth, arg.DisplayBufferHeight);
	} else if(arg.bScaler & 0x04) {
		p_vid_dec_para->scaler_flag = p_vid_dec_para->user_scaler_flag = C_SCALER_FIT_BUFFER;
		vid_dec_set_scaler(C_SCALER_FIT_BUFFER, video_output_format, arg.DisplayWidth, arg.DisplayHeight, arg.DisplayBufferWidth, arg.DisplayBufferHeight);	
	} else {
		p_vid_dec_para->scaler_flag = p_vid_dec_para->user_scaler_flag = C_NO_SCALER;	
		vid_dec_set_scaler(C_NO_SCALER, video_output_format, width, height, width, height);
	} 
	
	//deblock
	if((p_bitmap_info->biCompression != C_MJPG_FORMAT) && (arg.bScaler & 0x80)) {
		vid_dec_set_deblock_flag(TRUE);
	} else {
		vid_dec_set_deblock_flag(FALSE);
	} 
	
	//user define buffer	
	vid_dec_set_user_define_buffer(arg.bUseDefBuf, (INT32U)arg.AviDecodeBuf1, (INT32U)arg.AviDecodeBuf2);
	if(vid_dec_start() < 0) {
		video_decode_stop();
		return CODEC_START_STATUS_ERROR_MAX;
	}
	return START_OK;
}