Added TI patches, generated from commit 04f9d72 of the following tree:
[ubuntu-omap:gst-plugins-bad1-0.git] / debian / patches / 0056-drm-Rework-the-DRMMeta-API.patch
1 From 58bce58f34bba45a5331f4eec52a66a18d530348 Mon Sep 17 00:00:00 2001
2 From: Thibault Saunier <thibault.saunier@collabora.com>
3 Date: Wed, 14 Nov 2012 13:17:01 -0300
4 Subject: [PATCH 056/100] drm: Rework the DRMMeta API
5
6 ---
7  gst-libs/sys/drm/gstdrmbufferpool.c |   20 ++++++---------
8  gst-libs/sys/drm/gstdrmbufferpool.h |    1 -
9  gst-libs/sys/drm/gstdrmmeta.c       |   47 ++++++++++++-----------------------
10  gst-libs/sys/drm/gstdrmmeta.h       |   13 +++++-----
11  sys/dri2/gstdri2bufferpool.c        |    5 ++--
12  5 files changed, 32 insertions(+), 54 deletions(-)
13
14 diff --git a/gst-libs/sys/drm/gstdrmbufferpool.c b/gst-libs/sys/drm/gstdrmbufferpool.c
15 index 7b761b4..df1bd30 100755
16 --- a/gst-libs/sys/drm/gstdrmbufferpool.c
17 +++ b/gst-libs/sys/drm/gstdrmbufferpool.c
18 @@ -45,24 +45,22 @@ GST_DEBUG_CATEGORY (drmbufferpool_debug);
19  G_DEFINE_TYPE (GstDRMBufferPool, gst_drm_buffer_pool, GST_TYPE_BUFFER_POOL);
20  
21  void
22 -gst_drm_buffer_pool_initialize (GstDRMBufferPool * pool,
23 -    GstElement * elem, int fd)
24 +gst_drm_buffer_pool_initialize (GstDRMBufferPool * self, int fd)
25  {
26 -  pool->element = gst_object_ref (elem);
27 -  pool->fd = fd;
28 -  pool->dev = omap_device_new (fd);
29 -  pool->caps = NULL;
30 +  self->fd = fd;
31 +  self->dev = omap_device_new (fd);
32  
33 +  self->caps = NULL;
34  }
35  
36  GstBufferPool *
37 -gst_drm_buffer_pool_new (GstElement * element, int fd)
38 +gst_drm_buffer_pool_new (int fd)
39  {
40    GstDRMBufferPool *pool;
41  
42    pool = g_object_new (GST_TYPE_DRM_BUFFER_POOL, NULL);
43  
44 -  gst_drm_buffer_pool_initialize (pool, element, fd);
45 +  gst_drm_buffer_pool_initialize (pool, fd);
46  
47    GST_DEBUG_OBJECT (element, "Created DRM buffer pool");
48  
49 @@ -81,8 +79,7 @@ gst_drm_buffer_pool_alloc_buffer (GstBufferPool * pool, GstBuffer ** buffer,
50    *buffer = gst_buffer_new ();
51  
52    /* Add DRM Meta (i.e. allocation) */
53 -  GST_DEBUG_OBJECT (pool, "Adding drm meta");
54 -  meta = gst_buffer_add_drm_meta (*buffer, pool, NULL);
55 +  meta = gst_buffer_add_drm_meta (*buffer, pool->dev, NULL, &pool->info);
56    if (!meta) {
57      gst_buffer_unref (*buffer);
58      goto no_buffer;
59 @@ -222,11 +219,10 @@ gst_drm_buffer_pool_finalize (GObject * object)
60  {
61    GstDRMBufferPool *self = (GstDRMBufferPool *) object;
62  
63 -  GST_DEBUG_OBJECT (self->element, "finalize");
64 +  GST_DEBUG_OBJECT (self, "finalize");
65  
66    if (self->caps)
67      gst_caps_unref (self->caps);
68 -  gst_object_unref (self->element);
69  
70    omap_device_del (self->dev);
71  
72 diff --git a/gst-libs/sys/drm/gstdrmbufferpool.h b/gst-libs/sys/drm/gstdrmbufferpool.h
73 index 17a376c..83ed79d 100644
74 --- a/gst-libs/sys/drm/gstdrmbufferpool.h
75 +++ b/gst-libs/sys/drm/gstdrmbufferpool.h
76 @@ -97,7 +97,6 @@ GstBufferPool * gst_drm_buffer_pool_new          (GstElement * element,
77                                                    int fd);
78  
79  void gst_drm_buffer_pool_initialize              (GstDRMBufferPool *pool,
80 -                                                  GstElement *elem,
81                                                    int fd);
82  
83  GstFlowReturn gst_drm_buffer_pool_finnish_alloc   (GstBufferPool * pool,
84 diff --git a/gst-libs/sys/drm/gstdrmmeta.c b/gst-libs/sys/drm/gstdrmmeta.c
85 index 7267269..f895c1e 100755
86 --- a/gst-libs/sys/drm/gstdrmmeta.c
87 +++ b/gst-libs/sys/drm/gstdrmmeta.c
88 @@ -30,26 +30,19 @@
89  #endif
90  
91  #include "gstdrmmeta.h"
92 -#include "gstdrmbufferpool.h"
93  
94  GST_DEBUG_CATEGORY (drmmeta_debug);
95  #define GST_CAT_DEFAULT drmmeta_debug
96  
97  
98 -static void
99 -pool_finalized (GstDRMMeta *meta)
100 -{
101 -  meta->pool = NULL;
102 -}
103 -
104  GstDRMMeta *
105 -gst_buffer_add_drm_meta (GstBuffer * buffer, GstBufferPool * pool,
106 -    struct omap_bo *bo)
107 +gst_buffer_add_drm_meta (GstBuffer * buffer, struct omap_device dev,
108 +    struct omap_bo *bo, GstVideoInfo *info)
109  {
110    gpointer data;
111    GstDRMMeta *meta;
112 -  GstDRMBufferPool *drmpool = GST_DRM_BUFFER_POOL (pool);
113  
114 +  GST_DEBUG_OBJECT (pool, "Adding drm meta");
115    meta = (GstDRMMeta *) gst_buffer_add_meta (buffer, GST_DRM_META_INFO, NULL);
116  
117    if (!meta)
118 @@ -58,26 +51,25 @@ gst_buffer_add_drm_meta (GstBuffer * buffer, GstBufferPool * pool,
119    if (bo)
120      meta->bo = bo;
121    else
122 -    meta->bo = omap_bo_new (drmpool->dev, GST_VIDEO_INFO_SIZE (&drmpool->info),
123 +    meta->bo = omap_bo_new (dev, GST_VIDEO_INFO_SIZE (info),
124          OMAP_BO_WC);
125  
126    GST_DEBUG ("Using bo %p", meta->bo);
127  
128 -  meta->uv_offset = GST_VIDEO_INFO_PLANE_OFFSET (&drmpool->info, 1);
129 -  meta->size = GST_VIDEO_INFO_SIZE (&drmpool->info);
130 -
131 +  meta->info = info;
132    /* Add the memory */
133    if (!(data = omap_bo_map (meta->bo)))
134      goto map_bo_failed;
135  
136 -  /* We want to be notified when the pool is destroyed but we can not keep
137 -   * a ref to the pool has it would result in a loop ref */
138 -  g_object_weak_ref (G_OBJECT (pool), (GWeakNotify) pool_finalized, meta);
139 -  meta->pool = pool;
140 +  if (dev)
141 +    meta->dev = omap_device_ref (dev);
142 +  else
143 +    meta->dev = NULL;
144 +
145    gst_buffer_append_memory (buffer,
146        gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
147 -          GST_VIDEO_INFO_SIZE (&drmpool->info), 0,
148 -          GST_VIDEO_INFO_SIZE (&drmpool->info), NULL, NULL));
149 +          GST_VIDEO_INFO_SIZE (info), 0, GST_VIDEO_INFO_SIZE (info),
150 +          NULL, NULL));
151  
152    return meta;
153  
154 @@ -87,7 +79,7 @@ add_meta_failed:
155  
156  map_bo_failed:
157    GST_WARNING ("Could not map BO buffer of size %i",
158 -      GST_VIDEO_INFO_SIZE (&drmpool->info));
159 +      GST_VIDEO_INFO_SIZE (info));
160    gst_buffer_remove_meta (buffer, (GstMeta *) meta);
161    return NULL;
162  }
163 @@ -99,16 +91,9 @@ gst_drm_meta_transform (GstBuffer * dest, GstMeta * meta,
164    if (GST_META_TRANSFORM_IS_COPY (type)) {
165      GstDRMMeta *drmmeta = (GstDRMMeta*) meta;
166  
167 -    if (drmmeta->pool == NULL) {
168 -      GST_DEBUG ("The pool has been destroyed in the mean time, can not copy"
169 -          "meta");
170 -
171 -      return FALSE;
172 -    }
173 -
174      GST_DEBUG ("Copying DRM meta %p from %p to %p", meta, buffer, dest);
175  
176 -    gst_buffer_add_drm_meta (dest, drmmeta->pool, drmmeta->bo);
177 +    gst_buffer_add_drm_meta (dest, drmmeta->dev, drmmeta->bo, &drmmeta->info);
178    }
179  
180    return TRUE;
181 @@ -120,8 +105,8 @@ gst_drm_meta_free (GstMeta * meta, GstBuffer * buffer)
182    GstDRMMeta *self = (GstDRMMeta *) meta;
183  
184    omap_bo_del (self->bo);
185 -  if (self->pool)
186 -    gst_object_unref (self->pool);
187 +  if (self->dev)
188 +    self->dev = omap_device_ref (self->dev);
189  }
190  
191  GType
192 diff --git a/gst-libs/sys/drm/gstdrmmeta.h b/gst-libs/sys/drm/gstdrmmeta.h
193 index 9994039..0ea76ef 100755
194 --- a/gst-libs/sys/drm/gstdrmmeta.h
195 +++ b/gst-libs/sys/drm/gstdrmmeta.h
196 @@ -42,16 +42,15 @@ G_BEGIN_DECLS
197  typedef struct _GstDRMMeta GstDRMMeta;
198  
199  struct _GstDRMMeta {
200 -  GstMeta         parent;
201 +  GstMeta             parent;
202  
203 -  /* FIXME : Do we really want to call this DRMMeta and not OMAPDRMMeta ? */
204 -  struct omap_bo *bo;
205 +  GstVideoInfo        info;
206 +  /* FIXME In the long run we want it no to be platform specific */
207 +  struct omap_device *dev;
208 +  struct omap_bo     *bo;
209  
210 -  guint           uv_offset;
211 -  gsize           size;
212 -  GstBufferPool   *pool;
213  
214 -  void           *padding[GST_PADDING];
215 +  void               *padding[GST_PADDING];
216  };
217  
218  
219 diff --git a/sys/dri2/gstdri2bufferpool.c b/sys/dri2/gstdri2bufferpool.c
220 index 32e8fff..bf123c5 100755
221 --- a/sys/dri2/gstdri2bufferpool.c
222 +++ b/sys/dri2/gstdri2bufferpool.c
223 @@ -45,8 +45,7 @@ gst_dri2_buffer_pool_new (GstDRI2Window * xwindow, int fd)
224    GstDRI2BufferPool *self = (GstDRI2BufferPool *)
225        g_object_new (GST_TYPE_DRI2_BUFFER_POOL, NULL);
226  
227 -  gst_drm_buffer_pool_initialize (GST_DRM_BUFFER_POOL (self),
228 -      xwindow->dcontext->elem, fd);
229 +  gst_drm_buffer_pool_initialize (GST_DRM_BUFFER_POOL (self), fd);
230  
231    self->xwindow =
232        (GstDRI2Window *) gst_mini_object_ref (GST_MINI_OBJECT (xwindow));
233 @@ -88,7 +87,7 @@ gst_dri2_pool_alloc_buffer (GstBufferPool * pool, GstBuffer ** buffer,
234  
235    bo = omap_bo_from_name (GST_DRM_BUFFER_POOL (pool)->dev,
236        dri2meta->gstdri2buf->dri2buf->names[0]);
237 -  gst_buffer_add_drm_meta (*buffer, pool, bo);
238 +  gst_buffer_add_drm_meta (*buffer, pool->dev, bo, info);
239  
240    return gst_drm_buffer_pool_finnish_alloc (pool, buffer, params);
241  }
242 -- 
243 1.7.9.5
244