struct pipe_sampler_view *matrix,
struct pipe_sampler_view *transpose)
{
- assert(idct && pipe && matrix);
+ assert(idct && pipe);
+ assert(matrix && transpose);
idct->pipe = pipe;
idct->buffer_width = buffer_width;
cleanup_state(idct);
pipe_sampler_view_reference(&idct->matrix, NULL);
+ pipe_sampler_view_reference(&idct->transpose, NULL);
}
bool
struct pipe_sampler_view *source,
struct pipe_sampler_view *intermediate)
{
- assert(buffer);
- assert(idct);
- assert(source);
+ assert(buffer && idct);
+ assert(source && intermediate);
memset(buffer, 0, sizeof(struct vl_idct_buffer));
cleanup_source(idct, buffer);
cleanup_intermediate(idct, buffer);
+
+ pipe_sampler_view_reference(&buffer->sampler_views.individual.matrix, NULL);
+ pipe_sampler_view_reference(&buffer->sampler_views.individual.transpose, NULL);
}
void
pipe_resource_reference(&dec->quads.buffer, NULL);
pipe_resource_reference(&dec->pos.buffer, NULL);
+ pipe_resource_reference(&dec->block_num.buffer, NULL);
pipe_sampler_view_reference(&dec->zscan_linear, NULL);
pipe_sampler_view_reference(&dec->zscan_normal, NULL);
pipe_sampler_view_reference(&buf->sampler_view_components[i], NULL);
pipe_resource_reference(&buf->resources[i], NULL);
}
+
+ FREE(buffer);
}
static struct pipe_sampler_view **
vlVdpDevice *dev = vlGetDataHTAB(device);
if (!dev)
return VDP_STATUS_INVALID_HANDLE;
+
+ vl_video_destroy(dev->context);
+ vl_screen_destroy(dev->vscreen);
FREE(dev);
vlDestroyHTAB();
vlsurface->sampler_view = pipe->create_sampler_view(pipe, res, &sv_templ);
if (!vlsurface->sampler_view) {
+ pipe_resource_reference(&res, NULL);
FREE(dev);
return VDP_STATUS_ERROR;
}
surf_templ.usage = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET;
vlsurface->surface = pipe->create_surface(pipe, res, &surf_templ);
if (!vlsurface->surface) {
+ pipe_resource_reference(&res, NULL);
FREE(dev);
return VDP_STATUS_ERROR;
}
*surface = vlAddDataHTAB(vlsurface);
if (*surface == 0) {
+ pipe_resource_reference(&res, NULL);
FREE(dev);
return VDP_STATUS_ERROR;
}
+
+ pipe_resource_reference(&res, NULL);
return VDP_STATUS_OK;
}
if (system(cmd) != 0)
VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Dumping surface %d failed.\n", surface);
}
+
+ pipe_surface_reference(&drawable_surface, NULL);
return VDP_STATUS_OK;
}
context_priv->dst_rect.x != dst_rect.x || context_priv->dst_rect.y != dst_rect.y ||
context_priv->dst_rect.w != dst_rect.w || context_priv->dst_rect.h != dst_rect.h) {
+ pipe_surface_reference(&context_priv->drawable_surface, NULL);
context_priv->drawable_surface = vl_drawable_surface_get(context_priv->vctx, drawable);
context_priv->dst_rect = dst_rect;
vl_compositor_reset_dirty_area(compositor);
return XvMCBadSurface;
surface_priv = surface->privData;
+
+ if (surface_priv->mapped)
+ surface_priv->decode_buffer->end_frame(surface_priv->decode_buffer);
surface_priv->decode_buffer->destroy(surface_priv->decode_buffer);
surface_priv->video_buffer->destroy(surface_priv->video_buffer);
FREE(surface_priv);