Beispiel #1
0
void plat_video_menu_enter(int is_rom_loaded)
{
	g_menuscreen_ptr = vout_fbdev_resize(main_fb,
		g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 3);
	if (g_menuscreen_ptr == NULL)
		fprintf(stderr, "warning: vout_fbdev_resize failed\n");
}
Beispiel #2
0
void plat_video_menu_leave(void)
{
	/* have to get rid of panning so that plugins that
	 * use fb0 and don't ever pan can work. */
	vout_fbdev_clear(main_fb);
	g_menuscreen_ptr = vout_fbdev_resize(main_fb,
		g_menuscreen_w, g_menuscreen_h, 16, 0, 0, 0, 0, 1);
	if (g_menuscreen_ptr == NULL)
		fprintf(stderr, "warning: vout_fbdev_resize failed\n");
}
Beispiel #3
0
int vout_fbdev_init(struct vout_fbdev *fbdev, int *w, int *h, int bpp, int buffer_cnt)
{
  int req_w, req_h;
  void *pret;
  int ret;

  ret = ioctl(fbdev->fd, FBIOGET_VSCREENINFO, &fbdev->fbvar_old);
  if (ret == -1) {
    perror(PFX "FBIOGET_VSCREENINFO ioctl");
    return -1;
  }

  fbdev->fbvar_new = fbdev->fbvar_old;

  req_w = fbdev->fbvar_new.xres;
  if (*w != 0)
    req_w = *w;
  req_h = fbdev->fbvar_new.yres;
  if (*h != 0)
    req_h = *h;

  pret = vout_fbdev_resize(fbdev, req_w, req_h, bpp, 0, 0, 0, 0, buffer_cnt);
  if (pret == NULL)
    return -1;

  printf(PFX "%ix%i@%d\n", fbdev->fbvar_new.xres,
         fbdev->fbvar_new.yres, fbdev->fbvar_new.bits_per_pixel);
  *w = fbdev->fbvar_new.xres;
  *h = fbdev->fbvar_new.yres;

  memset(fbdev->mem, 0, fbdev->mem_size);

  // some checks
  ret = 0;
  ret = ioctl(fbdev->fd, FBIO_WAITFORVSYNC, &ret);
  if (ret != 0)
    fprintf(stderr, PFX "Warning: vsync doesn't seem to be supported\n");

  if (fbdev->buffer_count > 1) {
    fbdev->buffer_write = 0;
    fbdev->fbvar_new.yoffset = fbdev->fbvar_new.yres * (fbdev->buffer_count - 1);
    ret = ioctl(fbdev->fd, FBIOPAN_DISPLAY, &fbdev->fbvar_new);
    if (ret != 0) {
      fbdev->buffer_count = 1;
      fprintf(stderr, PFX "Warning: can't pan display, doublebuffering disabled\n");
    }
  }

  printf("fbdev initialized.\n");
  return 0;
}
Beispiel #4
0
void *pl_fbdev_set_mode(int w, int h, int bpp)
{
	void *ret;

	if (w == pl_fbdev_w && h == pl_fbdev_h && bpp == pl_fbdev_bpp)
		return pl_fbdev_buf;

	pl_fbdev_w = w;
	pl_fbdev_h = h;
	pl_fbdev_bpp = bpp;

	vout_fbdev_clear(layer_fb);
	ret = vout_fbdev_resize(layer_fb, w, h, bpp, 0, 0, 0, 0, 3);
	if (ret == NULL)
		fprintf(stderr, "failed to set mode\n");
	else
		pl_fbdev_buf = ret;

	menu_notify_mode_change(w, h, bpp);

	return pl_fbdev_buf;
}
Beispiel #5
0
struct vout_fbdev *vout_fbdev_init(const char *fbdev_name, int *w, int *h, int bpp, int buffer_cnt)
{
	struct vout_fbdev *fbdev;
	int req_w, req_h;
	void *pret;
	int ret;

	fbdev = calloc(1, sizeof(*fbdev));
	if (fbdev == NULL)
		return NULL;

	fbdev->fd = open(fbdev_name, O_RDWR);
	if (fbdev->fd == -1) {
		fprintf(stderr, PFX "%s: ", fbdev_name);
		perror("open");
		goto fail_open;
	}

	ret = ioctl(fbdev->fd, FBIOGET_VSCREENINFO, &fbdev->fbvar_old);
	if (ret == -1) {
		perror(PFX "FBIOGET_VSCREENINFO ioctl");
		goto fail;
	}

	fbdev->fbvar_new = fbdev->fbvar_old;

	req_w = fbdev->fbvar_new.xres;
	if (*w != 0)
		req_w = *w;
	req_h = fbdev->fbvar_new.yres;
	if (*h != 0)
		req_h = *h;

	pret = vout_fbdev_resize(fbdev, req_w, req_h, bpp, 0, 0, 0, 0, buffer_cnt);
	if (pret == NULL)
		goto fail;

	printf(PFX "%s: %ix%i@%d\n", fbdev_name, fbdev->fbvar_new.xres,
		fbdev->fbvar_new.yres, fbdev->fbvar_new.bits_per_pixel);
	*w = fbdev->fbvar_new.xres;
	*h = fbdev->fbvar_new.yres;

	memset(fbdev->mem, 0, fbdev->mem_size);

	// some checks
	ret = 0;
	ret = ioctl(fbdev->fd, FBIO_WAITFORVSYNC, &ret);
	if (ret != 0)
		fprintf(stderr, PFX "Warning: vsync doesn't seem to be supported\n");

	if (fbdev->buffer_count > 1) {
		fbdev->buffer_write = 0;
		fbdev->fbvar_new.yoffset = fbdev->fbvar_new.yres * (fbdev->buffer_count - 1);
		ret = ioctl(fbdev->fd, FBIOPAN_DISPLAY, &fbdev->fbvar_new);
		if (ret != 0) {
			fbdev->buffer_count = 1;
			fprintf(stderr, PFX "Warning: can't pan display, doublebuffering disabled\n");
		}
	}

	printf("fbdev initialized.\n");
	return fbdev;

fail:
	close(fbdev->fd);
fail_open:
	free(fbdev);
	return NULL;
}