static void gst_cacasink_close (GstCACASink * cacasink) { if (cacasink->bitmap) { caca_free_bitmap (cacasink->bitmap); cacasink->bitmap = NULL; } caca_end (); }
static int resize () { screen_w = caca_get_width(); screen_h = caca_get_height(); if (cbitmap) caca_free_bitmap(cbitmap); cbitmap = caca_create_bitmap(bpp, image_width, image_height, depth * image_width, rmask, gmask, bmask, amask); if (!cbitmap) mp_msg(MSGT_VO, MSGL_FATAL, "vo_caca: caca_create_bitmap failed!\n"); return 0; }
static void uninit(void) { caca_free_bitmap(cbitmap); cbitmap = NULL; caca_end(); }
static gboolean gst_cacasink_setcaps (GstBaseSink * basesink, GstCaps * caps) { GstCACASink *cacasink; GstVideoInfo info; guint bpp, red_mask, green_mask, blue_mask; cacasink = GST_CACASINK (basesink); if (!gst_video_info_from_caps (&info, caps)) goto caps_error; switch (GST_VIDEO_INFO_FORMAT (&info)) { case GST_VIDEO_FORMAT_RGB: bpp = 24; red_mask = 0xff0000; green_mask = 0x00ff00; blue_mask = 0x0000ff; break; case GST_VIDEO_FORMAT_RGBx: bpp = 32; red_mask = 0xff000000; green_mask = 0x00ff0000; blue_mask = 0x0000ff00; break; case GST_VIDEO_FORMAT_RGB16: bpp = 16; red_mask = 0xf800; green_mask = 0x07e0; blue_mask = 0x001f; break; case GST_VIDEO_FORMAT_RGB15: bpp = 16; red_mask = 0x7c00; green_mask = 0x03e0; blue_mask = 0x001f; break; default: goto invalid_format; } if (cacasink->bitmap) { caca_free_bitmap (cacasink->bitmap); } cacasink->bitmap = caca_create_bitmap (bpp, GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info), GST_ROUND_UP_4 (GST_VIDEO_INFO_WIDTH (&info) * bpp / 8), red_mask, green_mask, blue_mask, 0); if (!cacasink->bitmap) goto no_bitmap; cacasink->info = info; return TRUE; /* ERROS */ caps_error: { GST_ERROR_OBJECT (cacasink, "error parsing caps"); return FALSE; } invalid_format: { GST_ERROR_OBJECT (cacasink, "invalid format"); return FALSE; } no_bitmap: { GST_ERROR_OBJECT (cacasink, "could not create bitmap"); return FALSE; } }