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 |
+} |