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

📄 chp_dl_media_from_host.c

📁 C625 host控制源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
			dl_media_iou_int_disable();
			mp4_mjp_flag = 0; 
		//	sys_printf("********MJP play end******** \n");
			return;
		}
		else if (dl_media_frame.rsp == RSP_MP3_PLAY_OVER)
		{
			if(KTV_Play_Flag==1)
			{	
				if(KTV_Over_Check==1)
				{	
					dl_media_interrupt_disable();
					dl_media_iou_int_disable();
					dl_media_dac_close();
				//	sys_printf("********end********mmd play over \n");
					IOU_OUT(IMUSIC_MUSIC_START,0x00);		
					IOU_OUT(IMUSIC_FIFO_CLR, 0X02);	// CLEAR SCORE FIFO
					IOU_OUT(IMUSIC_FIFO_CLR, 0X00);
					KTV_Play_Flag = 0;
					KTV_Over_Check =0;
					//dl_media_line_in_close();
				}
				else
				{	
					KTV_Over_Check =1;
				//	sys_printf("********Set_Check =1********mmd play over \n");
				}
			}
			else
			{
				dl_media_interrupt_disable();
				dl_media_iou_int_disable();
				dl_media_dac_close();
			//	sys_printf("********Mp3 play end******** \n");
			}
			return;
		}
		else
		{	
			dl_media_host_data.ret = DL_MEDIA_RET_FAIL;
		//	sys_printf("*****dl_media_host_data.ret = DL_MEDIA_RET_FAIL \n");
		}
	}
	return;
}


void dl_media_host_handle_rsp(void *p_para)
{
	DL_MEDIA_IOU_FRAME_T dl_media_frame;
	UINT16 iou_size[4],ret;
	UINT8 *p_buffer = dl_media_host_data.p_buffer;
	UINT32 length = dl_media_host_data.length;
	
	ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);
//	sys_printf("dl_media_iou_read_frame is end rst = %d, type=%d, rsp=0x%x\n", ret,dl_media_frame.type,dl_media_frame.rsp);
	FATAL_ERROR_TO_RESET(ret);
	if (dl_media_frame.type == IOU_FRAME_REQ_FILE_LENGTH)
	{
		iou_size[0] = 0xfff0;
		iou_size[1] = 0x0000;
		iou_size[2] = length;
		iou_size[3] = length >> 16;
		ret = dl_media_iou_write_cmd(iou_size, 8);
	//	sys_printf("dl_media_iou_write_cmd is end rst = %d\n", ret);
		dl_media_host_data.offsize = 0;
		dl_media_host_data.offset = 0;
	}
	else if (dl_media_frame.type == IOU_FRAME_OFFSET_SIZE)
	{
		dl_media_host_data.offset = dl_media_frame.value[2]<<16 | dl_media_frame.value[1];
		if (dl_media_frame.value[0] == 0)
			dl_media_host_data.offsize = dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 1)
			dl_media_host_data.offsize += dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 2)
			dl_media_host_data.offsize = dl_media_host_data.size - dl_media_host_data.offset;
		p_buffer = dl_media_host_data.p_buffer + dl_media_host_data.offsize;
		dl_media_host_data.wsize = (dl_media_frame.size_hi << 16) | dl_media_frame.size_low;
		if (dl_media_host_data.wsize != 0)
		{
		#ifndef CHP_BIG_ENDIAN
			ret = dl_media_iou_write_data(p_buffer, dl_media_host_data.wsize);
		#else
			ret = dl_media_iou_write_data_for_big_endian(p_buffer, dl_media_host_data.wsize);
		#endif
		//	sys_printf("dl_media_iou_write_data_for_big_endian is end rst = %d\n", ret);
			dl_media_host_data.offsize += dl_media_host_data.wsize;
		}
	}
	else if (dl_media_frame.type == IOU_FRAME_ARM_RSP)
	{
		if (dl_media_frame.rsp == RSP_MJPG_PLAY_START ||
			dl_media_frame.rsp == RSP_MP3_PLAY_START ||
			dl_media_frame.rsp == RSP_SUCCESS)
		{
		//	sys_printf("********Start or sucess******** \n");
			return;
		}
		else if ( dl_media_frame.rsp == RSP_MJPG_PLAY_OVER)
		{
			dl_media_interrupt_disable();
			dl_media_iou_int_disable();
			mp4_mjp_flag = 0; 
			sys_printf("********MJP play end******** \n");
			return;
		}
		else if (dl_media_frame.rsp == RSP_MP3_PLAY_OVER)
		{
			if(KTV_Play_Flag==1)
			{	
				if(KTV_Over_Check==1)
		{
			dl_media_interrupt_disable();
			dl_media_iou_int_disable();
				dl_media_dac_close();
					sys_printf("********end********mmd play over \n");
					IOU_OUT(IMUSIC_MUSIC_START,0x00);		
					IOU_OUT(IMUSIC_FIFO_CLR, 0X02);	// CLEAR SCORE FIFO
					IOU_OUT(IMUSIC_FIFO_CLR, 0X00);
					KTV_Play_Flag = 0;
					KTV_Over_Check =0;
					//dl_media_line_in_close();
				}
				else
				{	
					KTV_Over_Check =1;
					sys_printf("********Set_Check =1********mmd play over \n");
				}
			}
			else
		{
			dl_media_interrupt_disable();
			dl_media_iou_int_disable();
			dl_media_dac_close();
				sys_printf("********Mp3 play end******** \n");
			}
			return;
		}
		else
		{	
			dl_media_host_data.ret = DL_MEDIA_RET_FAIL;
		//	sys_printf("*****dl_media_host_data.ret = DL_MEDIA_RET_FAIL \n");
  	      }
	}
	return;
}

DL_MEDIA_RET_T dl_media_host_patch(void)
{
	DL_MEDIA_RET_T ret;
	ret = dl_media_send_cmd_and_read_rsp(DL_MEDIA_CMD_SYS_PATCH, NULL);
	return ret;
}

DL_MEDIA_RET_T dl_media_host_jpg_capture(void *p_buffer, UINT32 *p_length)
{
	DL_MEDIA_RET_T ret;

	dl_media_iou_int_disable();
	
	ret = dl_media_send_cmd(DL_MEDIA_CMD_HOST_JPG_CAPTURE, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS)
	{
		dl_media_iou_int_restore();
		return ret;
	}	
	dl_media_delay(8);
	ret = dl_media_host_get_data(p_buffer, p_length);

	dl_media_iou_int_restore();
	return ret;
}

DL_MEDIA_RET_T dl_media_host_jpg_display(void *p_buffer, UINT32 len)
{
	DL_MEDIA_RET_T ret;

	ret =dl_media_chip_patch(PATCH_VIDEO_DEC);
	sys_printf("dl_media_chip_patch is end rst = %d\n", ret);
	if(ret) return ret;
	
	dl_media_iou_int_disable();
	
	ret = dl_media_send_cmd(DL_MEDIA_CMD_HOST_JPG_DISPLAY, NULL);
	sys_printf("dl_media_send_cmd is end rst = %d\n", ret);
	if (ret != DL_MEDIA_RET_SUCCESS) 
	{
		dl_media_iou_int_restore();
		return ret;
	}
	dl_media_delay(1);
	ret = dl_media_host_send_data(p_buffer, len);
	sys_printf("dl_media_host_send_data is end rst = %d\n", ret);
	dl_media_iou_int_restore();
	
	return ret;
}

DL_MEDIA_RET_T dl_media_host_mjp_capture_start(void *p_buffer, UINT32 *p_length)
{
	DL_MEDIA_RET_T ret;

	ret =dl_media_chip_patch(PATCH_VIDEO_ENC);
	if(ret) return ret;
	dl_media_callback.cmd_callback = dl_media_host_handle_rsp_data;
	dl_media_host_data.p_buffer = p_buffer;
	dl_media_host_data.p_length = p_length;
	dl_media_host_data.size = 0;
	dl_media_host_data.ret = DL_MEDIA_RET_SUCCESS;
	dl_media_callback.cmd_para = NULL;
	dl_media_interrupt_enable();
	dl_media_iou_int_enable();	
	ret = dl_media_send_cmd(DL_MEDIA_CMD_HOST_MJP_CAPTURE, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS)
		{
		dl_media_iou_int_disable();
		dl_media_interrupt_disable();
		dl_media_callback.cmd_callback = NULL;
		return ret;
		}

	return DL_MEDIA_RET_SUCCESS;
}

DL_MEDIA_RET_T dl_media_host_mjp_capture_end(UINT32 *p_length)
{
	DL_MEDIA_RET_T ret;
	UINT32 length = *dl_media_host_data.p_length;

	if (dl_media_host_data.ret != DL_MEDIA_RET_SUCCESS)
	{
		*p_length = dl_media_host_data.size;
		return DL_MEDIA_RET_SUCCESS;
	}
	dl_media_interrupt_disable();
	dl_media_iou_int_disable();
	dl_media_callback.cmd_callback = NULL;
	ret = dl_media_send_cmd(DL_MEDIA_CMD_CMR_MJP_CAPTURE_END, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS)
	{
		dl_media_iou_int_restore();
		return ret;
	}	
	dl_media_host_data.p_buffer = (UINT8*)dl_media_host_data.p_buffer + dl_media_host_data.size;
	length -= dl_media_host_data.size;
	ret = dl_media_host_get_data(dl_media_host_data.p_buffer, &length);
	*p_length = dl_media_host_data.size + length;

	dl_media_iou_int_restore();
	return ret;
}

DL_MEDIA_RET_T dl_media_host_mjp_display_start(void *p_buffer, UINT32 length)
{
	DL_MEDIA_RET_T ret;
	
	ret =dl_media_chip_patch(PATCH_VIDEO_DEC);
	sys_printf("=====dl_media_chip_patch = 0x%x\n",ret);
	if(ret) return ret;
#ifndef CHP_BIG_ENDIAN
	dl_media_callback.cmd_callback = dl_media_host_handle_rsp;
#else 
	if(mp4_mjp_flag)
	{
		dl_media_callback.cmd_callback = dl_media_host_handle_rsp_for_mp4ktv;  //hannah
	}
	else
	{
		dl_media_callback.cmd_callback = dl_media_host_handle_rsp;
	}
#endif
	dl_media_host_data.p_buffer = p_buffer;
//	sys_printf("===length = 0x%x\n",length);
	dl_media_host_data.length = length;
	dl_media_host_data.ret = DL_MEDIA_RET_SUCCESS;
	dl_media_callback.cmd_para = NULL;
	dl_media_interrupt_enable();
	dl_media_iou_int_enable();	
	ret = dl_media_send_cmd(DL_MEDIA_CMD_HOST_MJP_DISPLAY, NULL);
	sys_printf("=====dl_media_send_cmd = 0x%x\n",ret);
	if (ret != DL_MEDIA_RET_SUCCESS) 
		{
		dl_media_iou_int_disable();
		dl_media_interrupt_disable();
		dl_media_callback.cmd_callback = NULL;
		return ret;
		}


	return DL_MEDIA_RET_SUCCESS;
}

DL_MEDIA_RET_T dl_media_host_mjp_display_end()
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_IOU_FRAME_T dl_media_frame;
	UINT8 *p_buffer = dl_media_host_data.p_buffer;

	if (dl_media_host_data.ret != DL_MEDIA_RET_SUCCESS)
		return dl_media_host_data.ret;
	dl_media_interrupt_disable();
	dl_media_iou_int_disable();
	dl_media_callback.cmd_callback = NULL;
	ret = dl_media_send_cmd(DL_MEDIA_CMD_MJP_FILE_DISPLAY_END, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS) 
	{
		dl_media_iou_int_restore();
      return ret;
}
	//dl_media_delay(50);
	ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);
	FATAL_ERROR_TO_RESET(ret);
	while(dl_media_frame.type == IOU_FRAME_OFFSET_SIZE)
	{
		dl_media_host_data.offset = dl_media_frame.value[2]<<16 | dl_media_frame.value[1];
		if (dl_media_frame.value[0] == 0)
			dl_media_host_data.offsize = dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 1)
			dl_media_host_data.offsize += dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 2)
			dl_media_host_data.offsize = dl_media_host_data.size - dl_media_host_data.offset;
		p_buffer = dl_media_host_data.p_buffer + dl_media_host_data.offsize;
		dl_media_host_data.wsize = (dl_media_frame.size_hi << 16) | dl_media_frame.size_low;
		if (dl_media_host_data.wsize != 0)
		{
		#ifndef CHP_BIG_ENDIAN
			ret = dl_media_iou_write_data(p_buffer, dl_media_host_data.wsize);
		#else
			ret = dl_media_iou_write_data_for_big_endian(p_buffer, dl_media_host_data.wsize);
		#endif
			
			dl_media_host_data.offsize += dl_media_host_data.wsize;
		}	
	ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);
	FATAL_ERROR_TO_RESET(ret);
	}
	if (dl_media_frame.type == IOU_FRAME_ARM_RSP)
	{
		if (dl_media_frame.rsp == RSP_MJPG_PLAY_OVER||
			dl_media_frame.rsp == RSP_SUCCESS)
			return DL_MEDIA_RET_SUCCESS;
		else
			return DL_MEDIA_RET_FAIL;
	}
	return DL_MEDIA_RET_FAIL;
}

DL_MEDIA_RET_T dl_media_host_mp3_play(void *p_buffer, UINT32 length)
{
	DL_MEDIA_RET_T ret;
	UINT16 fid = 2;
	ret =dl_media_chip_patch(PATCH_MP3);
	sys_printf("=====dl_media_chip_patch = 0x%x\n",ret);
	if(ret) return ret;
#ifndef CHP_BIG_ENDIAN
	dl_media_callback.cmd_callback = dl_media_host_handle_rsp;
#else
	if(KTV_Play_Flag)
	{
		dl_media_callback.cmd_callback = dl_media_host_handle_rsp_for_mp4ktv;  //hannah
	}
	else
	{
		dl_media_callback.cmd_callback = dl_media_host_handle_rsp;
	}
#endif
	dl_media_host_data.p_buffer = p_buffer;
	sys_printf("===length = 0x%x\n",length);
	dl_media_host_data.length = length;
	dl_media_host_data.ret = DL_MEDIA_RET_SUCCESS;
	dl_media_callback.cmd_para = NULL;
	dl_media_dac_open();
	dl_media_interrupt_enable();
	dl_media_iou_int_enable();
	ret = dl_media_send_cmd(DL_MEDIA_CMD_MP3_PLAY_FROM_HOST, (void*)&fid);
	sys_printf("=====dl_media_send_cmd = 0x%x\n",ret);
	if (ret != DL_MEDIA_RET_SUCCESS)
	{
		dl_media_iou_int_disable();
		dl_media_interrupt_disable();
		dl_media_callback.cmd_callback = NULL;
		return ret;
	}	

	return DL_MEDIA_RET_SUCCESS;
}

DL_MEDIA_RET_T dl_media_host_mp3_pause(void)
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_IOU_FRAME_T dl_media_frame;
	UINT8 *p_buffer = dl_media_host_data.p_buffer;

	if (dl_media_host_data.ret != DL_MEDIA_RET_SUCCESS)
		return dl_media_host_data.ret;
	dl_media_dac_close();
	dl_media_interrupt_disable();
	dl_media_iou_int_disable();
	ret = dl_media_send_cmd(DL_MEDIA_CMD_MP3_PAUSE, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS) 
		return ret;
	ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);
	FATAL_ERROR_TO_RESET(ret);
	while(dl_media_frame.type == IOU_FRAME_OFFSET_SIZE)
	{
		dl_media_host_data.offset = dl_media_frame.value[2]<<16 | dl_media_frame.value[1];
		if (dl_media_frame.value[0] == 0)
			dl_media_host_data.offsize = dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 1)
			dl_media_host_data.offsize += dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 2)
			dl_media_host_data.offsize = dl_media_host_data.size - dl_media_host_data.offset;
		p_buffer = dl_media_host_data.p_buffer + dl_media_host_data.offsize;
		dl_media_host_data.wsize = (dl_media_frame.size_hi << 16) | dl_media_frame.size_low;
		if (dl_media_host_data.wsize != 0)
		{
		#ifndef CHP_BIG_ENDIAN
			ret = dl_media_iou_write_data(p_buffer, dl_media_host_data.wsize);
		#else
			ret = dl_media_iou_write_data_for_big_endian(p_buffer, dl_media_host_data.wsize);
		#endif
			
			dl_media_host_data.offsize += dl_media_host_data.wsize;
		}
		ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);		
		FATAL_ERROR_TO_RESET(ret);
	}
	if (dl_media_frame.type == IOU_FRAME_ARM_RSP)
	{
		if (dl_media_frame.rsp == RSP_SUCCESS)
			return DL_MEDIA_RET_SUCCESS;
		else
			return DL_MEDIA_RET_FAIL;
	}
	return DL_MEDIA_RET_FAIL;
}

DL_MEDIA_RET_T dl_media_host_mp3_resume(void)
{
	DL_MEDIA_RET_T ret;

	dl_media_dac_open();
	dl_media_interrupt_enable();
	dl_media_iou_int_enable();
	ret = dl_media_send_cmd(DL_MEDIA_CMD_MP3_RESUME, NULL);
	return ret;	
}

DL_MEDIA_RET_T dl_media_host_mp3_stop(void)
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_IOU_FRAME_T dl_media_frame;
	UINT8 *p_buffer = dl_media_host_data.p_buffer;

	if (dl_media_host_data.ret != DL_MEDIA_RET_SUCCESS)
		return dl_media_host_data.ret;
	dl_media_dac_close();
	dl_media_interrupt_disable();

⌨️ 快捷键说明

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