void _ecore_xcb_composite_finalize(void) { #ifdef ECORE_XCB_COMPOSITE const xcb_query_extension_reply_t *ext_reply; #endif LOGFN(__FILE__, __LINE__, __FUNCTION__); #ifdef ECORE_XCB_COMPOSITE ext_reply = xcb_get_extension_data(_ecore_xcb_conn, &xcb_composite_id); if ((ext_reply) && (ext_reply->present)) { xcb_composite_query_version_cookie_t cookie; xcb_composite_query_version_reply_t *reply; cookie = xcb_composite_query_version_unchecked(_ecore_xcb_conn, XCB_COMPOSITE_MAJOR_VERSION, XCB_COMPOSITE_MINOR_VERSION); reply = xcb_composite_query_version_reply(_ecore_xcb_conn, cookie, NULL); if (reply) { // if ((reply->major_version >= XCB_COMPOSITE_MAJOR_VERSION) && if (reply->minor_version >= XCB_COMPOSITE_MINOR_VERSION) { # ifdef ECORE_XCB_RENDER if (_ecore_xcb_render_avail_get()) { # ifdef ECORE_XCB_XFIXES if (_ecore_xcb_xfixes_avail_get()) _composite_avail = EINA_TRUE; # endif } # endif } free(reply); } } #endif }
void _ecore_x_composite_init_finalize(void) { #ifdef ECORE_XCB_COMPOSITE xcb_composite_query_version_reply_t *reply; reply = xcb_composite_query_version_reply(_ecore_xcb_conn, _ecore_xcb_composite_init_cookie, NULL); if (reply) { if ((reply->major_version == XCB_COMPOSITE_MAJOR_VERSION) && (reply->minor_version >= XCB_COMPOSITE_MINOR_VERSION)) _composite_available = 1; free(reply); } #endif /* ECORE_XCB_COMPOSITE */ } /* _ecore_x_composite_init_finalize */
/** * Probes and initializes. */ static int Open (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; demux_sys_t *p_sys = malloc (sizeof (*p_sys)); if (p_sys == NULL) return VLC_ENOMEM; demux->p_sys = p_sys; /* Connect to X server */ char *display = var_InheritString (obj, "x11-display"); int snum; xcb_connection_t *conn = xcb_connect (display, &snum); free (display); if (xcb_connection_has_error (conn)) { free (p_sys); return VLC_EGENERIC; } p_sys->conn = conn; /* Find configured screen */ if (!strcmp (demux->psz_access, "screen")) { const xcb_setup_t *setup = xcb_get_setup (conn); const xcb_screen_t *scr = NULL; for (xcb_screen_iterator_t i = xcb_setup_roots_iterator (setup); i.rem > 0; xcb_screen_next (&i)) { if (snum == 0) { scr = i.data; break; } snum--; } if (scr == NULL) { msg_Err (obj, "bad X11 screen number"); goto error; } p_sys->window = scr->root; } else /* Determine capture window */ if (!strcmp (demux->psz_access, "window")) { char *end; unsigned long ul = strtoul (demux->psz_location, &end, 0); if (*end || ul > 0xffffffff) { msg_Err (obj, "bad X11 drawable %s", demux->psz_location); goto error; } p_sys->window = ul; xcb_composite_query_version_reply_t *r = xcb_composite_query_version_reply (conn, xcb_composite_query_version (conn, 0, 4), NULL); if (r == NULL || r->minor_version < 2) { msg_Err (obj, "X Composite extension not available"); free (r); goto error; } msg_Dbg (obj, "using Composite extension v%"PRIu32".%"PRIu32, r->major_version, r->minor_version); free (r); xcb_composite_redirect_window (conn, p_sys->window, XCB_COMPOSITE_REDIRECT_AUTOMATIC); } else goto error; /* Window properties */ p_sys->pixmap = xcb_generate_id (conn); p_sys->w = var_InheritInteger (obj, "screen-width"); p_sys->h = var_InheritInteger (obj, "screen-height"); if (p_sys->w != 0 || p_sys->h != 0) p_sys->follow_mouse = var_InheritBool (obj, "screen-follow-mouse"); else /* Following mouse is meaningless if width&height are dynamic. */ p_sys->follow_mouse = false; if (!p_sys->follow_mouse) /* X and Y are meaningless if following mouse */ { p_sys->x = var_InheritInteger (obj, "screen-left"); p_sys->y = var_InheritInteger (obj, "screen-top"); } /* Initializes format */ p_sys->rate = var_InheritFloat (obj, "screen-fps"); if (!p_sys->rate) goto error; p_sys->interval = (float)CLOCK_FREQ / p_sys->rate; if (!p_sys->interval) goto error; var_Create (obj, "screen-caching", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT); p_sys->cur_w = 0; p_sys->cur_h = 0; p_sys->es = NULL; p_sys->pts = VLC_TS_INVALID; if (vlc_timer_create (&p_sys->timer, Demux, demux)) goto error; vlc_timer_schedule (p_sys->timer, false, 1, p_sys->interval); /* Initializes demux */ demux->pf_demux = NULL; demux->pf_control = Control; return VLC_SUCCESS; error: xcb_disconnect (p_sys->conn); free (p_sys); return VLC_EGENERIC; }
/** Get the replies of the QueryVersion requests previously sent and * check if their version actually matched the versions needed * * \see display_init_extensions */ void display_init_extensions_finalise(void) { assert(_init_extensions_cookies.composite.sequence); xcb_composite_query_version_reply_t *composite_version_reply = xcb_composite_query_version_reply(globalconf.connection, _init_extensions_cookies.composite, NULL); /* Need NameWindowPixmap support introduced in version >= 0.2 */ if(!composite_version_reply || composite_version_reply->minor_version < 2) { free(composite_version_reply); fatal("Need Composite extension 0.2 at least"); } free(composite_version_reply); assert(_init_extensions_cookies.damage.sequence); xcb_damage_query_version_reply_t *damage_version_reply = xcb_damage_query_version_reply(globalconf.connection, _init_extensions_cookies.damage, NULL); if(!damage_version_reply) fatal("Can't initialise Damage extension"); free(damage_version_reply); assert(_init_extensions_cookies.xfixes.sequence); xcb_xfixes_query_version_reply_t *xfixes_version_reply = xcb_xfixes_query_version_reply(globalconf.connection, _init_extensions_cookies.xfixes, NULL); /* Need Region objects support introduced in version >= 2.0 */ if(!xfixes_version_reply || xfixes_version_reply->major_version < 2) { free(xfixes_version_reply); fatal("Need XFixes extension 2.0 at least"); } free(xfixes_version_reply); /* Need refresh rates support introduced in version >= 1.1 */ if(globalconf.extensions.randr) { assert(_init_extensions_cookies.randr.sequence); xcb_randr_query_version_reply_t *randr_version_reply = xcb_randr_query_version_reply(globalconf.connection, _init_extensions_cookies.randr, NULL); if(!randr_version_reply || randr_version_reply->major_version < 1 || randr_version_reply->minor_version < 1) globalconf.extensions.randr = NULL; free(randr_version_reply); } }