bool GLXInteropResource::map(const surface_ptr& surface, GLuint tex, int w, int h, int) { Q_UNUSED(w); Q_UNUSED(h); surface_glx_ptr glx = glx_surfaces[tex]; if(!surface.isNull() && (surface->width() != m_width || m_height != surface->height())) { m_width = surface->width(); m_height = surface->height(); m_regenerateGlx = true; } if(m_regenerateGlx || !glx) { if (glx) { glx.clear(); } glx = surface_glx_ptr(new surface_glx_t(surface->display())); if (!glx->create(tex)) glx = surface_glx_ptr(); glx_surfaces[tex] = glx; } if (!glx) { qWarning("Fail to create vaapi glx surface"); return false; } if (!glx->copy(surface)) return false; VAWARN(vaSyncSurface(surface->vadisplay(), surface->get())); return true; }
surface_glx_ptr GLXInteropResource::surfaceGLX(const display_ptr &dpy, GLuint tex) { surface_glx_ptr glx = glx_surfaces[tex]; if (glx) return glx; glx = surface_glx_ptr(new surface_glx_t(dpy)); if (!glx->create(tex)) return surface_glx_ptr(); glx_surfaces[tex] = glx; return glx; }