int video_init(void) { XGCValues gc_values; Display *display; _video_gc = video_get_gc(&gc_values); display = x11ui_get_display_ptr(); x11video_log = log_open("X11Video"); color_init(); #ifdef USE_MITSHM if (!try_mitshm) { use_mitshm = 0; } else { /* This checks if the server has MITSHM extensions available If try_mitshm is true and we are on a different machine, frame_buffer_alloc will fall back to non shared memory calls. */ int major_version, minor_version, pixmap_flag; /* Check whether the server supports the Shared Memory Extension. */ if (!XShmQueryVersion(display, &major_version, &minor_version, &pixmap_flag)) { log_warning(x11video_log, "The MITSHM extension is not supported on this display."); use_mitshm = 0; } else { DEBUG_MITSHM((_("MITSHM extensions version %d.%d detected."), major_version, minor_version)); if (!pixmap_flag) { DEBUG_MITSHM(("The MITSHM extension is supported on this display, but shared pixmaps are not available.")); } use_mitshm = 1; } } #else use_mitshm = 0; #endif return 0; }
video_canvas_t *video_canvas_create(video_canvas_t *canvas, unsigned int *width, unsigned int *height, int mapped) { int res; unsigned int new_width, new_height; XGCValues gc_values; canvas->depth = x11ui_get_display_depth(); new_width = *width; new_height = *height; if (canvas->videoconfig->doublesizex) { new_width *= 2; } if (canvas->videoconfig->doublesizey) { new_height *= 2; } #ifdef HAVE_XVIDEO /* Request specified video format. */ canvas->xv_format.id = fourcc; if (!find_yuv_port(x11ui_get_display_ptr(), &canvas->xv_port, &canvas->xv_format)) { if (canvas->videoconfig->hwscale) { log_message(x11video_log, "HW scaling not available"); canvas->videoconfig->hwscale = 0; } resources_set_int("HwScalePossible", 0); } #else resources_set_int("HwScalePossible", 0); #endif if (video_arch_frame_buffer_alloc(canvas, new_width, new_height) < 0) { return NULL; } res = ui_open_canvas_window(canvas, canvas->viewport->title, new_width, new_height, 1); if (res < 0) { return NULL; } if (!_video_gc) { _video_gc = video_get_gc(&gc_values); } canvas->width = new_width; canvas->height = new_height; ui_finish_canvas(canvas); if (canvas->depth > 8) { uicolor_init_video_colors(); } #ifdef HAVE_XVIDEO init_xv_settings(canvas); #endif #ifdef HAVE_OPENGL_SYNC openGL_sync_init(canvas); #endif return canvas; }