static void
destroy_heap(
    const char         *name,
    object_heap_p       heap,
    destroy_heap_func_t destroy_func,
    void               *user_data
)
{
    object_base_p obj;
    object_heap_iterator iter;

    if (!heap)
        return;

    obj = object_heap_first(heap, &iter);
    while (obj) {
        xvba_information_message("vaTerminate(): %s ID 0x%08x is still allocated, destroying\n", name, obj->id);
        if (destroy_func)
            destroy_func(obj, user_data);
        else
            object_heap_free(heap, obj);
        obj = object_heap_next(heap, &iter);
    }
    object_heap_destroy(heap);
}
Ejemplo n.º 2
0
VOID
media_destroy_buffer (struct object_heap *heap, struct object_base *obj)
{
  struct object_buffer *obj_buffer = (struct object_buffer *) obj;
  MEDIA_DRV_ASSERT (obj_buffer->buffer_store);
  media_release_buffer_store (&obj_buffer->buffer_store);
  object_heap_free (heap, obj);
}
Ejemplo n.º 3
0
// Destroy VA buffer object
void
destroy_va_buffer(
    vdpau_driver_data_t *driver_data,
    object_buffer_p      obj_buffer
)
{
    if (!obj_buffer)
        return;

    if (obj_buffer->buffer_data) {
        free(obj_buffer->buffer_data);
        obj_buffer->buffer_data = NULL;
    }
    object_heap_free(&driver_data->buffer_heap, (object_base_p)obj_buffer);
}
Ejemplo n.º 4
0
VOID
media_destroy_surface (struct object_heap * heap, struct object_base * obj)
{
  struct object_surface *obj_surface = (struct object_surface *) obj;
  dri_bo_unreference (obj_surface->bo);
  obj_surface->bo = NULL;

  if (obj_surface->free_private_data != NULL)
    {
      obj_surface->free_private_data (&obj_surface->private_data);
      if(obj_surface->private_data!=NULL)
      {
        media_drv_free_memory(obj_surface->private_data);
      }
      obj_surface->private_data = NULL;
    }
  object_heap_free (heap, obj);
}
VAStatus rockchip_DestroyImage(
    VADriverContextP ctx,
    VAImageID image_id
)
{
    INIT_DRIVER_DATA
    object_image_p obj_image = IMAGE(image_id);
    if (!obj_image)
        return VA_STATUS_ERROR_INVALID_IMAGE;

    ASSERT(obj_image->ref_cnt);

    --obj_image->ref_cnt;

    if (obj_image->ref_cnt)
        return VA_STATUS_SUCCESS;

    VABufferID buf = obj_image->image.buf;
    object_heap_free(&driver_data->image_heap, (object_base_p)obj_image);
    return rockchip_DestroyBuffer(ctx, buf);
}
Ejemplo n.º 6
0
void
media_destroy_subpic(struct object_heap *heap, struct object_base *obj)
{
  object_heap_free(heap, obj);
}
Ejemplo n.º 7
0
VOID
media_destroy_config (struct object_heap *heap, struct object_base *obj)
{
  object_heap_free (heap, obj);
}
Ejemplo n.º 8
0
VOID
media_destroy_context (struct object_heap *heap, struct object_base *obj)
{
  struct object_context *obj_context = (struct object_context *) obj;
  INT i;

  if (obj_context->hw_context)
    {
      obj_context->hw_context->destroy (obj_context->hw_context);
      obj_context->hw_context = NULL;
    }

  if (obj_context->codec_type == CODEC_ENC)
    {
      MEDIA_DRV_ASSERT (obj_context->codec_state.encode.num_slice_params <=
			obj_context->codec_state.encode.max_slice_params);
      media_release_buffer_store (&obj_context->codec_state.encode.pic_param);
      media_release_buffer_store (&obj_context->codec_state.encode.seq_param);
      media_release_buffer_store (&obj_context->codec_state.encode.q_matrix);
      for (i = 0; i < obj_context->codec_state.encode.num_slice_params; i++)
	media_release_buffer_store (&obj_context->codec_state.encode.
				    slice_params[i]);

      media_drv_free_memory (obj_context->codec_state.encode.slice_params);

      MEDIA_DRV_ASSERT (obj_context->codec_state.encode.
			num_slice_params_ext <=
			obj_context->codec_state.encode.max_slice_params_ext);
      media_release_buffer_store (&obj_context->codec_state.encode.
				  pic_param_ext);
      media_release_buffer_store (&obj_context->codec_state.encode.
				  seq_param_ext);
      media_release_buffer_store (&obj_context->codec_state.
				  encode.frame_update_param);

      for (i = 0;
	   i <
	   ARRAY_ELEMS (obj_context->codec_state.encode.packed_header_param);
	   i++)
	media_release_buffer_store (&obj_context->codec_state.encode.
				    packed_header_param[i]);

      for (i = 0;
	   i <
	   ARRAY_ELEMS (obj_context->codec_state.encode.packed_header_data);
	   i++)
	media_release_buffer_store (&obj_context->codec_state.encode.
				    packed_header_data[i]);

      for (i = 0;
	   i < ARRAY_ELEMS (obj_context->codec_state.encode.misc_param); i++)
	media_release_buffer_store (&obj_context->codec_state.encode.
				    misc_param[i]);

      for (i = 0; i < obj_context->codec_state.encode.num_slice_params_ext;
	   i++)
	media_release_buffer_store (&obj_context->codec_state.encode.
				    slice_params_ext[i]);

      media_drv_free_memory (obj_context->codec_state.encode.
			     slice_params_ext);
    }
    else if (obj_context->codec_type == CODEC_DEC)
    {
      media_release_buffer_store(&obj_context->codec_state.decode.pic_param);
      media_release_buffer_store(&obj_context->codec_state.decode.iq_matrix);
      media_release_buffer_store(&obj_context->codec_state.decode.bit_plane);
      media_release_buffer_store(&obj_context->codec_state.decode.huffman_table);

      for (i = 0; i < obj_context->codec_state.decode.num_slice_params; i++) {
        media_release_buffer_store(&obj_context->codec_state.decode.slice_params[i]);
        media_release_buffer_store(&obj_context->codec_state.decode.slice_datas[i]);
      }

      media_drv_free_memory (obj_context->codec_state.decode.slice_params);
      media_drv_free_memory (obj_context->codec_state.decode.slice_datas);
    }

  media_drv_free_memory (obj_context->render_targets);
  object_heap_free (heap, obj);
}