X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_output%2Fcaca.c;h=6de1ca19a27898fd10f6947bd3a7eecb2d6bb392;hb=5e07b00c3432b2dd79d6134cab6992afaabbca94;hp=d8e1a54ae2a1241514beb90b732e2036623ca3ef;hpb=52af2d545b1b3eaf1c73bf6a70d6690ce9887f70;p=vlc diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c index d8e1a54ae2..6de1ca19a2 100644 --- a/modules/video_output/caca.c +++ b/modules/video_output/caca.c @@ -55,10 +55,10 @@ vlc_module_end() /***************************************************************************** * Local prototypes *****************************************************************************/ -static picture_t *Get (vout_display_t *); -static void Prepare(vout_display_t *, picture_t *); -static void Display(vout_display_t *, picture_t *); -static int Control(vout_display_t *, int, va_list); +static picture_pool_t *Pool (vout_display_t *, unsigned); +static void Prepare(vout_display_t *, picture_t *); +static void Display(vout_display_t *, picture_t *); +static int Control(vout_display_t *, int, va_list); /* */ static void Manage(vout_display_t *); @@ -142,11 +142,18 @@ static int Open(vlc_object_t *object) goto error; } - sys->dp = caca_create_display(sys->cv); + const char *driver = NULL; +#ifdef __APPLE__ + // Make sure we don't try to open a window. + driver = "ncurses"; +#endif + + sys->dp = caca_create_display_with_driver(sys->cv, driver); if (!sys->dp) { msg_Err(vd, "cannot initialize libcaca"); goto error; } + vout_display_DeleteWindow(vd, NULL); if (vd->cfg->display.title) caca_set_display_title(sys->dp, @@ -164,11 +171,6 @@ static int Open(vlc_object_t *object) fmt.i_bmask = 0x000000ff; } - /* */ - sys->pool = picture_pool_NewFromFormat(&fmt, 1); - if (!sys->pool) - goto error; - /* TODO */ vout_display_info_t info = vd->info; @@ -176,11 +178,11 @@ static int Open(vlc_object_t *object) vd->fmt = fmt; vd->info = info; - vd->get = Get; + vd->pool = Pool; vd->prepare = Prepare; vd->display = Display; vd->control = Control; - vd->manage = Manage; + vd->manage = Manage; /* Fix initial state */ vout_display_SendEventFullscreen(vd, false); @@ -215,7 +217,8 @@ static void Close(vlc_object_t *object) vout_display_t *vd = (vout_display_t *)object; vout_display_sys_t *sys = vd->sys; - picture_pool_Delete(sys->pool); + if (sys->pool) + picture_pool_Delete(sys->pool); if (sys->dither) cucul_free_dither(sys->dither); caca_free_display(sys->dp); @@ -229,13 +232,15 @@ static void Close(vlc_object_t *object) } /** - * Return a direct buffer + * Return a pool of direct buffers */ -static picture_t *Get(vout_display_t *vd) +static picture_pool_t *Pool(vout_display_t *vd, unsigned count) { vout_display_sys_t *sys = vd->sys; - return picture_pool_Get(sys->pool); + if (!sys->pool) + sys->pool = picture_pool_NewFromFormat(&vd->fmt, count); + return sys->pool; } /** @@ -336,12 +341,12 @@ static void Refresh(vout_display_t *vd) caca_refresh_display(sys->dp); /* */ - const int width = caca_get_display_width(sys->dp); - const int height = caca_get_display_height(sys->dp); + const unsigned width = caca_get_display_width(sys->dp); + const unsigned height = caca_get_display_height(sys->dp); if (width != vd->cfg->display.width || height != vd->cfg->display.height) - vout_display_SendEventDisplaySize(vd, width, height); + vout_display_SendEventDisplaySize(vd, width, height, false); } /** @@ -436,8 +441,6 @@ static const struct { { CACA_KEY_PAGEUP, KEY_PAGEUP }, { CACA_KEY_PAGEDOWN,KEY_PAGEDOWN }, - { ' ', KEY_SPACE }, - /* */ { -1, -1 } }; @@ -486,7 +489,7 @@ static void Manage(vout_display_t *vd) } case CACA_EVENT_RESIZE: vout_display_SendEventDisplaySize(vd, caca_get_event_resize_width(&ev), - caca_get_event_resize_height(&ev)); + caca_get_event_resize_height(&ev), false); break; case CACA_EVENT_MOUSE_MOTION: { vout_display_place_t place; @@ -500,10 +503,7 @@ static void Manage(vout_display_t *vd) vd->source.i_visible_height / place.height; caca_set_mouse(sys->dp, 1); - if (x >= vd->source.i_x_offset && x < vd->source.i_x_offset + vd->source.i_visible_width && - y >= vd->source.i_y_offset && y < vd->source.i_y_offset + vd->source.i_visible_height) { - vout_display_SendEventMouseMoved(vd, x, y); - } + vout_display_SendEventMouseMoved(vd, x, y); break; } case CACA_EVENT_MOUSE_PRESS: