// Initializes a plane for the graphics to be rendered to
static gdl_ret_t setup_plane(gdl_plane_id_t plane) {
    gdl_pixel_format_t pixelFormat = GDL_PF_ARGB_32;
    gdl_color_space_t colorSpace = GDL_COLOR_SPACE_RGB;
    gdl_rectangle_t srcRect;
    gdl_rectangle_t dstRect;
    gdl_ret_t rc = GDL_SUCCESS;

    dstRect.origin.x = ORIGIN_X;
    dstRect.origin.y = ORIGIN_Y;
    dstRect.width = WIDTH;
    dstRect.height = HEIGHT;

    srcRect.origin.x = 0;
    srcRect.origin.y = 0;
    srcRect.width = WIDTH;
    srcRect.height = HEIGHT;

    rc = gdl_plane_reset(plane);
    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_config_begin(plane);
    }

    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_set_attr(GDL_PLANE_SRC_COLOR_SPACE, &colorSpace);
    }

    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_set_attr(GDL_PLANE_PIXEL_FORMAT, &pixelFormat);
    }

    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_set_attr(GDL_PLANE_DST_RECT, &dstRect);
    }

    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_set_attr(GDL_PLANE_SRC_RECT, &srcRect);
    }

    if (GDL_SUCCESS == rc) {
        rc = gdl_plane_config_end(GDL_FALSE);
    } else {
        gdl_plane_config_end(GDL_TRUE);
    }

    if (GDL_SUCCESS != rc) {
        fprintf(stderr, "GDL configuration failed! GDL error code is 0x%x\n",
                rc);
    }

    return rc;
}
void CEGLNativeTypeBoxee::Initialize()
{
  gdl_init();
  int enable = 1;

  gdl_rectangle_t srcRect, dstRect;
  gdl_display_info_t   display_info;
  gdl_get_display_info(GDL_DISPLAY_ID_0, &display_info);

  dstRect.origin.x = 0;
  dstRect.origin.y = 0;
  dstRect.width = display_info.tvmode.width;
  dstRect.height = display_info.tvmode.height;

  srcRect.origin.x = 0;
  srcRect.origin.y = 0;
  srcRect.width = display_info.tvmode.width;
  srcRect.height = display_info.tvmode.height;


  gdl_port_set_attr(GDL_PD_ID_HDMI, GDL_PD_ATTR_ID_POWER, &enable);
  gdl_plane_reset(GDL_GRAPHICS_PLANE);
  gdl_plane_config_begin(GDL_GRAPHICS_PLANE);
  gdl_plane_set_uint(GDL_PLANE_SRC_COLOR_SPACE, GDL_COLOR_SPACE_RGB);
  gdl_plane_set_uint(GDL_PLANE_PIXEL_FORMAT, GDL_PF_ARGB_32);
  gdl_plane_set_rect(GDL_PLANE_DST_RECT, &dstRect);
  gdl_plane_set_rect(GDL_PLANE_SRC_RECT, &srcRect);
  gdl_plane_config_end(GDL_FALSE);
  return;
}
示例#3
0
static void IntelCE_MoveCursor(int x, int y)
{
	gdl_plane_id_t 	plane 		= GDL_PLANE_ID_IAP_B; 
	gdl_ret_t 		rc 			= GDL_SUCCESS;
    gdl_rectangle_t srcRect, dstRect;

	int maxX = 1280, maxY = 720;
	
    dstRect.origin.x 	= x;
    dstRect.origin.y 	= y;
    dstRect.width 		= (x + GDL_CURSOR_WIDTH > maxX) ? (maxX - x) : GDL_CURSOR_WIDTH;
    dstRect.height 		= (y + GDL_CURSOR_HEIGHT > maxY) ? (maxY - y) : GDL_CURSOR_HEIGHT;

    srcRect.origin.x	= 0;
    srcRect.origin.y	= 0;
    srcRect.width		= dstRect.width;
    srcRect.height		= dstRect.height;

    /* Move the GDL plane to the new location */
    rc = gdl_plane_config_begin(plane);

    if (dstRect.width >= 16 && dstRect.height > 1) {
		if (GDL_SUCCESS == rc)
		{
			rc = gdl_plane_set_attr(GDL_PLANE_SRC_RECT, &srcRect);
		}

		if (GDL_SUCCESS == rc) {
			rc = gdl_plane_set_attr(GDL_PLANE_DST_RECT, &dstRect);
		}

		if (GDL_SUCCESS == rc) {
			rc = gdl_plane_config_end(GDL_FALSE);
		}
		else {
			gdl_plane_config_end(GDL_TRUE);
		}

		if (GDL_SUCCESS != rc)
		{
			qCritical("Failed to position mouse pointer.  GDL error code is 0x%x\n", rc);
		}
    }
}
示例#4
0
static CoglBool
gdl_plane_init (CoglDisplay *display, CoglError **error)
{
  CoglBool ret = TRUE;
  gdl_color_space_t colorSpace = GDL_COLOR_SPACE_RGB;
  gdl_pixel_format_t pixfmt = GDL_PF_ARGB_32;
  gdl_rectangle_t dstRect;
  gdl_display_info_t display_info;
  gdl_ret_t rc = GDL_SUCCESS;

  if (!display->gdl_plane)
    {
      _cogl_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_CREATE_CONTEXT,
                   "No GDL plane specified with "
                   "cogl_gdl_display_set_plane");
      return FALSE;
    }

  rc = gdl_init (NULL);
  if (rc != GDL_SUCCESS)
    {
      _cogl_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_CREATE_CONTEXT,
                   "GDL initialize failed. %s", gdl_get_error_string (rc));
      return FALSE;
    }

  rc = gdl_get_display_info (GDL_DISPLAY_ID_0, &display_info);
  if (rc != GDL_SUCCESS)
    {
      _cogl_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_CREATE_CONTEXT,
                   "GDL failed to get display infomation: %s",
                   gdl_get_error_string (rc));
      gdl_close ();
      return FALSE;
    }

  dstRect.origin.x = 0;
  dstRect.origin.y = 0;
  dstRect.width = display_info.tvmode.width;
  dstRect.height = display_info.tvmode.height;

  /* Configure the plane attribute. */
  rc = gdl_plane_reset (display->gdl_plane);
  if (rc == GDL_SUCCESS)
    rc = gdl_plane_config_begin (display->gdl_plane);

  if (rc == GDL_SUCCESS)
    rc = gdl_plane_set_attr (GDL_PLANE_SRC_COLOR_SPACE, &colorSpace);

  if (rc == GDL_SUCCESS)
    rc = gdl_plane_set_attr (GDL_PLANE_PIXEL_FORMAT, &pixfmt);

  if (rc == GDL_SUCCESS)
    rc = gdl_plane_set_attr (GDL_PLANE_DST_RECT, &dstRect);

  if (rc == GDL_SUCCESS)
    rc = gdl_plane_set_uint (GDL_PLANE_NUM_GFX_SURFACES, 3);

  if (rc == GDL_SUCCESS)
    rc = gdl_plane_config_end (GDL_FALSE);
  else
    gdl_plane_config_end (GDL_TRUE);

  if (rc != GDL_SUCCESS)
    {
      _cogl_set_error (error, COGL_WINSYS_ERROR, COGL_WINSYS_ERROR_CREATE_CONTEXT,
                   "GDL configuration failed: %s.", gdl_get_error_string (rc));
      ret = FALSE;
    }

  gdl_close ();

  return ret;
}
示例#5
0
/*!***********************************************************************
 @Function		OsInitOS
 @description	Saves instance handle and creates main window
				In this function, we save the instance handle in a global variable and
				create and display the main program window.
*************************************************************************/
bool PVRShellInit::OsInitOS()
{
#if defined(USE_GDL_PLANE)
	gdl_display_info_t di;
	gdl_get_display_info(GDL_DISPLAY_ID_0, &di);

	m_Plane = GDL_PLANE_ID_UPP_C;

 	gdl_pixel_format_t pixelFormat 	= GDL_PF_ARGB_32;

 	// Change the colour bpp default to 32 bits per pixel to match the GDL pixel format
 	m_pShell->m_pShellData->nColorBPP = 32;

    gdl_color_space_t colorSpace 	= GDL_COLOR_SPACE_RGB;
    gdl_rectangle_t srcRect, dstRect;

    gdl_ret_t rc = GDL_SUCCESS;

    rc = gdl_plane_config_begin(m_Plane);

    if(rc != GDL_SUCCESS)
    {
        m_pShell->PVRShellOutputDebug("Failed to begin config of GDL plane. (Error code 0x%x)\n", rc);
        return false;
    }

	if(m_pShell->m_pShellData->bFullScreen)
		dstRect.origin.x = dstRect.origin.y = 0;
	else
	{
		dstRect.origin.x = m_pShell->m_pShellData->nShellPosX;
		dstRect.origin.y = m_pShell->m_pShellData->nShellPosY;
	}

	srcRect.origin.x = srcRect.origin.y = 0;
    srcRect.width  = m_pShell->m_pShellData->nShellDimX;
    srcRect.height = m_pShell->m_pShellData->nShellDimY;

	bool bUpscaling = false;

	if(m_pShell->m_pShellData->bFullScreen)
	{
		dstRect.width = di.tvmode.width;
		bUpscaling = true;
	}
	else
		dstRect.width = srcRect.width;

	if(m_pShell->m_pShellData->bFullScreen)
	{
		dstRect.height = di.tvmode.height;
		bUpscaling = true;
	}
	else
		dstRect.height = srcRect.height;

	rc = gdl_plane_set_uint(GDL_PLANE_SCALE, bUpscaling ? GDL_TRUE : GDL_FALSE);

	if(rc != GDL_SUCCESS)
	{
		m_pShell->PVRShellOutputDebug("Failed to set upscale of GDL plane. (Error code 0x%x)\n", rc);
		return false;
	}

    rc = gdl_plane_set_attr(GDL_PLANE_SRC_COLOR_SPACE, &colorSpace);

    if(rc != GDL_SUCCESS)
    {
        m_pShell->PVRShellOutputDebug("Failed to set color space of GDL plane. (Error code 0x%x)\n", rc);
        return false;
	}

    rc = gdl_plane_set_attr(GDL_PLANE_PIXEL_FORMAT, &pixelFormat);

    if(rc != GDL_SUCCESS)
    {
        m_pShell->PVRShellOutputDebug("Failed to set pixel format of GDL plane. (Error code 0x%x)\n", rc);
        return false;
    }

    rc = gdl_plane_set_attr(GDL_PLANE_DST_RECT, &dstRect);

    if(rc != GDL_SUCCESS)
    {
        m_pShell->PVRShellOutputDebug("Failed to set dst rect of GDL plane. (Error code 0x%x)\n", rc);
        return false;
    }

    rc = gdl_plane_set_attr(GDL_PLANE_SRC_RECT, &srcRect);

    if(rc != GDL_SUCCESS)
    {
        m_pShell->PVRShellOutputDebug("Failed to set src rect of GDL plane. (Error code 0x%x)\n", rc);
        return false;
    }


    rc = gdl_plane_config_end(GDL_FALSE);

    if(rc != GDL_SUCCESS)
    {
        gdl_plane_config_end(GDL_TRUE);
        m_pShell->PVRShellOutputDebug("Failed to end config of GDL plane. (Error code 0x%x)\n", rc);
        return false;
	}
#endif
	return true;
}
bool CEGLNativeTypeBoxee::SetNativeResolution(const RESOLUTION_INFO &res)
{
  CLog::Log(LOGNOTICE,"Setting resolution: %s\n",res.strMode.c_str());


  gdl_pixel_format_t pixelFormat = GDL_PF_ARGB_32;
  gdl_color_space_t colorSpace = GDL_COLOR_SPACE_RGB;
  gdl_rectangle_t srcRect;
  gdl_rectangle_t dstRect;
  gdl_ret_t rc = GDL_SUCCESS;
  gdl_boolean_t hdmiEnabled = GDL_FALSE;

  gdl_plane_id_t m_gdlPlane = GDL_GRAPHICS_PLANE;

  gdl_display_info_t   display_info;
  memset(&display_info, 0, sizeof(display_info));
  RESOLUTION_INFO_to_tvmode(res, &display_info.tvmode);
  display_info.id          = GDL_DISPLAY_ID_0;
  display_info.flags       = 0;
  display_info.bg_color    = 0;
  display_info.color_space = GDL_COLOR_SPACE_RGB;
  display_info.gamma       = GDL_GAMMA_LINEAR;

  rc = gdl_set_display_info(&display_info);

  if ( rc != GDL_SUCCESS)
    {
      CLog::Log(LOGERROR, "Could not set display mode for display 0");
      return false;
    }

  // Setup composite output to NTSC. In order to support PAL we need to use 720x576i50.
  display_info.id           = GDL_DISPLAY_ID_1;
  display_info.flags        = 0;
  display_info.bg_color     = 0;
  display_info.color_space  = GDL_COLOR_SPACE_RGB;
  display_info.gamma        = GDL_GAMMA_LINEAR;
  display_info.tvmode.width      = 720;
  display_info.tvmode.height     = 480;
  display_info.tvmode.refresh    = GDL_REFRESH_59_94;
  display_info.tvmode.interlaced = GDL_TRUE;

  rc = gdl_set_display_info(&display_info);

  dstRect.origin.x = 0;
  dstRect.origin.y = 0;
  dstRect.width = res.iWidth;
  dstRect.height = res.iHeight;

  srcRect.origin.x = 0;
  srcRect.origin.y = 0;
  srcRect.width = res.iWidth;
  srcRect.height = res.iHeight;

  if (gdl_port_set_attr(GDL_PD_ID_HDMI, GDL_PD_ATTR_ID_HDCP, &hdmiEnabled) != GDL_SUCCESS)
    {
      CLog::Log(LOGWARNING, "Could not disable HDCP");
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_config_begin(m_gdlPlane);
    }

  rc = gdl_plane_reset(m_gdlPlane);
  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_config_begin(m_gdlPlane);
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_set_attr(GDL_PLANE_SRC_COLOR_SPACE, &colorSpace);
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_set_attr(GDL_PLANE_PIXEL_FORMAT, &pixelFormat);
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_set_attr(GDL_PLANE_DST_RECT, &dstRect);
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_set_attr(GDL_PLANE_SRC_RECT, &srcRect);
    }

  if(GDL_SUCCESS == rc)
    {
      gdl_boolean_t scalineEnabled = GDL_FALSE;
      rc = gdl_plane_set_attr(GDL_PLANE_UPSCALE, &scalineEnabled);
    }

  if (GDL_SUCCESS == rc)
    {
      rc = gdl_plane_config_end(GDL_FALSE);
    }
  else
    {
      gdl_plane_config_end(GDL_TRUE);
    }

  if (GDL_SUCCESS != rc)
    {
      CLog::Log(LOGERROR, "GDL configuration failed! GDL error code is 0x%x\n", rc);
      return false;
    }

  CLog::Log(LOGINFO, "GDL plane setup complete");


  return true;
}
示例#7
0
// Initializes a plane for the graphics to be rendered to
static gdl_ret_t setup_plane(gdl_plane_id_t plane)
{
    gdl_pixel_format_t pixelFormat = GDL_PF_ARGB_8;
    gdl_color_space_t  colorSpace = GDL_COLOR_SPACE_RGB;
    gdl_color_t        gdl_color;
    gdl_palette_t      pal;
    gdl_rectangle_t srcRect;
    gdl_rectangle_t dstRect;
    gdl_ret_t rc = GDL_SUCCESS;

    dstRect.origin.x = 0;
    dstRect.origin.y = 0;
    dstRect.width = GDL_CURSOR_WIDTH;
    dstRect.height = GDL_CURSOR_HEIGHT;

    srcRect.origin.x = 0;
    srcRect.origin.y = 0;
    srcRect.width = GDL_CURSOR_WIDTH;
    srcRect.height = GDL_CURSOR_HEIGHT;

    rc = gdl_plane_reset(plane);
    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_config_begin(plane);
    }

    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_set_attr(GDL_PLANE_SRC_COLOR_SPACE, &colorSpace);
    }

    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_set_attr(GDL_PLANE_PIXEL_FORMAT, &pixelFormat);
    }

    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_set_attr(GDL_PLANE_DST_RECT, &dstRect);
    }

    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_set_attr(GDL_PLANE_SRC_RECT, &srcRect);
    }

    if (GDL_SUCCESS == rc)
    {
        rc = gdl_plane_config_end(GDL_FALSE);
    }
    else
    {
        gdl_plane_config_end(GDL_TRUE);
    }

    if (GDL_SUCCESS != rc)
    {
        qCritical("GDL configuration failed! GDL error code is 0x%x\n", rc);
    }

    rc = gdl_alloc_surface(GDL_PF_ARGB_8,
                               GDL_CURSOR_WIDTH,
                               GDL_CURSOR_HEIGHT,
                               0,
                               &destination_surface_info);
    CHECK_GDL_RC(rc, "Failed ");

    // Black
    pal.data[0].a = 0xff;
    pal.data[0].r_y = 0x00;
    pal.data[0].g_u = 0x00;
    pal.data[0].b_v = 0x00;
    // White
    pal.data[1].a = 0xff;
    pal.data[1].r_y = 0xff;
    pal.data[1].g_u = 0xff;
    pal.data[1].b_v = 0xff;
    // Transparent background
    pal.data[2].a = 0x00;
    pal.data[2].r_y = 0x00;
    pal.data[2].g_u = 0x00;
    pal.data[2].b_v = 0x00;
    pal.length = 3;

    rc = gdl_set_palette(destination_surface_info.id, &pal);
    CHECK_GDL_RC(rc, "Failed ");

    rc = gdl_map_surface(destination_surface_info.id, &cursorPlaneBuffer, &cursorPlanePitch);
    CHECK_GDL_RC(rc, "Failed ");

    /* The CLUT index */
    gdl_color.alpha_index = 0;
    rc = gdl_clear_surface(destination_surface_info.id, &gdl_color);
    CHECK_GDL_RC(rc,"Failed ");

    rc = gdl_flip(plane,destination_surface_info.id, GDL_FLIP_ASYNC);
    CHECK_GDL_RC(rc,"Failed ");

    return rc;
}