Пример #1
0
uint8_t fini_wayland_buffer(struct wayland *wayland)
{
	uint8_t exit_code = 0;
	wl_buffer_destroy(wayland->back_buffer);
	wl_buffer_destroy(wayland->front_buffer);
	wl_shm_pool_destroy(wayland->shm_pool);
	if (munmap(wayland->data, wayland->capacity) < 0) {
		exit_code |= EXIT_CODE_OS_ERROR_BIT;
	}
	if (close(wayland->fd) < 0) {
		exit_code |= EXIT_CODE_OS_ERROR_BIT;
	}
	return exit_code;
}
Пример #2
0
static void
destroy_window(struct window *window)
{
	if (window->callback)
		wl_callback_destroy(window->callback);

	if (window->buffers[0].buffer)
		wl_buffer_destroy(window->buffers[0].buffer);
	if (window->buffers[1].buffer)
		wl_buffer_destroy(window->buffers[1].buffer);

	wl_shell_surface_destroy(window->shell_surface);
	wl_surface_destroy(window->surface);
	free(window);
}
Пример #3
0
static void
gst_wl_meta_free (GstWlMeta * meta, GstBuffer * buffer)
{
  gst_object_unref (meta->sink);
  munmap (meta->data, meta->size);
  wl_buffer_destroy (meta->wbuffer);
}
Пример #4
0
/**
 * Called via eglDestroySurface(), drv->API.DestroySurface().
 */
static EGLBoolean
dri2_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
{
   struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
   struct dri2_egl_surface *dri2_surf = dri2_egl_surface(surf);
   int i;

   (void) drv;

   if (!_eglPutSurface(surf))
      return EGL_TRUE;

   (*dri2_dpy->core->destroyDrawable)(dri2_surf->dri_drawable);

   for (i = 0; i < WL_BUFFER_COUNT; ++i)
      if (dri2_surf->wl_drm_buffer[i])
         wl_buffer_destroy(dri2_surf->wl_drm_buffer[i]);

   for (i = 0; i < __DRI_BUFFER_COUNT; ++i)
      if (dri2_surf->dri_buffers[i] && !(i == __DRI_BUFFER_FRONT_LEFT &&
          dri2_surf->base.Type == EGL_PIXMAP_BIT))
         dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
                                       dri2_surf->dri_buffers[i]);

   if (dri2_surf->third_buffer) {
      dri2_dpy->dri2->releaseBuffer(dri2_dpy->dri_screen,
                                    dri2_surf->third_buffer);
   }

   free(surf);

   return EGL_TRUE;
}
Пример #5
0
static void
clutter_backend_wayland_dispose (GObject *gobject)
{
  ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (gobject);

  if (backend_wayland->device_manager)
    {
      g_object_unref (backend_wayland->device_manager);
      backend_wayland->device_manager = NULL;
    }

  if (backend_wayland->cursor_buffer)
    {
      wl_buffer_destroy (backend_wayland->cursor_buffer);
      backend_wayland->cursor_buffer = NULL;
    }

  if (backend_wayland->cursor_theme)
    {
      wl_cursor_theme_destroy (backend_wayland->cursor_theme);
      backend_wayland->cursor_theme = NULL;
    }

  G_OBJECT_CLASS (clutter_backend_wayland_parent_class)->dispose (gobject);
}
/* Delete a specific drawable */
static WSEGLError wseglDeleteDrawable(WSEGLDrawableHandle _drawable)
{
    struct wl_egl_window *drawable = (struct wl_egl_window *) _drawable;

    int index;
    int numBuffers = WAYLANDWSEGL_MAX_BACK_BUFFERS;

    if (drawable->header.type == WWSEGL_DRAWABLE_TYPE_WINDOW) {
        for (index = 0; index < numBuffers; ++index) {
            if (drawable->drmbuffers[index])
                wl_buffer_destroy(drawable->drmbuffers[index]);
            if (drawable->backBuffers[index])
                PVR2DMemFree(drawable->display->context, drawable->backBuffers[index]);
        }

        memset(drawable->drmbuffers, 0, sizeof(drawable->drmbuffers));
        memset(drawable->backBuffers, 0, sizeof(drawable->backBuffers));
        drawable->backBuffersValid = 0;
        return WSEGL_SUCCESS;
    } else if (drawable->header.type == WWSEGL_DRAWABLE_TYPE_PIXMAP) {
        struct wl_egl_pixmap *pixmap = (struct wl_egl_pixmap *)drawable;
        PVR2DMemFree(pixmap->display->context, pixmap->pvrmem);
    } else {
        assert(0);
    }

    return WSEGL_SUCCESS;
}
Пример #7
0
static void
_destroy_buffer (BufferData *buffer)
{
  if (!buffer)
    return;

  buffer->disposed = TRUE;

  /* If the buffer is acquired by the compositor, don't free it
   * yet, but wait until it's been released.
   */
  if (!buffer->released)
    return;

  if (buffer->surface)
    cairo_surface_destroy (buffer->surface);

  if (buffer->wl_buffer)
    wl_buffer_destroy (buffer->wl_buffer);

  if (buffer->wl_pool)
    wl_shm_pool_destroy (buffer->wl_pool);

  if (buffer->data && buffer->data_len)
    munmap (buffer->data, buffer->data_len);

  g_free (buffer);
}
Пример #8
0
static void
shm_surface_data_destroy(void *p)
{
	struct shm_surface_data *data = p;

	wl_buffer_destroy(data->data.buffer);
	munmap(data->map, data->length);
}
static void
frame_release_callback (void *data, struct wl_buffer *wl_buffer)
{
  FrameState *const frame = data;
  if (!frame->done)
    frame_done (frame);
  wl_buffer_destroy (wl_buffer);
  frame_state_free (frame);
}
Пример #10
0
Файл: shm.c Проект: videolan/vlc
static void buffer_release_cb(void *data, struct wl_buffer *buffer)
{
    struct buffer_data *d = data;

    picture_Release(d->picture);
    (*(d->counter))--;
    free(d);
    wl_buffer_destroy(buffer);
}
Пример #11
0
static void
destroy_window(struct window *window)
{
	if (window->callback)
		wl_callback_destroy(window->callback);

	if (window->buffers[0].buffer)
		wl_buffer_destroy(window->buffers[0].buffer);
	if (window->buffers[1].buffer)
		wl_buffer_destroy(window->buffers[1].buffer);

	if (window->xdg_surface)
		xdg_surface_destroy(window->xdg_surface);
	if (window->viewport)
		wl_viewport_destroy(window->viewport);
	wl_surface_destroy(window->surface);
	free(window);
}
Пример #12
0
void hello_free_cursor(void)
{
    struct pointer_data *data;

    data = wl_pointer_get_user_data(pointer);
    wl_buffer_destroy(data->buffer);
    wl_surface_destroy(data->surface);
    free(data);
    wl_pointer_set_user_data(pointer, NULL);
}
Пример #13
0
static void
wl_cursor_image_destroy(struct wl_cursor_image *_img)
{
	struct cursor_image *image = (struct cursor_image *) _img;

	if (image->buffer)
		wl_buffer_destroy(image->buffer);

	free(image);
}
static void
frame_redraw_callback(void *data, struct wl_callback *callback, uint32_t time)
{
    GstVaapiWindowWaylandPrivate * const priv = data;

    priv->redraw_pending = FALSE;
    wl_buffer_destroy(priv->buffer);
    priv->buffer = NULL;
    wl_callback_destroy(callback);
}
Пример #15
0
ServerWaylandBuffer::~ServerWaylandBuffer()
{
    if (m_buf)
        wl_buffer_destroy(m_buf);

    m_gralloc->unregisterBuffer(m_gralloc, handle);
    native_handle_close(handle);
    native_handle_delete(const_cast<native_handle_t *>(handle));
    wl_array_release(&ints);
    wl_array_release(&fds);
}
Пример #16
0
static block_t *Shoot(demux_t *demux)
{
    demux_sys_t *sys = demux->p_sys;

    int fd = vlc_memfd();
    if (fd == -1)
    {
        msg_Err(demux, "buffer creation error: %s", vlc_strerror_c(errno));
        return NULL;
    }

    /* NOTE: one extra line for overflow if screen-left > 0 */
    uint32_t pitch = 4u * sys->width;
    size_t size = (pitch * (sys->height + 1) + sys->pagemask) & ~sys->pagemask;
    block_t *block = NULL;

    if (ftruncate(fd, size) < 0)
    {
        msg_Err(demux, "buffer allocation error: %s", vlc_strerror_c(errno));
        goto out;
    }

    struct wl_shm_pool *pool = wl_shm_create_pool(sys->shm, fd, size);
    if (pool == NULL)
        goto out;

    struct wl_buffer *buffer;
    buffer = wl_shm_pool_create_buffer(pool, 0, sys->width, sys->height,
                                       pitch, WL_SHM_FORMAT_XRGB8888);
    wl_shm_pool_destroy(pool);
    if (buffer == NULL)
        goto out;

    sys->done = false;
    screenshooter_shoot(sys->screenshooter, sys->output, buffer);

    while (!sys->done)
        wl_display_roundtrip(sys->display);

    wl_buffer_destroy(buffer);
    block = block_File(fd, true);

    if (block != NULL)
    {
        size_t skip = (sys->y * sys->width + sys->x) * 4;

        block->p_buffer += skip;
        block->i_buffer -= skip;
    }

out:
    vlc_close(fd);
    return block;
}
Пример #17
0
void WaylandNativeWindow::destroyBuffer(WaylandNativeWindowBuffer* wnb)
{
    TRACE("wnb:%p", wnb);

    assert(wnb != NULL);
    if (wnb->wlbuffer)
        wl_buffer_destroy(wnb->wlbuffer);
    wnb->wlbuffer = NULL;
    wnb->common.decRef(&wnb->common);
    m_freeBufs--;
}
Пример #18
0
void shm_buffer_destroy(shm_buffer_t *buffer)
{
    if (!buffer)
        return;

    wl_buffer_destroy(buffer->buffer);
    wl_shm_pool_destroy(buffer->shm_pool);
    munmap(buffer->data, buffer->pool_size);
    close(buffer->fd);
    free(buffer);
}
Пример #19
0
void wlf_DestroyWindow(wlfContext* wlfc, wlfWindow* window)
{
	if (window == NULL)
		return;

	if (wlfc->window == window)
		wlfc->window = NULL;

	if (window->buffers[0].buffer)
		wl_buffer_destroy(window->buffers[0].buffer);
	if (window->buffers[1].buffer)
		wl_buffer_destroy(window->buffers[1].buffer);
	if (window->shell_surface)
		wl_shell_surface_destroy(window->shell_surface);
	if (window->surface)
		wl_surface_destroy(window->surface);

	free(window->data);
	free(window);
}
Пример #20
0
static void
wayland_free_buffer (ClutterStageWaylandWaylandBuffer *buffer)
{
  cogl_handle_unref (buffer->tex);
  wl_buffer_destroy (buffer->wayland_buffer);
  cogl_handle_unref (buffer->offscreen);

  if (buffer->type == BUFFER_TYPE_DRM)
    wayland_free_drm_buffer(buffer);
  else if (buffer->type == BUFFER_TYPE_SHM)
    wayland_free_shm_buffer(buffer);
}
Пример #21
0
static void
notify_surface_destroy(struct wl_compositor *compositor,
                       struct wl_surface *surface)
{
    struct wl_buffer *b;

    b = wl_surface_get_data(surface);
    if (b == NULL)
        return;

    wl_buffer_destroy (b);
}
Пример #22
0
static void
drm_surface_data_destroy(void *p)
{
	struct drm_surface_data *data = p;
	struct display *d = data->display;

	cairo_device_acquire(d->device);
	glDeleteTextures(1, &data->texture);
	cairo_device_release(d->device);

	eglDestroyImageKHR(d->dpy, data->image);
	wl_buffer_destroy(data->data.buffer);
}
Пример #23
0
static void
ss_shm_buffer_destroy(struct ss_shm_buffer *buffer)
{
	pixman_image_unref(buffer->pm_image);

	wl_buffer_destroy(buffer->buffer);
	munmap(buffer->data, buffer->size);

	pixman_region32_fini(&buffer->damage);

	wl_list_remove(&buffer->link);
	wl_list_remove(&buffer->free_link);
	free(buffer);
}
Пример #24
0
void Buffer::Destroy() {
  if (nullptr != p_->wl_buffer) {
    p_->data = nullptr;
    p_->offset = 0;
    p_->format = 0;
    p_->stride = 0;
    p_->size.width = 0;
    p_->size.height = 0;
    wl_buffer_destroy(p_->wl_buffer);
    p_->wl_buffer = nullptr;

    destroyed_.Emit();
  }
}
Пример #25
0
static void
wayland_surface_destroy(struct native_surface *nsurf)
{
   struct wayland_surface *surface = wayland_surface(nsurf);
   enum wayland_buffer_type buffer;

   for (buffer = 0; buffer < WL_BUFFER_COUNT; ++buffer) {
      if (surface->buffer[buffer])
         wl_buffer_destroy(surface->buffer[buffer]);
   }

   resource_surface_destroy(surface->rsurf);
   FREE(surface);
}
Пример #26
0
static void
_eventd_nd_wl_buffer_release(gpointer data, struct wl_buffer *buf)
{
    EventdNdWlBuffer *self = data;

    if ( self->released )
    {
        wl_buffer_destroy(self->buffer);
        munmap(self->data, self->size);
        g_free(self);
    }
    else
        self->released = TRUE;
}
Пример #27
0
static void
wayland_shm_buffer_destroy(struct wayland_shm_buffer *buffer)
{
	cairo_surface_destroy(buffer->c_surface);
	pixman_image_unref(buffer->pm_image);

	wl_buffer_destroy(buffer->buffer);
	munmap(buffer->data, buffer->size);

	pixman_region32_fini(&buffer->damage);

	wl_list_remove(&buffer->link);
	wl_list_remove(&buffer->free_link);
	free(buffer);
}
Пример #28
0
static void 
_evas_swapper_buffer_free(Wl_Buffer *wb)
{
   LOGFN(__FILE__, __LINE__, __FUNCTION__);

   /* check for valid buffer */
   if ((!wb) || (wb->valid)) return;

   /* kill the wl_buffer */
   if (wb->buffer) wl_buffer_destroy(wb->buffer);
   wb->buffer = NULL;

   /* unmap the buffer data */
   /* if (wb->data) munmap(wb->data, wb->size); */
   wb->data = NULL;
}
Пример #29
0
static void
wayland_pixmap_destroy(struct wl_egl_pixmap *egl_pixmap)
{
   struct pipe_resource *resource = egl_pixmap->driver_private;

   assert(resource);

   pipe_resource_reference(&resource, NULL);
   if (egl_pixmap->buffer) {
      wl_buffer_destroy(egl_pixmap->buffer);
      egl_pixmap->buffer = NULL;
   }

   egl_pixmap->driver_private = NULL;
   egl_pixmap->destroy = NULL;
}
Пример #30
-1
QWaylandShmBuffer::~QWaylandShmBuffer(void)
{
    delete mMarginsImage;
    munmap((void *) mImage.constBits(), mImage.byteCount());
    wl_buffer_destroy(mBuffer);
    wl_shm_pool_destroy(mShmPool);
}