struct kgem_bo * sna_video_buffer(struct sna_video *video, struct sna_video_frame *frame) { /* Free the current buffer if we're going to have to reallocate */ if (video->buf && __kgem_bo_size(video->buf) < frame->size) sna_video_free_buffers(video); if (video->buf && video->buf->scanout) { if (frame->width != video->width || frame->height != video->height || frame->id != video->format) sna_video_free_buffers(video); } if (video->buf == NULL) { if (video->tiled) { video->buf = kgem_create_2d(&video->sna->kgem, frame->width, frame->height, 32, I915_TILING_X, CREATE_EXACT); } else { video->buf = kgem_create_linear(&video->sna->kgem, frame->size, CREATE_GTT_MAP); } } video->width = frame->width; video->height = frame->height; video->format = frame->id; return video->buf; }
static int sna_video_overlay_stop(ClientPtr client, XvPortPtr port, DrawablePtr draw) { struct sna_video *video = port->devPriv.ptr; struct sna *sna = video->sna; struct drm_intel_overlay_put_image request; DBG(("%s()\n", __FUNCTION__)); REGION_EMPTY(scrn->pScreen, &video->clip); request.flags = 0; (void)drmIoctl(sna->kgem.fd, DRM_IOCTL_I915_OVERLAY_PUT_IMAGE, &request); if (video->bo) kgem_bo_destroy(&sna->kgem, video->bo); video->bo = NULL; sna_video_free_buffers(video); sna_window_set_port((WindowPtr)draw, NULL); return Success; }
struct kgem_bo * sna_video_buffer(struct sna *sna, struct sna_video *video, struct sna_video_frame *frame) { /* Free the current buffer if we're going to have to reallocate */ if (video->buf && __kgem_bo_size(video->buf) < frame->size) sna_video_free_buffers(sna, video); if (video->buf == NULL) video->buf = kgem_create_linear(&sna->kgem, frame->size, CREATE_GTT_MAP); return video->buf; }
struct kgem_bo * sna_video_buffer(struct sna *sna, struct sna_video *video, struct sna_video_frame *frame) { /* Free the current buffer if we're going to have to reallocate */ if (video->buf && __kgem_bo_size(video->buf) < frame->size) sna_video_free_buffers(sna, video); if (video->buf == NULL) { if (video->tiled) { video->buf = kgem_create_2d(&sna->kgem, frame->width, frame->height, 32, I915_TILING_X, CREATE_EXACT); } else { video->buf = kgem_create_linear(&sna->kgem, frame->size, CREATE_GTT_MAP); } } return video->buf; }