Esempio n. 1
0
bool CDVDVideoCodecA10::HardwarePictureScaler(ScalerParameter *cdx_scaler_para)
{
  unsigned long        arg[4] = {0,0,0,0};
  __disp_scaler_para_t scaler_para;
  bool                 is_open;

  memset(&scaler_para, 0, sizeof(__disp_scaler_para_t));
  scaler_para.input_fb.addr[0] = cdx_scaler_para->addr_y_in;//
  scaler_para.input_fb.addr[1] = cdx_scaler_para->addr_c_in;//
  scaler_para.input_fb.size.width = cdx_scaler_para->width_in;//
  scaler_para.input_fb.size.height = cdx_scaler_para->height_in;//
  scaler_para.input_fb.format =  DISP_FORMAT_YUV420;
  scaler_para.input_fb.seq = DISP_SEQ_UVUV;
  scaler_para.input_fb.mode = DISP_MOD_MB_UV_COMBINED;
  scaler_para.input_fb.br_swap = 0;
  scaler_para.input_fb.cs_mode = DISP_BT601;
  scaler_para.source_regn.x = 0;
  scaler_para.source_regn.y = 0;
  scaler_para.source_regn.width = cdx_scaler_para->width_in;//
  scaler_para.source_regn.height = cdx_scaler_para->height_in;//

  scaler_para.output_fb.addr[0] = (unsigned int)cdx_scaler_para->addr_y_out;//
  scaler_para.output_fb.addr[1] = cdx_scaler_para->addr_u_out;//
  scaler_para.output_fb.addr[2] = cdx_scaler_para->addr_v_out;//
  scaler_para.output_fb.size.width = cdx_scaler_para->width_out;//
  scaler_para.output_fb.size.height = cdx_scaler_para->height_out;//
  scaler_para.output_fb.format = DISP_FORMAT_YUV420;
  scaler_para.output_fb.seq  = DISP_SEQ_P3210;
  scaler_para.output_fb.mode = DISP_MOD_NON_MB_PLANAR;
  scaler_para.output_fb.br_swap = 0;
  scaler_para.output_fb.cs_mode = DISP_YCC;

  is_open = m_hscaler;

  if (!is_open && !scaler_open())
  {
    CLog::Log(LOGERROR, "A10: scaler_open failed.\n");
    return false;
  }

  arg[1] = m_hscaler;
  arg[2] = (unsigned long) &scaler_para;
  ioctl(m_hdisp, DISP_CMD_SCALER_EXECUTE, (unsigned long) arg);

  if (!is_open)
    scaler_close();

  return true;
}
Esempio n. 2
0
/*
 * Dispose, Free all resources
 */
void CDVDVideoCodecA10::Dispose()
{
  if (m_yuvdata)
  {
    mem_pfree(m_yuvdata);
    m_yuvdata = NULL;
  }
  scaler_close();
  disp_close();
  if (m_hcedarv)
  {
    m_hcedarv->ioctrl(m_hcedarv, CEDARV_COMMAND_STOP, 0);
    m_hcedarv->close(m_hcedarv);
    libcedarv_exit(m_hcedarv);
    m_hcedarv = NULL;
    cas(&g_cedaropen, 1, 0);
    CLog::Log(LOGDEBUG, "A10: cedar dispose.");
  }
}
Esempio n. 3
0
s32 bsp_disp_exit(u32 mode)
{
	u32 num_screens;
	u32 screen_id;
	u32 num_scalers;
	u32 scaler_id;
	struct disp_lcd *lcd;
	struct disp_manager *manager;

	num_screens = bsp_disp_feat_get_num_screens();
	num_scalers = bsp_disp_feat_get_num_scalers();

	if(mode == DISP_EXIT_MODE_CLEAN_ALL) {
		/* close all mod and unregister all irq */
		for(scaler_id = 0; scaler_id < num_scalers; scaler_id++) {
			scaler_close(scaler_id);
		}
		scaler_exit();

		for(screen_id = 0; screen_id < num_screens; screen_id++) {
			lcd = disp_get_lcd(screen_id);
			manager = disp_get_layer_manager(screen_id);

			manager->exit(manager);
			lcd->exit(lcd);
		}
	}	else if(mode == DISP_EXIT_MODE_CLEAN_PARTLY) {
		/* unregister all irq */
//		OSAL_InterruptDisable(AW_IRQ_DEBE0);
//		OSAL_UnRegISR(AW_IRQ_DEBE0, manager_event_proc, (void*)0);
		OSAL_InterruptDisable(AW_IRQ_LCD0);
		OSAL_UnRegISR(AW_IRQ_LCD0, disp_lcd_event_proc, (void*)0);

//		OSAL_InterruptDisable(AW_IRQ_DEBE1);
//		OSAL_UnRegISR(AW_IRQ_DEBE1, manager_event_proc, (void*)0);
		OSAL_InterruptDisable(AW_IRQ_LCD1);
		OSAL_UnRegISR(AW_IRQ_LCD1, disp_lcd_event_proc, (void*)0);
	}

	return DIS_SUCCESS;
}