Added TI patches, generated from commit 04f9d72 of the following tree:
[ubuntu-omap:gst-plugins-bad1-0.git] / debian / patches / 0049-drm-meta-Implement-copying.patch
1 From 94529933077502652ea6985618a5e65f3a50fa5c Mon Sep 17 00:00:00 2001
2 From: Thibault Saunier <thibault.saunier@collabora.com>
3 Date: Tue, 13 Nov 2012 17:00:24 -0300
4 Subject: [PATCH 049/100] drm: meta: Implement copying
5
6 ---
7  gst-libs/sys/drm/gstdrmmeta.c |   37 ++++++++++++++++++++++++++++++++++++-
8  gst-libs/sys/drm/gstdrmmeta.h |    1 +
9  2 files changed, 37 insertions(+), 1 deletion(-)
10
11 diff --git a/gst-libs/sys/drm/gstdrmmeta.c b/gst-libs/sys/drm/gstdrmmeta.c
12 index b17db94..7267269 100755
13 --- a/gst-libs/sys/drm/gstdrmmeta.c
14 +++ b/gst-libs/sys/drm/gstdrmmeta.c
15 @@ -35,6 +35,13 @@
16  GST_DEBUG_CATEGORY (drmmeta_debug);
17  #define GST_CAT_DEFAULT drmmeta_debug
18  
19 +
20 +static void
21 +pool_finalized (GstDRMMeta *meta)
22 +{
23 +  meta->pool = NULL;
24 +}
25 +
26  GstDRMMeta *
27  gst_buffer_add_drm_meta (GstBuffer * buffer, GstBufferPool * pool,
28      struct omap_bo *bo)
29 @@ -63,6 +70,10 @@ gst_buffer_add_drm_meta (GstBuffer * buffer, GstBufferPool * pool,
30    if (!(data = omap_bo_map (meta->bo)))
31      goto map_bo_failed;
32  
33 +  /* We want to be notified when the pool is destroyed but we can not keep
34 +   * a ref to the pool has it would result in a loop ref */
35 +  g_object_weak_ref (G_OBJECT (pool), (GWeakNotify) pool_finalized, meta);
36 +  meta->pool = pool;
37    gst_buffer_append_memory (buffer,
38        gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
39            GST_VIDEO_INFO_SIZE (&drmpool->info), 0,
40 @@ -81,12 +92,36 @@ map_bo_failed:
41    return NULL;
42  }
43  
44 +static gboolean
45 +gst_drm_meta_transform (GstBuffer * dest, GstMeta * meta,
46 +    GstBuffer * buffer, GQuark type, gpointer data)
47 +{
48 +  if (GST_META_TRANSFORM_IS_COPY (type)) {
49 +    GstDRMMeta *drmmeta = (GstDRMMeta*) meta;
50 +
51 +    if (drmmeta->pool == NULL) {
52 +      GST_DEBUG ("The pool has been destroyed in the mean time, can not copy"
53 +          "meta");
54 +
55 +      return FALSE;
56 +    }
57 +
58 +    GST_DEBUG ("Copying DRM meta %p from %p to %p", meta, buffer, dest);
59 +
60 +    gst_buffer_add_drm_meta (dest, drmmeta->pool, drmmeta->bo);
61 +  }
62 +
63 +  return TRUE;
64 +}
65 +
66  static void
67  gst_drm_meta_free (GstMeta * meta, GstBuffer * buffer)
68  {
69    GstDRMMeta *self = (GstDRMMeta *) meta;
70  
71    omap_bo_del (self->bo);
72 +  if (self->pool)
73 +    gst_object_unref (self->pool);
74  }
75  
76  GType
77 @@ -110,7 +145,7 @@ gst_drm_meta_get_info (void)
78    static const GstMetaInfo *drm_meta_info = NULL;
79    if (drm_meta_info == NULL) {
80      drm_meta_info = gst_meta_register (GST_DRM_META_API_TYPE, "GstDRMMeta", sizeof (GstDRMMeta), NULL,  /* No init needed */
81 -        gst_drm_meta_free, NULL /* No transform needed */ );
82 +        gst_drm_meta_free, gst_drm_meta_transform);
83    }
84    return drm_meta_info;
85  }
86 diff --git a/gst-libs/sys/drm/gstdrmmeta.h b/gst-libs/sys/drm/gstdrmmeta.h
87 index 5fd93c4..9994039 100755
88 --- a/gst-libs/sys/drm/gstdrmmeta.h
89 +++ b/gst-libs/sys/drm/gstdrmmeta.h
90 @@ -49,6 +49,7 @@ struct _GstDRMMeta {
91  
92    guint           uv_offset;
93    gsize           size;
94 +  GstBufferPool   *pool;
95  
96    void           *padding[GST_PADDING];
97  };
98 -- 
99 1.7.9.5
100