Gentoo Archives: gentoo-commits

From: "Raúl Porcel" <armin76@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/pandaboard:master commit in: media-libs/gstreamer/, media-libs/gstreamer/files/
Date: Mon, 04 Apr 2011 17:48:28
Message-Id: 835f6d87949bac726991380030be54eb84bad2f8.armin76@gentoo
1 commit: 835f6d87949bac726991380030be54eb84bad2f8
2 Author: Daniel Diaz <ddiaz <AT> ti <DOT> com>
3 AuthorDate: Fri Jan 14 23:51:49 2011 +0000
4 Commit: Raúl Porcel <armin76 <AT> gentoo <DOT> org>
5 CommitDate: Tue Feb 22 23:12:15 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/pandaboard.git;a=commit;h=835f6d87
7
8 Add ebuild for gstreamer.
9
10 This includes TI patches required for GstOpenMAX and V4L2.
11
12 Signed-off-by: Daniel Diaz <ddiaz <AT> ti.com>
13
14 ---
15 media-libs/gstreamer/Manifest | 7 +
16 ...0.10.32-0001-gst-launch-add-loop-argument.patch | 54 ++++
17 ...to-make-it-possible-to-LD_PRELOAD-libttif.patch | 262 ++++++++++++++++++++
18 ...st-0.10.32-0003-add-GstQueryBuffers-query.patch | 258 +++++++++++++++++++
19 .../gst-0.10.32-0004-Add-GstEventCrop-event.patch | 161 ++++++++++++
20 ...etransform-don-t-do-unnecessary-pad_alloc.patch | 52 ++++
21 .../gstreamer/gstreamer-0.10.32_p20110127.ebuild | 68 +++++
22 7 files changed, 862 insertions(+), 0 deletions(-)
23
24 diff --git a/media-libs/gstreamer/Manifest b/media-libs/gstreamer/Manifest
25 new file mode 100644
26 index 0000000..82ecc0c
27 --- /dev/null
28 +++ b/media-libs/gstreamer/Manifest
29 @@ -0,0 +1,7 @@
30 +AUX gst-0.10.32-0001-gst-launch-add-loop-argument.patch 2042 RMD160 13e1dbf1e7b19d2a065ad2e2e60aa35214461c02 SHA1 178ebe1b011a8bf216b9a1ea42e9f3492d6020fa SHA256 2904a8fa9c847d5608328b52ef9d76e90d9fb88161a3fd5ac07a67c7df1b6dbb
31 +AUX gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch 10451 RMD160 97c13f0ebf4b62615e053f37484797a3cc53df66 SHA1 235c410bc00f247ad2f6f250d5f042dcae891c49 SHA256 a6dcd34798f6b327f2681cb37ac1ef105e260f365bf50791197b43a55fa00b00
32 +AUX gst-0.10.32-0003-add-GstQueryBuffers-query.patch 8548 RMD160 534925365ec7d7ddcffcf72d1f5de13697b1e608 SHA1 11a7aa6257d0d301636957e5e3f946db21201fa5 SHA256 1a8daee3c8f53a7aa566384d1e327120e05aed095c15e9b34a4f9f29a971779f
33 +AUX gst-0.10.32-0004-Add-GstEventCrop-event.patch 6061 RMD160 99498d853d4bed0cd3dffe4baa25feed743fce7e SHA1 3096b37936659c522e3f8e16d310092d7cadf666 SHA256 f6b568bb9e903d3135f88a0442be89e5376f8475e633fe7d9cb7cda7482da5a3
34 +AUX gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch 2278 RMD160 726964b4a12f6b1fe928796e977f59019224e354 SHA1 d7d5239ecb93d353edbb67bd5aa050c91ff084b3 SHA256 e7fc825d541621980f46b3a58bc5d208c2e2facd60bdc70c0c45207c1e88cf7c
35 +DIST gstreamer-0.10.32.tar.bz2 3529980 RMD160 447fa2b8b4c622a628763805cb65006d54919e54 SHA1 95477044ed23cf94669e56ea43607de05c2a0cb3 SHA256 3bf4e46a186ee9a1f5e212aaf651d67cffb4f5f05345a7c99ae71d5d992be133
36 +EBUILD gstreamer-0.10.32_p20110127.ebuild 2181 RMD160 66581f42aabf63a23753081fdf29f6111406673f SHA1 1c2f9201a7883c127d3c10e3ce0a5b05db23927b SHA256 1c64a6fd9859e1347caa039eab89034808981646477dc68eec08b1801206bb38
37
38 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch b/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch
39 new file mode 100644
40 index 0000000..bc592ed
41 --- /dev/null
42 +++ b/media-libs/gstreamer/files/gst-0.10.32-0001-gst-launch-add-loop-argument.patch
43 @@ -0,0 +1,54 @@
44 +From 23dbd4ce2e492152a4d21b8043f353d224dfe355 Mon Sep 17 00:00:00 2001
45 +From: Rob Clark <rob@××.com>
46 +Date: Sat, 13 Feb 2010 15:29:13 -0600
47 +Subject: [PATCH 1/5] gst-launch: add --loop argument
48 +
49 +if --loop is specified, automatically seek to beginning of clip when EOS is received
50 +---
51 + tools/gst-launch.c | 16 +++++++++++++++-
52 + 1 files changed, 15 insertions(+), 1 deletions(-)
53 +
54 +diff --git a/tools/gst-launch.c b/tools/gst-launch.c
55 +index 10b7fae..d5b17f8 100644
56 +--- a/tools/gst-launch.c
57 ++++ b/tools/gst-launch.c
58 +@@ -716,6 +716,7 @@ main (int argc, char *argv[])
59 + gboolean no_sigusr_handler = FALSE;
60 + gboolean trace = FALSE;
61 + gboolean eos_on_shutdown = FALSE;
62 ++ gboolean loop = FALSE;
63 + gchar *savefile = NULL;
64 + gchar *exclude_args = NULL;
65 + #ifndef GST_DISABLE_OPTION_PARSING
66 +@@ -742,6 +743,8 @@ main (int argc, char *argv[])
67 + N_("Print alloc trace (if enabled at compile time)"), NULL},
68 + {"eos-on-shutdown", 'e', 0, G_OPTION_ARG_NONE, &eos_on_shutdown,
69 + N_("Force EOS on sources before shutting the pipeline down"), NULL},
70 ++ {"loop", 'l', 0, G_OPTION_ARG_NONE, &loop,
71 ++ N_("Repeat clip in loop without rebuilding pipeline"), NULL},
72 + GST_TOOLS_GOPTION_VERSION,
73 + {NULL}
74 + };
75 +@@ -926,7 +929,18 @@ main (int argc, char *argv[])
76 + }
77 +
78 + tfthen = gst_util_get_timestamp ();
79 +- caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING);
80 ++ do {
81 ++ caught_error = event_loop (pipeline, TRUE, GST_STATE_PLAYING);
82 ++ if (loop && (caught_error == ELR_NO_ERROR)) {
83 ++ PRINT (_("Looping ...\n"));
84 ++ gst_element_seek (pipeline, 1.0,
85 ++ GST_FORMAT_TIME,
86 ++ GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
87 ++ GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
88 ++ } else {
89 ++ break;
90 ++ }
91 ++ } while (TRUE);
92 + if (eos_on_shutdown && caught_error == ELR_INTERRUPT) {
93 + PRINT (_("EOS on shutdown enabled -- Forcing EOS on the pipeline\n"));
94 + waiting_eos = TRUE;
95 +--
96 +1.7.1
97 +
98
99 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch b/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch
100 new file mode 100644
101 index 0000000..724bd58
102 --- /dev/null
103 +++ b/media-libs/gstreamer/files/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch
104 @@ -0,0 +1,262 @@
105 +From ac55210758bdd06fe0dec6ef67a60a96a86b39f4 Mon Sep 17 00:00:00 2001
106 +From: Rob Clark <rob@××.com>
107 +Date: Sun, 4 Apr 2010 09:14:34 -0500
108 +Subject: [PATCH 2/5] Changes to make it possible to LD_PRELOAD libttif
109 +
110 +1) if GST_USING_PRINTF_EXTENSION, then prepend the fmt string with "<%P> " and
111 +pass object as a normal arg. When using TTIF, you want the whole fmt string,
112 +including the object name prefix, to be constant. This way, only the fmt
113 +string pointer needs to be logged.
114 +2) GstDebugTraceLocation: small optimization to stash __FILE__, __LINE__, and
115 +GST_FUNCTION together and pass as a single ptr.. the optimization is probably
116 +lost in the noise with the default printf() based traces, but makes more of a
117 +difference with faster trace systems
118 +---
119 + gst/gstinfo.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++-----
120 + gst/gstinfo.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
121 + 2 files changed, 123 insertions(+), 11 deletions(-)
122 +
123 +diff --git a/gst/gstinfo.c b/gst/gstinfo.c
124 +index 3688120..dfa8650 100644
125 +--- a/gst/gstinfo.c
126 ++++ b/gst/gstinfo.c
127 +@@ -494,6 +494,31 @@ gst_path_basename (const gchar * file_name)
128 + #endif
129 +
130 + /**
131 ++ * gst_debug_log2:
132 ++ * @category: category to log
133 ++ * @level: level of the message is in
134 ++ * @location: the file, function name, and line number of the location that
135 ++ * emitted the message
136 ++ * @object: the object this message relates to or NULL if none
137 ++ * @format: a printf style format string
138 ++ * @...: optional arguments for the format
139 ++ *
140 ++ * Logs the given message using the currently registered debugging handlers.
141 ++ */
142 ++void
143 ++gst_debug_log2 (GstDebugCategory * category, GstDebugLevel level,
144 ++ const GstDebugTraceLocation * location,
145 ++ GObject * object, const gchar * format, ...)
146 ++{
147 ++ va_list var_args;
148 ++
149 ++ va_start (var_args, format);
150 ++ gst_debug_log_valist2 (category, level, location, object, format, var_args);
151 ++ va_end (var_args);
152 ++}
153 ++
154 ++
155 ++/**
156 + * gst_debug_log_valist:
157 + * @category: category to log
158 + * @level: level of the message is in
159 +@@ -512,13 +537,39 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level,
160 + const gchar * file, const gchar * function, gint line,
161 + GObject * object, const gchar * format, va_list args)
162 + {
163 ++ GstDebugTraceLocation location = {
164 ++ .file = file,
165 ++ .function = function,
166 ++ .line = line
167 ++ };
168 ++ gst_debug_log_valist2 (category, level, &location, object, format, args);
169 ++}
170 ++
171 ++/**
172 ++ * gst_debug_log_valist2:
173 ++ * @category: category to log
174 ++ * @level: level of the message is in
175 ++ * @location: the file, function name, and line number of the location that
176 ++ * emitted the message
177 ++ * @object: the object this message relates to or NULL if none
178 ++ * @format: a printf style format string
179 ++ * @args: optional arguments for the format
180 ++ *
181 ++ * Logs the given message using the currently registered debugging handlers.
182 ++ */
183 ++void
184 ++gst_debug_log_valist2 (GstDebugCategory * category, GstDebugLevel level,
185 ++ const GstDebugTraceLocation * location,
186 ++ GObject * object, const gchar * format, va_list args)
187 ++{
188 + GstDebugMessage message;
189 + LogFuncEntry *entry;
190 + GSList *handler;
191 +
192 + g_return_if_fail (category != NULL);
193 +- g_return_if_fail (file != NULL);
194 +- g_return_if_fail (function != NULL);
195 ++ g_return_if_fail (location != NULL);
196 ++ g_return_if_fail (location->file != NULL);
197 ++ g_return_if_fail (location->function != NULL);
198 + g_return_if_fail (format != NULL);
199 +
200 + /* The predefined macro __FILE__ is always the exact path given to the
201 +@@ -536,8 +587,9 @@ gst_debug_log_valist (GstDebugCategory * category, GstDebugLevel level,
202 + while (handler) {
203 + entry = handler->data;
204 + handler = g_slist_next (handler);
205 +- entry->func (category, level, file, function, line, object, &message,
206 +- entry->user_data);
207 ++ // TODO: change GstLogFunction and pass GstDebugTraceLocation ptr instead..
208 ++ entry->func (category, level, location->file, location->function,
209 ++ location->line, object, &message, entry->user_data);
210 + }
211 + g_free (message.message);
212 + va_end (message.arguments);
213 +@@ -610,7 +662,7 @@ gst_info_structure_to_string (GstStructure * s)
214 + return gst_structure_to_string (s);
215 + }
216 +
217 +-static gchar *
218 ++gchar *
219 + gst_debug_print_object (gpointer ptr)
220 + {
221 + GObject *object = (GObject *) ptr;
222 +@@ -708,7 +760,7 @@ gst_debug_print_object (gpointer ptr)
223 +
224 + #ifdef HAVE_PRINTF_EXTENSION
225 +
226 +-static gchar *
227 ++gchar *
228 + gst_debug_print_segment (gpointer ptr)
229 + {
230 + GstSegment *segment = (GstSegment *) ptr;
231 +diff --git a/gst/gstinfo.h b/gst/gstinfo.h
232 +index 7c2d86f..24ca706 100644
233 +--- a/gst/gstinfo.h
234 ++++ b/gst/gstinfo.h
235 +@@ -177,6 +177,8 @@ struct _GstDebugCategory {
236 +
237 + const gchar * name;
238 + const gchar * description;
239 ++
240 ++ void *ext; /**< for use by LD_PRELOADED trace extension */
241 + };
242 +
243 + /********** some convenience macros for debugging **********/
244 +@@ -260,6 +262,14 @@ typedef void (*GstLogFunction) (GstDebugCategory * category,
245 + /* FIXME 0.11: move this into private headers */
246 + void _gst_debug_init (void);
247 +
248 ++typedef struct {
249 ++ const gchar *file;
250 ++ const gchar *function;
251 ++ const gint line;
252 ++} GstDebugTraceLocation;
253 ++
254 ++#define GST_DEBUG_TRACE_LOCATION() \
255 ++ { __FILE__, GST_FUNCTION, __LINE__ }
256 +
257 + #ifdef GST_USING_PRINTF_EXTENSION
258 +
259 +@@ -273,6 +283,13 @@ void gst_debug_log (GstDebugCategory * category,
260 + const gchar * format,
261 + ...) G_GNUC_NO_INSTRUMENT;
262 +
263 ++void gst_debug_log2 (GstDebugCategory * category,
264 ++ GstDebugLevel level,
265 ++ const GstDebugTraceLocation *location,
266 ++ GObject * object,
267 ++ const gchar * format,
268 ++ ...) G_GNUC_NO_INSTRUMENT;
269 ++
270 + #else /* GST_USING_PRINTF_EXTENSION */
271 +
272 + void gst_debug_log (GstDebugCategory * category,
273 +@@ -284,6 +301,13 @@ void gst_debug_log (GstDebugCategory * category,
274 + const gchar * format,
275 + ...) G_GNUC_PRINTF (7, 8) G_GNUC_NO_INSTRUMENT;
276 +
277 ++void gst_debug_log2 (GstDebugCategory * category,
278 ++ GstDebugLevel level,
279 ++ const GstDebugTraceLocation *location,
280 ++ GObject * object,
281 ++ const gchar * format,
282 ++ ...) G_GNUC_PRINTF (5, 6) G_GNUC_NO_INSTRUMENT;
283 ++
284 + #endif /* GST_USING_PRINTF_EXTENSION */
285 +
286 + void gst_debug_log_valist (GstDebugCategory * category,
287 +@@ -321,8 +345,21 @@ G_CONST_RETURN gchar *
288 + _gst_debug_nameof_funcptr (GstDebugFuncPtr func) G_GNUC_NO_INSTRUMENT;
289 +
290 +
291 ++void gst_debug_log_valist2 (GstDebugCategory * category,
292 ++ GstDebugLevel level,
293 ++ const GstDebugTraceLocation *location,
294 ++ GObject * object,
295 ++ const gchar * format,
296 ++ va_list args) G_GNUC_NO_INSTRUMENT;
297 ++
298 + const gchar * gst_debug_message_get (GstDebugMessage * message);
299 +
300 ++gchar * gst_debug_print_object (gpointer ptr);
301 ++
302 ++#ifdef HAVE_PRINTF_EXTENSION
303 ++gchar * gst_debug_print_segment (gpointer ptr);
304 ++#endif
305 ++
306 + void gst_debug_log_default (GstDebugCategory * category,
307 + GstDebugLevel level,
308 + const gchar * file,
309 +@@ -495,19 +532,41 @@ GST_EXPORT GstDebugLevel __gst_debug_min;
310 + * debugging messages. You will probably want to use one of the ones described
311 + * below.
312 + */
313 ++#if defined(GST_USING_PRINTF_EXTENSION) && defined(G_HAVE_GNUC_VARARGS)
314 ++#define GST_CAT_LEVEL_LOG_obj(cat,level,object,str,args...) G_STMT_START{ \
315 ++ if (G_UNLIKELY (level <= __gst_debug_min)) { \
316 ++ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \
317 ++ gst_debug_log2 ((cat), (level), &loc, NULL, "%"GST_PTR_FORMAT" "str, \
318 ++ (object), ##args ); \
319 ++ } \
320 ++}G_STMT_END
321 ++#define GST_CAT_LEVEL_LOG_noobj(cat,level,object,str,args...) G_STMT_START{\
322 ++ if (G_UNLIKELY (level <= __gst_debug_min)) { \
323 ++ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \
324 ++ gst_debug_log2 ((cat), (level), &loc, NULL, (str), ##args ); \
325 ++ } \
326 ++}G_STMT_END
327 ++#else
328 ++# define GST_CAT_LEVEL_LOG_obj GST_CAT_LEVEL_LOG
329 ++# define GST_CAT_LEVEL_LOG_noobj GST_CAT_LEVEL_LOG
330 ++#endif
331 ++
332 ++
333 + #ifdef G_HAVE_ISO_VARARGS
334 + #define GST_CAT_LEVEL_LOG(cat,level,object,...) G_STMT_START{ \
335 +- if (G_UNLIKELY (level <= __gst_debug_min)) { \
336 +- gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \
337 +- (GObject *) (object), __VA_ARGS__); \
338 ++ if (G_UNLIKELY (level <= __gst_debug_min)) { \
339 ++ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \
340 ++ gst_debug_log2 ((cat), (level), &loc, (GObject *) (object), \
341 ++ __VA_ARGS__); \
342 + } \
343 + }G_STMT_END
344 + #else /* G_HAVE_GNUC_VARARGS */
345 + #ifdef G_HAVE_GNUC_VARARGS
346 + #define GST_CAT_LEVEL_LOG(cat,level,object,args...) G_STMT_START{ \
347 + if (G_UNLIKELY (level <= __gst_debug_min)) { \
348 +- gst_debug_log ((cat), (level), __FILE__, GST_FUNCTION, __LINE__, \
349 +- (GObject *) (object), ##args ); \
350 ++ const GstDebugTraceLocation loc = GST_DEBUG_TRACE_LOCATION(); \
351 ++ gst_debug_log2 ((cat), (level), &loc, (GObject *) (object), \
352 ++ ##args ); \
353 + } \
354 + }G_STMT_END
355 + #else /* no variadic macros, use inline */
356 +@@ -1244,6 +1303,7 @@ GST_TRACE (const char *format, ...)
357 +
358 + #if defined(__GNUC__) && __GNUC__ >= 3
359 + # pragma GCC poison gst_debug_log
360 ++# pragma GCC poison gst_debug_log2
361 + # pragma GCC poison gst_debug_log_valist
362 + # pragma GCC poison _gst_debug_category_new
363 + #endif
364 +--
365 +1.7.1
366 +
367
368 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch b/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch
369 new file mode 100644
370 index 0000000..4c54083
371 --- /dev/null
372 +++ b/media-libs/gstreamer/files/gst-0.10.32-0003-add-GstQueryBuffers-query.patch
373 @@ -0,0 +1,258 @@
374 +From 7f071cf72491a9f60c886f4779c7d14d924bc43d Mon Sep 17 00:00:00 2001
375 +From: Rob Clark <rob@××.com>
376 +Date: Wed, 19 May 2010 15:48:09 -0500
377 +Subject: [PATCH 3/5] add GstQueryBuffers query
378 +
379 +This query is used by buffer allocator, for example a video sink element,
380 +to find out any minimum buffer requirements of upstream elements that uses
381 +pad_alloc() to allocate buffers. For example, some cameras may have need
382 +for additional padding/boarder around the frame (for vstab), or some video
383 +decoders may have requirements for a certain minimum number of buffers (so
384 +they can hold refs to reference-frames)
385 +---
386 + gst/gstquark.c | 3 +-
387 + gst/gstquark.h | 7 ++-
388 + gst/gstquery.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
389 + gst/gstquery.h | 16 ++++++-
390 + 4 files changed, 164 insertions(+), 3 deletions(-)
391 +
392 +diff --git a/gst/gstquark.c b/gst/gstquark.c
393 +index 4073eb4..58badca 100644
394 +--- a/gst/gstquark.c
395 ++++ b/gst/gstquark.c
396 +@@ -49,7 +49,8 @@ static const gchar *_quark_strings[] = {
397 + "GstQueryURI", "GstEventStep", "GstMessageStepDone", "amount", "flush",
398 + "intermediate", "GstMessageStepStart", "active", "eos", "sink-message",
399 + "message", "GstMessageQOS", "running-time", "stream-time", "jitter",
400 +- "quality", "processed", "dropped", "buffering-ranges"
401 ++ "quality", "processed", "dropped", "buffering-ranges", "GstQueryBuffers",
402 ++ "caps", "count", "width", "height"
403 + };
404 +
405 + GQuark _priv_gst_quark_table[GST_QUARK_MAX];
406 +diff --git a/gst/gstquark.h b/gst/gstquark.h
407 +index c95d9cd..f4c8e0f 100644
408 +--- a/gst/gstquark.h
409 ++++ b/gst/gstquark.h
410 +@@ -127,8 +127,13 @@ typedef enum _GstQuarkId
411 + GST_QUARK_PROCESSED = 98,
412 + GST_QUARK_DROPPED = 99,
413 + GST_QUARK_BUFFERING_RANGES = 100,
414 ++ GST_QUARK_QUERY_BUFFERS = 101,
415 ++ GST_QUARK_CAPS = 102,
416 ++ GST_QUARK_COUNT = 103,
417 ++ GST_QUARK_WIDTH = 104,
418 ++ GST_QUARK_HEIGHT = 105,
419 +
420 +- GST_QUARK_MAX = 101
421 ++ GST_QUARK_MAX = 106
422 + } GstQuarkId;
423 +
424 + extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
425 +diff --git a/gst/gstquery.c b/gst/gstquery.c
426 +index 9373175..4823ff0 100644
427 +--- a/gst/gstquery.c
428 ++++ b/gst/gstquery.c
429 +@@ -96,6 +96,7 @@ static GstQueryTypeDefinition standard_definitions[] = {
430 + {GST_QUERY_BUFFERING, "buffering", "Buffering status", 0},
431 + {GST_QUERY_CUSTOM, "custom", "Custom query", 0},
432 + {GST_QUERY_URI, "uri", "URI of the source or sink", 0},
433 ++ {GST_QUERY_BUFFERS, "buffers", "Minimum buffer requirements", 0},
434 + {0, NULL, NULL, 0}
435 + };
436 +
437 +@@ -1480,3 +1481,143 @@ gst_query_parse_uri (GstQuery * query, gchar ** uri)
438 + *uri = g_value_dup_string (gst_structure_id_get_value (query->structure,
439 + GST_QUARK (URI)));
440 + }
441 ++
442 ++/**
443 ++ * gst_query_new_buffers:
444 ++ * @caps: the #GstCaps for the buffers that are going to be allocated
445 ++ *
446 ++ * Constructs a new buffer requirements query object to query buffer
447 ++ * requirements for a particular caps. Use gst_query_unref() when done
448 ++ * with it.
449 ++ *
450 ++ * Returns: A #GstQuery
451 ++ */
452 ++GstQuery *
453 ++gst_query_new_buffers (GstCaps * caps)
454 ++{
455 ++ GstQuery *query;
456 ++ GstStructure *structure;
457 ++
458 ++ /* XXX could add size here, for linear (non YUV/RGB) buffers? But I'm not
459 ++ * entirely sure what is the use-case for that.. it should be easy enough
460 ++ * to add more optional reply fields later
461 ++ */
462 ++ structure = gst_structure_id_new (GST_QUARK (QUERY_BUFFERS),
463 ++ GST_QUARK (CAPS), GST_TYPE_CAPS, caps,
464 ++ GST_QUARK (COUNT), G_TYPE_INT, -1,
465 ++ GST_QUARK (WIDTH), G_TYPE_INT, -1,
466 ++ GST_QUARK (HEIGHT), G_TYPE_INT, -1, NULL);
467 ++
468 ++ query = gst_query_new (GST_QUERY_BUFFERS, structure);
469 ++
470 ++ return query;
471 ++}
472 ++
473 ++/**
474 ++ * gst_query_set_buffers_count:
475 ++ * @count: minimum number of buffers required
476 ++ *
477 ++ * Answer a buffers query by setting the minimum number of buffers required.
478 ++ * If there is no minimum buffer count requirement, don't set this field in
479 ++ * the query.
480 ++ */
481 ++void
482 ++gst_query_set_buffers_count (GstQuery * query, gint count)
483 ++{
484 ++ GstStructure *structure;
485 ++
486 ++ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS);
487 ++
488 ++ structure = gst_query_get_structure (query);
489 ++ gst_structure_id_set (structure, GST_QUARK (COUNT), G_TYPE_INT, count, NULL);
490 ++}
491 ++
492 ++/**
493 ++ * gst_query_set_buffers_dimensions:
494 ++ * @width: minimum buffer width
495 ++ * @height: minimum buffer height
496 ++ *
497 ++ * Answer a buffers query by setting the minimum buffer dimensions required.
498 ++ * If there is no minimum buffer dimensions (beyond the width/height specified
499 ++ * in the #GstCaps), don't set this field in the query.
500 ++ */
501 ++void
502 ++gst_query_set_buffers_dimensions (GstQuery * query, gint width, gint height)
503 ++{
504 ++ GstStructure *structure;
505 ++
506 ++ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS);
507 ++
508 ++ structure = gst_query_get_structure (query);
509 ++ gst_structure_id_set (structure,
510 ++ GST_QUARK (WIDTH), G_TYPE_INT, width,
511 ++ GST_QUARK (HEIGHT), G_TYPE_INT, height, NULL);
512 ++}
513 ++
514 ++/**
515 ++ * gst_query_parse_buffers_caps:
516 ++ * @query: a #GstQuery
517 ++ * @caps: the storage for the #GstCaps pointer, or NULL
518 ++ *
519 ++ * Parse a buffers query.
520 ++ */
521 ++void
522 ++gst_query_parse_buffers_caps (GstQuery * query, const GstCaps ** caps)
523 ++{
524 ++ GstStructure *structure;
525 ++
526 ++ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS);
527 ++
528 ++ structure = gst_query_get_structure (query);
529 ++ if (caps)
530 ++ *caps = gst_value_get_caps (gst_structure_id_get_value (structure,
531 ++ GST_QUARK (CAPS)));
532 ++}
533 ++
534 ++/**
535 ++ * gst_query_parse_buffers_count:
536 ++ * @query: a #GstQuery
537 ++ * @count: the storage for minimum number of buffers, or NULL
538 ++ *
539 ++ * Parse a buffers query answer to see the minimum number of buffers
540 ++ * required. A returned value of -1 means there is no minimum requirement
541 ++ */
542 ++void
543 ++gst_query_parse_buffers_count (GstQuery * query, gint * count)
544 ++{
545 ++ GstStructure *structure;
546 ++
547 ++ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS);
548 ++
549 ++ structure = gst_query_get_structure (query);
550 ++ if (count)
551 ++ *count = g_value_get_int (gst_structure_id_get_value (structure,
552 ++ GST_QUARK (COUNT)));
553 ++}
554 ++
555 ++/**
556 ++ * gst_query_parse_buffers_dimensions:
557 ++ * @query: a #GstQuery
558 ++ * @width: the storage for minimum width, or NULL
559 ++ * @height: the storage for minimum height, or NULL
560 ++ *
561 ++ * Parse a buffers query answer to see the minimum buffer dimensions required.
562 ++ * A returned value of -1 for either dimension means there is no minimum
563 ++ * requirement in that axis
564 ++ */
565 ++void
566 ++gst_query_parse_buffers_dimensions (GstQuery * query, gint * width,
567 ++ gint * height)
568 ++{
569 ++ GstStructure *structure;
570 ++
571 ++ g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_BUFFERS);
572 ++
573 ++ structure = gst_query_get_structure (query);
574 ++ if (width)
575 ++ *width = g_value_get_int (gst_structure_id_get_value (structure,
576 ++ GST_QUARK (WIDTH)));
577 ++ if (height)
578 ++ *height = g_value_get_int (gst_structure_id_get_value (structure,
579 ++ GST_QUARK (HEIGHT)));
580 ++}
581 +diff --git a/gst/gstquery.h b/gst/gstquery.h
582 +index 09d0225..ae1f5cd 100644
583 +--- a/gst/gstquery.h
584 ++++ b/gst/gstquery.h
585 +@@ -31,6 +31,7 @@
586 + #include <gst/gstminiobject.h>
587 + #include <gst/gststructure.h>
588 + #include <gst/gstformat.h>
589 ++#include <gst/gstcaps.h>
590 +
591 + G_BEGIN_DECLS
592 +
593 +@@ -51,6 +52,9 @@ G_BEGIN_DECLS
594 + * @GST_QUERY_CUSTOM: a custom application or element defined query. Since
595 + * 0.10.22.
596 + * @GST_QUERY_URI: query the URI of the source or sink. Since 0.10.22.
597 ++ * @GST_QUERY_BUFFERS: query the upstream users of pad_alloc()'d buffers to
598 ++ * find any particular requirements about buffer size (padding) or numbers of
599 ++ * buffers. Since ?.?.?.
600 + *
601 + * Standard predefined Query types
602 + */
603 +@@ -69,7 +73,8 @@ typedef enum {
604 + GST_QUERY_FORMATS,
605 + GST_QUERY_BUFFERING,
606 + GST_QUERY_CUSTOM,
607 +- GST_QUERY_URI
608 ++ GST_QUERY_URI,
609 ++ GST_QUERY_BUFFERS
610 + } GstQueryType;
611 +
612 + /**
613 +@@ -336,6 +341,15 @@ GstQuery * gst_query_new_uri (void);
614 + void gst_query_parse_uri (GstQuery *query, gchar **uri);
615 + void gst_query_set_uri (GstQuery *query, const gchar *uri);
616 +
617 ++/* buffer requirements query */
618 ++GstQuery * gst_query_new_buffers (GstCaps * caps);
619 ++void gst_query_set_buffers_count (GstQuery * query, gint count);
620 ++void gst_query_set_buffers_dimensions (GstQuery * query, gint width, gint height);
621 ++void gst_query_parse_buffers_caps (GstQuery * query, const GstCaps ** caps);
622 ++void gst_query_parse_buffers_count (GstQuery * query, gint * count);
623 ++void gst_query_parse_buffers_dimensions (GstQuery * query, gint * width, gint * height);
624 ++
625 ++
626 + G_END_DECLS
627 +
628 + #endif /* __GST_QUERY_H__ */
629 +--
630 +1.7.1
631 +
632
633 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch b/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch
634 new file mode 100644
635 index 0000000..0730dd4
636 --- /dev/null
637 +++ b/media-libs/gstreamer/files/gst-0.10.32-0004-Add-GstEventCrop-event.patch
638 @@ -0,0 +1,161 @@
639 +From 20378daaef4f4adb36d879879d6ab6d007a82636 Mon Sep 17 00:00:00 2001
640 +From: Rob Clark <rob@××.com>
641 +Date: Mon, 24 May 2010 16:49:20 -0500
642 +Subject: [PATCH 4/5] Add GstEventCrop event
643 +
644 +This event can be used to set cropping / region-of-interest to take effect
645 +on the following buffer.
646 +---
647 + gst/gstevent.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
648 + gst/gstevent.h | 11 +++++++++
649 + gst/gstquark.c | 2 +-
650 + gst/gstquark.h | 5 +++-
651 + 4 files changed, 79 insertions(+), 2 deletions(-)
652 +
653 +diff --git a/gst/gstevent.c b/gst/gstevent.c
654 +index 6d2cc8b..d04df79 100644
655 +--- a/gst/gstevent.c
656 ++++ b/gst/gstevent.c
657 +@@ -116,6 +116,7 @@ static GstEventQuarks event_quarks[] = {
658 + {GST_EVENT_TAG, "tag", 0},
659 + {GST_EVENT_BUFFERSIZE, "buffersize", 0},
660 + {GST_EVENT_SINK_MESSAGE, "sink-message", 0},
661 ++ {GST_EVENT_CROP, "crop", 0},
662 + {GST_EVENT_QOS, "qos", 0},
663 + {GST_EVENT_SEEK, "seek", 0},
664 + {GST_EVENT_NAVIGATION, "navigation", 0},
665 +@@ -1231,3 +1232,65 @@ gst_event_parse_sink_message (GstEvent * event, GstMessage ** msg)
666 + GST_MESSAGE (gst_value_dup_mini_object (gst_structure_id_get_value
667 + (event->structure, GST_QUARK (MESSAGE))));
668 + }
669 ++
670 ++/**
671 ++ * gst_event_new_crop:
672 ++ * @top: the new offset to top of sub-image
673 ++ * @left: the new offset to left of sub-image
674 ++ * @width: the new width
675 ++ * @height: the new height
676 ++ *
677 ++ * Create a new crop event.
678 ++ */
679 ++GstEvent *
680 ++gst_event_new_crop (gint top, gint left, gint width, gint height)
681 ++{
682 ++ GstEvent *event;
683 ++ GstStructure *structure;
684 ++
685 ++ GST_CAT_INFO (GST_CAT_EVENT, "creating crop event: %d,%d %dx%d",
686 ++ top, left, width, height);
687 ++
688 ++ structure = gst_structure_id_new (GST_QUARK (EVENT_CROP),
689 ++ GST_QUARK (TOP), G_TYPE_INT, top,
690 ++ GST_QUARK (LEFT), G_TYPE_INT, left,
691 ++ GST_QUARK (WIDTH), G_TYPE_INT, width,
692 ++ GST_QUARK (HEIGHT), G_TYPE_INT, height, NULL);
693 ++ event = gst_event_new_custom (GST_EVENT_CROP, structure);
694 ++
695 ++ return event;
696 ++}
697 ++
698 ++/**
699 ++ * gst_event_parse_crop:
700 ++ * @event: The event to query
701 ++ * @top: A pointer to store top offset in
702 ++ * @left: A pointer to store left offset in
703 ++ * @width: A pointer to store width in
704 ++ * @height: A pointer to store height in
705 ++ *
706 ++ * Parse the crop event.
707 ++ */
708 ++void
709 ++gst_event_parse_crop (GstEvent * event, gint * top, gint * left,
710 ++ gint * width, gint * height)
711 ++{
712 ++ const GstStructure *structure;
713 ++
714 ++ g_return_if_fail (GST_IS_EVENT (event));
715 ++ g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_CROP);
716 ++
717 ++ structure = gst_event_get_structure (event);
718 ++ if (top)
719 ++ *top = g_value_get_int (gst_structure_id_get_value (structure,
720 ++ GST_QUARK (TOP)));
721 ++ if (left)
722 ++ *left = g_value_get_int (gst_structure_id_get_value (structure,
723 ++ GST_QUARK (LEFT)));
724 ++ if (width)
725 ++ *width = g_value_get_int (gst_structure_id_get_value (structure,
726 ++ GST_QUARK (WIDTH)));
727 ++ if (height)
728 ++ *height = g_value_get_int (gst_structure_id_get_value (structure,
729 ++ GST_QUARK (HEIGHT)));
730 ++}
731 +diff --git a/gst/gstevent.h b/gst/gstevent.h
732 +index 9568514..ae08829 100644
733 +--- a/gst/gstevent.h
734 ++++ b/gst/gstevent.h
735 +@@ -93,6 +93,10 @@ typedef enum {
736 + * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to
737 + * send messages that should be emitted in sync with
738 + * rendering.
739 ++ * @GST_EVENT_CROP: An event that can set horizontal (pan/scan) and vertical
740 ++ * (tilt/scan) offset and width/height within a larger
741 ++ * image. This event precedes the buffer to which it
742 ++ * applies.
743 + * @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements
744 + * that the downstream elements are being starved of or
745 + * flooded with data.
746 +@@ -133,6 +137,7 @@ typedef enum {
747 + GST_EVENT_TAG = GST_EVENT_MAKE_TYPE (7, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
748 + GST_EVENT_BUFFERSIZE = GST_EVENT_MAKE_TYPE (8, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
749 + GST_EVENT_SINK_MESSAGE = GST_EVENT_MAKE_TYPE (9, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
750 ++ GST_EVENT_CROP = GST_EVENT_MAKE_TYPE (10, FLAG(DOWNSTREAM) | FLAG(SERIALIZED)),
751 + /* upstream events */
752 + GST_EVENT_QOS = GST_EVENT_MAKE_TYPE (15, FLAG(UPSTREAM)),
753 + GST_EVENT_SEEK = GST_EVENT_MAKE_TYPE (16, FLAG(UPSTREAM)),
754 +@@ -484,6 +489,12 @@ GstEvent* gst_event_new_step (GstFormat format, guint64 amoun
755 + void gst_event_parse_step (GstEvent *event, GstFormat *format, guint64 *amount,
756 + gdouble *rate, gboolean *flush, gboolean *intermediate);
757 +
758 ++/* crop event */
759 ++GstEvent * gst_event_new_crop (gint top, gint left, gint width, gint height);
760 ++void gst_event_parse_crop (GstEvent * event, gint * top, gint * left,
761 ++ gint * width, gint * height);
762 ++
763 ++
764 + G_END_DECLS
765 +
766 + #endif /* __GST_EVENT_H__ */
767 +diff --git a/gst/gstquark.c b/gst/gstquark.c
768 +index 58badca..f8716cc 100644
769 +--- a/gst/gstquark.c
770 ++++ b/gst/gstquark.c
771 +@@ -50,7 +50,7 @@ static const gchar *_quark_strings[] = {
772 + "intermediate", "GstMessageStepStart", "active", "eos", "sink-message",
773 + "message", "GstMessageQOS", "running-time", "stream-time", "jitter",
774 + "quality", "processed", "dropped", "buffering-ranges", "GstQueryBuffers",
775 +- "caps", "count", "width", "height"
776 ++ "caps", "count", "width", "height", "GstEventCrop", "top", "left"
777 + };
778 +
779 + GQuark _priv_gst_quark_table[GST_QUARK_MAX];
780 +diff --git a/gst/gstquark.h b/gst/gstquark.h
781 +index f4c8e0f..6eeb77f 100644
782 +--- a/gst/gstquark.h
783 ++++ b/gst/gstquark.h
784 +@@ -132,8 +132,11 @@ typedef enum _GstQuarkId
785 + GST_QUARK_COUNT = 103,
786 + GST_QUARK_WIDTH = 104,
787 + GST_QUARK_HEIGHT = 105,
788 ++ GST_QUARK_EVENT_CROP = 106,
789 ++ GST_QUARK_TOP = 107,
790 ++ GST_QUARK_LEFT = 108,
791 +
792 +- GST_QUARK_MAX = 106
793 ++ GST_QUARK_MAX = 109
794 + } GstQuarkId;
795 +
796 + extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
797 +--
798 +1.7.1
799 +
800
801 diff --git a/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch b/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch
802 new file mode 100644
803 index 0000000..27c7daa
804 --- /dev/null
805 +++ b/media-libs/gstreamer/files/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch
806 @@ -0,0 +1,52 @@
807 +From 45650b7b1dfcaaa2b165a6d263b6dc74449c501c Mon Sep 17 00:00:00 2001
808 +From: Rob Clark <rob@××.com>
809 +Date: Wed, 26 May 2010 14:42:40 -0500
810 +Subject: [PATCH 5/5] basetransform: don't do unnecessary pad_alloc()
811 +
812 +Don't allocate a buffer in passthrough mode.
813 +---
814 + libs/gst/base/gstbasetransform.c | 28 ++++++++++++++++++++--------
815 + 1 files changed, 20 insertions(+), 8 deletions(-)
816 +
817 +diff --git a/libs/gst/base/gstbasetransform.c b/libs/gst/base/gstbasetransform.c
818 +index 57192ab..1416b8e 100644
819 +--- a/libs/gst/base/gstbasetransform.c
820 ++++ b/libs/gst/base/gstbasetransform.c
821 +@@ -2188,14 +2188,26 @@ gst_base_transform_handle_buffer (GstBaseTransform * trans, GstBuffer * inbuf,
822 +
823 + no_qos:
824 +
825 +- /* first try to allocate an output buffer based on the currently negotiated
826 +- * format. While we call pad-alloc we could renegotiate the srcpad format or
827 +- * have a new suggestion for upstream buffer-alloc.
828 +- * In any case, outbuf will contain a buffer suitable for doing the configured
829 +- * transform after this function. */
830 +- ret = gst_base_transform_prepare_output_buffer (trans, inbuf, outbuf);
831 +- if (G_UNLIKELY (ret != GST_FLOW_OK))
832 +- goto no_buffer;
833 ++ if (trans->passthrough) {
834 ++ /* I'm not yet sure if we should bypass allocating output buffer in case of
835 ++ * passthrough, or if I should override the prepare_output_buffer vmethod..
836 ++ * I think the argument for always doing buffer allocation is to give a
837 ++ * chance for upstream caps-renegotiation.. except I think the existing
838 ++ * gst_base_transform_buffer_alloc() which itself does a pad_alloc() should
839 ++ * be sufficient..
840 ++ */
841 ++ GST_DEBUG_OBJECT (trans, "reuse input buffer");
842 ++ *outbuf = inbuf;
843 ++ } else {
844 ++ /* first try to allocate an output buffer based on the currently negotiated
845 ++ * format. While we call pad-alloc we could renegotiate the srcpad format or
846 ++ * have a new suggestion for upstream buffer-alloc.
847 ++ * In any case, outbuf will contain a buffer suitable for doing the configured
848 ++ * transform after this function. */
849 ++ ret = gst_base_transform_prepare_output_buffer (trans, inbuf, outbuf);
850 ++ if (G_UNLIKELY (ret != GST_FLOW_OK))
851 ++ goto no_buffer;
852 ++ }
853 +
854 + /* now perform the needed transform */
855 + if (trans->passthrough) {
856 +--
857 +1.7.1
858 +
859
860 diff --git a/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild b/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild
861 new file mode 100644
862 index 0000000..f6879a1
863 --- /dev/null
864 +++ b/media-libs/gstreamer/gstreamer-0.10.32_p20110127.ebuild
865 @@ -0,0 +1,68 @@
866 +# Copyright 1999-2011 Gentoo Foundation
867 +# Distributed under the terms of the GNU General Public License v2
868 +# $Header: $
869 +
870 +EAPI=2
871 +
872 +inherit eutils multilib versionator
873 +
874 +# Create a major/minor combo for our SLOT and executables suffix
875 +PV_MAJ_MIN=$(get_version_component_range '1-2')
876 +
877 +DESCRIPTION="Streaming media framework"
878 +HOMEPAGE="http://gstreamer.sourceforge.net"
879 +MY_P=${P%%_*}
880 +SRC_URI="http://${PN}.freedesktop.org/src/${PN}/${MY_P}.tar.bz2"
881 +S="${WORKDIR}/${MY_P}"
882 +
883 +LICENSE="LGPL-2"
884 +SLOT=${PV_MAJ_MIN}
885 +KEYWORDS="~alpha ~amd64 arm ~hppa ~ia64 ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd"
886 +IUSE="+introspection nls test"
887 +
888 +RDEPEND=">=dev-libs/glib-2.20:2
889 + dev-libs/libxml2
890 + introspection? ( >=dev-libs/gobject-introspection-0.6.3 )
891 + !<media-libs/gst-plugins-base-0.10.26"
892 + # ^^ queue2 move, mustn't have both libgstcoreleements.so and libgstqueue2.so at runtime providing the element at once
893 +DEPEND="${RDEPEND}
894 + dev-util/pkgconfig
895 + dev-util/gtk-doc-am
896 + nls? ( sys-devel/gettext )"
897 +
898 +src_configure() {
899 + # Disable static archives, dependency tracking and examples
900 + # to speed up build time
901 + econf \
902 + --disable-static \
903 + --disable-dependency-tracking \
904 + $(use_enable nls) \
905 + --disable-valgrind \
906 + --disable-examples \
907 + --enable-check \
908 + $(use_enable introspection) \
909 + $(use_enable test tests) \
910 + --with-package-name="GStreamer ebuild for Gentoo" \
911 + --with-package-origin="http://packages.gentoo.org/package/media-libs/gstreamer"
912 +}
913 +
914 +src_prepare() {
915 + cd ${S}
916 + epatch "${FILESDIR}"/gst-0.10.32-0001-gst-launch-add-loop-argument.patch
917 + epatch "${FILESDIR}"/gst-0.10.32-0002-Changes-to-make-it-possible-to-LD_PRELOAD-libttif.patch
918 + epatch "${FILESDIR}"/gst-0.10.32-0003-add-GstQueryBuffers-query.patch
919 + epatch "${FILESDIR}"/gst-0.10.32-0004-Add-GstEventCrop-event.patch
920 + epatch "${FILESDIR}"/gst-0.10.32-0005-basetransform-don-t-do-unnecessary-pad_alloc.patch
921 +}
922 +
923 +src_install() {
924 + emake DESTDIR="${D}" install || die "emake install failed."
925 + dodoc AUTHORS ChangeLog NEWS MAINTAINERS README RELEASE
926 +
927 + # Remove unversioned binaries to allow SLOT installations in future
928 + cd "${D}"/usr/bin
929 + local gst_bins
930 + for gst_bins in $(ls *-${PV_MAJ_MIN}); do
931 + rm -f ${gst_bins/-${PV_MAJ_MIN}/}
932 + done
933 +}