diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-10-25 14:10:09 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-10-25 14:10:09 +0200 |
commit | 6a5ec01275b38c0a0193bd344a5cd0954e49a448 (patch) | |
tree | db7e1c5361b0f09434bcc31c85333b80e8518de4 | |
parent | 2bc953e5221beebc755e4ec14d51d215652f2cf1 (diff) |
Imported Upstream version 1.0.2upstream/1.0.2
795 files changed, 20640 insertions, 1785 deletions
@@ -1,9 +1,2604 @@ +=== release 1.0.2 === + +2012-10-25 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + releasing 1.0.2 + +2012-10-24 23:40:20 +0200 Carlos Rafael Giani <dv@pseudoterminal.org> + + * ext/opus/gstopusdec.c: + opusdec: fixed buffer unmapping bug + When the decoder received a NULL buffer, it tried to + unmap a not mapped buffer. + https://bugzilla.gnome.org/show_bug.cgi?id=686829 + +2012-10-24 14:23:26 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + configure: require wayland >= 1.0.0 + We have an API stable release now, require that. + +2012-10-24 13:41:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * tests/check/Makefile.am: + * tests/check/elements/.gitignore: + * tests/check/elements/mpg123audiodec.c: + * tests/files/Makefile.am: + tests: fix up mpg123 test a little + - dist input files + - fix sample leak + - simplify check for elements + - only run mpg123 test if mpg123 is available and selected + - fix build in uninstalled setup + https://bugzilla.gnome.org/show_bug.cgi?id=686595 + +2012-10-24 12:30:10 +0200 Carlos Rafael Giani <dv@pseudoterminal.org> + + * tests/check/Makefile.am: + * tests/check/elements/mpg123audiodec.c: + * tests/files/cbr_stream.mp3: + * tests/files/stream.mp2: + * tests/files/vbr_stream.mp3: + tets: add unit test for mpg123audiodec + https://bugzilla.gnome.org/show_bug.cgi?id=686595 + +2012-10-24 00:36:42 +0200 Carlos Rafael Giani <dv@pseudoterminal.org> + + * docs/plugins/gst-plugins-bad-plugins-docs.sgml: + * docs/plugins/gst-plugins-bad-plugins-sections.txt: + * ext/mpg123/gstmpg123audiodec.c: + mpg123: added gtkdoc section + https://bugzilla.gnome.org/show_bug.cgi?id=686595 + +2012-10-24 00:22:05 +0200 Carlos Rafael Giani <dv@pseudoterminal.org> + + * ext/mpg123/gstmpg123audiodec.c: + mpg123: fixed bug with last frame, disabled internal resampler & chatter + * The last MP3 frame wasn't being pushed when base class was draining + * Made sure mpg123 cannot ever use its (crude) internal resampler + * Disabled mpg123 stderr output + https://bugzilla.gnome.org/show_bug.cgi?id=686595 + +2012-10-24 00:21:45 +0200 Carlos Rafael Giani <dv@pseudoterminal.org> + + * ext/mpg123/gstmpg123audiodec.c: + mpg123: cleaned up comments, formatting, and logging lines + also replaced mpg123decoder->handle != NULL checks with asserts + https://bugzilla.gnome.org/show_bug.cgi?id=686595 + +2012-10-24 11:34:32 +0200 Sebastian Rasmussen <sebrn@axis.com> + + * ext/curl/gstcurlsmtpsink.c: + curlsmtpsink: add comment describing function + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686774 + +2010-07-02 15:28:41 +0200 Thijs Vermeir <thijsvermeir@gmail.com> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: check base_time before calculating new_start + https://bugzilla.gnome.org/show_bug.cgi?id=623387 + +2012-10-23 14:33:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/scaletempo/gstscaletempo.c: + scaletempo: Fix event leak + +2012-10-23 14:32:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/scaletempo/gstscaletempo.c: + scaletempo: Fix timestamp tracking + +2012-10-23 14:06:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/scaletempo/gstscaletempo.c: + scaletempo: Implement LATENCY query + +2012-10-23 13:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/scaletempo/gstscaletempo.c: + * gst/scaletempo/gstscaletempo.h: + scaletempo: Store instance private data in the instance struct + Getting it over and over again via G_TYPE_INSTANCE_GET_PRIVATE() + is really slow. + +2012-10-23 10:07:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/Makefile.am: + hls: Link to $(LIBM) for isfinite() + +2012-10-22 21:41:20 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/soundtouch/gstpitch.cc: + pitch: fix for start times > 0 + Fixes buffering and playback of streams that start with + a non-0 timestamp in totem (which has a 'pitch' element + before pulsesink). + Example URI: http://lobostv.lobocast.org.es:8004/lobostv.ogg + Still breaks with chained oggs, on second chain. + https://bugzilla.gnome.org/show_bug.cgi?id=686391 + +2012-10-22 12:08:41 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/opus/gstrtpopuspay.c: + opuspay: remove pointless caps serialization + Remove the caps serialization in the rtp caps. the spec nor the receiver + does anything with it. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686547 + +2012-10-22 10:45:17 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + * gst/subenc/gstsrtenc.c: + * gst/subenc/gstwebvttenc.c: + subenc: port to 1.0 + +2012-10-22 01:39:13 +1100 Jan Schmidt <thaytan@noraisin.net> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: Don't make the same buffer writable twice. + Fixes Bug 686327 - mpegtsmux: fix refcount issue with input buffers + +2012-10-20 14:55:41 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * ext/wayland/gstwaylandsink.c: + * ext/wayland/gstwaylandsink.h: + wayland: update to wayland-protocol 0.99 + https://bugzilla.gnome.org/show_bug.cgi?id=686520 + +2012-10-18 22:23:07 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: forward non-processed dvd events + ... such as notably dvd-spu-clut-change. + +2012-10-18 22:22:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: segment event should be sent before gap event + +2012-10-19 09:59:10 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't try to render expose() if no caps are known yet + +2012-10-18 15:12:21 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix expose + +2012-10-19 01:03:51 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/mpegtsdemux/pesparse.c: + tsdemux: fix program packet sequence counter parsing in PES header + +2012-10-19 00:47:45 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/mpegtsdemux/pesparse.c: + tsdemux: fix some inconsequential PES header parsing issues + additional_copy_info: need to get rid of the highest + bit, not the lowest one + program_packet_sequence_counter: also need to get rid + of the highest bit instead of multiplying with a random + value + original_stuff_length: want to AND 0x3f to extract the + lowest 6 bits, not multiply by it. + None of these fields are actually used though, so these + should not have caused any issues. + +2012-10-17 15:54:32 +0300 Raimo Järvi <raimo.jarvi@gmail.com> + + * gst/mpegtsdemux/pesparse.c: + tsdemux: Fix parsing P-STD_buffer in PES header + https://bugzilla.gnome.org/show_bug.cgi?id=686294 + +2012-10-18 18:56:33 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + wayland: don't try to build against 0.99 or later + The plugin needs updating for some API changes since 0.95. + +2012-10-18 01:47:57 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: fix potential crash dereferencing NULL program pointer + https://bugzilla.gnome.org/show_bug.cgi?id=686358 + +2012-10-18 15:06:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + opensles: Only check for the main opensles header + +2012-10-18 14:38:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + eglglessink: Put into the not-ported plugins list + +2012-10-18 14:25:05 +0200 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-bad-plugins-docs.sgml: + * docs/plugins/gst-plugins-bad-plugins-sections.txt: + eglglessink: Documentation: Hook eglglessink documentation in + +2012-10-18 14:09:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Make compilable on desktop Linux with MESA too + +2012-10-18 14:07:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * ext/Makefile.am: + * ext/eglgles/Makefile.am: + eglglessink: Integrate into the build system + Conflicts: + ext/Makefile.am + +2012-10-18 10:49:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix debug output + +2012-10-18 10:32:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Also clear the surface once when the buffer content is preserved + +2012-10-18 10:20:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Only draw black borders if the default swap behaviour of the surface is to destroy the buffer + +2012-10-18 09:37:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Remove unused label + +2012-10-18 02:26:17 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Factor display region reset to its own func + +2012-10-18 01:45:51 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Always Reset display_region.* at EGL/GLES ctx wipe + +2012-10-18 01:36:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Factor ELG/GLES context cleanup into its own func + +2012-10-18 00:33:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Drop drafted fast rendering path logic + +2012-10-17 15:50:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Also update header file + +2012-10-17 15:37:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Provide the texture positions to the shader on every frame too + +2012-10-17 15:04:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Draw black borders and also use a single GL buffer for all vertices + Fixes weird artifacts outside the video frame on + Qualcomm Snapdragon chipsets and should be faster + than glClear() on the complete area all the time. + +2012-10-17 12:49:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix memory leak + +2012-10-17 10:47:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Remove useless debug output added for debugging earlier + +2012-10-17 10:08:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Make window setting/handling a bit more threadsafe + +2012-10-17 09:59:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Print window handle after setting it + +2012-10-16 17:50:03 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Move DAR query & store to surface init + The DAR (display's pixel aspect ratio) should remain a + constant at runtime so there's no point on repeatedly + query and store this value. Doing it at surface setup + should be enough. As an added bonus this change should + make rendering a bit faster. + +2012-10-16 17:35:18 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't signal the GCond too often + +2012-10-16 17:05:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Add myself as author + +2012-10-16 16:25:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Make sure to always reset the display region in start() + +2012-10-16 16:23:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Also commit missing changes to the header file + +2012-10-16 16:18:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/Makefile.am: + eglglessink: Also include $(GST_BASE_CFLAGS) + +2012-10-16 16:12:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix race condition + +2012-10-16 15:40:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Refactor rendering and all context specific GL things into a separate thread + Also fixes some threading related problems. + +2012-10-16 14:39:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Re-add accidentially reverted commit + +2012-10-16 14:15:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Remove unneeded flow_lock + Use the object lock in the few places necessary, everything + else is protected by other things already. + Also store the context directly inside the instance struct + instead of allocating some memory for it. + +2012-10-16 11:53:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix debug output and constant names + +2012-10-16 11:51:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: start()/stop() is called in READY<->NULL in basesink + But this should be called in PAUSED<->READY. + +2012-10-15 13:44:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix for outbound DAR reported by EGL + Some EGL implementations don't honor the spec + requirement of returning DAR values as w/h * + EGL_DISPLAY_SCALING. + This changeset: + - Fixes rendering on the Samsung Galaxy III + - Fixes wrong check on required 1.2 EGL version + - Reorders the code a bit. + +2012-10-15 13:38:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix crashes if there are no EGL or GLES extensions + +2012-10-10 12:42:47 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Fix crash at element instantiation + +2012-10-10 12:26:04 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Save one extra texture lookup + +2012-10-10 12:22:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Minor named index access tweak xyz -> rgb + +2012-10-10 12:18:27 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Assorted fixes to optimized code + - Don't copy over opos as it's already a vec2 + - Fix index order access at frag_YUY2_YVYU_UYVY_prog + +2012-10-10 11:50:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Planar YUV converters optimization + - Use consts for the transform's offset and cofficients values + - Use dot product instead of mult and add + - Avoid unneeded texture lookups + +2012-10-10 11:05:04 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + Geglglessink: LSL: Optimize frag_YUY2_YVYU_UYVY_prog + - Avoid repeatedly performing the texture lookup + - Use consts for the transform's offset and cofficients values + - Use the dot product instead of the explicit mult and add + +2012-10-10 03:02:21 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Drop unneded nxy vec2 + +2012-10-10 02:16:35 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix missing double quotation mark in GLSL code + +2012-10-10 02:04:18 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: GLSL: Optimize frag_AYUV_prog + - Avoid repeatedly performing the texture lookup + - Use consts for the transform's offset and cofficients values + - Use the dot product instead of the explicit mult and add + +2012-10-09 23:35:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Documentation: GstEglGlesSink struct + +2012-10-09 23:04:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Documentation: GstEglGlesBuffer struct (DRAFT) + +2012-10-09 22:54:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Documentation: GstEglGlesImageFmt struct + +2012-10-09 22:40:19 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.h: + eglglessink: Documentation: GstEglGlesRenderContext struct + +2012-10-09 17:00:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Assorted doc and reordering fixes + +2012-10-09 16:25:46 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Documentation: Element properties + Brief explanatory comments plus some reordering + to group default setting of properties and runtime + flags values. + +2012-10-09 17:20:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for YVYU + +2012-10-09 11:48:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Documentation: GLSL Shaders + Brief explanatory comments plus some rerdering + to group packed/planar converters. + +2012-10-09 11:00:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Documentation: Element overview + +2012-10-08 12:10:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Refactor REORDER shader. + Avoid unneededly calling texture2D() 3 consecutive times. + +2012-10-04 15:47:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix handling of caps changes by only releasing what needs to be released + And not terminating the display connection + +2012-10-04 02:15:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Move display_region reset to locked section + +2012-10-04 01:56:10 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Reset display_region dims at caps renego + +2012-10-04 01:33:31 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Cosmetics + +2012-10-04 01:29:40 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't access local value from struct + +2012-10-03 23:41:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Terminate display connection at caps renego + +2012-10-02 17:56:14 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Cosmetics + +2012-10-03 12:32:38 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Only attach the context once to the streaming thread + +2012-10-03 10:53:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Make the context current for the thread and unbind it again around every use + This fixes some crashes and leaking of our context into other + OpenGL code on the same thread. + +2012-10-02 17:29:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Improve cleanup + +2012-10-02 15:46:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Remove unused label + +2012-10-02 15:42:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Allow setting a NULL handle + +2012-10-02 09:48:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Revert "Do not update_surface_dims() once per frame" + This reverts commit 82103376ede2bc7c63dd699f5982168660f67852. + We have to update the surface dimensions on every frame to + make sure that we get notified about updates. This happens + for example if the Android window gets re-layouted because + a widget takes more space than before. + +2012-10-02 01:43:35 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Do not update_surface_dims() once per frame + And.. Upgrade debug message to warging on weird DAR. + Correct fix to avoid spaming with this message + once per each frame is avoid calling update_surface_dims() + at render_and_display(). This is handled at egl surface + init. + +2012-10-01 16:36:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: And downgrade another warning too + +2012-10-01 16:14:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Downgrade GST_WARNING to GST_DEBUG + +2012-10-01 09:44:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add some {} to if statements make them work as expected + +2012-09-30 23:07:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Drop stale defines for max frame size + +2012-09-30 23:06:19 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Small commentary fixes here an there + +2012-09-28 11:48:23 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Avoid setting height or width twice + +2012-09-27 01:18:37 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Use PAR/DAR to set viewport + +2012-09-27 14:28:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Correctly resize if the surface dimensions change + +2012-09-27 14:08:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Update surface dimensions on every buffer + +2012-09-27 14:02:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: More consistent naming of shader related variables + +2012-09-27 13:57:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Some variable name cleanup + +2012-09-27 13:53:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Remove default-width/height properties + These are completely unneeded + +2012-09-25 13:32:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix double free() + +2012-09-25 09:06:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't leak EGL/ES render context + +2012-09-25 01:39:21 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Put EGL/GLES context vars on their own struct + +2012-09-24 11:19:32 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/TODO: + eglglessink: Small TODO reformatting + +2012-09-24 10:23:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/TODO: + eglglessink: Add TODO file + +2012-09-24 14:43:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Correctly implement ::expose() + We don't need the past buffer for this, the old one is still available + as texture and we just need to draw our rectangle again. + +2012-09-24 13:48:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Allow setting another window for the next time we reconfigure everything + +2012-09-24 12:36:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Also unref current caps after usage + +2012-09-24 12:32:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Implement support for caps changes + +2012-09-24 12:27:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: More cleanup and making the element reusable + +2012-09-24 12:05:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Properly init/release resources when going from NULL->READY and the other way around + +2012-09-24 11:48:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Generate the sink caps exactly once + +2012-09-24 11:17:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix code style a bit to stop confusing indent + +2012-09-24 11:15:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix support for YUY2 and UYVY + +2012-09-24 11:01:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Some property cleanup + +2012-09-24 10:45:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for the remaining RGB formats + +2012-09-24 10:23:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for Y444, Y42B and Y41B, just because it's so easy + +2012-09-24 10:02:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add some simple TODOs + +2012-09-24 01:08:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Lock while altering display region coords + +2012-09-24 00:27:23 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix _get_compat_format_from_caps() logic + It's a getter so it shouldn't messing with the sink context. + Adding insult to injury it was setting selected_fmt without + locking. + The associated changes to the buffer functions are merely + make-it build fixes. Those functions are barely drafted + and in WIP state. + +2012-09-23 23:07:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Drop unneded initial set to NULL + +2012-09-23 22:33:58 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Minor formatting and comment fixes + +2012-09-21 12:12:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Clean-up gl/egl allocations at _stop() + Also, conditionaly destroy window if the sink created its own. + +2012-09-21 17:08:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for NV12 and NV21 + Also YUY2 and UYVY but this is disabled for now as it + doesn't work completely yet. Something is wrong with + the chroma. + +2012-09-21 15:44:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Add support for I420 and YV12 color formats + +2012-09-21 14:05:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Preparations for supporting multiple textures for more YUV formats + +2012-09-21 13:42:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Use the attrib locations as really used inside the shader + +2012-09-21 12:53:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Really decouple vertex and texture positions in the shader + +2012-09-21 12:45:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Decouple texture and vertex positions + +2012-09-21 12:14:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Reorder vertex value order to make a bit more sense + +2012-09-21 01:09:11 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Handle frame scaling to fill surface + +2012-09-21 00:09:06 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Draft set_render_rectangle() from the xOverlay interface + +2012-09-20 22:50:31 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Remove stale comment + +2012-09-20 22:41:10 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Move VBO setup to setcaps + +2012-09-20 22:11:08 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't do context ops at render + We don't need to repeatedly call + eglMakeCurrent() while using the + same context anyway. + +2012-09-20 22:01:20 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't clear surface color at render + +2012-09-20 17:22:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Rename shader variables to make more sense + +2012-09-20 17:14:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for AYUV + +2012-09-20 17:02:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Reorder caps a bit to make more sense + +2012-09-20 16:50:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Set rank to PRIMARY + +2012-09-20 16:25:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add support for RGBA + +2012-09-20 16:21:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Correctly generated caps for the supported formats + +2012-09-20 16:08:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add ::get_caps() vfunc that returns the actually supported caps + +2012-09-20 15:56:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Also require a configuration with EGL_SURFACE_TYPE containing EGL_WINDOW_BIT + +2012-09-20 14:50:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix compiler warnings + +2012-09-19 19:26:54 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Clear surface to black by default + +2012-09-19 19:23:50 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Make sure we get a config we can use with GLES2 + +2012-09-19 19:12:30 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: set_window_handle() has been tested to work now + +2012-09-19 12:29:13 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Avoid autoscaling by default + +2012-09-18 14:58:43 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Avoid repeatedly setting 2D resizing params + Moved to initial texture setup so it hapens + just once while on the same context. + +2012-09-18 12:04:20 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Avoid initializing EGL at _set_window_handle() + _start() should take care of that. + This change asumes _setcaps() will + happen always after _start() is + done. + +2012-09-18 10:43:38 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Don't ask for a window if we already have one + +2012-09-18 10:31:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Fix EGL attribs var naming + +2012-09-18 02:32:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix slow path rendering on Android + Specify missing and mandatory params for npot + Before calling glTexImage2D. + In particular, _WRAP_T and _WRAP_S need to be + set to GL_CLAMP_TO_EDGE to avoid all-black + rendering with npot sized frames. + +2012-09-18 00:51:36 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add test on usable eglconfigs returned + +2012-09-17 23:05:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Drop stale error_locked label + +2012-09-17 23:04:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Cleanup stale code comments + +2012-09-17 18:00:16 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: GlViewPort() should use actual surface size + +2012-09-17 17:21:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Avoid reiniting EGL after the first time + +2012-09-17 13:44:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Use correct template caps + +2012-09-17 12:54:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix missing texture setup bits + +2012-09-17 11:57:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add error checking on eglSwapBuffers + +2012-09-17 11:40:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix stale&wrong 0.5 alpha blend + +2012-09-17 10:56:14 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add float precision specifier to fragment shader + This is required by GLES and fixes compilation of fragment + shader prog. + +2012-09-17 10:47:39 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add log reporting at shader compilation failure + +2012-09-16 22:43:38 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Add some missing checks on shader ops + - Check whether there is shader compiler support + and bail out otherwise. + - Add checks on compile and linking ops + +2012-09-14 20:49:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Fix setup chain logic + Mostly a procedural reordering. Idea is to avoid + trying to setup a surface without a display.This + change relies on the asumption that: + 1.- set_window_handle() can happen at any time + 2.- setcaps will never get called before _start() + is done. + If both conditions are meet the new procedure + should work as expected. + +2012-09-14 15:59:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: WIP: Reorder locking + +2012-09-13 23:23:08 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix xOverlay logic + Several fixes dealing with correct window + creation and set_handle() ops. Tested on + X11/mesa with internal window creation. + +2012-09-13 00:55:33 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Actually test EGL configs before claiming support + +2012-09-13 00:11:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Caps nego EGL fixes + - Fix alloc lol on format list: Asked for 2 slices and used 3. + - Reordered display & context init logic to prepare for actual + config checking before claiming support for a given format. + Change deals basically with setting up EGL display at start() + and choose an EGL config only at setcaps time. + +2012-09-12 22:11:39 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Caps nego. Start extending RGB support to a set. + +2012-09-12 16:19:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/eglgles/Makefile.am: + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix build of static plugin + +2012-09-12 09:28:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Drop wrong format test on _setcaps (draft leftover) + +2012-09-11 13:54:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Support RGB24 by default + +2012-09-11 13:51:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Instrument EGL error reporting + +2012-09-11 12:04:30 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Correctly return GstFlowReturn from render_and_display() + +2012-09-11 11:51:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Move VBO setup to it's own function + +2012-09-11 10:20:16 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix render_and_display logic + Switch procedure according to enabled rendering path + +2012-09-10 22:59:57 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + eglglessink: Fix sample launch line with disabled window creation + +2012-09-10 22:41:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + eglglessink: Rename stale android leftover + +2012-09-10 20:22:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/Makefile.am: + * ext/eglgles/gsteglglessink.c: + * ext/eglgles/gsteglglessink.h: + * ext/eglgles/gstvidroidsink.c: + * ext/eglgles/gstvidroidsink.h: + eglglessink: Move eglgles Sink to ext/ #2 + +2012-09-10 20:00:57 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + + * ext/eglgles/Android.mk: + * ext/eglgles/Makefile.am: + * ext/eglgles/gstvidroidsink.c: + * ext/eglgles/gstvidroidsink.h: + * ext/eglgles/video_platform_wrapper.c: + * ext/eglgles/video_platform_wrapper.h: + eglglessink: Move eglgles Sink to ext/ + +2012-10-18 14:03:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + opensles: Add the opensles plugin to the list of not ported plugins + +2012-10-18 13:56:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * sys/Makefile.am: + * sys/opensles/Makefile.am: + opensles: Integrate into build system + +2012-10-12 10:08:59 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + openslessink: Return 0 delay if the player object is in PAUSED state + +2012-10-01 12:54:15 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: fixes noise on seekeing + +2012-10-01 11:46:50 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: chain up on _clear_all + +2012-10-01 11:14:24 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: implement the ringbuffer clear_all vmethod too + +2012-10-01 10:59:08 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslessrc.c: + opensles: initial attempt to reduce the src latency + +2012-09-29 19:00:13 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + * sys/opensles/openslessink.c: + * sys/opensles/openslessrc.c: + opensles: sprinkle comments and cosmetic fixes + +2012-09-28 15:10:19 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: check for device outputs in the mixer + +2012-09-28 14:39:01 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: drop 48kHz sample rate + OpenSL ES implementation in Android is just a 'facade' API on top of + AudioFlinger which will downsample 48kHz into 44.1kHz before + delivering the audio to the underlaying hardware. + We found that it suffer some sort of underrun when the downsample + enters in action so relay on our good resampler to take care of that + and fix the clicks issue. And get an extra bonus of a lower latency. + +2012-09-27 19:24:50 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: change the defaults to use 20 ms ringbuffer segments + In my nexus7 seems that the internal min buffer size is 20 ms so make + our segments match. + +2012-09-27 18:33:09 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: ensure that we register the callback only in STOPPED + Fixes the error registering the callback on the PLAYING -> PAUSE -> + PLAYING state change sequence. + +2012-09-27 17:46:27 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: cap queue size + Just in case we want to tweak the sink behaviour with buffer-time and + latency-time properties cap the queue size to something reasonable. + +2012-09-27 17:32:14 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: sink to provide the audioclock by default + +2012-09-27 17:27:24 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: only drain half ringbuffer on start + At start drain half ringbuffer into the OpenSL so the writting/reading + pointers will start at half ringbuffer distance. + +2012-09-27 14:52:59 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: monitor some player events + +2012-09-27 07:22:47 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: rework around the _delay function + +2012-09-27 05:40:46 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: implement _delay function + +2012-09-27 04:00:28 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: refactor to behave more like other sinks + Reflect the queue in our own data buffer. + Drop the _commit hook that wasn't usefull. + Don't mess with the segsize/segtotal. + +2012-09-26 14:01:17 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: read player position and show it in the log + +2012-09-26 12:50:42 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: do not provide a clock in the sink element. + +2012-09-26 12:32:44 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: rework on start/stop operations and callback function handling + +2012-09-26 12:09:04 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: fixes 8 bit format which is unsigned on android. + +2012-09-25 19:25:01 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: attempt to reduce playback latency + +2012-09-25 18:04:27 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: drop _buffer_clear calls and refactor to a shared _enqueue_cb + +2012-09-21 17:04:14 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: use 0.25s segments in the sink to lower latency + +2012-09-21 16:11:42 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslessrc.c: + opensles: finish remaining bits for source element. + +2012-09-21 14:15:12 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslessink.c: + opensles: attempt to query device for capabilities + +2012-09-20 18:41:50 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + * sys/opensles/openslessink.c: + * sys/opensles/openslessink.h: + * sys/opensles/openslessrc.c: + opensles: add the mute property and handle volume/mute changes on the fly + +2012-09-20 18:04:29 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + * sys/opensles/openslessink.c: + * sys/opensles/openslessink.h: + opensles: make the volume property actually work + +2012-09-20 14:16:25 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + opensles: rework on the ringbufffer to properly clear segments + Make the segments bigger (1 second) as it seems to be the minimum size + we need to not introduce noise. + Sink works in my nexus 7 with rates from 8000 to 44100 and some noise + can be noticed on higger sample rates. + +2012-09-20 11:50:50 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/opensles.c: + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + * sys/opensles/openslessink.c: + * sys/opensles/openslessink.h: + * sys/opensles/openslessrc.c: + * sys/opensles/openslessrc.h: + opensles: fixes the license headers + +2012-09-20 10:41:50 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/openslesringbuffer.c: + opensles: produces expected output until ringbuffer wraps + Add some log messages. + Fixed a bit the _player_cb function and properly advance reding in the + ringbuffer. + Still produces noise when the ringbuffer wraps. + +2012-09-19 18:11:54 +0200 Josep Torra <n770galaxy@gmail.com> + + * sys/opensles/Makefile.am: + * sys/opensles/opensles.c: + * sys/opensles/openslesringbuffer.c: + * sys/opensles/openslesringbuffer.h: + * sys/opensles/openslessink.c: + * sys/opensles/openslessink.h: + * sys/opensles/openslessrc.c: + * sys/opensles/openslessrc.h: + opensles: Add initial draft implementation of OpenSL ES plugin. + Initial draft implementation for a OpenSL ES based plugin for Android + that provides audio src and sink. + +2012-10-18 09:24:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/Makefile.am: + androidmedia: Use correct variable name in Makefile.am + +2012-10-17 22:54:28 +0300 Raimo Järvi <raimo.jarvi@gmail.com> + + * sys/directsound/gstdirectsoundsrc.c: + directsoundsrc: Fix compiler warning + https://bugzilla.gnome.org/show_bug.cgi?id=673414 + +2012-10-17 17:34:26 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * ext/apexsink/gstapexsink.c: + * ext/assrender/gstassrender.c: + * ext/audiofile/gstafparse.c: + * ext/audiofile/gstafsink.c: + * ext/audiofile/gstafsrc.c: + * ext/bz2/gstbz2dec.c: + * ext/bz2/gstbz2enc.c: + * ext/cdaudio/gstcdaudio.c: + * ext/celt/gstceltdec.c: + * ext/celt/gstceltenc.c: + * ext/chromaprint/gstchromaprint.c: + * ext/cog/gstcogdownsample.c: + * ext/cog/gstcogmse.c: + * ext/cog/gstcogscale.c: + * ext/curl/gstcurlbasesink.c: + * ext/curl/gstcurlfilesink.c: + * ext/curl/gstcurlftpsink.c: + * ext/curl/gstcurlhttpsink.c: + * ext/curl/gstcurlsmtpsink.c: + * ext/curl/gstcurltlssink.c: + * ext/dc1394/gstdc1394.c: + * ext/dirac/gstdiracdec.cc: + * ext/dirac/gstdiracenc.cc: + * ext/directfb/dfbvideosink.c: + * ext/dts/gstdtsdec.c: + * ext/faac/gstfaac.c: + * ext/faad/gstfaad.c: + * ext/flite/gstflitetestsrc.c: + * ext/gme/gstgme.c: + * ext/gsettings/gstgsettingsaudiosink.c: + * ext/gsettings/gstgsettingsaudiosrc.c: + * ext/gsettings/gstgsettingsvideosink.c: + * ext/gsettings/gstgsettingsvideosrc.c: + * ext/gsm/gstgsmdec.c: + * ext/gsm/gstgsmenc.c: + * ext/jasper/gstjasperdec.c: + * ext/jasper/gstjasperenc.c: + * ext/kate/gstkatedec.c: + * ext/kate/gstkateenc.c: + * ext/kate/gstkateparse.c: + * ext/kate/gstkatetag.c: + * ext/kate/gstkatetiger.c: + * ext/libfame/gstlibfame.c: + * ext/libmms/gstmms.c: + * ext/mimic/gstmimdec.c: + * ext/mimic/gstmimenc.c: + * ext/modplug/gstmodplug.cc: + * ext/mpeg2enc/gstmpeg2enc.cc: + * ext/mplex/gstmplex.cc: + * ext/musepack/gstmusepackdec.c: + * ext/musicbrainz/gsttrm.c: + * ext/mythtv/gstmythtvsrc.c: + * ext/nas/nassink.c: + * ext/neon/gstneonhttpsrc.c: + * ext/ofa/gstofa.c: + * ext/openal/gstopenalsink.c: + * ext/openal/gstopenalsrc.c: + * ext/opencv/gstcvdilate.c: + * ext/opencv/gstcvequalizehist.c: + * ext/opencv/gstcverode.c: + * ext/opencv/gstcvlaplace.c: + * ext/opencv/gstcvsmooth.c: + * ext/opencv/gstcvsobel.c: + * ext/opencv/gstedgedetect.c: + * ext/opencv/gstfaceblur.c: + * ext/opencv/gstfacedetect.c: + * ext/opencv/gstmotioncells.c: + * ext/opencv/gstpyramidsegment.c: + * ext/opencv/gsttemplatematch.c: + * ext/opencv/gsttextoverlay.c: + * ext/opus/gstopusdec.c: + * ext/opus/gstopusenc.c: + * ext/opus/gstopusparse.c: + * ext/opus/gstrtpopusdepay.c: + * ext/opus/gstrtpopuspay.c: + * ext/resindvd/gstmpegdemux.c: + * ext/resindvd/resindvdbin.c: + * ext/resindvd/resindvdsrc.c: + * ext/resindvd/rsndec.c: + * ext/resindvd/rsnparsetter.c: + * ext/rsvg/gstrsvgdec.c: + * ext/rsvg/gstrsvgoverlay.c: + * ext/rtmp/gstrtmpsink.c: + * ext/rtmp/gstrtmpsrc.c: + * ext/schroedinger/gstschrodec.c: + * ext/schroedinger/gstschroenc.c: + * ext/sdl/sdlaudiosink.c: + * ext/sdl/sdlvideosink.c: + * ext/snapshot/gstsnapshot.c: + * ext/sndfile/gstsfsink.c: + * ext/sndfile/gstsfsrc.c: + * ext/sndio/sndiosink.c: + * ext/sndio/sndiosrc.c: + * ext/soundtouch/gstbpmdetect.cc: + * ext/soundtouch/gstpitch.cc: + * ext/spandsp/gstspanplc.c: + * ext/spc/gstspc.c: + * ext/swfdec/gstswfdec.c: + * ext/teletextdec/gstteletextdec.c: + * ext/timidity/gsttimidity.c: + * ext/timidity/gstwildmidi.c: + * ext/voaacenc/gstvoaacenc.c: + * ext/voamrwbenc/gstvoamrwbenc.c: + * ext/wayland/gstwaylandsink.c: + * ext/xvid/gstxviddec.c: + * ext/xvid/gstxvidenc.c: + * ext/zbar/gstzbar.c: + * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c: + * gst/adpcmdec/adpcmdec.c: + * gst/adpcmenc/adpcmenc.c: + * gst/aiff/aiffmux.c: + * gst/aiff/aiffparse.c: + * gst/asfmux/gstasfmux.c: + * gst/asfmux/gstasfparse.c: + * gst/asfmux/gstrtpasfpay.c: + * gst/audiobuffer/gstaudioringbuffer.c: + * gst/audiovisualizers/gstspacescope.c: + * gst/audiovisualizers/gstspectrascope.c: + * gst/audiovisualizers/gstsynaescope.c: + * gst/audiovisualizers/gstwavescope.c: + * gst/autoconvert/gstautoconvert.c: + * gst/autoconvert/gstautovideoconvert.c: + * gst/bayer/gstbayer2rgb.c: + * gst/bayer/gstrgb2bayer.c: + * gst/camerabin2/gstcamerabin2.c: + * gst/camerabin2/gstviewfinderbin.c: + * gst/camerabin2/gstwrappercamerabinsrc.c: + * gst/cdxaparse/gstcdxaparse.c: + * gst/cdxaparse/gstvcdparse.c: + * gst/coloreffects/gstchromahold.c: + * gst/coloreffects/gstcoloreffects.c: + * gst/dataurisrc/gstdataurisrc.c: + * gst/dccp/gstdccpclientsink.c: + * gst/dccp/gstdccpclientsrc.c: + * gst/dccp/gstdccpserversink.c: + * gst/dccp/gstdccpserversrc.c: + * gst/debugutils/fpsdisplaysink.c: + * gst/debugutils/gstchecksumsink.c: + * gst/debugutils/gstchopmydata.c: + * gst/debugutils/gstcompare.c: + * gst/debugutils/gstdebugspy.c: + * gst/dtmf/gstdtmfdetect.c: + * gst/dtmf/gstdtmfsrc.c: + * gst/dtmf/gstrtpdtmfdepay.c: + * gst/dtmf/gstrtpdtmfsrc.c: + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + * gst/dvdspu/gstdvdspu.c: + * gst/faceoverlay/gstfaceoverlay.c: + * gst/festival/gstfestival.c: + * gst/fieldanalysis/gstfieldanalysis.c: + * gst/freeverb/gstfreeverb.c: + * gst/games/gstpuzzle.c: + * gst/gaudieffects/gstburn.c: + * gst/gaudieffects/gstchromium.c: + * gst/gaudieffects/gstdilate.c: + * gst/gaudieffects/gstdodge.c: + * gst/gaudieffects/gstexclusion.c: + * gst/gaudieffects/gstgaussblur.c: + * gst/gaudieffects/gstsolarize.c: + * gst/geometrictransform/gstbulge.c: + * gst/geometrictransform/gstcircle.c: + * gst/geometrictransform/gstdiffuse.c: + * gst/geometrictransform/gstfisheye.c: + * gst/geometrictransform/gstkaleidoscope.c: + * gst/geometrictransform/gstmarble.c: + * gst/geometrictransform/gstmirror.c: + * gst/geometrictransform/gstpinch.c: + * gst/geometrictransform/gstrotate.c: + * gst/geometrictransform/gstsphere.c: + * gst/geometrictransform/gstsquare.c: + * gst/geometrictransform/gststretch.c: + * gst/geometrictransform/gsttunnel.c: + * gst/geometrictransform/gsttwirl.c: + * gst/geometrictransform/gstwaterripple.c: + * gst/hdvparse/gsthdvparse.c: + * gst/hls/gsthlsdemux.c: + * gst/hls/gsthlssink.c: + * gst/id3tag/gstid3mux.c: + * gst/inter/gstinteraudiosink.c: + * gst/inter/gstinteraudiosrc.c: + * gst/inter/gstintersubsink.c: + * gst/inter/gstintersubsrc.c: + * gst/inter/gstintervideosink.c: + * gst/inter/gstintervideosrc.c: + * gst/interlace/gstinterlace.c: + * gst/ivfparse/gstivfparse.c: + * gst/jp2kdecimator/gstjp2kdecimator.c: + * gst/jpegformat/gstjifmux.c: + * gst/jpegformat/gstjpegparse.c: + * gst/librfb/gstrfbsrc.c: + * gst/liveadder/liveadder.c: + * gst/mixmatrix/mixmatrix.c: + * gst/mpeg1sys/gstmpeg1systemencode.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegpsmux/mpegpsmux.c: + * gst/mpegtsdemux/tsdemux.c: + * gst/mpegtsmux/mpegtsmux.c: + * gst/mve/gstmvedemux.c: + * gst/mve/gstmvemux.c: + * gst/mxf/mxfdemux.c: + * gst/mxf/mxfmux.c: + * gst/nsf/gstnsf.c: + * gst/nuvdemux/gstnuvdemux.c: + * gst/overlay/gstoverlay.c: + * gst/patchdetect/gstpatchdetect.c: + * gst/pcapparse/gstirtspparse.c: + * gst/pcapparse/gstpcapparse.c: + * gst/pnm/gstpnmdec.c: + * gst/pnm/gstpnmenc.c: + * gst/rawparse/gstaudioparse.c: + * gst/rawparse/gstvideoparse.c: + * gst/real/gstrealaudiodec.c: + * gst/real/gstrealvideodec.c: + * gst/removesilence/gstremovesilence.c: + * gst/rtjpeg/gstrtjpegdec.c: + * gst/rtjpeg/gstrtjpegenc.c: + * gst/rtpmux/gstrtpdtmfmux.c: + * gst/rtpmux/gstrtpmux.c: + * gst/rtpvp8/gstrtpvp8depay.c: + * gst/rtpvp8/gstrtpvp8pay.c: + * gst/scaletempo/gstscaletempo.c: + * gst/sdi/gstsdidemux.c: + * gst/sdi/gstsdimux.c: + * gst/sdp/gstsdpdemux.c: + * gst/segmentclip/gstaudiosegmentclip.c: + * gst/segmentclip/gstvideosegmentclip.c: + * gst/siren/gstsirendec.c: + * gst/siren/gstsirenenc.c: + * gst/smooth/gstsmooth.c: + * gst/speed/gstspeed.c: + * gst/stereo/gststereo.c: + * gst/subenc/gstsrtenc.c: + * gst/subenc/gstwebvttenc.c: + * gst/tta/gstttadec.c: + * gst/tta/gstttaparse.c: + * gst/vbidec/gstvbidec.c: + * gst/videofilters/gstscenechange.c: + * gst/videofilters/gstzebrastripe.c: + * gst/videomeasure/gstvideomeasure_collector.c: + * gst/videomeasure/gstvideomeasure_ssim.c: + * gst/videoparsers/gstdiracparse.c: + * gst/videoparsers/gsth263parse.c: + * gst/videoparsers/gsth264parse.c: + * gst/videoparsers/gstmpeg4videoparse.c: + * gst/videoparsers/gstmpegvideoparse.c: + * gst/videosignal/gstvideoanalyse.c: + * gst/videosignal/gstvideodetect.c: + * gst/videosignal/gstvideomark.c: + * gst/vmnc/vmncdec.c: + * gst/y4m/gsty4mdec.c: + * sys/acmenc/acmenc.c: + * sys/acmmp3dec/acmmp3dec.c: + * sys/avc/gstavcsrc.cpp: + * sys/cdrom/gstcdplayer.c: + * sys/decklink/gstdecklinksink.cpp: + * sys/decklink/gstdecklinksrc.cpp: + * sys/directdraw/gstdirectdrawsink.c: + * sys/dshowsrcwrapper/gstdshowaudiosrc.cpp: + * sys/dshowsrcwrapper/gstdshowvideosrc.cpp: + * sys/dshowvideosink/dshowvideosink.cpp: + * sys/dvb/dvbbasebin.c: + * sys/dvb/gstdvbsrc.c: + * sys/dxr3/dxr3audiosink.c: + * sys/dxr3/dxr3spusink.c: + * sys/dxr3/dxr3videosink.c: + * sys/fbdev/gstfbdevsink.c: + * sys/linsys/gstlinsyssdisink.c: + * sys/linsys/gstlinsyssdisrc.c: + * sys/osxvideo/osxvideosrc.c: + * sys/pvr2d/gstpvrvideosink.c: + * sys/qcam/gstqcamsrc.c: + * sys/shm/gstshmsink.c: + * sys/shm/gstshmsrc.c: + * sys/uvch264/gstuvch264_mjpgdemux.c: + * sys/uvch264/gstuvch264_src.c: + * sys/vcd/vcdsrc.c: + * sys/vdpau/gstvdpsink.c: + * sys/vdpau/gstvdpvideopostprocess.c: + * sys/vdpau/h264/gstvdph264dec.c: + * sys/vdpau/mpeg/gstvdpmpegdec.c: + * sys/vdpau/mpeg4/gstvdpmpeg4dec.c: + * sys/wasapi/gstwasapisink.c: + * sys/wasapi/gstwasapisrc.c: + * sys/wininet/gstwininetsrc.c: + * sys/winks/gstksvideosrc.c: + * sys/winscreencap/gstdx9screencapsrc.c: + * sys/winscreencap/gstgdiscreencapsrc.c: + * tests/check/elements/baseaudiovisualizer.c: + * tests/check/elements/camerabin.c: + * tools/gst-element-maker: + Use gst_element_class_set_static_metadata() + where possible. Avoids some string copies. Also re-indent + some stuff. Also some indent fixes here and there. + +2012-04-03 12:09:19 +0300 Raimo Järvi <raimo.jarvi@gmail.com> + + * configure.ac: + * sys/directsound/gstdirectsoundsrc.c: + directsoundsrc: port to 1.0 + https://bugzilla.gnome.org/show_bug.cgi?id=673414 + +2012-10-16 11:38:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: Fix unitialized variable compiler warning + +2012-10-16 11:34:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + Revert "configure: fix build" + This reverts commit 5c1c35290d7f72a4bc016e8aef276d8c1bdcf37b. + +2012-10-16 11:31:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/Makefile.am: + androidmedia: Add missing file + +2012-10-16 11:32:00 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * configure.ac: + configure: fix build + +2012-10-15 16:35:57 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + androidmedia: Rename plugin + +2012-10-15 16:29:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + androidmedia: Add to the not yet ported plugins + +2012-10-15 16:05:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * sys/androidmedia/gstamcvideodec.h: + androidmedia: Make everything buildable + +2012-10-15 14:36:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Don't try to use the NVidia DRM codecs + +2012-10-09 10:56:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Try to handle format changes more gracefully + And make stop() faster and more robust + +2012-10-09 10:27:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcaudiodec.h: + Add workaround for Google MP3 decoder outputting garbage in first output buffer + And assume one decoded input frame per output buffer to fix timestamp + handling by the base class. + +2012-10-09 10:14:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Also add some more output format checks to the audio decoder + +2012-10-09 10:13:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Check output format metadata some more + And implement workaround for NVidia Tegra 3 not setting the slice_height. + Thanks to Josep Torra for debugging this issue. + +2012-10-05 15:09:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Add some more default channel layouts, these should be good for AAC at least + +2012-10-05 14:56:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Don't set timestamps, the baseclass handles this for us anyway + +2012-10-03 10:06:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + List profiles in reverse to minimize caps + +2012-10-03 09:56:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Iterate levels in reverse order to minimize caps + +2012-10-03 09:51:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Merge structures into caps instead of appending them + +2012-09-25 10:32:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Use orc_memcpy() instead of memcpy() as it should be faster for larger memory areas + +2012-09-24 15:32:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Add support for audio/mpeg-L2 for the Nexus 7 + +2012-09-24 15:14:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Add support for MPEG1/2 video + +2012-09-19 14:52:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Ignore the *law and Vorbis decoders + They are broken unfortunately. + +2012-09-19 11:20:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Add FIXME comment for not handling odd widths/height with the TI hardware decoders + Must likely an issue with the codec itself though. + +2012-09-19 09:47:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Fix handling of I420 buffers with odd width + +2012-09-18 15:38:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Only mpegversion=4 is supported for AAC + +2012-09-18 15:28:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Remove some obsolete FIXMEs + +2012-09-17 13:46:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Fix flushing logic to unbreak handling of flushing seeks + +2012-09-17 12:24:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Fix chroma stride for I420 stride/crop conversion + +2012-09-17 11:28:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Fix Vorbis decoding + +2012-09-14 16:17:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Wait at most 100ms for dequeueing a buffer, and retry after that + Some codecs don't fail the dequeueing if the codec is flushed, + causing deadlocks when shutting down the element. + +2012-09-14 16:11:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Release output buffers a bit earlier + +2012-09-14 16:11:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Keep another reference of the input buffer in handle_frame() + It might be unreffed in the meantime by the other thread due + to finish_frame(). + +2012-09-14 16:10:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Pass -1 as number of frames to the base class + This will automatically do the right thing if timestamps are good enough + +2012-09-14 16:09:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Use correct buffer variable + +2012-09-14 14:43:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcvideodec.c: + Always pass 1 as number of frames to finish_frame() + +2012-09-14 14:42:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Correctly remember number of channels and samplerate + +2012-09-14 14:42:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Don't unref input buffer from handle_frame(), it's owned by the baseclass + +2012-09-14 13:31:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Remove invalid GST_ERROR() call + +2012-09-14 13:27:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Only try to get the channel-mask if it is set + +2012-09-14 13:25:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Add support for FLAC + +2012-09-14 13:24:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Fix src template caps + +2012-09-14 13:16:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcaudiodec.c: + Fix plugin initialization + +2012-09-14 13:05:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc-constants.h: + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + * sys/androidmedia/gstamcaudiodec.c: + * sys/androidmedia/gstamcaudiodec.h: + Add support for audio decoders, completely untested so far + +2012-09-14 12:07:18 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Only set the SYNC_FRAME flag on the first buffer if we need to split the input + +2012-09-12 14:30:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc-constants.h: + * sys/androidmedia/gstamc.c: + Ignore codecs with unknown color formats for stability purposes + They can be registered nonetheless if an environment variable + or compile-time #define is set. + +2012-09-12 13:48:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Implement cropping and correctly handle the different color formats + +2012-09-11 16:30:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Really implement stride conversion for NV12 too + +2012-09-11 16:24:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Implement stride-conversion for I420 and NV12 + +2012-09-11 15:56:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Fix typo in previous commit + +2012-09-11 15:49:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Don't allow using non-Google codecs if we started the Java VM ourselves + Hardware codecs, e.g. the TI ones, only work in processes that had their + Java VM started via the non-public AndroidRuntime class. + +2012-09-11 14:30:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Rename to amc from androidmediacodec everywhere + +2012-09-11 13:08:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Improve debug output + +2012-09-11 12:39:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + * sys/androidmedia/gstamcvideodec.c: + Print the MediaFormats we get in the debug logs + +2012-09-10 15:31:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Improve debug output + +2012-09-10 15:30:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + * sys/androidmedia/gstamcvideodec.c: + Improve level/profile handling + +2012-09-10 13:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Allow registering as static plugin with the GStreamer SDK API + +2012-09-10 13:30:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + If the buffer sizes are the same, just memcpy() to the output buffers + +2012-09-10 12:56:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Correctly convert timestamps between us and ns + +2012-09-07 16:11:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Set SYNC_FRAME flag on buffers if required + +2012-09-07 14:22:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Improve flushing + +2012-09-07 13:44:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Wait at most 0.5 seconds for getting an input buffer for EOS + +2012-09-07 13:42:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Correctly check for flushing + +2012-09-06 17:24:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Retry for negative return values when dequeueing buffers + +2012-09-06 17:07:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Fix refcount bug + +2012-09-06 17:07:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + The MediaCodec API is apparently not threadsafe between stop() and release() + So we don't call release() and just hope for the GC to release the + codec in time. + +2012-09-06 15:44:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Fix plugin cache creation + +2012-08-24 04:35:44 -0700 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Cache the codec informations inside the registry + Otherwise we would always load all codecs during plugin initialization + which can take quite some time (because of hardware) and also loads + lots of shared libraries (which number is limited by 64 in Android). + +2012-08-24 09:20:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Properly attach and detach the current threads to the Java VM + Attaching a thread after it was detached will cause segfaults, + as such we use a pthread_key_t to keep track of the JNIEnv* of + the attached threads and in the destructor (i.e. when the + thread exits) we detach the thread. + +2012-08-23 17:31:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Don't get the output format from the codec before it is ready + Apparently things are crashing otherwise. + +2012-08-23 17:31:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Get the input buffers from the codec + +2012-08-23 17:30:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Fix JNI method call signatures + +2012-08-23 17:30:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Initialize the VM will full debugging for now + +2012-08-23 13:53:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Use NewStringUTF() instead of our own method for that + +2012-08-23 12:30:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Add the TI format to the mapping table too + +2012-08-23 12:29:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc-constants.h: + * sys/androidmedia/gstamc.c: + Add another TI specific OpenMAX color format + +2012-08-22 19:30:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamcvideodec.c: + Fixes to element/elementfactory creation + +2012-08-22 19:12:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Some bugfixes to the codec scanning code + Also it's not possible to attach a thread after it was + detached once. As such we simply never detach any thread + at all now. + +2012-08-22 18:35:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + Fix some compilation errors + +2012-08-20 14:13:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamcvideodec.c: + Add important FIXME + +2012-08-20 13:45:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamcvideodec.c: + * sys/androidmedia/gstamcvideodec.h: + Add video decoder element + +2012-08-20 13:45:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + Add some more JNI wrapping + +2012-08-20 13:42:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc-constants.h: + Add some missing color format constants + +2012-08-16 15:18:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc-constants.h: + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + Implement basic wrapper around MediaCodec API + Ideally nothing else will be needed from the elements later. + +2012-08-15 18:23:34 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + Some more WIP + Scanning all codecs now and have data structures for holding codec + information and codec contexts. Also function declarations for + working with them. + +2012-08-14 13:20:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/androidmedia/gstamc.c: + * sys/androidmedia/gstamc.h: + Initial commit + +2012-10-15 15:53:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * sys/Makefile.am: + androidmedia: Add androidmedia plugin + +2012-10-15 11:45:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: And fix another deadlock caused by the update thread not correctly shutting down + Conflicts: + gst/hls/gsthlsdemux.c + +2012-10-15 11:02:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsturidownloader.c: + hlsdemux: Also hold the mutex before signalling the condition variable + Conflicts: + gst/hls/gsturidownloader.c + +2012-10-15 10:53:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Also cancel the downloader before stopping the playlist update task + +2012-10-15 10:38:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Only lock the mutex when it's not locked already + Conflicts: + gst/hls/gsthlsdemux.c + +2012-10-15 10:32:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Fix another race condition by holding the mutex that the condition variable uses + Conflicts: + gst/hls/gsthlsdemux.c + +2012-10-15 09:47:35 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Port some things from the last commits + +2012-10-15 09:35:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Never ever stop a task from the task function + This will deadlock. Also make sure to always post an error message + if required before pausing tasks from the task function. + Should fix another bunch of deadlocks. + Conflicts: + gst/hls/gsthlsdemux.c + +2012-10-15 09:24:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Fix lots of deadlocks caused by race conditions in the task state handling + +2012-10-12 10:57:44 +0400 Sergey N. Gorshkov <sng@setevisor.tv> + + * ext/rtmp/gstrtmpsink.c: + rtmpsink: handle RTMP_Write() return value correctly + Error might also be negative (-1). Unclear if 0 should + be fatal as well though. + https://bugzilla.gnome.org/show_bug.cgi?id=681111 + https://bugzilla.gnome.org/show_bug.cgi?id=686009 + +2012-10-12 23:09:06 +0100 David Régade <dregade@viewsurf.com> + + * ext/rtmp/gstrtmpsink.c: + rtmpsink: fix memory leak from URI verification via RTMP_ParseURL() + In gst_rtmp_sink_uri_set_uri(), a test is performed in order + to be sure uri is correct for librtmp. This test calls + RTMP_ParseURL with 3 AVal pointers as parameters: host, + playpath and app. + AVal is a struct with a char* + int. After RTMP_ParseURL call, + host.av_val and app.av_val both refer a substring of "uri". But + playpath.av_val may be the result of a malloc so it needs to + be freed. + https://bugzilla.gnome.org/show_bug.cgi?id=681459 + +2012-10-12 22:33:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: advance stream time when sending GAP event + +2012-10-12 22:33:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: send language info downstream if available + ... as extracted from dvd event. + +2012-10-12 22:31:53 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: remove obsolete struct field + +2012-10-12 12:28:44 -0700 Michael Smith <msmith@rdio.com> + + * gst/rawparse/gstaudioparse.c: + audioparse: Set framesize and properties correctly when taking format from caps. + +2012-10-12 17:51:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: tweak flow return aggregation + +2012-10-12 15:44:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: handle upstream TIME segments + +2012-10-12 15:07:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: handle and combine downstream flow return + +2012-10-12 14:50:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: handle new style dvd event + +2012-10-11 15:29:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: do not add pad after no-more-pads + +2012-10-11 15:27:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: clean up segment sending + ... to use the src_segment as a basis for the sent segment, + thereby properly conveying accumulated base_time etc. + Also ensure src_segment is only adjusted once, so that + all downstream segments are identical to avoid stream + misalignment. + +2012-10-11 12:07:46 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: send GAP event rather than segment updates + +2012-10-11 11:51:50 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: refactor segment sending + +2012-10-11 11:30:44 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: refactor init and reset + +2012-10-11 11:04:33 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: no more segment closing in 1.0 + +2012-10-11 11:03:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: clean up some debug statements + +2012-10-11 15:31:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/dts/gstdtsdec.c: + dtsdec: fix buffer parsing + ... to avoid feeding empty buffers to decoder. + +2012-10-12 15:26:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + * gst/mpegtsdemux/tsdemux.c: + mpegtsdemux: First push EOS, then destroy all programs + And also properly remove the program from the subclass + +2012-10-12 15:09:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + hlsdemux: Fix invalid read + +2012-10-10 18:18:03 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * gst/videoparsers/gstmpegvideoparse.c: + mpegvideoparse: signal interlacing properly in video caps + The field is called "interlace-mode" mode now and is a string. + https://bugzilla.gnome.org/show_bug.cgi?id=685895 + +2012-10-10 14:11:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/apexsink/gstapexsink.c: + * gst/debugutils/fpsdisplaysink.c: + * gst/inter/gstintertest.c: + * tests/check/elements/dataurisrc.c: + * tools/gst-app-maker: + replace some playbin2 -> playbin + +2012-10-10 09:58:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/videoparsers/gstmpeg4videoparse.c: + mpeg4videoparse: reset frame parser after parsing caps codec data + ... so as to arrange for a proper fresh state upon first frame. + +2012-10-10 09:48:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * common: + common: Update to the right commit again + Was accidentially reverted to an older version in the last commit. + +2012-10-09 23:00:14 -0700 Michael Smith <msmith@rdio.com> + + * gst/rawparse/gstaudioparse.c: + * gst/rawparse/gstaudioparse.h: + audioparse: add a mode where the caps are taken from the sink pad, and thus audioparse is only performing timestamping. + +2012-10-09 21:19:15 -0700 Michael Smith <msmith@rdio.com> + + * common: + * gst/videoparsers/gstmpegvideoparse.c: + mpegvideoparse: reset frame parser after parsing codec_data buffer in caps, to avoid not correctly parsing the full first frame. + +2012-10-09 13:53:19 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/videoparsers/gstmpeg4videoparse.c: + * gst/videoparsers/gstmpeg4videoparse.h: + mpeg4videoparse: properly mark config data presence + ... which we allow to start at VisualObjectSequence or + at VideoObject. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=685709 + +2012-10-08 12:38:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/fieldanalysis/gstfieldanalysis.c: + fieldanalysis: Fix unitiailized variable compiler warning + And also use the pad's default event function instead + of just pushing to the peerpad. This makes sure any + default handling of events is called. + +2012-10-08 12:23:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + fieldanalysis: Remove from the NONPORTED plugins list + It's supposed to be ported in 1.0.1 already. + +2012-10-07 17:06:39 +0100 Tim-Philipp Müller <tim@centricular.net> + + * docs/Makefile.am: + docs: add 'make upload' target for docs/ for new-release script + +2012-10-07 17:03:45 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + * docs/plugins/gst-plugins-bad-plugins.args: + * docs/plugins/inspect/plugin-adpcmdec.xml: + * docs/plugins/inspect/plugin-adpcmenc.xml: + * docs/plugins/inspect/plugin-asfmux.xml: + * docs/plugins/inspect/plugin-assrender.xml: + * docs/plugins/inspect/plugin-audiovisualizers.xml: + * docs/plugins/inspect/plugin-autoconvert.xml: + * docs/plugins/inspect/plugin-bayer.xml: + * docs/plugins/inspect/plugin-bz2.xml: + * docs/plugins/inspect/plugin-camerabin.xml: + * docs/plugins/inspect/plugin-celt.xml: + * docs/plugins/inspect/plugin-chromaprint.xml: + * docs/plugins/inspect/plugin-coloreffects.xml: + * docs/plugins/inspect/plugin-curl.xml: + * docs/plugins/inspect/plugin-dataurisrc.xml: + * docs/plugins/inspect/plugin-debugutilsbad.xml: + * docs/plugins/inspect/plugin-dtmf.xml: + * docs/plugins/inspect/plugin-dtsdec.xml: + * docs/plugins/inspect/plugin-dvb.xml: + * docs/plugins/inspect/plugin-dvbsuboverlay.xml: + * docs/plugins/inspect/plugin-dvdspu.xml: + * docs/plugins/inspect/plugin-faac.xml: + * docs/plugins/inspect/plugin-faad.xml: + * docs/plugins/inspect/plugin-festival.xml: + * docs/plugins/inspect/plugin-flite.xml: + * docs/plugins/inspect/plugin-fragmented.xml: + * docs/plugins/inspect/plugin-gaudieffects.xml: + * docs/plugins/inspect/plugin-gdp.xml: + * docs/plugins/inspect/plugin-geometrictransform.xml: + * docs/plugins/inspect/plugin-gmedec.xml: + * docs/plugins/inspect/plugin-gsm.xml: + * docs/plugins/inspect/plugin-gstsiren.xml: + * docs/plugins/inspect/plugin-id3tag.xml: + * docs/plugins/inspect/plugin-inter.xml: + * docs/plugins/inspect/plugin-interlace.xml: + * docs/plugins/inspect/plugin-jpegformat.xml: + * docs/plugins/inspect/plugin-liveadder.xml: + * docs/plugins/inspect/plugin-mimic.xml: + * docs/plugins/inspect/plugin-mms.xml: + * docs/plugins/inspect/plugin-modplug.xml: + * docs/plugins/inspect/plugin-mpeg2enc.xml: + * docs/plugins/inspect/plugin-mpegpsdemux.xml: + * docs/plugins/inspect/plugin-mpegtsdemux.xml: + * docs/plugins/inspect/plugin-mpegtsmux.xml: + * docs/plugins/inspect/plugin-mpg123.xml: + * docs/plugins/inspect/plugin-mplex.xml: + * docs/plugins/inspect/plugin-opencv.xml: + * docs/plugins/inspect/plugin-pcapparse.xml: + * docs/plugins/inspect/plugin-pnm.xml: + * docs/plugins/inspect/plugin-rawparse.xml: + * docs/plugins/inspect/plugin-removesilence.xml: + * docs/plugins/inspect/plugin-resindvd.xml: + * docs/plugins/inspect/plugin-rtmp.xml: + * docs/plugins/inspect/plugin-rtpmux.xml: + * docs/plugins/inspect/plugin-rtpvp8.xml: + * docs/plugins/inspect/plugin-scaletempo.xml: + * docs/plugins/inspect/plugin-schro.xml: + * docs/plugins/inspect/plugin-sdp.xml: + * docs/plugins/inspect/plugin-segmentclip.xml: + * docs/plugins/inspect/plugin-shm.xml: + * docs/plugins/inspect/plugin-smooth.xml: + * docs/plugins/inspect/plugin-soundtouch.xml: + * docs/plugins/inspect/plugin-spandsp.xml: + * docs/plugins/inspect/plugin-speed.xml: + * docs/plugins/inspect/plugin-videoparsersbad.xml: + * docs/plugins/inspect/plugin-voaacenc.xml: + * docs/plugins/inspect/plugin-voamrwbenc.xml: + * docs/plugins/inspect/plugin-waylandsink.xml: + * docs/plugins/inspect/plugin-y4mdec.xml: + * docs/plugins/inspect/plugin-zbar.xml: + * win32/common/config.h: + Back to development (bug fixing) + === release 1.0.1 === -2012-10-07 Tim-Philipp Müller <tim@centricular.net> +2012-10-07 15:57:03 +0100 Tim-Philipp Müller <tim@centricular.net> + * ChangeLog: + * NEWS: + * RELEASE: * configure.ac: - releasing 1.0.1 + * docs/plugins/gst-plugins-bad-plugins.args: + * docs/plugins/gst-plugins-bad-plugins.hierarchy: + * docs/plugins/inspect/plugin-adpcmdec.xml: + * docs/plugins/inspect/plugin-adpcmenc.xml: + * docs/plugins/inspect/plugin-asfmux.xml: + * docs/plugins/inspect/plugin-assrender.xml: + * docs/plugins/inspect/plugin-audiovisualizers.xml: + * docs/plugins/inspect/plugin-autoconvert.xml: + * docs/plugins/inspect/plugin-bayer.xml: + * docs/plugins/inspect/plugin-bz2.xml: + * docs/plugins/inspect/plugin-camerabin.xml: + * docs/plugins/inspect/plugin-celt.xml: + * docs/plugins/inspect/plugin-chromaprint.xml: + * docs/plugins/inspect/plugin-coloreffects.xml: + * docs/plugins/inspect/plugin-curl.xml: + * docs/plugins/inspect/plugin-dataurisrc.xml: + * docs/plugins/inspect/plugin-debugutilsbad.xml: + * docs/plugins/inspect/plugin-dtmf.xml: + * docs/plugins/inspect/plugin-dtsdec.xml: + * docs/plugins/inspect/plugin-dvb.xml: + * docs/plugins/inspect/plugin-dvbsuboverlay.xml: + * docs/plugins/inspect/plugin-dvdspu.xml: + * docs/plugins/inspect/plugin-faac.xml: + * docs/plugins/inspect/plugin-faad.xml: + * docs/plugins/inspect/plugin-festival.xml: + * docs/plugins/inspect/plugin-flite.xml: + * docs/plugins/inspect/plugin-fragmented.xml: + * docs/plugins/inspect/plugin-gaudieffects.xml: + * docs/plugins/inspect/plugin-gdp.xml: + * docs/plugins/inspect/plugin-geometrictransform.xml: + * docs/plugins/inspect/plugin-gmedec.xml: + * docs/plugins/inspect/plugin-gsm.xml: + * docs/plugins/inspect/plugin-gstsiren.xml: + * docs/plugins/inspect/plugin-id3tag.xml: + * docs/plugins/inspect/plugin-inter.xml: + * docs/plugins/inspect/plugin-interlace.xml: + * docs/plugins/inspect/plugin-jpegformat.xml: + * docs/plugins/inspect/plugin-liveadder.xml: + * docs/plugins/inspect/plugin-mimic.xml: + * docs/plugins/inspect/plugin-mms.xml: + * docs/plugins/inspect/plugin-modplug.xml: + * docs/plugins/inspect/plugin-mpeg2enc.xml: + * docs/plugins/inspect/plugin-mpegpsdemux.xml: + * docs/plugins/inspect/plugin-mpegtsdemux.xml: + * docs/plugins/inspect/plugin-mpegtsmux.xml: + * docs/plugins/inspect/plugin-mpg123.xml: + * docs/plugins/inspect/plugin-mplex.xml: + * docs/plugins/inspect/plugin-opencv.xml: + * docs/plugins/inspect/plugin-pcapparse.xml: + * docs/plugins/inspect/plugin-pnm.xml: + * docs/plugins/inspect/plugin-rawparse.xml: + * docs/plugins/inspect/plugin-removesilence.xml: + * docs/plugins/inspect/plugin-resindvd.xml: + * docs/plugins/inspect/plugin-rtmp.xml: + * docs/plugins/inspect/plugin-rtpmux.xml: + * docs/plugins/inspect/plugin-rtpvp8.xml: + * docs/plugins/inspect/plugin-scaletempo.xml: + * docs/plugins/inspect/plugin-schro.xml: + * docs/plugins/inspect/plugin-sdp.xml: + * docs/plugins/inspect/plugin-segmentclip.xml: + * docs/plugins/inspect/plugin-shm.xml: + * docs/plugins/inspect/plugin-smooth.xml: + * docs/plugins/inspect/plugin-soundtouch.xml: + * docs/plugins/inspect/plugin-spandsp.xml: + * docs/plugins/inspect/plugin-speed.xml: + * docs/plugins/inspect/plugin-videoparsersbad.xml: + * docs/plugins/inspect/plugin-voaacenc.xml: + * docs/plugins/inspect/plugin-voamrwbenc.xml: + * docs/plugins/inspect/plugin-waylandsink.xml: + * docs/plugins/inspect/plugin-y4mdec.xml: + * docs/plugins/inspect/plugin-zbar.xml: + * gst-plugins-bad.doap: + * win32/common/config.h: + Release 1.0.1 2012-10-06 14:57:54 +0100 Tim-Philipp Müller <tim@centricular.net> diff --git a/Makefile.in b/Makefile.in index 2c9fad89..2c40f82a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -1,4 +1,41 @@ -This is GStreamer Bad Plugins 1.0.1 +This is GStreamer Bad Plugins 1.0.2 + +Changes since 1.0.1: + + * Parallel installability with 0.10.x series + * audioparse: add mode where caps are taken from upstream and only timestamping is performed + * directsoundsrc: port to 1.0 + * dtsdec: fix buffer parsing + * fieldanalysis: actually build (remove from the NONPORTED plugins list) + * hlsdemux: numerous thread-safety fixes, and an invalid memory access fix + * mpegdemux: handle and combine downstream flow returns better + * mpegdemux: make work properly with dvdreadsrc + * mpegtsdemux: PES header parsing fixes; fix potential crash + * mpegtsdemux: First push EOS, then destroy all programs + * mpegtsmux: fix buffer refcounting issue + * mpeg4videoparse: correctly parse the full first frame; properly mark config data presence + * mpegvideoparse: correctly parse the full first frame; signal interlacing properly in caps + * pitch: fix for start times > 0 (e.g. ogg streaming) + * rtmpsink: handle RTMP_Write() return value correctly, fix memory leak + * scaletempo: fix timestamp and latency query handling, and event leak + * subenc: port to 1.0 + +Bugs fixed since 1.0.1: + + * 623387 : mpegdemux: check base_time before calculating new_start + * 673414 : directsoundsrc: Port to 1.0 + * 681459 : rtmpsink: memory leak + * 685709 : mpeg4videoparse: AVI file with XVID video doesn't want to preroll: p_length.avi + * 685895 : mpegvideoparse: signal interlacing correctly in caps using new " interlace-mode " field + * 686009 : rtmpsink: handle RTMP_Write() return value correctly + * 686294 : tsdemux: Fix checking P-STD_buffer marker in PES header + * 686327 : mpegtsmux: fix refcount issue with input buffers + * 686358 : tsdemux: fix potential crash dereferencing NULL program pointer + * 686520 : wayland: update to wayland-protocol 0.99 + * 686547 : rtpopuspay outputs unparseable caps + * 686595 : [mpg123] misc improvements and fixes + * 686774 : gst-plugins-bad/curl: add a comment describing function... + * 686829 : opusdec: invalid gst_buffer_unmap() call for NULL buffer Changes since 1.0.0: @@ -1,5 +1,5 @@ -Release notes for GStreamer Bad Plugins 1.0.1 +Release notes for GStreamer Bad Plugins 1.0.2 The GStreamer team is proud to announce a new release @@ -63,22 +63,38 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg) Features of this release * Parallel installability with 0.10.x series - * fieldanalysis and frei0r plugins ported to 1.0 - * DVD playback fixes - * pitch: transform timestamps properly after a seek - * camerabin fixes - * bug fixes + * audioparse: add mode where caps are taken from upstream and only timestamping is performed + * directsoundsrc: port to 1.0 + * dtsdec: fix buffer parsing + * fieldanalysis: actually build (remove from the NONPORTED plugins list) + * hlsdemux: numerous thread-safety fixes, and an invalid memory access fix + * mpegdemux: handle and combine downstream flow returns better + * mpegdemux: make work properly with dvdreadsrc + * mpegtsdemux: PES header parsing fixes; fix potential crash + * mpegtsdemux: First push EOS, then destroy all programs + * mpegtsmux: fix buffer refcounting issue + * mpeg4videoparse: correctly parse the full first frame; properly mark config data presence + * mpegvideoparse: correctly parse the full first frame; signal interlacing properly in caps + * pitch: fix for start times > 0 (e.g. ogg streaming) + * rtmpsink: handle RTMP_Write() return value correctly, fix memory leak + * scaletempo: fix timestamp and latency query handling, and event leak + * subenc: port to 1.0 Bugs fixed in this release - * 667220 : dvdspu: add NV12 support - * 681562 : Issue setting " video-source " property on wrappercamerabinsrc - * 681564 : Issue setting " video-source-filter " property on wrappercamerabinsrc - * 681678 : frei0r: port to 1.0 - * 684740 : chromaprint: resolve undefined symbols - * 684847 : curl: fix build on win32 - * 685065 : Missing cast in curlbasesink - * 685159 : chromaprint: Missing unmap buffer in transform_ip + * 623387 : mpegdemux: check base_time before calculating new_start + * 673414 : directsoundsrc: Port to 1.0 + * 681459 : rtmpsink: memory leak + * 685709 : mpeg4videoparse: AVI file with XVID video doesn't want to preroll: p_length.avi + * 685895 : mpegvideoparse: signal interlacing correctly in caps using new " interlace-mode " field + * 686009 : rtmpsink: handle RTMP_Write() return value correctly + * 686294 : tsdemux: Fix checking P-STD_buffer marker in PES header + * 686327 : mpegtsmux: fix refcount issue with input buffers + * 686358 : tsdemux: fix potential crash dereferencing NULL program pointer + * 686520 : wayland: update to wayland-protocol 0.99 + * 686547 : rtpopuspay outputs unparseable caps + * 686595 : [mpg123] misc improvements and fixes + * 686774 : gst-plugins-bad/curl: add a comment describing function... ==== Download ==== @@ -113,21 +129,22 @@ Interested developers of the core library, plugins, and applications should subscribe to the gstreamer-devel list. -Applications - Contributors to this release * Andoni Morales Alastruey - * Christian Fredrik Kalager Schaller - * Christophe Fergeau + * Carlos Rafael Giani + * David Régade * Jan Schmidt + * Josep Torra + * Mark Nauwelaerts * Michael Smith - * Nicolas Dufresne - * Rob Clark - * Robert Swain + * Raimo Järvi + * Reynaldo H. Verdejo Pinochet * Sebastian Dröge - * Thiago Santos + * Sebastian Rasmussen + * Sergey N. Gorshkov + * Sreerenj Balachandran + * Thijs Vermeir * Tim-Philipp Müller - * Yaakov Selkowitz - * Руслан Ижбулатов + * Wim Taymans
\ No newline at end of file diff --git a/common/Makefile.in b/common/Makefile.in index 00ce3bde..ae87e4d3 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in index aef516ee..b82838bb 100644 --- a/common/m4/Makefile.in +++ b/common/m4/Makefile.in @@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/config.h.in b/config.h.in index d95c0e21..c9652c0c 100644 --- a/config.h.in +++ b/config.h.in @@ -79,6 +79,9 @@ /* Define to enable Windows ACM library (used by acm). */ #undef HAVE_ACM +/* Define to enable Android Media (used by androidmedia). */ +#undef HAVE_ANDROID_MEDIA + /* Define to enable AirPort Express Wireless sink (used by apexsink). */ #undef HAVE_APEXSINK @@ -211,6 +214,9 @@ /* Define to enable DVB Source (used by dvb). */ #undef HAVE_DVB +/* Define to enable eglgles sink (used by eglgles). */ +#undef HAVE_EGLGLES + /* Define to enable building of experimental plug-ins. */ #undef HAVE_EXPERIMENTAL @@ -364,6 +370,9 @@ /* Define to 1 if you have the <opencv2/highgui/highgui_c.h> header file. */ #undef HAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H +/* Define to enable OpenSL ES (used by opensl). */ +#undef HAVE_OPENSLES + /* Define to enable opus (used by opus). */ #undef HAVE_OPUS @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.0.1. +# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.0.2. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GStreamer Bad Plug-ins' PACKAGE_TARNAME='gst-plugins-bad' -PACKAGE_VERSION='1.0.1' -PACKAGE_STRING='GStreamer Bad Plug-ins 1.0.1' +PACKAGE_VERSION='1.0.2' +PACKAGE_STRING='GStreamer Bad Plug-ins 1.0.2' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -730,6 +730,10 @@ USE_TIMIDITY_FALSE USE_TIMIDITY_TRUE TIMIDITY_LIBS TIMIDITY_CFLAGS +USE_EGLGLES_FALSE +USE_EGLGLES_TRUE +EGLGLES_LIBS +EGLGLES_CFLAGS USE_RSVG_FALSE USE_RSVG_TRUE RSVG_2_35_0_LIBS @@ -938,6 +942,8 @@ G_UDEV_LIBS G_UDEV_CFLAGS GST_VIDEO_LIBS GST_VIDEO_CFLAGS +USE_OPENSLES_FALSE +USE_OPENSLES_TRUE USE_VCD_FALSE USE_VCD_TRUE USE_SHM_FALSE @@ -952,6 +958,8 @@ HAVE_IOS_FALSE HAVE_IOS_TRUE USE_APPLE_MEDIA_FALSE USE_APPLE_MEDIA_TRUE +USE_ANDROID_MEDIA_FALSE +USE_ANDROID_MEDIA_TRUE USE_DIRECTSHOW_FALSE USE_DIRECTSHOW_TRUE HAVE_DIRECTSHOW @@ -1552,12 +1560,14 @@ enable_direct3d enable_directdraw enable_direct3d9 enable_directshow +enable_android_media enable_apple_media enable_osx_video enable_avc enable_quicktime enable_shm enable_vcd +enable_opensles enable_uvch264 enable_assrender enable_voamrwbenc @@ -1605,6 +1615,7 @@ enable_opus enable_pvr with_pvr_external_headers enable_rsvg +enable_eglgles enable_timidity enable_teletextdec enable_wildmidi @@ -1763,6 +1774,8 @@ RSVG_CFLAGS RSVG_LIBS RSVG_2_35_0_CFLAGS RSVG_2_35_0_LIBS +EGLGLES_CFLAGS +EGLGLES_LIBS TIMIDITY_CFLAGS TIMIDITY_LIBS TELETEXTDEC_CFLAGS @@ -2325,7 +2338,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GStreamer Bad Plug-ins 1.0.1 to adapt to many kinds of systems. +\`configure' configures GStreamer Bad Plug-ins 1.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2400,7 +2413,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.0.1:";; + short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.0.2:";; esac cat <<\_ACEOF @@ -2512,12 +2525,14 @@ Optional Features: --disable-directdraw disable DirectDraw plug-in: directdrawsink --disable-direct3d9 disable Direct3D9: winscreencap --disable-directshow disable DirectShow plug-in: winks + --disable-android_media disable Android Media: androidmedia --disable-apple_media disable Apple video: applemedia --disable-osx_video disable OSX video: osxvideosrc --disable-avc disable AVC Video Services: avcsrc --disable-quicktime disable QuickTime wrapper: qtwrapper --disable-shm disable POSIX shared memory source and sink: shm --disable-vcd disable Video CD: vcdsrc + --disable-opensles disable OpenSL ES: opensl --disable-uvch264 disable UVC H264: uvch264 --disable-assrender disable ASS/SSA renderer: assrender --disable-voamrwbenc disable vo-amrwbenc library: vo-amrwbenc @@ -2563,6 +2578,7 @@ Optional Features: --disable-opus disable opus: opus --disable-pvr disable pvrvideosink: pvr --disable-rsvg disable rsvg decoder: rsvg + --disable-eglgles disable eglgles sink: eglgles --disable-timidity disable timidity midi soft synth plugin: timidity --disable-teletextdec disable Teletext decoder: teletextdec --disable-wildmidi disable wildmidi midi soft synth plugin: wildmidi @@ -2829,6 +2845,10 @@ Some influential environment variables: C compiler flags for RSVG_2_35_0, overriding pkg-config RSVG_2_35_0_LIBS linker flags for RSVG_2_35_0, overriding pkg-config + EGLGLES_CFLAGS + C compiler flags for EGLGLES, overriding pkg-config + EGLGLES_LIBS + linker flags for EGLGLES, overriding pkg-config TIMIDITY_CFLAGS C compiler flags for TIMIDITY, overriding pkg-config TIMIDITY_LIBS @@ -2933,7 +2953,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Bad Plug-ins configure 1.0.1 +GStreamer Bad Plug-ins configure 1.0.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3906,7 +3926,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GStreamer Bad Plug-ins $as_me 1.0.1, which was +It was created by GStreamer Bad Plug-ins $as_me 1.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4840,7 +4860,7 @@ fi # Define the identity of the package. PACKAGE='gst-plugins-bad' - VERSION='1.0.1' + VERSION='1.0.2' cat >>confdefs.h <<_ACEOF @@ -4963,9 +4983,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } - PACKAGE_VERSION_MAJOR=$(echo 1.0.1 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.0.1 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.0.1 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.0.2 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.0.2 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.0.2 | cut -d'.' -f3) @@ -4976,7 +4996,7 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.0.1 | cut -d'.' -f4) + NANO=$(echo 1.0.2 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -9560,10 +9580,10 @@ fi done - GST_CURRENT=1 + GST_CURRENT=2 GST_REVISION=0 - GST_AGE=1 - GST_LIBVERSION=1:0:1 + GST_AGE=2 + GST_LIBVERSION=2:0:2 @@ -27686,21 +27706,21 @@ _ACEOF -GST_PLUGINS_NONPORTED=" aiff \ +GST_PLUGINS_NONPORTED=" androidmedia aiff \ cdxaparse \ - dccp faceoverlay \ - fieldanalysis freeverb \ + dccp eglgles faceoverlay \ + freeverb \ hdvparse ivfparse jp2kdecimator \ kate librfb \ mpegpsmux mve mxf mythtv nsf nuvdemux \ patchdetect real \ - sdi subenc stereo tta videofilters \ + sdi stereo tta videofilters \ videomeasure videosignal vmnc \ decklink fbdev linsys vcd \ apexsink cdaudio cog dc1394 dirac directfb \ gsettings jasper ladspa \ - musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \ - directsound directdraw direct3d9 acm wininet \ + musepack musicbrainz nas neon ofa openal opensles rsvg sdl sndfile timidity \ + directdraw direct3d9 acm wininet \ wildmidi xvid lv2 teletextdec sndio uvch264" @@ -31287,6 +31307,110 @@ fi +HAVE_ANDROID_MEDIA="no" +echo +{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Android Media ***" >&5 +$as_echo "$as_me: *** checking feature: Android Media ***" >&6;} +if test "xandroidmedia" != "x" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: androidmedia ***" >&5 +$as_echo "$as_me: *** for plug-ins: androidmedia ***" >&6;} +fi +NOUSE= +if test "x$USE_ANDROID_MEDIA" = "xno"; then + NOUSE="yes" +fi +# Check whether --enable-android_media was given. +if test "${enable_android_media+set}" = set; then : + enableval=$enable_android_media; case "${enableval}" in + yes) USE_ANDROID_MEDIA=yes;; + no) USE_ANDROID_MEDIA=no;; + *) as_fn_error $? "bad value ${enableval} for --enable-android_media" "$LINENO" 5 ;; + esac +else + USE_ANDROID_MEDIA=yes +fi + +if test "x$NOUSE" = "xyes"; then + USE_ANDROID_MEDIA="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** androidmedia pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** androidmedia pre-configured not to be built" >&2;} +fi +NOUSE= + +if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " ANDROID_MEDIA " > /dev/null; then + USE_ANDROID_MEDIA="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** androidmedia not ported" >&5 +$as_echo "$as_me: WARNING: *** androidmedia not ported" >&2;} +fi + + +if test x$USE_ANDROID_MEDIA = xyes; then + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_ANDROID_MEDIA=no + + case "$host" in + *android*) + ac_fn_c_check_header_mongrel "$LINENO" "jni.h" "ac_cv_header_jni_h" "$ac_includes_default" +if test "x$ac_cv_header_jni_h" = xyes; then : + HAVE_ANDROID_MEDIA="yes" +else + HAVE_ANDROID_MEDIA="no" +fi + + + ;; + *) + HAVE_ANDROID_MEDIA="no" + ;; + esac + + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + if test x$HAVE_ANDROID_MEDIA = xno; then + USE_ANDROID_MEDIA=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: androidmedia" >&5 +$as_echo "$as_me: *** These plugins will be built: androidmedia" >&6;} + fi +fi +if test x$USE_ANDROID_MEDIA = xyes; then + : + if test "xandroidmedia" != "x"; then + GST_PLUGINS_YES="\tandroidmedia\n$GST_PLUGINS_YES" + fi + +$as_echo "#define HAVE_ANDROID_MEDIA /**/" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: androidmedia" >&5 +$as_echo "$as_me: *** These plugins will not be built: androidmedia" >&6;} + if test "xandroidmedia" != "x"; then + GST_PLUGINS_NO="\tandroidmedia\n$GST_PLUGINS_NO" + fi + : +fi + if test x$USE_ANDROID_MEDIA = xyes; then + USE_ANDROID_MEDIA_TRUE= + USE_ANDROID_MEDIA_FALSE='#' +else + USE_ANDROID_MEDIA_TRUE='#' + USE_ANDROID_MEDIA_FALSE= +fi + + + HAVE_APPLE_MEDIA="no" echo { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Apple video ***" >&5 @@ -31987,6 +32111,101 @@ fi +echo +{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: OpenSL ES ***" >&5 +$as_echo "$as_me: *** checking feature: OpenSL ES ***" >&6;} +if test "xopensl" != "x" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: opensl ***" >&5 +$as_echo "$as_me: *** for plug-ins: opensl ***" >&6;} +fi +NOUSE= +if test "x$USE_OPENSLES" = "xno"; then + NOUSE="yes" +fi +# Check whether --enable-opensles was given. +if test "${enable_opensles+set}" = set; then : + enableval=$enable_opensles; case "${enableval}" in + yes) USE_OPENSLES=yes;; + no) USE_OPENSLES=no;; + *) as_fn_error $? "bad value ${enableval} for --enable-opensles" "$LINENO" 5 ;; + esac +else + USE_OPENSLES=yes +fi + +if test "x$NOUSE" = "xyes"; then + USE_OPENSLES="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** opensl pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** opensl pre-configured not to be built" >&2;} +fi +NOUSE= + +if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " OPENSLES " > /dev/null; then + USE_OPENSLES="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** opensl not ported" >&5 +$as_echo "$as_me: WARNING: *** opensl not ported" >&2;} +fi + + +if test x$USE_OPENSLES = xyes; then + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_OPENSLES=no + + ac_fn_c_check_header_mongrel "$LINENO" "SLES/OpenSLES.h" "ac_cv_header_SLES_OpenSLES_h" "$ac_includes_default" +if test "x$ac_cv_header_SLES_OpenSLES_h" = xyes; then : + HAVE_OPENSLES="yes" +else + HAVE_OPENSLES="no" +fi + + + + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + if test x$HAVE_OPENSLES = xno; then + USE_OPENSLES=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: opensl" >&5 +$as_echo "$as_me: *** These plugins will be built: opensl" >&6;} + fi +fi +if test x$USE_OPENSLES = xyes; then + : + if test "xopensl" != "x"; then + GST_PLUGINS_YES="\topensl\n$GST_PLUGINS_YES" + fi + +$as_echo "#define HAVE_OPENSLES /**/" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: opensl" >&5 +$as_echo "$as_me: *** These plugins will not be built: opensl" >&6;} + if test "xopensl" != "x"; then + GST_PLUGINS_NO="\topensl\n$GST_PLUGINS_NO" + fi + : +fi + if test x$USE_OPENSLES = xyes; then + USE_OPENSLES_TRUE= + USE_OPENSLES_FALSE='#' +else + USE_OPENSLES_TRUE='#' + USE_OPENSLES_FALSE= +fi + + echo { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: UVC H264 ***" >&5 @@ -35031,12 +35250,12 @@ if test -n "$PKG_CONFIG"; then pkg_cv_WAYLAND_CFLAGS="$WAYLAND_CFLAGS" else if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 0.95.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "wayland-client >= 0.95.0") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 0.95.0" 2>/dev/null` + pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 1.0.0" 2>/dev/null` else pkg_failed=yes fi @@ -35049,12 +35268,12 @@ if test -n "$PKG_CONFIG"; then pkg_cv_WAYLAND_LIBS="$WAYLAND_LIBS" else if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 0.95.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "wayland-client >= 0.95.0") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 0.95.0" 2>/dev/null` + pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 1.0.0" 2>/dev/null` else pkg_failed=yes fi @@ -35073,9 +35292,9 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 0.95.0"` + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 1.0.0"` else - WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 0.95.0"` + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 1.0.0"` fi # Put the nasty error message in config.log where it belongs echo "$WAYLAND_PKG_ERRORS" >&5 @@ -41764,6 +41983,378 @@ fi echo +{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: eglgles sink ***" >&5 +$as_echo "$as_me: *** checking feature: eglgles sink ***" >&6;} +if test "xeglgles" != "x" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: eglgles ***" >&5 +$as_echo "$as_me: *** for plug-ins: eglgles ***" >&6;} +fi +NOUSE= +if test "x$USE_EGLGLES" = "xno"; then + NOUSE="yes" +fi +# Check whether --enable-eglgles was given. +if test "${enable_eglgles+set}" = set; then : + enableval=$enable_eglgles; case "${enableval}" in + yes) USE_EGLGLES=yes;; + no) USE_EGLGLES=no;; + *) as_fn_error $? "bad value ${enableval} for --enable-eglgles" "$LINENO" 5 ;; + esac +else + USE_EGLGLES=yes +fi + +if test "x$NOUSE" = "xyes"; then + USE_EGLGLES="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** eglgles pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** eglgles pre-configured not to be built" >&2;} +fi +NOUSE= + +if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " EGLGLES " > /dev/null; then + USE_EGLGLES="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** eglgles not ported" >&5 +$as_echo "$as_me: WARNING: *** eglgles not ported" >&2;} +fi + + +if test x$USE_EGLGLES = xyes; then + + gst_check_save_LIBS=$LIBS + gst_check_save_LDFLAGS=$LDFLAGS + gst_check_save_CFLAGS=$CFLAGS + gst_check_save_CPPFLAGS=$CPPFLAGS + gst_check_save_CXXFLAGS=$CXXFLAGS + + HAVE_EGLGLES=no + + HAVE_EGLGLES="no" + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGLGLES" >&5 +$as_echo_n "checking for EGLGLES... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$EGLGLES_CFLAGS"; then + pkg_cv_EGLGLES_CFLAGS="$EGLGLES_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl glesv2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl glesv2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGLGLES_CFLAGS=`$PKG_CONFIG --cflags "egl glesv2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$EGLGLES_LIBS"; then + pkg_cv_EGLGLES_LIBS="$EGLGLES_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl glesv2\""; } >&5 + ($PKG_CONFIG --exists --print-errors "egl glesv2") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_EGLGLES_LIBS=`$PKG_CONFIG --libs "egl glesv2" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + EGLGLES_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "egl glesv2"` + else + EGLGLES_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "egl glesv2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$EGLGLES_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + HAVE_EGLGLES="no" + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGLESv2" >&5 +$as_echo_n "checking for glEnable in -lGLESv2... " >&6; } +if ${ac_cv_lib_GLESv2_glEnable+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lGLESv2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char glEnable (); +int +main () +{ +return glEnable (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_GLESv2_glEnable=yes +else + ac_cv_lib_GLESv2_glEnable=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glEnable" >&5 +$as_echo "$ac_cv_lib_GLESv2_glEnable" >&6; } +if test "x$ac_cv_lib_GLESv2_glEnable" = xyes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default" +if test "x$ac_cv_header_GLES2_gl2_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetProcAddress in -lEGL" >&5 +$as_echo_n "checking for eglGetProcAddress in -lEGL... " >&6; } +if ${ac_cv_lib_EGL_eglGetProcAddress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lEGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char eglGetProcAddress (); +int +main () +{ +return eglGetProcAddress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_EGL_eglGetProcAddress=yes +else + ac_cv_lib_EGL_eglGetProcAddress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetProcAddress" >&5 +$as_echo "$ac_cv_lib_EGL_eglGetProcAddress" >&6; } +if test "x$ac_cv_lib_EGL_eglGetProcAddress" = xyes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default" +if test "x$ac_cv_header_EGL_egl_h" = xyes; then : + + HAVE_EGLGLES="yes" + EGLGLES_LIBS="-lGLESv2 -lEGL" + EGLGLES_CFLAGS="" + +fi + + + +fi + + +fi + + + +fi + + LIBS=$old_LIBS + CFLAGS=$old_CFLAGS + +elif test $pkg_failed = untried; then + + HAVE_EGLGLES="no" + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGLESv2" >&5 +$as_echo_n "checking for glEnable in -lGLESv2... " >&6; } +if ${ac_cv_lib_GLESv2_glEnable+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lGLESv2 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char glEnable (); +int +main () +{ +return glEnable (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_GLESv2_glEnable=yes +else + ac_cv_lib_GLESv2_glEnable=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glEnable" >&5 +$as_echo "$ac_cv_lib_GLESv2_glEnable" >&6; } +if test "x$ac_cv_lib_GLESv2_glEnable" = xyes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default" +if test "x$ac_cv_header_GLES2_gl2_h" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetProcAddress in -lEGL" >&5 +$as_echo_n "checking for eglGetProcAddress in -lEGL... " >&6; } +if ${ac_cv_lib_EGL_eglGetProcAddress+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lEGL $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char eglGetProcAddress (); +int +main () +{ +return eglGetProcAddress (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_EGL_eglGetProcAddress=yes +else + ac_cv_lib_EGL_eglGetProcAddress=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetProcAddress" >&5 +$as_echo "$ac_cv_lib_EGL_eglGetProcAddress" >&6; } +if test "x$ac_cv_lib_EGL_eglGetProcAddress" = xyes; then : + + ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default" +if test "x$ac_cv_header_EGL_egl_h" = xyes; then : + + HAVE_EGLGLES="yes" + EGLGLES_LIBS="-lGLESv2 -lEGL" + EGLGLES_CFLAGS="" + +fi + + + +fi + + +fi + + + +fi + + LIBS=$old_LIBS + CFLAGS=$old_CFLAGS + +else + EGLGLES_CFLAGS=$pkg_cv_EGLGLES_CFLAGS + EGLGLES_LIBS=$pkg_cv_EGLGLES_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_EGLGLES="yes" +fi + + + + + LIBS=$gst_check_save_LIBS + LDFLAGS=$gst_check_save_LDFLAGS + CFLAGS=$gst_check_save_CFLAGS + CPPFLAGS=$gst_check_save_CPPFLAGS + CXXFLAGS=$gst_check_save_CXXFLAGS + + if test x$HAVE_EGLGLES = xno; then + USE_EGLGLES=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: eglgles" >&5 +$as_echo "$as_me: *** These plugins will be built: eglgles" >&6;} + fi +fi +if test x$USE_EGLGLES = xyes; then + : + if test "xeglgles" != "x"; then + GST_PLUGINS_YES="\teglgles\n$GST_PLUGINS_YES" + fi + +$as_echo "#define HAVE_EGLGLES /**/" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: eglgles" >&5 +$as_echo "$as_me: *** These plugins will not be built: eglgles" >&6;} + if test "xeglgles" != "x"; then + GST_PLUGINS_NO="\teglgles\n$GST_PLUGINS_NO" + fi + : +fi + if test x$USE_EGLGLES = xyes; then + USE_EGLGLES_TRUE= + USE_EGLGLES_FALSE='#' +else + USE_EGLGLES_TRUE='#' + USE_EGLGLES_FALSE= +fi + + + +echo { $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: timidity midi soft synth plugin ***" >&5 $as_echo "$as_me: *** checking feature: timidity midi soft synth plugin ***" >&6;} if test "xtimidity" != "x" @@ -48429,7 +49020,7 @@ GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^_*gst_plugin_ -ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/asfmux/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dtmf/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/hls/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/liveadder/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/nsf/Makefile gst/nuvdemux/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/real/Makefile gst/removesilence/Makefile gst/rtpmux/Makefile gst/rtpvp8/Makefile gst/scaletempo/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/signalprocessor/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/video/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directdraw/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/osxvideo/Makefile sys/qtwrapper/Makefile sys/shm/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/vdpau/gstvdp/Makefile sys/vdpau/basevideodecoder/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/camerabin2/Makefile tests/examples/directfb/Makefile tests/examples/mxf/Makefile tests/examples/scaletempo/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bz2/Makefile ext/cdaudio/Makefile ext/celt/Makefile ext/chromaprint/Makefile ext/cog/Makefile ext/curl/Makefile ext/dc1394/Makefile ext/dirac/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/dts/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/gsm/Makefile ext/jasper/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libmms/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mpg123/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/musicbrainz/Makefile ext/mythtv/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/opus/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/gsettings/Makefile ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml ext/spc/Makefile ext/swfdec/Makefile ext/timidity/Makefile ext/xvid/Makefile ext/zbar/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-basevideo.pc pkgconfig/gstreamer-basevideo-uninstalled.pc tools/Makefile m4/Makefile win32/common/config.h" +ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/asfmux/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dtmf/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/hls/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/liveadder/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/nsf/Makefile gst/nuvdemux/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/real/Makefile gst/removesilence/Makefile gst/rtpmux/Makefile gst/rtpvp8/Makefile gst/scaletempo/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/signalprocessor/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/video/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directdraw/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/opensles/Makefile sys/osxvideo/Makefile sys/qtwrapper/Makefile sys/shm/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/vdpau/gstvdp/Makefile sys/vdpau/basevideodecoder/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/camerabin2/Makefile tests/examples/directfb/Makefile tests/examples/mxf/Makefile tests/examples/scaletempo/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bz2/Makefile ext/cdaudio/Makefile ext/celt/Makefile ext/chromaprint/Makefile ext/cog/Makefile ext/curl/Makefile ext/dc1394/Makefile ext/dirac/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/dts/Makefile ext/eglgles/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/gsm/Makefile ext/jasper/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libmms/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mpg123/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/musicbrainz/Makefile ext/mythtv/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/opus/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/gsettings/Makefile ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml ext/spc/Makefile ext/swfdec/Makefile ext/timidity/Makefile ext/xvid/Makefile ext/zbar/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-basevideo.pc pkgconfig/gstreamer-basevideo-uninstalled.pc tools/Makefile m4/Makefile win32/common/config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -49006,6 +49597,10 @@ if test -z "${USE_DIRECTSHOW_TRUE}" && test -z "${USE_DIRECTSHOW_FALSE}"; then as_fn_error $? "conditional \"USE_DIRECTSHOW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_ANDROID_MEDIA_TRUE}" && test -z "${USE_ANDROID_MEDIA_FALSE}"; then + as_fn_error $? "conditional \"USE_ANDROID_MEDIA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_APPLE_MEDIA_TRUE}" && test -z "${USE_APPLE_MEDIA_FALSE}"; then as_fn_error $? "conditional \"USE_APPLE_MEDIA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -49034,6 +49629,10 @@ if test -z "${USE_VCD_TRUE}" && test -z "${USE_VCD_FALSE}"; then as_fn_error $? "conditional \"USE_VCD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_OPENSLES_TRUE}" && test -z "${USE_OPENSLES_FALSE}"; then + as_fn_error $? "conditional \"USE_OPENSLES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_UVCH264_TRUE}" && test -z "${USE_UVCH264_FALSE}"; then as_fn_error $? "conditional \"USE_UVCH264\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -49230,6 +49829,10 @@ if test -z "${USE_RSVG_TRUE}" && test -z "${USE_RSVG_FALSE}"; then as_fn_error $? "conditional \"USE_RSVG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_EGLGLES_TRUE}" && test -z "${USE_EGLGLES_FALSE}"; then + as_fn_error $? "conditional \"USE_EGLGLES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_TIMIDITY_TRUE}" && test -z "${USE_TIMIDITY_FALSE}"; then as_fn_error $? "conditional \"USE_TIMIDITY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -49979,7 +50582,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GStreamer Bad Plug-ins $as_me 1.0.1, which was +This file was extended by GStreamer Bad Plug-ins $as_me 1.0.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -50045,7 +50648,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GStreamer Bad Plug-ins config.status 1.0.1 +GStreamer Bad Plug-ins config.status 1.0.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -50664,6 +51267,7 @@ do "sys/dshowdecwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dshowdecwrapper/Makefile" ;; "sys/acmenc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmenc/Makefile" ;; "sys/acmmp3dec/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmmp3dec/Makefile" ;; + "sys/androidmedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/androidmedia/Makefile" ;; "sys/applemedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/applemedia/Makefile" ;; "sys/avc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/avc/Makefile" ;; "sys/d3dvideosink/Makefile") CONFIG_FILES="$CONFIG_FILES sys/d3dvideosink/Makefile" ;; @@ -50675,6 +51279,7 @@ do "sys/dvb/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dvb/Makefile" ;; "sys/fbdev/Makefile") CONFIG_FILES="$CONFIG_FILES sys/fbdev/Makefile" ;; "sys/linsys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/linsys/Makefile" ;; + "sys/opensles/Makefile") CONFIG_FILES="$CONFIG_FILES sys/opensles/Makefile" ;; "sys/osxvideo/Makefile") CONFIG_FILES="$CONFIG_FILES sys/osxvideo/Makefile" ;; "sys/qtwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES sys/qtwrapper/Makefile" ;; "sys/shm/Makefile") CONFIG_FILES="$CONFIG_FILES sys/shm/Makefile" ;; @@ -50714,6 +51319,7 @@ do "ext/directfb/Makefile") CONFIG_FILES="$CONFIG_FILES ext/directfb/Makefile" ;; "ext/wayland/Makefile") CONFIG_FILES="$CONFIG_FILES ext/wayland/Makefile" ;; "ext/dts/Makefile") CONFIG_FILES="$CONFIG_FILES ext/dts/Makefile" ;; + "ext/eglgles/Makefile") CONFIG_FILES="$CONFIG_FILES ext/eglgles/Makefile" ;; "ext/faac/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faac/Makefile" ;; "ext/faad/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faad/Makefile" ;; "ext/flite/Makefile") CONFIG_FILES="$CONFIG_FILES ext/flite/Makefile" ;; diff --git a/configure.ac b/configure.ac index d18fc7a4..843d80cf 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ(2.62) dnl initialize autoconf dnl when going to/from release please set the nano (fourth number) right ! dnl releases only do Wall, cvs and prerelease does Werror too -AC_INIT(GStreamer Bad Plug-ins, 1.0.1, +AC_INIT(GStreamer Bad Plug-ins, 1.0.2, http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, gst-plugins-bad) @@ -50,7 +50,7 @@ dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 dnl - interfaces added -> increment AGE dnl - interfaces removed -> AGE = 0 dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 1, 0, 1) +AS_LIBTOOL(GST, 2, 0, 2) dnl *** required versions of GStreamer stuff *** GST_REQ=1.0.0 @@ -310,21 +310,21 @@ AG_GST_DEFAULT_ELEMENTS dnl *** plug-ins to include *** dnl Non ported plugins (non-dependant, then dependant) dnl Make sure you have a space before and after all plugins -GST_PLUGINS_NONPORTED=" aiff \ +GST_PLUGINS_NONPORTED=" androidmedia aiff \ cdxaparse \ - dccp faceoverlay \ - fieldanalysis freeverb \ + dccp eglgles faceoverlay \ + freeverb \ hdvparse ivfparse jp2kdecimator \ kate librfb \ mpegpsmux mve mxf mythtv nsf nuvdemux \ patchdetect real \ - sdi subenc stereo tta videofilters \ + sdi stereo tta videofilters \ videomeasure videosignal vmnc \ decklink fbdev linsys vcd \ apexsink cdaudio cog dc1394 dirac directfb \ gsettings jasper ladspa \ - musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \ - directsound directdraw direct3d9 acm wininet \ + musepack musicbrainz nas neon ofa openal opensles rsvg sdl sndfile timidity \ + directdraw direct3d9 acm wininet \ wildmidi xvid lv2 teletextdec sndio uvch264" AC_SUBST(GST_PLUGINS_NONPORTED) @@ -598,6 +598,20 @@ int main () { AC_SUBST(HAVE_DIRECTSHOW) ]) +dnl *** Android Media *** +translit(dnm, m, l) AM_CONDITIONAL(USE_ANDROID_MEDIA, true) +HAVE_ANDROID_MEDIA="no" +AG_GST_CHECK_FEATURE(ANDROID_MEDIA, [Android Media], androidmedia, [ + case "$host" in + *android*) + AC_CHECK_HEADER(jni.h, HAVE_ANDROID_MEDIA="yes", HAVE_ANDROID_MEDIA="no") + ;; + *) + HAVE_ANDROID_MEDIA="no" + ;; + esac +]) + dnl *** AppleMedia (OS X and iOS) *** translit(dnm, m, l) AM_CONDITIONAL(USE_APPLE_MEDIA, true) HAVE_APPLE_MEDIA="no" @@ -689,6 +703,11 @@ AG_GST_CHECK_FEATURE(VCD, [Video CD], vcdsrc, [ AC_CHECK_HEADER(linux/cdrom.h, HAVE_VCD="yes", HAVE_VCD="no") ]) +dnl check for OpenSL ES +translit(dnm, m, l) AM_CONDITIONAL(USE_OPENSLES, true) +AG_GST_CHECK_FEATURE(OPENSLES, [OpenSL ES], opensl, [ + AC_CHECK_HEADER(SLES/OpenSLES.h, HAVE_OPENSLES="yes", HAVE_OPENSLES="no") +]) dnl *** UVC H264 *** translit(dnm, m, l) AM_CONDITIONAL(USE_UVCH264, true) @@ -927,7 +946,7 @@ AG_GST_CHECK_FEATURE(DIRECTFB, [directfb], dfbvideosink , [ dnl **** Wayland **** translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true) AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [ - PKG_CHECK_MODULES(WAYLAND, wayland-client >= 0.95.0, [ + PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0, [ HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no" ]) ]) @@ -1500,6 +1519,36 @@ AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [ AC_SUBST(RSVG_LIBS) ]) +dnl *** eglgles *** +translit(dnm, m, l) AM_CONDITIONAL(USE_EGLGLES, true) +AG_GST_CHECK_FEATURE(EGLGLES, [eglgles sink], eglgles, [ + HAVE_EGLGLES="no" + PKG_CHECK_MODULES(EGLGLES, egl glesv2, HAVE_EGLGLES="yes", [ + HAVE_EGLGLES="no" + old_LIBS=$LIBS + old_CFLAGS=$CFLAGS + AC_CHECK_LIB([GLESv2], [glEnable], + [ + AC_CHECK_HEADER([GLES2/gl2.h], + [ + AC_CHECK_LIB([EGL], [eglGetProcAddress], + [ + AC_CHECK_HEADER([EGL/egl.h], + [ + HAVE_EGLGLES="yes" + EGLGLES_LIBS="-lGLESv2 -lEGL" + EGLGLES_CFLAGS="" + ]) + ]) + ]) + ]) + LIBS=$old_LIBS + CFLAGS=$old_CFLAGS + ]) + AC_SUBST(EGLGLES_CFLAGS) + AC_SUBST(EGLGLES_LIBS) +]) + dnl *** timidity *** translit(dnm, m, l) AM_CONDITIONAL(USE_TIMIDITY, true) AG_GST_CHECK_FEATURE(TIMIDITY, [timidity midi soft synth plugin], timidity, [ @@ -2042,6 +2091,7 @@ sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile +sys/androidmedia/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/d3dvideosink/Makefile @@ -2053,6 +2103,7 @@ sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile +sys/opensles/Makefile sys/osxvideo/Makefile sys/qtwrapper/Makefile sys/shm/Makefile @@ -2092,6 +2143,7 @@ ext/dirac/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/dts/Makefile +ext/eglgles/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile diff --git a/docs/Makefile.am b/docs/Makefile.am index a99c90f3..860b9898 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -16,3 +16,6 @@ DIST_SUBDIRS = libs plugins EXTRA_DIST = \ random/ChangeLog-0.8 \ version.entities.in + +upload: + @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi diff --git a/docs/Makefile.in b/docs/Makefile.in index ea08f36c..630f887f 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -942,6 +944,9 @@ uninstall-am: uninstall uninstall-am +upload: + @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in index 4a750b3b..63c8f7ba 100644 --- a/docs/libs/Makefile.in +++ b/docs/libs/Makefile.in @@ -204,6 +204,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html index 4f313fb1..b39903f2 100644 --- a/docs/libs/html/compiling.html +++ b/docs/libs/html/compiling.html @@ -31,7 +31,7 @@ How to compile against the bad plugins libraries <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp8278000"></a><h2>Compiling against the bad plugins libraries</h2> +<a name="idp8815536"></a><h2>Compiling against the bad plugins libraries</h2> <p> To compile against these libraries, you need to tell the compiler where to find the header files and libraries. This is done with the diff --git a/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html b/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html index e13d31c9..012e50eb 100644 --- a/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html +++ b/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html @@ -62,7 +62,7 @@ uploads. The context must be discarded when the pipeline goes to <p> </p> <div class="refsect2"> -<a name="idp6900032"></a><h3>Example uploading to GL texture</h3> +<a name="idp9751472"></a><h3>Example uploading to GL texture</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html index cf941bb2..ea6181ef 100644 --- a/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html +++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html @@ -101,7 +101,7 @@ application. <p> </p> <div class="refsect2"> -<a name="idp12115984"></a><h3>For Element</h3> +<a name="idp8200304"></a><h3>For Element</h3> <p> This interface shall be implement by group of elements that need to share a specific video context (like VDPAU, LibVA, OpenGL elements) or by video @@ -153,7 +153,7 @@ application. <p> </p> <div class="refsect2"> -<a name="idp12128240"></a><h3>For Application</h3> +<a name="idp7714176"></a><h3>For Application</h3> <p> In the case there is no neighboor element with video context to share, the element will first turn toward the application, by sending a @@ -177,7 +177,7 @@ application. <p> </p> <div class="refsect2"> -<a name="idp12132736"></a><h3>Example using ClutterVideoGstVideoSink</h3> +<a name="idp7718672"></a><h3>Example using ClutterVideoGstVideoSink</h3> <p> This example is for user of ClutterGstVideoSink element, the ClutterGstPlayer object transparently handle this. diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html index cc85011b..7a3eaf9a 100644 --- a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html +++ b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html @@ -92,7 +92,7 @@ struct <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.h <p> </p> <div class="refsect2"> -<a name="idp10544640"></a><p> +<a name="idp11128432"></a><p> Provides useful functions for mpeg videos bitstream parsing. </p> </div> diff --git a/docs/libs/html/gst-plugins-bad-libs.devhelp2 b/docs/libs/html/gst-plugins-bad-libs.devhelp2 index e3dd08c6..5cc6e06d 100644 --- a/docs/libs/html/gst-plugins-bad-libs.devhelp2 +++ b/docs/libs/html/gst-plugins-bad-libs.devhelp2 @@ -63,7 +63,7 @@ <keyword type="function" name="gst_h264_nal_parser_free ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-nal-parser-free"/> <keyword type="function" name="gst_h264_parse_sps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-sps"/> <keyword type="function" name="gst_h264_parse_pps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-pps"/> - <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp10544640"/> + <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp11128432"/> <keyword type="enum" name="enum GstMpegVideoPacketTypeCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketTypeCode"/> <keyword type="enum" name="enum GstMpegVideoPacketExtensionCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketExtensionCode"/> <keyword type="enum" name="enum GstMpegVideoLevel" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoLevel"/> @@ -147,9 +147,9 @@ <keyword type="function" name="gst_vc1_bitplanes_free ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-free"/> <keyword type="function" name="gst_vc1_bitplanes_free_1 ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-free-1"/> <keyword type="function" name="gst_vc1_bitplanes_ensure_size ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-ensure-size"/> - <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12115984"/> - <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12128240"/> - <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12132736"/> + <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp8200304"/> + <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp7714176"/> + <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp7718672"/> <keyword type="macro" name="GST_IS_VIDEO_CONTEXT()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GST-IS-VIDEO-CONTEXT:CAPS"/> <keyword type="struct" name="GstVideoContext" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GstVideoContext"/> <keyword type="struct" name="struct GstVideoContextInterface" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GstVideoContextInterface"/> @@ -168,7 +168,7 @@ <keyword type="function" name="gst_video_context_query_set_string ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-string"/> <keyword type="function" name="gst_video_context_query_set_pointer ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-pointer"/> <keyword type="function" name="gst_video_context_query_set_object ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-object"/> - <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp6900032"/> + <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp9751472"/> <keyword type="struct" name="GstSurfaceConverter" link="gst-plugins-bad-libs-GstSurfaceConverter.html#GstSurfaceConverter"/> <keyword type="struct" name="struct GstSurfaceConverterInterface" link="gst-plugins-bad-libs-GstSurfaceConverter.html#GstSurfaceConverterInterface"/> <keyword type="function" name="gst_surface_converter_get_type ()" link="gst-plugins-bad-libs-GstSurfaceConverter.html#gst-surface-converter-get-type"/> diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html index e4ee49a3..b951cee2 100644 --- a/docs/libs/html/index.html +++ b/docs/libs/html/index.html @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Library Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for GStreamer Bad Library 1.0 (1.0.1) + for GStreamer Bad Library 1.0 (1.0.2) <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/</a>. </p></div> </div> diff --git a/docs/plugins/Makefile.am b/docs/plugins/Makefile.am index b7e0d3fb..5a9e7402 100644 --- a/docs/plugins/Makefile.am +++ b/docs/plugins/Makefile.am @@ -74,6 +74,7 @@ EXTRA_HFILES = \ $(top_srcdir)/ext/dc1394/gstdc1394.h \ $(top_srcdir)/ext/directfb/dfbvideosink.h \ $(top_srcdir)/ext/dts/gstdtsdec.h \ + $(top_srcdir)/ext/eglgles/gsteglglessink.h \ $(top_srcdir)/ext/faac/gstfaac.h \ $(top_srcdir)/ext/faad/gstfaad.h \ $(top_srcdir)/ext/kate/gstkateenc.h \ diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in index ad08fced..70c05cd1 100644 --- a/docs/plugins/Makefile.in +++ b/docs/plugins/Makefile.in @@ -242,6 +242,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -680,6 +682,7 @@ EXTRA_HFILES = \ $(top_srcdir)/ext/dc1394/gstdc1394.h \ $(top_srcdir)/ext/directfb/dfbvideosink.h \ $(top_srcdir)/ext/dts/gstdtsdec.h \ + $(top_srcdir)/ext/eglgles/gsteglglessink.h \ $(top_srcdir)/ext/faac/gstfaac.h \ $(top_srcdir)/ext/faad/gstfaad.h \ $(top_srcdir)/ext/kate/gstkateenc.h \ diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml index 6926c807..a640f15f 100644 --- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml +++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml @@ -45,6 +45,7 @@ <xi:include href="xml/element-dvdspu.xml" /> <xi:include href="xml/element-exclusion.xml" /> <xi:include href="xml/element-edgedetect.xml" /> + <xi:include href="xml/element-eglglessink.xml" /> <xi:include href="xml/element-faac.xml" /> <xi:include href="xml/element-faad.xml" /> <xi:include href="xml/element-faceblur.xml" /> @@ -63,6 +64,7 @@ <xi:include href="xml/element-modplug.xml" /> <xi:include href="xml/element-mpeg2enc.xml" /> <xi:include href="xml/element-mplex.xml" /> + <xi:include href="xml/element-mpg123audiodec.xml" /> <xi:include href="xml/element-pcapparse.xml" /> <xi:include href="xml/element-pinch.xml" /> <xi:include href="xml/element-pyramidsegment.xml" /> @@ -114,6 +116,7 @@ <xi:include href="xml/plugin-dtsdec.xml" /> <xi:include href="xml/plugin-dvb.xml" /> <xi:include href="xml/plugin-dvdspu.xml" /> + <xi:include href="xml/plugin-eglglessink.xml" /> <xi:include href="xml/plugin-faac.xml" /> <xi:include href="xml/plugin-faad.xml" /> <xi:include href="xml/plugin-festival.xml" /> diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt index 0e1f0d15..219a603a 100644 --- a/docs/plugins/gst-plugins-bad-plugins-sections.txt +++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt @@ -575,6 +575,20 @@ gst_edgedetect_plugin_init </SECTION> <SECTION> +<FILE>element-eglglessink</FILE> +<TITLE>eglglessink</TITLE> +GstEglGlesSink +<SUBSECTION Standard> +GstEglGlesSinkClass +GST_TYPE_EGLGLESSINK +GST_EGLGLESSINK +GST_IS_EGLGLESSINK +GST_EGLGLESSINK_CLASS +GST_IS_EGLGLESSINK_CLASS +gst_eglglessink_get_type +</SECTION> + +<SECTION> <FILE>element-exclusion</FILE> <TITLE>exclusion</TITLE> GstExclusion @@ -959,6 +973,20 @@ gst_mplex_get_type </SECTION> <SECTION> +<FILE>element-mpg123audiodec</FILE> +<TITLE>mpg123audiodec</TITLE> +GstMpg123AudioDec +<SUBSECTION Standard> +GstMpg123AudioDecClass +GST_MPG123_AUDIO_DEC +GST_MPG123_AUDIO_DEC_CLASS +GST_IS_MPG123_AUDIO_DEC +GST_IS_MPG123_AUDIO_DEC_CLASS +GST_TYPE_MPG123_AUDIO_DEC +gst_mpg123_audio_dec_get_type +</SECTION> + +<SECTION> <FILE>element-mythtvsrc</FILE> <TITLE>mythtvsrc</TITLE> GstMythtvSrc diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args index d3645f76..65a2c20d 100644 --- a/docs/plugins/gst-plugins-bad-plugins.args +++ b/docs/plugins/gst-plugins-bad-plugins.args @@ -18159,6 +18159,16 @@ </ARG> <ARG> +<NAME>GstAudioParse::use-sink-caps</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Use sink caps</NICK> +<BLURB>Use the sink caps for the format, only performing timestamping.</BLURB> +<DEFAULT>FALSE</DEFAULT> +</ARG> + +<ARG> <NAME>GstVideoParse::alpha-mask</NAME> <TYPE>gint</TYPE> <RANGE></RANGE> @@ -26890,7 +26900,7 @@ <FLAGS>rw</FLAGS> <NICK>physics</NICK> <BLURB>water density: from 1 to 4.</BLURB> -<DEFAULT>3.18612e-241</DEFAULT> +<DEFAULT>6.99743e-317</DEFAULT> </ARG> <ARG> @@ -26930,7 +26940,7 @@ <FLAGS>rw</FLAGS> <NICK>splash</NICK> <BLURB>make a big splash in the center.</BLURB> -<DEFAULT>3.24099e-05</DEFAULT> +<DEFAULT>0</DEFAULT> </ARG> <ARG> @@ -26940,7 +26950,7 @@ <FLAGS>rw</FLAGS> <NICK>splash</NICK> <BLURB>make a big splash in the center.</BLURB> -<DEFAULT>5.732e-317</DEFAULT> +<DEFAULT>6.90917e-317</DEFAULT> </ARG> <ARG> @@ -26970,7 +26980,7 @@ <FLAGS>rw</FLAGS> <NICK>ratiox</NICK> <BLURB>x-ratio.</BLURB> -<DEFAULT>1.37974e-309</DEFAULT> +<DEFAULT>5.37189e-317</DEFAULT> </ARG> <ARG> @@ -26980,7 +26990,7 @@ <FLAGS>rw</FLAGS> <NICK>ratioy</NICK> <BLURB>y-ratio.</BLURB> -<DEFAULT>1.3852e-309</DEFAULT> +<DEFAULT>6.95847e-317</DEFAULT> </ARG> <ARG> @@ -26990,7 +27000,7 @@ <FLAGS>rw</FLAGS> <NICK>DelayTime</NICK> <BLURB>the delay time.</BLURB> -<DEFAULT>1.58101e-322</DEFAULT> +<DEFAULT>0</DEFAULT> </ARG> <ARG> @@ -27020,7 +27030,7 @@ <FLAGS>rw</FLAGS> <NICK>Color</NICK> <BLURB>the color of the image.</BLURB> -<DEFAULT>0</DEFAULT> +<DEFAULT>1.9736e-38</DEFAULT> </ARG> <ARG> @@ -27040,7 +27050,7 @@ <FLAGS>rw</FLAGS> <NICK>Color-R</NICK> <BLURB>the color of the image.</BLURB> -<DEFAULT>1.58995e-30</DEFAULT> +<DEFAULT>1.52361e-38</DEFAULT> </ARG> <ARG> @@ -27370,7 +27380,7 @@ <FLAGS>rw</FLAGS> <NICK>lredscale</NICK> <BLURB>multiplier for downscaling non-edge brightness.</BLURB> -<DEFAULT>5.96156e-317</DEFAULT> +<DEFAULT>7.15583e-317</DEFAULT> </ARG> <ARG> @@ -27380,7 +27390,7 @@ <FLAGS>rw</FLAGS> <NICK>lthresh</NICK> <BLURB>threshold for edge lightening.</BLURB> -<DEFAULT>2.47033e-323</DEFAULT> +<DEFAULT>0</DEFAULT> </ARG> <ARG> @@ -27560,7 +27570,7 @@ <FLAGS>rw</FLAGS> <NICK>blend</NICK> <BLURB>blend factor.</BLURB> -<DEFAULT>1.37974e-309</DEFAULT> +<DEFAULT>1.37429e-309</DEFAULT> </ARG> <ARG> @@ -27570,7 +27580,7 @@ <FLAGS>rw</FLAGS> <NICK>fader</NICK> <BLURB>the fader position.</BLURB> -<DEFAULT>4.74303e-322</DEFAULT> +<DEFAULT>1.37429e-309</DEFAULT> </ARG> <ARG> @@ -27750,7 +27760,7 @@ <FLAGS>rw</FLAGS> <NICK>HSync</NICK> <BLURB>the hsync offset.</BLURB> -<DEFAULT>5.76783e-317</DEFAULT> +<DEFAULT>2.34498e-310</DEFAULT> </ARG> <ARG> @@ -59403,3 +59413,23 @@ <DEFAULT>NULL</DEFAULT> </ARG> +<ARG> +<NAME>GstWebvttEnc::duration</NAME> +<TYPE>gint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Offset for the duration</NICK> +<BLURB>Offset for the duration of the subtitles.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstWebvttEnc::timestamp</NAME> +<TYPE>gint64</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Offset for the starttime</NICK> +<BLURB>Offset for the starttime for the subtitles.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy index 0bd6e531..23c2bb35 100644 --- a/docs/plugins/gst-plugins-bad-plugins.hierarchy +++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy @@ -193,6 +193,7 @@ GObject GstEdgeDetect GstFaceBlur GstFestival + GstFieldAnalysis GstGDPDepay GstGDPPay GstGmeDec @@ -230,6 +231,7 @@ GObject GstVideoSegmentClip GstSpanPlc GstSpeed + GstSrtEnc GstTagMux GstId3Mux GstTemplateMatch @@ -237,6 +239,7 @@ GObject GstSchroDec GstVideoEncoder GstSchroEnc + GstWebvttEnc GstY4mDec MpegTSBase GstTSDemux diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html index 550085f3..9a1e6c42 100644 --- a/docs/plugins/html/ch01.html +++ b/docs/plugins/html/ch01.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter"> <div class="titlepage"><div><div><h2 class="title"> -<a name="idp3325424"></a>gst-plugins-bad Elements</h2></div></div></div> +<a name="idp561648"></a>gst-plugins-bad Elements</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-assrender.html">assrender</a></span><span class="refpurpose"> — Renders ASS/SSA subtitles with libass</span> @@ -105,6 +105,9 @@ <span class="refentrytitle"><a href="gst-plugins-bad-plugins-edgedetect.html">edgedetect</a></span><span class="refpurpose"> — Performs canny edge detection on videos and images.</span> </dt> <dt> +<span class="refentrytitle"><a href="gst-plugins-bad-plugins-eglglessink.html">eglglessink</a></span><span class="refpurpose"></span> +</dt> +<dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-faac.html">faac</a></span><span class="refpurpose"> — Free MPEG-2/4 AAC encoder</span> </dt> <dt> @@ -159,6 +162,9 @@ <span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"> — High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</span> </dt> <dt> +<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"> — Decodes mp3 streams using the mpg123 library</span> +</dt> +<dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Parses a raw pcap stream</span> </dt> <dt> diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html index 3d7808b3..c8f180be 100644 --- a/docs/plugins/html/ch02.html +++ b/docs/plugins/html/ch02.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter"> <div class="titlepage"><div><div><h2 class="title"> -<a name="idp46336"></a>gst-plugins-bad Plugins</h2></div></div></div> +<a name="idp79056"></a>gst-plugins-bad Plugins</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-audiovisualizers.html">audiovisualizers</a></span><span class="refpurpose"> — <a name="plugin-audiovisualizers"></a>Creates video visualizations of audio input</span> @@ -153,6 +153,7 @@ <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-zbar.html">zbar</a></span><span class="refpurpose"> — <a name="plugin-zbar"></a>zbar barcode scanner</span> </dt> </dl></div> +<span style="color: red"><xi:include></xi:include></span> </div> <div class="footer"> <hr> diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html index 0b813444..b2472f1f 100644 --- a/docs/plugins/html/ch03.html +++ b/docs/plugins/html/ch03.html @@ -21,7 +21,7 @@ </tr></table> <div class="chapter"> <div class="titlepage"><div><div><h2 class="title"> -<a name="idp95536"></a>gst-plugins-bad Interfaces</h2></div></div></div> +<a name="idp5240304"></a>gst-plugins-bad Interfaces</h2></div></div></div> <div class="toc"><dl><dt> <span class="refentrytitle"><a href="GstPhotography.html">GstPhotography</a></span><span class="refpurpose"></span> </dt></dl></div> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html index 307b791a..c4e4e6a7 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html @@ -66,7 +66,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8404880"></a><h3>Element Information</h3> +<a name="idp3202368"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -89,7 +89,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp8583600"></a><h3>Element Pads</h3> +<a name="idp8062528"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html index 8e5432ea..29b98795 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html @@ -87,7 +87,7 @@ elements. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7508096"></a><h3>Element Information</h3> +<a name="idp8564480"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -110,7 +110,7 @@ elements. </div> <hr> <div class="refsect2"> -<a name="idp9526720"></a><h3>Element Pads</h3> +<a name="idp6639552"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html index e09c4059..a01e93e8 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8280208"></a><h3>Element Information</h3> +<a name="idp9701168"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp8707568"></a><h3>Element Pads</h3> +<a name="idp5349312"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-burn.html b/docs/plugins/html/gst-plugins-bad-plugins-burn.html index 82192854..750a6b0f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-burn.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-burn.html @@ -71,7 +71,7 @@ Burn adjusts the colors of a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp7639184"></a><h3>Example launch line</h3> +<a name="idp8562096"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -89,7 +89,7 @@ Burn adjusts the colors of a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8481168"></a><h3>Element Information</h3> +<a name="idp9697312"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -112,7 +112,7 @@ Burn adjusts the colors of a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp7574640"></a><h3>Element Pads</h3> +<a name="idp7815232"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html index c7b03a5d..0864dea4 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7733584"></a><h3>Element Information</h3> +<a name="idp6032976"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -67,7 +67,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp8376288"></a><h3>Element Pads</h3> +<a name="idp7860832"></a><h3>Element Pads</h3> </div> </div> <p> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html index f89c2565..aa7986c6 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html @@ -58,7 +58,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9359808"></a><h3>Element Information</h3> +<a name="idp3338224"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -81,7 +81,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp5822592"></a><h3>Element Pads</h3> +<a name="idp7677792"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html b/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html index 309de995..8ad2c9ed 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html @@ -80,7 +80,7 @@ GstCeltEnc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7684592"></a><h3>Element Information</h3> +<a name="idp9278592"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -103,7 +103,7 @@ GstCeltEnc implements </div> <hr> <div class="refsect2"> -<a name="idp10455584"></a><h3>Element Pads</h3> +<a name="idp9806544"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html index a282c44e..39a04cdb 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html @@ -72,7 +72,7 @@ Chromium breaks the colors of a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp7061136"></a><h3>Example launch line</h3> +<a name="idp5255472"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -90,7 +90,7 @@ Chromium breaks the colors of a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp5900448"></a><h3>Element Information</h3> +<a name="idp6080816"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -113,7 +113,7 @@ Chromium breaks the colors of a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp8000192"></a><h3>Element Pads</h3> +<a name="idp7044720"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-circle.html b/docs/plugins/html/gst-plugins-bad-plugins-circle.html index 04c90872..8e921c05 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-circle.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-circle.html @@ -71,7 +71,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8233456"></a><h3>Element Information</h3> +<a name="idp8391216"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10151808"></a><h3>Element Pads</h3> +<a name="idp5537376"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html index 1dda0f7d..d956847b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html @@ -70,7 +70,7 @@ Map colors of the video input to a lookup table <p> </p> <div class="refsect2"> -<a name="idp6409984"></a><h3>Example launch line</h3> +<a name="idp9432736"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -90,7 +90,7 @@ Map colors of the video input to a lookup table <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8290272"></a><h3>Element Information</h3> +<a name="idp9712496"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -113,7 +113,7 @@ Map colors of the video input to a lookup table </div> <hr> <div class="refsect2"> -<a name="idp5747696"></a><h3>Element Pads</h3> +<a name="idp8417024"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html index 428dabd5..6b3974f2 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html @@ -61,7 +61,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10241232"></a><h3>Element Information</h3> +<a name="idp10163840"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -84,7 +84,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp9809216"></a><h3>Element Pads</h3> +<a name="idp8413504"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html index 15571381..95cb4e39 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp2871152"></a><h3>Element Information</h3> +<a name="idp7545312"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -83,7 +83,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp9446880"></a><h3>Element Pads</h3> +<a name="idp5958128"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html index dc6e53a6..b55c4f28 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html @@ -61,7 +61,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10341872"></a><h3>Element Information</h3> +<a name="idp10234752"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -84,7 +84,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp7360800"></a><h3>Element Pads</h3> +<a name="idp7068864"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html index f3f091e1..ca75ddbf 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7331248"></a><h3>Element Information</h3> +<a name="idp9341952"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -91,7 +91,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10419952"></a><h3>Element Pads</h3> +<a name="idp7716928"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html index d92314c1..0fa46e2f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html @@ -72,7 +72,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7531312"></a><h3>Element Information</h3> +<a name="idp3266864"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -95,7 +95,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp8630480"></a><h3>Element Pads</h3> +<a name="idp7708688"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html index 4c15317c..a81a1ebc 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html @@ -70,7 +70,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10710976"></a><h3>Element Information</h3> +<a name="idp7989584"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -93,7 +93,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10586656"></a><h3>Element Pads</h3> +<a name="idp10260016"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html index 6a779b4e..12d54e3b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html @@ -77,7 +77,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/ <p> </p> <div class="refsect2"> -<a name="idp9290960"></a><h3>Example launch line</h3> +<a name="idp9408688"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -95,7 +95,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6753888"></a><h3>Element Information</h3> +<a name="idp9062032"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -118,7 +118,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/ </div> <hr> <div class="refsect2"> -<a name="idp9932688"></a><h3>Element Pads</h3> +<a name="idp9069552"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html index e1b85b19..f7aae21e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9385424"></a><h3>Element Information</h3> +<a name="idp7601696"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -91,7 +91,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10611744"></a><h3>Element Pads</h3> +<a name="idp9907888"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html index 08ad7510..e8102d47 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html @@ -71,7 +71,7 @@ Dilate adjusts the colors of a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp2886704"></a><h3>Example launch line</h3> +<a name="idp7021856"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -89,7 +89,7 @@ Dilate adjusts the colors of a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8369648"></a><h3>Element Information</h3> +<a name="idp8110720"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -112,7 +112,7 @@ Dilate adjusts the colors of a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp11063088"></a><h3>Element Pads</h3> +<a name="idp10818864"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html index e175f016..816354e7 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html @@ -70,7 +70,7 @@ Dodge saturates the colors of a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp7062528"></a><h3>Example launch line</h3> +<a name="idm3184"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -88,7 +88,7 @@ Dodge saturates the colors of a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9413376"></a><h3>Element Information</h3> +<a name="idp9626784"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -111,7 +111,7 @@ Dodge saturates the colors of a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp7649632"></a><h3>Element Pads</h3> +<a name="idp10758384"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html index a803e3a8..ccc06a74 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html @@ -85,7 +85,7 @@ the following fields: <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8078608"></a><h3>Element Information</h3> +<a name="idp6982336"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -108,7 +108,7 @@ the following fields: </div> <hr> <div class="refsect2"> -<a name="idp8973056"></a><h3>Element Pads</h3> +<a name="idp8487424"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html index 42251b5c..76978236 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html @@ -161,7 +161,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11698560"></a><h3>Element Information</h3> +<a name="idp10854560"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -184,7 +184,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the </div> <hr> <div class="refsect2"> -<a name="idp11705968"></a><h3>Element Pads</h3> +<a name="idp10861968"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html index 653cc462..ff7705b5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html @@ -66,7 +66,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7745808"></a><h3>Element Information</h3> +<a name="idp7689968"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -89,7 +89,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp6749888"></a><h3>Element Pads</h3> +<a name="idp6647200"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html index bcd81a51..0b64e98f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html @@ -90,7 +90,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9127440"></a><h3>Element Information</h3> +<a name="idp11226768"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -113,7 +113,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp11736000"></a><h3>Element Pads</h3> +<a name="idp11234288"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html index c6f65f2e..71656e23 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html @@ -60,7 +60,7 @@ DVD sub picture overlay element. <p> </p> <div class="refsect2"> -<a name="idp6850368"></a><h3>Example launch line</h3> +<a name="idp6497824"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -78,7 +78,7 @@ DVD sub picture overlay element. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6848192"></a><h3>Element Information</h3> +<a name="idp11023664"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -101,7 +101,7 @@ DVD sub picture overlay element. </div> <hr> <div class="refsect2"> -<a name="idp5891680"></a><h3>Element Pads</h3> +<a name="idp9721712"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html index 006df270..b90529e0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html @@ -7,7 +7,7 @@ <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> <link rel="prev" href="gst-plugins-bad-plugins-exclusion.html" title="exclusion"> -<link rel="next" href="gst-plugins-bad-plugins-faac.html" title="faac"> +<link rel="next" href="gst-plugins-bad-plugins-eglglessink.html" title="eglglessink"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> @@ -18,7 +18,7 @@ <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-bad-plugins-faac.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +<td><a accesskey="n" href="gst-plugins-bad-plugins-eglglessink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr> <tr><td colspan="5" class="shortcuts"> <a href="#gst-plugins-bad-plugins-edgedetect.synopsis" class="shortcut">Top</a> @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11459232"></a><h3>Element Information</h3> +<a name="idp9025376"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -67,7 +67,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp6898368"></a><h3>Element Pads</h3> +<a name="idp5379504"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html b/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html new file mode 100644 index 00000000..acb988a3 --- /dev/null +++ b/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html @@ -0,0 +1,95 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>eglglessink</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> +<link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> +<link rel="prev" href="gst-plugins-bad-plugins-edgedetect.html" title="edgedetect"> +<link rel="next" href="gst-plugins-bad-plugins-faac.html" title="faac"> +<meta name="generator" content="GTK-Doc V1.18 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> +<tr valign="middle"> +<td><a accesskey="p" href="gst-plugins-bad-plugins-edgedetect.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> +<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> +<td><a accesskey="n" href="gst-plugins-bad-plugins-faac.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +</tr> +<tr><td colspan="5" class="shortcuts"> +<a href="#gst-plugins-bad-plugins-eglglessink.synopsis" class="shortcut">Top</a> + | + <a href="#gst-plugins-bad-plugins-eglglessink.description" class="shortcut">Description</a> +</td></tr> +</table> +<div class="refentry"> +<a name="gst-plugins-bad-plugins-eglglessink"></a><div class="titlepage"></div> +<div class="refnamediv"><table width="100%"><tr> +<td valign="top"> +<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-eglglessink.top_of_page"></a>eglglessink</span></h2> +<p>eglglessink</p> +</td> +<td valign="top" align="right"></td> +</tr></table></div> +<div class="refsynopsisdiv"> +<a name="gst-plugins-bad-plugins-eglglessink.synopsis"></a><h2>Synopsis</h2> +<pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink" title="struct GstEglGlesSink">GstEglGlesSink</a>; +</pre> +</div> +<div class="refsect1"> +<a name="gst-plugins-bad-plugins-eglglessink.description"></a><h2>Description</h2> +<p> +</p> +</div> +<div class="refsect1"> +<a name="gst-plugins-bad-plugins-eglglessink.details"></a><h2>Details</h2> +<div class="refsect2"> +<a name="GstEglGlesSink"></a><h3>struct GstEglGlesSink</h3> +<pre class="programlisting">struct GstEglGlesSink { + GstVideoSink videosink; /* Element hook */ + int par_n, par_d; /* Aspect ratio from caps */ + + GstVideoFormat format; + GstVideoRectangle display_region; + GstCaps *sinkcaps; + GstCaps *current_caps, *configured_caps; + + GstEglGlesImageFmt *selected_fmt; + GstEglGlesRenderContext eglglesctx; + + GList *supported_fmts; + + /* Runtime flags */ + gboolean have_window; + gboolean using_own_window; + gboolean have_surface;; + gboolean have_vbo; + gboolean have_texture; + gboolean egl_started; + + GThread *thread; + gboolean thread_running; + GstDataQueue *queue; + GCond *render_cond; + GMutex *render_lock; + GstFlowReturn last_flow; + + /* Properties */ + gboolean create_window; + gboolean force_aspect_ratio; +}; +</pre> +<p> +</p> +</div> +</div> +</div> +<div class="footer"> +<hr> + Generated by GTK-Doc V1.18</div> +</body> +</html>
\ No newline at end of file diff --git a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html index 76bdf0b9..e7b81cec 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html @@ -71,7 +71,7 @@ Exclusion saturates the colors of a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp10990960"></a><h3>Example launch line</h3> +<a name="idp3313440"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -89,7 +89,7 @@ Exclusion saturates the colors of a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8269536"></a><h3>Element Information</h3> +<a name="idp5480032"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -112,7 +112,7 @@ Exclusion saturates the colors of a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp11396752"></a><h3>Element Pads</h3> +<a name="idp11186928"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-faac.html index 2984bc3d..991a62f5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> -<link rel="prev" href="gst-plugins-bad-plugins-edgedetect.html" title="edgedetect"> +<link rel="prev" href="gst-plugins-bad-plugins-eglglessink.html" title="eglglessink"> <link rel="next" href="gst-plugins-bad-plugins-faad.html" title="faad"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -14,7 +14,7 @@ <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> <tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-bad-plugins-edgedetect.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="p" href="gst-plugins-bad-plugins-eglglessink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> @@ -81,7 +81,7 @@ GstFaac implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11452144"></a><h3>Element Information</h3> +<a name="idp10536192"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -104,7 +104,7 @@ GstFaac implements </div> <hr> <div class="refsect2"> -<a name="idp11864736"></a><h3>Element Pads</h3> +<a name="idp11645984"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-faad.html index ecc4bba0..08fcde48 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-faad.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-faad.html @@ -58,7 +58,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6962688"></a><h3>Element Information</h3> +<a name="idp6434304"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -81,7 +81,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp9223968"></a><h3>Element Pads</h3> +<a name="idp5377872"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html index d3fac7f6..df3919c5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11381968"></a><h3>Element Information</h3> +<a name="idp11006592"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -67,7 +67,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp7852848"></a><h3>Element Pads</h3> +<a name="idp6718704"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html index b0d404bc..70de098f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11222352"></a><h3>Element Information</h3> +<a name="idp11109152"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -67,7 +67,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10267392"></a><h3>Element Pads</h3> +<a name="idp6326800"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-festival.html index 9076a9e3..95483cf0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html @@ -65,7 +65,7 @@ in server mode, started as </p> <p> </p> <div class="refsect2"> -<a name="idp6977680"></a><h3>Example pipeline</h3> +<a name="idp7055104"></a><h3>Example pipeline</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -83,7 +83,7 @@ in server mode, started as </p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9449264"></a><h3>Element Information</h3> +<a name="idp5954592"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -106,7 +106,7 @@ in server mode, started as </p> </div> <hr> <div class="refsect2"> -<a name="idp11560928"></a><h3>Element Pads</h3> +<a name="idp11151616"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html index cb90f667..b211fc14 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html @@ -60,7 +60,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9945568"></a><h3>Element Information</h3> +<a name="idp5300832"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -83,7 +83,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10627008"></a><h3>Element Pads</h3> +<a name="idm37984"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html index 63150c1d..0123a159 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html @@ -95,7 +95,7 @@ Can display the current and average framerate as a testoverlay or on stdout. <p> </p> <div class="refsect2"> -<a name="idp12471232"></a><h3>Example launch lines</h3> +<a name="idp11978528"></a><h3>Example launch lines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -107,7 +107,7 @@ Can display the current and average framerate as a testoverlay or on stdout. <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink text<span class="gtkdoc opt">-</span>overlay<span class="gtkdoc opt">=</span><span class="keyword">false</span> gst<span class="gtkdoc opt">-</span>launch filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>avi <span class="gtkdoc opt">!</span> decodebin2 name<span class="gtkdoc opt">=</span>d <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> fpsdisplaysink d<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> fakesink sync<span class="gtkdoc opt">=</span><span class="keyword">true</span> -gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink</span></pre></td> +gst<span class="gtkdoc opt">-</span>launch playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink</span></pre></td> </tr> </tbody> </table> @@ -119,7 +119,7 @@ gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt"> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12474208"></a><h3>Element Information</h3> +<a name="idp11981504"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -142,7 +142,7 @@ gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt"> </div> <hr> <div class="refsect2"> -<a name="idp12481616"></a><h3>Element Pads</h3> +<a name="idp11717552"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html index 3b7ebff0..41743be9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html @@ -47,7 +47,7 @@ Gaussianblur blurs the video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp11938864"></a><h3>Example launch line</h3> +<a name="idp11609712"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -65,7 +65,7 @@ Gaussianblur blurs the video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11936528"></a><h3>Element Information</h3> +<a name="idp11607376"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -88,7 +88,7 @@ Gaussianblur blurs the video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp8358144"></a><h3>Element Pads</h3> +<a name="idp11168416"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html index 5fc7c48c..b15d79e8 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html @@ -71,7 +71,7 @@ among others. Jpegparse can also extract metadata (e.g. xmp). <p> </p> <div class="refsect2"> -<a name="idp7188976"></a><h3>Example launch line</h3> +<a name="idp12151888"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -91,7 +91,7 @@ HTTP and stores it in a matroska file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6175104"></a><h3>Element Information</h3> +<a name="idp10995520"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -114,7 +114,7 @@ HTTP and stores it in a matroska file. </div> <hr> <div class="refsect2"> -<a name="idp11952080"></a><h3>Element Pads</h3> +<a name="idp6253152"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html index 7800f159..d538cf7e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html @@ -71,7 +71,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11259824"></a><h3>Element Information</h3> +<a name="idp6889120"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp12103456"></a><h3>Element Pads</h3> +<a name="idp11549392"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html index dd6c40fa..d054e6bb 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html @@ -76,7 +76,7 @@ Last reviewed on 2008-02-10 (0.10.11) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9606896"></a><h3>Element Information</h3> +<a name="idp6484256"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -99,7 +99,7 @@ Last reviewed on 2008-02-10 (0.10.11) </div> <hr> <div class="refsect2"> -<a name="idp12237904"></a><h3>Element Pads</h3> +<a name="idp11534320"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-marble.html b/docs/plugins/html/gst-plugins-bad-plugins-marble.html index 5361690c..0a978453 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-marble.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-marble.html @@ -71,7 +71,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7007536"></a><h3>Element Information</h3> +<a name="idp7476688"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp12360224"></a><h3>Element Pads</h3> +<a name="idp12162560"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html index 11198feb..e27409ed 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html @@ -57,7 +57,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6388880"></a><h3>Element Information</h3> +<a name="idp11936640"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -80,7 +80,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10946384"></a><h3>Element Pads</h3> +<a name="idp7828880"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html index 07ea3d22..c3b65c99 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html @@ -65,7 +65,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7739760"></a><h3>Element Information</h3> +<a name="idp8767520"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -88,7 +88,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp9957840"></a><h3>Element Pads</h3> +<a name="idp5687216"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html index d27824e0..ae1e42c9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7850544"></a><h3>Element Information</h3> +<a name="idp8545584"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -91,7 +91,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp7024800"></a><h3>Element Pads</h3> +<a name="idp8496368"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html index 4e13ca62..89424d4b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html @@ -76,7 +76,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12308432"></a><h3>Element Information</h3> +<a name="idp10394880"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -99,7 +99,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp13019216"></a><h3>Element Pads</h3> +<a name="idp12478608"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html index d811812d..f3e04e30 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html @@ -106,7 +106,7 @@ GstMpeg2enc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13782656"></a><h3>Element Information</h3> +<a name="idp13298064"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -130,7 +130,7 @@ Ronald Bultje <rbultje@ronald.bitfreak.net></td> </div> <hr> <div class="refsect2"> -<a name="idp13790064"></a><h3>Element Pads</h3> +<a name="idp12672880"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html b/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html new file mode 100644 index 00000000..bb6797d6 --- /dev/null +++ b/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html @@ -0,0 +1,146 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>mpg123audiodec</title> +<meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> +<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> +<link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> +<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex"> +<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse"> +<meta name="generator" content="GTK-Doc V1.18 (XML mode)"> +<link rel="stylesheet" href="style.css" type="text/css"> +</head> +<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> +<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> +<tr valign="middle"> +<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> +<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> +<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> +<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +</tr> +<tr><td colspan="5" class="shortcuts"> +<a href="#gst-plugins-bad-plugins-mpg123audiodec.synopsis" class="shortcut">Top</a> + | + <a href="#gst-plugins-bad-plugins-mpg123audiodec.description" class="shortcut">Description</a> + | + <a href="#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" class="shortcut">Object Hierarchy</a> +</td></tr> +</table> +<div class="refentry"> +<a name="gst-plugins-bad-plugins-mpg123audiodec"></a><div class="titlepage"></div> +<div class="refnamediv"><table width="100%"><tr> +<td valign="top"> +<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-mpg123audiodec.top_of_page"></a>mpg123audiodec</span></h2> +<p>mpg123audiodec — Decodes mp3 streams using the mpg123 library</p> +</td> +<td valign="top" align="right"></td> +</tr></table></div> +<div class="refsynopsisdiv"> +<a name="gst-plugins-bad-plugins-mpg123audiodec.synopsis"></a><h2>Synopsis</h2> +<a name="GstMpg123AudioDec"></a><pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct" title="struct GstMpg123AudioDec">GstMpg123AudioDec</a>; +</pre> +</div> +<div class="refsect1"> +<a name="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy"></a><h2>Object Hierarchy</h2> +<pre class="synopsis"> + <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a> + +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> + +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a> + +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a> + +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">GstAudioDecoder</a> + +----GstMpg123AudioDec +</pre> +</div> +<div class="refsect1"> +<a name="gst-plugins-bad-plugins-mpg123audiodec.description"></a><h2>Description</h2> +<div class="refsynopsisdiv"> +<h2>Synopsis</h2> +<div class="refsect2"> +<a name="idp5431792"></a><h3>Element Information</h3> +<div class="variablelist"><table border="0"> +<col align="left" valign="top"> +<tbody> +<tr> +<td><p><span class="term">plugin</span></p></td> +<td> + mpg123 + </td> +</tr> +<tr> +<td><p><span class="term">author</span></p></td> +<td>Carlos Rafael Giani <dv@pseudoterminal.org></td> +</tr> +<tr> +<td><p><span class="term">class</span></p></td> +<td>Codec/Decoder/Audio</td> +</tr> +</tbody> +</table></div> +</div> +<hr> +<div class="refsect2"> +<a name="idp6793888"></a><h3>Element Pads</h3> +<div class="variablelist"><table border="0"> +<col align="left" valign="top"> +<tbody> +<tr> +<td><p><span class="term">name</span></p></td> +<td>sink</td> +</tr> +<tr> +<td><p><span class="term">direction</span></p></td> +<td>sink</td> +</tr> +<tr> +<td><p><span class="term">presence</span></p></td> +<td>always</td> +</tr> +<tr> +<td><p><span class="term">details</span></p></td> +<td>audio/mpeg, mpegversion=(int){ 1 }, layer=(int)[ 1, 3 ], rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], parsed=(boolean)true</td> +</tr> +</tbody> +</table></div> +<div class="variablelist"><table border="0"> +<col align="left" valign="top"> +<tbody> +<tr> +<td><p><span class="term">name</span></p></td> +<td>src</td> +</tr> +<tr> +<td><p><span class="term">direction</span></p></td> +<td>source</td> +</tr> +<tr> +<td><p><span class="term">presence</span></p></td> +<td>always</td> +</tr> +<tr> +<td><p><span class="term">details</span></p></td> +<td>audio/x-raw, format=(string){ S16LE, U16LE, S32LE, U32LE, S24LE, U24LE, F32LE }, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], layout=(string)interleaved</td> +</tr> +</tbody> +</table></div> +</div> +</div> +<p> +</p> +</div> +<div class="refsect1"> +<a name="gst-plugins-bad-plugins-mpg123audiodec.details"></a><h2>Details</h2> +<div class="refsect2"> +<a name="GstMpg123AudioDec-struct"></a><h3>struct GstMpg123AudioDec</h3> +<pre class="programlisting">struct GstMpg123AudioDec;</pre> +<p> +</p> +</div> +</div> +</div> +<div class="footer"> +<hr> + Generated by GTK-Doc V1.18</div> +</body> +</html>
\ No newline at end of file diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html index f571581f..3e09415d 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html @@ -7,7 +7,7 @@ <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> <link rel="prev" href="gst-plugins-bad-plugins-mpeg2enc.html" title="mpeg2enc"> -<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse"> +<link rel="next" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> @@ -18,7 +18,7 @@ <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> -<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> +<td><a accesskey="n" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr> <tr><td colspan="5" class="shortcuts"> <a href="#gst-plugins-bad-plugins-mplex.synopsis" class="shortcut">Top</a> @@ -71,7 +71,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6494448"></a><h3>Element Information</h3> +<a name="idp6574128"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -96,7 +96,7 @@ Mark Nauwelaerts <mnauw@users.sourceforge.net></td> </div> <hr> <div class="refsect2"> -<a name="idp7233392"></a><h3>Element Pads</h3> +<a name="idp3286704"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html index b7af572d..87b99cca 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html @@ -62,7 +62,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-opencvtextover <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18451504"></a><h3>Element Information</h3> +<a name="idp15855968"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -85,7 +85,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-opencvtextover </div> <hr> <div class="refsect2"> -<a name="idp20159808"></a><h3>Element Pads</h3> +<a name="idp19195696"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html index 4d048c27..4c711ad8 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html @@ -6,7 +6,7 @@ <meta name="generator" content="DocBook XSL Stylesheets V1.76.1"> <link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual"> <link rel="up" href="ch01.html" title="gst-plugins-bad Elements"> -<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex"> +<link rel="prev" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec"> <link rel="next" href="gst-plugins-bad-plugins-pinch.html" title="pinch"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -14,7 +14,7 @@ <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"> <tr valign="middle"> -<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> +<td><a accesskey="p" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th> @@ -76,7 +76,7 @@ should be included. <p> </p> <div class="refsect2"> -<a name="idp12991376"></a><h3>Example pipelines</h3> +<a name="idp12954160"></a><h3>Example pipelines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -97,7 +97,7 @@ depayload and decode them. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12994208"></a><h3>Element Information</h3> +<a name="idp12956992"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -120,7 +120,7 @@ depayload and decode them. </div> <hr> <div class="refsect2"> -<a name="idp13001616"></a><h3>Element Pads</h3> +<a name="idp12964400"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html index 4c35cb9a..7dc9bd4c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6992816"></a><h3>Element Information</h3> +<a name="idp9461136"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp13602240"></a><h3>Element Pads</h3> +<a name="idp13070992"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html index ba510797..7432f8bb 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18341264"></a><h2>Plugin Information</h2> +<a name="idp17823488"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp19029552"></a><h2>Elements</h2> +<a name="idp17902656"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html index 180da8f3..79505c87 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18602912"></a><h2>Plugin Information</h2> +<a name="idp16462768"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17927264"></a><h2>Elements</h2> +<a name="idp18903840"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html index c93e7754..a4147119 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18245856"></a><h2>Plugin Information</h2> +<a name="idp14737248"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17446480"></a><h2>Elements</h2> +<a name="idp16513856"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html index 0a3894c7..1d0e9610 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18833536"></a><h2>Plugin Information</h2> +<a name="idp17257008"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17399632"></a><h2>Elements</h2> +<a name="idp17951136"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html index aff6be29..e9747647 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp19467264"></a><h2>Plugin Information</h2> +<a name="idp18556896"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp15506736"></a><h2>Elements</h2> +<a name="idp19380224"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html index 2bd7b44f..8c3a8741 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18993616"></a><h2>Plugin Information</h2> +<a name="idp13908736"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18092128"></a><h2>Elements</h2> +<a name="idp19219712"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html index 4ff38d7f..25b0a269 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp14745344"></a><h2>Plugin Information</h2> +<a name="idp19110816"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18213680"></a><h2>Elements</h2> +<a name="idp17927728"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html index 5b01a223..efbb8501 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16261952"></a><h2>Plugin Information</h2> +<a name="idp17326816"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18281296"></a><h2>Elements</h2> +<a name="idp15258576"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html index b9440a74..c8e6eda4 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17731712"></a><h2>Plugin Information</h2> +<a name="idp16123040"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14368864"></a><h2>Elements</h2> +<a name="idp17373744"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html index 2193eb49..d3cfe76a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16272096"></a><h2>Plugin Information</h2> +<a name="idp14476528"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17060720"></a><h2>Elements</h2> +<a name="idp20252240"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html index e6eabe7d..d4ead1e9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15038144"></a><h2>Plugin Information</h2> +<a name="idp14975792"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14135648"></a><h2>Elements</h2> +<a name="idp15474128"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html index 5a1aa8a7..afd47816 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15178032"></a><h2>Plugin Information</h2> +<a name="idp16769984"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp15645840"></a><h2>Elements</h2> +<a name="idp18758176"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html index 1652e7a1..663415a9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16227312"></a><h2>Plugin Information</h2> +<a name="idp15663584"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14540592"></a><h2>Elements</h2> +<a name="idp17076944"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html index 401fb3e5..0124b608 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15198080"></a><h2>Plugin Information</h2> +<a name="idp19754352"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp20803840"></a><h2>Elements</h2> +<a name="idp15591376"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html index f6f16538..65ae2a67 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp21347824"></a><h2>Plugin Information</h2> +<a name="idp18060864"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18941456"></a><h2>Elements</h2> +<a name="idp15192768"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html index 2749aac1..77d43fb2 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15033584"></a><h2>Plugin Information</h2> +<a name="idp20475568"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17976752"></a><h2>Elements</h2> +<a name="idp14596448"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html index c2c29862..ef7eeefb 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16956720"></a><h2>Plugin Information</h2> +<a name="idp16471888"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18509232"></a><h2>Elements</h2> +<a name="idp17721872"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html index d5d0a7f2..c3544800 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15484768"></a><h2>Plugin Information</h2> +<a name="idp18029696"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18740304"></a><h2>Elements</h2> +<a name="idp20330176"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html index ee2a6668..82832cb0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17990208"></a><h2>Plugin Information</h2> +<a name="idp18861280"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17483168"></a><h2>Elements</h2> +<a name="idp15751120"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html index 9100a7ce..62120412 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16911424"></a><h2>Plugin Information</h2> +<a name="idp19689648"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp19525264"></a><h2>Elements</h2> +<a name="idp17200416"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html index 8b9f7ba9..d8c40c7a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15203792"></a><h2>Plugin Information</h2> +<a name="idp15822000"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17530032"></a><h2>Elements</h2> +<a name="idp17293040"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html index b0f84334..5a836a20 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16466848"></a><h2>Plugin Information</h2> +<a name="idp14951168"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14930064"></a><h2>Elements</h2> +<a name="idp18460864"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html index 9ac70b03..765efd9f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18950080"></a><h2>Plugin Information</h2> +<a name="idp15003600"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18571824"></a><h2>Elements</h2> +<a name="idp15878672"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html index 963ae7a3..74f8e408 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp14971776"></a><h2>Plugin Information</h2> +<a name="idp15776128"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18938512"></a><h2>Elements</h2> +<a name="idp13997472"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html index e3dbbef9..54a479b1 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp21020208"></a><h2>Plugin Information</h2> +<a name="idp18492992"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp19716976"></a><h2>Elements</h2> +<a name="idp17706208"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html index 0edd1679..499815e5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17581664"></a><h2>Plugin Information</h2> +<a name="idp14584016"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14239824"></a><h2>Elements</h2> +<a name="idp15511808"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html index 71e24b05..2ef12157 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp14949664"></a><h2>Plugin Information</h2> +<a name="idp21218816"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp15155808"></a><h2>Elements</h2> +<a name="idp17632208"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html index 23cf40aa..52b51cd1 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15374752"></a><h2>Plugin Information</h2> +<a name="idp17922912"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp16957008"></a><h2>Elements</h2> +<a name="idp14419184"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html index 29dbfa0a..fe645233 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18415424"></a><h2>Plugin Information</h2> +<a name="idp14601872"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14835776"></a><h2>Elements</h2> +<a name="idp15914464"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html index f2ac9a6c..64eb1cbe 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp14455552"></a><h2>Plugin Information</h2> +<a name="idp18577040"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp20042048"></a><h2>Elements</h2> +<a name="idp15855680"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html index d965c025..bc381342 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16092896"></a><h2>Plugin Information</h2> +<a name="idp15307200"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp19465728"></a><h2>Elements</h2> +<a name="idp14496592"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html index 57c0ed1a..eea4d0fd 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp14806000"></a><h2>Plugin Information</h2> +<a name="idp20943504"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18588752"></a><h2>Elements</h2> +<a name="idp15058320"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html index 29b9e086..e134e53a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15030800"></a><h2>Plugin Information</h2> +<a name="idp15687120"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp16392576"></a><h2>Elements</h2> +<a name="idp18480896"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html index 026feca9..26502ce3 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16553728"></a><h2>Plugin Information</h2> +<a name="idp20659984"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14620768"></a><h2>Elements</h2> +<a name="idp16419824"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html index 273be4da..e4783797 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20236480"></a><h2>Plugin Information</h2> +<a name="idp20560368"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14729376"></a><h2>Elements</h2> +<a name="idp17425984"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html index 4b9dfbf7..dd93cd8b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15163280"></a><h2>Plugin Information</h2> +<a name="idp14430464"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18569248"></a><h2>Elements</h2> +<a name="idp14058224"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html index 8c7e49d4..14369e86 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16948688"></a><h2>Plugin Information</h2> +<a name="idp21499248"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18040496"></a><h2>Elements</h2> +<a name="idp16287536"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html index afad5296..10fa7e17 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18531216"></a><h2>Plugin Information</h2> +<a name="idp15166320"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp16842560"></a><h2>Elements</h2> +<a name="idp16570656"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html index 05cb8dab..0dcbbc12 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15725968"></a><h2>Plugin Information</h2> +<a name="idp21473520"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp18453488"></a><h2>Elements</h2> +<a name="idp14756528"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html index e43ff2b2..d21ca76f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15285328"></a><h2>Plugin Information</h2> +<a name="idp21172480"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17602064"></a><h2>Elements</h2> +<a name="idp20332352"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html index 34e91c33..dff6741c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp19862528"></a><h2>Plugin Information</h2> +<a name="idp15888384"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp20740096"></a><h2>Elements</h2> +<a name="idp18707104"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html index 1e9c5db1..5a426d99 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16952144"></a><h2>Plugin Information</h2> +<a name="idp17580288"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp14202992"></a><h2>Elements</h2> +<a name="idp14186432"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html index 3d004e4b..c120859d 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17172160"></a><h2>Plugin Information</h2> +<a name="idp16364528"></a><h2>Plugin Information</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -39,7 +39,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.0.1</td> +<td>1.0.2</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> @@ -57,7 +57,7 @@ </table></div> </div> <div class="refsect1"> -<a name="idp17969616"></a><h2>Elements</h2> +<a name="idp14155856"></a><h2>Elements</h2> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody><tr> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html index 0d09e8eb..8c53d267 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12810000"></a><h3>Element Information</h3> +<a name="idp12588176"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -68,7 +68,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp10032752"></a><h3>Element Pads</h3> +<a name="idp10750352"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html index 997f11ea..2469beca 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html @@ -74,7 +74,7 @@ GstRTMPSink implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7845072"></a><h3>Element Information</h3> +<a name="idp10313856"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -97,7 +97,7 @@ GstRTMPSink implements </div> <hr> <div class="refsect2"> -<a name="idp10991280"></a><h3>Element Pads</h3> +<a name="idp12618240"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html index d2655731..18c02a08 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html @@ -75,7 +75,7 @@ GstRTMPSrc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13737776"></a><h3>Element Information</h3> +<a name="idp12660144"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -98,7 +98,7 @@ GstRTMPSrc implements </div> <hr> <div class="refsect2"> -<a name="idp12933840"></a><h3>Element Pads</h3> +<a name="idp13223792"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html index a0ac9b1f..67dbab9e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html @@ -78,7 +78,7 @@ DTMF signal can replace the recorded audio while the tone is being sent. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17697280"></a><h3>Element Information</h3> +<a name="idp17239280"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -101,7 +101,7 @@ DTMF signal can replace the recorded audio while the tone is being sent. </div> <hr> <div class="refsect2"> -<a name="idp16314192"></a><h3>Element Pads</h3> +<a name="idp18487696"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html index a4cbc817..fa4ecf64 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html @@ -169,7 +169,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp16612992"></a><h3>Element Information</h3> +<a name="idp15967776"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -192,7 +192,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the </div> <hr> <div class="refsect2"> -<a name="idp16620448"></a><h3>Element Pads</h3> +<a name="idp15975232"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html index a637f5a4..1372d242 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html @@ -73,7 +73,7 @@ muxes into a single stream with a single SSRC. <p> </p> <div class="refsect2"> -<a name="idp16384384"></a><h3>Example pipelines</h3> +<a name="idp15425376"></a><h3>Example pipelines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -107,7 +107,7 @@ Last reviewed on 2010-09-30 (0.10.21) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18101040"></a><h3>Element Information</h3> +<a name="idp17279632"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -130,7 +130,7 @@ Last reviewed on 2010-09-30 (0.10.21) </div> <hr> <div class="refsect2"> -<a name="idp17243504"></a><h3>Element Pads</h3> +<a name="idp18599952"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html b/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html index 47f33b4f..098e77ea 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html @@ -77,7 +77,7 @@ Use Sceletempo to apply playback rates without the chipmunk effect. <p> </p> <div class="refsect2"> -<a name="idp14968480"></a><h3>Example pipelines</h3> +<a name="idp15122912"></a><h3>Example pipelines</h3> <p> </p> <div class="informalexample"> @@ -135,7 +135,7 @@ the algoritm looks. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18200048"></a><h3>Element Information</h3> +<a name="idp17113056"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -158,7 +158,7 @@ the algoritm looks. </div> <hr> <div class="refsect2"> -<a name="idp19138432"></a><h3>Element Pads</h3> +<a name="idp17120464"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html index 00f4b0b5..15f8dff5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html @@ -93,7 +93,7 @@ PLAYING state. <p> </p> <div class="refsect2"> -<a name="idp14331600"></a><h3>Example launch line</h3> +<a name="idp14238944"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -115,7 +115,7 @@ Last reviewed on 2007-10-01 (0.10.6) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp14334848"></a><h3>Element Information</h3> +<a name="idp14242192"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -138,7 +138,7 @@ Last reviewed on 2007-10-01 (0.10.6) </div> <hr> <div class="refsect2"> -<a name="idp17318256"></a><h3>Element Pads</h3> +<a name="idp14249664"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html index 93dfc0d6..2594bfe1 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html @@ -79,7 +79,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18484064"></a><h3>Element Information</h3> +<a name="idp17762016"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -102,7 +102,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp14653616"></a><h3>Element Pads</h3> +<a name="idp18225808"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html index d528d9d7..ab711b44 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18810464"></a><h3>Element Information</h3> +<a name="idp18584864"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -91,7 +91,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp14891264"></a><h3>Element Pads</h3> +<a name="idp15764656"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html index 13627d41..f5a5ce09 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html @@ -73,7 +73,7 @@ Solarize does a smart inverse in a video stream in realtime. <p> </p> <div class="refsect2"> -<a name="idp15543696"></a><h3>Example launch line</h3> +<a name="idp15260592"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -91,7 +91,7 @@ Solarize does a smart inverse in a video stream in realtime. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18113056"></a><h3>Element Information</h3> +<a name="idp16156960"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -114,7 +114,7 @@ Solarize does a smart inverse in a video stream in realtime. </div> <hr> <div class="refsect2"> -<a name="idp18120464"></a><h3>Element Pads</h3> +<a name="idp14195904"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html index 140e4ae9..6ea5ff90 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html @@ -70,7 +70,7 @@ right channel to x and y coordinates. <p> </p> <div class="refsect2"> -<a name="idp16360544"></a><h3>Example launch line</h3> +<a name="idp14971952"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -88,7 +88,7 @@ right channel to x and y coordinates. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp16956096"></a><h3>Element Information</h3> +<a name="idp16387936"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -111,7 +111,7 @@ right channel to x and y coordinates. </div> <hr> <div class="refsect2"> -<a name="idp16760656"></a><h3>Element Pads</h3> +<a name="idp18828288"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html index e588cb52..64b005bf 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html @@ -62,7 +62,7 @@ frequency spectrum as a series of bars. <p> </p> <div class="refsect2"> -<a name="idp15115872"></a><h3>Example launch line</h3> +<a name="idp14481504"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -80,7 +80,7 @@ frequency spectrum as a series of bars. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp14855504"></a><h3>Element Information</h3> +<a name="idp18531952"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -103,7 +103,7 @@ frequency spectrum as a series of bars. </div> <hr> <div class="refsect2"> -<a name="idp16520896"></a><h3>Element Pads</h3> +<a name="idp14665792"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-speed.html index 54e87ca1..92890b36 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html @@ -74,7 +74,7 @@ requires a fairly up-to-date gst-plugins-base, as of February 2007). <p> </p> <div class="refsect2"> -<a name="idp16722208"></a><h3>Example launch line</h3> +<a name="idp15250384"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -95,7 +95,7 @@ Last reviewed on 2007-02-26 (0.10.4.1) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17126768"></a><h3>Element Information</h3> +<a name="idp18464976"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -118,7 +118,7 @@ Last reviewed on 2007-02-26 (0.10.4.1) </div> <hr> <div class="refsect2"> -<a name="idp15287296"></a><h3>Element Pads</h3> +<a name="idp14266736"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html index 7542ad1c..5db1d9dd 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp16535872"></a><h3>Element Information</h3> +<a name="idp16170480"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp14639632"></a><h3>Element Pads</h3> +<a name="idp13810624"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-square.html b/docs/plugins/html/gst-plugins-bad-plugins-square.html index c10e0d94..a2eed595 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-square.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-square.html @@ -70,7 +70,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18523312"></a><h3>Element Information</h3> +<a name="idp17866240"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -93,7 +93,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp19456000"></a><h3>Element Pads</h3> +<a name="idp19585248"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html index 88e75842..6369b394 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp15129216"></a><h3>Element Information</h3> +<a name="idp18812224"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp14564208"></a><h3>Element Pads</h3> +<a name="idp17819264"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html index 5e834f15..2f38861b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html @@ -62,7 +62,7 @@ out-of phase properties of audio and draws this as clouds of stars. <p> </p> <div class="refsect2"> -<a name="idp15309472"></a><h3>Example launch line</h3> +<a name="idp13836752"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -80,7 +80,7 @@ out-of phase properties of audio and draws this as clouds of stars. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18216848"></a><h3>Element Information</h3> +<a name="idp18808256"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -103,7 +103,7 @@ out-of phase properties of audio and draws this as clouds of stars. </div> <hr> <div class="refsect2"> -<a name="idp17948704"></a><h3>Element Pads</h3> +<a name="idp15943312"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html index 878718da..4c7f1e91 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html @@ -56,7 +56,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-templatematch. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17634112"></a><h3>Element Information</h3> +<a name="idp15142416"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -79,7 +79,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-templatematch. </div> <hr> <div class="refsect2"> -<a name="idp18432016"></a><h3>Element Pads</h3> +<a name="idp15230384"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html index df609cf6..d32cfe7f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html @@ -61,7 +61,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp16518912"></a><h3>Element Information</h3> +<a name="idp16817216"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -84,7 +84,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp18855872"></a><h3>Element Pads</h3> +<a name="idp13924240"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html index 61794514..17db8560 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18439824"></a><h3>Element Information</h3> +<a name="idp17989616"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp19534592"></a><h3>Element Pads</h3> +<a name="idp18379216"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html index 8b761d0a..4082f5db 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html @@ -82,7 +82,7 @@ Converts a byte stream into video frames. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp20509056"></a><h3>Element Information</h3> +<a name="idp20109808"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -105,7 +105,7 @@ Converts a byte stream into video frames. </div> <hr> <div class="refsect2"> -<a name="idp20516464"></a><h3>Element Pads</h3> +<a name="idp20117216"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html index 9887879c..6227b4a1 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html @@ -74,7 +74,7 @@ GstVoAacEnc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17691104"></a><h3>Element Information</h3> +<a name="idp16983632"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -97,7 +97,7 @@ GstVoAacEnc implements </div> <hr> <div class="refsect2"> -<a name="idp20219376"></a><h3>Element Pads</h3> +<a name="idp20224992"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html index f422b7e9..c52a5740 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp15808240"></a><h3>Element Information</h3> +<a name="idp19108592"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -67,7 +67,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp16859936"></a><h3>Element Pads</h3> +<a name="idp17748704"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html index 6c425ecf..32ab2aa0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html @@ -71,7 +71,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17183056"></a><h3>Element Information</h3> +<a name="idp17955840"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp20193648"></a><h3>Element Pads</h3> +<a name="idp19807152"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html index 141ac44d..ae16ba13 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html @@ -70,7 +70,7 @@ like on an oscilloscope. <p> </p> <div class="refsect2"> -<a name="idp16080544"></a><h3>Example launch line</h3> +<a name="idp18974176"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -88,7 +88,7 @@ like on an oscilloscope. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17420672"></a><h3>Element Information</h3> +<a name="idp18693616"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -111,7 +111,7 @@ like on an oscilloscope. </div> <hr> <div class="refsect2"> -<a name="idp19747824"></a><h3>Element Pads</h3> +<a name="idp20330848"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html index 1ef97d5b..9cfdc40e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp15865936"></a><h3>Element Information</h3> +<a name="idp18209328"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -91,7 +91,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp19253920"></a><h3>Element Pads</h3> +<a name="idp19816688"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> diff --git a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 index 4a649755..a5b71be3 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 +++ b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 @@ -30,6 +30,7 @@ <sub name="dvdspu" link="gst-plugins-bad-plugins-dvdspu.html"/> <sub name="exclusion" link="gst-plugins-bad-plugins-exclusion.html"/> <sub name="edgedetect" link="gst-plugins-bad-plugins-edgedetect.html"/> + <sub name="eglglessink" link="gst-plugins-bad-plugins-eglglessink.html"/> <sub name="faac" link="gst-plugins-bad-plugins-faac.html"/> <sub name="faad" link="gst-plugins-bad-plugins-faad.html"/> <sub name="faceblur" link="gst-plugins-bad-plugins-faceblur.html"/> @@ -48,6 +49,7 @@ <sub name="modplug" link="gst-plugins-bad-plugins-modplug.html"/> <sub name="mpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html"/> <sub name="mplex" link="gst-plugins-bad-plugins-mplex.html"/> + <sub name="mpg123audiodec" link="gst-plugins-bad-plugins-mpg123audiodec.html"/> <sub name="pcapparse" link="gst-plugins-bad-plugins-pcapparse.html"/> <sub name="pinch" link="gst-plugins-bad-plugins-pinch.html"/> <sub name="pyramidsegment" link="gst-plugins-bad-plugins-pyramidsegment.html"/> @@ -130,33 +132,33 @@ </sub> </chapters> <functions> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp8404880"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp8583600"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp3202368"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp8062528"/> <keyword type="struct" name="struct GstAssRender" link="gst-plugins-bad-plugins-assrender.html#GstAssRender-struct"/> <keyword type="property" name="The "embeddedfonts" property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--embeddedfonts"/> <keyword type="property" name="The "enable" property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--enable"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp7508096"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp9526720"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp8564480"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp6639552"/> <keyword type="struct" name="struct GstAutoConvert" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert-struct"/> <keyword type="property" name="The "factories" property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--factories"/> <keyword type="property" name="The "initial-identity" property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--initial-identity"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp8280208"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp8707568"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp9701168"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp5349312"/> <keyword type="struct" name="struct GstBulge" link="gst-plugins-bad-plugins-bulge.html#GstBulge-struct"/> <keyword type="property" name="The "zoom" property" link="gst-plugins-bad-plugins-bulge.html#GstBulge--zoom"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp7639184"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp8481168"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp7574640"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp8562096"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9697312"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp7815232"/> <keyword type="struct" name="struct GstBurn" link="gst-plugins-bad-plugins-burn.html#GstBurn-struct"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-burn.html#GstBurn--silent"/> <keyword type="property" name="The "adjustment" property" link="gst-plugins-bad-plugins-burn.html#GstBurn--adjustment"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-camerabin.html#idp7733584"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-camerabin.html#idp8376288"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp9359808"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp5822592"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-camerabin.html#idp6032976"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-camerabin.html#idp7860832"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp3338224"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp7677792"/> <keyword type="struct" name="struct GstCeltDec" link="gst-plugins-bad-plugins-celtdec.html#GstCeltDec-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp7684592"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp10455584"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp9278592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp9806544"/> <keyword type="struct" name="struct GstCeltEnc" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc-struct"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--bitrate"/> <keyword type="property" name="The "framesize" property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--framesize"/> @@ -165,84 +167,84 @@ <keyword type="property" name="The "max-bitrate" property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--max-bitrate"/> <keyword type="property" name="The "prediction" property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--prediction"/> <keyword type="property" name="The "start-band" property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--start-band"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp7061136"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp5900448"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp8000192"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp5255472"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp6080816"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp7044720"/> <keyword type="typedef" name="GstChromium" link="gst-plugins-bad-plugins-chromium.html#GstChromium"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--silent"/> <keyword type="property" name="The "edge-a" property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-a"/> <keyword type="property" name="The "edge-b" property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-b"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp8233456"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp10151808"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp8391216"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp5537376"/> <keyword type="struct" name="struct GstCircle" link="gst-plugins-bad-plugins-circle.html#GstCircle-struct"/> <keyword type="property" name="The "angle" property" link="gst-plugins-bad-plugins-circle.html#GstCircle--angle"/> <keyword type="property" name="The "height" property" link="gst-plugins-bad-plugins-circle.html#GstCircle--height"/> <keyword type="property" name="The "spread-angle" property" link="gst-plugins-bad-plugins-circle.html#GstCircle--spread-angle"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp6409984"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp8290272"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp5747696"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp9432736"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp9712496"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp8417024"/> <keyword type="struct" name="struct GstColorEffects" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects-struct"/> <keyword type="property" name="The "preset" property" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects--preset"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10241232"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp9809216"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10163840"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp8413504"/> <keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10341872"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7360800"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10234752"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7068864"/> <keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp2871152"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp9446880"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp7545312"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp5958128"/> <keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp7331248"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp10419952"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp9341952"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7716928"/> <keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace-struct"/> <keyword type="property" name="The "aperture-size" property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--aperture-size"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp7531312"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp8630480"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp3266864"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp7708688"/> <keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth-struct"/> <keyword type="property" name="The "param1" property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param1"/> <keyword type="property" name="The "param2" property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param2"/> <keyword type="property" name="The "param3" property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param3"/> <keyword type="property" name="The "param4" property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param4"/> <keyword type="property" name="The "type" property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--type"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp10710976"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp10586656"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp7989584"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp10260016"/> <keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel-struct"/> <keyword type="property" name="The "aperture-size" property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--aperture-size"/> <keyword type="property" name="The "x-order" property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--x-order"/> <keyword type="property" name="The "y-order" property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--y-order"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp9290960"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp6753888"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9932688"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp9408688"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp9062032"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9069552"/> <keyword type="struct" name="struct GstDataURISrc" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc-struct"/> <keyword type="property" name="The "uri" property" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc--uri"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp9385424"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp10611744"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp7601696"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp9907888"/> <keyword type="struct" name="struct GstDiffuse" link="gst-plugins-bad-plugins-diffuse.html#GstDiffuse-struct"/> <keyword type="property" name="The "scale" property" link="gst-plugins-bad-plugins-diffuse.html#GstDiffuse--scale"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp2886704"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp8369648"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp11063088"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp7021856"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp8110720"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp10818864"/> <keyword type="struct" name="struct GstDilate" link="gst-plugins-bad-plugins-dilate.html#GstDilate-struct"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-dilate.html#GstDilate--silent"/> <keyword type="property" name="The "erode" property" link="gst-plugins-bad-plugins-dilate.html#GstDilate--erode"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp7062528"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp9413376"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp7649632"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idm3184"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp9626784"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp10758384"/> <keyword type="struct" name="struct GstDodge" link="gst-plugins-bad-plugins-dodge.html#GstDodge-struct"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-dodge.html#GstDodge--silent"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8078608"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8973056"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp6982336"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8487424"/> <keyword type="struct" name="struct GstDtmfDetect" link="gst-plugins-bad-plugins-dtmfdetect.html#GstDtmfDetect-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11698560"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11705968"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp10854560"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp10861968"/> <keyword type="struct" name="struct GstDTMFSrc" link="gst-plugins-bad-plugins-dtmfsrc.html#GstDTMFSrc-struct"/> <keyword type="property" name="The "interval" property" link="gst-plugins-bad-plugins-dtmfsrc.html#GstDTMFSrc--interval"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp7745808"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp6749888"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp7689968"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp6647200"/> <keyword type="struct" name="struct GstDtsDec" link="gst-plugins-bad-plugins-dtsdec.html#GstDtsDec-struct"/> <keyword type="property" name="The "drc" property" link="gst-plugins-bad-plugins-dtsdec.html#GstDtsDec--drc"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp9127440"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11736000"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp11226768"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11234288"/> <keyword type="struct" name="struct GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc-struct"/> <keyword type="property" name="The "bandwidth" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--bandwidth"/> <keyword type="property" name="The "code-rate-hp" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--code-rate-hp"/> @@ -268,20 +270,21 @@ <keyword type="property" name="The "stats-reporting-interval" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--stats-reporting-interval"/> <keyword type="property" name="The "timeout" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--timeout"/> <keyword type="property" name="The "dvb-buffer-size" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--dvb-buffer-size"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp6850368"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp6848192"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp5891680"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp6497824"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11023664"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp9721712"/> <keyword type="struct" name="GstDVDSpu" link="gst-plugins-bad-plugins-dvdspu.html#GstDVDSpu-struct"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp10990960"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp8269536"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11396752"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp3313440"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp5480032"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11186928"/> <keyword type="struct" name="struct GstExclusion" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion-struct"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion--silent"/> <keyword type="property" name="The "factor" property" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion--factor"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp11459232"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6898368"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11452144"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11864736"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp9025376"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp5379504"/> + <keyword type="struct" name="struct GstEglGlesSink" link="gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp10536192"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11645984"/> <keyword type="struct" name="struct GstFaac" link="gst-plugins-bad-plugins-faac.html#GstFaac-struct"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-bad-plugins-faac.html#GstFaac--bitrate"/> <keyword type="property" name="The "midside" property" link="gst-plugins-bad-plugins-faac.html#GstFaac--midside"/> @@ -291,23 +294,23 @@ <keyword type="property" name="The "tns" property" link="gst-plugins-bad-plugins-faac.html#GstFaac--tns"/> <keyword type="property" name="The "quality" property" link="gst-plugins-bad-plugins-faac.html#GstFaac--quality"/> <keyword type="property" name="The "rate-control" property" link="gst-plugins-bad-plugins-faac.html#GstFaac--rate-control"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp6962688"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp9223968"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp6434304"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp5377872"/> <keyword type="struct" name="GstFaad" link="gst-plugins-bad-plugins-faad.html#GstFaad-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp11381968"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp7852848"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11222352"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp10267392"/> - <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp6977680"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp9449264"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp11560928"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp11006592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp6718704"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11109152"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp6326800"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp7055104"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp5954592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp11151616"/> <keyword type="struct" name="struct GstFestival" link="gst-plugins-bad-plugins-festival.html#GstFestival-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp9945568"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idp10627008"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp5300832"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idm37984"/> <keyword type="struct" name="struct GstFisheye" link="gst-plugins-bad-plugins-fisheye.html#GstFisheye-struct"/> - <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12471232"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12474208"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12481616"/> + <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11978528"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11981504"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11717552"/> <keyword type="struct" name="struct GstFPSDisplaySink" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink-struct"/> <keyword type="property" name="The "sync" property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--sync"/> <keyword type="property" name="The "text-overlay" property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--text-overlay"/> @@ -321,12 +324,12 @@ <keyword type="property" name="The "last-message" property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--last-message"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--silent"/> <keyword type="signal" name="The "fps-measurements" signal" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink-fps-measurements"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp11938864"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11936528"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp8358144"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp7188976"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp6175104"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp11952080"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp11609712"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11607376"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp11168416"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp12151888"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp10995520"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp6253152"/> <keyword type="struct" name="struct GstJpegParse" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParse-struct"/> <keyword type="struct" name="struct GstJpegParseClass" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParseClass"/> <keyword type="macro" name="GST_JPEG_PARSE()" link="gst-plugins-bad-plugins-jpegparse.html#GST-JPEG-PARSE:CAPS"/> @@ -335,36 +338,36 @@ <keyword type="macro" name="GST_IS_JPEG_PARSE_CLASS()" link="gst-plugins-bad-plugins-jpegparse.html#GST-IS-JPEG-PARSE-CLASS:CAPS"/> <keyword type="macro" name="GST_TYPE_JPEG_PARSE" link="gst-plugins-bad-plugins-jpegparse.html#GST-TYPE-JPEG-PARSE:CAPS"/> <keyword type="function" name="gst_jpeg_parse_get_type ()" link="gst-plugins-bad-plugins-jpegparse.html#gst-jpeg-parse-get-type"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp11259824"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12103456"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp6889120"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp11549392"/> <keyword type="struct" name="struct GstKaleidoscope" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope-struct"/> <keyword type="property" name="The "angle" property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle"/> <keyword type="property" name="The "angle2" property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle2"/> <keyword type="property" name="The "sides" property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--sides"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp9606896"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp12237904"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp6484256"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp11534320"/> <keyword type="struct" name="struct GstLiveAdder" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder-struct"/> <keyword type="property" name="The "latency" property" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder--latency"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp7007536"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12360224"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp7476688"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12162560"/> <keyword type="struct" name="struct GstMarble" link="gst-plugins-bad-plugins-marble.html#GstMarble-struct"/> <keyword type="property" name="The "amount" property" link="gst-plugins-bad-plugins-marble.html#GstMarble--amount"/> <keyword type="property" name="The "turbulence" property" link="gst-plugins-bad-plugins-marble.html#GstMarble--turbulence"/> <keyword type="property" name="The "x-scale" property" link="gst-plugins-bad-plugins-marble.html#GstMarble--x-scale"/> <keyword type="property" name="The "y-scale" property" link="gst-plugins-bad-plugins-marble.html#GstMarble--y-scale"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp7739760"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp9957840"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp8767520"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp5687216"/> <keyword type="struct" name="struct GstMimEnc" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc-struct"/> <keyword type="property" name="The "paused-mode" property" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc--paused-mode"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp6388880"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp10946384"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp11936640"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp7828880"/> <keyword type="struct" name="struct GstMimDec" link="gst-plugins-bad-plugins-mimdec.html#GstMimDec-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp7850544"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp7024800"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp8545584"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp8496368"/> <keyword type="struct" name="struct GstMirror" link="gst-plugins-bad-plugins-mirror.html#GstMirror-struct"/> <keyword type="property" name="The "mode" property" link="gst-plugins-bad-plugins-mirror.html#GstMirror--mode"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp12308432"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13019216"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp10394880"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp12478608"/> <keyword type="struct" name="GstModPlug" link="gst-plugins-bad-plugins-modplug.html#GstModPlug-struct"/> <keyword type="property" name="The "megabass" property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--megabass"/> <keyword type="property" name="The "megabass-amount" property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--megabass-amount"/> @@ -378,8 +381,8 @@ <keyword type="property" name="The "surround" property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround"/> <keyword type="property" name="The "surround-delay" property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround-delay"/> <keyword type="property" name="The "surround-depth" property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround-depth"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13782656"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13790064"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13298064"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp12672880"/> <keyword type="struct" name="GstMpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc-struct"/> <keyword type="property" name="The "altscan-mpeg2" property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--altscan-mpeg2"/> <keyword type="property" name="The "aspect" property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--aspect"/> @@ -415,8 +418,8 @@ <keyword type="property" name="The "sequence-length" property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--sequence-length"/> <keyword type="property" name="The "unit-coeff-elim" property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--unit-coeff-elim"/> <keyword type="property" name="The "vcd-still-size" property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--vcd-still-size"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp6494448"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp7233392"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp6574128"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp3286704"/> <keyword type="struct" name="GstMplex" link="gst-plugins-bad-plugins-mplex.html#GstMplex-struct"/> <keyword type="property" name="The "bufsize" property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--bufsize"/> <keyword type="property" name="The "format" property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--format"/> @@ -425,9 +428,12 @@ <keyword type="property" name="The "sector-size" property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size"/> <keyword type="property" name="The "system-headers" property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers"/> <keyword type="property" name="The "vbr" property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--vbr"/> - <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp12991376"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp12994208"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13001616"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpg123audiodec.html#idp5431792"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpg123audiodec.html#idp6793888"/> + <keyword type="struct" name="struct GstMpg123AudioDec" link="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp12954160"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp12956992"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp12964400"/> <keyword type="struct" name="struct GstPcapParse" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse-struct"/> <keyword type="property" name="The "dst-ip" property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-ip"/> <keyword type="property" name="The "dst-port" property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-port"/> @@ -435,31 +441,31 @@ <keyword type="property" name="The "src-port" property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--src-port"/> <keyword type="property" name="The "caps" property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--caps"/> <keyword type="property" name="The "ts-offset" property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--ts-offset"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp6992816"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13602240"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp9461136"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13070992"/> <keyword type="struct" name="struct GstPinch" link="gst-plugins-bad-plugins-pinch.html#GstPinch-struct"/> <keyword type="property" name="The "intensity" property" link="gst-plugins-bad-plugins-pinch.html#GstPinch--intensity"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp12810000"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp10032752"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp12588176"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp10750352"/> <keyword type="struct" name="struct GstPinch" link="gst-plugins-bad-plugins-pyramidsegment.html#GstPinch-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp7845072"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp10991280"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp10313856"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp12618240"/> <keyword type="struct" name="struct GstRTMPSink" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink-struct"/> <keyword type="property" name="The "location" property" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink--location"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp13737776"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp12933840"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp12660144"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp13223792"/> <keyword type="struct" name="struct GstRTMPSrc" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc-struct"/> <keyword type="property" name="The "location" property" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc--location"/> - <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp9672896"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp13408192"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13479344"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp13027632"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp13200544"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13208000"/> <keyword type="struct" name="struct GstRTPMux" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux-struct"/> <keyword type="property" name="The "seqnum" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum"/> <keyword type="property" name="The "seqnum-offset" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum-offset"/> <keyword type="property" name="The "ssrc" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--ssrc"/> <keyword type="property" name="The "timestamp-offset" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--timestamp-offset"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp16612992"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp16620448"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp15967776"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp15975232"/> <keyword type="struct" name="struct GstRTPDTMFSrc" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc-struct"/> <keyword type="property" name="The "clock-rate" property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--clock-rate"/> <keyword type="property" name="The "interval" property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--interval"/> @@ -470,29 +476,29 @@ <keyword type="property" name="The "ssrc" property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--ssrc"/> <keyword type="property" name="The "timestamp" property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp"/> <keyword type="property" name="The "timestamp-offset" property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp-offset"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17697280"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp16314192"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17239280"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp18487696"/> <keyword type="struct" name="struct GstRTPDTMFMux" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-struct"/> <keyword type="signal" name="The "locking" signal" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-locking"/> <keyword type="signal" name="The "unlocked" signal" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-unlocked"/> - <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp16384384"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp18101040"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp17243504"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp15425376"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp17279632"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp18599952"/> <keyword type="struct" name="struct GstRTPMux" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux-struct"/> <keyword type="property" name="The "seqnum" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum"/> <keyword type="property" name="The "seqnum-offset" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum-offset"/> <keyword type="property" name="The "ssrc" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--ssrc"/> <keyword type="property" name="The "timestamp-offset" property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--timestamp-offset"/> - <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp14968480"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp18200048"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp19138432"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp15122912"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp17113056"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp17120464"/> <keyword type="struct" name="struct GstScaletempo" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo-struct"/> <keyword type="property" name="The "overlap" property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--overlap"/> <keyword type="property" name="The "rate" property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--rate"/> <keyword type="property" name="The "search" property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--search"/> <keyword type="property" name="The "stride" property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--stride"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp18484064"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp14653616"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp17762016"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp18225808"/> <keyword type="struct" name="struct GstShmSink" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-struct"/> <keyword type="property" name="The "perms" property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--perms"/> <keyword type="property" name="The "shm-size" property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--shm-size"/> @@ -501,68 +507,68 @@ <keyword type="property" name="The "buffer-time" property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--buffer-time"/> <keyword type="signal" name="The "client-connected" signal" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-client-connected"/> <keyword type="signal" name="The "client-disconnected" signal" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-client-disconnected"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp18810464"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp14891264"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp18584864"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp15764656"/> <keyword type="struct" name="struct GstShmSrc" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc-struct"/> <keyword type="property" name="The "is-live" property" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc--is-live"/> <keyword type="property" name="The "socket-path" property" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc--socket-path"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp14331600"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp14334848"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp17318256"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp14238944"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp14242192"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp14249664"/> <keyword type="struct" name="struct GstSDPDemux" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux-struct"/> <keyword type="property" name="The "debug" property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--debug"/> <keyword type="property" name="The "latency" property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--latency"/> <keyword type="property" name="The "timeout" property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--timeout"/> <keyword type="property" name="The "redirect" property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--redirect"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp15543696"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp18113056"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp18120464"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp15260592"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp16156960"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp14195904"/> <keyword type="struct" name="struct GstSolarize" link="gst-plugins-bad-plugins-solarize.html#GstSolarize-struct"/> <keyword type="property" name="The "silent" property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--silent"/> <keyword type="property" name="The "end" property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--end"/> <keyword type="property" name="The "start" property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--start"/> <keyword type="property" name="The "threshold" property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--threshold"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp16360544"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp16956096"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp16760656"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp14971952"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp16387936"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp18828288"/> <keyword type="struct" name="struct GstSpaceScope" link="gst-plugins-bad-plugins-spacescope.html#GstSpaceScope-struct"/> <keyword type="property" name="The "style" property" link="gst-plugins-bad-plugins-spacescope.html#GstSpaceScope--style"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp15115872"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp14855504"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp16520896"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp14481504"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18531952"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp14665792"/> <keyword type="struct" name="struct GstSpectraScope" link="gst-plugins-bad-plugins-spectrascope.html#GstSpectraScope-struct"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp15309472"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp18216848"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp17948704"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp13836752"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp18808256"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp15943312"/> <keyword type="struct" name="struct GstSynaeScope" link="gst-plugins-bad-plugins-synaescope.html#GstSynaeScope-struct"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp16722208"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp17126768"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp15287296"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp15250384"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp18464976"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp14266736"/> <keyword type="struct" name="struct GstSpeed" link="gst-plugins-bad-plugins-speed.html#GstSpeed-struct"/> <keyword type="property" name="The "speed" property" link="gst-plugins-bad-plugins-speed.html#GstSpeed--speed"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp16535872"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp14639632"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp16170480"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp13810624"/> <keyword type="struct" name="struct GstSphere" link="gst-plugins-bad-plugins-sphere.html#GstSphere-struct"/> <keyword type="property" name="The "refraction" property" link="gst-plugins-bad-plugins-sphere.html#GstSphere--refraction"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp18523312"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp19456000"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp17866240"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp19585248"/> <keyword type="struct" name="struct GstSquare" link="gst-plugins-bad-plugins-square.html#GstSquare-struct"/> <keyword type="property" name="The "height" property" link="gst-plugins-bad-plugins-square.html#GstSquare--height"/> <keyword type="property" name="The "width" property" link="gst-plugins-bad-plugins-square.html#GstSquare--width"/> <keyword type="property" name="The "zoom" property" link="gst-plugins-bad-plugins-square.html#GstSquare--zoom"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp15129216"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp14564208"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp18812224"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp17819264"/> <keyword type="struct" name="struct GstStretch" link="gst-plugins-bad-plugins-stretch.html#GstStretch-struct"/> <keyword type="property" name="The "intensity" property" link="gst-plugins-bad-plugins-stretch.html#GstStretch--intensity"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp17634112"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp18432016"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp15142416"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp15230384"/> <keyword type="struct" name="struct GstSynaeScope" link="gst-plugins-bad-plugins-templatematch.html#GstSynaeScope-struct"/> <keyword type="struct" name="struct GstTemplateMatch" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch"/> <keyword type="property" name="The "display" property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--display"/> <keyword type="property" name="The "method" property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--method"/> <keyword type="property" name="The "template" property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--template"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp18451504"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp20159808"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp15855968"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp19195696"/> <keyword type="struct" name="GstNuvDemux" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstNuvDemux"/> <keyword type="struct" name="struct GstOpencvTextOverlay" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay"/> <keyword type="property" name="The "colorB" property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorB"/> @@ -574,15 +580,15 @@ <keyword type="property" name="The "width" property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--width"/> <keyword type="property" name="The "xpos" property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--xpos"/> <keyword type="property" name="The "ypos" property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--ypos"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp16518912"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp18855872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp16817216"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp13924240"/> <keyword type="struct" name="struct GstTunnel" link="gst-plugins-bad-plugins-tunnel.html#GstTunnel-struct"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp18439824"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp19534592"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp17989616"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp18379216"/> <keyword type="struct" name="struct GstTwirl" link="gst-plugins-bad-plugins-twirl.html#GstTwirl-struct"/> <keyword type="property" name="The "angle" property" link="gst-plugins-bad-plugins-twirl.html#GstTwirl--angle"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp20509056"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20516464"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp20109808"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20117216"/> <keyword type="struct" name="struct GstVideoParse" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse-struct"/> <keyword type="property" name="The "alpha-mask" property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--alpha-mask"/> <keyword type="property" name="The "blue-mask" property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--blue-mask"/> @@ -598,26 +604,26 @@ <keyword type="property" name="The "width" property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--width"/> <keyword type="property" name="The "interlaced" property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--interlaced"/> <keyword type="property" name="The "top-field-first" property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--top-field-first"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp17183056"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp20193648"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp17955840"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp19807152"/> <keyword type="struct" name="struct GstWaterRipple" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple-struct"/> <keyword type="property" name="The "amplitude" property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--amplitude"/> <keyword type="property" name="The "phase" property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--phase"/> <keyword type="property" name="The "wavelength" property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--wavelength"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp15865936"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp19253920"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp18209328"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp19816688"/> <keyword type="struct" name="struct GstZBar" link="gst-plugins-bad-plugins-zbar.html#GstZBar-struct"/> <keyword type="property" name="The "message" property" link="gst-plugins-bad-plugins-zbar.html#GstZBar--message"/> <keyword type="property" name="The "cache" property" link="gst-plugins-bad-plugins-zbar.html#GstZBar--cache"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp17691104"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp20219376"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp16983632"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp20224992"/> <keyword type="struct" name="struct GstVoAacEnc" link="gst-plugins-bad-plugins-voaacenc.html#GstVoAacEnc-struct"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-bad-plugins-voaacenc.html#GstVoAacEnc--bitrate"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voamrwbenc.html#idp15808240"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voamrwbenc.html#idp16859936"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp16080544"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp17420672"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp19747824"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voamrwbenc.html#idp19108592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voamrwbenc.html#idp17748704"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp18974176"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp18693616"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp20330848"/> <keyword type="struct" name="struct GstWaveScope" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope-struct"/> <keyword type="property" name="The "style" property" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope--style"/> <keyword type="struct" name="GstPhotography" link="GstPhotography.html#GstPhotography-struct"/> diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html index 6abf740a..78331c1c 100644 --- a/docs/plugins/html/index.html +++ b/docs/plugins/html/index.html @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Bad Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for GStreamer Bad Plugins 1.0 (1.0.1) + for GStreamer Bad Plugins 1.0 (1.0.2) The latest version of this documentation can be found on-line at <a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>. </p></div> @@ -107,6 +107,9 @@ <span class="refentrytitle"><a href="gst-plugins-bad-plugins-edgedetect.html">edgedetect</a></span><span class="refpurpose"> — Performs canny edge detection on videos and images.</span> </dt> <dt> +<span class="refentrytitle"><a href="gst-plugins-bad-plugins-eglglessink.html">eglglessink</a></span><span class="refpurpose"></span> +</dt> +<dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-faac.html">faac</a></span><span class="refpurpose"> — Free MPEG-2/4 AAC encoder</span> </dt> <dt> @@ -161,6 +164,9 @@ <span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"> — High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</span> </dt> <dt> +<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"> — Decodes mp3 streams using the mpg123 library</span> +</dt> +<dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Parses a raw pcap stream</span> </dt> <dt> diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml index 1e9d8f9a..aec89474 100644 --- a/docs/plugins/html/index.sgml +++ b/docs/plugins/html/index.sgml @@ -287,6 +287,11 @@ <ANCHOR id="gst-plugins-bad-plugins-edgedetect.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.synopsis"> <ANCHOR id="gst-plugins-bad-plugins-edgedetect.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.description"> <ANCHOR id="gst-plugins-bad-plugins-edgedetect.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.details"> +<ANCHOR id="gst-plugins-bad-plugins-eglglessink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html"> +<ANCHOR id="gst-plugins-bad-plugins-eglglessink.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.synopsis"> +<ANCHOR id="gst-plugins-bad-plugins-eglglessink.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.description"> +<ANCHOR id="gst-plugins-bad-plugins-eglglessink.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.details"> +<ANCHOR id="GstEglGlesSink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink"> <ANCHOR id="gst-plugins-bad-plugins-faac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html"> <ANCHOR id="gst-plugins-bad-plugins-faac.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.synopsis"> <ANCHOR id="GstFaac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac"> @@ -520,6 +525,13 @@ <ANCHOR id="GstMplex--sector-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size"> <ANCHOR id="GstMplex--system-headers" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers"> <ANCHOR id="GstMplex--vbr" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--vbr"> +<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html"> +<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.synopsis"> +<ANCHOR id="GstMpg123AudioDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec"> +<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy"> +<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.description"> +<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.details"> +<ANCHOR id="GstMpg123AudioDec-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct"> <ANCHOR id="gst-plugins-bad-plugins-pcapparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html"> <ANCHOR id="gst-plugins-bad-plugins-pcapparse.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#gst-plugins-bad-plugins-pcapparse.synopsis"> <ANCHOR id="GstPcapParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#GstPcapParse"> diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml index dd86415f..ad4fc8df 100644 --- a/docs/plugins/inspect/plugin-adpcmdec.xml +++ b/docs/plugins/inspect/plugin-adpcmdec.xml @@ -3,7 +3,7 @@ <description>ADPCM decoder</description> <filename>../../gst/adpcmdec/.libs/libgstadpcmdec.so</filename> <basename>libgstadpcmdec.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-adpcmenc.xml b/docs/plugins/inspect/plugin-adpcmenc.xml index 95a61d2a..6513c2e2 100644 --- a/docs/plugins/inspect/plugin-adpcmenc.xml +++ b/docs/plugins/inspect/plugin-adpcmenc.xml @@ -3,7 +3,7 @@ <description>ADPCM encoder</description> <filename>../../gst/adpcmenc/.libs/libgstadpcmenc.so</filename> <basename>libgstadpcmenc.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-asfmux.xml b/docs/plugins/inspect/plugin-asfmux.xml index 22516a1f..cc50e654 100644 --- a/docs/plugins/inspect/plugin-asfmux.xml +++ b/docs/plugins/inspect/plugin-asfmux.xml @@ -3,7 +3,7 @@ <description>ASF Muxer Plugin</description> <filename>../../gst/asfmux/.libs/libgstasfmux.so</filename> <basename>libgstasfmux.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-assrender.xml b/docs/plugins/inspect/plugin-assrender.xml index e17eddd3..583e9a2f 100644 --- a/docs/plugins/inspect/plugin-assrender.xml +++ b/docs/plugins/inspect/plugin-assrender.xml @@ -3,7 +3,7 @@ <description>ASS/SSA subtitle renderer</description> <filename>../../ext/assrender/.libs/libgstassrender.so</filename> <basename>libgstassrender.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-audiovisualizers.xml b/docs/plugins/inspect/plugin-audiovisualizers.xml index 2bd96052..8095cb41 100644 --- a/docs/plugins/inspect/plugin-audiovisualizers.xml +++ b/docs/plugins/inspect/plugin-audiovisualizers.xml @@ -3,7 +3,7 @@ <description>Creates video visualizations of audio input</description> <filename>../../gst/audiovisualizers/.libs/libgstaudiovisualizers.so</filename> <basename>libgstaudiovisualizers.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-autoconvert.xml b/docs/plugins/inspect/plugin-autoconvert.xml index 12f9d047..d897313a 100644 --- a/docs/plugins/inspect/plugin-autoconvert.xml +++ b/docs/plugins/inspect/plugin-autoconvert.xml @@ -3,7 +3,7 @@ <description>Selects convertor element based on caps</description> <filename>../../gst/autoconvert/.libs/libgstautoconvert.so</filename> <basename>libgstautoconvert.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-bayer.xml b/docs/plugins/inspect/plugin-bayer.xml index c7861c65..429ca45c 100644 --- a/docs/plugins/inspect/plugin-bayer.xml +++ b/docs/plugins/inspect/plugin-bayer.xml @@ -3,7 +3,7 @@ <description>Elements to convert Bayer images</description> <filename>../../gst/bayer/.libs/libgstbayer.so</filename> <basename>libgstbayer.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-bz2.xml b/docs/plugins/inspect/plugin-bz2.xml index 89332c6e..b3e8c208 100644 --- a/docs/plugins/inspect/plugin-bz2.xml +++ b/docs/plugins/inspect/plugin-bz2.xml @@ -3,7 +3,7 @@ <description>Compress or decompress streams</description> <filename>../../ext/bz2/.libs/libgstbz2.so</filename> <basename>libgstbz2.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-camerabin.xml b/docs/plugins/inspect/plugin-camerabin.xml index c73ce6e5..a21462f0 100644 --- a/docs/plugins/inspect/plugin-camerabin.xml +++ b/docs/plugins/inspect/plugin-camerabin.xml @@ -3,7 +3,7 @@ <description>Take image snapshots and record movies from camera</description> <filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename> <basename>libgstcamerabin2.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-celt.xml b/docs/plugins/inspect/plugin-celt.xml index 0d341f7f..ed5ff1fb 100644 --- a/docs/plugins/inspect/plugin-celt.xml +++ b/docs/plugins/inspect/plugin-celt.xml @@ -3,7 +3,7 @@ <description>CELT plugin library</description> <filename>../../ext/celt/.libs/libgstcelt.so</filename> <basename>libgstcelt.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-chromaprint.xml b/docs/plugins/inspect/plugin-chromaprint.xml index ce299027..c73b62f8 100644 --- a/docs/plugins/inspect/plugin-chromaprint.xml +++ b/docs/plugins/inspect/plugin-chromaprint.xml @@ -3,7 +3,7 @@ <description>Calculate Chromaprint fingerprint from audio files</description> <filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename> <basename>libgstchromaprint.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml index 667f5ab4..61610afa 100644 --- a/docs/plugins/inspect/plugin-coloreffects.xml +++ b/docs/plugins/inspect/plugin-coloreffects.xml @@ -3,7 +3,7 @@ <description>Color Look-up Table filters</description> <filename>../../gst/coloreffects/.libs/libgstcoloreffects.so</filename> <basename>libgstcoloreffects.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-curl.xml b/docs/plugins/inspect/plugin-curl.xml index 62690a11..1f3efc47 100644 --- a/docs/plugins/inspect/plugin-curl.xml +++ b/docs/plugins/inspect/plugin-curl.xml @@ -3,7 +3,7 @@ <description>libcurl-based elements</description> <filename>../../ext/curl/.libs/libgstcurl.so</filename> <basename>libgstcurl.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dataurisrc.xml b/docs/plugins/inspect/plugin-dataurisrc.xml index 53215ac3..7695fe6c 100644 --- a/docs/plugins/inspect/plugin-dataurisrc.xml +++ b/docs/plugins/inspect/plugin-dataurisrc.xml @@ -3,7 +3,7 @@ <description>data: URI source</description> <filename>../../gst/dataurisrc/.libs/libgstdataurisrc.so</filename> <basename>libgstdataurisrc.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-debugutilsbad.xml b/docs/plugins/inspect/plugin-debugutilsbad.xml index abcca3c0..5056bb85 100644 --- a/docs/plugins/inspect/plugin-debugutilsbad.xml +++ b/docs/plugins/inspect/plugin-debugutilsbad.xml @@ -3,7 +3,7 @@ <description>Collection of elements that may or may not be useful for debugging</description> <filename>../../gst/debugutils/.libs/libgstdebugutilsbad.so</filename> <basename>libgstdebugutilsbad.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dtmf.xml b/docs/plugins/inspect/plugin-dtmf.xml index dfe2fffa..b41450a6 100644 --- a/docs/plugins/inspect/plugin-dtmf.xml +++ b/docs/plugins/inspect/plugin-dtmf.xml @@ -3,7 +3,7 @@ <description>DTMF plugins</description> <filename>../../gst/dtmf/.libs/libgstdtmf.so</filename> <basename>libgstdtmf.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dtsdec.xml b/docs/plugins/inspect/plugin-dtsdec.xml index c07ad072..18d895dd 100644 --- a/docs/plugins/inspect/plugin-dtsdec.xml +++ b/docs/plugins/inspect/plugin-dtsdec.xml @@ -3,7 +3,7 @@ <description>Decodes DTS audio streams</description> <filename>../../ext/dts/.libs/libgstdtsdec.so</filename> <basename>libgstdtsdec.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dvb.xml b/docs/plugins/inspect/plugin-dvb.xml index bfb50f4f..e6b617bf 100644 --- a/docs/plugins/inspect/plugin-dvb.xml +++ b/docs/plugins/inspect/plugin-dvb.xml @@ -3,7 +3,7 @@ <description>DVB elements</description> <filename>../../sys/dvb/.libs/libgstdvb.so</filename> <basename>libgstdvb.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml index f1ffcc6e..b2d9477b 100644 --- a/docs/plugins/inspect/plugin-dvbsuboverlay.xml +++ b/docs/plugins/inspect/plugin-dvbsuboverlay.xml @@ -3,7 +3,7 @@ <description>DVB subtitle renderer</description> <filename>../../gst/dvbsuboverlay/.libs/libgstdvbsuboverlay.so</filename> <basename>libgstdvbsuboverlay.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-dvdspu.xml b/docs/plugins/inspect/plugin-dvdspu.xml index 6707b4db..2326d21f 100644 --- a/docs/plugins/inspect/plugin-dvdspu.xml +++ b/docs/plugins/inspect/plugin-dvdspu.xml @@ -3,7 +3,7 @@ <description>DVD Sub-picture Overlay element</description> <filename>../../gst/dvdspu/.libs/libgstdvdspu.so</filename> <basename>libgstdvdspu.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml index ea3ae9ea..5beadf90 100644 --- a/docs/plugins/inspect/plugin-faac.xml +++ b/docs/plugins/inspect/plugin-faac.xml @@ -3,7 +3,7 @@ <description>Free AAC Encoder (FAAC)</description> <filename>../../ext/faac/.libs/libgstfaac.so</filename> <basename>libgstfaac.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-faad.xml b/docs/plugins/inspect/plugin-faad.xml index 793a7b85..8001fbc7 100644 --- a/docs/plugins/inspect/plugin-faad.xml +++ b/docs/plugins/inspect/plugin-faad.xml @@ -3,7 +3,7 @@ <description>Free AAC Decoder (FAAD)</description> <filename>../../ext/faad/.libs/libgstfaad.so</filename> <basename>libgstfaad.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-festival.xml b/docs/plugins/inspect/plugin-festival.xml index 9065c9bb..e351be5a 100644 --- a/docs/plugins/inspect/plugin-festival.xml +++ b/docs/plugins/inspect/plugin-festival.xml @@ -3,7 +3,7 @@ <description>Synthesizes plain text into audio</description> <filename>../../gst/festival/.libs/libgstfestival.so</filename> <basename>libgstfestival.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-fieldanalysis.xml b/docs/plugins/inspect/plugin-fieldanalysis.xml new file mode 100644 index 00000000..3b018c5a --- /dev/null +++ b/docs/plugins/inspect/plugin-fieldanalysis.xml @@ -0,0 +1,34 @@ +<plugin> + <name>fieldanalysis</name> + <description>Video field analysis</description> + <filename>../../gst/fieldanalysis/.libs/libgstfieldanalysis.so</filename> + <basename>libgstfieldanalysis.so</basename> + <version>1.0.2</version> + <license>LGPL</license> + <source>gst-plugins-bad</source> + <package>GStreamer</package> + <origin>http://gstreamer.net/</origin> + <elements> + <element> + <name>fieldanalysis</name> + <longname>Video field analysis</longname> + <class>Filter/Analysis/Video</class> + <description>Analyse fields from video frames to identify if they are progressive/telecined/interlaced</description> + <author>Robert Swain <robert.swain@collabora.co.uk></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>video/x-raw, format=(string){ YUY2, UYVY, I420, YV12 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>video/x-raw, format=(string){ YUY2, UYVY, I420, YV12 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml index 7c59e298..ffd84163 100644 --- a/docs/plugins/inspect/plugin-flite.xml +++ b/docs/plugins/inspect/plugin-flite.xml @@ -3,7 +3,7 @@ <description>Flite speech synthesizer plugin</description> <filename>../../ext/flite/.libs/libgstflite.so</filename> <basename>libgstflite.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-fragmented.xml b/docs/plugins/inspect/plugin-fragmented.xml index 18a6ac5f..ca1bd971 100644 --- a/docs/plugins/inspect/plugin-fragmented.xml +++ b/docs/plugins/inspect/plugin-fragmented.xml @@ -3,7 +3,7 @@ <description>Fragmented streaming plugins</description> <filename>../../gst/hls/.libs/libgstfragmented.so</filename> <basename>libgstfragmented.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins</package> diff --git a/docs/plugins/inspect/plugin-frei0r.xml b/docs/plugins/inspect/plugin-frei0r.xml index 5256f9c3..df7fdf44 100644 --- a/docs/plugins/inspect/plugin-frei0r.xml +++ b/docs/plugins/inspect/plugin-frei0r.xml @@ -3,7 +3,7 @@ <description>frei0r plugin library</description> <filename>../../gst/frei0r/.libs/libgstfrei0r.so</filename> <basename>libgstfrei0r.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml index 33ad8561..b7f36c8d 100644 --- a/docs/plugins/inspect/plugin-gaudieffects.xml +++ b/docs/plugins/inspect/plugin-gaudieffects.xml @@ -3,7 +3,7 @@ <description>Gaudi video effects.</description> <filename>../../gst/gaudieffects/.libs/libgstgaudieffects.so</filename> <basename>libgstgaudieffects.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer</package> diff --git a/docs/plugins/inspect/plugin-gdp.xml b/docs/plugins/inspect/plugin-gdp.xml index e37b7171..a1d70b64 100644 --- a/docs/plugins/inspect/plugin-gdp.xml +++ b/docs/plugins/inspect/plugin-gdp.xml @@ -3,7 +3,7 @@ <description>Payload/depayload GDP packets</description> <filename>../../gst/gdp/.libs/libgstgdp.so</filename> <basename>libgstgdp.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml index 5ff61d80..ca99e350 100644 --- a/docs/plugins/inspect/plugin-geometrictransform.xml +++ b/docs/plugins/inspect/plugin-geometrictransform.xml @@ -3,7 +3,7 @@ <description>Various geometric image transform elements</description> <filename>../../gst/geometrictransform/.libs/libgstgeometrictransform.so</filename> <basename>libgstgeometrictransform.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-gmedec.xml b/docs/plugins/inspect/plugin-gmedec.xml index 886905cf..63fb9fbb 100644 --- a/docs/plugins/inspect/plugin-gmedec.xml +++ b/docs/plugins/inspect/plugin-gmedec.xml @@ -3,7 +3,7 @@ <description>GME Audio Decoder</description> <filename>../../ext/gme/.libs/libgstgme.so</filename> <basename>libgstgme.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-gsm.xml b/docs/plugins/inspect/plugin-gsm.xml index b7481696..dde70020 100644 --- a/docs/plugins/inspect/plugin-gsm.xml +++ b/docs/plugins/inspect/plugin-gsm.xml @@ -3,7 +3,7 @@ <description>GSM encoder/decoder</description> <filename>../../ext/gsm/.libs/libgstgsm.so</filename> <basename>libgstgsm.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-gstsiren.xml b/docs/plugins/inspect/plugin-gstsiren.xml index 0924e3a7..8ec1162b 100644 --- a/docs/plugins/inspect/plugin-gstsiren.xml +++ b/docs/plugins/inspect/plugin-gstsiren.xml @@ -3,7 +3,7 @@ <description>Siren encoder/decoder/payloader/depayloader plugins</description> <filename>../../gst/siren/.libs/libgstsiren.so</filename> <basename>libgstsiren.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml index 2621e86d..94af3a2b 100644 --- a/docs/plugins/inspect/plugin-id3tag.xml +++ b/docs/plugins/inspect/plugin-id3tag.xml @@ -3,7 +3,7 @@ <description>ID3 v1 and v2 muxing plugin</description> <filename>../../gst/id3tag/.libs/libgstid3tag.so</filename> <basename>libgstid3tag.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml index 9635aa5a..a69b2254 100644 --- a/docs/plugins/inspect/plugin-inter.xml +++ b/docs/plugins/inspect/plugin-inter.xml @@ -3,7 +3,7 @@ <description>plugin for inter-pipeline communication</description> <filename>../../gst/inter/.libs/libgstinter.so</filename> <basename>libgstinter.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins</package> diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml index 3007d091..a2da25c9 100644 --- a/docs/plugins/inspect/plugin-interlace.xml +++ b/docs/plugins/inspect/plugin-interlace.xml @@ -3,7 +3,7 @@ <description>Create an interlaced video stream</description> <filename>../../gst/interlace/.libs/libgstinterlace.so</filename> <basename>libgstinterlace.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml index d15d3a39..9193934d 100644 --- a/docs/plugins/inspect/plugin-jpegformat.xml +++ b/docs/plugins/inspect/plugin-jpegformat.xml @@ -3,7 +3,7 @@ <description>JPEG interchange format plugin</description> <filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename> <basename>libgstjpegformat.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml index a1bf1e16..98e3905d 100644 --- a/docs/plugins/inspect/plugin-liveadder.xml +++ b/docs/plugins/inspect/plugin-liveadder.xml @@ -3,7 +3,7 @@ <description>Adds multiple live discontinuous streams</description> <filename>../../gst/liveadder/.libs/libgstliveadder.so</filename> <basename>libgstliveadder.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml index 2bf78f04..6a4de529 100644 --- a/docs/plugins/inspect/plugin-mimic.xml +++ b/docs/plugins/inspect/plugin-mimic.xml @@ -3,7 +3,7 @@ <description>Mimic codec</description> <filename>../../ext/mimic/.libs/libgstmimic.so</filename> <basename>libgstmimic.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml index 104d8099..26ee667d 100644 --- a/docs/plugins/inspect/plugin-mms.xml +++ b/docs/plugins/inspect/plugin-mms.xml @@ -3,7 +3,7 @@ <description>Microsoft Multi Media Server streaming protocol support</description> <filename>../../ext/libmms/.libs/libgstmms.so</filename> <basename>libgstmms.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-modplug.xml b/docs/plugins/inspect/plugin-modplug.xml index 9241516b..c2637237 100644 --- a/docs/plugins/inspect/plugin-modplug.xml +++ b/docs/plugins/inspect/plugin-modplug.xml @@ -3,7 +3,7 @@ <description>.MOD audio decoding</description> <filename>../../ext/modplug/.libs/libgstmodplug.so</filename> <basename>libgstmodplug.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpeg2enc.xml b/docs/plugins/inspect/plugin-mpeg2enc.xml index 00f83a06..3d89389a 100644 --- a/docs/plugins/inspect/plugin-mpeg2enc.xml +++ b/docs/plugins/inspect/plugin-mpeg2enc.xml @@ -3,7 +3,7 @@ <description>High-quality MPEG-1/2 video encoder</description> <filename>../../ext/mpeg2enc/.libs/libgstmpeg2enc.so</filename> <basename>libgstmpeg2enc.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml index a3614ed4..00ae8493 100644 --- a/docs/plugins/inspect/plugin-mpegpsdemux.xml +++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml @@ -3,7 +3,7 @@ <description>MPEG-PS demuxer</description> <filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename> <basename>libgstmpegpsdemux.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>unknown</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml index e8662fea..95038341 100644 --- a/docs/plugins/inspect/plugin-mpegtsdemux.xml +++ b/docs/plugins/inspect/plugin-mpegtsdemux.xml @@ -3,7 +3,7 @@ <description>MPEG TS demuxer</description> <filename>../../gst/mpegtsdemux/.libs/libgstmpegtsdemux.so</filename> <basename>libgstmpegtsdemux.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>unknown</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml index e33d9942..ebd6eac3 100644 --- a/docs/plugins/inspect/plugin-mpegtsmux.xml +++ b/docs/plugins/inspect/plugin-mpegtsmux.xml @@ -3,7 +3,7 @@ <description>MPEG-TS muxer</description> <filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename> <basename>libgstmpegtsmux.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml index 65fab60f..c24ca719 100644 --- a/docs/plugins/inspect/plugin-mpg123.xml +++ b/docs/plugins/inspect/plugin-mpg123.xml @@ -3,7 +3,7 @@ <description>mp3 decoding based on the mpg123 library</description> <filename>../../ext/mpg123/.libs/libgstmpg123.so</filename> <basename>libgstmpg123.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml index d14eb1f2..4a6122b6 100644 --- a/docs/plugins/inspect/plugin-mplex.xml +++ b/docs/plugins/inspect/plugin-mplex.xml @@ -3,7 +3,7 @@ <description>High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</description> <filename>../../ext/mplex/.libs/libgstmplex.so</filename> <basename>libgstmplex.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-opencv.xml b/docs/plugins/inspect/plugin-opencv.xml index 353954e4..fe4198a0 100644 --- a/docs/plugins/inspect/plugin-opencv.xml +++ b/docs/plugins/inspect/plugin-opencv.xml @@ -3,7 +3,7 @@ <description>GStreamer OpenCV Plugins</description> <filename>../../ext/opencv/.libs/libgstopencv.so</filename> <basename>libgstopencv.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml index b51b4fcd..87c676ee 100644 --- a/docs/plugins/inspect/plugin-pcapparse.xml +++ b/docs/plugins/inspect/plugin-pcapparse.xml @@ -3,7 +3,7 @@ <description>Element parsing raw pcap streams</description> <filename>../../gst/pcapparse/.libs/libgstpcapparse.so</filename> <basename>libgstpcapparse.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer</package> diff --git a/docs/plugins/inspect/plugin-pnm.xml b/docs/plugins/inspect/plugin-pnm.xml index 35588951..2116c959 100644 --- a/docs/plugins/inspect/plugin-pnm.xml +++ b/docs/plugins/inspect/plugin-pnm.xml @@ -3,7 +3,7 @@ <description>PNM plugin</description> <filename>../../gst/pnm/.libs/libgstpnm.so</filename> <basename>libgstpnm.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml index b9ffabe9..9edca2bc 100644 --- a/docs/plugins/inspect/plugin-rawparse.xml +++ b/docs/plugins/inspect/plugin-rawparse.xml @@ -3,7 +3,7 @@ <description>Parses byte streams into raw frames</description> <filename>../../gst/rawparse/.libs/libgstrawparse.so</filename> <basename>libgstrawparse.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-removesilence.xml b/docs/plugins/inspect/plugin-removesilence.xml index f4c835fc..f21e32e1 100644 --- a/docs/plugins/inspect/plugin-removesilence.xml +++ b/docs/plugins/inspect/plugin-removesilence.xml @@ -3,7 +3,7 @@ <description>Removes silence from an audio stream</description> <filename>../../gst/removesilence/.libs/libgstremovesilence.so</filename> <basename>libgstremovesilence.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-resindvd.xml b/docs/plugins/inspect/plugin-resindvd.xml index b0a6f84f..389d9083 100644 --- a/docs/plugins/inspect/plugin-resindvd.xml +++ b/docs/plugins/inspect/plugin-resindvd.xml @@ -3,7 +3,7 @@ <description>Resin DVD playback elements</description> <filename>../../ext/resindvd/.libs/libgstresindvd.so</filename> <basename>libgstresindvd.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer</package> diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml index fee206c0..d1572cda 100644 --- a/docs/plugins/inspect/plugin-rtmp.xml +++ b/docs/plugins/inspect/plugin-rtmp.xml @@ -3,7 +3,7 @@ <description>RTMP source and sink</description> <filename>../../ext/rtmp/.libs/libgstrtmp.so</filename> <basename>libgstrtmp.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtpmux.xml b/docs/plugins/inspect/plugin-rtpmux.xml index 85e7623b..6aa5b599 100644 --- a/docs/plugins/inspect/plugin-rtpmux.xml +++ b/docs/plugins/inspect/plugin-rtpmux.xml @@ -3,7 +3,7 @@ <description>RTP Muxer plugins</description> <filename>../../gst/rtpmux/.libs/libgstrtpmux.so</filename> <basename>libgstrtpmux.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtpvp8.xml b/docs/plugins/inspect/plugin-rtpvp8.xml index ce8960aa..529a6e82 100644 --- a/docs/plugins/inspect/plugin-rtpvp8.xml +++ b/docs/plugins/inspect/plugin-rtpvp8.xml @@ -3,7 +3,7 @@ <description>rtpvp8</description> <filename>../../gst/rtpvp8/.libs/libgstrtpvp8.so</filename> <basename>libgstrtpvp8.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-scaletempo.xml b/docs/plugins/inspect/plugin-scaletempo.xml index 77a9fd1d..237697ca 100644 --- a/docs/plugins/inspect/plugin-scaletempo.xml +++ b/docs/plugins/inspect/plugin-scaletempo.xml @@ -3,7 +3,7 @@ <description>Scale audio tempo in sync with playback rate</description> <filename>../../gst/scaletempo/.libs/libgstscaletempoplugin.so</filename> <basename>libgstscaletempoplugin.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer</package> diff --git a/docs/plugins/inspect/plugin-schro.xml b/docs/plugins/inspect/plugin-schro.xml index 62ffaad8..670152f5 100644 --- a/docs/plugins/inspect/plugin-schro.xml +++ b/docs/plugins/inspect/plugin-schro.xml @@ -3,7 +3,7 @@ <description>Schroedinger plugin</description> <filename>../../ext/schroedinger/.libs/libgstschro.so</filename> <basename>libgstschro.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml index e8cd1aa2..964c5333 100644 --- a/docs/plugins/inspect/plugin-sdp.xml +++ b/docs/plugins/inspect/plugin-sdp.xml @@ -3,7 +3,7 @@ <description>configure streaming sessions using SDP</description> <filename>../../gst/sdp/.libs/libgstsdpelem.so</filename> <basename>libgstsdpelem.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-segmentclip.xml b/docs/plugins/inspect/plugin-segmentclip.xml index f5dd8737..f4745665 100644 --- a/docs/plugins/inspect/plugin-segmentclip.xml +++ b/docs/plugins/inspect/plugin-segmentclip.xml @@ -3,7 +3,7 @@ <description>Segment clip elements</description> <filename>../../gst/segmentclip/.libs/libgstsegmentclip.so</filename> <basename>libgstsegmentclip.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-shm.xml b/docs/plugins/inspect/plugin-shm.xml index 7d9184d6..24957fba 100644 --- a/docs/plugins/inspect/plugin-shm.xml +++ b/docs/plugins/inspect/plugin-shm.xml @@ -3,7 +3,7 @@ <description>shared memory sink source</description> <filename>../../sys/shm/.libs/libgstshm.so</filename> <basename>libgstshm.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-smooth.xml b/docs/plugins/inspect/plugin-smooth.xml index 2b82bf3b..03415b41 100644 --- a/docs/plugins/inspect/plugin-smooth.xml +++ b/docs/plugins/inspect/plugin-smooth.xml @@ -3,7 +3,7 @@ <description>Apply a smooth filter to an image</description> <filename>../../gst/smooth/.libs/libgstsmooth.so</filename> <basename>libgstsmooth.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-soundtouch.xml b/docs/plugins/inspect/plugin-soundtouch.xml index e3884318..b1cd34df 100644 --- a/docs/plugins/inspect/plugin-soundtouch.xml +++ b/docs/plugins/inspect/plugin-soundtouch.xml @@ -3,7 +3,7 @@ <description>Audio Pitch Controller & BPM Detection</description> <filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename> <basename>libgstsoundtouch.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml index a8118683..b101e173 100644 --- a/docs/plugins/inspect/plugin-spandsp.xml +++ b/docs/plugins/inspect/plugin-spandsp.xml @@ -3,7 +3,7 @@ <description>libspandsp plugin</description> <filename>../../ext/spandsp/.libs/libgstspandsp.so</filename> <basename>libgstspandsp.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml index f6fcbb54..d4275456 100644 --- a/docs/plugins/inspect/plugin-speed.xml +++ b/docs/plugins/inspect/plugin-speed.xml @@ -3,7 +3,7 @@ <description>Set speed/pitch on audio/raw streams (resampler)</description> <filename>../../gst/speed/.libs/libgstspeed.so</filename> <basename>libgstspeed.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-subenc.xml b/docs/plugins/inspect/plugin-subenc.xml new file mode 100644 index 00000000..2e46ece5 --- /dev/null +++ b/docs/plugins/inspect/plugin-subenc.xml @@ -0,0 +1,55 @@ +<plugin> + <name>subenc</name> + <description>subtitle encoders</description> + <filename>../../gst/subenc/.libs/libgstsubenc.so</filename> + <basename>libgstsubenc.so</basename> + <version>1.0.2</version> + <license>LGPL</license> + <source>gst-plugins-bad</source> + <package>GStreamer Bad Plug-ins source release</package> + <origin>Unknown package origin</origin> + <elements> + <element> + <name>srtenc</name> + <longname>Srt encoder</longname> + <class>Codec/Encoder/Subtitle</class> + <description>Srt subtitle encoder</description> + <author>Thijs Vermeir <thijsvermeir@gmail.com></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>text/x-raw, format=(string){ pango-markup, utf8 }</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>application/x-subtitle</details> + </caps> + </pads> + </element> + <element> + <name>webvttenc</name> + <longname>WebVTT encoder</longname> + <class>Codec/Encoder/Subtitle</class> + <description>WebVTT subtitle encoder</description> + <author>David Schleef <ds@schleef.org></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>text/x-raw, format=(string){ pango-markup, utf8 }</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>text/vtt</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml index 4d8f515a..58b7dff0 100644 --- a/docs/plugins/inspect/plugin-videoparsersbad.xml +++ b/docs/plugins/inspect/plugin-videoparsersbad.xml @@ -3,7 +3,7 @@ <description>videoparsers</description> <filename>../../gst/videoparsers/.libs/libgstvideoparsersbad.so</filename> <basename>libgstvideoparsersbad.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml index 35f41964..4a05e23a 100644 --- a/docs/plugins/inspect/plugin-voaacenc.xml +++ b/docs/plugins/inspect/plugin-voaacenc.xml @@ -3,7 +3,7 @@ <description>AAC audio encoder</description> <filename>../../ext/voaacenc/.libs/libgstvoaacenc.so</filename> <basename>libgstvoaacenc.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-voamrwbenc.xml b/docs/plugins/inspect/plugin-voamrwbenc.xml index 12e5ebd6..4f816615 100644 --- a/docs/plugins/inspect/plugin-voamrwbenc.xml +++ b/docs/plugins/inspect/plugin-voamrwbenc.xml @@ -3,7 +3,7 @@ <description>Adaptive Multi-Rate Wide-Band Encoder</description> <filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename> <basename>libgstvoamrwbenc.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>unknown</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-waylandsink.xml b/docs/plugins/inspect/plugin-waylandsink.xml index 85670ed2..a9dd4487 100644 --- a/docs/plugins/inspect/plugin-waylandsink.xml +++ b/docs/plugins/inspect/plugin-waylandsink.xml @@ -3,7 +3,7 @@ <description>Wayland Video Sink</description> <filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename> <basename>libgstwaylandsink.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml index 1fb877f8..57b519a8 100644 --- a/docs/plugins/inspect/plugin-y4mdec.xml +++ b/docs/plugins/inspect/plugin-y4mdec.xml @@ -3,7 +3,7 @@ <description>Demuxes/decodes YUV4MPEG streams</description> <filename>../../gst/y4m/.libs/libgsty4mdec.so</filename> <basename>libgsty4mdec.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins</package> diff --git a/docs/plugins/inspect/plugin-zbar.xml b/docs/plugins/inspect/plugin-zbar.xml index 67f096fb..9ab7ad72 100644 --- a/docs/plugins/inspect/plugin-zbar.xml +++ b/docs/plugins/inspect/plugin-zbar.xml @@ -3,7 +3,7 @@ <description>zbar barcode scanner</description> <filename>../../ext/zbar/.libs/libgstzbar.so</filename> <basename>libgstzbar.so</basename> - <version>1.0.1</version> + <version>1.0.2</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/ext/Makefile.am b/ext/Makefile.am index 74b7b0ec..68c347ec 100644 --- a/ext/Makefile.am +++ b/ext/Makefile.am @@ -88,6 +88,12 @@ else DTS_DIR= endif +if USE_EGLGLES +EGLGLES_DIR=eglgles +else +EGLGLES_DIR= +endif + if USE_RESINDVD RESINDVD_DIR = resindvd else @@ -379,6 +385,7 @@ SUBDIRS=\ $(WAYLAND_DIR) \ $(DTS_DIR) \ $(RESINDVD_DIR) \ + $(EGLGLES_DIR) \ $(FAAC_DIR) \ $(FAAD_DIR) \ $(FLITE_DIR) \ @@ -446,6 +453,7 @@ DIST_SUBDIRS = \ libmms \ lv2 \ dts \ + eglgles \ modplug \ mimic \ mpeg2enc \ diff --git a/ext/Makefile.in b/ext/Makefile.in index e8904dee..ca93e0f9 100644 --- a/ext/Makefile.in +++ b/ext/Makefile.in @@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -620,6 +622,8 @@ AUDIOFILE_DIR = @USE_WAYLAND_TRUE@WAYLAND_DIR = wayland @USE_DTS_FALSE@DTS_DIR = @USE_DTS_TRUE@DTS_DIR = dts +@USE_EGLGLES_FALSE@EGLGLES_DIR = +@USE_EGLGLES_TRUE@EGLGLES_DIR = eglgles @USE_RESINDVD_FALSE@RESINDVD_DIR = @USE_RESINDVD_TRUE@RESINDVD_DIR = resindvd @USE_FAAC_FALSE@FAAC_DIR = @@ -740,6 +744,7 @@ SUBDIRS = \ $(WAYLAND_DIR) \ $(DTS_DIR) \ $(RESINDVD_DIR) \ + $(EGLGLES_DIR) \ $(FAAC_DIR) \ $(FAAD_DIR) \ $(FLITE_DIR) \ @@ -807,6 +812,7 @@ DIST_SUBDIRS = \ libmms \ lv2 \ dts \ + eglgles \ modplug \ mimic \ mpeg2enc \ diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in index 41487072..a3742f84 100644 --- a/ext/apexsink/Makefile.in +++ b/ext/apexsink/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/apexsink/gstapexsink.c b/ext/apexsink/gstapexsink.c index 25dfb08b..fe3b9929 100644 --- a/ext/apexsink/gstapexsink.c +++ b/ext/apexsink/gstapexsink.c @@ -261,7 +261,7 @@ gst_apexsink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Apple AirPort Express Audio Sink", "Sink/Audio/Wireless", "Output stream to an AirPort Express", "Jérémie Bernard [GRemi] <gremimail@gmail.com>"); @@ -305,7 +305,7 @@ gst_apexsink_class_init (GstApExSinkClass * klass) g_param_spec_uint ("port", "Port", "AirPort Express target port", 0, 32000, DEFAULT_APEX_PORT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - /* we need to expose the volume as a double for playbin2. Internally we keep + /* we need to expose the volume as a double for playbin. Internally we keep * it as an int between 0 and 100, where 75 corresponds to 1.0. * FIXME we should store the volume as a double. */ g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_VOLUME, diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in index 98e53d39..ac618f58 100644 --- a/ext/assrender/Makefile.in +++ b/ext/assrender/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c index 9da97822..233733b0 100644 --- a/ext/assrender/gstassrender.c +++ b/ext/assrender/gstassrender.c @@ -155,7 +155,7 @@ gst_ass_render_class_init (GstAssRenderClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&text_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "ASS/SSA Render", + gst_element_class_set_static_metadata (gstelement_class, "ASS/SSA Render", "Mixer/Video/Overlay/Subtitle", "Renders ASS/SSA subtitles with libass", "Benjamin Schmitz <vortex@wolpzone.de>, " diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in index 5a3eb74c..456618c8 100644 --- a/ext/bz2/Makefile.in +++ b/ext/bz2/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/bz2/gstbz2dec.c b/ext/bz2/gstbz2dec.c index 513832e7..0cd9fa70 100644 --- a/ext/bz2/gstbz2dec.c +++ b/ext/bz2/gstbz2dec.c @@ -300,7 +300,7 @@ gst_bz2dec_class_init (GstBz2decClass * klass) gst_static_pad_template_get (&sink_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (gstelement_class, "BZ2 decoder", + gst_element_class_set_static_metadata (gstelement_class, "BZ2 decoder", "Codec/Decoder", "Decodes compressed streams", "Lutz Mueller <lutz@users.sourceforge.net>"); diff --git a/ext/bz2/gstbz2enc.c b/ext/bz2/gstbz2enc.c index 16132069..4be2d4b2 100644 --- a/ext/bz2/gstbz2enc.c +++ b/ext/bz2/gstbz2enc.c @@ -324,7 +324,7 @@ gst_bz2enc_class_init (GstBz2encClass * klass) gst_static_pad_template_get (&sink_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (gstelement_class, "BZ2 encoder", + gst_element_class_set_static_metadata (gstelement_class, "BZ2 encoder", "Codec/Encoder", "Compresses streams", "Lutz Mueller <lutz@users.sourceforge.net>"); diff --git a/ext/cdaudio/Makefile.in b/ext/cdaudio/Makefile.in index 50c49c1b..8fde7175 100644 --- a/ext/cdaudio/Makefile.in +++ b/ext/cdaudio/Makefile.in @@ -246,6 +246,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/cdaudio/gstcdaudio.c b/ext/cdaudio/gstcdaudio.c index ffd81c23..ff37407a 100644 --- a/ext/cdaudio/gstcdaudio.c +++ b/ext/cdaudio/gstcdaudio.c @@ -135,7 +135,7 @@ gst_cdaudio_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "CD player", + gst_element_class_set_static_metadata (element_class, "CD player", "Generic/Bin", "Play CD audio through the CD Drive", "Wim Taymans <wim@fluendo.com>"); diff --git a/ext/celt/Makefile.in b/ext/celt/Makefile.in index 30c8312a..0841ca34 100644 --- a/ext/celt/Makefile.in +++ b/ext/celt/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/celt/gstceltdec.c b/ext/celt/gstceltdec.c index 14f9d0d4..26e7000c 100644 --- a/ext/celt/gstceltdec.c +++ b/ext/celt/gstceltdec.c @@ -97,7 +97,7 @@ gst_celt_dec_class_init (GstCeltDecClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&celt_dec_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Celt audio decoder", + gst_element_class_set_static_metadata (gstelement_class, "Celt audio decoder", "Codec/Decoder/Audio", "decode celt streams to audio", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/celt/gstceltenc.c b/ext/celt/gstceltenc.c index a4dd1ea5..57633fb7 100644 --- a/ext/celt/gstceltenc.c +++ b/ext/celt/gstceltenc.c @@ -189,7 +189,7 @@ gst_celt_enc_class_init (GstCeltEncClass * klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Celt audio encoder", + gst_element_class_set_static_metadata (gstelement_class, "Celt audio encoder", "Codec/Encoder/Audio", "Encodes audio in Celt format", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in index bf9b47d5..6e0a0b23 100644 --- a/ext/chromaprint/Makefile.in +++ b/ext/chromaprint/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/chromaprint/gstchromaprint.c b/ext/chromaprint/gstchromaprint.c index ad9d1fdf..379383d1 100644 --- a/ext/chromaprint/gstchromaprint.c +++ b/ext/chromaprint/gstchromaprint.c @@ -106,7 +106,7 @@ gst_chromaprint_class_init (GstChromaprintClass * klass) GST_DEBUG_FUNCPTR (gst_chromaprint_sink_event); gstbasetrans_class->passthrough_on_same_caps = TRUE; - gst_element_class_set_metadata (GST_ELEMENT_CLASS (klass), + gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass), "Chromaprint fingerprinting element", "Filter/Analyzer/Audio", "Find an audio fingerprint using the Chromaprint library", diff --git a/ext/cog/Makefile.in b/ext/cog/Makefile.in index 60191374..ea437ee5 100644 --- a/ext/cog/Makefile.in +++ b/ext/cog/Makefile.in @@ -292,6 +292,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/cog/gstcogdownsample.c b/ext/cog/gstcogdownsample.c index fab62143..7d1a9101 100644 --- a/ext/cog/gstcogdownsample.c +++ b/ext/cog/gstcogdownsample.c @@ -137,7 +137,7 @@ gst_cogdownsample_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_cogdownsample_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Scale down video by factor of 2", "Filter/Effect/Video", "Scales down video by a factor of 2", "David Schleef <ds@schleef.org>"); } diff --git a/ext/cog/gstcogmse.c b/ext/cog/gstcogmse.c index 08908dc4..52c361e5 100644 --- a/ext/cog/gstcogmse.c +++ b/ext/cog/gstcogmse.c @@ -143,7 +143,7 @@ gst_mse_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_framestore_sink_test_template)); - gst_element_class_set_metadata (element_class, "Calculate MSE", + gst_element_class_set_static_metadata (element_class, "Calculate MSE", "Filter/Effect", "Calculates mean squared error between two video streams", "David Schleef <ds@schleef.org>"); diff --git a/ext/cog/gstcogscale.c b/ext/cog/gstcogscale.c index 87352670..e2844e64 100644 --- a/ext/cog/gstcogscale.c +++ b/ext/cog/gstcogscale.c @@ -203,7 +203,7 @@ gst_cog_scale_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Video scaler", + gst_element_class_set_static_metadata (element_class, "Video scaler", "Filter/Effect/Video", "Resizes video", "Wim Taymans <wim.taymans@chello.be>"); diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in index bafcdd3e..fdc6c3a9 100644 --- a/ext/curl/Makefile.in +++ b/ext/curl/Makefile.in @@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/curl/gstcurlbasesink.c b/ext/curl/gstcurlbasesink.c index ebbbb99a..3573041a 100644 --- a/ext/curl/gstcurlbasesink.c +++ b/ext/curl/gstcurlbasesink.c @@ -158,7 +158,7 @@ gst_curl_base_sink_class_init (GstCurlBaseSinkClass * klass) "curl base sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl base sink", "Sink/Network", "Upload data over the network to a server using libcurl", diff --git a/ext/curl/gstcurlfilesink.c b/ext/curl/gstcurlfilesink.c index c8b7e2b5..823e863d 100644 --- a/ext/curl/gstcurlfilesink.c +++ b/ext/curl/gstcurlfilesink.c @@ -107,7 +107,7 @@ gst_curl_file_sink_class_init (GstCurlFileSinkClass * klass) "curl file sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl file sink", "Sink/Network", "Upload data over FILE protocol using libcurl", diff --git a/ext/curl/gstcurlftpsink.c b/ext/curl/gstcurlftpsink.c index 58a057ff..4fcf4647 100644 --- a/ext/curl/gstcurlftpsink.c +++ b/ext/curl/gstcurlftpsink.c @@ -108,7 +108,7 @@ gst_curl_ftp_sink_class_init (GstCurlFtpSinkClass * klass) "curl ftp sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl ftp sink", "Sink/Network", "Upload data over FTP protocol using libcurl", diff --git a/ext/curl/gstcurlhttpsink.c b/ext/curl/gstcurlhttpsink.c index da35a101..3976fb86 100644 --- a/ext/curl/gstcurlhttpsink.c +++ b/ext/curl/gstcurlhttpsink.c @@ -126,7 +126,7 @@ gst_curl_http_sink_class_init (GstCurlHttpSinkClass * klass) "curl http sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl http sink", "Sink/Network", "Upload data over HTTP/HTTPS protocol using libcurl", diff --git a/ext/curl/gstcurlsmtpsink.c b/ext/curl/gstcurlsmtpsink.c index 4948ddbb..6575bcdc 100644 --- a/ext/curl/gstcurlsmtpsink.c +++ b/ext/curl/gstcurlsmtpsink.c @@ -229,7 +229,7 @@ gst_curl_smtp_sink_class_init (GstCurlSmtpSinkClass * klass) "curl smtp sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl smtp sink", "Sink/Network", "Upload data over SMTP protocol using libcurl", @@ -580,6 +580,12 @@ generate_encoded_word (gchar * str) return encoded_word; } +/* Setup header fields (From:/To:/Date: etc) and message body for the e-mail. + * This data is supposed to be sent to libcurl just before any media data. + * This function is called once for each e-mail: + * 1. we are about the send the first attachment + * 2. we have sent all the attachments and continue sending new ones within + * a new e-mail (transfer options have been reset). */ static gboolean gst_curl_smtp_sink_set_transfer_options_unlocked (GstCurlBaseSink * bcsink) { diff --git a/ext/curl/gstcurltlssink.c b/ext/curl/gstcurltlssink.c index d96c33e1..f18ead94 100644 --- a/ext/curl/gstcurltlssink.c +++ b/ext/curl/gstcurltlssink.c @@ -98,7 +98,7 @@ gst_curl_tls_sink_class_init (GstCurlTlsSinkClass * klass) "curl tls sink element"); GST_DEBUG_OBJECT (klass, "class_init"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Curl tls sink", "Sink/Network", "Upload data over TLS protocol using libcurl", diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in index 8b5db533..5975b1a5 100644 --- a/ext/dc1394/Makefile.in +++ b/ext/dc1394/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/dc1394/gstdc1394.c b/ext/dc1394/gstdc1394.c index 299b52ac..241828cc 100644 --- a/ext/dc1394/gstdc1394.c +++ b/ext/dc1394/gstdc1394.c @@ -105,8 +105,8 @@ gst_dc1394_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "1394 IIDC Video Source", - "Source/Video", + gst_element_class_set_static_metadata (element_class, + "1394 IIDC Video Source", "Source/Video", "libdc1394 based source, supports 1394 IIDC cameras", "Antoine Tremblay <hexa00@gmail.com>"); diff --git a/ext/dirac/Makefile.in b/ext/dirac/Makefile.in index 9a6eefda..69746b22 100644 --- a/ext/dirac/Makefile.in +++ b/ext/dirac/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/dirac/gstdiracenc.cc b/ext/dirac/gstdiracenc.cc index 647b5c13..7c48a8ad 100644 --- a/ext/dirac/gstdiracenc.cc +++ b/ext/dirac/gstdiracenc.cc @@ -205,7 +205,7 @@ gst_dirac_enc_base_init (gpointer g_class) gst_element_class_add_static_pad_template (element_class, &gst_dirac_enc_sink_template); - gst_element_class_set_metadata (element_class, "Dirac Encoder", + gst_element_class_set_static_metadata (element_class, "Dirac Encoder", "Codec/Encoder/Video", "Encode raw YUV video into Dirac stream", "David Schleef <ds@schleef.org>"); diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in index 4f59eb65..ce3e2d36 100644 --- a/ext/directfb/Makefile.in +++ b/ext/directfb/Makefile.in @@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c index be64cfdd..9dbc7a26 100644 --- a/ext/directfb/dfbvideosink.c +++ b/ext/directfb/dfbvideosink.c @@ -2262,7 +2262,7 @@ gst_dfbvideosink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "DirectFB video sink", + gst_element_class_set_static_metadata (element_class, "DirectFB video sink", "Sink/Video", "A DirectFB based videosink", "Julien Moutte <julien@moutte.net>"); diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in index 8f5b217e..f8d31be7 100644 --- a/ext/dts/Makefile.in +++ b/ext/dts/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c index 999758ef..2f9e5c36 100644 --- a/ext/dts/gstdtsdec.c +++ b/ext/dts/gstdtsdec.c @@ -160,7 +160,7 @@ gst_dtsdec_class_init (GstDtsDecClass * klass) gst_static_pad_template_get (&sink_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_set_metadata (gstelement_class, "DTS audio decoder", + gst_element_class_set_static_metadata (gstelement_class, "DTS audio decoder", "Codec/Decoder/Audio", "Decodes DTS audio streams", "Jan Schmidt <thaytan@noraisin.net>, " @@ -665,10 +665,11 @@ gst_dtsdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) gint offset, len; GstBuffer *subbuf; - size = gst_buffer_extract (buf, 0, data, 2); + size = gst_buffer_get_size (buf); if (size < 2) goto not_enough_data; + gst_buffer_extract (buf, 0, data, 2); first_access = (data[0] << 8) | data[1]; /* Skip the first_access header */ diff --git a/ext/eglgles/Makefile.am b/ext/eglgles/Makefile.am new file mode 100644 index 00000000..2573247a --- /dev/null +++ b/ext/eglgles/Makefile.am @@ -0,0 +1,19 @@ +plugin_LTLIBRARIES = libgsteglglessink.la + +libgsteglglessink_la_SOURCES = gsteglglessink.c video_platform_wrapper.c + +libgsteglglessink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_CFLAGS) \ + $(EGLGLES_CFLAGS) \ + $(X11_CFLAGS) + +libgsteglglessink_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) $(X11_LIBS) \ + -lgstvideo-$(GST_MAJORMINOR) \ + -lgstinterfaces-$(GST_MAJORMINOR) + +libgsteglglessink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgsteglglessink_la_LIBTOOLFLAGS = --tag=disable-static + +noinst_HEADERS = gsteglglessink.h video_platform_wrapper.h diff --git a/ext/eglgles/Makefile.in b/ext/eglgles/Makefile.in new file mode 100644 index 00000000..cf4626fe --- /dev/null +++ b/ext/eglgles/Makefile.in @@ -0,0 +1,960 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = ext/eglgles +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-auto-alt.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-libtool.m4 \ + $(top_srcdir)/common/m4/as-python.m4 \ + $(top_srcdir)/common/m4/as-scrub-include.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/common/m4/gst-arch.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-check.m4 \ + $(top_srcdir)/common/m4/gst-default.m4 \ + $(top_srcdir)/common/m4/gst-dowhile.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-gettext.m4 \ + $(top_srcdir)/common/m4/gst-glib2.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-platform.m4 \ + $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-x11.m4 \ + $(top_srcdir)/common/m4/gst.m4 \ + $(top_srcdir)/common/m4/gtk-doc.m4 \ + $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \ + $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(plugindir)" +LTLIBRARIES = $(plugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgsteglglessink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libgsteglglessink_la_OBJECTS = \ + libgsteglglessink_la-gsteglglessink.lo \ + libgsteglglessink_la-video_platform_wrapper.lo +libgsteglglessink_la_OBJECTS = $(am_libgsteglglessink_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libgsteglglessink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) \ + $(libgsteglglessink_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgsteglglessink_la_SOURCES) +DIST_SOURCES = $(libgsteglglessink_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ACMENC_CFLAGS = @ACMENC_CFLAGS@ +ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APEXSINK_CFLAGS = @APEXSINK_CFLAGS@ +APEXSINK_LIBS = @APEXSINK_LIBS@ +AR = @AR@ +AS = @AS@ +ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@ +ASSRENDER_LIBS = @ASSRENDER_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BZ2_LIBS = @BZ2_LIBS@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@ +CDAUDIO_LIBS = @CDAUDIO_LIBS@ +CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@ +CELT_0_11_LIBS = @CELT_0_11_LIBS@ +CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@ +CELT_0_7_LIBS = @CELT_0_7_LIBS@ +CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@ +CELT_0_8_LIBS = @CELT_0_8_LIBS@ +CELT_CFLAGS = @CELT_CFLAGS@ +CELT_LIBS = @CELT_LIBS@ +CFLAGS = @CFLAGS@ +CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@ +CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@ +COG_CFLAGS = @COG_CFLAGS@ +COG_LIBS = @COG_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURL_CFLAGS = @CURL_CFLAGS@ +CURL_LIBS = @CURL_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DCCP_LIBS = @DCCP_LIBS@ +DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@ +DECKLINK_LIBS = @DECKLINK_LIBS@ +DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@ +DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@ +DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@ +DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@ +DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@ +DIRAC_CFLAGS = @DIRAC_CFLAGS@ +DIRAC_LIBS = @DIRAC_LIBS@ +DIRECT3D9_LIBS = @DIRECT3D9_LIBS@ +DIRECT3D_LIBS = @DIRECT3D_LIBS@ +DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@ +DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@ +DIRECTX_CFLAGS = @DIRECTX_CFLAGS@ +DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DTS_LIBS = @DTS_LIBS@ +DUMPBIN = @DUMPBIN@ +DVDNAV_CFLAGS = @DVDNAV_CFLAGS@ +DVDNAV_LIBS = @DVDNAV_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ +ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@ +EXEEXT = @EXEEXT@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FAAC_LIBS = @FAAC_LIBS@ +FAAD_IS_NEAAC = @FAAD_IS_NEAAC@ +FAAD_LIBS = @FAAD_LIBS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FLITE_CFLAGS = @FLITE_CFLAGS@ +FLITE_LIBS = @FLITE_LIBS@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GIO_CFLAGS = @GIO_CFLAGS@ +GIO_LDFLAGS = @GIO_LDFLAGS@ +GIO_LIBS = @GIO_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ +GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_PREFIX = @GLIB_PREFIX@ +GLIB_REQ = @GLIB_REQ@ +GME_LIBS = @GME_LIBS@ +GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@ +GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GMYTH_CFLAGS = @GMYTH_CFLAGS@ +GMYTH_LIBS = @GMYTH_LIBS@ +GREP = @GREP@ +GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@ +GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ +GSETTINGS_LIBS = @GSETTINGS_LIBS@ +GSM_LIBS = @GSM_LIBS@ +GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@ +GSTPB_PREFIX = @GSTPB_PREFIX@ +GST_AGE = @GST_AGE@ +GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@ +GST_API_VERSION = @GST_API_VERSION@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@ +GST_CHECK_LIBS = @GST_CHECK_LIBS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_CURRENT = @GST_CURRENT@ +GST_CXXFLAGS = @GST_CXXFLAGS@ +GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@ +GST_LIBS = @GST_LIBS@ +GST_LIBVERSION = @GST_LIBVERSION@ +GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ +GST_LICENSE = @GST_LICENSE@ +GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_OBJCFLAGS = @GST_OBJCFLAGS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ +GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@ +GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ +GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@ +GST_PLUGINS_ALL = @GST_PLUGINS_ALL@ +GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@ +GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@ +GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_PLUGINS_DIR = @GST_PLUGINS_DIR@ +GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@ +GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@ +GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@ +GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@ +GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@ +GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@ +GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@ +GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@ +GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@ +GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@ +GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@ +GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ +GST_PREFIX = @GST_PREFIX@ +GST_REVISION = @GST_REVISION@ +GST_TOOLS_DIR = @GST_TOOLS_DIR@ +GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@ +GST_VIDEO_LIBS = @GST_VIDEO_LIBS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +G_UDEV_CFLAGS = @G_UDEV_CFLAGS@ +G_UDEV_LIBS = @G_UDEV_LIBS@ +HAVE_BZ2 = @HAVE_BZ2@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DIRECT3D = @HAVE_DIRECT3D@ +HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@ +HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@ +HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@ +HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@ +HAVE_DTS = @HAVE_DTS@ +HAVE_FAAC = @HAVE_FAAC@ +HAVE_FAAD = @HAVE_FAAD@ +HAVE_FLITE = @HAVE_FLITE@ +HAVE_GSM = @HAVE_GSM@ +HAVE_JASPER = @HAVE_JASPER@ +HAVE_NAS = @HAVE_NAS@ +HAVE_WILDMIDI = @HAVE_WILDMIDI@ +HAVE_X = @HAVE_X@ +HAVE_X11 = @HAVE_X11@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JASPER_LIBS = @JASPER_LIBS@ +KATE_CFLAGS = @KATE_CFLAGS@ +KATE_LIBS = @KATE_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@ +LIBDC1394_LIBS = @LIBDC1394_LIBS@ +LIBDIR = @LIBDIR@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBM = @LIBM@ +LIBMMS_CFLAGS = @LIBMMS_CFLAGS@ +LIBMMS_LIBS = @LIBMMS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@ +LIBUDEV_LIBS = @LIBUDEV_LIBS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALEDIR = @LOCALEDIR@ +LRDF_CFLAGS = @LRDF_CFLAGS@ +LRDF_LIBS = @LRDF_LIBS@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MIMIC_CFLAGS = @MIMIC_CFLAGS@ +MIMIC_LIBS = @MIMIC_LIBS@ +MJPEG_CFLAGS = @MJPEG_CFLAGS@ +MJPEG_LIBS = @MJPEG_LIBS@ +MKDIR_P = @MKDIR_P@ +MODPLUG_CFLAGS = @MODPLUG_CFLAGS@ +MODPLUG_LIBS = @MODPLUG_LIBS@ +MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@ +MPEG2ENC_LIBS = @MPEG2ENC_LIBS@ +MPG123_CFLAGS = @MPG123_CFLAGS@ +MPG123_LIBS = @MPG123_LIBS@ +MPLEX_CFLAGS = @MPLEX_CFLAGS@ +MPLEX_LDFLAGS = @MPLEX_LDFLAGS@ +MPLEX_LIBS = @MPLEX_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +MUSEPACK_LIBS = @MUSEPACK_LIBS@ +MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@ +MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@ +NAS_CFLAGS = @NAS_CFLAGS@ +NAS_LIBS = @NAS_LIBS@ +NEON_CFLAGS = @NEON_CFLAGS@ +NEON_LIBS = @NEON_LIBS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OFA_CFLAGS = @OFA_CFLAGS@ +OFA_LIBS = @OFA_LIBS@ +OPENAL_CFLAGS = @OPENAL_CFLAGS@ +OPENAL_LIBS = @OPENAL_LIBS@ +OPENCV_CFLAGS = @OPENCV_CFLAGS@ +OPENCV_LIBS = @OPENCV_LIBS@ +OPENCV_PREFIX = @OPENCV_PREFIX@ +OPUS_CFLAGS = @OPUS_CFLAGS@ +OPUS_LIBS = @OPUS_LIBS@ +ORCC = @ORCC@ +ORCC_FLAGS = @ORCC_FLAGS@ +ORC_CFLAGS = @ORC_CFLAGS@ +ORC_LIBS = @ORC_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +POSUB = @POSUB@ +PROFILE_CFLAGS = @PROFILE_CFLAGS@ +PVR_CFLAGS = @PVR_CFLAGS@ +PVR_LIBS = @PVR_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@ +RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +RTMP_CFLAGS = @RTMP_CFLAGS@ +RTMP_LIBS = @RTMP_LIBS@ +SCHRO_CFLAGS = @SCHRO_CFLAGS@ +SCHRO_LIBS = @SCHRO_LIBS@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLV2_CFLAGS = @SLV2_CFLAGS@ +SLV2_LIBS = @SLV2_LIBS@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +SNDIO_LIBS = @SNDIO_LIBS@ +SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@ +SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@ +SPANDSP_CFLAGS = @SPANDSP_CFLAGS@ +SPANDSP_LIBS = @SPANDSP_LIBS@ +SPC_LIBS = @SPC_LIBS@ +STRIP = @STRIP@ +SWFDEC_CFLAGS = @SWFDEC_CFLAGS@ +SWFDEC_LIBS = @SWFDEC_LIBS@ +TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@ +TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@ +TIGER_CFLAGS = @TIGER_CFLAGS@ +TIGER_LIBS = @TIGER_LIBS@ +TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@ +TIMIDITY_LIBS = @TIMIDITY_LIBS@ +USE_NLS = @USE_NLS@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VDPAU_CFLAGS = @VDPAU_CFLAGS@ +VDPAU_LIBS = @VDPAU_LIBS@ +VERSION = @VERSION@ +VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ +VOAACENC_LIBS = @VOAACENC_LIBS@ +VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ +VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ +WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@ +WILDMIDI_LIBS = @WILDMIDI_LIBS@ +WINSOCK2_LIBS = @WINSOCK2_LIBS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +XVID_LIBS = @XVID_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZBAR_CFLAGS = @ZBAR_CFLAGS@ +ZBAR_LIBS = @ZBAR_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gsettingsschemadir = @gsettingsschemadir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +plugin_LTLIBRARIES = libgsteglglessink.la +libgsteglglessink_la_SOURCES = gsteglglessink.c video_platform_wrapper.c +libgsteglglessink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_CFLAGS) \ + $(EGLGLES_CFLAGS) \ + $(X11_CFLAGS) + +libgsteglglessink_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) $(X11_LIBS) \ + -lgstvideo-$(GST_MAJORMINOR) \ + -lgstinterfaces-$(GST_MAJORMINOR) + +libgsteglglessink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgsteglglessink_la_LIBTOOLFLAGS = --tag=disable-static +noinst_HEADERS = gsteglglessink.h video_platform_wrapper.h +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/eglgles/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu ext/eglgles/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ + } + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgsteglglessink.la: $(libgsteglglessink_la_OBJECTS) $(libgsteglglessink_la_DEPENDENCIES) $(EXTRA_libgsteglglessink_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgsteglglessink_la_LINK) -rpath $(plugindir) $(libgsteglglessink_la_OBJECTS) $(libgsteglglessink_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsteglglessink_la-gsteglglessink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libgsteglglessink_la-gsteglglessink.lo: gsteglglessink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -MT libgsteglglessink_la-gsteglglessink.lo -MD -MP -MF $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Tpo -c -o libgsteglglessink_la-gsteglglessink.lo `test -f 'gsteglglessink.c' || echo '$(srcdir)/'`gsteglglessink.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Tpo $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsteglglessink.c' object='libgsteglglessink_la-gsteglglessink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -c -o libgsteglglessink_la-gsteglglessink.lo `test -f 'gsteglglessink.c' || echo '$(srcdir)/'`gsteglglessink.c + +libgsteglglessink_la-video_platform_wrapper.lo: video_platform_wrapper.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -MT libgsteglglessink_la-video_platform_wrapper.lo -MD -MP -MF $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Tpo -c -o libgsteglglessink_la-video_platform_wrapper.lo `test -f 'video_platform_wrapper.c' || echo '$(srcdir)/'`video_platform_wrapper.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Tpo $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video_platform_wrapper.c' object='libgsteglglessink_la-video_platform_wrapper.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -c -o libgsteglglessink_la-video_platform_wrapper.lo `test -f 'video_platform_wrapper.c' || echo '$(srcdir)/'`video_platform_wrapper.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/ext/eglgles/TODO b/ext/eglgles/TODO new file mode 100644 index 00000000..4c194733 --- /dev/null +++ b/ext/eglgles/TODO @@ -0,0 +1,11 @@ +- Correctly handle upstream surface region size changes. Test and debug + set_render_rect +- Make sure we are considering DAR on all scaling/rendering cases +- Test and debug caps renegotiation +- Drop android specifics like the default window h/w +- Move EGL/GLES context to it's own struct. Proly move GLSL stuff to it's + own header too +- Optimize shading routines if possible. +- Either finish implementing or drop fast rendering path logic +- Implement buffer pool +- Finish code documentation diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c new file mode 100644 index 00000000..aa87d738 --- /dev/null +++ b/ext/eglgles/gsteglglessink.c @@ -0,0 +1,2418 @@ +/* + * GStreamer EGL/GLES Sink + * Copyright (C) 2012 Collabora Ltd. + * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:element-eglglessink + * + * EglGlesSink renders video frames on a EGL surface it sets up + * from a window it either creates (on X11) or gets a handle to + * through it's xOverlay interface. All the display/surface logic + * in this sink uses EGL to interact with the native window system. + * The rendering logic, in turn, uses OpenGL ES v2. + * + * This sink has been tested to work on X11/Mesa and on Android + * (From Gingerbread on to Jelly Bean) and while it's currently + * using an slow copy-over rendering path it has proven to be fast + * enough on the devices we have tried it on. + * + * <refsect2> + * <title>Supported EGL/OpenGL ES versions</title> + * <para> + * This Sink uses EGLv1 and GLESv2 + * </para> + * </refsect2> + * + * <refsect2> + * <title>Example launch line</title> + * |[ + * gst-launch -v -m videotestsrc ! eglglessink + * ]| + * </refsect2> + * + * <refsect2> + * <title>Example launch line with internal window creation disabled</title> + * <para> + * By setting the can_create_window property to FALSE you can force the + * sink to wait for a window handle through it's xOverlay interface even + * if internal window creation is supported by the platform. Window creation + * is only supported in X11 right now but it should be trivial to add support + * for different platforms. + * </para> + * |[ + * gst-launch -v -m videotestsrc ! eglglessink can_create_window=FALSE + * ]| + * </refsect2> + * + * <refsect2> + * <title>Scaling</title> + * <para> + * The sink will try it's best to consider the incoming frame's and display's + * pixel aspect ratio and fill the corresponding surface without altering the + * decoded frame's geometry when scaling. You can disable this logic by setting + * the force_aspect_ratio property to FALSE, in which case the sink will just + * fill the entire surface it has access to regardles of the PAR/DAR relationship. + * </para> + * <para> + * Querying the display aspect ratio is only supported with EGL versions >= 1.2. + * The sink will just assume the DAR to be 1/1 if it can't get access to this + * information. + * </para> + * <para> + * Here is an example launch line with the PAR/DAR aware scaling disabled: + * </para> + * |[ + * gst-launch -v -m videotestsrc ! eglglessink force_aspect_ratio=FALSE + * ]| + * </refsect2> + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#include <gst/gst.h> +#include <gst/video/video.h> +#include <gst/video/gstvideosink.h> +#include <gst/interfaces/xoverlay.h> + +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +#include "video_platform_wrapper.h" + +#include "gsteglglessink.h" + +/* Some EGL implementations are reporting wrong + * values for the display's EGL_PIXEL_ASPECT_RATIO. + * They are required by the khronos specs to report + * this value as w/h * EGL_DISPLAY_SCALING (Which is + * a constant with value 10000) but at least the + * Galaxy SIII (Android) is reporting just 1 when + * w = h. We use these two to bound returned values to + * sanity. + */ +#define EGL_SANE_DAR_MIN ((EGL_DISPLAY_SCALING)/10) +#define EGL_SANE_DAR_MAX ((EGL_DISPLAY_SCALING)*10) + +GST_DEBUG_CATEGORY_STATIC (gst_eglglessink_debug); +#define GST_CAT_DEFAULT gst_eglglessink_debug + +/* GLESv2 GLSL Shaders + * + * OpenGL ES Standard does not mandate YUV support. This is + * why most of these shaders deal with Packed/Planar YUV->RGB + * conversion. + */ + +/* *INDENT-OFF* */ +/* Direct vertex copy */ +static const char *vert_COPY_prog = { + "attribute vec3 position;" + "attribute vec2 texpos;" + "varying vec2 opos;" + "void main(void)" + "{" + " opos = texpos;" + " gl_Position = vec4(position, 1.0);" + "}" +}; + +static const char *vert_COPY_prog_no_tex = { + "attribute vec3 position;" + "void main(void)" + "{" + " gl_Position = vec4(position, 1.0);" + "}" +}; + +/* Paint all black */ +static const char *frag_BLACK_prog = { + "precision mediump float;" + "void main(void)" + "{" + " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);" + "}" +}; + +/* Direct fragments copy */ +static const char *frag_COPY_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D tex;" + "void main(void)" + "{" + " vec4 t = texture2D(tex, opos);" + " gl_FragColor = vec4(t.rgb, 1.0);" + "}" +}; + +/* Channel reordering for XYZ <-> ZYX conversion */ +static const char *frag_REORDER_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D tex;" + "void main(void)" + "{" + " vec4 t = texture2D(tex, opos);" + " gl_FragColor = vec4(t.%c, t.%c, t.%c, 1.0);" + "}" +}; + +/* Packed YUV converters */ + +/** AYUV to RGB conversion */ +static const char *frag_AYUV_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D tex;" + "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" + "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);" + "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);" + "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);" + "void main(void) {" + " float r,g,b;" + " vec3 yuv;" + " yuv = texture2D(tex,opos).gba;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" + " gl_FragColor=vec4(r,g,b,1.0);" + "}" +}; + +/** YUY2/YVYU/UYVY to RGB conversion */ +static const char *frag_YUY2_YVYU_UYVY_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D Ytex, UVtex;" + "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" + "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);" + "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);" + "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);" + "void main(void) {" + " float r, g, b;" + " vec3 yuv;" + " yuv.x = texture2D(Ytex,opos).%c;" + " yuv.yz = texture2D(UVtex,opos).%c%c;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" + " gl_FragColor=vec4(r,g,b,1.0);" + "}" +}; + +/* Planar YUV converters */ + +/** YUV to RGB conversion */ +static const char *frag_PLANAR_YUV_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D Ytex,Utex,Vtex;" + "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" + "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);" + "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);" + "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);" + "void main(void) {" + " float r,g,b;" + " vec3 yuv;" + " yuv.x=texture2D(Ytex,opos).r;" + " yuv.y=texture2D(Utex,opos).r;" + " yuv.z=texture2D(Vtex,opos).r;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" + " gl_FragColor=vec4(r,g,b,1.0);" + "}" +}; + +/** NV12/NV21 to RGB conversion */ +static const char *frag_NV12_NV21_prog = { + "precision mediump float;" + "varying vec2 opos;" + "uniform sampler2D Ytex,UVtex;" + "const vec3 offset = vec3(-0.0625, -0.5, -0.5);" + "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);" + "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);" + "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);" + "void main(void) {" + " float r,g,b;" + " vec3 yuv;" + " yuv.x=texture2D(Ytex,opos).r;" + " yuv.yz=texture2D(UVtex,opos).%c%c;" + " yuv += offset;" + " r = dot(yuv, rcoeff);" + " g = dot(yuv, gcoeff);" + " b = dot(yuv, bcoeff);" + " gl_FragColor=vec4(r,g,b,1.0);" + "}" +}; +/* *INDENT-ON* */ + +/* Input capabilities. */ +static GstStaticPadTemplate gst_eglglessink_sink_template_factory = + GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_BGRA ";" + GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_ABGR ";" + GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";" + GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";" + GST_VIDEO_CAPS_YUV + ("{ AYUV, Y444, I420, YV12, NV12, NV21, YUY2, YVYU, UYVY, Y42B, Y41B }") + ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";" + GST_VIDEO_CAPS_RGB_16)); + +/* Filter signals and args */ +enum +{ + /* FILL ME */ + LAST_SIGNAL +}; + +enum +{ + PROP_0, + PROP_CREATE_WINDOW, + PROP_FORCE_ASPECT_RATIO, +}; + +/* will probably move elsewhere */ +static const EGLint eglglessink_RGBA8888_attribs[] = { + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_ALPHA_SIZE, 8, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE +}; + +static const EGLint eglglessink_RGB888_attribs[] = { + EGL_RED_SIZE, 8, + EGL_GREEN_SIZE, 8, + EGL_BLUE_SIZE, 8, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE +}; + +static const EGLint eglglessink_RGB565_attribs[] = { + EGL_RED_SIZE, 5, + EGL_GREEN_SIZE, 6, + EGL_BLUE_SIZE, 5, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, + EGL_NONE +}; + +static void gst_eglglessink_finalize (GObject * object); +static void gst_eglglessink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); +static void gst_eglglessink_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static GstStateChangeReturn gst_eglglessink_change_state (GstElement * element, + GstStateChange transition); +static GstFlowReturn gst_eglglessink_show_frame (GstVideoSink * vsink, + GstBuffer * buf); +static gboolean gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps); +static GstCaps *gst_eglglessink_getcaps (GstBaseSink * bsink); + +/* XOverlay interface cruft */ +static gboolean gst_eglglessink_interface_supported + (GstImplementsInterface * iface, GType type); +static void gst_eglglessink_implements_init + (GstImplementsInterfaceClass * klass); +static void gst_eglglessink_xoverlay_init (GstXOverlayClass * iface); +static void gst_eglglessink_init_interfaces (GType type); + +/* Actual XOverlay interface funcs */ +static void gst_eglglessink_expose (GstXOverlay * overlay); +static void gst_eglglessink_set_window_handle (GstXOverlay * overlay, + guintptr id); +static void gst_eglglessink_set_render_rectangle (GstXOverlay * overlay, gint x, + gint y, gint width, gint height); + +/* Utility */ +static GstEglGlesImageFmt *gst_eglglessink_get_compat_format_from_caps + (GstEglGlesSink * eglglessink, GstCaps * caps); +static EGLNativeWindowType gst_eglglessink_create_window (GstEglGlesSink * + eglglessink, gint width, gint height); +static inline gint +gst_eglglessink_fill_supported_fbuffer_configs (GstEglGlesSink * eglglessink); +static gboolean gst_eglglessink_init_egl_display (GstEglGlesSink * eglglessink); +static gboolean gst_eglglessink_choose_config (GstEglGlesSink * eglglessink); +static gboolean gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink); +static void gst_eglglessink_init_egl_exts (GstEglGlesSink * eglglessink); +static gboolean gst_eglglessink_setup_vbo (GstEglGlesSink * eglglessink, + gboolean reset); +static gboolean +gst_eglglessink_configure_caps (GstEglGlesSink * eglglessink, GstCaps * caps); +static GstFlowReturn gst_eglglessink_render_and_display (GstEglGlesSink * sink, + GstBuffer * buf); +static GstFlowReturn gst_eglglessink_queue_buffer (GstEglGlesSink * sink, + GstBuffer * buf); +static inline gboolean got_gl_error (const char *wtf); +static inline void show_egl_error (const char *wtf); +static void gst_eglglessink_wipe_fmt (gpointer data); +static inline gboolean egl_init (GstEglGlesSink * eglglessink); +static gboolean gst_eglglessink_context_make_current (GstEglGlesSink * + eglglessink, gboolean bind); +static void gst_eglglessink_wipe_eglglesctx (GstEglGlesSink * eglglessink); +static inline void gst_eglglessink_reset_display_region (GstEglGlesSink * + eglglessink); + +GST_BOILERPLATE_FULL (GstEglGlesSink, gst_eglglessink, GstVideoSink, + GST_TYPE_VIDEO_SINK, gst_eglglessink_init_interfaces); + + +static GstEglGlesImageFmt * +gst_eglglessink_get_compat_format_from_caps (GstEglGlesSink * eglglessink, + GstCaps * caps) +{ + + GList *list; + GstEglGlesImageFmt *format; + + g_return_val_if_fail (GST_IS_EGLGLESSINK (eglglessink), 0); + + list = eglglessink->supported_fmts; + + /* Traverse the list trying to find a compatible format */ + while (list) { + format = list->data; + GST_DEBUG_OBJECT (eglglessink, "Checking compatibility between listed %" + GST_PTR_FORMAT " and %" GST_PTR_FORMAT, format->caps, caps); + if (format) { + if (gst_caps_can_intersect (caps, format->caps)) { + GST_INFO_OBJECT (eglglessink, "Found compatible format %d", + format->fmt); + GST_DEBUG_OBJECT (eglglessink, + "Got caps %" GST_PTR_FORMAT " and this format can do %" + GST_PTR_FORMAT, caps, format->caps); + return format; + } + } + list = g_list_next (list); + } + + return NULL; +} + +static inline gint +gst_eglglessink_fill_supported_fbuffer_configs (GstEglGlesSink * eglglessink) +{ + gint ret = 0; + EGLint cfg_number; + GstEglGlesImageFmt *format; + GstCaps *caps; + + GST_DEBUG_OBJECT (eglglessink, + "Building initial list of wanted eglattribs per format"); + + /* Init supported format/caps list */ + caps = gst_caps_new_empty (); + + if (eglChooseConfig (eglglessink->eglglesctx.display, + eglglessink_RGBA8888_attribs, NULL, 1, &cfg_number) != EGL_FALSE) { + format = g_new0 (GstEglGlesImageFmt, 1); + format->fmt = GST_EGLGLESSINK_IMAGE_RGBA8888; + format->attribs = eglglessink_RGBA8888_attribs; + format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGBA); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGRA)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_ARGB)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_ABGR)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGBx)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGRx)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_xRGB)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_xBGR)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_AYUV)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y444)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_I420)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YV12)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_NV12)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_NV21)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YUY2)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YVYU)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_UYVY)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y42B)); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y41B)); + eglglessink->supported_fmts = + g_list_append (eglglessink->supported_fmts, format); + ret++; + gst_caps_append (caps, gst_caps_ref (format->caps)); + } else { + GST_INFO_OBJECT (eglglessink, + "EGL display doesn't support RGBA8888 config"); + } + + if (eglChooseConfig (eglglessink->eglglesctx.display, + eglglessink_RGB888_attribs, NULL, 1, &cfg_number) != EGL_FALSE) { + format = g_new0 (GstEglGlesImageFmt, 1); + format->fmt = GST_EGLGLESSINK_IMAGE_RGB888; + format->attribs = eglglessink_RGB888_attribs; + format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGB); + gst_caps_append (format->caps, + gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGR)); + eglglessink->supported_fmts = + g_list_append (eglglessink->supported_fmts, format); + ret++; + gst_caps_append (caps, gst_caps_ref (format->caps)); + } else { + GST_INFO_OBJECT (eglglessink, "EGL display doesn't support RGB888 config"); + } + + if (eglChooseConfig (eglglessink->eglglesctx.display, + eglglessink_RGB565_attribs, NULL, 1, &cfg_number) != EGL_FALSE) { + format = g_new0 (GstEglGlesImageFmt, 1); + format->fmt = GST_EGLGLESSINK_IMAGE_RGB565; + format->attribs = eglglessink_RGB565_attribs; + format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGB16); + eglglessink->supported_fmts = + g_list_append (eglglessink->supported_fmts, format); + ret++; + gst_caps_append (caps, gst_caps_ref (format->caps)); + } else { + GST_INFO_OBJECT (eglglessink, "EGL display doesn't support RGB565 config"); + } + + GST_OBJECT_LOCK (eglglessink); + gst_caps_replace (&eglglessink->sinkcaps, caps); + GST_OBJECT_UNLOCK (eglglessink); + gst_caps_unref (caps); + + return ret; +} + +static inline gboolean +egl_init (GstEglGlesSink * eglglessink) +{ + if (!platform_wrapper_init ()) { + GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL platform wrapper"); + goto HANDLE_ERROR; + } + + if (!gst_eglglessink_init_egl_display (eglglessink)) { + GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL display"); + goto HANDLE_ERROR; + } + + gst_eglglessink_init_egl_exts (eglglessink); + + if (!gst_eglglessink_fill_supported_fbuffer_configs (eglglessink)) { + GST_ERROR_OBJECT (eglglessink, "Display support NONE of our configs"); + goto HANDLE_ERROR; + } + + eglglessink->egl_started = TRUE; + + return TRUE; + +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Failed to perform EGL init"); + return FALSE; +} + +static gpointer +render_thread_func (GstEglGlesSink * eglglessink) +{ + GstDataQueueItem *item = NULL; + + while (gst_data_queue_pop (eglglessink->queue, &item)) { + GstBuffer *buf = NULL; + + GST_DEBUG_OBJECT (eglglessink, "Handling object %" GST_PTR_FORMAT, + item->object); + + if (item->object) { + GstCaps *caps; + + buf = GST_BUFFER (item->object); + caps = GST_BUFFER_CAPS (buf); + if (caps != eglglessink->configured_caps) { + if (!gst_eglglessink_configure_caps (eglglessink, caps)) { + eglglessink->last_flow = GST_FLOW_NOT_NEGOTIATED; + g_mutex_lock (eglglessink->render_lock); + g_cond_broadcast (eglglessink->render_cond); + g_mutex_unlock (eglglessink->render_lock); + item->destroy (item); + break; + } + } + } + + if (eglglessink->configured_caps) { + eglglessink->last_flow = + gst_eglglessink_render_and_display (eglglessink, buf); + } else { + GST_DEBUG_OBJECT (eglglessink, "No caps configured yet, not drawing anything"); + } + + if (buf) { + g_mutex_lock (eglglessink->render_lock); + g_cond_broadcast (eglglessink->render_cond); + g_mutex_unlock (eglglessink->render_lock); + } + item->destroy (item); + if (eglglessink->last_flow != GST_FLOW_OK) + break; + GST_DEBUG_OBJECT (eglglessink, "Successfully handled object"); + } + + if (eglglessink->last_flow == GST_FLOW_OK) + eglglessink->last_flow = GST_FLOW_WRONG_STATE; + + GST_DEBUG_OBJECT (eglglessink, "Shutting down thread"); + + /* EGL/GLES cleanup */ + gst_eglglessink_wipe_eglglesctx (eglglessink); + + if (eglglessink->configured_caps) { + gst_caps_unref (eglglessink->configured_caps); + eglglessink->configured_caps = NULL; + } + + return NULL; +} + +static void +gst_eglglessink_wipe_eglglesctx (GstEglGlesSink * eglglessink) +{ + glUseProgram (0); + + if (eglglessink->have_vbo) { + glDeleteBuffers (1, &eglglessink->eglglesctx.position_buffer); + glDeleteBuffers (1, &eglglessink->eglglesctx.index_buffer); + eglglessink->have_vbo = FALSE; + } + + if (eglglessink->have_texture) { + glDeleteTextures (eglglessink->eglglesctx.n_textures, + eglglessink->eglglesctx.texture); + eglglessink->have_texture = FALSE; + eglglessink->eglglesctx.n_textures = 0; + } + + if (eglglessink->eglglesctx.glslprogram[0]) { + glDetachShader (eglglessink->eglglesctx.glslprogram[0], + eglglessink->eglglesctx.fragshader[0]); + glDetachShader (eglglessink->eglglesctx.glslprogram[0], + eglglessink->eglglesctx.vertshader[0]); + glDeleteProgram (eglglessink->eglglesctx.glslprogram[0]); + glDeleteShader (eglglessink->eglglesctx.fragshader[0]); + glDeleteShader (eglglessink->eglglesctx.vertshader[0]); + eglglessink->eglglesctx.glslprogram[0] = 0; + } + + if (eglglessink->eglglesctx.glslprogram[1]) { + glDetachShader (eglglessink->eglglesctx.glslprogram[1], + eglglessink->eglglesctx.fragshader[1]); + glDetachShader (eglglessink->eglglesctx.glslprogram[1], + eglglessink->eglglesctx.vertshader[1]); + glDeleteProgram (eglglessink->eglglesctx.glslprogram[1]); + glDeleteShader (eglglessink->eglglesctx.fragshader[1]); + glDeleteShader (eglglessink->eglglesctx.vertshader[1]); + eglglessink->eglglesctx.glslprogram[1] = 0; + } + + gst_eglglessink_context_make_current (eglglessink, FALSE); + + if (eglglessink->eglglesctx.surface) { + eglDestroySurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface); + eglglessink->eglglesctx.surface = NULL; + eglglessink->have_surface = FALSE; + } + + if (eglglessink->eglglesctx.eglcontext) { + eglDestroyContext (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.eglcontext); + eglglessink->eglglesctx.eglcontext = NULL; + } + + gst_eglglessink_reset_display_region (eglglessink); +} + +/* Reset display region + * XXX: Should probably keep old ones if set_render_rect() + * has been called. + */ +static inline void +gst_eglglessink_reset_display_region (GstEglGlesSink * eglglessink) +{ + GST_OBJECT_LOCK (eglglessink); + eglglessink->display_region.w = 0; + eglglessink->display_region.h = 0; + GST_OBJECT_UNLOCK (eglglessink); +} + +static gboolean +gst_eglglessink_start (GstEglGlesSink * eglglessink) +{ + GError *error = NULL; + + GST_DEBUG_OBJECT (eglglessink, "Starting"); + + if (!eglglessink->egl_started) { + GST_ERROR_OBJECT (eglglessink, "EGL uninitialized. Bailing out"); + goto HANDLE_ERROR; + } + + /* Ask for a window to render to */ + if (!eglglessink->have_window) + gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (eglglessink)); + + if (!eglglessink->have_window && !eglglessink->create_window) { + GST_ERROR_OBJECT (eglglessink, "Window handle unavailable and we " + "were instructed not to create an internal one. Bailing out."); + goto HANDLE_ERROR; + } + + gst_eglglessink_reset_display_region (eglglessink); + eglglessink->last_flow = GST_FLOW_OK; + gst_data_queue_set_flushing (eglglessink->queue, FALSE); + +#if !GLIB_CHECK_VERSION (2, 31, 0) + eglglessink->thread = + g_thread_create ((GThreadFunc) render_thread_func, eglglessink, TRUE, + &error); +#else + eglglessink->thread = g_thread_try_new ("eglglessink-render", + (GThreadFunc) render_thread_func, eglglessink, &error); +#endif + + if (!eglglessink->thread || error != NULL) + goto HANDLE_ERROR; + + GST_DEBUG_OBJECT (eglglessink, "Started"); + + return TRUE; + +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Couldn't start"); + g_clear_error (&error); + return FALSE; +} + +static gboolean +gst_eglglessink_stop (GstEglGlesSink * eglglessink) +{ + GST_DEBUG_OBJECT (eglglessink, "Stopping"); + + gst_data_queue_set_flushing (eglglessink->queue, TRUE); + g_mutex_lock (eglglessink->render_lock); + g_cond_broadcast (eglglessink->render_cond); + g_mutex_unlock (eglglessink->render_lock); + + if (eglglessink->thread) { + g_thread_join (eglglessink->thread); + eglglessink->thread = NULL; + } + eglglessink->last_flow = GST_FLOW_WRONG_STATE; + + if (eglglessink->using_own_window) { + platform_destroy_native_window (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.used_window); + eglglessink->eglglesctx.used_window = 0; + eglglessink->have_window = FALSE; + } + eglglessink->eglglesctx.used_window = 0; + if (eglglessink->current_caps) { + gst_caps_unref (eglglessink->current_caps); + eglglessink->current_caps = NULL; + } + + GST_DEBUG_OBJECT (eglglessink, "Stopped"); + + return TRUE; +} + +static void +gst_eglglessink_xoverlay_init (GstXOverlayClass * iface) +{ + iface->set_window_handle = gst_eglglessink_set_window_handle; + iface->expose = gst_eglglessink_expose; + iface->set_render_rectangle = gst_eglglessink_set_render_rectangle; +} + +static gboolean +gst_eglglessink_interface_supported (GstImplementsInterface * iface, GType type) +{ + return (type == GST_TYPE_X_OVERLAY); +} + +static void +gst_eglglessink_implements_init (GstImplementsInterfaceClass * klass) +{ + klass->supported = gst_eglglessink_interface_supported; +} + +static inline gboolean +got_gl_error (const char *wtf) +{ + GLuint error = GL_NO_ERROR; + + if ((error = glGetError ()) != GL_NO_ERROR) { + GST_CAT_ERROR (GST_CAT_DEFAULT, "GL ERROR: %s returned %x", wtf, error); + return TRUE; + } + return FALSE; +} + +static inline void +show_egl_error (const char *wtf) +{ + EGLint error; + + if ((error = eglGetError ()) != EGL_SUCCESS) + GST_CAT_DEBUG (GST_CAT_DEFAULT, "EGL ERROR: %s returned %x", wtf, error); +} + +static EGLNativeWindowType +gst_eglglessink_create_window (GstEglGlesSink * eglglessink, gint width, + gint height) +{ + EGLNativeWindowType window = 0; + + if (!eglglessink->create_window) { + GST_ERROR_OBJECT (eglglessink, "This sink can't create a window by itself"); + return window; + } else + GST_INFO_OBJECT (eglglessink, "Attempting internal window creation"); + + window = platform_create_native_window (width, height); + if (!window) { + GST_ERROR_OBJECT (eglglessink, "Could not create window"); + return window; + } + return window; +} + +static void +gst_eglglessink_expose (GstXOverlay * overlay) +{ + GstEglGlesSink *eglglessink; + GstFlowReturn ret; + + eglglessink = GST_EGLGLESSINK (overlay); + GST_DEBUG_OBJECT (eglglessink, "Expose catched, redisplay"); + + /* Render from last seen buffer */ + ret = gst_eglglessink_queue_buffer (eglglessink, NULL); + if (ret == GST_FLOW_ERROR) + GST_ERROR_OBJECT (eglglessink, "Redisplay failed"); +} + +/* Prints available EGL/GLES extensions + * If another rendering path is implemented this is the place + * where you want to check for the availability of its supporting + * EGL/GLES extensions. + */ +static void +gst_eglglessink_init_egl_exts (GstEglGlesSink * eglglessink) +{ + const char *eglexts; + unsigned const char *glexts; + + eglexts = eglQueryString (eglglessink->eglglesctx.display, EGL_EXTENSIONS); + glexts = glGetString (GL_EXTENSIONS); + + GST_DEBUG_OBJECT (eglglessink, "Available EGL extensions: %s\n", + GST_STR_NULL (eglexts)); + GST_DEBUG_OBJECT (eglglessink, "Available GLES extensions: %s\n", + GST_STR_NULL ((const char *) glexts)); + + return; +} + +static gboolean +gst_eglglessink_setup_vbo (GstEglGlesSink * eglglessink, gboolean reset) +{ + gdouble surface_width, surface_height; + gdouble x1, x2, y1, y2; + + GST_INFO_OBJECT (eglglessink, "VBO setup. have_vbo:%d, should reset %d", + eglglessink->have_vbo, reset); + + if (eglglessink->have_vbo && reset) { + glDeleteBuffers (1, &eglglessink->eglglesctx.position_buffer); + glDeleteBuffers (1, &eglglessink->eglglesctx.index_buffer); + eglglessink->have_vbo = FALSE; + } + + surface_width = eglglessink->eglglesctx.surface_width; + surface_height = eglglessink->eglglesctx.surface_height; + + GST_DEBUG_OBJECT (eglglessink, "Performing VBO setup"); + + x1 = (eglglessink->display_region.x / surface_width) * 2.0 - 1; + y1 = (eglglessink->display_region.y / surface_height) * 2.0 - 1; + x2 = ((eglglessink->display_region.x + + eglglessink->display_region.w) / surface_width) * 2.0 - 1; + y2 = ((eglglessink->display_region.y + + eglglessink->display_region.h) / surface_height) * 2.0 - 1; + + eglglessink->eglglesctx.position_array[0].x = x2; + eglglessink->eglglesctx.position_array[0].y = y2; + eglglessink->eglglesctx.position_array[0].z = 0; + eglglessink->eglglesctx.position_array[0].a = 1; + eglglessink->eglglesctx.position_array[0].b = 0; + + eglglessink->eglglesctx.position_array[1].x = x2; + eglglessink->eglglesctx.position_array[1].y = y1; + eglglessink->eglglesctx.position_array[1].z = 0; + eglglessink->eglglesctx.position_array[1].a = 1; + eglglessink->eglglesctx.position_array[1].b = 1; + + eglglessink->eglglesctx.position_array[2].x = x1; + eglglessink->eglglesctx.position_array[2].y = y2; + eglglessink->eglglesctx.position_array[2].z = 0; + eglglessink->eglglesctx.position_array[2].a = 0; + eglglessink->eglglesctx.position_array[2].b = 0; + + eglglessink->eglglesctx.position_array[3].x = x1; + eglglessink->eglglesctx.position_array[3].y = y1; + eglglessink->eglglesctx.position_array[3].z = 0; + eglglessink->eglglesctx.position_array[3].a = 0; + eglglessink->eglglesctx.position_array[3].b = 1; + + if (eglglessink->display_region.x == 0) { + /* Borders top/bottom */ + + eglglessink->eglglesctx.position_array[4 + 0].x = 1; + eglglessink->eglglesctx.position_array[4 + 0].y = 1; + eglglessink->eglglesctx.position_array[4 + 0].z = 0; + + eglglessink->eglglesctx.position_array[4 + 1].x = x2; + eglglessink->eglglesctx.position_array[4 + 1].y = y2; + eglglessink->eglglesctx.position_array[4 + 1].z = 0; + + eglglessink->eglglesctx.position_array[4 + 2].x = -1; + eglglessink->eglglesctx.position_array[4 + 2].y = 1; + eglglessink->eglglesctx.position_array[4 + 2].z = 0; + + eglglessink->eglglesctx.position_array[4 + 3].x = x1; + eglglessink->eglglesctx.position_array[4 + 3].y = y2; + eglglessink->eglglesctx.position_array[4 + 3].z = 0; + + eglglessink->eglglesctx.position_array[8 + 0].x = 1; + eglglessink->eglglesctx.position_array[8 + 0].y = y1; + eglglessink->eglglesctx.position_array[8 + 0].z = 0; + + eglglessink->eglglesctx.position_array[8 + 1].x = 1; + eglglessink->eglglesctx.position_array[8 + 1].y = -1; + eglglessink->eglglesctx.position_array[8 + 1].z = 0; + + eglglessink->eglglesctx.position_array[8 + 2].x = x1; + eglglessink->eglglesctx.position_array[8 + 2].y = y1; + eglglessink->eglglesctx.position_array[8 + 2].z = 0; + + eglglessink->eglglesctx.position_array[8 + 3].x = -1; + eglglessink->eglglesctx.position_array[8 + 3].y = -1; + eglglessink->eglglesctx.position_array[8 + 3].z = 0; + } else { + /* Borders left/right */ + + eglglessink->eglglesctx.position_array[4 + 0].x = x1; + eglglessink->eglglesctx.position_array[4 + 0].y = 1; + eglglessink->eglglesctx.position_array[4 + 0].z = 0; + + eglglessink->eglglesctx.position_array[4 + 1].x = x1; + eglglessink->eglglesctx.position_array[4 + 1].y = -1; + eglglessink->eglglesctx.position_array[4 + 1].z = 0; + + eglglessink->eglglesctx.position_array[4 + 2].x = -1; + eglglessink->eglglesctx.position_array[4 + 2].y = 1; + eglglessink->eglglesctx.position_array[4 + 2].z = 0; + + eglglessink->eglglesctx.position_array[4 + 3].x = -1; + eglglessink->eglglesctx.position_array[4 + 3].y = -1; + eglglessink->eglglesctx.position_array[4 + 3].z = 0; + + eglglessink->eglglesctx.position_array[8 + 0].x = 1; + eglglessink->eglglesctx.position_array[8 + 0].y = 1; + eglglessink->eglglesctx.position_array[8 + 0].z = 0; + + eglglessink->eglglesctx.position_array[8 + 1].x = 1; + eglglessink->eglglesctx.position_array[8 + 1].y = -1; + eglglessink->eglglesctx.position_array[8 + 1].z = 0; + + eglglessink->eglglesctx.position_array[8 + 2].x = x2; + eglglessink->eglglesctx.position_array[8 + 2].y = y2; + eglglessink->eglglesctx.position_array[8 + 2].z = 0; + + eglglessink->eglglesctx.position_array[8 + 3].x = x2; + eglglessink->eglglesctx.position_array[8 + 3].y = -1; + eglglessink->eglglesctx.position_array[8 + 3].z = 0; + } + + eglglessink->eglglesctx.index_array[0] = 0; + eglglessink->eglglesctx.index_array[1] = 1; + eglglessink->eglglesctx.index_array[2] = 2; + eglglessink->eglglesctx.index_array[3] = 3; + + glGenBuffers (1, &eglglessink->eglglesctx.position_buffer); + glGenBuffers (1, &eglglessink->eglglesctx.index_buffer); + if (got_gl_error ("glGenBuffers")) + goto HANDLE_ERROR_LOCKED; + + glBindBuffer (GL_ARRAY_BUFFER, eglglessink->eglglesctx.position_buffer); + if (got_gl_error ("glBindBuffer position_buffer")) + goto HANDLE_ERROR_LOCKED; + + glBufferData (GL_ARRAY_BUFFER, + sizeof (eglglessink->eglglesctx.position_array), + eglglessink->eglglesctx.position_array, GL_STATIC_DRAW); + if (got_gl_error ("glBufferData position_buffer")) + goto HANDLE_ERROR_LOCKED; + + glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, eglglessink->eglglesctx.index_buffer); + if (got_gl_error ("glBindBuffer index_buffer")) + goto HANDLE_ERROR_LOCKED; + + glBufferData (GL_ELEMENT_ARRAY_BUFFER, + sizeof (eglglessink->eglglesctx.index_array), + eglglessink->eglglesctx.index_array, GL_STATIC_DRAW); + if (got_gl_error ("glBufferData index_buffer")) + goto HANDLE_ERROR_LOCKED; + + eglglessink->have_vbo = TRUE; + GST_DEBUG_OBJECT (eglglessink, "VBO setup done"); + + return TRUE; + +HANDLE_ERROR_LOCKED: + GST_ERROR_OBJECT (eglglessink, "Unable to perform VBO setup"); + return FALSE; +} + +/* XXX: Lock eglgles context? */ +static gboolean +gst_eglglessink_update_surface_dimensions (GstEglGlesSink * eglglessink) +{ + gint width, height; + + /* Save surface dims */ + eglQuerySurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface, EGL_WIDTH, &width); + eglQuerySurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface, EGL_HEIGHT, &height); + + if (width != eglglessink->eglglesctx.surface_width || + height != eglglessink->eglglesctx.surface_height) { + eglglessink->eglglesctx.surface_width = width; + eglglessink->eglglesctx.surface_height = height; + GST_INFO_OBJECT (eglglessink, "Got surface of %dx%d pixels", width, height); + return TRUE; + } + + return FALSE; +} + +static gboolean +gst_eglglessink_context_make_current (GstEglGlesSink * eglglessink, + gboolean bind) +{ + g_assert (eglglessink->eglglesctx.display != NULL); + + if (bind && eglglessink->eglglesctx.surface && + eglglessink->eglglesctx.eglcontext) { + EGLContext *ctx = eglGetCurrentContext (); + + if (ctx == eglglessink->eglglesctx.eglcontext) { + GST_DEBUG_OBJECT (eglglessink, + "Already attached the context to thread %p", g_thread_self ()); + return TRUE; + } + + GST_DEBUG_OBJECT (eglglessink, "Attaching context to thread %p", + g_thread_self ()); + if (!eglMakeCurrent (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface, eglglessink->eglglesctx.surface, + eglglessink->eglglesctx.eglcontext)) { + show_egl_error ("eglMakeCurrent"); + GST_ERROR_OBJECT (eglglessink, "Couldn't bind context"); + return FALSE; + } + } else { + GST_DEBUG_OBJECT (eglglessink, "Detaching context from thread %p", + g_thread_self ()); + if (!eglMakeCurrent (eglglessink->eglglesctx.display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT)) { + show_egl_error ("eglMakeCurrent"); + GST_ERROR_OBJECT (eglglessink, "Couldn't unbind context"); + return FALSE; + } + } + + return TRUE; +} + +static gboolean +gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink) +{ + GLint test; + GLboolean ret; + GLchar *info_log; + EGLint display_par; + const gchar *texnames[3] = { NULL, }; + gchar *tmp_prog = NULL; + EGLint swap_behavior; + + GST_DEBUG_OBJECT (eglglessink, "Enter EGL surface setup"); + + eglglessink->eglglesctx.surface = + eglCreateWindowSurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.config, eglglessink->eglglesctx.used_window, + NULL); + + if (eglglessink->eglglesctx.surface == EGL_NO_SURFACE) { + show_egl_error ("eglCreateWindowSurface"); + GST_ERROR_OBJECT (eglglessink, "Can't create surface"); + goto HANDLE_EGL_ERROR_LOCKED; + } + + eglglessink->eglglesctx.buffer_preserved = FALSE; + if (eglQuerySurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface, EGL_SWAP_BEHAVIOR, &swap_behavior)) { + GST_DEBUG_OBJECT (eglglessink, "Buffer swap behavior %x", swap_behavior); + eglglessink->eglglesctx.buffer_preserved = + swap_behavior == EGL_BUFFER_PRESERVED; + } else { + GST_DEBUG_OBJECT (eglglessink, "Can't query buffer swap behavior"); + } + + if (!gst_eglglessink_context_make_current (eglglessink, TRUE)) + goto HANDLE_EGL_ERROR_LOCKED; + + /* Save display's pixel aspect ratio + * + * DAR is reported as w/h * EGL_DISPLAY_SCALING wich is + * a constant with value 10000. This attribute is only + * supported if the EGL version is >= 1.2 + * XXX: Setup this as a property. + * or some other one time check. Right now it's being called once + * per frame. + */ + if (eglglessink->eglglesctx.egl_major == 1 && + eglglessink->eglglesctx.egl_minor < 2) { + GST_DEBUG_OBJECT (eglglessink, "Can't query PAR. Using default: %dx%d", + EGL_DISPLAY_SCALING, EGL_DISPLAY_SCALING); + eglglessink->eglglesctx.pixel_aspect_ratio = EGL_DISPLAY_SCALING; + } else { + eglQuerySurface (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface, EGL_PIXEL_ASPECT_RATIO, &display_par); + /* Fix for outbound DAR reporting on some implementations not + * honoring the 'should return w/h * EGL_DISPLAY_SCALING' spec + * requirement + */ + if (display_par == EGL_UNKNOWN || display_par < EGL_SANE_DAR_MIN || + display_par > EGL_SANE_DAR_MAX) { + GST_DEBUG_OBJECT (eglglessink, "Nonsensical PAR value returned: %d. " + "Bad EGL implementation? " + "Will use default: %d/%d", eglglessink->eglglesctx.pixel_aspect_ratio, + EGL_DISPLAY_SCALING, EGL_DISPLAY_SCALING); + eglglessink->eglglesctx.pixel_aspect_ratio = EGL_DISPLAY_SCALING; + } else { + eglglessink->eglglesctx.pixel_aspect_ratio = display_par; + } + } + + /* Save surface dims */ + gst_eglglessink_update_surface_dimensions (eglglessink); + + /* We have a surface! */ + eglglessink->have_surface = TRUE; + + /* Init vertex and fragment GLSL shaders. + * Note: Shader compiler support is optional but we currently rely on it. + */ + + glGetBooleanv (GL_SHADER_COMPILER, &ret); + if (ret == GL_FALSE) { + GST_ERROR_OBJECT (eglglessink, "Shader compiler support is unavailable!"); + goto HANDLE_ERROR; + } + + /* Build shader program for video texture rendering */ + eglglessink->eglglesctx.vertshader[0] = glCreateShader (GL_VERTEX_SHADER); + GST_DEBUG_OBJECT (eglglessink, "Sending %s to handle %d", vert_COPY_prog, + eglglessink->eglglesctx.vertshader[0]); + glShaderSource (eglglessink->eglglesctx.vertshader[0], 1, &vert_COPY_prog, + NULL); + if (got_gl_error ("glShaderSource vertex")) + goto HANDLE_ERROR; + + glCompileShader (eglglessink->eglglesctx.vertshader[0]); + if (got_gl_error ("glCompileShader vertex")) + goto HANDLE_ERROR; + + glGetShaderiv (eglglessink->eglglesctx.vertshader[0], GL_COMPILE_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "Successfully compiled vertex shader"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't compile vertex shader"); + glGetShaderiv (eglglessink->eglglesctx.vertshader[0], GL_INFO_LOG_LENGTH, + &test); + info_log = g_new0 (GLchar, test); + glGetShaderInfoLog (eglglessink->eglglesctx.vertshader[0], test, NULL, + info_log); + GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log); + g_free (info_log); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.fragshader[0] = glCreateShader (GL_FRAGMENT_SHADER); + switch (eglglessink->format) { + case GST_VIDEO_FORMAT_AYUV: + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, &frag_AYUV_prog, + NULL); + eglglessink->eglglesctx.n_textures = 1; + texnames[0] = "tex"; + break; + case GST_VIDEO_FORMAT_Y444: + case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: + case GST_VIDEO_FORMAT_Y42B: + case GST_VIDEO_FORMAT_Y41B: + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + &frag_PLANAR_YUV_prog, NULL); + eglglessink->eglglesctx.n_textures = 3; + texnames[0] = "Ytex"; + texnames[1] = "Utex"; + texnames[2] = "Vtex"; + break; + case GST_VIDEO_FORMAT_YUY2: + tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'r', 'g', 'a'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 2; + texnames[0] = "Ytex"; + texnames[1] = "UVtex"; + break; + case GST_VIDEO_FORMAT_YVYU: + tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'r', 'a', 'g'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 2; + texnames[0] = "Ytex"; + texnames[1] = "UVtex"; + break; + case GST_VIDEO_FORMAT_UYVY: + tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'a', 'r', 'b'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 2; + texnames[0] = "Ytex"; + texnames[1] = "UVtex"; + break; + case GST_VIDEO_FORMAT_NV12: + tmp_prog = g_strdup_printf (frag_NV12_NV21_prog, 'r', 'a'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 2; + texnames[0] = "Ytex"; + texnames[1] = "UVtex"; + break; + case GST_VIDEO_FORMAT_NV21: + tmp_prog = g_strdup_printf (frag_NV12_NV21_prog, 'a', 'r'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 2; + texnames[0] = "Ytex"; + texnames[1] = "UVtex"; + break; + case GST_VIDEO_FORMAT_BGR: + case GST_VIDEO_FORMAT_BGRx: + case GST_VIDEO_FORMAT_BGRA: + tmp_prog = g_strdup_printf (frag_REORDER_prog, 'b', 'g', 'r'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 1; + texnames[0] = "tex"; + break; + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_ARGB: + tmp_prog = g_strdup_printf (frag_REORDER_prog, 'g', 'b', 'a'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 1; + texnames[0] = "tex"; + break; + case GST_VIDEO_FORMAT_xBGR: + case GST_VIDEO_FORMAT_ABGR: + tmp_prog = g_strdup_printf (frag_REORDER_prog, 'a', 'b', 'g'); + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, + (const GLchar **) &tmp_prog, NULL); + eglglessink->eglglesctx.n_textures = 1; + texnames[0] = "tex"; + break; + case GST_VIDEO_FORMAT_RGB: + case GST_VIDEO_FORMAT_RGBx: + case GST_VIDEO_FORMAT_RGBA: + case GST_VIDEO_FORMAT_RGB16: + glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, &frag_COPY_prog, + NULL); + eglglessink->eglglesctx.n_textures = 1; + texnames[0] = "tex"; + break; + default: + g_assert_not_reached (); + break; + } + + if (got_gl_error ("glShaderSource fragment")) + goto HANDLE_ERROR; + + glCompileShader (eglglessink->eglglesctx.fragshader[0]); + if (got_gl_error ("glCompileShader fragment")) + goto HANDLE_ERROR; + + glGetShaderiv (eglglessink->eglglesctx.fragshader[0], GL_COMPILE_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "Successfully compiled fragment shader"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't compile fragment shader"); + glGetShaderiv (eglglessink->eglglesctx.fragshader[0], GL_INFO_LOG_LENGTH, + &test); + info_log = g_new0 (GLchar, test); + glGetShaderInfoLog (eglglessink->eglglesctx.fragshader[0], test, NULL, + info_log); + GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log); + g_free (info_log); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.glslprogram[0] = glCreateProgram (); + if (got_gl_error ("glCreateProgram")) + goto HANDLE_ERROR; + glAttachShader (eglglessink->eglglesctx.glslprogram[0], + eglglessink->eglglesctx.vertshader[0]); + if (got_gl_error ("glAttachShader vertices")) + goto HANDLE_ERROR; + glAttachShader (eglglessink->eglglesctx.glslprogram[0], + eglglessink->eglglesctx.fragshader[0]); + if (got_gl_error ("glAttachShader fragments")) + goto HANDLE_ERROR; + glLinkProgram (eglglessink->eglglesctx.glslprogram[0]); + glGetProgramiv (eglglessink->eglglesctx.glslprogram[0], GL_LINK_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "GLES: Successfully linked program"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't link program"); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.position_loc[0] = + glGetAttribLocation (eglglessink->eglglesctx.glslprogram[0], "position"); + eglglessink->eglglesctx.texpos_loc = + glGetAttribLocation (eglglessink->eglglesctx.glslprogram[0], "texpos"); + + glEnableVertexAttribArray (eglglessink->eglglesctx.position_loc[0]); + if (got_gl_error ("glEnableVertexAttribArray")) + goto HANDLE_ERROR; + + glEnableVertexAttribArray (eglglessink->eglglesctx.texpos_loc); + if (got_gl_error ("glEnableVertexAttribArray")) + goto HANDLE_ERROR; + + if (!eglglessink->eglglesctx.buffer_preserved) { + /* Build shader program for black borders */ + eglglessink->eglglesctx.vertshader[1] = glCreateShader (GL_VERTEX_SHADER); + GST_DEBUG_OBJECT (eglglessink, "Sending %s to handle %d", + vert_COPY_prog_no_tex, eglglessink->eglglesctx.vertshader[1]); + glShaderSource (eglglessink->eglglesctx.vertshader[1], 1, + &vert_COPY_prog_no_tex, NULL); + if (got_gl_error ("glShaderSource vertex")) + goto HANDLE_ERROR; + + glCompileShader (eglglessink->eglglesctx.vertshader[1]); + if (got_gl_error ("glCompileShader vertex")) + goto HANDLE_ERROR; + + glGetShaderiv (eglglessink->eglglesctx.vertshader[1], GL_COMPILE_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "Successfully compiled vertex shader"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't compile vertex shader"); + glGetShaderiv (eglglessink->eglglesctx.vertshader[1], GL_INFO_LOG_LENGTH, + &test); + info_log = g_new0 (GLchar, test); + glGetShaderInfoLog (eglglessink->eglglesctx.vertshader[1], test, NULL, + info_log); + GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log); + g_free (info_log); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.fragshader[1] = glCreateShader (GL_FRAGMENT_SHADER); + glShaderSource (eglglessink->eglglesctx.fragshader[1], 1, &frag_BLACK_prog, + NULL); + + if (got_gl_error ("glShaderSource fragment")) + goto HANDLE_ERROR; + + glCompileShader (eglglessink->eglglesctx.fragshader[1]); + if (got_gl_error ("glCompileShader fragment")) + goto HANDLE_ERROR; + + glGetShaderiv (eglglessink->eglglesctx.fragshader[1], GL_COMPILE_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "Successfully compiled fragment shader"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't compile fragment shader"); + glGetShaderiv (eglglessink->eglglesctx.fragshader[1], GL_INFO_LOG_LENGTH, + &test); + info_log = g_new0 (GLchar, test); + glGetShaderInfoLog (eglglessink->eglglesctx.fragshader[1], test, NULL, + info_log); + GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log); + g_free (info_log); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.glslprogram[1] = glCreateProgram (); + if (got_gl_error ("glCreateProgram")) + goto HANDLE_ERROR; + glAttachShader (eglglessink->eglglesctx.glslprogram[1], + eglglessink->eglglesctx.vertshader[1]); + if (got_gl_error ("glAttachShader vertices")) + goto HANDLE_ERROR; + glAttachShader (eglglessink->eglglesctx.glslprogram[1], + eglglessink->eglglesctx.fragshader[1]); + if (got_gl_error ("glAttachShader fragments")) + goto HANDLE_ERROR; + glLinkProgram (eglglessink->eglglesctx.glslprogram[1]); + glGetProgramiv (eglglessink->eglglesctx.glslprogram[1], GL_LINK_STATUS, + &test); + if (test != GL_FALSE) + GST_DEBUG_OBJECT (eglglessink, "GLES: Successfully linked program"); + else { + GST_ERROR_OBJECT (eglglessink, "Couldn't link program"); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.position_loc[1] = + glGetAttribLocation (eglglessink->eglglesctx.glslprogram[1], + "position"); + + glEnableVertexAttribArray (eglglessink->eglglesctx.position_loc[1]); + if (got_gl_error ("glEnableVertexAttribArray")) + goto HANDLE_ERROR; + } + + glUseProgram (eglglessink->eglglesctx.glslprogram[0]); + + /* Generate and bind texture */ + if (!eglglessink->have_texture) { + gint i; + + GST_INFO_OBJECT (eglglessink, "Performing initial texture setup"); + + for (i = 0; i < eglglessink->eglglesctx.n_textures; i++) { + if (i == 0) + glActiveTexture (GL_TEXTURE0); + else if (i == 1) + glActiveTexture (GL_TEXTURE1); + else if (i == 2) + glActiveTexture (GL_TEXTURE2); + + glGenTextures (1, &eglglessink->eglglesctx.texture[i]); + if (got_gl_error ("glGenTextures")) + goto HANDLE_ERROR_LOCKED; + + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[i]); + if (got_gl_error ("glBindTexture")) + goto HANDLE_ERROR_LOCKED; + + eglglessink->eglglesctx.tex_loc[i] = + glGetUniformLocation (eglglessink->eglglesctx.glslprogram[0], + texnames[i]); + glUniform1i (eglglessink->eglglesctx.tex_loc[i], i); + + /* Set 2D resizing params */ + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + /* If these are not set the texture image unit will return + * (R, G, B, A) = black on glTexImage2D for non-POT width/height + * frames. For a deeper explanation take a look at the OpenGL ES + * documentation for glTexParameter */ + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + if (got_gl_error ("glTexParameteri")) + goto HANDLE_ERROR_LOCKED; + } + + eglglessink->have_texture = TRUE; + } + glUseProgram (0); + + g_free (tmp_prog); + + return TRUE; + + /* Errors */ +HANDLE_EGL_ERROR_LOCKED: + GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ()); +HANDLE_ERROR_LOCKED: +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Couldn't setup EGL surface"); + g_free (tmp_prog); + return FALSE; +} + +static gboolean +gst_eglglessink_init_egl_display (GstEglGlesSink * eglglessink) +{ + GST_DEBUG_OBJECT (eglglessink, "Enter EGL initial configuration"); + + eglglessink->eglglesctx.display = eglGetDisplay (EGL_DEFAULT_DISPLAY); + if (eglglessink->eglglesctx.display == EGL_NO_DISPLAY) { + GST_ERROR_OBJECT (eglglessink, "Could not get EGL display connection"); + goto HANDLE_ERROR; /* No EGL error is set by eglGetDisplay() */ + } + + if (!eglInitialize (eglglessink->eglglesctx.display, + &eglglessink->eglglesctx.egl_major, + &eglglessink->eglglesctx.egl_minor)) { + show_egl_error ("eglInitialize"); + GST_ERROR_OBJECT (eglglessink, "Could not init EGL display connection"); + goto HANDLE_EGL_ERROR; + } + + /* Check against required EGL version + * XXX: Need to review the version requirement in terms of the needed API + */ + if (eglglessink->eglglesctx.egl_major < GST_EGLGLESSINK_EGL_MIN_VERSION) { + GST_ERROR_OBJECT (eglglessink, "EGL v%d needed, but you only have v%d.%d", + GST_EGLGLESSINK_EGL_MIN_VERSION, eglglessink->eglglesctx.egl_major, + eglglessink->eglglesctx.egl_minor); + goto HANDLE_ERROR; + } + + GST_INFO_OBJECT (eglglessink, "System reports supported EGL version v%d.%d", + eglglessink->eglglesctx.egl_major, eglglessink->eglglesctx.egl_minor); + + eglBindAPI (EGL_OPENGL_ES_API); + + return TRUE; + + /* Errors */ +HANDLE_EGL_ERROR: + GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ()); +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Couldn't setup window/surface from handle"); + return FALSE; +} + +static gboolean +gst_eglglessink_choose_config (GstEglGlesSink * eglglessink) +{ + EGLint con_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; + GLint egl_configs; + + if ((eglChooseConfig (eglglessink->eglglesctx.display, + eglglessink->selected_fmt->attribs, + &eglglessink->eglglesctx.config, 1, &egl_configs)) == EGL_FALSE) { + show_egl_error ("eglChooseConfig"); + GST_ERROR_OBJECT (eglglessink, "eglChooseConfig failed"); + goto HANDLE_EGL_ERROR; + } + + if (egl_configs < 1) { + GST_ERROR_OBJECT (eglglessink, + "Could not find matching framebuffer config"); + goto HANDLE_ERROR; + } + + eglglessink->eglglesctx.eglcontext = + eglCreateContext (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.config, EGL_NO_CONTEXT, con_attribs); + + if (eglglessink->eglglesctx.eglcontext == EGL_NO_CONTEXT) { + GST_ERROR_OBJECT (eglglessink, "Error getting context, eglCreateContext"); + goto HANDLE_EGL_ERROR; + } + + GST_DEBUG_OBJECT (eglglessink, "EGL Context: %p", + eglglessink->eglglesctx.eglcontext); + + return TRUE; + + /* Errors */ +HANDLE_EGL_ERROR: + GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ()); +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Couldn't choose an usable config"); + return FALSE; +} + +static void +gst_eglglessink_set_window_handle (GstXOverlay * overlay, guintptr id) +{ + GstEglGlesSink *eglglessink = GST_EGLGLESSINK (overlay); + + g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink)); + GST_DEBUG_OBJECT (eglglessink, "We got a window handle: %p", (gpointer) id); + + /* OK, we have a new window */ + GST_OBJECT_LOCK (eglglessink); + eglglessink->eglglesctx.window = (EGLNativeWindowType) id; + eglglessink->have_window = ((gpointer) id != NULL); + GST_OBJECT_UNLOCK (eglglessink); + + return; +} + +static void +gst_eglglessink_set_render_rectangle (GstXOverlay * overlay, gint x, gint y, + gint width, gint height) +{ + GstEglGlesSink *eglglessink = GST_EGLGLESSINK (overlay); + + g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink)); + + GST_OBJECT_LOCK (eglglessink); + if (width == -1 && height == -1) { + /* This is the set-defaults condition according to + * the xOverlay interface docs + */ + gst_eglglessink_reset_display_region (eglglessink); + } else { + GST_OBJECT_LOCK (eglglessink); + eglglessink->display_region.x = x; + eglglessink->display_region.y = y; + eglglessink->display_region.w = width; + eglglessink->display_region.h = height; + GST_OBJECT_UNLOCK (eglglessink); + } + + return; +} + +static void +queue_item_destroy (GstDataQueueItem * item) +{ + gst_mini_object_replace (&item->object, NULL); + g_slice_free (GstDataQueueItem, item); +} + +static GstFlowReturn +gst_eglglessink_queue_buffer (GstEglGlesSink * eglglessink, GstBuffer * buf) +{ + GstDataQueueItem *item = g_slice_new0 (GstDataQueueItem); + + item->object = GST_MINI_OBJECT_CAST (buf); + item->size = (buf ? GST_BUFFER_SIZE (buf) : 0); + item->duration = (buf ? GST_BUFFER_DURATION (buf) : GST_CLOCK_TIME_NONE); + item->visible = (buf ? TRUE : FALSE); + item->destroy = (GDestroyNotify) queue_item_destroy; + + GST_DEBUG_OBJECT (eglglessink, "Queueing buffer %" GST_PTR_FORMAT, buf); + + if (buf) + g_mutex_lock (eglglessink->render_lock); + if (!gst_data_queue_push (eglglessink->queue, item)) { + g_mutex_unlock (eglglessink->render_lock); + GST_DEBUG_OBJECT (eglglessink, "Flushing"); + return GST_FLOW_WRONG_STATE; + } + + if (buf) { + GST_DEBUG_OBJECT (eglglessink, "Waiting for buffer to be rendered"); + g_cond_wait (eglglessink->render_cond, eglglessink->render_lock); + GST_DEBUG_OBJECT (eglglessink, "Buffer rendered: %s", + gst_flow_get_name (eglglessink->last_flow)); + g_mutex_unlock (eglglessink->render_lock); + } + + return (buf ? eglglessink->last_flow : GST_FLOW_OK); +} + +/* Rendering and display */ +static GstFlowReturn +gst_eglglessink_render_and_display (GstEglGlesSink * eglglessink, + GstBuffer * buf) +{ + GstVideoRectangle frame, surface; + gint w, h; + guint dar_n, dar_d; + + w = GST_VIDEO_SINK_WIDTH (eglglessink); + h = GST_VIDEO_SINK_HEIGHT (eglglessink); + + GST_DEBUG_OBJECT (eglglessink, + "Got good buffer %p. Sink geometry is %dx%d size %d", buf, w, h, + buf ? GST_BUFFER_SIZE (buf) : -1); + + if (buf) { + switch (eglglessink->selected_fmt->fmt) { + case GST_EGLGLESSINK_IMAGE_RGB888: + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, + GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf)); + break; + case GST_EGLGLESSINK_IMAGE_RGB565: + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, + GL_UNSIGNED_SHORT_5_6_5, GST_BUFFER_DATA (buf)); + break; + case GST_EGLGLESSINK_IMAGE_RGBA8888: + + switch (eglglessink->format) { + case GST_VIDEO_FORMAT_RGBA: + case GST_VIDEO_FORMAT_BGRA: + case GST_VIDEO_FORMAT_ARGB: + case GST_VIDEO_FORMAT_ABGR: + case GST_VIDEO_FORMAT_RGBx: + case GST_VIDEO_FORMAT_BGRx: + case GST_VIDEO_FORMAT_xRGB: + case GST_VIDEO_FORMAT_xBGR: + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, + GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf)); + break; + case GST_VIDEO_FORMAT_AYUV: + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, + GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf)); + break; + case GST_VIDEO_FORMAT_Y444: + case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: + case GST_VIDEO_FORMAT_Y42B: + case GST_VIDEO_FORMAT_Y41B:{ + gint coffset, cw, ch; + + coffset = + gst_video_format_get_component_offset (eglglessink->format, + 0, w, h); + cw = gst_video_format_get_component_width (eglglessink->format, + 0, w); + ch = gst_video_format_get_component_height (eglglessink->format, + 0, h); + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, + GST_BUFFER_DATA (buf) + coffset); + coffset = + gst_video_format_get_component_offset (eglglessink->format, + 1, w, h); + cw = gst_video_format_get_component_width (eglglessink->format, + 1, w); + ch = gst_video_format_get_component_height (eglglessink->format, + 1, h); + glActiveTexture (GL_TEXTURE1); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, + GST_BUFFER_DATA (buf) + coffset); + coffset = + gst_video_format_get_component_offset (eglglessink->format, + 2, w, h); + cw = gst_video_format_get_component_width (eglglessink->format, + 2, w); + ch = gst_video_format_get_component_height (eglglessink->format, + 2, h); + glActiveTexture (GL_TEXTURE2); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[2]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, + GST_BUFFER_DATA (buf) + coffset); + break; + } + case GST_VIDEO_FORMAT_YUY2: + case GST_VIDEO_FORMAT_YVYU: + case GST_VIDEO_FORMAT_UYVY: + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, w, h, 0, + GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf)); + glActiveTexture (GL_TEXTURE1); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, GST_ROUND_UP_2 (w) / 2, + h, 0, GL_RGBA, GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf)); + break; + case GST_VIDEO_FORMAT_NV12: + case GST_VIDEO_FORMAT_NV21:{ + gint coffset, cw, ch; + + coffset = + gst_video_format_get_component_offset (eglglessink->format, + 0, w, h); + cw = gst_video_format_get_component_width (eglglessink->format, + 0, w); + ch = gst_video_format_get_component_height (eglglessink->format, + 0, h); + glActiveTexture (GL_TEXTURE0); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, + GST_BUFFER_DATA (buf) + coffset); + + coffset = + gst_video_format_get_component_offset (eglglessink->format, + (eglglessink->format == GST_VIDEO_FORMAT_NV12 ? 1 : 2), w, h); + cw = gst_video_format_get_component_width (eglglessink->format, 1, + w); + ch = gst_video_format_get_component_height (eglglessink->format, 1, + h); + glActiveTexture (GL_TEXTURE1); + glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]); + glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, cw, ch, 0, + GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, + GST_BUFFER_DATA (buf) + coffset); + break; + } + default: + g_assert_not_reached (); + break; + } + } + + if (got_gl_error ("glTexImage2D")) + goto HANDLE_ERROR; + } + + /* If no one has set a display rectangle on us initialize + * a sane default. According to the docs on the xOverlay + * interface we are supposed to fill the overlay 100%. We + * do this trying to take PAR/DAR into account unless the + * calling party explicitly ask us not to by setting + * force_aspect_ratio to FALSE. + */ + if (gst_eglglessink_update_surface_dimensions (eglglessink) || + !eglglessink->display_region.w || !eglglessink->display_region.h) { + GST_OBJECT_LOCK (eglglessink); + if (!eglglessink->force_aspect_ratio) { + eglglessink->display_region.x = 0; + eglglessink->display_region.y = 0; + eglglessink->display_region.w = eglglessink->eglglesctx.surface_width; + eglglessink->display_region.h = eglglessink->eglglesctx.surface_height; + } else { + if (!gst_video_calculate_display_ratio (&dar_n, &dar_d, w, h, + eglglessink->par_n, eglglessink->par_d, + eglglessink->eglglesctx.pixel_aspect_ratio, + EGL_DISPLAY_SCALING)) { + GST_WARNING_OBJECT (eglglessink, "Could not compute resulting DAR"); + frame.w = w; + frame.h = h; + } else { + /* Find suitable matching new size acording to dar & par + * rationale for prefering leaving the height untouched + * comes from interlacing considerations. + * XXX: Move this to gstutils? + */ + if (h % dar_d == 0) { + frame.w = gst_util_uint64_scale_int (h, dar_n, dar_d); + frame.h = h; + } else if (w % dar_n == 0) { + frame.h = gst_util_uint64_scale_int (w, dar_d, dar_n); + frame.w = w; + } else { + /* Neither width nor height can be precisely scaled. + * Prefer to leave height untouched. See comment above. + */ + frame.w = gst_util_uint64_scale_int (h, dar_n, dar_d); + frame.h = h; + } + } + + surface.w = eglglessink->eglglesctx.surface_width; + surface.h = eglglessink->eglglesctx.surface_height; + gst_video_sink_center_rect (frame, surface, + &eglglessink->display_region, TRUE); + } + GST_OBJECT_UNLOCK (eglglessink); + + glViewport (0, 0, + eglglessink->eglglesctx.surface_width, + eglglessink->eglglesctx.surface_height); + + /* Clear the surface once if its content is preserved */ + if (eglglessink->eglglesctx.buffer_preserved) { + glClearColor (0.0, 0.0, 0.0, 1.0); + glClear (GL_COLOR_BUFFER_BIT); + } + + if (!gst_eglglessink_setup_vbo (eglglessink, FALSE)) { + GST_ERROR_OBJECT (eglglessink, "VBO setup failed"); + goto HANDLE_ERROR; + } + } + + if (!eglglessink->eglglesctx.buffer_preserved) { + /* Draw black borders */ + GST_DEBUG_OBJECT (eglglessink, "Drawing black border 1"); + glUseProgram (eglglessink->eglglesctx.glslprogram[1]); + + glVertexAttribPointer (eglglessink->eglglesctx.position_loc[1], 3, + GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (4 * sizeof (coord5))); + if (got_gl_error ("glVertexAttribPointer")) + goto HANDLE_ERROR; + + glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0); + if (got_gl_error ("glDrawElements")) + goto HANDLE_ERROR; + + GST_DEBUG_OBJECT (eglglessink, "Drawing black border 2"); + + glVertexAttribPointer (eglglessink->eglglesctx.position_loc[1], 3, + GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (8 * sizeof (coord5))); + if (got_gl_error ("glVertexAttribPointer")) + goto HANDLE_ERROR; + + glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0); + if (got_gl_error ("glDrawElements")) + goto HANDLE_ERROR; + } + + /* Draw video frame */ + GST_DEBUG_OBJECT (eglglessink, "Drawing video frame"); + glUseProgram (eglglessink->eglglesctx.glslprogram[0]); + + glVertexAttribPointer (eglglessink->eglglesctx.position_loc[0], 3, + GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (0 * sizeof (coord5))); + if (got_gl_error ("glVertexAttribPointer")) + goto HANDLE_ERROR; + + glVertexAttribPointer (eglglessink->eglglesctx.texpos_loc, 2, GL_FLOAT, + GL_FALSE, sizeof (coord5), (gpointer) (3 * sizeof (gfloat))); + if (got_gl_error ("glVertexAttribPointer")) + goto HANDLE_ERROR; + + glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0); + if (got_gl_error ("glDrawElements")) + goto HANDLE_ERROR; + + if ((eglSwapBuffers (eglglessink->eglglesctx.display, + eglglessink->eglglesctx.surface)) + == EGL_FALSE) { + show_egl_error ("eglSwapBuffers"); + goto HANDLE_ERROR; + } + + GST_DEBUG_OBJECT (eglglessink, "Succesfully rendered 1 frame"); + return GST_FLOW_OK; + +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Rendering disabled for this frame"); + + return GST_FLOW_ERROR; +} + +static GstFlowReturn +gst_eglglessink_show_frame (GstVideoSink * vsink, GstBuffer * buf) +{ + GstEglGlesSink *eglglessink; + + g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR); + + eglglessink = GST_EGLGLESSINK (vsink); + GST_DEBUG_OBJECT (eglglessink, "Got buffer: %p", buf); + + buf = gst_buffer_make_metadata_writable (gst_buffer_ref (buf)); + gst_buffer_set_caps (buf, eglglessink->current_caps); + return gst_eglglessink_queue_buffer (eglglessink, buf); +} + +static GstCaps * +gst_eglglessink_getcaps (GstBaseSink * bsink) +{ + GstEglGlesSink *eglglessink; + GstCaps *ret = NULL; + + eglglessink = GST_EGLGLESSINK (bsink); + + GST_OBJECT_LOCK (eglglessink); + if (eglglessink->sinkcaps) { + ret = gst_caps_ref (eglglessink->sinkcaps); + } else { + ret = + gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD + (bsink))); + } + GST_OBJECT_UNLOCK (eglglessink); + + return ret; +} + +static gboolean +gst_eglglessink_configure_caps (GstEglGlesSink * eglglessink, GstCaps * caps) +{ + gboolean ret = TRUE; + gint width, height; + int par_n, par_d; + GstEglGlesImageFmt *format; + + if (!(ret = gst_video_format_parse_caps (caps, &eglglessink->format, &width, + &height))) { + GST_ERROR_OBJECT (eglglessink, "Got weird and/or incomplete caps"); + goto HANDLE_ERROR; + } + + if (!(ret = gst_video_parse_caps_pixel_aspect_ratio (caps, &par_n, &par_d))) { + par_n = 1; + par_d = 1; + GST_WARNING_OBJECT (eglglessink, + "Can't parse PAR from caps. Using default: 1"); + } + + format = gst_eglglessink_get_compat_format_from_caps (eglglessink, caps); + if (!format) { + GST_ERROR_OBJECT (eglglessink, + "No supported and compatible EGL/GLES format found for given caps"); + goto HANDLE_ERROR; + } else + GST_INFO_OBJECT (eglglessink, "Selected compatible EGL/GLES format %d", + format->fmt); + + eglglessink->selected_fmt = format; + eglglessink->par_n = par_n; + eglglessink->par_d = par_d; + GST_VIDEO_SINK_WIDTH (eglglessink) = width; + GST_VIDEO_SINK_HEIGHT (eglglessink) = height; + + if (eglglessink->configured_caps) { + GST_ERROR_OBJECT (eglglessink, "Caps were already set"); + if (gst_caps_can_intersect (caps, eglglessink->configured_caps)) { + GST_INFO_OBJECT (eglglessink, "Caps are compatible anyway"); + goto SUCCEED; + } + + GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring"); + + /* EGL/GLES cleanup */ + gst_eglglessink_wipe_eglglesctx (eglglessink); + + gst_caps_unref (eglglessink->configured_caps); + eglglessink->configured_caps = NULL; + } + + if (!gst_eglglessink_choose_config (eglglessink)) { + GST_ERROR_OBJECT (eglglessink, "Couldn't choose EGL config"); + goto HANDLE_ERROR; + } + + gst_caps_replace (&eglglessink->configured_caps, caps); + + /* By now the application should have set a window + * if it meant to do so + */ + GST_OBJECT_LOCK (eglglessink); + if (!eglglessink->have_window) { + EGLNativeWindowType window; + + GST_INFO_OBJECT (eglglessink, + "No window. Will attempt internal window creation"); + if (!(window = gst_eglglessink_create_window (eglglessink, width, height))) { + GST_ERROR_OBJECT (eglglessink, "Internal window creation failed!"); + GST_OBJECT_UNLOCK (eglglessink); + goto HANDLE_ERROR; + } + eglglessink->using_own_window = TRUE; + eglglessink->eglglesctx.window = window; + eglglessink->have_window = TRUE; + } + GST_DEBUG_OBJECT (eglglessink, "Using window handle %p", + eglglessink->eglglesctx.window); + eglglessink->eglglesctx.used_window = eglglessink->eglglesctx.window; + GST_OBJECT_UNLOCK (eglglessink); + gst_x_overlay_got_window_handle (GST_X_OVERLAY (eglglessink), + (guintptr) eglglessink->eglglesctx.used_window); + + if (!eglglessink->have_surface) { + if (!gst_eglglessink_init_egl_surface (eglglessink)) { + GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL surface from window"); + goto HANDLE_ERROR; + } + } + +SUCCEED: + GST_INFO_OBJECT (eglglessink, "Configured caps successfully"); + return TRUE; + +HANDLE_ERROR: + GST_ERROR_OBJECT (eglglessink, "Configuring caps failed"); + return FALSE; +} + +static gboolean +gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps) +{ + GstEglGlesSink *eglglessink; + + eglglessink = GST_EGLGLESSINK (bsink); + + GST_DEBUG_OBJECT (eglglessink, + "Current caps %" GST_PTR_FORMAT ", setting caps %" + GST_PTR_FORMAT, eglglessink->current_caps, caps); + + gst_caps_replace (&eglglessink->current_caps, caps); + + return TRUE; +} + +static void +gst_eglglessink_wipe_fmt (gpointer data) +{ + GstEglGlesImageFmt *format = data; + gst_caps_unref (format->caps); + g_free (format); +} + +static gboolean +gst_eglglessink_open (GstEglGlesSink * eglglessink) +{ + if (!egl_init (eglglessink)) { + return FALSE; + } + + return TRUE; +} + +static gboolean +gst_eglglessink_close (GstEglGlesSink * eglglessink) +{ + if (eglglessink->eglglesctx.display) { + eglTerminate (eglglessink->eglglesctx.display); + eglglessink->eglglesctx.display = NULL; + } + + eglglessink->selected_fmt = NULL; + g_list_free_full (eglglessink->supported_fmts, gst_eglglessink_wipe_fmt); + eglglessink->supported_fmts = NULL; + gst_caps_unref (eglglessink->sinkcaps); + eglglessink->sinkcaps = NULL; + eglglessink->egl_started = FALSE; + + return TRUE; +} + +static GstStateChangeReturn +gst_eglglessink_change_state (GstElement * element, GstStateChange transition) +{ + GstEglGlesSink *eglglessink; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; + + eglglessink = GST_EGLGLESSINK (element); + + switch (transition) { + case GST_STATE_CHANGE_NULL_TO_READY: + if (!gst_eglglessink_open (eglglessink)) { + ret = GST_STATE_CHANGE_FAILURE; + goto done; + } + break; + case GST_STATE_CHANGE_READY_TO_PAUSED: + if (!gst_eglglessink_start (eglglessink)) { + ret = GST_STATE_CHANGE_FAILURE; + goto done; + } + break; + default: + break; + } + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + switch (transition) { + case GST_STATE_CHANGE_READY_TO_NULL: + if (!gst_eglglessink_close (eglglessink)) { + ret = GST_STATE_CHANGE_FAILURE; + goto done; + } + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + if (!gst_eglglessink_stop (eglglessink)) { + ret = GST_STATE_CHANGE_FAILURE; + goto done; + } + break; + default: + break; + } + +done: + return ret; +} + +static void +gst_eglglessink_finalize (GObject * object) +{ + GstEglGlesSink *eglglessink; + + g_return_if_fail (GST_IS_EGLGLESSINK (object)); + + eglglessink = GST_EGLGLESSINK (object); + + if (eglglessink->queue) + g_object_unref (eglglessink->queue); + eglglessink->queue = NULL; + + if (eglglessink->render_cond) + g_cond_free (eglglessink->render_cond); + eglglessink->render_cond = NULL; + if (eglglessink->render_lock); + g_mutex_free (eglglessink->render_lock); + eglglessink->render_lock = NULL; + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static void +gst_eglglessink_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstEglGlesSink *eglglessink; + + g_return_if_fail (GST_IS_EGLGLESSINK (object)); + + eglglessink = GST_EGLGLESSINK (object); + + switch (prop_id) { + case PROP_CREATE_WINDOW: + eglglessink->create_window = g_value_get_boolean (value); + break; + case PROP_FORCE_ASPECT_RATIO: + eglglessink->force_aspect_ratio = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_eglglessink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstEglGlesSink *eglglessink; + + g_return_if_fail (GST_IS_EGLGLESSINK (object)); + + eglglessink = GST_EGLGLESSINK (object); + + switch (prop_id) { + case PROP_CREATE_WINDOW: + g_value_set_boolean (value, eglglessink->create_window); + break; + case PROP_FORCE_ASPECT_RATIO: + g_value_set_boolean (value, eglglessink->force_aspect_ratio); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_eglglessink_base_init (gpointer gclass) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); + + gst_element_class_set_details_simple (element_class, + "EGL/GLES vout Sink", + "Sink/Video", + "An EGL/GLES Video Output Sink Implementing the XOverlay interface", + "Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>, " + "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); + + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&gst_eglglessink_sink_template_factory)); +} + +/* initialize the eglglessink's class */ +static void +gst_eglglessink_class_init (GstEglGlesSinkClass * klass) +{ + GObjectClass *gobject_class; + GstElementClass *gstelement_class; + GstBaseSinkClass *gstbasesink_class; + GstVideoSinkClass *gstvideosink_class; + + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + gstbasesink_class = (GstBaseSinkClass *) klass; + gstvideosink_class = (GstVideoSinkClass *) klass; + + gobject_class->set_property = gst_eglglessink_set_property; + gobject_class->get_property = gst_eglglessink_get_property; + gobject_class->finalize = gst_eglglessink_finalize; + + gstelement_class->change_state = gst_eglglessink_change_state; + + gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_setcaps); + gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_getcaps); + + gstvideosink_class->show_frame = + GST_DEBUG_FUNCPTR (gst_eglglessink_show_frame); + + g_object_class_install_property (gobject_class, PROP_CREATE_WINDOW, + g_param_spec_boolean ("create-window", "Create Window", + "If set to true, the sink will attempt to create it's own window to " + "render to if none is provided. This is currently only supported " + "when the sink is used under X11", + TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO, + g_param_spec_boolean ("force-aspect-ratio", + "Respect aspect ratio when scaling", + "If set to true, the sink will attempt to preserve the incoming " + "frame's geometry while scaling, taking both the storage's and " + "display's pixel aspect ratio into account", + TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +} + +static gboolean +queue_check_full_func (GstDataQueue * queue, guint visible, guint bytes, + guint64 time, gpointer checkdata) +{ + return visible != 0; +} + +static void +gst_eglglessink_init (GstEglGlesSink * eglglessink, + GstEglGlesSinkClass * gclass) +{ + /* Init defaults */ + + /** Flags */ + eglglessink->have_window = FALSE; + eglglessink->have_surface = FALSE; + eglglessink->have_vbo = FALSE; + eglglessink->have_texture = FALSE; + eglglessink->egl_started = FALSE; + eglglessink->using_own_window = FALSE; + + /** Props */ + eglglessink->create_window = TRUE; + eglglessink->force_aspect_ratio = TRUE; + + eglglessink->par_n = 1; + eglglessink->par_d = 1; + + eglglessink->render_lock = g_mutex_new (); + eglglessink->render_cond = g_cond_new (); + eglglessink->queue = gst_data_queue_new (queue_check_full_func, NULL); + eglglessink->last_flow = GST_FLOW_WRONG_STATE; +} + +/* Interface initializations. Used here for initializing the XOverlay + * Interface. + */ +static void +gst_eglglessink_init_interfaces (GType type) +{ + static const GInterfaceInfo implements_info = { + (GInterfaceInitFunc) gst_eglglessink_implements_init, NULL, NULL + }; + + static const GInterfaceInfo xoverlay_info = { + (GInterfaceInitFunc) gst_eglglessink_xoverlay_init, NULL, NULL + }; + + g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE, + &implements_info); + g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info); + +} + +/* entry point to initialize the plug-in + * initialize the plug-in itself + * register the element factories and other features + */ +static gboolean +eglglessink_plugin_init (GstPlugin * plugin) +{ + /* debug category for fltering log messages */ + GST_DEBUG_CATEGORY_INIT (gst_eglglessink_debug, "eglglessink", + 0, "Simple EGL/GLES Sink"); + + return gst_element_register (plugin, "eglglessink", GST_RANK_PRIMARY, + GST_TYPE_EGLGLESSINK); +} + +/* gstreamer looks for this structure to register eglglessinks */ +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "eglglessink", + "EGL/GLES sink", + eglglessink_plugin_init, + VERSION, "LGPL", "GStreamer", "http://gstreamer.net/") diff --git a/ext/eglgles/gsteglglessink.h b/ext/eglgles/gsteglglessink.h new file mode 100644 index 00000000..d57a8e11 --- /dev/null +++ b/ext/eglgles/gsteglglessink.h @@ -0,0 +1,226 @@ +/* + * GStreamer EGL/GLES Sink + * Copyright (C) 2012 Collabora Ltd. + * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_EGLGLESSINK_H__ +#define __GST_EGLGLESSINK_H__ + +#include <gst/gst.h> +#include <gst/video/gstvideosink.h> +#include <gst/base/gstdataqueue.h> + +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> + +G_BEGIN_DECLS +#define GST_TYPE_EGLGLESSINK \ + (gst_eglglessink_get_type()) +#define GST_EGLGLESSINK(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_EGLGLESSINK,GstEglGlesSink)) +#define GST_EGLGLESSINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_EGLGLESSINK,GstEglGlesSinkClass)) +#define GST_IS_EGLGLESSINK(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_EGLGLESSINK)) +#define GST_IS_EGLGLESSINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_EGLGLESSINK)) +#define GST_EGLGLESSINK_IMAGE_NOFMT 0 +#define GST_EGLGLESSINK_IMAGE_RGB888 1 +#define GST_EGLGLESSINK_IMAGE_RGB565 2 +#define GST_EGLGLESSINK_IMAGE_RGBA8888 3 +#define GST_EGLGLESSINK_EGL_MIN_VERSION 1 +typedef struct _GstEglGlesSink GstEglGlesSink; +typedef struct _GstEglGlesSinkClass GstEglGlesSinkClass; +typedef struct _GstEglGlesRenderContext GstEglGlesRenderContext; + +typedef struct _GstEglGlesImageFmt GstEglGlesImageFmt; + +typedef struct _coord5 +{ + float x; + float y; + float z; + float a; /* texpos x */ + float b; /* texpos y */ +} coord5; + +/* + * GstEglGlesRenderContext: + * @config: Current EGL config + * @eglcontext: Current EGL context + * @display: Current EGL display connection + * @window: Current EGL window asociated with the display connection + * @used_window: Last seen EGL window asociated with the display connection + * @surface: EGL surface the sink is rendering into + * @fragshader: Fragment shader + * @vertshader: Vertex shader + * @glslprogram: Compiled and linked GLSL program in use for rendering + * @texture Texture units in use + * @surface_width: Pixel width of the surface the sink is rendering into + * @surface_height: Pixel height of the surface the sink is rendering into + * @pixel_aspect_ratio: EGL display aspect ratio + * @egl_minor: EGL version (minor) + * @egl_major: EGL version (major) + * @n_textures: Texture units count + * @position_loc: Index of the position vertex attribute array + * @texpos_loc: Index of the textpos vertex attribute array + * @position_array: VBO position array + * @texpos_array: VBO texpos array + * @index_array: VBO index array + * @position_buffer: Position buffer object name + * @texpos_buffer: Texpos buffer object name + * @index_buffer: Index buffer object name + * + * This struct holds the sink's EGL/GLES rendering context. + */ +struct _GstEglGlesRenderContext +{ + EGLConfig config; + EGLContext eglcontext; + EGLDisplay display; + EGLNativeWindowType window, used_window; + EGLSurface surface; + gboolean buffer_preserved; + GLuint fragshader[2], vertshader[2], glslprogram[2]; + GLuint texture[3]; + EGLint surface_width; + EGLint surface_height; + EGLint pixel_aspect_ratio; + EGLint egl_minor, egl_major; + gint n_textures; + + /* shader vars */ + GLuint position_loc[2], texpos_loc; + GLuint tex_loc[3]; + coord5 position_array[12]; /* 3 x Frame, 3 x Border1, 3 x Border2 */ + unsigned short index_array[4]; + unsigned int position_buffer, index_buffer; +}; + +/* + * GstEglGlesImageFmt: + * @fmt: Internal identifier for the EGL attribs / GST caps pairing + * @attribs: Pointer to the set of EGL attributes asociated with this format + * @caps: Pointer to the GST caps asociated with this format + * + * This struct holds a pairing between GST caps and the matching EGL attributes + * associated with a given pixel format + */ +struct _GstEglGlesImageFmt +{ + gint fmt; /* Private identifier */ + const EGLint *attribs; /* EGL Attributes */ + GstCaps *caps; /* Matching caps for the attribs */ +}; + +/* + * GstEglGlesSink: + * @par_n: Incoming frame's aspect ratio numerator + * @par_d: Incoming frame's aspect ratio denominator + * @format: Caps' video format field + * @display_region: Surface region to use as rendering canvas + * @sinkcaps: Full set of suported caps + * @current_caps: Current caps + * @selected_fmt: Pointer to the GST caps/EGL attribs pairing in use + * @rendering_path: Rendering path (Slow/Fast) + * @eglglesctx: Pointer to the associated EGL/GLESv2 rendering context + * @flow_lock: Simple concurrent access ward to the sink's runtime state + * @supported_fmts: Pointer to the runtime supported format list + * @have_window: Set if the sink has access to a window to hold it's canvas + * @using_own_window: Set if the sink created its own window + * @have_surface: Set if the EGL surface setup has been performed + * @have_vbo: Set if the GLES VBO setup has been performed + * @have_texture: Set if the GLES texture setup has been performed + * @egl_started: Set if the whole EGL setup has been performed + * @create_window: Property value holder to allow/forbid internal window creation + * @force_rendering_slow: Property value holder to force slow rendering path + * @force_aspect_ratio: Property value holder to consider PAR/DAR when scaling + * + * The #GstEglGlesSink data structure. + */ +struct _GstEglGlesSink +{ + GstVideoSink videosink; /* Element hook */ + int par_n, par_d; /* Aspect ratio from caps */ + + GstVideoFormat format; + GstVideoRectangle display_region; + GstCaps *sinkcaps; + GstCaps *current_caps, *configured_caps; + + GstEglGlesImageFmt *selected_fmt; + GstEglGlesRenderContext eglglesctx; + + GList *supported_fmts; + + /* Runtime flags */ + gboolean have_window; + gboolean using_own_window; + gboolean have_surface;; + gboolean have_vbo; + gboolean have_texture; + gboolean egl_started; + + GThread *thread; + gboolean thread_running; + GstDataQueue *queue; + GCond *render_cond; + GMutex *render_lock; + GstFlowReturn last_flow; + + /* Properties */ + gboolean create_window; + gboolean force_aspect_ratio; +}; + +struct _GstEglGlesSinkClass +{ + GstVideoSinkClass parent_class; +}; + +GType gst_eglglessink_get_type (void); + +G_END_DECLS +#endif /* __GST_EGLGLESSINK_H__ */ diff --git a/ext/eglgles/video_platform_wrapper.c b/ext/eglgles/video_platform_wrapper.c new file mode 100644 index 00000000..9ec582c3 --- /dev/null +++ b/ext/eglgles/video_platform_wrapper.c @@ -0,0 +1,142 @@ +/* + * GStreamer Android Video Platform Wrapper + * Copyright (C) 2012 Collabora Ltd. + * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#define EGL_EGLEXT_PROTOTYPES + +#include <EGL/egl.h> +#include <EGL/eglext.h> +#include <GLES2/gl2.h> + +#include <gst/gst.h> +#include "video_platform_wrapper.h" + +#ifndef __BIONIC__ +#include <X11/Xlib.h> +#endif + +GST_DEBUG_CATEGORY_STATIC (eglgles_platform_wrapper); +#define GST_CAT_DEFAULT eglgles_platform_wrapper + +/* XXX: Likely to be removed */ +gboolean +platform_wrapper_init (void) +{ + GST_DEBUG_CATEGORY_INIT (eglgles_platform_wrapper, + "EglGles Platform Wrapper", 0, + "Platform dependent native-window utility routines for EglGles"); + return TRUE; +} + +#ifndef __BIONIC__ +EGLNativeWindowType +platform_create_native_window (gint width, gint height) +{ + Display *d; + Window w; + //XEvent e; + int s; + + d = XOpenDisplay (NULL); + if (d == NULL) { + GST_CAT_ERROR (GST_CAT_DEFAULT, "Can't open X11 display"); + return (EGLNativeWindowType) 0; + } + + s = DefaultScreen (d); + w = XCreateSimpleWindow (d, RootWindow (d, s), 10, 10, width, height, 1, + BlackPixel (d, s), WhitePixel (d, s)); + XStoreName (d, w, "eglglessink"); + XMapWindow (d, w); + XFlush (d); + return (EGLNativeWindowType) w; +} + +gboolean +platform_destroy_native_window (EGLNativeDisplayType display, + EGLNativeWindowType window) +{ + /* XXX: Should proly catch BadWindow */ + XDestroyWindow (display, window); + return TRUE; +} + +/* XXX: Missing implementation */ +EGLint * +platform_crate_native_image_buffer (EGLNativeWindowType win, EGLConfig config, + EGLNativeDisplayType display, const EGLint * egl_attribs) +{ + return NULL; +} + +#else +/* Android does not support the creation of an egl window surface + * from native code. Hence, we just return NULL here for the time + * being. Function is left for reference as implementing it should + * help us suport other EGL platforms. + */ +EGLNativeWindowType +platform_create_native_window (gint width, gint height) +{ + /* XXX: There was one example on AOSP that was using something + * along the lines of window = android_createDisplaySurface(); + * but wasn't working properly. + */ + + GST_CAT_ERROR (GST_CAT_DEFAULT, "Android: Can't create native window"); + return (EGLNativeWindowType) 0; +} + +gboolean +platform_destroy_native_window (EGLNativeDisplayType display, + EGLNativeWindowType window) +{ + GST_CAT_ERROR (GST_CAT_DEFAULT, "Android: Can't destroy native window"); + return TRUE; +} + +#endif diff --git a/ext/eglgles/video_platform_wrapper.h b/ext/eglgles/video_platform_wrapper.h new file mode 100644 index 00000000..db27c572 --- /dev/null +++ b/ext/eglgles/video_platform_wrapper.h @@ -0,0 +1,64 @@ +/* + * GStreamer Android Video Platform Wrapper + * Copyright (C) 2012 Collabora Ltd. + * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com> + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Alternatively, the contents of this file may be used under the + * GNU Lesser General Public License Version 2.1 (the "LGPL"), in + * which case the following provisions apply instead of the ones + * mentioned above: + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * General idea is to have all platform dependent code here for easy + * tweaking and isolation from the main routines + */ + +#ifndef __GST_ANDROID_VIDEO_PLATFORM_WRAPPER__ +#define __GST_ANDROID_VIDEO_PLATFORM_WRAPPER__ + +#include <gst/gst.h> +#include <EGL/egl.h> + +gboolean platform_wrapper_init (void); +EGLNativeWindowType platform_create_native_window (gint width, gint height); +gboolean platform_destroy_native_window (EGLNativeDisplayType display, + EGLNativeWindowType w); +EGLint *platform_crate_native_image_buffer (EGLNativeWindowType win, + EGLConfig config, EGLNativeDisplayType display, const EGLint * egl_attribs); + + +#endif diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in index 9123baf6..5acecfd0 100644 --- a/ext/faac/Makefile.in +++ b/ext/faac/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c index 450567f2..7a813618 100644 --- a/ext/faac/gstfaac.c +++ b/ext/faac/gstfaac.c @@ -202,7 +202,7 @@ gst_faac_class_init (GstFaacClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (gstelement_class, "AAC audio encoder", + gst_element_class_set_static_metadata (gstelement_class, "AAC audio encoder", "Codec/Encoder/Audio", "Free MPEG-2/4 AAC encoder", "Ronald Bultje <rbultje@ronald.bitfreak.net>"); diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in index c85298f7..ff6bcb01 100644 --- a/ext/faad/Makefile.in +++ b/ext/faad/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c index c5da323d..79269e9b 100644 --- a/ext/faad/gstfaad.c +++ b/ext/faad/gstfaad.c @@ -157,7 +157,7 @@ gst_faad_class_init (GstFaadClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "AAC audio decoder", + gst_element_class_set_static_metadata (element_class, "AAC audio decoder", "Codec/Decoder/Audio", "Free MPEG-2/4 AAC decoder", "Ronald Bultje <rbultje@ronald.bitfreak.net>"); diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in index 65de2bca..ba8c743e 100644 --- a/ext/flite/Makefile.in +++ b/ext/flite/Makefile.in @@ -249,6 +249,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/flite/gstflitetestsrc.c b/ext/flite/gstflitetestsrc.c index 1fcf5acb..9ab11dd7 100644 --- a/ext/flite/gstflitetestsrc.c +++ b/ext/flite/gstflitetestsrc.c @@ -129,7 +129,7 @@ gst_flite_test_src_class_init (GstFliteTestSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_flite_test_src_src_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Flite speech test source", "Source/Audio", "Creates audio test signals identifying channels", "David Schleef <ds@schleef.org>"); diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in index 2d59f3cb..e7c1eac1 100644 --- a/ext/gme/Makefile.in +++ b/ext/gme/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/gme/gstgme.c b/ext/gme/gstgme.c index 6e7f15a0..0afe568e 100644 --- a/ext/gme/gstgme.c +++ b/ext/gme/gstgme.c @@ -86,7 +86,7 @@ gst_gme_dec_class_init (GstGmeDecClass * klass) gobject_class->dispose = gst_gme_dec_dispose; - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Gaming console music file decoder", "Codec/Audio/Decoder", "Uses libgme to emulate a gaming console sound processors", "Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>, " diff --git a/ext/gsettings/Makefile.in b/ext/gsettings/Makefile.in index 7a6c7e6b..09ae2869 100644 --- a/ext/gsettings/Makefile.in +++ b/ext/gsettings/Makefile.in @@ -261,6 +261,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/gsettings/gstgsettingsaudiosink.c b/ext/gsettings/gstgsettingsaudiosink.c index d2974f6d..70c3b8f3 100644 --- a/ext/gsettings/gstgsettingsaudiosink.c +++ b/ext/gsettings/gstgsettingsaudiosink.c @@ -329,7 +329,7 @@ gst_gsettings_audio_sink_base_init (gpointer klass) { GstElementClass *eklass = GST_ELEMENT_CLASS (klass); - gst_element_class_set_metadata (eklass, "GSettings audio sink", + gst_element_class_set_static_metadata (eklass, "GSettings audio sink", "Sink/Audio", "Audio sink embedding the GSettings preferences for audio output", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/gsettings/gstgsettingsaudiosrc.c b/ext/gsettings/gstgsettingsaudiosrc.c index 9e500311..75d32c57 100644 --- a/ext/gsettings/gstgsettingsaudiosrc.c +++ b/ext/gsettings/gstgsettingsaudiosrc.c @@ -228,7 +228,7 @@ gst_gsettings_audio_src_base_init (gpointer klass) { GstElementClass *eklass = GST_ELEMENT_CLASS (klass); - gst_element_class_set_metadata (eklass, "GSettings audio src", + gst_element_class_set_static_metadata (eklass, "GSettings audio src", "Src/Audio", "Audio src embedding the GSettings preferences for audio input", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/gsettings/gstgsettingsvideosink.c b/ext/gsettings/gstgsettingsvideosink.c index 6c9c7fbd..51deb895 100644 --- a/ext/gsettings/gstgsettingsvideosink.c +++ b/ext/gsettings/gstgsettingsvideosink.c @@ -228,7 +228,7 @@ gst_gsettings_video_sink_base_init (gpointer klass) { GstElementClass *eklass = GST_ELEMENT_CLASS (klass); - gst_element_class_set_metadata (eklass, "GSettings video sink", + gst_element_class_set_static_metadata (eklass, "GSettings video sink", "Sink/Video", "Video sink embedding the GSettings preferences for video input", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/gsettings/gstgsettingsvideosrc.c b/ext/gsettings/gstgsettingsvideosrc.c index 54aafe53..4913126b 100644 --- a/ext/gsettings/gstgsettingsvideosrc.c +++ b/ext/gsettings/gstgsettingsvideosrc.c @@ -228,7 +228,7 @@ gst_gsettings_video_src_base_init (gpointer klass) { GstElementClass *eklass = GST_ELEMENT_CLASS (klass); - gst_element_class_set_metadata (eklass, "GSettings video src", + gst_element_class_set_static_metadata (eklass, "GSettings video src", "Src/Video", "Video src embedding the GSettings preferences for video input", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in index c2e7ba81..656703f9 100644 --- a/ext/gsm/Makefile.in +++ b/ext/gsm/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/gsm/gstgsmdec.c b/ext/gsm/gstgsmdec.c index d6d91664..4f9682f2 100644 --- a/ext/gsm/gstgsmdec.c +++ b/ext/gsm/gstgsmdec.c @@ -88,7 +88,7 @@ gst_gsmdec_class_init (GstGSMDecClass * klass) gst_static_pad_template_get (&gsmdec_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gsmdec_src_template)); - gst_element_class_set_metadata (element_class, "GSM audio decoder", + gst_element_class_set_static_metadata (element_class, "GSM audio decoder", "Codec/Decoder/Audio", "Decodes GSM encoded audio", "Philippe Khalaf <burger@speedy.org>"); diff --git a/ext/gsm/gstgsmenc.c b/ext/gsm/gstgsmenc.c index 539d076c..addec53a 100644 --- a/ext/gsm/gstgsmenc.c +++ b/ext/gsm/gstgsmenc.c @@ -82,7 +82,7 @@ gst_gsmenc_class_init (GstGSMEncClass * klass) gst_static_pad_template_get (&gsmenc_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gsmenc_src_template)); - gst_element_class_set_metadata (element_class, "GSM audio encoder", + gst_element_class_set_static_metadata (element_class, "GSM audio encoder", "Codec/Encoder/Audio", "Encodes GSM audio", "Philippe Khalaf <burger@speedy.org>"); diff --git a/ext/jasper/Makefile.in b/ext/jasper/Makefile.in index 05cfdfba..b5f5f141 100644 --- a/ext/jasper/Makefile.in +++ b/ext/jasper/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/jasper/gstjasperdec.c b/ext/jasper/gstjasperdec.c index 2052cc50..cb81f502 100644 --- a/ext/jasper/gstjasperdec.c +++ b/ext/jasper/gstjasperdec.c @@ -96,7 +96,7 @@ gst_jasper_dec_base_init (gpointer g_class) gst_static_pad_template_get (&gst_jasper_dec_src_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_jasper_dec_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Jasper JPEG2000 image decoder", "Codec/Decoder/Image", "Decodes JPEG2000 encoded images using jasper", "Mark Nauwelaerts <mnauw@users.sf.net>"); diff --git a/ext/jasper/gstjasperenc.c b/ext/jasper/gstjasperenc.c index 3da86d6b..c812ddb6 100644 --- a/ext/jasper/gstjasperenc.c +++ b/ext/jasper/gstjasperenc.c @@ -100,7 +100,7 @@ gst_jasper_enc_base_init (gpointer g_class) gst_static_pad_template_get (&gst_jasper_enc_src_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_jasper_enc_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Jasper JPEG2000 image encoder", "Codec/Encoder/Image", "Encodes video to JPEG2000 using jasper", "Mark Nauwelaerts <mnauw@users.sf.net>"); diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in index a90b7a22..712eb02f 100644 --- a/ext/kate/Makefile.in +++ b/ext/kate/Makefile.in @@ -262,6 +262,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/kate/gstkatedec.c b/ext/kate/gstkatedec.c index b45103fb..c94166c7 100644 --- a/ext/kate/gstkatedec.c +++ b/ext/kate/gstkatedec.c @@ -161,7 +161,7 @@ gst_kate_dec_class_init (GstKateDecClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Kate stream text decoder", "Codec/Decoder/Subtitle", "Decodes Kate text streams", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>"); diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c index 7dbd0303..806325ed 100644 --- a/ext/kate/gstkateenc.c +++ b/ext/kate/gstkateenc.c @@ -216,8 +216,8 @@ gst_kate_enc_class_init (GstKateEncClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Kate stream encoder", - "Codec/Encoder/Subtitle", + gst_element_class_set_static_metadata (gstelement_class, + "Kate stream encoder", "Codec/Encoder/Subtitle", "Encodes Kate streams from text or subpictures", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>"); } diff --git a/ext/kate/gstkateparse.c b/ext/kate/gstkateparse.c index e7eab4fd..80cfc560 100644 --- a/ext/kate/gstkateparse.c +++ b/ext/kate/gstkateparse.c @@ -111,7 +111,7 @@ gst_kate_parse_class_init (GstKateParseClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_kate_parse_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Kate stream parser", + gst_element_class_set_static_metadata (gstelement_class, "Kate stream parser", "Codec/Parser/Subtitle", "parse raw kate streams", "Vincent Penquerc'h <ogg.k.ogg.k at googlemail dot com>"); diff --git a/ext/kate/gstkatetag.c b/ext/kate/gstkatetag.c index 00aafa0a..b2303d83 100644 --- a/ext/kate/gstkatetag.c +++ b/ext/kate/gstkatetag.c @@ -136,7 +136,7 @@ gst_kate_tag_class_init (GstKateTagClass * klass) "Set the height of the canvas this stream was authored for (0 is unspecified)", 0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, "Kate stream tagger", + gst_element_class_set_static_metadata (gstelement_class, "Kate stream tagger", "Formatter/Metadata", "Retags kate streams", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>"); diff --git a/ext/kate/gstkatetiger.c b/ext/kate/gstkatetiger.c index d6859509..1333b753 100644 --- a/ext/kate/gstkatetiger.c +++ b/ext/kate/gstkatetiger.c @@ -225,7 +225,7 @@ gst_kate_tiger_base_init (gpointer gclass) gst_static_pad_template_get (&kate_sink_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&video_sink_factory)); - gst_element_class_set_metadata (element_class, "Kate stream renderer", + gst_element_class_set_static_metadata (element_class, "Kate stream renderer", "Mixer/Video/Overlay/Subtitle", "Decodes and renders Kate streams on top of a video", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>"); diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in index 351240a1..1e687adc 100644 --- a/ext/ladspa/Makefile.in +++ b/ext/ladspa/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in index 6e7ce817..558ea4b5 100644 --- a/ext/libmms/Makefile.in +++ b/ext/libmms/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/libmms/gstmms.c b/ext/libmms/gstmms.c index c59a17f5..093b0eda 100644 --- a/ext/libmms/gstmms.c +++ b/ext/libmms/gstmms.c @@ -103,7 +103,7 @@ gst_mms_class_init (GstMMSClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "MMS streaming source", "Source/Network", "Receive data streamed via MSFT Multi Media Server protocol", "Maciej Katafiasz <mathrick@users.sourceforge.net>"); diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in index d6f4f4a7..2e3f9a0d 100644 --- a/ext/lv2/Makefile.in +++ b/ext/lv2/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in index 8873940c..6a152359 100644 --- a/ext/mimic/Makefile.in +++ b/ext/mimic/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mimic/gstmimdec.c b/ext/mimic/gstmimdec.c index 0640b686..dc536b00 100644 --- a/ext/mimic/gstmimdec.c +++ b/ext/mimic/gstmimdec.c @@ -85,7 +85,7 @@ gst_mim_dec_class_init (GstMimDecClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Mimic Decoder", "Codec/Decoder/Video", "MSN Messenger compatible Mimic video decoder element", diff --git a/ext/mimic/gstmimenc.c b/ext/mimic/gstmimenc.c index f1b26c8f..61c329aa 100644 --- a/ext/mimic/gstmimenc.c +++ b/ext/mimic/gstmimenc.c @@ -126,7 +126,7 @@ gst_mim_enc_class_init (GstMimEncClass * klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Mimic Encoder", "Codec/Encoder/Video", "MSN Messenger compatible Mimic video encoder element", diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in index c682ce81..3ef1fe32 100644 --- a/ext/modplug/Makefile.in +++ b/ext/modplug/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc index 46f12515..c7b2bd1e 100644 --- a/ext/modplug/gstmodplug.cc +++ b/ext/modplug/gstmodplug.cc @@ -214,7 +214,7 @@ gst_modplug_class_init (GstModPlugClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&modplug_src_template_factory)); - gst_element_class_set_metadata (gstelement_class, "ModPlug", + gst_element_class_set_static_metadata (gstelement_class, "ModPlug", "Codec/Decoder/Audio", "Module decoder based on modplug engine", "Jeremy SIMON <jsimon13@yahoo.fr>"); diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in index e0652756..9e5f265c 100644 --- a/ext/mpeg2enc/Makefile.in +++ b/ext/mpeg2enc/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc index 72adbdcf..68fcab63 100644 --- a/ext/mpeg2enc/gstmpeg2enc.cc +++ b/ext/mpeg2enc/gstmpeg2enc.cc @@ -132,7 +132,7 @@ gst_mpeg2enc_class_init (GstMpeg2encClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "mpeg2enc video encoder", "Codec/Encoder/Video", "High-quality MPEG-1/2 video encoder", "Andrew Stevens <andrew.stevens@nexgo.de>\n" diff --git a/ext/mpg123/Makefile.in b/ext/mpg123/Makefile.in index c3f11ee2..eb8bec00 100644 --- a/ext/mpg123/Makefile.in +++ b/ext/mpg123/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mpg123/gstmpg123audiodec.c b/ext/mpg123/gstmpg123audiodec.c index adaa54f0..16bcfce0 100644 --- a/ext/mpg123/gstmpg123audiodec.c +++ b/ext/mpg123/gstmpg123audiodec.c @@ -16,6 +16,20 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +/** + * SECTION: element-mpg123audiodec + * @see_also: lamemp3enc, mad + * + * Audio decoder for MPEG-1 layer 1/2/3 audio data. + * + * <refsect2> + * <title>Example pipelines</title> + * |[ + * gst-launch filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! autoaudiosink + * ]| Decode and play the mp3 file + * </refsect2> + */ + #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -28,8 +42,7 @@ GST_DEBUG_CATEGORY_STATIC (mpg123_debug); #define GST_CAT_DEFAULT mpg123_debug -/* - * Omitted sample formats that mpg123 supports (or at least can support): +/* Omitted sample formats that mpg123 supports (or at least can support): * - 8bit integer signed * - 8bit integer unsigned * - a-law @@ -46,10 +59,10 @@ GST_DEBUG_CATEGORY_STATIC (mpg123_debug); * no way how to find out which one of them is actually used. * * However, in all known installations, "real" equals 32bit float, so that's - * what is used. - */ + * what is used. */ -static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", +static GstStaticPadTemplate static_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/mpeg, " @@ -66,9 +79,9 @@ static GstFlowReturn gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder, unsigned char const *decoded_bytes, size_t const num_decoded_bytes); static GstFlowReturn gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, - GstBuffer * buffer); + GstBuffer * input_buffer); static gboolean gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, - GstCaps * incoming_caps); + GstCaps * input_caps); static void gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard); G_DEFINE_TYPE (GstMpg123AudioDec, gst_mpg123_audio_dec, GST_TYPE_AUDIO_DECODER); @@ -79,7 +92,7 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass) GObjectClass *object_class; GstAudioDecoderClass *base_class; GstElementClass *element_class; - GstPadTemplate *src_template; + GstPadTemplate *src_template, *sink_template; int error; GST_DEBUG_CATEGORY_INIT (mpg123_debug, "mpg123", 0, "mpg123 mp3 decoder"); @@ -96,15 +109,14 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass) "Decodes mp3 streams using the mpg123 library", "Carlos Rafael Giani <dv@pseudoterminal.org>"); - /* - Not using static pad template for srccaps, since the comma-separated list of formats needs to be - created depending on whatever mpg123 supports - */ + /* Not using static pad template for srccaps, since the comma-separated list + * of formats needs to be created depending on whatever mpg123 supports */ { const int *format_list; const long *rates_list; size_t num, i; GString *s; + GstCaps *src_template_caps; s = g_string_new ("audio/x-raw, "); @@ -157,14 +169,16 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass) g_string_append (s, "channels = (int) [ 1, 2 ], "); g_string_append (s, "layout = (string) interleaved"); + src_template_caps = gst_caps_from_string (s->str); src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - gst_caps_from_string (s->str)); + src_template_caps); g_string_free (s, TRUE); } - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&sink_template)); + sink_template = gst_static_pad_template_get (&static_sink_template); + + gst_element_class_add_pad_template (element_class, sink_template); gst_element_class_add_pad_template (element_class, src_template); base_class->start = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_start); @@ -179,7 +193,7 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass) GST_ERROR ("Could not initialize mpg123 library: %s", mpg123_plain_strerror (error)); else - GST_TRACE ("mpg123 library initialized"); + GST_INFO ("mpg123 library initialized"); } @@ -214,30 +228,39 @@ gst_mpg123_audio_dec_start (GstAudioDecoder * dec) mpg123_decoder->has_next_audioinfo = FALSE; mpg123_decoder->frame_offset = 0; - /* - Initially, the mpg123 handle comes with a set of default formats supported. This clears this set. - This is necessary, since only one format shall be supported (see set_format for more). - */ + /* Initially, the mpg123 handle comes with a set of default formats + * supported. This clears this set. This is necessary, since only one + * format shall be supported (see set_format for more). */ mpg123_format_none (mpg123_decoder->handle); - mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, MPG123_GAPLESS, 0); /* Built-in mpg123 support for gapless decoding is disabled for now, since it does not work well with seeking */ - mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0); /* Tells mpg123 to use a small read-ahead buffer for better MPEG sync; essential for MP3 radio streams */ - mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0); /* Sets the resync limit to the end of the stream (e.g. don't give up prematurely) */ + /* Built-in mpg123 support for gapless decoding is disabled for now, + * since it does not work well with seeking */ + mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, MPG123_GAPLESS, 0); + /* Tells mpg123 to use a small read-ahead buffer for better MPEG sync; + * essential for MP3 radio streams */ + mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0); + /* Sets the resync limit to the end of the stream (otherwise mpg123 may give + * up on decoding prematurely, especially with mp3 web radios) */ + mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0); + /* Don't let mpg123 resample output */ + mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, + MPG123_AUTO_RESAMPLE, 0); + /* Don't let mpg123 print messages to stdout/stderr */ + mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_QUIET, 0); /* Open in feed mode (= encoded data is fed manually into the handle). */ error = mpg123_open_feed (mpg123_decoder->handle); if (G_UNLIKELY (error != MPG123_OK)) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("Error opening mpg123 feed: %s", mpg123_plain_strerror (error))); + GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL), + ("%s", mpg123_strerror (mpg123_decoder->handle))); mpg123_close (mpg123_decoder->handle); mpg123_delete (mpg123_decoder->handle); mpg123_decoder->handle = NULL; return FALSE; } - GST_DEBUG_OBJECT (dec, "mpg123 decoder started"); + GST_INFO_OBJECT (dec, "mpg123 decoder started"); return TRUE; } @@ -254,7 +277,7 @@ gst_mpg123_audio_dec_stop (GstAudioDecoder * dec) mpg123_decoder->handle = NULL; } - GST_DEBUG_OBJECT (dec, "mpg123 decoder stopped"); + GST_INFO_OBJECT (dec, "mpg123 decoder stopped"); return TRUE; } @@ -265,39 +288,36 @@ gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder, unsigned char const *decoded_bytes, size_t const num_decoded_bytes) { GstBuffer *output_buffer; - GstFlowReturn alloc_error; GstAudioDecoder *dec; output_buffer = NULL; dec = GST_AUDIO_DECODER (mpg123_decoder); if ((num_decoded_bytes == 0) || (decoded_bytes == NULL)) { - /* This occurs in the first few frames, which do not carry data; once MPG123_AUDIO_DEC_NEW_FORMAT is received, the empty frames stop occurring */ - GST_TRACE_OBJECT (mpg123_decoder, - "Nothing was decoded -> no output buffer to push"); + /* This occurs in the first few frames, which do not carry data; once + * MPG123_AUDIO_DEC_NEW_FORMAT is received, the empty frames stop occurring */ + GST_DEBUG_OBJECT (mpg123_decoder, + "cannot decode yet, need more data -> no output buffer to push"); return GST_FLOW_OK; } output_buffer = gst_buffer_new_allocate (NULL, num_decoded_bytes, NULL); - alloc_error = (output_buffer == NULL) ? GST_FLOW_ERROR : GST_FLOW_OK; - if (alloc_error != GST_FLOW_OK) { - /* This is necessary to advance playback in time, even when nothing was decoded. */ + if (output_buffer == NULL) { + /* This is necessary to advance playback in time, + * even when nothing was decoded. */ return gst_audio_decoder_finish_frame (dec, NULL, 1); } else { GstMapInfo info; if (gst_buffer_map (output_buffer, &info, GST_MAP_WRITE)) { - if (info.size != num_decoded_bytes) - GST_ERROR_OBJECT (mpg123_decoder, - "Mapped memory region has size %u instead of expected size %u", - info.size, num_decoded_bytes); - else - memcpy (info.data, decoded_bytes, num_decoded_bytes); - + memcpy (info.data, decoded_bytes, num_decoded_bytes); gst_buffer_unmap (output_buffer, &info); - } else - GST_ERROR_OBJECT (mpg123_decoder, "Could not map buffer"); + } else { + GST_ERROR_OBJECT (mpg123_decoder, "gst_buffer_map() returned NULL"); + gst_buffer_unref (output_buffer); + output_buffer = NULL; + } return gst_audio_decoder_finish_frame (dec, output_buffer, 1); } @@ -305,78 +325,65 @@ gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder, static GstFlowReturn -gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer) +gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, + GstBuffer * input_buffer) { GstMpg123AudioDec *mpg123_decoder; int decode_error; unsigned char *decoded_bytes; size_t num_decoded_bytes; - - if (G_UNLIKELY (!buffer)) - return GST_FLOW_OK; + GstFlowReturn retval; mpg123_decoder = GST_MPG123_AUDIO_DEC (dec); - if (G_UNLIKELY (mpg123_decoder->handle == NULL)) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("mpg123 handle is NULL")); - return GST_FLOW_ERROR; - } + g_assert (mpg123_decoder->handle != NULL); /* The actual decoding */ { - unsigned char const *inmemory; - size_t inmemsize; - GstMemory *memory; - GstMapInfo info; - - memory = gst_buffer_get_all_memory (buffer); - if (memory == NULL) - return GST_FLOW_ERROR; - - if (!gst_memory_map (memory, &info, GST_MAP_READ)) { - gst_memory_unref (memory); - return GST_FLOW_ERROR; + /* feed input data (if there is any) */ + if (G_LIKELY (input_buffer != NULL)) { + GstMapInfo info; + + if (gst_buffer_map (input_buffer, &info, GST_MAP_READ)) { + mpg123_feed (mpg123_decoder->handle, info.data, info.size); + gst_buffer_unmap (input_buffer, &info); + } else { + GST_ERROR_OBJECT (mpg123_decoder, "gst_memory_map() failed"); + return GST_FLOW_ERROR; + } } - inmemory = info.data; - inmemsize = info.size; - - mpg123_feed (mpg123_decoder->handle, inmemory, inmemsize); + /* Try to decode a frame */ decoded_bytes = NULL; num_decoded_bytes = 0; decode_error = mpg123_decode_frame (mpg123_decoder->handle, &mpg123_decoder->frame_offset, &decoded_bytes, &num_decoded_bytes); - - gst_memory_unmap (memory, &info); - gst_memory_unref (memory); } + retval = GST_FLOW_OK; + switch (decode_error) { case MPG123_NEW_FORMAT: - /* - As mentioned in gst_mpg123_audio_dec_set_format(), the next audioinfo is not set immediately; - instead, the code waits for mpg123 to take note of the new format, and then sets the audioinfo - This fixes glitches with mp3s containing several format headers (for example, first half using 44.1kHz, second half 32 kHz) - */ + /* As mentioned in gst_mpg123_audio_dec_set_format(), the next audioinfo + * is not set immediately; instead, the code waits for mpg123 to take + * note of the new format, and then sets the audioinfo. This fixes glitches + * with mp3s containing several format headers (for example, first half + * using 44.1kHz, second half 32 kHz) */ - GST_DEBUG_OBJECT (dec, + GST_LOG_OBJECT (dec, "mpg123 reported a new format -> setting next srccaps"); gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes, num_decoded_bytes); - /* - If there is a next audioinfo, use it, then set has_next_audioinfo to FALSE, to make sure - gst_audio_decoder_set_output_format() isn't called again until set_format is called by the base class - */ + /* If there is a next audioinfo, use it, then set has_next_audioinfo to + * FALSE, to make sure gst_audio_decoder_set_output_format() isn't called + * again until set_format is called by the base class */ if (mpg123_decoder->has_next_audioinfo) { if (!gst_audio_decoder_set_output_format (dec, &(mpg123_decoder->next_audioinfo))) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("Unable to set output format")); + GST_WARNING_OBJECT (dec, "Unable to set output format"); + retval = GST_FLOW_NOT_NEGOTIATED; } mpg123_decoder->has_next_audioinfo = FALSE; } @@ -385,61 +392,91 @@ gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer) case MPG123_NEED_MORE: case MPG123_OK: - return gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, + retval = gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes, num_decoded_bytes); + break; - /* If this happens, then the upstream parser somehow missed the ending of the bitstream */ case MPG123_DONE: - GST_DEBUG_OBJECT (dec, "mpg123 is done decoding"); + /* If this happens, then the upstream parser somehow missed the ending + * of the bitstream */ + GST_LOG_OBJECT (dec, "mpg123 is done decoding"); gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes, num_decoded_bytes); - return GST_FLOW_EOS; + retval = GST_FLOW_EOS; + break; - /* Anything else is considered an error */ default: { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), ("Decoding error: %s", - mpg123_plain_strerror (decode_error))); + /* Anything else is considered an error */ + int errcode; + switch (decode_error) { + case MPG123_ERR: + errcode = mpg123_errcode (mpg123_decoder->handle); + break; + default: + errcode = decode_error; + } + switch (errcode) { + case MPG123_BAD_OUTFORMAT:{ + GstCaps *input_caps = + gst_pad_get_current_caps (GST_AUDIO_DECODER_SINK_PAD (dec)); + GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL), + ("Output sample format could not be used when trying to decode frame. " + "This is typically caused when the input caps (often the sample " + "rate) do not match the actual format of the audio data. " + "Input caps: %" GST_PTR_FORMAT, input_caps) + ); + gst_caps_unref (input_caps); + break; + } + default:{ + char const *errmsg = mpg123_plain_strerror (errcode); + GST_ERROR_OBJECT (dec, "Reported error: %s", errmsg); + } + } - return GST_FLOW_ERROR; + retval = GST_FLOW_ERROR; } } - return GST_FLOW_OK; + return retval; } static gboolean -gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps) +gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * input_caps) { -/* - Using the parsed information upstream, and the list of allowed caps downstream, this code - tries to find a suitable audio info. It is important to keep in mind that the rate and number of channels - should never deviate from the one the bitstream has, otherwise mpg123 has to mix channels and/or - resample (and as its docs say, its internal resampler is very crude). The sample format, however, - can be chosen freely, because the MPEG specs do not mandate any special format. - Therefore, rate and number of channels are taken from upstream (which parsed the MPEG frames, so - the incoming_caps contain exactly the rate and number of channels the bitstream actually has), while - the sample format is chosen by trying out all caps that are allowed by downstream. This way, the output - is adjusted to what the downstream prefers. - - Also, the new output audio info is not set immediately. Instead, it is considered the "next audioinfo". - The code waits for mpg123 to notice the new format (= when mpg123_decode_frame() returns MPG123_AUDIO_DEC_NEW_FORMAT), - and then sets the next audioinfo. Otherwise, the next audioinfo is set too soon, which may cause problems with - mp3s containing several format headers. One example would be an mp3 with the first 30 seconds using 44.1 kHz, - then the next 30 seconds using 32 kHz. Rare, but possible. - - STEPS: - - 1. get rate and channels from incoming_caps - 2. get allowed caps from src pad - 3. for each structure in allowed caps: - 3.1. take format - 3.2. if the combination of format with rate and channels is unsupported by mpg123, go to (3), - or exit with error if there are no more structures to try - 3.3. create next audioinfo out of rate,channels,format, and exit -*/ +/* Using the parsed information upstream, and the list of allowed caps + * downstream, this code tries to find a suitable audio info. It is important + * to keep in mind that the rate and number of channels should never deviate + * from the one the bitstream has, otherwise mpg123 has to mix channels and/or + * resample (and as its docs say, its internal resampler is very crude). The + * sample format, however, can be chosen freely, because the MPEG specs do not + * mandate any special format. Therefore, rate and number of channels are taken + * from upstream (which parsed the MPEG frames, so the input_caps contain + * exactly the rate and number of channels the bitstream actually has), while + * the sample format is chosen by trying out all caps that are allowed by + * downstream. This way, the output is adjusted to what the downstream prefers. + * + * Also, the new output audio info is not set immediately. Instead, it is + * considered the "next audioinfo". The code waits for mpg123 to notice the new + * format (= when mpg123_decode_frame() returns MPG123_AUDIO_DEC_NEW_FORMAT), + * and then sets the next audioinfo. Otherwise, the next audioinfo is set too + * soon, which may cause problems with mp3s containing several format headers. + * One example would be an mp3 with the first 30 seconds using 44.1 kHz, then + * the next 30 seconds using 32 kHz. Rare, but possible. + * + * STEPS: + * + * 1. get rate and channels from input_caps + * 2. get allowed caps from src pad + * 3. for each structure in allowed caps: + * 3.1. take format + * 3.2. if the combination of format with rate and channels is unsupported by + * mpg123, go to (3), or exit with error if there are no more structures + * to try + * 3.3. create next audioinfo out of rate,channels,format, and exit + */ int rate, channels; @@ -450,30 +487,26 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps) mpg123_decoder = GST_MPG123_AUDIO_DEC (dec); - if (G_UNLIKELY (mpg123_decoder->handle == NULL)) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("mpg123 handle is NULL")); - return FALSE; - } + g_assert (mpg123_decoder->handle != NULL); mpg123_decoder->has_next_audioinfo = FALSE; - /* Get rate and channels from incoming_caps */ + /* Get rate and channels from input_caps */ { GstStructure *structure; gboolean err = FALSE; - /* Only the first structure is used (multiple incoming structures don't make sense */ - structure = gst_caps_get_structure (incoming_caps, 0); + /* Only the first structure is used (multiple + * input caps structures don't make sense */ + structure = gst_caps_get_structure (input_caps, 0); if (!gst_structure_get_int (structure, "rate", &rate)) { err = TRUE; - GST_ERROR_OBJECT (dec, "Incoming caps do not have a rate value"); + GST_ERROR_OBJECT (dec, "Input caps do not have a rate value"); } if (!gst_structure_get_int (structure, "channels", &channels)) { err = TRUE; - GST_ERROR_OBJECT (dec, "Incoming caps do not have a channel value"); + GST_ERROR_OBJECT (dec, "Input caps do not have a channel value"); } if (err) @@ -485,8 +518,6 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps) GstCaps *allowed_srccaps_unnorm = gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (dec)); allowed_srccaps = gst_caps_normalize (allowed_srccaps_unnorm); - /* TODO: this causes errors with 1.0 - perhaps a bug? */ - /*gst_caps_unref(allowed_srccaps_unnorm); */ } /* Go through all allowed caps, pick the first one that matches */ @@ -549,7 +580,7 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps) GST_DEBUG_OBJECT (dec, "mpg123 cannot use caps %" GST_PTR_FORMAT " because mpg123_format() failed: %s", structure, - mpg123_plain_strerror (err)); + mpg123_strerror (mpg123_decoder->handle)); continue; } } @@ -557,7 +588,7 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps) gst_audio_info_init (&(mpg123_decoder->next_audioinfo)); gst_audio_info_set_format (&(mpg123_decoder->next_audioinfo), format, rate, channels, NULL); - GST_DEBUG_OBJECT (dec, "The next audio format is: %s, %u Hz, %u channels", + GST_LOG_OBJECT (dec, "The next audio format is: %s, %u Hz, %u channels", format_str, rate, channels); mpg123_decoder->has_next_audioinfo = TRUE; @@ -580,25 +611,20 @@ gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard) hard = hard; - GST_DEBUG_OBJECT (dec, "Flushing decoder"); + GST_LOG_OBJECT (dec, "Flushing decoder"); mpg123_decoder = GST_MPG123_AUDIO_DEC (dec); - if (G_UNLIKELY (mpg123_decoder->handle == NULL)) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("mpg123 handle is NULL")); - return; - } + g_assert (mpg123_decoder->handle != NULL); /* Flush by reopening the feed */ mpg123_close (mpg123_decoder->handle); error = mpg123_open_feed (mpg123_decoder->handle); if (G_UNLIKELY (error != MPG123_OK)) { - GstElement *element = GST_ELEMENT (dec); - GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), - ("Error reopening mpg123 feed: %s", mpg123_plain_strerror (error))); + GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL), + ("Error while reopening mpg123 feed: %s", + mpg123_plain_strerror (error))); mpg123_close (mpg123_decoder->handle); mpg123_delete (mpg123_decoder->handle); mpg123_decoder->handle = NULL; @@ -606,10 +632,10 @@ gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard) mpg123_decoder->has_next_audioinfo = FALSE; - /* - opening/closing feeds do not affect the format defined by the mpg123_format() call that was made in gst_mpg123_audio_dec_set_format(), - and since the up/downstream caps are not expected to change here, no mpg123_format() calls are done - */ + /* opening/closing feeds do not affect the format defined by the + * mpg123_format() call that was made in gst_mpg123_audio_dec_set_format(), + * and since the up/downstream caps are not expected to change here, no + * mpg123_format() calls are done */ } static gboolean diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in index b10205a4..183baad2 100644 --- a/ext/mplex/Makefile.in +++ b/ext/mplex/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mplex/gstmplex.cc b/ext/mplex/gstmplex.cc index 9d0bbebd..58c05be7 100644 --- a/ext/mplex/gstmplex.cc +++ b/ext/mplex/gstmplex.cc @@ -142,7 +142,7 @@ gst_mplex_class_init (GstMplexClass * klass) GST_DEBUG_FUNCPTR (gst_mplex_request_new_pad); element_class->release_pad = GST_DEBUG_FUNCPTR (gst_mplex_release_pad); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "mplex video multiplexer", "Codec/Muxer", "High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer", "Andrew Stevens <andrew.stevens@nexgo.de>\n" diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in index d67d1d00..8f79383c 100644 --- a/ext/musepack/Makefile.in +++ b/ext/musepack/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/musepack/gstmusepackdec.c b/ext/musepack/gstmusepackdec.c index 555474ed..6ea72479 100644 --- a/ext/musepack/gstmusepackdec.c +++ b/ext/musepack/gstmusepackdec.c @@ -88,7 +88,7 @@ gst_musepackdec_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "Musepack decoder", + gst_element_class_set_static_metadata (element_class, "Musepack decoder", "Codec/Decoder/Audio", "Musepack decoder", "Ronald Bultje <rbultje@ronald.bitfreak.net>"); } diff --git a/ext/musicbrainz/Makefile.in b/ext/musicbrainz/Makefile.in index 0bb094c2..ae4dae2a 100644 --- a/ext/musicbrainz/Makefile.in +++ b/ext/musicbrainz/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/musicbrainz/gsttrm.c b/ext/musicbrainz/gsttrm.c index d2e3896d..aee67ab9 100644 --- a/ext/musicbrainz/gsttrm.c +++ b/ext/musicbrainz/gsttrm.c @@ -117,7 +117,7 @@ gst_trm_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MusicBrainz TRM generator", "Filter/Analyzer/Audio", "Compute MusicBrainz TRM Id using libmusicbrainz", "Jeremy Simon <jsimon13@yahoo.fr>"); diff --git a/ext/mythtv/Makefile.in b/ext/mythtv/Makefile.in index f9691c11..68522a26 100644 --- a/ext/mythtv/Makefile.in +++ b/ext/mythtv/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c index c0a209ba..a87d4834 100644 --- a/ext/mythtv/gstmythtvsrc.c +++ b/ext/mythtv/gstmythtvsrc.c @@ -159,7 +159,7 @@ GST_BOILERPLATE_FULL (GstMythtvSrc, gst_mythtv_src, GstPushSrc, gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (element_class, "MythTV client source", + gst_element_class_set_static_metadata (element_class, "MythTV client source", "Source/Network", "Control and receive data as a client over the network " "via raw socket connections using the MythTV protocol", diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in index 5408ba8c..dafb7ab7 100644 --- a/ext/nas/Makefile.in +++ b/ext/nas/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/nas/nassink.c b/ext/nas/nassink.c index 739814bc..4fe32570 100644 --- a/ext/nas/nassink.c +++ b/ext/nas/nassink.c @@ -96,7 +96,7 @@ gst_nas_sink_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, "NAS audio sink", + gst_element_class_set_static_metadata (element_class, "NAS audio sink", "Sink/Audio", "Plays audio to a Network Audio Server", "Laurent Vivier <Laurent.Vivier@bull.net>, " diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in index ddd4b5c4..f9eb2ae3 100644 --- a/ext/neon/Makefile.in +++ b/ext/neon/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/neon/gstneonhttpsrc.c b/ext/neon/gstneonhttpsrc.c index 83c2714b..bf8617be 100644 --- a/ext/neon/gstneonhttpsrc.c +++ b/ext/neon/gstneonhttpsrc.c @@ -130,7 +130,7 @@ gst_neonhttp_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (element_class, "HTTP client source", + gst_element_class_set_static_metadata (element_class, "HTTP client source", "Source/Network", "Receive data as a client over the network via HTTP using NEON", "Edgard Lima <edgard.lima@indt.org.br>, " diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in index 6a2a908b..8ae47a45 100644 --- a/ext/ofa/Makefile.in +++ b/ext/ofa/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/ofa/gstofa.c b/ext/ofa/gstofa.c index eecc1352..3a78a892 100644 --- a/ext/ofa/gstofa.c +++ b/ext/ofa/gstofa.c @@ -65,7 +65,7 @@ gst_ofa_base_init (gpointer g_class) GstAudioFilterClass *audio_filter_class = (GstAudioFilterClass *) g_class; GstCaps *caps; - gst_element_class_set_metadata (gstelement_class, "OFA", + gst_element_class_set_static_metadata (gstelement_class, "OFA", "MusicIP Fingerprinting element", "Find a music fingerprint using MusicIP's libofa", "Milosz Derezynski <internalerror@gmail.com>, Eric Buehl <eric.buehl@gmail.com>"); diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in index fc14610e..bc5d327c 100644 --- a/ext/openal/Makefile.in +++ b/ext/openal/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/openal/gstopenalsink.c b/ext/openal/gstopenalsink.c index 6d7ffd25..aaad00a6 100644 --- a/ext/openal/gstopenalsink.c +++ b/ext/openal/gstopenalsink.c @@ -168,7 +168,7 @@ gst_openal_sink_base_init (gpointer gclass) GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); GstPadTemplate *pad_template; - gst_element_class_set_metadata (element_class, "Audio sink (OpenAL)", + gst_element_class_set_static_metadata (element_class, "Audio sink (OpenAL)", "Sink/Audio", "Output to a sound device via OpenAL", "Chris Robinson <chris.kcat@gmail.com>"); diff --git a/ext/openal/gstopenalsrc.c b/ext/openal/gstopenalsrc.c index 4313022a..f82d594c 100644 --- a/ext/openal/gstopenalsrc.c +++ b/ext/openal/gstopenalsrc.c @@ -137,7 +137,7 @@ gst_openal_src_base_init (gpointer gclass) GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, "OpenAL src", + gst_element_class_set_static_metadata (element_class, "OpenAL src", "Source/Audio", "OpenAL source capture audio from device", "Victor Lin <bornstub@gmail.com>"); diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in index d0a90c86..85772cc3 100644 --- a/ext/opencv/Makefile.in +++ b/ext/opencv/Makefile.in @@ -282,6 +282,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/opencv/gstcvdilate.c b/ext/opencv/gstcvdilate.c index fae3ec2f..09b3de4a 100644 --- a/ext/opencv/gstcvdilate.c +++ b/ext/opencv/gstcvdilate.c @@ -70,7 +70,7 @@ gst_cv_dilate_class_init (GstCvDilateClass * klass) gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_dilate_transform_ip; gstopencvbasefilter_class->cv_trans_func = gst_cv_dilate_transform; - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cvdilate", "Transform/Effect/Video", "Applies cvDilate OpenCV function to the image", diff --git a/ext/opencv/gstcvequalizehist.c b/ext/opencv/gstcvequalizehist.c index 76a49a24..c6e4e849 100644 --- a/ext/opencv/gstcvequalizehist.c +++ b/ext/opencv/gstcvequalizehist.c @@ -85,7 +85,7 @@ gst_cv_equalize_hist_class_init (GstCvEqualizeHistClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cvequalizehist", "Transform/Effect/Video", "Applies cvEqualizeHist OpenCV function to the image", diff --git a/ext/opencv/gstcverode.c b/ext/opencv/gstcverode.c index b376d1d8..69794eda 100644 --- a/ext/opencv/gstcverode.c +++ b/ext/opencv/gstcverode.c @@ -70,7 +70,7 @@ gst_cv_erode_class_init (GstCvErodeClass * klass) gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_erode_transform_ip; gstopencvbasefilter_class->cv_trans_func = gst_cv_erode_transform; - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cverode", "Transform/Effect/Video", "Applies cvErode OpenCV function to the image", diff --git a/ext/opencv/gstcvlaplace.c b/ext/opencv/gstcvlaplace.c index 9a854903..7ecd5243 100644 --- a/ext/opencv/gstcvlaplace.c +++ b/ext/opencv/gstcvlaplace.c @@ -148,7 +148,7 @@ gst_cv_laplace_class_init (GstCvLaplaceClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cvlaplace", "Transform/Effect/Video", "Applies cvLaplace OpenCV function to the image", diff --git a/ext/opencv/gstcvsmooth.c b/ext/opencv/gstcvsmooth.c index 439de9ee..b1b405ad 100644 --- a/ext/opencv/gstcvsmooth.c +++ b/ext/opencv/gstcvsmooth.c @@ -175,7 +175,7 @@ gst_cv_smooth_class_init (GstCvSmoothClass * klass) 0, G_MAXDOUBLE, DEFAULT_PARAM4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cvsmooth", "Transform/Effect/Video", "Applies cvSmooth OpenCV function to the image", diff --git a/ext/opencv/gstcvsobel.c b/ext/opencv/gstcvsobel.c index 414ed569..a31c9bfe 100644 --- a/ext/opencv/gstcvsobel.c +++ b/ext/opencv/gstcvsobel.c @@ -143,7 +143,7 @@ gst_cv_sobel_class_init (GstCvSobelClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "cvsobel", "Transform/Effect/Video", "Applies cvSobel OpenCV function to the image", diff --git a/ext/opencv/gstedgedetect.c b/ext/opencv/gstedgedetect.c index a4b806fc..91b63bf7 100644 --- a/ext/opencv/gstedgedetect.c +++ b/ext/opencv/gstedgedetect.c @@ -158,7 +158,7 @@ gst_edge_detect_class_init (GstEdgeDetectClass * klass) "Aperture size for Sobel operator (Must be either 3, 5 or 7", 3, 7, 3, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "edgedetect", "Filter/Effect/Video", "Performs canny edge detection on videos and images.", diff --git a/ext/opencv/gstfaceblur.c b/ext/opencv/gstfaceblur.c index c0a6c596..51c7fe01 100644 --- a/ext/opencv/gstfaceblur.c +++ b/ext/opencv/gstfaceblur.c @@ -147,7 +147,7 @@ gst_face_blur_class_init (GstFaceBlurClass * klass) "Location of Haar cascade file to use for face blurion", DEFAULT_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "faceblur", "Filter/Effect/Video", "Blurs faces in images and videos", diff --git a/ext/opencv/gstfacedetect.c b/ext/opencv/gstfacedetect.c index 66c5a922..0665c17a 100644 --- a/ext/opencv/gstfacedetect.c +++ b/ext/opencv/gstfacedetect.c @@ -270,7 +270,7 @@ gst_face_detect_class_init (GstFaceDetectClass * klass) "Minimum area height to be recognized as a face", 0, G_MAXINT, DEFAULT_MIN_SIZE_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "facedetect", "Filter/Effect/Video", "Performs face detection on videos and images, providing detected positions via bus messages", diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c index efd53a3f..1d709771 100644 --- a/ext/opencv/gstmotioncells.c +++ b/ext/opencv/gstmotioncells.c @@ -304,7 +304,7 @@ gst_motion_cells_class_init (GstMotioncellsClass * klass) THICKNESS_MIN, THICKNESS_MAX, THICKNESS_DEF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "motioncells", "Filter/Effect/Video", "Performs motion detection on videos and images, providing detected motion cells index via bus messages", diff --git a/ext/opencv/gstpyramidsegment.c b/ext/opencv/gstpyramidsegment.c index 2eb4dd3c..ed249a54 100644 --- a/ext/opencv/gstpyramidsegment.c +++ b/ext/opencv/gstpyramidsegment.c @@ -162,7 +162,7 @@ gst_pyramid_segment_class_init (GstPyramidSegmentClass * klass) "Maximum level of the pyramid segmentation", 0, 4, 4, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "pyramidsegment", "Filter/Effect/Video", "Applies pyramid segmentation to a video or image.", diff --git a/ext/opencv/gsttemplatematch.c b/ext/opencv/gsttemplatematch.c index 92d85002..405c7868 100644 --- a/ext/opencv/gsttemplatematch.c +++ b/ext/opencv/gsttemplatematch.c @@ -144,7 +144,7 @@ gst_template_match_class_init (GstTemplateMatchClass * klass) "Sets whether the detected template should be highlighted in the output", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "templatematch", "Filter/Effect/Video", "Performs template matching on videos and images, providing detected positions via bus messages.", diff --git a/ext/opencv/gsttextoverlay.c b/ext/opencv/gsttextoverlay.c index 5e3aeea6..5ec9a6c9 100644 --- a/ext/opencv/gsttextoverlay.c +++ b/ext/opencv/gsttextoverlay.c @@ -200,7 +200,7 @@ gst_opencv_text_overlay_class_init (GstOpencvTextOverlayClass * klass) "Sets the width of fonts", 1.0, 5.0, DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "opencvtextoverlay", "Filter/Effect/Video", "Write text on the top of video", "sreerenj<bsreerenj@gmail.com>"); @@ -351,7 +351,8 @@ gst_opencv_text_overlay_handle_sink_event (GstPad * pad, GstObject * parent, gst_structure_get_int (structure, "height", &height); if (!filter->cvImage) { - filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); + filter->cvImage = + cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3); filter->cvStorage = cvCreateMemStorage (0); } break; diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in index 1655e27e..73452787 100644 --- a/ext/opus/Makefile.in +++ b/ext/opus/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c index c4335265..12e1652f 100644 --- a/ext/opus/gstopusdec.c +++ b/ext/opus/gstopusdec.c @@ -121,7 +121,7 @@ gst_opus_dec_class_init (GstOpusDecClass * klass) gst_static_pad_template_get (&opus_dec_src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&opus_dec_sink_factory)); - gst_element_class_set_metadata (element_class, "Opus audio decoder", + gst_element_class_set_static_metadata (element_class, "Opus audio decoder", "Codec/Decoder/Audio", "decode opus streams to audio", "Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>"); @@ -453,7 +453,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer) n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0); } gst_buffer_unmap (outbuf, &omap); - if (buf) + if (data != NULL) gst_buffer_unmap (buf, &map); if (n < 0) { diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c index a33f0e45..f6f83788 100644 --- a/ext/opus/gstopusenc.c +++ b/ext/opus/gstopusenc.c @@ -205,7 +205,7 @@ gst_opus_enc_class_init (GstOpusEncClass * klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Opus audio encoder", + gst_element_class_set_static_metadata (gstelement_class, "Opus audio encoder", "Codec/Encoder/Audio", "Encodes audio in Opus format", "Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>"); diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c index 740dbb1f..69ddb179 100644 --- a/ext/opus/gstopusparse.c +++ b/ext/opus/gstopusparse.c @@ -88,7 +88,7 @@ gst_opus_parse_class_init (GstOpusParseClass * klass) gst_static_pad_template_get (&opus_parse_src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&opus_parse_sink_factory)); - gst_element_class_set_metadata (element_class, "Opus audio parser", + gst_element_class_set_static_metadata (element_class, "Opus audio parser", "Codec/Parser/Audio", "parses opus audio streams", "Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>"); diff --git a/ext/opus/gstrtpopusdepay.c b/ext/opus/gstrtpopusdepay.c index dba1c145..8d89e282 100644 --- a/ext/opus/gstrtpopusdepay.c +++ b/ext/opus/gstrtpopusdepay.c @@ -70,7 +70,7 @@ gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass) gst_static_pad_template_get (&gst_rtp_opus_depay_src_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rtp_opus_depay_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "RTP Opus packet depayloader", "Codec/Depayloader/Network/RTP", "Extracts Opus audio from RTP packets", "Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>"); diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c index e1781e1b..5ba3217c 100644 --- a/ext/opus/gstrtpopuspay.c +++ b/ext/opus/gstrtpopuspay.c @@ -75,7 +75,7 @@ gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rtp_opus_pay_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "RTP Opus payloader", "Codec/Payloader/Network/RTP", "Puts Opus audio in RTP packets", @@ -94,16 +94,10 @@ static gboolean gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps) { gboolean res; - gchar *capsstr; - - capsstr = gst_caps_to_string (caps); gst_rtp_base_payload_set_options (payload, "audio", FALSE, "X-GST-OPUS-DRAFT-SPITTKA-00", 48000); - res = - gst_rtp_base_payload_set_outcaps (payload, "caps", G_TYPE_STRING, capsstr, - NULL); - g_free (capsstr); + res = gst_rtp_base_payload_set_outcaps (payload, NULL); return res; } diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in index 02c84807..eb5a2c60 100644 --- a/ext/resindvd/Makefile.in +++ b/ext/resindvd/Makefile.in @@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/resindvd/gstmpegdemux.c b/ext/resindvd/gstmpegdemux.c index bd1d870f..a03eab3a 100644 --- a/ext/resindvd/gstmpegdemux.c +++ b/ext/resindvd/gstmpegdemux.c @@ -185,7 +185,7 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass) gst_element_class_add_pad_template (element_class, klass->private_template); gst_element_class_add_pad_template (element_class, klass->sink_template); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MPEG Program Demuxer", "Codec/Demuxer", "Demultiplexes MPEG Program Streams", "Jan Schmidt <thaytan@noraisin.net>"); diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c index 8cff8fb3..ec6d6193 100644 --- a/ext/resindvd/resindvdbin.c +++ b/ext/resindvd/resindvdbin.c @@ -127,7 +127,7 @@ rsn_dvdbin_class_init (RsnDvdBinClass * klass) element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state); - gst_element_class_set_metadata (element_class, "rsndvdbin", + gst_element_class_set_static_metadata (element_class, "rsndvdbin", "Generic/Bin/Player", "DVD playback element", "Jan Schmidt <thaytan@noraisin.net>"); } diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c index 1bfb7841..44eb4793 100644 --- a/ext/resindvd/resindvdsrc.c +++ b/ext/resindvd/resindvdsrc.c @@ -231,7 +231,7 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_set_metadata (gstelement_class, "Resin DVD Src", + gst_element_class_set_static_metadata (gstelement_class, "Resin DVD Src", "Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>"); } diff --git a/ext/resindvd/rsndec.c b/ext/resindvd/rsndec.c index 81e15d6d..3f72426c 100644 --- a/ext/resindvd/rsndec.c +++ b/ext/resindvd/rsndec.c @@ -410,7 +410,7 @@ rsn_audiodec_class_init (RsnAudioDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&audio_sink_template)); - gst_element_class_set_metadata (element_class, "RsnAudioDec", + gst_element_class_set_static_metadata (element_class, "RsnAudioDec", "Audio/Decoder", "Resin DVD audio stream decoder", "Jan Schmidt <thaytan@noraisin.net>"); @@ -460,7 +460,7 @@ rsn_videodec_class_init (RsnAudioDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&video_sink_template)); - gst_element_class_set_metadata (element_class, "RsnVideoDec", + gst_element_class_set_static_metadata (element_class, "RsnVideoDec", "Video/Decoder", "Resin DVD video stream decoder", "Jan Schmidt <thaytan@noraisin.net>"); diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c index 0f2361ac..a7146584 100644 --- a/ext/resindvd/rsnparsetter.c +++ b/ext/resindvd/rsnparsetter.c @@ -60,7 +60,7 @@ rsn_parsetter_class_init (RsnParSetterClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Resin Aspect Ratio Setter", "Filter/Video", "Overrides caps on video buffers to force a particular display ratio", "Jan Schmidt <thaytan@noraisin.net>"); diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in index 65013816..8624fc0e 100644 --- a/ext/rsvg/Makefile.in +++ b/ext/rsvg/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/rsvg/gstrsvgdec.c b/ext/rsvg/gstrsvgdec.c index 4ad95721..f032124d 100644 --- a/ext/rsvg/gstrsvgdec.c +++ b/ext/rsvg/gstrsvgdec.c @@ -77,7 +77,7 @@ gst_rsvg_dec_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "SVG image decoder", "Codec/Decoder/Image", "Uses librsvg to decode SVG images", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/ext/rsvg/gstrsvgoverlay.c b/ext/rsvg/gstrsvgoverlay.c index 31e7f6f0..64d2e1e0 100644 --- a/ext/rsvg/gstrsvgoverlay.c +++ b/ext/rsvg/gstrsvgoverlay.c @@ -458,7 +458,7 @@ gst_rsvg_overlay_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&data_sink_template)); - gst_element_class_set_metadata (element_class, "RSVG overlay", + gst_element_class_set_static_metadata (element_class, "RSVG overlay", "Filter/Editor/Video", "Overlays SVG graphics over a video stream", "Olivier Aubert <olivier.aubert@liris.cnrs.fr>"); diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in index 3f2758b8..d80fa7e0 100644 --- a/ext/rtmp/Makefile.in +++ b/ext/rtmp/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c index b22b9d91..bef7d066 100644 --- a/ext/rtmp/gstrtmpsink.c +++ b/ext/rtmp/gstrtmpsink.c @@ -47,6 +47,8 @@ #include <winsock2.h> #endif +#include <stdlib.h> + GST_DEBUG_CATEGORY_STATIC (gst_rtmp_sink_debug); #define GST_CAT_DEFAULT gst_rtmp_sink_debug @@ -100,7 +102,7 @@ gst_rtmp_sink_class_init (GstRTMPSinkClass * klass) g_param_spec_string ("location", "RTMP Location", "RTMP url", DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "RTMP output sink", "Sink/Network", "Sends FLV content to a server via RTMP", "Jan Schmidt <thaytan@noraisin.net>"); @@ -241,7 +243,7 @@ gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf) gst_buffer_map (buf, &map, GST_MAP_READ); - if (!RTMP_Write (sink->rtmp, (char *) map.data, map.size)) + if (RTMP_Write (sink->rtmp, (char *) map.data, map.size) <= 0) goto write_failed; gst_buffer_unmap (buf, &map); @@ -293,6 +295,7 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, GError ** error) { GstRTMPSink *sink = GST_RTMP_SINK (handler); + gboolean ret = TRUE; if (GST_STATE (sink) >= GST_STATE_PAUSED) { g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE, @@ -315,14 +318,19 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, ("Failed to parse URI %s", uri), (NULL)); g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI, "Could not parse RTMP URI"); - return FALSE; + ret = FALSE; + } else { + sink->uri = g_strdup (uri); } - sink->uri = g_strdup (uri); + + if (playpath.av_val) + free (playpath.av_val); } - GST_DEBUG_OBJECT (sink, "Changed URI to %s", GST_STR_NULL (uri)); + if (ret) + GST_DEBUG_OBJECT (sink, "Changed URI to %s", GST_STR_NULL (uri)); - return TRUE; + return ret; } static void diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c index b22ba958..c1a5845a 100644 --- a/ext/rtmp/gstrtmpsrc.c +++ b/ext/rtmp/gstrtmpsrc.c @@ -127,7 +127,7 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "RTMP Source", "Source/File", "Read RTMP streams", diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in index 51b3ebff..9be1cc04 100644 --- a/ext/schroedinger/Makefile.in +++ b/ext/schroedinger/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c index cd12d8bc..508c7742 100644 --- a/ext/schroedinger/gstschrodec.c +++ b/ext/schroedinger/gstschrodec.c @@ -129,7 +129,7 @@ gst_schro_dec_class_init (GstSchroDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_schro_dec_sink_template)); - gst_element_class_set_metadata (element_class, "Dirac Decoder", + gst_element_class_set_static_metadata (element_class, "Dirac Decoder", "Codec/Decoder/Video", "Decode Dirac streams", "David Schleef <ds@schleef.org>"); diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c index 04fabf41..7173a25b 100644 --- a/ext/schroedinger/gstschroenc.c +++ b/ext/schroedinger/gstschroenc.c @@ -219,7 +219,7 @@ gst_schro_enc_class_init (GstSchroEncClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_schro_enc_sink_template)); - gst_element_class_set_metadata (element_class, "Dirac Encoder", + gst_element_class_set_static_metadata (element_class, "Dirac Encoder", "Codec/Encoder/Video", "Encode raw video into Dirac stream", "David Schleef <ds@schleef.org>"); diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in index 9d5a1f5e..f843ae5a 100644 --- a/ext/sdl/Makefile.in +++ b/ext/sdl/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/sdl/sdlaudiosink.c b/ext/sdl/sdlaudiosink.c index e5279e51..87dd7309 100644 --- a/ext/sdl/sdlaudiosink.c +++ b/ext/sdl/sdlaudiosink.c @@ -146,7 +146,7 @@ gst_sdlaudio_sink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "SDL audio sink", + gst_element_class_set_static_metadata (element_class, "SDL audio sink", "Sink/Audio", "Output to a sound card via SDLAUDIO", "Edgard Lima <edgard.lima@indt.org.br>"); diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c index e976466a..ffc70c36 100644 --- a/ext/sdl/sdlvideosink.c +++ b/ext/sdl/sdlvideosink.c @@ -152,7 +152,7 @@ gst_sdlvideosink_base_init (gpointer g_class) GST_PAD_SINK, GST_PAD_ALWAYS, capslist); gst_element_class_add_pad_template (element_class, sink_template); - gst_element_class_set_metadata (element_class, "SDL video sink", + gst_element_class_set_static_metadata (element_class, "SDL video sink", "Sink/Video", "An SDL-based videosink", "Ronald Bultje <rbultje@ronald.bitfreak.net>, " "Edgard Lima <edgard.lima@indt.org.br>, " diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in index 3b8bbcf4..0fc8a2e3 100644 --- a/ext/sndfile/Makefile.in +++ b/ext/sndfile/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/sndfile/gstsfsink.c b/ext/sndfile/gstsfsink.c index acb54368..fafd81ef 100644 --- a/ext/sndfile/gstsfsink.c +++ b/ext/sndfile/gstsfsink.c @@ -86,7 +86,7 @@ gst_sf_sink_base_init (gpointer g_class) GST_DEBUG_CATEGORY_INIT (gst_sf_debug, "sfsink", 0, "sfsink element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sf_sink_factory)); - gst_element_class_set_metadata (element_class, "Sndfile sink", + gst_element_class_set_static_metadata (element_class, "Sndfile sink", "Sink/Audio", "Write audio streams to disk using libsndfile", "Andy Wingo <wingo at pobox dot com>"); diff --git a/ext/sndfile/gstsfsrc.c b/ext/sndfile/gstsfsrc.c index ae45f9f8..a2dac492 100644 --- a/ext/sndfile/gstsfsrc.c +++ b/ext/sndfile/gstsfsrc.c @@ -86,7 +86,7 @@ gst_sf_src_base_init (gpointer g_class) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sf_src_factory)); - gst_element_class_set_metadata (gstelement_class, "Sndfile source", + gst_element_class_set_static_metadata (gstelement_class, "Sndfile source", "Source/Audio", "Read audio streams from disk using libsndfile", "Andy Wingo <wingo at pobox dot com>"); diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in index 73b6346a..10512a60 100644 --- a/ext/sndio/Makefile.in +++ b/ext/sndio/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/sndio/sndiosink.c b/ext/sndio/sndiosink.c index 7b814fab..d2680a54 100644 --- a/ext/sndio/sndiosink.c +++ b/ext/sndio/sndiosink.c @@ -51,7 +51,7 @@ enum }; static GstStaticPadTemplate sndio_sink_factory = - GST_STATIC_PAD_TEMPLATE ("sink", +GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-raw-int, " @@ -59,8 +59,7 @@ static GstStaticPadTemplate sndio_sink_factory = "signed = (boolean) { TRUE, FALSE }, " "width = (int) { 8, 16, 24, 32 }, " "depth = (int) { 8, 16, 24, 32 }, " - "rate = (int) [ 8000, 192000 ], " - "channels = (int) [ 1, 16 ] ") + "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ") ); static void gst_sndiosink_finalize (GObject * object); @@ -91,11 +90,10 @@ gst_sndiosink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Sndio audio sink", "Sink/Audio", - "Plays audio through sndio", - "Jacob Meuser <jakemsr@sdf.lonestar.org>"); + "Plays audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sndio_sink_factory)); @@ -123,8 +121,7 @@ gst_sndiosink_class_init (GstSndioSinkClass * klass) gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sndiosink_open); gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sndiosink_close); gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosink_prepare); - gstaudiosink_class->unprepare = - GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare); + gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare); gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sndiosink_write); gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosink_delay); gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosink_reset); @@ -139,8 +136,7 @@ gst_sndiosink_class_init (GstSndioSinkClass * klass) } static void -gst_sndiosink_init (GstSndioSink * sndiosink, - GstSndioSinkClass * klass) +gst_sndiosink_init (GstSndioSink * sndiosink, GstSndioSinkClass * klass) { sndiosink->hdl = NULL; sndiosink->host = g_strdup (g_getenv ("AUDIODEVICE")); @@ -170,8 +166,7 @@ gst_sndiosink_getcaps (GstBaseSink * bsink) return NULL; } - GST_LOG_OBJECT (sndiosink, "returning %" GST_PTR_FORMAT, - sndiosink->cur_caps); + GST_LOG_OBJECT (sndiosink, "returning %" GST_PTR_FORMAT, sndiosink->cur_caps); return gst_caps_ref (sndiosink->cur_caps); } diff --git a/ext/sndio/sndiosrc.c b/ext/sndio/sndiosrc.c index cd209a09..19776c2d 100644 --- a/ext/sndio/sndiosrc.c +++ b/ext/sndio/sndiosrc.c @@ -50,8 +50,7 @@ enum PROP_HOST }; -static GstStaticPadTemplate sndio_src_factory = - GST_STATIC_PAD_TEMPLATE ("src", +static GstStaticPadTemplate sndio_src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("audio/x-raw-int, " @@ -59,8 +58,7 @@ static GstStaticPadTemplate sndio_src_factory = "signed = (boolean) { TRUE, FALSE }, " "width = (int) { 8, 16, 24, 32 }, " "depth = (int) { 8, 16, 24, 32 }, " - "rate = (int) [ 8000, 192000 ], " - "channels = (int) [ 1, 16 ] ") + "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ") ); static void gst_sndiosrc_finalize (GObject * object); @@ -83,19 +81,17 @@ static void gst_sndiosrc_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void gst_sndiosrc_cb (void *addr, int delta); -GST_BOILERPLATE (GstSndioSrc, gst_sndiosrc, GstAudioSrc, - GST_TYPE_AUDIO_SRC); +GST_BOILERPLATE (GstSndioSrc, gst_sndiosrc, GstAudioSrc, GST_TYPE_AUDIO_SRC); static void gst_sndiosrc_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Sndio audio source", "Source/Audio", - "Records audio through sndio", - "Jacob Meuser <jakemsr@sdf.lonestar.org>"); + "Records audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sndio_src_factory)); @@ -168,8 +164,7 @@ gst_sndiosrc_getcaps (GstBaseSrc * bsrc) return NULL; } - GST_LOG_OBJECT (sndiosrc, "returning %" GST_PTR_FORMAT, - sndiosrc->cur_caps); + GST_LOG_OBJECT (sndiosrc, "returning %" GST_PTR_FORMAT, sndiosrc->cur_caps); return gst_caps_ref (sndiosrc->cur_caps); } @@ -301,8 +296,7 @@ gst_sndiosrc_open (GstAudioSrc * asrc) g_array_free (chans, TRUE); pad_template = gst_static_pad_template_get (&sndio_src_factory); - sndiosrc->cur_caps = - gst_caps_copy (gst_pad_template_get_caps (pad_template)); + sndiosrc->cur_caps = gst_caps_copy (gst_pad_template_get_caps (pad_template)); gst_object_unref (pad_template); for (i = 0; i < sndiosrc->cur_caps->structs->len; i++) { diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in index 3ad1c0ff..8a48d0d1 100644 --- a/ext/soundtouch/Makefile.in +++ b/ext/soundtouch/Makefile.in @@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/soundtouch/gstbpmdetect.cc b/ext/soundtouch/gstbpmdetect.cc index fec45c96..e9d6f11a 100644 --- a/ext/soundtouch/gstbpmdetect.cc +++ b/ext/soundtouch/gstbpmdetect.cc @@ -87,7 +87,7 @@ gst_bpm_detect_class_init (GstBPMDetectClass * klass) gobject_class->finalize = gst_bpm_detect_finalize; - gst_element_class_set_metadata (element_class, "BPM Detector", + gst_element_class_set_static_metadata (element_class, "BPM Detector", "Filter/Analyzer/Audio", "Detect the BPM of an audio stream", "Sebastian Dröge <slomo@circular-chaos.org>"); diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc index 1f8ca9e6..fd36d210 100644 --- a/ext/soundtouch/gstpitch.cc +++ b/ext/soundtouch/gstpitch.cc @@ -152,7 +152,7 @@ gst_pitch_class_init (GstPitchClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_pitch_sink_template)); - gst_element_class_set_metadata (element_class, "Pitch controller", + gst_element_class_set_static_metadata (element_class, "Pitch controller", "Filter/Effect/Audio", "Control the pitch of an audio stream", "Wouter Paesen <wouter@blue-gate.be>"); } @@ -667,7 +667,7 @@ gst_pitch_src_query (GstPad * pad, GstObject * parent, GstQuery * query) /* this function returns FALSE if not enough data is known to transform the * segment into proper downstream values. If the function does return false - * the sgement should be stalled until enough information is available. + * the segment should be stalled until enough information is available. * If the funtion returns TRUE, event will be replaced by the new downstream * compatible event. */ @@ -901,7 +901,7 @@ gst_pitch_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: - pitch->next_buffer_time = 0; + pitch->next_buffer_time = GST_CLOCK_TIME_NONE; pitch->next_buffer_offset = 0; pitch->priv->st->clear (); pitch->min_latency = pitch->max_latency = 0; diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in index c6fa9a66..8b4eab45 100644 --- a/ext/spandsp/Makefile.in +++ b/ext/spandsp/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/spandsp/gstspanplc.c b/ext/spandsp/gstspanplc.c index 4924117a..f30f58c8 100644 --- a/ext/spandsp/gstspanplc.c +++ b/ext/spandsp/gstspanplc.c @@ -78,7 +78,7 @@ gst_span_plc_class_init (GstSpanPlcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "SpanDSP PLC", + gst_element_class_set_static_metadata (gstelement_class, "SpanDSP PLC", "Filter/Effect/Audio", "Adds packet loss concealment to audio", "Youness Alaoui <youness.alaoui@collabora.co.uk>"); diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in index 4c0e1fd9..6ef74990 100644 --- a/ext/spc/Makefile.in +++ b/ext/spc/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/spc/gstspc.c b/ext/spc/gstspc.c index 48c14b92..bd4ea93e 100644 --- a/ext/spc/gstspc.c +++ b/ext/spc/gstspc.c @@ -76,7 +76,7 @@ gst_spc_dec_class_init (GstSpcDecClass * klass) GstElementClass *element_class = (GstElementClass *) klass; GObjectClass *gobject_class = (GObjectClass *) klass; - gst_element_class_set_metadata (element_class, "OpenSPC SPC decoder", + gst_element_class_set_static_metadata (element_class, "OpenSPC SPC decoder", "Codec/Audio/Decoder", "Uses OpenSPC to emulate an SPC processor", "Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>"); diff --git a/ext/swfdec/Makefile.in b/ext/swfdec/Makefile.in index 8725eb26..8cef883b 100644 --- a/ext/swfdec/Makefile.in +++ b/ext/swfdec/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/swfdec/gstswfdec.c b/ext/swfdec/gstswfdec.c index 17c9dbfd..a5483e35 100644 --- a/ext/swfdec/gstswfdec.c +++ b/ext/swfdec/gstswfdec.c @@ -208,7 +208,7 @@ gst_swfdec_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "SWF video decoder", + gst_element_class_set_static_metadata (element_class, "SWF video decoder", "Codec/Decoder/Video", "Uses libswfdec to decode Flash video streams", "David Schleef <ds@schleef.org>"); diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in index 6acc51e4..31d9d481 100644 --- a/ext/teletextdec/Makefile.in +++ b/ext/teletextdec/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/teletextdec/gstteletextdec.c b/ext/teletextdec/gstteletextdec.c index 79fad6c0..622b972d 100644 --- a/ext/teletextdec/gstteletextdec.c +++ b/ext/teletextdec/gstteletextdec.c @@ -189,7 +189,7 @@ gst_teletextdec_base_init (gpointer klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Teletext decoder", "Decoder", "Decode PES or raw VBI stream containing teletext information to RGBA, HTML and text", diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in index fec9dcd1..25309c94 100644 --- a/ext/timidity/Makefile.in +++ b/ext/timidity/Makefile.in @@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c index a82b348c..dbeb1b6a 100644 --- a/ext/timidity/gsttimidity.c +++ b/ext/timidity/gsttimidity.c @@ -99,7 +99,7 @@ gst_timidity_base_init (gpointer gclass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, "Timidity", + gst_element_class_set_static_metadata (element_class, "Timidity", "Codec/Decoder/Audio", "Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>"); } diff --git a/ext/timidity/gstwildmidi.c b/ext/timidity/gstwildmidi.c index 707e0360..fd4b78ad 100644 --- a/ext/timidity/gstwildmidi.c +++ b/ext/timidity/gstwildmidi.c @@ -128,7 +128,7 @@ gst_wildmidi_base_init (gpointer gclass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, "WildMidi", + gst_element_class_set_static_metadata (element_class, "WildMidi", "Codec/Decoder/Audio", "Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>"); } diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in index 73a29c26..cb0b862f 100644 --- a/ext/voaacenc/Makefile.in +++ b/ext/voaacenc/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/voaacenc/gstvoaacenc.c b/ext/voaacenc/gstvoaacenc.c index 2c50f414..84efa096 100644 --- a/ext/voaacenc/gstvoaacenc.c +++ b/ext/voaacenc/gstvoaacenc.c @@ -164,7 +164,7 @@ gst_voaacenc_class_init (GstVoAacEncClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "AAC audio encoder", + gst_element_class_set_static_metadata (element_class, "AAC audio encoder", "Codec/Encoder/Audio", "AAC audio encoder", "Kan Hu <kan.hu@linaro.org>"); GST_DEBUG_CATEGORY_INIT (gst_voaacenc_debug, "voaacenc", 0, "voaac encoder"); @@ -491,8 +491,7 @@ gst_voaacenc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf) goto encode_failed; } - GST_LOG_OBJECT (voaacenc, "encoded to %lu bytes", - output.Length); + GST_LOG_OBJECT (voaacenc, "encoded to %lu bytes", output.Length); gst_buffer_unmap (buf, &map); gst_buffer_unmap (out, &omap); gst_buffer_resize (out, 0, output.Length); diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in index 1be3ff74..718561a3 100644 --- a/ext/voamrwbenc/Makefile.in +++ b/ext/voamrwbenc/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/voamrwbenc/gstvoamrwbenc.c b/ext/voamrwbenc/gstvoamrwbenc.c index 696ab292..c1cd924d 100644 --- a/ext/voamrwbenc/gstvoamrwbenc.c +++ b/ext/voamrwbenc/gstvoamrwbenc.c @@ -167,7 +167,7 @@ gst_voamrwbenc_class_init (GstVoAmrWbEncClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "AMR-WB audio encoder", + gst_element_class_set_static_metadata (element_class, "AMR-WB audio encoder", "Codec/Encoder/Audio", "Adaptive Multi-Rate Wideband audio encoder", "Renato Araujo <renato.filho@indt.org.br>"); diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in index 080bd3be..2717438b 100644 --- a/ext/wayland/Makefile.in +++ b/ext/wayland/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c index 3a6cb85d..0788f05e 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c @@ -88,12 +88,11 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query); static gboolean gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer); -static int event_mask_update (uint32_t mask, void *data); static struct display *create_display (void); -static void display_handle_global (struct wl_display *display, uint32_t id, - const char *interface, uint32_t version, void *data); -static void frame_redraw_callback (void *data, struct wl_callback *callback, - uint32_t time); +static void registry_handle_global (void *data, struct wl_registry *registry, + uint32_t id, const char *interface, uint32_t version); +static void frame_redraw_callback (void *data, + struct wl_callback *callback, uint32_t time); static void create_window (GstWaylandSink * sink, struct display *display, int width, int height); static void shm_pool_destroy (struct shm_pool *pool); @@ -116,7 +115,7 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "wayland video sink", "Sink/Video", "Output to wayland surface", "Sreerenj Balachandran <sreerenj.balachandran@intel.com>"); @@ -261,16 +260,6 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) return caps; } -static int -event_mask_update (uint32_t mask, void *data) -{ - struct display *d = data; - - d->mask = mask; - - return 0; -} - static void shm_format (void *data, struct wl_shm *wl_shm, uint32_t format) { @@ -284,22 +273,26 @@ struct wl_shm_listener shm_listenter = { }; static void -display_handle_global (struct wl_display *display, uint32_t id, - const char *interface, uint32_t version, void *data) +registry_handle_global (void *data, struct wl_registry *registry, + uint32_t id, const char *interface, uint32_t version) { struct display *d = data; if (strcmp (interface, "wl_compositor") == 0) { - d->compositor = wl_display_bind (display, id, &wl_compositor_interface); + d->compositor = + wl_registry_bind (registry, id, &wl_compositor_interface, 1); } else if (strcmp (interface, "wl_shell") == 0) { - d->shell = wl_display_bind (display, id, &wl_shell_interface); + d->shell = wl_registry_bind (registry, id, &wl_shell_interface, 1); } else if (strcmp (interface, "wl_shm") == 0) { - d->shm = wl_display_bind (display, id, &wl_shm_interface); + d->shm = wl_registry_bind (registry, id, &wl_shm_interface, 1); wl_shm_add_listener (d->shm, &shm_listenter, d); } - } +static const struct wl_registry_listener registry_listener = { + registry_handle_global +}; + static struct display * create_display (void) { @@ -313,10 +306,15 @@ create_display (void) return NULL; } - wl_display_add_global_listener (display->display, - display_handle_global, display); + display->registry = wl_display_get_registry (display->display); + wl_registry_add_listener (display->registry, ®istry_listener, display); + + wl_display_roundtrip (display->display); + if (display->shm == NULL) { + GST_ERROR ("No wl_shm global.."); + return NULL; + } - wl_display_iterate (display->display, WL_DISPLAY_READABLE); wl_display_roundtrip (display->display); if (!(display->formats & (1 << WL_SHM_FORMAT_XRGB8888))) { @@ -324,7 +322,7 @@ create_display (void) return NULL; } - wl_display_get_fd (display->display, event_mask_update, display); + wl_display_get_fd (display->display); return display; } @@ -590,13 +588,12 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) window = sink->window; display = sink->display; - /* Wait for the previous frame to complete redraw */ + meta = gst_buffer_get_wl_meta (buffer); + if (window->redraw_pending) { - wl_display_iterate (display->display, WL_DISPLAY_READABLE); + wl_display_dispatch (display->display); } - meta = gst_buffer_get_wl_meta (buffer); - if (meta && meta->sink == sink) { GST_LOG_OBJECT (sink, "buffer %p from our pool, writing directly", buffer); to_render = buffer; @@ -630,10 +627,11 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) wl_surface_attach (sink->window->surface, meta->wbuffer, 0, 0); wl_surface_damage (sink->window->surface, 0, 0, res.w, res.h); - wl_display_iterate (display->display, WL_DISPLAY_WRITABLE); window->redraw_pending = TRUE; window->callback = wl_surface_frame (window->surface); wl_callback_add_listener (window->callback, &frame_callback_listener, window); + wl_surface_commit (window->surface); + wl_display_dispatch (display->display); if (buffer != to_render) gst_buffer_unref (to_render); diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h index 1a278e91..6607bd18 100644 --- a/ext/wayland/gstwaylandsink.h +++ b/ext/wayland/gstwaylandsink.h @@ -58,11 +58,11 @@ struct display { struct wl_display *display; + struct wl_registry *registry; struct wl_compositor *compositor; struct wl_shell *shell; struct wl_shm *shm; uint32_t formats; - uint32_t mask; }; struct window diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in index a8263d86..79313933 100644 --- a/ext/xvid/Makefile.in +++ b/ext/xvid/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/xvid/gstxviddec.c b/ext/xvid/gstxviddec.c index 53ab0234..01dc1b67 100644 --- a/ext/xvid/gstxviddec.c +++ b/ext/xvid/gstxviddec.c @@ -105,7 +105,7 @@ gst_xviddec_base_init (GstXvidDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "XviD video decoder", + gst_element_class_set_static_metadata (element_class, "XviD video decoder", "Codec/Decoder/Video", "XviD decoder based on xvidcore", "Ronald Bultje <rbultje@ronald.bitfreak.net>"); diff --git a/ext/xvid/gstxvidenc.c b/ext/xvid/gstxvidenc.c index 44d6609a..46906771 100644 --- a/ext/xvid/gstxvidenc.c +++ b/ext/xvid/gstxvidenc.c @@ -248,7 +248,7 @@ gst_xvidenc_base_init (GstXvidEncClass * klass) gst_static_pad_template_get (&sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "XviD video encoder", + gst_element_class_set_static_metadata (element_class, "XviD video encoder", "Codec/Encoder/Video", "XviD encoder based on xvidcore", "Ronald Bultje <rbultje@ronald.bitfreak.net>"); diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in index e387f3fd..672b0c35 100644 --- a/ext/zbar/Makefile.in +++ b/ext/zbar/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/ext/zbar/gstzbar.c b/ext/zbar/gstzbar.c index c4da7907..0f363e16 100644 --- a/ext/zbar/gstzbar.c +++ b/ext/zbar/gstzbar.c @@ -163,7 +163,7 @@ gst_zbar_class_init (GstZBarClass * g_class) G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, "Barcode detector", + gst_element_class_set_static_metadata (gstelement_class, "Barcode detector", "Filter/Analyzer/Video", "Detect bar codes in the video streams", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in index a07f070c..a23be49a 100644 --- a/gst-libs/Makefile.in +++ b/gst-libs/Makefile.in @@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in index 0374310d..d4c5f592 100644 --- a/gst-libs/gst/Makefile.in +++ b/gst-libs/gst/Makefile.in @@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in index 7ab57a0a..125c649f 100644 --- a/gst-libs/gst/basecamerabinsrc/Makefile.in +++ b/gst-libs/gst/basecamerabinsrc/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c index 79008e1e..a0a9f1dc 100644 --- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c +++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c @@ -531,7 +531,7 @@ gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass) gstelement_class->change_state = gst_base_camera_src_change_state; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Base class for camerabin src bin", "Source/Video", "Abstracts capture device for camerabin2", "Rob Clark <rob@ti.com>"); } diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in index 08b658bd..a1eced7c 100644 --- a/gst-libs/gst/codecparsers/Makefile.in +++ b/gst-libs/gst/codecparsers/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in index bd8fb115..111d339a 100644 --- a/gst-libs/gst/interfaces/Makefile.in +++ b/gst-libs/gst/interfaces/Makefile.in @@ -270,6 +270,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/signalprocessor/Makefile.in b/gst-libs/gst/signalprocessor/Makefile.in index fd0dd6ed..4ab130e7 100644 --- a/gst-libs/gst/signalprocessor/Makefile.in +++ b/gst-libs/gst/signalprocessor/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in index ba3018b8..d62e38f5 100644 --- a/gst-libs/gst/video/Makefile.in +++ b/gst-libs/gst/video/Makefile.in @@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap index bfb9ddcb..96dc61ba 100644 --- a/gst-plugins-bad.doap +++ b/gst-plugins-bad.doap @@ -35,6 +35,16 @@ real live maintainer, or some actual wide use. <release> <Version> + <revision>1.0.2</revision> + <branch>1.0</branch> + <name></name> + <created>2012-10-24</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.0.2.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.0.1</revision> <branch>1.0</branch> <name></name> diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec index 1005b293..53f5eca3 100644 --- a/gst-plugins-bad.spec +++ b/gst-plugins-bad.spec @@ -6,7 +6,7 @@ Summary: GStreamer streaming media framework "bad" plug-ins Name: %{gstreamer}-plugins-bad -Version: 1.0.1 +Version: 1.0.2 Release: 1.gst # The freeze and nfs plugins are LGPLv2 (only) License: LGPLv2+ and LGPLv2 diff --git a/gst/Makefile.in b/gst/Makefile.in index 638b847e..44eb2c51 100644 --- a/gst/Makefile.in +++ b/gst/Makefile.in @@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in index 193de3ae..6635b432 100644 --- a/gst/adpcmdec/Makefile.in +++ b/gst/adpcmdec/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/adpcmdec/adpcmdec.c b/gst/adpcmdec/adpcmdec.c index 0404e09f..9788bdce 100644 --- a/gst/adpcmdec/adpcmdec.c +++ b/gst/adpcmdec/adpcmdec.c @@ -467,7 +467,7 @@ adpcmdec_class_init (ADPCMDecClass * klass) gst_static_pad_template_get (&adpcmdec_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&adpcmdec_src_template)); - gst_element_class_set_metadata (element_class, "ADPCM decoder", + gst_element_class_set_static_metadata (element_class, "ADPCM decoder", "Codec/Decoder/Audio", "Decode MS and IMA ADPCM audio", "Pioneers of the Inevitable <songbird@songbirdnest.com>"); diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in index 10bb4574..75c2633f 100644 --- a/gst/adpcmenc/Makefile.in +++ b/gst/adpcmenc/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/adpcmenc/adpcmenc.c b/gst/adpcmenc/adpcmenc.c index ce6b9e65..4f0b73f0 100644 --- a/gst/adpcmenc/adpcmenc.c +++ b/gst/adpcmenc/adpcmenc.c @@ -439,7 +439,7 @@ adpcmenc_class_init (ADPCMEncClass * klass) gst_static_pad_template_get (&adpcmenc_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&adpcmenc_src_template)); - gst_element_class_set_metadata (element_class, "ADPCM encoder", + gst_element_class_set_static_metadata (element_class, "ADPCM encoder", "Codec/Encoder/Audio", "Encode ADPCM audio", "Pioneers of the Inevitable <songbird@songbirdnest.com>"); diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in index 337b426c..9f58ba40 100644 --- a/gst/aiff/Makefile.in +++ b/gst/aiff/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/aiff/aiffmux.c b/gst/aiff/aiffmux.c index eca41630..4a5c1ce3 100644 --- a/gst/aiff/aiffmux.c +++ b/gst/aiff/aiffmux.c @@ -106,7 +106,7 @@ gst_aiff_mux_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "AIFF audio muxer", "Muxer/Audio", "Multiplex raw audio into AIFF", "Robert Swain <robert.swain@gmail.com>"); diff --git a/gst/aiff/aiffparse.c b/gst/aiff/aiffparse.c index 71d24d5d..1182f3c2 100644 --- a/gst/aiff/aiffparse.c +++ b/gst/aiff/aiffparse.c @@ -115,7 +115,7 @@ gst_aiff_parse_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "AIFF audio demuxer", "Codec/Demuxer/Audio", "Parse a .aiff file into raw audio", "Pioneers of the Inevitable <songbird@songbirdnest.com>"); diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in index 3cdb8eab..ae005da3 100644 --- a/gst/asfmux/Makefile.in +++ b/gst/asfmux/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c index f58e6c91..3b340259 100644 --- a/gst/asfmux/gstasfmux.c +++ b/gst/asfmux/gstasfmux.c @@ -277,7 +277,7 @@ gst_asf_mux_class_init (GstAsfMuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&video_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "ASF muxer", + gst_element_class_set_static_metadata (gstelement_class, "ASF muxer", "Codec/Muxer", "Muxes audio and video into an ASF stream", "Thiago Santos <thiagoss@embedded.ufcg.edu.br>"); diff --git a/gst/asfmux/gstasfparse.c b/gst/asfmux/gstasfparse.c index 0b393bfd..529c7a85 100644 --- a/gst/asfmux/gstasfparse.c +++ b/gst/asfmux/gstasfparse.c @@ -545,7 +545,7 @@ gst_asf_parse_class_init (GstAsfParseClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "ASF parser", + gst_element_class_set_static_metadata (gstelement_class, "ASF parser", "Parser", "Parses ASF", "Thiago Santos <thiagoss@embedded.ufcg.edu.br>"); GST_DEBUG_CATEGORY_INIT (asfparse_debug, "asfparse", 0, diff --git a/gst/asfmux/gstrtpasfpay.c b/gst/asfmux/gstrtpasfpay.c index 797071fa..5cc3f0a7 100644 --- a/gst/asfmux/gstrtpasfpay.c +++ b/gst/asfmux/gstrtpasfpay.c @@ -100,7 +100,7 @@ gst_rtp_asf_pay_class_init (GstRtpAsfPayClass * klass) gst_static_pad_template_get (&gst_rtp_asf_pay_sink_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_rtp_asf_pay_src_template)); - gst_element_class_set_metadata (gstelement_class, "RTP ASF payloader", + gst_element_class_set_static_metadata (gstelement_class, "RTP ASF payloader", "Codec/Payloader/Network", "Payload-encodes ASF into RTP packets (MS_RTSP)", "Thiago Santos <thiagoss@embedded.ufcg.edu.br>"); diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in index 5817aafd..4f225f2f 100644 --- a/gst/audiovisualizers/Makefile.in +++ b/gst/audiovisualizers/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c index 355d75d9..68e990e1 100644 --- a/gst/audiovisualizers/gstspacescope.c +++ b/gst/audiovisualizers/gstspacescope.c @@ -126,7 +126,7 @@ gst_space_scope_class_init (GstSpaceScopeClass * g_class) GstElementClass *element_class = (GstElementClass *) g_class; GstAudioVisualizerClass *scope_class = (GstAudioVisualizerClass *) g_class; - gst_element_class_set_metadata (element_class, "Stereo visualizer", + gst_element_class_set_static_metadata (element_class, "Stereo visualizer", "Visualization", "Simple stereo visualizer", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c index 10328e39..d4082981 100644 --- a/gst/audiovisualizers/gstspectrascope.c +++ b/gst/audiovisualizers/gstspectrascope.c @@ -82,7 +82,7 @@ gst_spectra_scope_class_init (GstSpectraScopeClass * g_class) gobject_class->finalize = gst_spectra_scope_finalize; - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Frequency spectrum scope", "Visualization", "Simple frequency spectrum scope", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c index ba0592f6..abd5f85e 100644 --- a/gst/audiovisualizers/gstsynaescope.c +++ b/gst/audiovisualizers/gstsynaescope.c @@ -81,7 +81,7 @@ gst_synae_scope_class_init (GstSynaeScopeClass * g_class) gobject_class->finalize = gst_synae_scope_finalize; - gst_element_class_set_metadata (element_class, "Synaescope", + gst_element_class_set_static_metadata (element_class, "Synaescope", "Visualization", "Creates video visualizations of audio input, using stereo and pitch information", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c index dfa17d9d..d71e8738 100644 --- a/gst/audiovisualizers/gstwavescope.c +++ b/gst/audiovisualizers/gstwavescope.c @@ -141,7 +141,7 @@ gst_wave_scope_class_init (GstWaveScopeClass * g_class) GST_TYPE_WAVE_SCOPE_STYLE, STYLE_DOTS, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Waveform oscilloscope", "Visualization", "Simple waveform oscilloscope", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in index 5524241c..0197ffd8 100644 --- a/gst/autoconvert/Makefile.in +++ b/gst/autoconvert/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c index 5b11042a..ae0170d5 100644 --- a/gst/autoconvert/gstautoconvert.c +++ b/gst/autoconvert/gstautoconvert.c @@ -160,7 +160,7 @@ gst_auto_convert_class_init (GstAutoConvertClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Select convertor based on caps", "Generic/Bin", "Selects the right transform element based on the caps", "Olivier Crete <olivier.crete@collabora.com>"); diff --git a/gst/autoconvert/gstautovideoconvert.c b/gst/autoconvert/gstautovideoconvert.c index 84177ee9..00dc15b3 100644 --- a/gst/autoconvert/gstautovideoconvert.c +++ b/gst/autoconvert/gstautovideoconvert.c @@ -145,7 +145,7 @@ gst_auto_video_convert_class_init (GstAutoVideoConvertClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Select color space convertor based on caps", "Generic/Bin", "Selects the right color space convertor based on the caps", "Benjamin Gaignard <benjamin.gaignard@stericsson.com>"); diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in index 2a026805..987c0fce 100644 --- a/gst/bayer/Makefile.in +++ b/gst/bayer/Makefile.in @@ -274,6 +274,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ # orc-generated code creates warnings diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c index 35a3e726..53417733 100644 --- a/gst/bayer/gstbayer2rgb.c +++ b/gst/bayer/gstbayer2rgb.c @@ -169,7 +169,7 @@ gst_bayer2rgb_class_init (GstBayer2RGBClass * klass) gobject_class->set_property = gst_bayer2rgb_set_property; gobject_class->get_property = gst_bayer2rgb_get_property; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Bayer to RGB decoder for cameras", "Filter/Converter/Video", "Converts video/x-bayer to video/x-raw", "William Brack <wbrack@mmm.com.hk>"); diff --git a/gst/bayer/gstrgb2bayer.c b/gst/bayer/gstrgb2bayer.c index 6810069a..4cb33031 100644 --- a/gst/bayer/gstrgb2bayer.c +++ b/gst/bayer/gstrgb2bayer.c @@ -92,7 +92,7 @@ gst_rgb2bayer_class_init (GstRGB2BayerClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rgb2bayer_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "RGB to Bayer converter", "Filter/Converter/Video", "Converts video/x-raw to video/x-bayer", diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in index 9ba4f9df..42361b2c 100644 --- a/gst/camerabin2/Makefile.in +++ b/gst/camerabin2/Makefile.in @@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 53a4e1c0..2550def4 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -617,7 +617,7 @@ gst_camera_bin_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Camera Bin", + gst_element_class_set_static_metadata (element_class, "Camera Bin", "Generic/Bin/Camera", "Take image snapshots and record movies from camera", "Thiago Santos <thiago.sousa.santos@collabora.co.uk>"); diff --git a/gst/camerabin2/gstviewfinderbin.c b/gst/camerabin2/gstviewfinderbin.c index a5fb7607..c2580f62 100644 --- a/gst/camerabin2/gstviewfinderbin.c +++ b/gst/camerabin2/gstviewfinderbin.c @@ -125,7 +125,7 @@ gst_viewfinder_bin_class_init (GstViewfinderBinClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "Viewfinder Bin", + gst_element_class_set_static_metadata (element_class, "Viewfinder Bin", "Sink/Video", "Viewfinder Bin used in camerabin2", "Thiago Santos <thiago.sousa.santos@collabora.com>"); } diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index 3c70bfbe..002b7e59 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -1231,7 +1231,7 @@ gst_wrapper_camera_bin_src_class_init (GstWrapperCameraBinSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&vidsrc_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Wrapper camera src element for camerabin2", "Source/Video", "Wrapper camera src element for camerabin2", "Thiago Santos <thiago.sousa.santos@collabora.com>"); diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in index 82a56896..4df212df 100644 --- a/gst/cdxaparse/Makefile.in +++ b/gst/cdxaparse/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/cdxaparse/gstcdxaparse.c b/gst/cdxaparse/gstcdxaparse.c index ffecf975..106c9e93 100644 --- a/gst/cdxaparse/gstcdxaparse.c +++ b/gst/cdxaparse/gstcdxaparse.c @@ -70,7 +70,7 @@ gst_cdxa_parse_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "(S)VCD parser", + gst_element_class_set_static_metadata (element_class, "(S)VCD parser", "Codec/Parser", "Parse a .dat file from (S)VCD into raw MPEG-1", "Wim Taymans <wim.taymans@tvd.be>"); diff --git a/gst/cdxaparse/gstvcdparse.c b/gst/cdxaparse/gstvcdparse.c index 497eae22..8b19eac5 100644 --- a/gst/cdxaparse/gstvcdparse.c +++ b/gst/cdxaparse/gstvcdparse.c @@ -60,7 +60,7 @@ gst_vcd_parse_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_set_metadata (element_class, "(S)VCD stream parser", + gst_element_class_set_static_metadata (element_class, "(S)VCD stream parser", "Codec/Parser", "Strip (S)VCD stream from its sync headers", "Tim-Philipp Müller <tim centricular net>, " "Ronald Bultje <rbultje@ronald.bitfreak.net>"); diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in index c4fff468..a5f12aa5 100644 --- a/gst/coloreffects/Makefile.in +++ b/gst/coloreffects/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/coloreffects/gstchromahold.c b/gst/coloreffects/gstchromahold.c index baf24be0..ffe1e173 100644 --- a/gst/coloreffects/gstchromahold.c +++ b/gst/coloreffects/gstchromahold.c @@ -154,7 +154,7 @@ gst_chroma_hold_class_init (GstChromaHoldClass * klass) GST_DEBUG_FUNCPTR (gst_chroma_hold_transform_frame_ip); vfilter_class->set_info = GST_DEBUG_FUNCPTR (gst_chroma_hold_set_info); - gst_element_class_set_metadata (gstelement_class, "Chroma hold filter", + gst_element_class_set_static_metadata (gstelement_class, "Chroma hold filter", "Filter/Effect/Video", "Removes all color information except for one color", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/gst/coloreffects/gstcoloreffects.c b/gst/coloreffects/gstcoloreffects.c index a4c0e8d0..011eef81 100644 --- a/gst/coloreffects/gstcoloreffects.c +++ b/gst/coloreffects/gstcoloreffects.c @@ -585,7 +585,7 @@ gst_color_effects_class_init (GstColorEffectsClass * klass) vfilter_class->transform_frame_ip = GST_DEBUG_FUNCPTR (gst_color_effects_transform_frame_ip); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Color Look-up Table filter", "Filter/Effect/Video", "Color Look-up Table filter", "Filippo Argiolas <filippo.argiolas@gmail.com>"); diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in index 782ace85..273690e6 100644 --- a/gst/dataurisrc/Makefile.in +++ b/gst/dataurisrc/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/dataurisrc/gstdataurisrc.c b/gst/dataurisrc/gstdataurisrc.c index 2c80a6c4..4b145582 100644 --- a/gst/dataurisrc/gstdataurisrc.c +++ b/gst/dataurisrc/gstdataurisrc.c @@ -101,7 +101,7 @@ gst_data_uri_src_class_init (GstDataURISrcClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "data: URI source element", "Source", "Handles data: uris", "Philippe Normand <pnormand@igalia.com>, " "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in index 619c6a12..8b349258 100644 --- a/gst/dccp/Makefile.in +++ b/gst/dccp/Makefile.in @@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/dccp/gstdccpclientsink.c b/gst/dccp/gstdccpclientsink.c index f680e12d..2553a317 100644 --- a/gst/dccp/gstdccpclientsink.c +++ b/gst/dccp/gstdccpclientsink.c @@ -242,7 +242,7 @@ gst_dccp_client_sink_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (element_class, "DCCP client sink", + gst_element_class_set_static_metadata (element_class, "DCCP client sink", "Sink/Network", "Send data as a client over the network via DCCP", "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>"); diff --git a/gst/dccp/gstdccpclientsrc.c b/gst/dccp/gstdccpclientsrc.c index 24c49b8c..8f1da06c 100644 --- a/gst/dccp/gstdccpclientsrc.c +++ b/gst/dccp/gstdccpclientsrc.c @@ -275,7 +275,7 @@ gst_dccp_client_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (element_class, "DCCP client source", + gst_element_class_set_static_metadata (element_class, "DCCP client source", "Source/Network", "Receive data as a client over the network via DCCP", "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>"); diff --git a/gst/dccp/gstdccpserversink.c b/gst/dccp/gstdccpserversink.c index ac39bb85..37157ecf 100644 --- a/gst/dccp/gstdccpserversink.c +++ b/gst/dccp/gstdccpserversink.c @@ -339,7 +339,7 @@ gst_dccp_server_sink_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (element_class, "DCCP server sink", + gst_element_class_set_static_metadata (element_class, "DCCP server sink", "Sink/Network", "Send data as a server over the network via DCCP", "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>"); diff --git a/gst/dccp/gstdccpserversrc.c b/gst/dccp/gstdccpserversrc.c index 512d8883..1cbaecbb 100644 --- a/gst/dccp/gstdccpserversrc.c +++ b/gst/dccp/gstdccpserversrc.c @@ -265,7 +265,7 @@ gst_dccp_server_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (element_class, "DCCP server source", + gst_element_class_set_static_metadata (element_class, "DCCP server source", "Source/Network", "Receive data as a server over the network via DCCP", "E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>"); diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in index df9e44ba..6655d916 100644 --- a/gst/debugutils/Makefile.in +++ b/gst/debugutils/Makefile.in @@ -270,6 +270,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c index 79c6f80e..4a435154 100644 --- a/gst/debugutils/fpsdisplaysink.c +++ b/gst/debugutils/fpsdisplaysink.c @@ -28,7 +28,7 @@ * gst-launch videotestsrc ! fpsdisplaysink * gst-launch videotestsrc ! fpsdisplaysink text-overlay=false * gst-launch filesrc location=video.avi ! decodebin2 name=d ! queue ! fpsdisplaysink d. ! queue ! fakesink sync=true - * gst-launch playbin2 uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink + * gst-launch playbin uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink * ]| * </refsect2> */ @@ -207,7 +207,7 @@ fps_display_sink_class_init (GstFPSDisplaySinkClass * klass) gst_element_class_add_pad_template (gstelement_klass, gst_static_pad_template_get (&fps_display_sink_template)); - gst_element_class_set_metadata (gstelement_klass, + gst_element_class_set_static_metadata (gstelement_klass, "Measure and show framerate on videosink", "Sink/Video", "Shows the current frame-rate and drop-rate of the videosink as overlay or text on stdout", "Zeeshan Ali <zeeshan.ali@nokia.com>, Stefan Kost <stefan.kost@nokia.com>"); diff --git a/gst/debugutils/gstchecksumsink.c b/gst/debugutils/gstchecksumsink.c index bce8d4b4..90528bf3 100644 --- a/gst/debugutils/gstchecksumsink.c +++ b/gst/debugutils/gstchecksumsink.c @@ -68,7 +68,7 @@ gst_checksum_sink_class_init (GstChecksumSinkClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_checksum_sink_sink_template)); - gst_element_class_set_metadata (element_class, "Checksum sink", + gst_element_class_set_static_metadata (element_class, "Checksum sink", "Debug/Sink", "Calculates a checksum for buffers", "David Schleef <ds@schleef.org>"); } diff --git a/gst/debugutils/gstchopmydata.c b/gst/debugutils/gstchopmydata.c index d91c4082..739ea72a 100644 --- a/gst/debugutils/gstchopmydata.c +++ b/gst/debugutils/gstchopmydata.c @@ -126,7 +126,7 @@ gst_chop_my_data_class_init (GstChopMyDataClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_chop_my_data_sink_template)); - gst_element_class_set_metadata (element_class, "FIXME", + gst_element_class_set_static_metadata (element_class, "FIXME", "Generic", "FIXME", "David Schleef <ds@schleef.org>"); } diff --git a/gst/debugutils/gstcompare.c b/gst/debugutils/gstcompare.c index 2581a3ca..a6f51a7a 100644 --- a/gst/debugutils/gstcompare.c +++ b/gst/debugutils/gstcompare.c @@ -176,7 +176,7 @@ gst_compare_class_init (GstCompareClass * klass) gst_static_pad_template_get (&sink_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&check_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Compare buffers", + gst_element_class_set_static_metadata (gstelement_class, "Compare buffers", "Filter/Debug", "Compares incoming buffers", "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>"); } diff --git a/gst/debugutils/gstdebugspy.c b/gst/debugutils/gstdebugspy.c index 413853c2..21c1609e 100644 --- a/gst/debugutils/gstdebugspy.c +++ b/gst/debugutils/gstdebugspy.c @@ -133,7 +133,7 @@ gst_debug_spy_class_init (GstDebugSpyClass * klass) "Checksum algorithm to use", GST_DEBUG_SPY_CHECKSUM_TYPE, G_CHECKSUM_SHA1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "DebugSpy", "Filter/Analyzer/Debug", "DebugSpy provides information on buffers with bus messages", diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in index 0f3a682a..84a5aa06 100644 --- a/gst/dtmf/Makefile.in +++ b/gst/dtmf/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/dtmf/gstdtmfdetect.c b/gst/dtmf/gstdtmfdetect.c index 073959ec..827e68d3 100644 --- a/gst/dtmf/gstdtmfdetect.c +++ b/gst/dtmf/gstdtmfdetect.c @@ -123,8 +123,8 @@ gst_dtmf_detect_class_init (GstDtmfDetectClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, "DTMF detector element", - "Filter/Analyzer/Audio", + gst_element_class_set_static_metadata (gstelement_class, + "DTMF detector element", "Filter/Analyzer/Audio", "This element detects DTMF tones", "Olivier Crete <olivier.crete@collabora.com>"); diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c index 18c7ebb6..df45223c 100644 --- a/gst/dtmf/gstdtmfsrc.c +++ b/gst/dtmf/gstdtmfsrc.c @@ -253,9 +253,8 @@ gst_dtmf_src_class_init (GstDTMFSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_dtmf_src_template)); - gst_element_class_set_metadata (gstelement_class, "DTMF tone generator", - "Source/Audio", - "Generates DTMF tones", + gst_element_class_set_static_metadata (gstelement_class, + "DTMF tone generator", "Source/Audio", "Generates DTMF tones", "Youness Alaoui <youness.alaoui@collabora.co.uk>"); diff --git a/gst/dtmf/gstrtpdtmfdepay.c b/gst/dtmf/gstrtpdtmfdepay.c index 12422ecb..74df649f 100644 --- a/gst/dtmf/gstrtpdtmfdepay.c +++ b/gst/dtmf/gstrtpdtmfdepay.c @@ -228,7 +228,7 @@ gst_rtp_dtmf_depay_class_init (GstRtpDTMFDepayClass * klass) GST_DEBUG_CATEGORY_INIT (gst_rtp_dtmf_depay_debug, "rtpdtmfdepay", 0, "rtpdtmfdepay element"); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "RTP DTMF packet depayloader", "Codec/Depayloader/Network", "Generates DTMF Sound from telephone-event RTP packets", "Youness Alaoui <youness.alaoui@collabora.co.uk>"); diff --git a/gst/dtmf/gstrtpdtmfsrc.c b/gst/dtmf/gstrtpdtmfsrc.c index a078a111..be71ebd4 100644 --- a/gst/dtmf/gstrtpdtmfsrc.c +++ b/gst/dtmf/gstrtpdtmfsrc.c @@ -216,7 +216,7 @@ gst_rtp_dtmf_src_class_init (GstRTPDTMFSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_rtp_dtmf_src_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "RTP DTMF packet generator", "Source/Network", "Generates RTP DTMF packets", "Zeeshan Ali <zeeshan.ali@nokia.com>"); diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in index 33d6eedd..83847b28 100644 --- a/gst/dvbsuboverlay/Makefile.in +++ b/gst/dvbsuboverlay/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c index e6241f0d..3f4aaff1 100644 --- a/gst/dvbsuboverlay/gstdvbsuboverlay.c +++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c @@ -158,7 +158,7 @@ gst_dvbsub_overlay_class_init (GstDVBSubOverlayClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&text_sink_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "DVB Subtitles Overlay", "Mixer/Video/Overlay/Subtitle", "Renders DVB subtitles", "Mart Raudsepp <mart.raudsepp@collabora.co.uk>"); diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in index a5c9d681..8b7e1e0e 100644 --- a/gst/dvdspu/Makefile.in +++ b/gst/dvdspu/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c index b64cbd3a..7af06089 100644 --- a/gst/dvdspu/gstdvdspu.c +++ b/gst/dvdspu/gstdvdspu.c @@ -147,8 +147,8 @@ gst_dvd_spu_class_init (GstDVDSpuClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&subpic_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "Sub-picture Overlay", - "Mixer/Video/Overlay/SubPicture/DVD/Bluray", + gst_element_class_set_static_metadata (gstelement_class, + "Sub-picture Overlay", "Mixer/Video/Overlay/SubPicture/DVD/Bluray", "Parses Sub-Picture command streams and renders the SPU overlay " "onto the video as it passes through", "Jan Schmidt <thaytan@noraisin.net>"); diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in index f14fde27..4254bcb2 100644 --- a/gst/faceoverlay/Makefile.in +++ b/gst/faceoverlay/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/faceoverlay/gstfaceoverlay.c b/gst/faceoverlay/gstfaceoverlay.c index 967787a9..0c0de837 100644 --- a/gst/faceoverlay/gstfaceoverlay.c +++ b/gst/faceoverlay/gstfaceoverlay.c @@ -280,7 +280,7 @@ gst_face_overlay_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "faceoverlay", "Filter/Editor/Video", "Overlays SVG graphics over a detected face in a video stream", diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in index e32f0308..bbe65011 100644 --- a/gst/festival/Makefile.in +++ b/gst/festival/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c index 0699fc4d..d379c830 100644 --- a/gst/festival/gstfestival.c +++ b/gst/festival/gstfestival.c @@ -168,7 +168,7 @@ G_DEFINE_TYPE (GstFestival, gst_festival, GST_TYPE_ELEMENT) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_template_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Festival Text-to-Speech synthesizer", "Filter/Effect/Audio", "Synthesizes plain text into audio", "Wim Taymans <wim.taymans@gmail.com>"); diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in index 66cf52f4..ecdd8359 100644 --- a/gst/fieldanalysis/Makefile.in +++ b/gst/fieldanalysis/Makefile.in @@ -278,6 +278,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/fieldanalysis/gstfieldanalysis.c b/gst/fieldanalysis/gstfieldanalysis.c index 09782599..0514747b 100644 --- a/gst/fieldanalysis/gstfieldanalysis.c +++ b/gst/fieldanalysis/gstfieldanalysis.c @@ -278,7 +278,7 @@ gst_field_analysis_class_init (GstFieldAnalysisClass * klass) gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_field_analysis_change_state); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Video field analysis", "Filter/Analysis/Video", "Analyse fields from video frames to identify if they are progressive/telecined/interlaced", @@ -792,11 +792,12 @@ gst_field_analysis_sink_event (GstPad * pad, GstObject * parent, break; } default: + forward = TRUE; break; } if (forward) { - ret = gst_pad_push_event (filter->srcpad, event); + ret = gst_pad_event_default (pad, parent, event); } return ret; diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in index cce7175c..7d67d3a8 100644 --- a/gst/freeverb/Makefile.in +++ b/gst/freeverb/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/freeverb/gstfreeverb.c b/gst/freeverb/gstfreeverb.c index 561306fa..b94d9ee4 100644 --- a/gst/freeverb/gstfreeverb.c +++ b/gst/freeverb/gstfreeverb.c @@ -408,7 +408,7 @@ gst_freeverb_base_init (gpointer klass) gst_static_pad_template_get (&src_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "Stereo positioning", + gst_element_class_set_static_metadata (element_class, "Stereo positioning", "Filter/Effect/Audio", "Reverberation/room effect", "Stefan Sauer <ensonic@users.sf.net>"); } diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in index d92a2219..39f849a6 100644 --- a/gst/frei0r/Makefile.in +++ b/gst/frei0r/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in index 3263c10b..377ebb3d 100644 --- a/gst/gaudieffects/Makefile.in +++ b/gst/gaudieffects/Makefile.in @@ -284,6 +284,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/gaudieffects/gstburn.c b/gst/gaudieffects/gstburn.c index 4fa8e1ad..d8cb35ae 100644 --- a/gst/gaudieffects/gstburn.c +++ b/gst/gaudieffects/gstburn.c @@ -134,7 +134,7 @@ gst_burn_class_init (GstBurnClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, "Burn", + gst_element_class_set_static_metadata (gstelement_class, "Burn", "Filter/Effect/Video", "Burn adjusts the colors in the video signal.", "Luis de Bethencourt <luis@debethencourt.com>"); diff --git a/gst/gaudieffects/gstchromium.c b/gst/gaudieffects/gstchromium.c index b4f21776..0aba0eae 100644 --- a/gst/gaudieffects/gstchromium.c +++ b/gst/gaudieffects/gstchromium.c @@ -148,7 +148,7 @@ gst_chromium_class_init (GstChromiumClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, "Chromium", + gst_element_class_set_static_metadata (gstelement_class, "Chromium", "Filter/Effect/Video", "Chromium breaks the colors of the video signal.", "Luis de Bethencourt <luis@debethencourt.com>"); diff --git a/gst/gaudieffects/gstdilate.c b/gst/gaudieffects/gstdilate.c index 090df175..ab827b47 100644 --- a/gst/gaudieffects/gstdilate.c +++ b/gst/gaudieffects/gstdilate.c @@ -135,7 +135,7 @@ gst_dilate_class_init (GstDilateClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Dilate", "Filter/Effect/Video", "Dilate copies the brightest pixel around.", diff --git a/gst/gaudieffects/gstdodge.c b/gst/gaudieffects/gstdodge.c index 3a5b9f0e..6847c333 100644 --- a/gst/gaudieffects/gstdodge.c +++ b/gst/gaudieffects/gstdodge.c @@ -130,7 +130,7 @@ gst_dodge_class_init (GstDodgeClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Dodge", "Filter/Effect/Video", "Dodge saturates the colors in the video signal.", diff --git a/gst/gaudieffects/gstexclusion.c b/gst/gaudieffects/gstexclusion.c index f3c670ef..d2b8330c 100644 --- a/gst/gaudieffects/gstexclusion.c +++ b/gst/gaudieffects/gstexclusion.c @@ -136,7 +136,7 @@ gst_exclusion_class_init (GstExclusionClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, "Exclusion", + gst_element_class_set_static_metadata (gstelement_class, "Exclusion", "Filter/Effect/Video", "Exclusion exclodes the colors in the video signal.", "Luis de Bethencourt <luis@debethencourt.com>"); diff --git a/gst/gaudieffects/gstgaussblur.c b/gst/gaudieffects/gstgaussblur.c index a0f8b5bd..34b8dbe2 100644 --- a/gst/gaudieffects/gstgaussblur.c +++ b/gst/gaudieffects/gstgaussblur.c @@ -132,7 +132,7 @@ gst_gaussianblur_class_init (GstGaussianBlurClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "GstGaussianBlur", "Filter/Effect/Video", "Perform Gaussian blur/sharpen on a video", diff --git a/gst/gaudieffects/gstsolarize.c b/gst/gaudieffects/gstsolarize.c index 561fc4c3..26e53ae3 100644 --- a/gst/gaudieffects/gstsolarize.c +++ b/gst/gaudieffects/gstsolarize.c @@ -138,7 +138,7 @@ gst_solarize_class_init (GstSolarizeClass * klass) GstElementClass *gstelement_class = (GstElementClass *) klass; GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Solarize", "Filter/Effect/Video", "Solarize tunable inverse in the video signal.", diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in index f8bf112d..2c253b5e 100644 --- a/gst/gdp/Makefile.in +++ b/gst/gdp/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in index f99dae4e..4ef56798 100644 --- a/gst/geometrictransform/Makefile.in +++ b/gst/geometrictransform/Makefile.in @@ -272,6 +272,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/geometrictransform/gstbulge.c b/gst/geometrictransform/gstbulge.c index b26b6ade..cd96a5e5 100644 --- a/gst/geometrictransform/gstbulge.c +++ b/gst/geometrictransform/gstbulge.c @@ -176,7 +176,7 @@ gst_bulge_class_init (GstBulgeClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "bulge", "Transform/Effect/Video", "Adds a protuberance in the center point", diff --git a/gst/geometrictransform/gstcircle.c b/gst/geometrictransform/gstcircle.c index b5b32837..e31923f8 100644 --- a/gst/geometrictransform/gstcircle.c +++ b/gst/geometrictransform/gstcircle.c @@ -191,7 +191,7 @@ gst_circle_class_init (GstCircleClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "circle", "Transform/Effect/Video", "Warps the picture into an arc shaped form", diff --git a/gst/geometrictransform/gstdiffuse.c b/gst/geometrictransform/gstdiffuse.c index 547f655c..dcbea7b7 100644 --- a/gst/geometrictransform/gstdiffuse.c +++ b/gst/geometrictransform/gstdiffuse.c @@ -184,7 +184,7 @@ gst_diffuse_class_init (GstDiffuseClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "diffuse", "Transform/Effect/Video", "Diffuses the image by moving its pixels in random directions", diff --git a/gst/geometrictransform/gstfisheye.c b/gst/geometrictransform/gstfisheye.c index 910cdb27..bda896db 100644 --- a/gst/geometrictransform/gstfisheye.c +++ b/gst/geometrictransform/gstfisheye.c @@ -116,7 +116,7 @@ gst_fisheye_class_init (GstFisheyeClass * klass) gstgt_class = (GstGeometricTransformClass *) klass; parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "fisheye", "Transform/Effect/Video", "Split the image into two halves and reflect one over each other", diff --git a/gst/geometrictransform/gstkaleidoscope.c b/gst/geometrictransform/gstkaleidoscope.c index 482ca26a..2a50379a 100644 --- a/gst/geometrictransform/gstkaleidoscope.c +++ b/gst/geometrictransform/gstkaleidoscope.c @@ -196,7 +196,7 @@ gst_kaleidoscope_class_init (GstKaleidoscopeClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "kaleidoscope", "Transform/Effect/Video", "Applies 'kaleidoscope' geometric transform to the image", diff --git a/gst/geometrictransform/gstmarble.c b/gst/geometrictransform/gstmarble.c index 3f861a2c..299fdb0f 100644 --- a/gst/geometrictransform/gstmarble.c +++ b/gst/geometrictransform/gstmarble.c @@ -223,7 +223,7 @@ gst_marble_class_init (GstMarbleClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "marble", "Transform/Effect/Video", "Applies a marbling effect to the image", diff --git a/gst/geometrictransform/gstmirror.c b/gst/geometrictransform/gstmirror.c index c7bdcea2..3b40a43a 100644 --- a/gst/geometrictransform/gstmirror.c +++ b/gst/geometrictransform/gstmirror.c @@ -182,7 +182,7 @@ gst_mirror_class_init (GstMirrorClass * klass) gstelement_class = (GstElementClass *) klass; gstgt_class = (GstGeometricTransformClass *) klass; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "mirror", "Transform/Effect/Video", "Split the image into two halves and reflect one over each other", diff --git a/gst/geometrictransform/gstpinch.c b/gst/geometrictransform/gstpinch.c index a42d18a9..2bf90e01 100644 --- a/gst/geometrictransform/gstpinch.c +++ b/gst/geometrictransform/gstpinch.c @@ -177,7 +177,7 @@ gst_pinch_class_init (GstPinchClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "pinch", "Transform/Effect/Video", "Applies 'pinch' geometric transform to the image", diff --git a/gst/geometrictransform/gstrotate.c b/gst/geometrictransform/gstrotate.c index d4fbbc02..5780c0e7 100644 --- a/gst/geometrictransform/gstrotate.c +++ b/gst/geometrictransform/gstrotate.c @@ -185,7 +185,7 @@ gst_rotate_class_init (GstRotateClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "rotate", "Transform/Effect/Video", "Rotates the picture by an arbitrary angle", diff --git a/gst/geometrictransform/gstsphere.c b/gst/geometrictransform/gstsphere.c index 340a20e0..b78f972b 100644 --- a/gst/geometrictransform/gstsphere.c +++ b/gst/geometrictransform/gstsphere.c @@ -189,7 +189,7 @@ gst_sphere_class_init (GstSphereClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "sphere", "Transform/Effect/Video", "Applies 'sphere' geometric transform to the image", diff --git a/gst/geometrictransform/gstsquare.c b/gst/geometrictransform/gstsquare.c index f6ee9a5d..1915b2a7 100644 --- a/gst/geometrictransform/gstsquare.c +++ b/gst/geometrictransform/gstsquare.c @@ -187,7 +187,7 @@ gst_square_class_init (GstSquareClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "square", "Transform/Effect/Video", "Distort center part of the image into a square", diff --git a/gst/geometrictransform/gststretch.c b/gst/geometrictransform/gststretch.c index 093b50e5..770aae58 100644 --- a/gst/geometrictransform/gststretch.c +++ b/gst/geometrictransform/gststretch.c @@ -178,7 +178,7 @@ gst_stretch_class_init (GstStretchClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "stretch", "Transform/Effect/Video", "Stretch the image in a circle around the center point", diff --git a/gst/geometrictransform/gsttunnel.c b/gst/geometrictransform/gsttunnel.c index 28f68fdf..9685fd5c 100644 --- a/gst/geometrictransform/gsttunnel.c +++ b/gst/geometrictransform/gsttunnel.c @@ -116,7 +116,7 @@ gst_tunnel_class_init (GstTunnelClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "tunnel", "Transform/Effect/Video", "Light tunnel effect", "Filippo Argiolas <filippo.argiolas@gmail.com>"); diff --git a/gst/geometrictransform/gsttwirl.c b/gst/geometrictransform/gsttwirl.c index f4a4eee8..a5ea99e1 100644 --- a/gst/geometrictransform/gsttwirl.c +++ b/gst/geometrictransform/gsttwirl.c @@ -167,7 +167,7 @@ gst_twirl_class_init (GstTwirlClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "twirl", "Transform/Effect/Video", "Twists the image from the center out", diff --git a/gst/geometrictransform/gstwaterripple.c b/gst/geometrictransform/gstwaterripple.c index cebe4209..ac902266 100644 --- a/gst/geometrictransform/gstwaterripple.c +++ b/gst/geometrictransform/gstwaterripple.c @@ -197,7 +197,7 @@ gst_water_ripple_class_init (GstWaterRippleClass * klass) parent_class = g_type_class_peek_parent (klass); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "waterripple", "Transform/Effect/Video", "Creates a water ripple effect on the image", diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in index 4bf9826d..b221eea6 100644 --- a/gst/hdvparse/Makefile.in +++ b/gst/hdvparse/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/hdvparse/gsthdvparse.c b/gst/hdvparse/gsthdvparse.c index 018722fc..8f0d4fcb 100644 --- a/gst/hdvparse/gsthdvparse.c +++ b/gst/hdvparse/gsthdvparse.c @@ -120,7 +120,7 @@ gst_hdvparse_base_init (gpointer klass) gst_static_pad_template_get (&src_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "HDVParser", + gst_element_class_set_static_metadata (element_class, "HDVParser", "Data/Parser", "HDV private stream Parser", "Edward Hervey <bilboed@bilboed.com>"); } diff --git a/gst/hls/Makefile.am b/gst/hls/Makefile.am index e5161174..4f2b9070 100644 --- a/gst/hls/Makefile.am +++ b/gst/hls/Makefile.am @@ -13,7 +13,7 @@ libgstfragmented_la_SOURCES = \ libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) $(GIO_CFLAGS) # $(GST_PLUGINS_BAD_CFLAGS) -lgstpbutils-$(GST_MAJORMINOR) -lgstvideo-$(GST_MAJORMINOR) -libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) +libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) $(LIBM) libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/gst/hls/Makefile.in b/gst/hls/Makefile.in index 70af7457..9f2a0d81 100644 --- a/gst/hls/Makefile.in +++ b/gst/hls/Makefile.in @@ -128,7 +128,8 @@ am__installdirs = "$(DESTDIR)$(plugindir)" LTLIBRARIES = $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = libgstfragmented_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) am_libgstfragmented_la_OBJECTS = libgstfragmented_la-m3u8.lo \ libgstfragmented_la-gsthlsdemux.lo \ libgstfragmented_la-gstfragment.lo \ @@ -254,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -626,7 +629,7 @@ libgstfragmented_la_SOURCES = \ libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) $(GIO_CFLAGS) # $(GST_PLUGINS_BAD_CFLAGS) -lgstpbutils-$(GST_MAJORMINOR) -lgstvideo-$(GST_MAJORMINOR) -libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) +libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) $(LIBM) libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c index 5c9ec6be..52816526 100644 --- a/gst/hls/gsthlsdemux.c +++ b/gst/hls/gsthlsdemux.c @@ -102,6 +102,7 @@ static gboolean gst_hls_demux_src_query (GstPad * pad, GstObject * parent, static void gst_hls_demux_stream_loop (GstHLSDemux * demux); static void gst_hls_demux_updates_loop (GstHLSDemux * demux); static void gst_hls_demux_stop (GstHLSDemux * demux); +static void gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching); static gboolean gst_hls_demux_cache_fragments (GstHLSDemux * demux); static gboolean gst_hls_demux_schedule (GstHLSDemux * demux); static gboolean gst_hls_demux_switch_playlist (GstHLSDemux * demux); @@ -126,6 +127,8 @@ gst_hls_demux_dispose (GObject * obj) if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) { GST_DEBUG_OBJECT (demux, "Leaving streaming task"); gst_task_stop (demux->stream_task); + g_rec_mutex_lock (&demux->stream_lock); + g_rec_mutex_unlock (&demux->stream_lock); gst_task_join (demux->stream_task); } gst_object_unref (demux->stream_task); @@ -136,7 +139,14 @@ gst_hls_demux_dispose (GObject * obj) if (demux->updates_task) { if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) { GST_DEBUG_OBJECT (demux, "Leaving updates task"); + demux->cancelled = TRUE; + gst_uri_downloader_cancel (demux->downloader); gst_task_stop (demux->updates_task); + g_mutex_lock (&demux->updates_timed_lock); + GST_TASK_SIGNAL (demux->updates_task); + g_rec_mutex_lock (&demux->updates_lock); + g_rec_mutex_unlock (&demux->updates_lock); + g_mutex_unlock (&demux->updates_timed_lock); gst_task_join (demux->updates_task); } gst_object_unref (demux->updates_task); @@ -197,7 +207,7 @@ gst_hls_demux_class_init (GstHLSDemuxClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "HLS Demuxer", "Demuxer/URIList", "HTTP Live Streaming demuxer", @@ -315,7 +325,15 @@ gst_hls_demux_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: + demux->cancelled = TRUE; + gst_uri_downloader_cancel (demux->downloader); gst_task_stop (demux->updates_task); + g_mutex_lock (&demux->updates_timed_lock); + GST_TASK_SIGNAL (demux->updates_task); + g_mutex_unlock (&demux->updates_timed_lock); + g_rec_mutex_lock (&demux->updates_lock); + g_rec_mutex_unlock (&demux->updates_lock); + demux->cancelled = FALSE; break; case GST_STATE_CHANGE_PAUSED_TO_READY: demux->cancelled = TRUE; @@ -397,6 +415,11 @@ gst_hls_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_task_pause (demux->stream_task); gst_uri_downloader_cancel (demux->downloader); gst_task_stop (demux->updates_task); + g_mutex_lock (&demux->updates_timed_lock); + GST_TASK_SIGNAL (demux->updates_task); + g_mutex_unlock (&demux->updates_timed_lock); + g_rec_mutex_lock (&demux->updates_lock); + g_rec_mutex_unlock (&demux->updates_lock); gst_task_pause (demux->stream_task); /* wait for streaming to finish */ @@ -584,18 +607,47 @@ gst_hls_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) } static void +gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching) +{ + if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) { + demux->cancelled = TRUE; + gst_uri_downloader_cancel (demux->downloader); + gst_task_pause (demux->updates_task); + if (!caching) + g_mutex_lock (&demux->updates_timed_lock); + GST_TASK_SIGNAL (demux->updates_task); + if (!caching) + g_mutex_unlock (&demux->updates_timed_lock); + } + + if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) { + demux->stop_stream_task = TRUE; + gst_task_pause (demux->stream_task); + } +} + +static void gst_hls_demux_stop (GstHLSDemux * demux) { gst_uri_downloader_cancel (demux->downloader); if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) { - demux->stop_stream_task = TRUE; + demux->cancelled = TRUE; + gst_uri_downloader_cancel (demux->downloader); gst_task_stop (demux->updates_task); + g_mutex_lock (&demux->updates_timed_lock); GST_TASK_SIGNAL (demux->updates_task); + g_mutex_unlock (&demux->updates_timed_lock); + g_rec_mutex_lock (&demux->updates_lock); + g_rec_mutex_unlock (&demux->updates_lock); } - if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) + if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) { + demux->stop_stream_task = TRUE; gst_task_stop (demux->stream_task); + g_rec_mutex_lock (&demux->stream_lock); + g_rec_mutex_unlock (&demux->stream_lock); + } } static void @@ -709,7 +761,7 @@ end_of_playlist: { GST_DEBUG_OBJECT (demux, "Reached end of playlist, sending EOS"); gst_pad_push_event (demux->srcpad, gst_event_new_eos ()); - gst_hls_demux_stop (demux); + gst_hls_demux_pause_tasks (demux, FALSE); return; } @@ -719,17 +771,22 @@ cache_error: if (!demux->cancelled) { GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND, ("Could not cache the first fragments"), (NULL)); - gst_hls_demux_stop (demux); + gst_hls_demux_pause_tasks (demux, FALSE); } return; } error_pushing: { - /* FIXME: handle error */ - GST_DEBUG_OBJECT (demux, "Error pushing buffer: %s... stopping task", - gst_flow_get_name (ret)); - gst_hls_demux_stop (demux); + if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) { + GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL), + ("stream stopped, reason %s", gst_flow_get_name (ret))); + gst_pad_push_event (demux->srcpad, gst_event_new_eos ()); + } else { + GST_DEBUG_OBJECT (demux, "stream stopped, reason %s", + gst_flow_get_name (ret)); + } + gst_hls_demux_pause_tasks (demux, FALSE); return; } @@ -800,6 +857,9 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) g_mutex_lock (&demux->updates_timed_lock); GST_DEBUG_OBJECT (demux, "Started updates task"); while (TRUE) { + if (demux->cancelled) + goto quit; + /* schedule the next update */ gst_hls_demux_schedule (demux); @@ -808,9 +868,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) &demux->updates_timed_lock, &demux->next_update)) { goto quit; } + + if (demux->cancelled) + goto quit; + /* update the playlist for live sources */ if (gst_m3u8_client_is_live (demux->client)) { if (!gst_hls_demux_update_playlist (demux, TRUE)) { + if (demux->cancelled) + goto quit; demux->client->update_failed_count++; if (demux->client->update_failed_count < DEFAULT_FAILED_COUNT) { GST_WARNING_OBJECT (demux, "Could not update the playlist"); @@ -818,7 +884,7 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) } else { GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND, ("Could not update the playlist"), (NULL)); - goto quit; + goto error; } } } @@ -834,10 +900,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) continue; } + if (demux->cancelled) + goto quit; + /* fetch the next fragment */ if (g_queue_is_empty (demux->queue)) { if (!gst_hls_demux_get_next_fragment (demux, FALSE)) { - if (!demux->end_of_playlist && !demux->cancelled) { + if (demux->cancelled) { + goto quit; + } else if (!demux->end_of_playlist && !demux->cancelled) { demux->client->update_failed_count++; if (demux->client->update_failed_count < DEFAULT_FAILED_COUNT) { GST_WARNING_OBJECT (demux, "Could not fetch the next fragment"); @@ -845,12 +916,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) } else { GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND, ("Could not fetch the next fragment"), (NULL)); - goto quit; + goto error; } } } else { demux->client->update_failed_count = 0; + if (demux->cancelled) + goto quit; + /* try to switch to another bitrate if needed */ gst_hls_demux_switch_playlist (demux); } @@ -860,7 +934,14 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux) quit: { GST_DEBUG_OBJECT (demux, "Stopped updates task"); - gst_hls_demux_stop (demux); + g_mutex_unlock (&demux->updates_timed_lock); + return; + } + +error: + { + GST_DEBUG_OBJECT (demux, "Stopped updates task because of error"); + gst_hls_demux_pause_tasks (demux, TRUE); g_mutex_unlock (&demux->updates_timed_lock); } } @@ -947,7 +1028,7 @@ gst_hls_src_buf_to_utf8_playlist (GstBuffer * buf) /* alloc size + 1 to end with a null character */ playlist = g_malloc0 (info.size + 1); - memcpy (playlist, info.data, info.size + 1); + memcpy (playlist, info.data, info.size); gst_buffer_unmap (buf, &info); gst_buffer_unref (buf); diff --git a/gst/hls/gsturidownloader.c b/gst/hls/gsturidownloader.c index 1ef7ddb1..7e95ec02 100644 --- a/gst/hls/gsturidownloader.c +++ b/gst/hls/gsturidownloader.c @@ -167,7 +167,9 @@ gst_uri_downloader_sink_event (GstPad * pad, GstObject * parent, gst_util_get_timestamp (); GST_OBJECT_UNLOCK (downloader); GST_DEBUG_OBJECT (downloader, "Signaling chain funtion"); + g_mutex_lock (&downloader->priv->lock); g_cond_signal (&downloader->priv->cond); + g_mutex_unlock (&downloader->priv->lock); } else { GST_OBJECT_UNLOCK (downloader); } @@ -271,7 +273,9 @@ gst_uri_downloader_cancel (GstUriDownloader * downloader) downloader->priv->download = NULL; GST_OBJECT_UNLOCK (downloader); GST_DEBUG_OBJECT (downloader, "Signaling chain funtion"); + g_mutex_lock (&downloader->priv->lock); g_cond_signal (&downloader->priv->cond); + g_mutex_unlock (&downloader->priv->lock); } else { GST_OBJECT_UNLOCK (downloader); GST_DEBUG_OBJECT (downloader, diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in index 34c51ab7..6f840c06 100644 --- a/gst/id3tag/Makefile.in +++ b/gst/id3tag/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c index 68d50e51..f741f731 100644 --- a/gst/id3tag/gstid3mux.c +++ b/gst/id3tag/gstid3mux.c @@ -123,7 +123,7 @@ gst_id3_mux_class_init (GstId3MuxClass * klass) GST_TAG_MUX_CLASS (klass)->render_end_tag = GST_DEBUG_FUNCPTR (gst_id3_mux_render_v1_tag); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "ID3 v1 and v2 Muxer", "Formatter/Metadata", "Adds an ID3v2 header and ID3v1 footer to a file", "Michael Smith <msmith@songbirdnest.com>, " diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in index e1e1542d..f0a789cf 100644 --- a/gst/inter/Makefile.in +++ b/gst/inter/Makefile.in @@ -267,6 +267,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c index 44394159..9cd82d67 100644 --- a/gst/inter/gstinteraudiosink.c +++ b/gst/inter/gstinteraudiosink.c @@ -100,7 +100,7 @@ gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_audio_sink_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal audio sink", "Sink/Audio", "Virtual audio sink for internal process communication", diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c index d30c27d1..3e55be26 100644 --- a/gst/inter/gstinteraudiosrc.c +++ b/gst/inter/gstinteraudiosrc.c @@ -105,7 +105,7 @@ gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_audio_src_src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal audio source", "Source/Audio", "Virtual audio source for internal process communication", diff --git a/gst/inter/gstintersubsink.c b/gst/inter/gstintersubsink.c index 7ead62cb..a5d669bd 100644 --- a/gst/inter/gstintersubsink.c +++ b/gst/inter/gstintersubsink.c @@ -94,7 +94,7 @@ gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_sub_sink_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal subtitle sink", "Sink/Subtitle", "Virtual subtitle sink for internal process communication", diff --git a/gst/inter/gstintersubsrc.c b/gst/inter/gstintersubsrc.c index 39cb6224..cb6a6caf 100644 --- a/gst/inter/gstintersubsrc.c +++ b/gst/inter/gstintersubsrc.c @@ -97,7 +97,7 @@ gst_inter_sub_src_class_init (GstInterSubSrcClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_sub_src_src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal subtitle source", "Source/Subtitle", "Virtual subtitle source for internal process communication", diff --git a/gst/inter/gstintertest.c b/gst/inter/gstintertest.c index 077024ea..8b22477f 100644 --- a/gst/inter/gstintertest.c +++ b/gst/inter/gstintertest.c @@ -157,7 +157,7 @@ gst_inter_test_create_pipeline_playbin (GstInterTest * intertest, pipeline = gst_pipeline_new (NULL); gst_bin_add (GST_BIN (pipeline), - gst_element_factory_make ("playbin2", "source")); + gst_element_factory_make ("playbin", "source")); if (error) { g_print ("pipeline parsing error: %s\n", error->message); diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c index 04b5a400..e892ca03 100644 --- a/gst/inter/gstintervideosink.c +++ b/gst/inter/gstintervideosink.c @@ -97,7 +97,7 @@ gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_video_sink_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal video sink", "Sink/Video", "Virtual video sink for internal process communication", diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c index 515ee4ee..bc6f7175 100644 --- a/gst/inter/gstintervideosrc.c +++ b/gst/inter/gstintervideosrc.c @@ -100,7 +100,7 @@ gst_inter_video_src_class_init (GstInterVideoSrcClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_video_src_src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Internal video source", "Source/Video", "Virtual video source for internal process communication", diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in index 39244dc6..151b16a8 100644 --- a/gst/interlace/Makefile.in +++ b/gst/interlace/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c index 63182f6a..6e0fcdb5 100644 --- a/gst/interlace/gstinterlace.c +++ b/gst/interlace/gstinterlace.c @@ -226,7 +226,7 @@ gst_interlace_class_init (GstInterlaceClass * klass) "Allow generation of buffers with RFF flag set, i.e., duration of 3 fields", FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Interlace filter", "Filter/Video", "Creates an interlaced video from progressive frames", "David Schleef <ds@schleef.org>"); diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in index af607196..7eed1810 100644 --- a/gst/ivfparse/Makefile.in +++ b/gst/ivfparse/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/ivfparse/gstivfparse.c b/gst/ivfparse/gstivfparse.c index 6c04a661..21b79e68 100644 --- a/gst/ivfparse/gstivfparse.c +++ b/gst/ivfparse/gstivfparse.c @@ -79,7 +79,7 @@ gst_ivf_parse_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "IVF parser", "Codec/Demuxer", "Demuxes a IVF stream", "Philip Jägenstedt <philipj@opera.com>"); diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in index a2f3c262..ccf0e7a1 100644 --- a/gst/jp2kdecimator/Makefile.in +++ b/gst/jp2kdecimator/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/jp2kdecimator/gstjp2kdecimator.c b/gst/jp2kdecimator/gstjp2kdecimator.c index 10644676..c7f82ae1 100644 --- a/gst/jp2kdecimator/gstjp2kdecimator.c +++ b/gst/jp2kdecimator/gstjp2kdecimator.c @@ -94,7 +94,7 @@ gst_jp2k_decimator_base_init (gpointer g_class) { GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "JPEG2000 decimator", "Filter/Image", "Removes information from JPEG2000 streams without recompression", diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in index 3707eca9..1c549a43 100644 --- a/gst/jpegformat/Makefile.in +++ b/gst/jpegformat/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c index d7a2de04..50bd30c9 100644 --- a/gst/jpegformat/gstjifmux.c +++ b/gst/jpegformat/gstjifmux.c @@ -141,7 +141,7 @@ gst_jif_mux_class_init (GstJifMuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_jif_mux_sink_pad_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "JPEG stream muxer", "Video/Formatter", "Remuxes JPEG images with markers and tags", diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c index 0aae82d0..fff0c5b9 100644 --- a/gst/jpegformat/gstjpegparse.c +++ b/gst/jpegformat/gstjpegparse.c @@ -153,7 +153,7 @@ gst_jpeg_parse_class_init (GstJpegParseClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_jpeg_parse_sink_pad_template)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "JPEG stream parser", "Video/Parser", "Parse JPEG images into single-frame buffers", diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in index ac972f60..af4c7ec1 100644 --- a/gst/librfb/Makefile.in +++ b/gst/librfb/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/librfb/gstrfbsrc.c b/gst/librfb/gstrfbsrc.c index 8acf4c8d..670e1bdb 100644 --- a/gst/librfb/gstrfbsrc.c +++ b/gst/librfb/gstrfbsrc.c @@ -96,7 +96,7 @@ gst_rfb_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rfb_src_template)); - gst_element_class_set_metadata (element_class, "Rfb source", + gst_element_class_set_static_metadata (element_class, "Rfb source", "Source/Video", "Creates a rfb video stream", "David A. Schleef <ds@schleef.org>, " diff --git a/gst/liveadder/Makefile.in b/gst/liveadder/Makefile.in index 2f506b53..e142dfd5 100644 --- a/gst/liveadder/Makefile.in +++ b/gst/liveadder/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c index 220d2cce..080d471a 100644 --- a/gst/liveadder/liveadder.c +++ b/gst/liveadder/liveadder.c @@ -172,7 +172,7 @@ gst_live_adder_class_init (GstLiveAdderClass * klass) gst_static_pad_template_get (&gst_live_adder_src_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_live_adder_sink_template)); - gst_element_class_set_metadata (gstelement_class, "Live Adder element", + gst_element_class_set_static_metadata (gstelement_class, "Live Adder element", "Generic/Audio", "Mixes live/discontinuous audio streams", "Olivier Crete <olivier.crete@collabora.co.uk>"); diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in index bbf9b5da..2e9f263c 100644 --- a/gst/mpegdemux/Makefile.in +++ b/gst/mpegdemux/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mpegdemux/gstmpegdemux.c b/gst/mpegdemux/gstmpegdemux.c index 46376ba8..bbe03e3d 100644 --- a/gst/mpegdemux/gstmpegdemux.c +++ b/gst/mpegdemux/gstmpegdemux.c @@ -166,10 +166,13 @@ static inline gboolean gst_flups_demux_scan_forward_ts (GstFluPSDemux * demux, static inline gboolean gst_flups_demux_scan_backward_ts (GstFluPSDemux * demux, guint64 * pos, SCAN_MODE mode, guint64 * rts, gint limit); -static inline void gst_flups_demux_send_segment_updates (GstFluPSDemux * demux, +static inline void gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_time); static inline void gst_flups_demux_clear_times (GstFluPSDemux * demux); +static void gst_flups_demux_reset_psm (GstFluPSDemux * demux); +static void gst_flups_demux_flush (GstFluPSDemux * demux); + static GstElementClass *parent_class = NULL; static void gst_segment_set_position (GstSegment * segment, GstFormat format, @@ -228,7 +231,7 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass) gst_element_class_add_pad_template (element_class, klass->private_template); gst_element_class_add_pad_template (element_class, klass->sink_template); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "The Fluendo MPEG Program Stream Demuxer", "Codec/Demuxer", "Demultiplexes MPEG Program Streams", "Wim Taymans <wim@fluendo.com>"); } @@ -272,6 +275,10 @@ gst_flups_demux_init (GstFluPSDemux * demux) g_malloc0 (sizeof (GstFluPSStream *) * (GST_FLUPS_DEMUX_MAX_STREAMS)); demux->found_count = 0; + demux->adapter = gst_adapter_new (); + demux->rev_adapter = gst_adapter_new (); + + gst_flups_demux_reset (demux); } static void @@ -281,6 +288,9 @@ gst_flups_demux_finalize (GstFluPSDemux * demux) g_free (demux->streams); g_free (demux->streams_found); + g_object_unref (demux->adapter); + g_object_unref (demux->rev_adapter); + G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (demux)); } @@ -289,15 +299,16 @@ gst_flups_demux_reset (GstFluPSDemux * demux) { /* Clean up the streams and pads we allocated */ gint i; - GstEvent **p_ev; for (i = 0; i < GST_FLUPS_DEMUX_MAX_STREAMS; i++) { GstFluPSStream *stream = demux->streams[i]; if (stream != NULL) { - if (stream->pad) + if (stream->pad && GST_PAD_PARENT (stream->pad)) gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad); + if (stream->pending_tags) + gst_tag_list_unref (stream->pending_tags); g_free (stream); demux->streams[i] = NULL; } @@ -305,9 +316,28 @@ gst_flups_demux_reset (GstFluPSDemux * demux) memset (demux->streams_found, 0, sizeof (GstFluPSStream *) * (GST_FLUPS_DEMUX_MAX_STREAMS)); demux->found_count = 0; - p_ev = &demux->lang_codes; - gst_event_replace (p_ev, NULL); + gst_adapter_clear (demux->adapter); + gst_adapter_clear (demux->rev_adapter); + + demux->adapter_offset = G_MAXUINT64; + demux->first_scr = G_MAXUINT64; + demux->last_scr = G_MAXUINT64; + demux->current_scr = G_MAXUINT64; + demux->base_time = G_MAXUINT64; + demux->scr_rate_n = G_MAXUINT64; + demux->scr_rate_d = G_MAXUINT64; + demux->first_pts = G_MAXUINT64; + demux->last_pts = G_MAXUINT64; + demux->mux_rate = G_MAXUINT64; + demux->next_pts = G_MAXUINT64; + demux->next_dts = G_MAXUINT64; + demux->need_no_more_pads = TRUE; + demux->adjust_segment = TRUE; + gst_flups_demux_reset_psm (demux); + gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED); + gst_segment_init (&demux->src_segment, GST_FORMAT_TIME); + gst_flups_demux_flush (demux); } static GstFluPSStream * @@ -423,7 +453,9 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) stream->discont = TRUE; stream->need_segment = TRUE; stream->notlinked = FALSE; + stream->last_flow = GST_FLOW_OK; stream->type = stream_type; + stream->pending_tags = NULL; stream->pad = gst_pad_new_from_template (template, name); stream->segment_thresh = threshold; gst_pad_set_event_function (stream->pad, @@ -455,7 +487,15 @@ gst_flups_demux_get_stream (GstFluPSDemux * demux, gint id, gint type) GST_DEBUG_OBJECT (demux, "adding pad for stream id 0x%02x type 0x%02x", id, type); - gst_element_add_pad (GST_ELEMENT (demux), stream->pad); + if (demux->need_no_more_pads) { + gst_element_add_pad (GST_ELEMENT (demux), stream->pad); + } else { + /* only likely to confuse decodebin etc, so discard */ + /* FIXME should perform full switch protocol: + * add a whole new set of pads, drop old and no-more-pads again */ + GST_DEBUG_OBJECT (demux, + "but already signalled no-more-pads; not adding"); + } demux->streams[id] = stream; demux->streams_found[demux->found_count++] = stream; @@ -470,28 +510,13 @@ unknown_stream: } } -static GstFlowReturn -gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, - GstBuffer * buf) +static inline void +gst_flups_demux_send_segment (GstFluPSDemux * demux, GstFluPSStream * stream, + GstClockTime pts) { - GstFlowReturn result; - GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE; - guint size; - - if (stream == NULL) - goto no_stream; - - /* timestamps */ - if (G_UNLIKELY (demux->next_pts != G_MAXUINT64)) - pts = MPEGTIME_TO_GSTTIME (demux->next_pts); - if (G_UNLIKELY (demux->next_dts != G_MAXUINT64)) - dts = MPEGTIME_TO_GSTTIME (demux->next_dts); - /* discont */ if (G_UNLIKELY (stream->need_segment)) { - guint64 time, start, stop; GstSegment segment; - GstEvent *newsegment; GST_DEBUG ("PTS timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT " src_segment.start:%" GST_TIME_FORMAT " .stop:%" GST_TIME_FORMAT, @@ -499,52 +524,67 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, GST_TIME_ARGS (demux->src_segment.start), GST_TIME_ARGS (demux->src_segment.stop)); - if (GST_CLOCK_TIME_IS_VALID (demux->base_time) && - GST_CLOCK_TIME_IS_VALID (demux->src_segment.start)) - start = demux->base_time + demux->src_segment.start; - else - start = 0; - - if (GST_CLOCK_TIME_IS_VALID (demux->src_segment.stop) && - GST_CLOCK_TIME_IS_VALID (demux->base_time)) - stop = demux->base_time + demux->src_segment.stop; - else - stop = -1; - - if (pts != GST_CLOCK_TIME_NONE) { + /* adjust segment start if estimating a seek was off quite a bit, + * make sure to do for all streams though to preserve a/v sync */ + /* FIXME such adjustment tends to be frowned upon */ + if (pts != GST_CLOCK_TIME_NONE && demux->adjust_segment) { if (demux->src_segment.rate > 0) { - if (GST_CLOCK_DIFF (start, pts) > GST_SECOND) - start = pts; + if (GST_CLOCK_DIFF (demux->src_segment.start, pts) > GST_SECOND) + demux->src_segment.start = pts - demux->base_time; } else { - if (GST_CLOCK_DIFF (stop, pts) > GST_SECOND) - stop = pts; + if (GST_CLOCK_DIFF (demux->src_segment.stop, pts) > GST_SECOND) + demux->src_segment.stop = pts - demux->base_time; } } - if (GST_CLOCK_TIME_IS_VALID (demux->base_time) && start > demux->base_time) - time = start - demux->base_time; - else - time = 0; - - GST_INFO_OBJECT (demux, "sending new segment: rate %g applied_rate %g " - "start: %" GST_TIME_FORMAT ", stop: %" GST_TIME_FORMAT - ", time: %" GST_TIME_FORMAT " to pad %" GST_PTR_FORMAT, - demux->sink_segment.rate, demux->sink_segment.applied_rate, - GST_TIME_ARGS (start), GST_TIME_ARGS (stop), - GST_TIME_ARGS (time), stream->pad); + demux->adjust_segment = FALSE; + + /* we should be in sync with downstream, so start from our segment notion, + * which also includes proper base_time etc, tweak it a bit and send */ + gst_segment_copy_into (&demux->src_segment, &segment); + if (GST_CLOCK_TIME_IS_VALID (demux->base_time)) { + if (GST_CLOCK_TIME_IS_VALID (segment.start)) + segment.start += demux->base_time; + if (GST_CLOCK_TIME_IS_VALID (segment.stop)) + segment.stop += demux->base_time; + segment.time = segment.start - demux->base_time; + } - gst_segment_init (&segment, GST_FORMAT_TIME); - segment.rate = demux->sink_segment.rate; - segment.applied_rate = demux->sink_segment.applied_rate; - segment.start = start; - segment.stop = stop; - segment.time = time; - newsegment = gst_event_new_segment (&segment); + GST_INFO_OBJECT (demux, "sending segment event %" GST_SEGMENT_FORMAT + " to pad %" GST_PTR_FORMAT, &segment, stream->pad); - gst_pad_push_event (stream->pad, newsegment); + gst_pad_push_event (stream->pad, gst_event_new_segment (&segment)); stream->need_segment = FALSE; } + if (G_UNLIKELY (stream->pending_tags)) { + GST_DEBUG_OBJECT (demux, "Sending pending_tags %p for pad %s:%s : %" + GST_PTR_FORMAT, stream->pending_tags, + GST_DEBUG_PAD_NAME (stream->pad), stream->pending_tags); + gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags)); + stream->pending_tags = NULL; + } +} + +static GstFlowReturn +gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, + GstBuffer * buf) +{ + GstFlowReturn result; + GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE; + guint size; + + if (stream == NULL) + goto no_stream; + + /* timestamps */ + if (G_UNLIKELY (demux->next_pts != G_MAXUINT64)) + pts = MPEGTIME_TO_GSTTIME (demux->next_pts); + if (G_UNLIKELY (demux->next_dts != G_MAXUINT64)) + dts = MPEGTIME_TO_GSTTIME (demux->next_dts); + + gst_flups_demux_send_segment (demux, stream, pts); + /* OK, sent new segment now prepare the buffer for sending */ GST_BUFFER_PTS (buf) = pts; GST_BUFFER_DTS (buf) = dts; @@ -558,18 +598,18 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, GST_TIME_ARGS (demux->src_segment.position), GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->current_scr))); - if (demux->src_segment.position != GST_CLOCK_TIME_NONE) { + if (demux->src_segment.position != GST_CLOCK_TIME_NONE && + demux->base_time != GST_CLOCK_TIME_NONE) { GstClockTime new_time = demux->base_time + demux->src_segment.position; if (stream->last_ts == GST_CLOCK_TIME_NONE || stream->last_ts < new_time) { -#if 0 - g_print ("last_ts update on pad %s to time %" GST_TIME_FORMAT "\n", - GST_PAD_NAME (stream->pad), GST_TIME_ARGS (cur_scr_time)); -#endif + GST_LOG_OBJECT (demux, + "last_ts update on pad %s to time %" GST_TIME_FORMAT, + GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time)); stream->last_ts = new_time; } - gst_flups_demux_send_segment_updates (demux, new_time); + gst_flups_demux_send_gap_updates (demux, new_time); } /* Set the buffer discont flag, and clear discont state on the stream */ @@ -585,7 +625,7 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, demux->next_pts = G_MAXUINT64; demux->next_dts = G_MAXUINT64; - result = gst_pad_push (stream->pad, buf); + stream->last_flow = result = gst_pad_push (stream->pad, buf); GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, pts time: %" GST_TIME_FORMAT ", size %d. result: %s", stream->id, stream->type, GST_TIME_ARGS (pts), @@ -615,13 +655,14 @@ gst_flups_demux_mark_discont (GstFluPSDemux * demux, gboolean discont, if (G_LIKELY (stream)) { stream->discont |= discont; stream->need_segment |= need_segment; + demux->adjust_segment |= need_segment; GST_DEBUG_OBJECT (demux, "marked stream as discont %d, need_segment %d", stream->discont, stream->need_segment); } } } -static inline gboolean +static gboolean gst_flups_demux_send_event (GstFluPSDemux * demux, GstEvent * event) { gint i, count = demux->found_count; @@ -656,16 +697,10 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) const char *type = gst_structure_get_string (structure, "event"); gint i; gchar cur_stream_name[32]; - GstFluPSStream *temp G_GNUC_UNUSED; + GstFluPSStream *temp = NULL; + const gchar *lang_code; if (strcmp (type, "dvd-lang-codes") == 0) { - GstEvent **p_ev; - /* Store the language codes event on the element, then iterate over the - * streams it specifies and retrieve them. The stream creation code then - * creates the pad appropriately and sends tag events as needed */ - p_ev = &demux->lang_codes; - gst_event_replace (p_ev, event); - GST_DEBUG_OBJECT (demux, "Handling language codes event"); /* Create a video pad to ensure have it before emit no more pads */ @@ -681,28 +716,34 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) if (!gst_structure_get_int (structure, cur_stream_name, &stream_format)) continue; + g_snprintf (cur_stream_name, 32, "audio-%d-stream", i); + if (!gst_structure_get_int (structure, cur_stream_name, &stream_id)) + continue; + if (stream_id < 0 || stream_id >= MAX_DVD_AUDIO_STREAMS) + continue; + switch (stream_format) { case 0x0: /* AC3 */ - stream_id = 0x80 + i; + stream_id += 0x80; temp = gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_AC3); break; case 0x2: case 0x3: /* MPEG audio without and with extension stream are * treated the same */ - stream_id = 0xC0 + i; + stream_id += 0xC0; temp = gst_flups_demux_get_stream (demux, stream_id, ST_AUDIO_MPEG1); break; case 0x4: /* LPCM */ - stream_id = 0xA0 + i; + stream_id += 0xA0; temp = gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_LPCM); break; case 0x6: /* DTS */ - stream_id = 0x88 + i; + stream_id += 0x88; temp = gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_DTS); break; case 0x7: @@ -712,19 +753,52 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) GST_WARNING_OBJECT (demux, "Unknown audio stream format in language code event: %d", stream_format); + temp = NULL; + continue; break; } + + g_snprintf (cur_stream_name, 32, "audio-%d-language", i); + lang_code = gst_structure_get_string (structure, cur_stream_name); + if (lang_code) { + GstTagList *list = gst_tag_list_new_empty (); + + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + GST_TAG_LANGUAGE_CODE, lang_code, NULL); + temp->pending_tags = list; + } } /* And subtitle streams */ for (i = 0; i < MAX_DVD_SUBPICTURE_STREAMS; i++) { + gint stream_id; + g_snprintf (cur_stream_name, 32, "subpicture-%d-format", i); + if (!gst_structure_get_int (structure, cur_stream_name, &stream_id)) + continue; - if (gst_structure_get_string (structure, cur_stream_name) == NULL) - break; + g_snprintf (cur_stream_name, 32, "subpicture-%d-stream", i); + if (!gst_structure_get_int (structure, cur_stream_name, &stream_id)) + continue; + if (stream_id < 0 || stream_id >= MAX_DVD_SUBPICTURE_STREAMS) + continue; + + GST_DEBUG_OBJECT (demux, "Subpicture stream %d ID 0x%02x", i, + 0x20 + stream_id); /* Retrieve the subpicture stream to force pad creation */ - temp = gst_flups_demux_get_stream (demux, 0x20 + i, ST_PS_DVD_SUBPICTURE); + temp = gst_flups_demux_get_stream (demux, 0x20 + stream_id, + ST_PS_DVD_SUBPICTURE); + + g_snprintf (cur_stream_name, 32, "subpicture-%d-language", i); + lang_code = gst_structure_get_string (structure, cur_stream_name); + if (lang_code) { + GstTagList *list = gst_tag_list_new_empty (); + + gst_tag_list_add (list, GST_TAG_MERGE_REPLACE, + GST_TAG_LANGUAGE_CODE, lang_code, NULL); + temp->pending_tags = list; + } } GST_DEBUG_OBJECT (demux, "Created all pads from Language Codes event, " @@ -732,6 +806,10 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) gst_element_no_more_pads (GST_ELEMENT (demux)); demux->need_no_more_pads = FALSE; + } else { + /* forward to all pads, e.g. dvd clut event */ + gst_event_ref (event); + gst_flups_demux_send_event (demux, event); } gst_event_unref (event); @@ -761,20 +839,20 @@ gst_flups_demux_clear_times (GstFluPSDemux * demux) GstFluPSStream *stream = demux->streams_found[i]; if (G_LIKELY (stream)) { - stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE; + stream->last_ts = GST_CLOCK_TIME_NONE; + stream->last_flow = GST_FLOW_OK; } } } static inline void -gst_flups_demux_send_segment_updates (GstFluPSDemux * demux, - GstClockTime new_start) +gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_start) { - GstClockTime base_time, stop, time; + GstClockTime base_time, stop; gint i, count = demux->found_count; GstEvent *event = NULL; - /* Advance all lagging streams by sending a segment update */ + /* Advance all lagging streams by sending a gap event */ if ((base_time = demux->base_time) == GST_CLOCK_TIME_NONE) base_time = 0; @@ -785,9 +863,6 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux, if (new_start > stop) return; - time = demux->src_segment.time; - time += new_start - (demux->src_segment.start + base_time); - /* FIXME: Handle reverse playback */ for (i = 0; i < count; i++) { GstFluPSStream *stream = demux->streams_found[i]; @@ -798,95 +873,18 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux, stream->last_ts = demux->src_segment.start + base_time; if (stream->last_ts + stream->segment_thresh < new_start) { -#if 0 - g_print ("Segment update to pad %s time %" GST_TIME_FORMAT " stop now %" - GST_TIME_FORMAT "\n", GST_PAD_NAME (stream->pad), - GST_TIME_ARGS (new_start), GST_TIME_ARGS (demux->src_segment.stop)); -#endif + /* should send segment info before gap event */ + gst_flups_demux_send_segment (demux, stream, GST_CLOCK_TIME_NONE); + GST_DEBUG_OBJECT (demux, - "Segment update to pad %s time %" GST_TIME_FORMAT, + "Sending gap update to pad %s time %" GST_TIME_FORMAT, GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_start)); - if (event == NULL) { - GstSegment segment; - gst_segment_init (&segment, GST_FORMAT_TIME); - segment.rate = demux->src_segment.rate; - segment.applied_rate = demux->src_segment.applied_rate; - segment.start = new_start; - segment.stop = stop; - segment.time = time; - event = gst_event_new_segment (&segment); - } - gst_event_ref (event); + event = + gst_event_new_gap (stream->last_ts, new_start - stream->last_ts); gst_pad_push_event (stream->pad, event); - stream->last_seg_start = stream->last_ts = new_start; - stream->need_segment = FALSE; - } - } - } - - if (event) - gst_event_unref (event); -} - -static inline void -gst_flups_demux_close_segment (GstFluPSDemux * demux) -{ - gint i, count = demux->found_count; - GstEvent *event = NULL; - guint64 base_time; - GstSegment segment; - - GST_INFO_OBJECT (demux, "closing running segment %" GST_SEGMENT_FORMAT, - &demux->src_segment); - - /* FIXME: Need to send a different segment-close to each pad where the - * last_seg_start != clock_time_none, as that indicates a sparse-stream - * event was sent there */ - - if ((base_time = demux->base_time) == (guint64) - 1) - base_time = 0; - - gst_segment_init (&segment, demux->src_segment.format); - segment.rate = demux->src_segment.rate; - /* Close the current segment for a linear playback */ - if (demux->src_segment.rate >= 0) { - /* for forward playback, we played from start to last_stop */ - segment.start = demux->src_segment.start + base_time; - segment.stop = demux->src_segment.position + base_time; - segment.position = demux->src_segment.time; - event = gst_event_new_segment (&segment); - } else { - gint64 stop; - - if ((stop = demux->src_segment.stop) == -1) - stop = demux->src_segment.duration; - - segment.start = demux->src_segment.position + base_time; - segment.stop = stop + base_time; - segment.position = demux->src_segment.position; - /* for reverse playback, we played from stop to last_stop. */ - event = gst_event_new_segment (&segment); - } - - if (event) { - for (i = 0; i < count; i++) { - GstFluPSStream *stream = demux->streams_found[i]; - - if (stream && !stream->notlinked && !stream->need_segment) { - (void) gst_event_ref (event); - - if (!gst_pad_push_event (stream->pad, event)) { - GST_DEBUG_OBJECT (stream, "event %s was not handled correctly", - GST_EVENT_TYPE_NAME (event)); - } else { - /* If at least one push returns TRUE, then we return TRUE. */ - GST_DEBUG_OBJECT (stream, "event %s was handled correctly", - GST_EVENT_TYPE_NAME (event)); - } + stream->last_ts = new_start; } } - - gst_event_unref (event); } } @@ -915,13 +913,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { const GstSegment *segment; - /* Close current segment */ - gst_flups_demux_close_segment (demux); - gst_event_parse_segment (event, &segment); - gst_segment_copy_into (segment, &demux->sink_segment); + GST_INFO_OBJECT (demux, "received segment %" GST_SEGMENT_FORMAT, segment); + + /* we need to emit a new segment */ + gst_flups_demux_mark_discont (demux, TRUE, TRUE); + if (segment->format == GST_FORMAT_BYTES && demux->scr_rate_n != G_MAXUINT64 && demux->scr_rate_d != G_MAXUINT64) { @@ -931,15 +930,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) demux->src_segment.start = BYTES_TO_GSTTIME (segment->start); demux->src_segment.stop = BYTES_TO_GSTTIME (segment->stop); demux->src_segment.time = BYTES_TO_GSTTIME (segment->time); + } else if (segment->format == GST_FORMAT_TIME) { + /* we expect our timeline (SCR, PTS) to match the one from upstream, + * if not, will adjust with offset later on */ + gst_segment_copy_into (segment, &demux->src_segment); + /* accept upstream segment without adjusting */ + demux->adjust_segment = FALSE; } - GST_INFO_OBJECT (demux, "received new segment: rate %g " - "format %d, start: %" G_GINT64_FORMAT ", stop: %" G_GINT64_FORMAT - ", time: %" G_GINT64_FORMAT, segment->rate, segment->format, - segment->start, segment->stop, segment->time); - - /* we need to emit a new segment */ - gst_flups_demux_mark_discont (demux, TRUE, TRUE); gst_event_unref (event); break; @@ -1221,8 +1219,6 @@ gst_flups_demux_handle_seek_pull (GstFluPSDemux * demux, GstEvent * event) if (flush) { /* Stop flushing, the sinks are at time 0 now */ gst_flups_demux_send_event (demux, gst_event_new_flush_stop (TRUE)); - } else { - gst_flups_demux_close_segment (demux); } if (flush || seeksegment.position != demux->src_segment.position) { @@ -1629,12 +1625,29 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* keep the first src in order to calculate delta time */ if (G_UNLIKELY (demux->first_scr == G_MAXUINT64)) { + gint64 diff; + demux->first_scr = scr; demux->first_scr_offset = demux->cur_scr_offset; demux->base_time = MPEGTIME_TO_GSTTIME (demux->first_scr); + GST_DEBUG_OBJECT (demux, "determined base_time %" GST_TIME_FORMAT, + GST_TIME_ARGS (demux->base_time)); /* at begin consider the new_rate as the scr rate, bytes/clock ticks */ scr_rate_n = new_rate; scr_rate_d = CLOCK_FREQ; + /* our SCR timeline might have offset wrt upstream timeline */ + if (demux->sink_segment.format == GST_FORMAT_TIME) { + if (demux->sink_segment.start > demux->base_time) + diff = -(demux->sink_segment.start - demux->base_time); + else + diff = demux->base_time - demux->sink_segment.start; + if (diff > GST_SECOND) { + GST_DEBUG_OBJECT (demux, "diff of %" GST_TIME_FORMAT + " wrt upstream start %" GST_TIME_FORMAT "; adjusting base", + GST_TIME_ARGS (diff), GST_TIME_ARGS (demux->sink_segment.start)); + demux->base_time += diff; + } + } } else if (G_LIKELY (demux->first_scr_offset != demux->cur_scr_offset)) { /* estimate byte rate related to the SCR */ scr_rate_n = demux->cur_scr_offset - demux->first_scr_offset; @@ -2921,6 +2934,54 @@ gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent, return FALSE; } +/* EOS and NOT_LINKED need to be combined. This means that we return: +* +* GST_FLOW_NOT_LINKED: when all pads NOT_LINKED. +* GST_FLOW_EOS: when all pads EOS or NOT_LINKED. +*/ +static GstFlowReturn +gst_flups_demux_combine_flows (GstFluPSDemux * demux, GstFlowReturn ret) +{ + gint i, count = demux->found_count, streams = 0; + gboolean unexpected = FALSE, not_linked = TRUE; + + GST_LOG_OBJECT (demux, "flow return: %s", gst_flow_get_name (ret)); + + /* only return NOT_LINKED if all other pads returned NOT_LINKED */ + for (i = 0; i < count; i++) { + GstFluPSStream *stream = demux->streams_found[i]; + + if (G_UNLIKELY (!stream)) + continue; + + ret = stream->last_flow; + streams++; + + /* some streams may still have to appear, + * and only those ones may end up linked */ + if (G_UNLIKELY (demux->need_no_more_pads && ret == GST_FLOW_NOT_LINKED)) + ret = GST_FLOW_OK; + + /* no unexpected or unlinked, return */ + if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED)) + goto done; + + /* we check to see if we have at least 1 unexpected or all unlinked */ + unexpected |= (ret == GST_FLOW_EOS); + not_linked &= (ret == GST_FLOW_NOT_LINKED); + } + + /* when we get here, we all have unlinked or unexpected */ + if (not_linked && streams) + ret = GST_FLOW_NOT_LINKED; + else if (unexpected) + ret = GST_FLOW_EOS; + +done: + GST_LOG_OBJECT (demux, "combined flow return: %s", gst_flow_get_name (ret)); + return ret; +} + static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { @@ -3052,6 +3113,9 @@ gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) ret = GST_FLOW_OK; break; default: + ret = gst_flups_demux_combine_flows (demux, ret); + if (ret != GST_FLOW_OK) + goto done; break; } } @@ -3067,41 +3131,14 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition) switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: - demux->adapter = gst_adapter_new (); - demux->rev_adapter = gst_adapter_new (); - demux->adapter_offset = G_MAXUINT64; gst_pes_filter_init (&demux->filter, demux->adapter, &demux->adapter_offset); gst_pes_filter_set_callbacks (&demux->filter, (GstPESFilterData) gst_flups_demux_data_cb, (GstPESFilterResync) gst_flups_demux_resync_cb, demux); demux->filter.gather_pes = TRUE; - demux->first_scr = G_MAXUINT64; - demux->last_scr = G_MAXUINT64; - demux->current_scr = G_MAXUINT64; - demux->base_time = G_MAXUINT64; - demux->scr_rate_n = G_MAXUINT64; - demux->scr_rate_d = G_MAXUINT64; - demux->first_pts = G_MAXUINT64; - demux->last_pts = G_MAXUINT64; break; case GST_STATE_CHANGE_READY_TO_PAUSED: - demux->current_scr = G_MAXUINT64; - demux->mux_rate = G_MAXUINT64; - demux->next_pts = G_MAXUINT64; - demux->next_dts = G_MAXUINT64; - demux->first_scr = G_MAXUINT64; - demux->last_scr = G_MAXUINT64; - demux->base_time = G_MAXUINT64; - demux->scr_rate_n = G_MAXUINT64; - demux->scr_rate_d = G_MAXUINT64; - demux->need_no_more_pads = TRUE; - demux->first_pts = G_MAXUINT64; - demux->last_pts = G_MAXUINT64; - gst_flups_demux_reset_psm (demux); - gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED); - gst_segment_init (&demux->src_segment, GST_FORMAT_TIME); - gst_flups_demux_flush (demux); break; default: break; @@ -3115,10 +3152,6 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition) break; case GST_STATE_CHANGE_READY_TO_NULL: gst_pes_filter_uninit (&demux->filter); - g_object_unref (demux->adapter); - demux->adapter = NULL; - g_object_unref (demux->rev_adapter); - demux->rev_adapter = NULL; break; default: break; diff --git a/gst/mpegdemux/gstmpegdemux.h b/gst/mpegdemux/gstmpegdemux.h index 10f11800..7cd4004c 100644 --- a/gst/mpegdemux/gstmpegdemux.h +++ b/gst/mpegdemux/gstmpegdemux.h @@ -89,12 +89,14 @@ struct _GstFluPSStream gint type; GstClockTime segment_thresh; - GstClockTime last_seg_start; GstClockTime last_ts; + GstFlowReturn last_flow; gboolean discont; gboolean notlinked; gboolean need_segment; + + GstTagList *pending_tags; }; struct _GstFluPSDemux @@ -133,6 +135,7 @@ struct _GstFluPSDemux GstSegment sink_segment; GstSegment src_segment; + gboolean adjust_segment; /* stream output */ GstFluPSStream *current_stream; @@ -145,10 +148,6 @@ struct _GstFluPSDemux /* Indicates an MPEG-2 stream */ gboolean is_mpeg2_pack; - - /* Language codes event is stored when a dvd-lang-codes - * custom event arrives from upstream */ - GstEvent *lang_codes; }; struct _GstFluPSDemuxClass diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in index e5510b65..391f5b79 100644 --- a/gst/mpegpsmux/Makefile.in +++ b/gst/mpegpsmux/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c index e9bfd0a6..52ffb458 100644 --- a/gst/mpegpsmux/mpegpsmux.c +++ b/gst/mpegpsmux/mpegpsmux.c @@ -119,7 +119,7 @@ mpegpsmux_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&mpegpsmux_src_factory)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MPEG Program Stream Muxer", "Codec/Muxer", "Multiplexes media streams into an MPEG Program Stream", "Lin YANG <oxcsnicho@gmail.com>"); diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in index d541e7ec..31b2e17f 100644 --- a/gst/mpegtsdemux/Makefile.in +++ b/gst/mpegtsdemux/Makefile.in @@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index 07db3989..bd73884b 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -1346,8 +1346,8 @@ mpegts_base_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_event_unref (event); break; case GST_EVENT_EOS: - res = gst_mpegts_base_handle_eos (base); res = GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, event); + res = gst_mpegts_base_handle_eos (base); break; case GST_EVENT_CAPS: /* FIXME, do something */ diff --git a/gst/mpegtsdemux/pesparse.c b/gst/mpegtsdemux/pesparse.c index ce3ff41a..26288260 100644 --- a/gst/mpegtsdemux/pesparse.c +++ b/gst/mpegtsdemux/pesparse.c @@ -226,7 +226,7 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res, if (G_UNLIKELY (!(val8 & 0x80))) goto bad_original_copy_info_marker; - res->additional_copy_info = val8 >> 1; + res->additional_copy_info = val8 & 0x7f; GST_LOG ("additional_copy_info : 0x%x", res->additional_copy_info); } @@ -290,16 +290,16 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res, /* GRMBL, this is most often wrong */ if (G_UNLIKELY ((val8 & 0x80) != 0x80)) goto bad_sequence_marker1; - res->program_packet_sequence_counter = val8 * 0x70; + res->program_packet_sequence_counter = val8 & 0x7f; GST_LOG ("program_packet_sequence_counter %d", res->program_packet_sequence_counter); val8 = *data++; /* GRMBL, this is most often wrong */ - if (G_UNLIKELY ((val8 * 0x80) != 0x80)) + if (G_UNLIKELY ((val8 & 0x80) != 0x80)) goto bad_sequence_marker2; res->MPEG1_MPEG2_identifier = (val8 >> 6) & 0x1; - res->original_stuff_length = val8 * 0x3f; + res->original_stuff_length = val8 & 0x3f; GST_LOG ("MPEG1_MPEG2_identifier : %d , original_stuff_length : %d", res->MPEG1_MPEG2_identifier, res->original_stuff_length); length -= 2; @@ -310,7 +310,7 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res, if (G_UNLIKELY (length < 2)) goto need_more_data; val8 = *data; - if (G_UNLIKELY ((val8 * 0xc0) != 0x40)) + if (G_UNLIKELY ((val8 & 0xc0) != 0x40)) goto bad_P_STD_marker; res->P_STD_buffer_size = (GST_READ_UINT16_BE (data) & 0x1fff) << (val8 & 0x20) ? 10 : 7; diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index e431dad1..aed805b9 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -226,6 +226,8 @@ enum /* mpegtsbase methods */ static void gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program); +static void +gst_ts_demux_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program); static void gst_ts_demux_reset (MpegTSBase * base); static GstFlowReturn gst_ts_demux_push (MpegTSBase * base, MpegTSPacketizerPacket * packet, @@ -295,7 +297,7 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&private_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MPEG transport stream demuxer", "Codec/Demuxer", "Demuxes MPEG2 transport streams", @@ -307,6 +309,7 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass) ts_class->push = GST_DEBUG_FUNCPTR (gst_ts_demux_push); ts_class->push_event = GST_DEBUG_FUNCPTR (push_event); ts_class->program_started = GST_DEBUG_FUNCPTR (gst_ts_demux_program_started); + ts_class->program_stopped = GST_DEBUG_FUNCPTR (gst_ts_demux_program_stopped); ts_class->stream_added = gst_ts_demux_stream_added; ts_class->stream_removed = gst_ts_demux_stream_removed; ts_class->seek = GST_DEBUG_FUNCPTR (gst_ts_demux_do_seek); @@ -1130,7 +1133,16 @@ gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program) } } +static void +gst_ts_demux_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program) +{ + GstTSDemux *demux = GST_TS_DEMUX (base); + if (demux->program == program) { + demux->program = NULL; + demux->program_number = -1; + } +} static inline void @@ -1487,6 +1499,12 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream) goto beach; } + if (G_UNLIKELY (demux->program == NULL)) { + GST_LOG_OBJECT (demux, "No program"); + g_free (stream->data); + goto beach; + } + if (G_UNLIKELY (stream->need_newsegment)) calculate_and_push_newsegment (demux, stream); diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in index 05861c7b..223254d9 100644 --- a/gst/mpegtsmux/Makefile.in +++ b/gst/mpegtsmux/Makefile.in @@ -292,6 +292,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c index 7eb3ac7f..57b647c1 100644 --- a/gst/mpegtsmux/mpegtsmux.c +++ b/gst/mpegtsmux/mpegtsmux.c @@ -166,7 +166,7 @@ static void mpegtsdemux_prepare_srcpad (MpegTsMux * mux); GstFlowReturn mpegtsmux_clip_inc_running_time (GstCollectPads * pads, GstCollectData * cdata, GstBuffer * buf, GstBuffer ** outbuf, gpointer user_data); -static GstFlowReturn mpegtsmux_collected (GstCollectPads * pads, +static GstFlowReturn mpegtsmux_collected_buffer (GstCollectPads * pads, GstCollectData * data, GstBuffer * buf, MpegTsMux * mux); static gboolean mpegtsmux_sink_event (GstCollectPads * pads, @@ -196,11 +196,13 @@ typedef struct G_DEFINE_TYPE (MpegTsMux, mpegtsmux, GST_TYPE_ELEMENT) +/* Takes over the ref on the buffer */ static StreamData *stream_data_new (GstBuffer * buffer) { StreamData *res = g_new (StreamData, 1); res->buffer = buffer; gst_buffer_map (buffer, &(res->map_info), GST_MAP_READ); + return res; } @@ -227,7 +229,7 @@ mpegtsmux_class_init (MpegTsMuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&mpegtsmux_src_factory)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "MPEG Transport Stream Muxer", "Codec/Muxer", "Multiplexes media streams into an MPEG Transport Stream", "Fluendo <contact@fluendo.com>"); @@ -288,8 +290,8 @@ mpegtsmux_init (MpegTsMux * mux) mux->collect = gst_collect_pads_new (); gst_collect_pads_set_buffer_function (mux->collect, - (GstCollectPadsBufferFunction) GST_DEBUG_FUNCPTR (mpegtsmux_collected), - mux); + (GstCollectPadsBufferFunction) + GST_DEBUG_FUNCPTR (mpegtsmux_collected_buffer), mux); gst_collect_pads_set_event_function (mux->collect, (GstCollectPadsEventFunction) GST_DEBUG_FUNCPTR (mpegtsmux_sink_event), @@ -987,7 +989,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads, } else { pad_data->last_pts = time; } - *outbuf = gst_buffer_make_writable (buf); + buf = *outbuf = gst_buffer_make_writable (buf); GST_BUFFER_TIMESTAMP (*outbuf) = time; } } @@ -1014,7 +1016,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads, } else { pad_data->last_dts = time; } - *outbuf = gst_buffer_make_writable (buf); + buf = *outbuf = gst_buffer_make_writable (buf); GST_BUFFER_TIMESTAMP (*outbuf) = time; } } @@ -1032,7 +1034,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads, } static GstFlowReturn -mpegtsmux_collected (GstCollectPads * pads, GstCollectData * data, +mpegtsmux_collected_buffer (GstCollectPads * pads, GstCollectData * data, GstBuffer * buf, MpegTsMux * mux) { GstFlowReturn ret = GST_FLOW_OK; @@ -1153,12 +1155,11 @@ mpegtsmux_collected (GstCollectPads * pads, GstCollectData * data, if (prog->pcr_stream == best->stream) { /* prefer DTS if present for PCR as it should be monotone */ mux->last_ts = - GST_CLOCK_TIME_IS_VALID (best->last_dts) ? best->last_dts : best-> - last_pts; + GST_CLOCK_TIME_IS_VALID (best->last_dts) ? best-> + last_dts : best->last_pts; } mux->is_delta = delta; - mux->last_size = stream_data->map_info.size; while (tsmux_stream_bytes_in_buffer (best->stream) > 0) { if (!tsmux_write_stream_packet (mux->tsmux, best->stream)) { /* Failed writing data for some reason. Set appropriate error */ diff --git a/gst/mpegtsmux/mpegtsmux.h b/gst/mpegtsmux/mpegtsmux.h index 0ae37978..dfb526e6 100644 --- a/gst/mpegtsmux/mpegtsmux.h +++ b/gst/mpegtsmux/mpegtsmux.h @@ -163,8 +163,6 @@ struct MpegTsMux { /* output buffer aggregation */ GstAdapter *out_adapter; GstBuffer *out_buffer; - gint out_offset; - gint last_size; #if 0 /* SPN/PTS index handling */ diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in index 43089cf7..4fe12293 100644 --- a/gst/mpegtsmux/tsmux/Makefile.in +++ b/gst/mpegtsmux/tsmux/Makefile.in @@ -221,6 +221,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in index 3322a8ee..cbd3b1fe 100644 --- a/gst/mve/Makefile.in +++ b/gst/mve/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mve/gstmvedemux.c b/gst/mve/gstmvedemux.c index e99fd043..13171bfb 100644 --- a/gst/mve/gstmvedemux.c +++ b/gst/mve/gstmvedemux.c @@ -1094,7 +1094,7 @@ gst_mve_demux_base_init (GstMveDemuxClass * klass) gst_element_class_add_static_pad_template (element_class, &vidsrc_template); gst_element_class_add_static_pad_template (element_class, &audsrc_template); - gst_element_class_set_metadata (element_class, "MVE Demuxer", + gst_element_class_set_static_metadata (element_class, "MVE Demuxer", "Codec/Demuxer", "Demultiplex an Interplay movie (MVE) stream into audio and video", "Jens Granseuer <jensgr@gmx.net>"); diff --git a/gst/mve/gstmvemux.c b/gst/mve/gstmvemux.c index a4e71f9d..9615f27b 100644 --- a/gst/mve/gstmvemux.c +++ b/gst/mve/gstmvemux.c @@ -1357,7 +1357,7 @@ gst_mve_mux_base_init (GstMveMuxClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&video_sink_factory)); - gst_element_class_set_metadata (element_class, "MVE Multiplexer", + gst_element_class_set_static_metadata (element_class, "MVE Multiplexer", "Codec/Muxer", "Muxes audio and video into an MVE stream", "Jens Granseuer <jensgr@gmx.net>"); diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in index dc31b6ca..59cf0a2f 100644 --- a/gst/mxf/Makefile.in +++ b/gst/mxf/Makefile.in @@ -258,6 +258,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c index 08cbff0e..4758b8d6 100644 --- a/gst/mxf/mxfdemux.c +++ b/gst/mxf/mxfdemux.c @@ -3976,7 +3976,7 @@ gst_mxf_demux_base_init (gpointer g_class) gst_static_pad_template_get (&mxf_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&mxf_src_template)); - gst_element_class_set_metadata (element_class, "MXF Demuxer", + gst_element_class_set_static_metadata (element_class, "MXF Demuxer", "Codec/Demuxer", "Demux MXF files", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); } diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c index be92c1fa..b1cc5dc4 100644 --- a/gst/mxf/mxfmux.c +++ b/gst/mxf/mxfmux.c @@ -107,7 +107,7 @@ gst_mxf_mux_base_init (gpointer g_class) p++; } - gst_element_class_set_metadata (element_class, "MXF muxer", + gst_element_class_set_static_metadata (element_class, "MXF muxer", "Codec/Muxer", "Muxes video/audio streams into a MXF stream", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); diff --git a/gst/nsf/Makefile.in b/gst/nsf/Makefile.in index 0b9f0a48..cf2629bc 100644 --- a/gst/nsf/Makefile.in +++ b/gst/nsf/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/nsf/gstnsf.c b/gst/nsf/gstnsf.c index 2d506a78..e7598ea7 100644 --- a/gst/nsf/gstnsf.c +++ b/gst/nsf/gstnsf.c @@ -136,7 +136,7 @@ gst_nsfdec_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Nsf decoder", + gst_element_class_set_static_metadata (element_class, "Nsf decoder", "Codec/Decoder/Audio", "Using nosefart to decode NSF audio tunes", "Johan Dahlin <johan@gnome.org>"); diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in index fa3a87fb..1bc768b0 100644 --- a/gst/nuvdemux/Makefile.in +++ b/gst/nuvdemux/Makefile.in @@ -249,6 +249,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c index f11cc04b..d3107d87 100644 --- a/gst/nuvdemux/gstnuvdemux.c +++ b/gst/nuvdemux/gstnuvdemux.c @@ -132,7 +132,7 @@ gst_nuv_demux_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "Nuv demuxer", + gst_element_class_set_static_metadata (element_class, "Nuv demuxer", "Codec/Demuxer", "Demultiplex a MythTV NuppleVideo .nuv file into audio and video", "Renato Araujo Oliveira Filho <renato.filho@indt.org.br>," diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in index d526928e..fdd95be7 100644 --- a/gst/patchdetect/Makefile.in +++ b/gst/patchdetect/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/patchdetect/gstpatchdetect.c b/gst/patchdetect/gstpatchdetect.c index 4a3f1deb..783ae0bd 100644 --- a/gst/patchdetect/gstpatchdetect.c +++ b/gst/patchdetect/gstpatchdetect.c @@ -114,7 +114,7 @@ gst_patchdetect_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_patchdetect_src_template)); - gst_element_class_set_metadata (element_class, "Color Patch Detector", + gst_element_class_set_static_metadata (element_class, "Color Patch Detector", "Video/Analysis", "Detects color patches from a color calibration chart", "David Schleef <ds@entropywave.com>"); } diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in index 5d875414..95cb3e5c 100644 --- a/gst/pcapparse/Makefile.in +++ b/gst/pcapparse/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/pcapparse/gstirtspparse.c b/gst/pcapparse/gstirtspparse.c index 0f8f78ce..f9fff038 100644 --- a/gst/pcapparse/gstirtspparse.c +++ b/gst/pcapparse/gstirtspparse.c @@ -110,7 +110,7 @@ gst_irtsp_parse_class_init (GstIRTSPParseClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "IRTSPParse", + gst_element_class_set_static_metadata (element_class, "IRTSPParse", "Raw/Parser", "Parses a raw interleaved RTSP stream", "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>"); diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c index 791a9cf1..85bb178e 100644 --- a/gst/pcapparse/gstpcapparse.c +++ b/gst/pcapparse/gstpcapparse.c @@ -142,7 +142,7 @@ gst_pcap_parse_class_init (GstPcapParseClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "PCapParse", + gst_element_class_set_static_metadata (element_class, "PCapParse", "Raw/Parser", "Parses a raw pcap stream", "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>"); diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in index 19c50c99..dd04587a 100644 --- a/gst/pnm/Makefile.in +++ b/gst/pnm/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c index 4802727b..f562a19b 100644 --- a/gst/pnm/gstpnmdec.c +++ b/gst/pnm/gstpnmdec.c @@ -335,7 +335,7 @@ gst_pnmdec_class_init (GstPnmdecClass * klass) gst_static_pad_template_get (&gst_pnmdec_sink_pad_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_pnmdec_src_pad_template)); - gst_element_class_set_metadata (element_class, "PNM image decoder", + gst_element_class_set_static_metadata (element_class, "PNM image decoder", "Codec/Decoder/Image", "Decodes images in portable pixmap/graymap/bitmap/anymamp (PNM) format", "Lutz Mueller <lutz@users.sourceforge.net>"); diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c index d3d2474f..7a809653 100644 --- a/gst/pnm/gstpnmenc.c +++ b/gst/pnm/gstpnmenc.c @@ -261,7 +261,7 @@ gst_pnmenc_class_init (GstPnmencClass * klass) gst_static_pad_template_get (&sink_pad_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_pad_template)); - gst_element_class_set_metadata (element_class, "PNM image encoder", + gst_element_class_set_static_metadata (element_class, "PNM image encoder", "Codec/Encoder/Image", "Encodes images into portable pixmap or graymap (PNM) format", "Lutz Mueller <lutz@users.sourceforge.net>"); diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in index 4ccee18f..135502e3 100644 --- a/gst/rawparse/Makefile.in +++ b/gst/rawparse/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/rawparse/gstaudioparse.c b/gst/rawparse/gstaudioparse.c index 58bfe75e..3ad2fb1d 100644 --- a/gst/rawparse/gstaudioparse.c +++ b/gst/rawparse/gstaudioparse.c @@ -70,7 +70,8 @@ enum PROP_RATE, PROP_CHANNELS, PROP_INTERLEAVED, - PROP_CHANNEL_POSITIONS + PROP_CHANNEL_POSITIONS, + PROP_USE_SINK_CAPS }; #define GST_AUDIO_PARSE_FORMAT (gst_audio_parse_format_get_type ()) @@ -146,7 +147,12 @@ gst_audio_parse_class_init (GstAudioParseClass * klass) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS), G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, "Audio Parse", + g_object_class_install_property (gobject_class, PROP_USE_SINK_CAPS, + g_param_spec_boolean ("use-sink-caps", "Use sink caps", + "Use the sink caps for the format, only performing timestamping", + FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gst_element_class_set_static_metadata (gstelement_class, "Audio Parse", "Filter/Audio", "Converts stream into audio frames", "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); @@ -206,6 +212,9 @@ gst_audio_parse_set_property (GObject * object, guint prop_id, ap->channel_positions = g_value_dup_boxed (value); break; + case PROP_USE_SINK_CAPS: + ap->use_sink_caps = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -243,6 +252,9 @@ gst_audio_parse_get_property (GObject * object, guint prop_id, GValue * value, case PROP_CHANNEL_POSITIONS: g_value_set_boxed (value, ap->channel_positions); break; + case PROP_USE_SINK_CAPS: + g_value_set_boolean (value, ap->use_sink_caps); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -356,6 +368,23 @@ gst_audio_parse_get_caps (GstRawParse * rp) gint fps_n, fps_d; const GValue *val; + if (ap->use_sink_caps) { + gint rate; + GstCaps *caps = gst_pad_get_current_caps (rp->sinkpad); + gst_audio_info_from_caps (&info, caps); + + ap->format = GST_AUDIO_PARSE_FORMAT_RAW; + ap->raw_format = GST_AUDIO_INFO_FORMAT (&info); + ap->channels = GST_AUDIO_INFO_CHANNELS (&info); + ap->interleaved = info.layout == GST_AUDIO_LAYOUT_INTERLEAVED; + + rate = GST_AUDIO_INFO_RATE (&info); + gst_raw_parse_set_fps (GST_RAW_PARSE (ap), rate, 1); + gst_audio_parse_update_frame_size (ap); + + return caps; + } + gst_raw_parse_get_fps (rp, &fps_n, &fps_d); gst_audio_parse_setup_channel_positions (ap); diff --git a/gst/rawparse/gstaudioparse.h b/gst/rawparse/gstaudioparse.h index d8dff783..8252fe3c 100644 --- a/gst/rawparse/gstaudioparse.h +++ b/gst/rawparse/gstaudioparse.h @@ -48,6 +48,7 @@ struct _GstAudioParse GstRawParse parent; /* properties */ + gboolean use_sink_caps; gint format; GstAudioFormat raw_format; gint channels; diff --git a/gst/rawparse/gstvideoparse.c b/gst/rawparse/gstvideoparse.c index 73ccdbd0..152bda15 100644 --- a/gst/rawparse/gstvideoparse.c +++ b/gst/rawparse/gstvideoparse.c @@ -101,7 +101,7 @@ gst_video_parse_class_init (GstVideoParseClass * klass) "True if top field is earlier than bottom field", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, "Video Parse", + gst_element_class_set_static_metadata (gstelement_class, "Video Parse", "Filter/Video", "Converts stream into video frames", "David Schleef <ds@schleef.org>, " diff --git a/gst/real/Makefile.in b/gst/real/Makefile.in index 7b635b57..6b894170 100644 --- a/gst/real/Makefile.in +++ b/gst/real/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/real/gstrealaudiodec.c b/gst/real/gstrealaudiodec.c index 2e92aa9e..73c38290 100644 --- a/gst/real/gstrealaudiodec.c +++ b/gst/real/gstrealaudiodec.c @@ -562,7 +562,7 @@ gst_real_audio_dec_base_init (gpointer g_class) gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t)); gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t)); - gst_element_class_set_metadata (ec, "RealAudio decoder", + gst_element_class_set_static_metadata (ec, "RealAudio decoder", "Codec/Decoder/Audio", "Decoder for RealAudio streams", "Lutz Mueller <lutz@topfrose.de>"); } diff --git a/gst/real/gstrealvideodec.c b/gst/real/gstrealvideodec.c index 9c455776..16d7f733 100644 --- a/gst/real/gstrealvideodec.c +++ b/gst/real/gstrealvideodec.c @@ -629,7 +629,7 @@ gst_real_video_dec_base_init (gpointer g_class) gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t)); gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t)); - gst_element_class_set_metadata (ec, "RealVideo decoder", + gst_element_class_set_static_metadata (ec, "RealVideo decoder", "Codec/Decoder/Video", "Decoder for RealVideo streams", "Lutz Mueller <lutz@topfrose.de>"); } diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in index cbc827bc..92aef7d8 100644 --- a/gst/removesilence/Makefile.in +++ b/gst/removesilence/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/removesilence/gstremovesilence.c b/gst/removesilence/gstremovesilence.c index 462ddd02..0001bf4f 100644 --- a/gst/removesilence/gstremovesilence.c +++ b/gst/removesilence/gstremovesilence.c @@ -122,7 +122,7 @@ gst_remove_silence_class_init (GstRemoveSilenceClass * klass) "Set the hysteresis (on samples) used on the internal VAD", 1, G_MAXUINT64, DEFAULT_VAD_HYSTERESIS, G_PARAM_READWRITE)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "RemoveSilence", "Filter/Effect/Audio", "Removes all the silence periods from the audio stream.", diff --git a/gst/rtpmux/Makefile.in b/gst/rtpmux/Makefile.in index 6e70f223..4e414f7e 100644 --- a/gst/rtpmux/Makefile.in +++ b/gst/rtpmux/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/rtpmux/gstrtpdtmfmux.c b/gst/rtpmux/gstrtpdtmfmux.c index b320dd96..70af809b 100644 --- a/gst/rtpmux/gstrtpdtmfmux.c +++ b/gst/rtpmux/gstrtpdtmfmux.c @@ -87,7 +87,7 @@ gst_rtp_dtmf_mux_class_init (GstRTPDTMFMuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&priority_sink_factory)); - gst_element_class_set_metadata (gstelement_class, "RTP muxer", + gst_element_class_set_static_metadata (gstelement_class, "RTP muxer", "Codec/Muxer", "mixes RTP DTMF streams into other RTP streams", "Zeeshan Ali <first.last@nokia.com>"); diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c index c68fe522..286ddc6e 100644 --- a/gst/rtpmux/gstrtpmux.c +++ b/gst/rtpmux/gstrtpmux.c @@ -132,7 +132,7 @@ gst_rtp_mux_class_init (GstRTPMuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (gstelement_class, "RTP muxer", + gst_element_class_set_static_metadata (gstelement_class, "RTP muxer", "Codec/Muxer", "multiplex N rtp streams into one", "Zeeshan Ali <first.last@nokia.com>"); diff --git a/gst/rtpvp8/Makefile.in b/gst/rtpvp8/Makefile.in index ca59adb0..ef121fbf 100644 --- a/gst/rtpvp8/Makefile.in +++ b/gst/rtpvp8/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/rtpvp8/gstrtpvp8depay.c b/gst/rtpvp8/gstrtpvp8depay.c index 48a17ab5..9d7e5e6d 100644 --- a/gst/rtpvp8/gstrtpvp8depay.c +++ b/gst/rtpvp8/gstrtpvp8depay.c @@ -74,7 +74,7 @@ gst_rtp_vp8_depay_class_init (GstRtpVP8DepayClass * gst_rtp_vp8_depay_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rtp_vp8_depay_src_template)); - gst_element_class_set_metadata (element_class, "RTP VP8 depayloader", + gst_element_class_set_static_metadata (element_class, "RTP VP8 depayloader", "Codec/Depayloader/Network/RTP", "Extracts VP8 video from RTP packets)", "Sjoerd Simons <sjoerd@luon.net>"); diff --git a/gst/rtpvp8/gstrtpvp8pay.c b/gst/rtpvp8/gstrtpvp8pay.c index c2e4c9f1..29d41c28 100644 --- a/gst/rtpvp8/gstrtpvp8pay.c +++ b/gst/rtpvp8/gstrtpvp8pay.c @@ -82,7 +82,7 @@ gst_rtp_vp8_pay_class_init (GstRtpVP8PayClass * gst_rtp_vp8_pay_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_rtp_vp8_pay_src_template)); - gst_element_class_set_metadata (element_class, "RTP VP8 payloader", + gst_element_class_set_static_metadata (element_class, "RTP VP8 payloader", "Codec/Payloader/Network/RTP", "Puts VP8 video in RTP packets)", "Sjoerd Simons <sjoerd@luon.net>"); diff --git a/gst/scaletempo/Makefile.in b/gst/scaletempo/Makefile.in index 8d46e4ab..bef5e318 100644 --- a/gst/scaletempo/Makefile.in +++ b/gst/scaletempo/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/scaletempo/gstscaletempo.c b/gst/scaletempo/gstscaletempo.c index 3ee6bc58..474ba86a 100644 --- a/gst/scaletempo/gstscaletempo.c +++ b/gst/scaletempo/gstscaletempo.c @@ -113,7 +113,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", G_DEFINE_TYPE_WITH_CODE (GstScaletempo, gst_scaletempo, GST_TYPE_BASE_TRANSFORM, DEBUG_INIT (0)); -typedef struct _GstScaletempoPrivate +struct _GstScaletempoPrivate { gdouble scale; /* parameters */ @@ -151,16 +151,17 @@ typedef struct _GstScaletempoPrivate guint (*best_overlap_offset) (GstScaletempo * scaletempo); /* gstreamer */ gint64 segment_start; + GstClockTime latency; /* threads */ gboolean reinit_buffers; -} GstScaletempoPrivate; +}; #define GST_SCALETEMPO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_SCALETEMPO, GstScaletempoPrivate)) static guint best_overlap_offset_float (GstScaletempo * scaletempo) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gfloat *pw, *po, *ppc, *search_start; gfloat best_corr = G_MININT; guint best_off = 0; @@ -197,7 +198,7 @@ best_overlap_offset_float (GstScaletempo * scaletempo) static guint best_overlap_offset_s16 (GstScaletempo * scaletempo) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gint32 *pw, *ppc; gint16 *po, *search_start; gint64 best_corr = G_MININT64; @@ -242,7 +243,7 @@ static void output_overlap_float (GstScaletempo * scaletempo, gpointer buf_out, guint bytes_off) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gfloat *pout = buf_out; gfloat *pb = p->table_blend; gfloat *po = p->buf_overlap; @@ -258,7 +259,7 @@ static void output_overlap_s16 (GstScaletempo * scaletempo, gpointer buf_out, guint bytes_off) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gint16 *pout = buf_out; gint32 *pb = p->table_blend; gint16 *po = p->buf_overlap; @@ -273,7 +274,7 @@ output_overlap_s16 (GstScaletempo * scaletempo, static guint fill_queue (GstScaletempo * scaletempo, GstBuffer * buf_in, guint offset) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; guint bytes_in = gst_buffer_get_size (buf_in) - offset; guint offset_unchanged = offset; GstMapInfo map; @@ -310,10 +311,11 @@ fill_queue (GstScaletempo * scaletempo, GstBuffer * buf_in, guint offset) static void reinit_buffers (GstScaletempo * scaletempo) { - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gint i, j; guint frames_overlap; guint new_size; + GstClockTime latency; guint frames_stride = p->ms_stride * p->sample_rate / 1000.0; p->bytes_stride = frames_stride * p->bytes_per_frame; @@ -411,9 +413,19 @@ reinit_buffers (GstScaletempo * scaletempo) p->bytes_queued = new_queued; } } + p->bytes_queue_max = new_size; p->buf_queue = g_realloc (p->buf_queue, p->bytes_queue_max); + latency = + gst_util_uint64_scale (p->bytes_queue_max, GST_SECOND, + p->bytes_per_frame * p->sample_rate); + if (p->latency != latency) { + p->latency = latency; + gst_element_post_message (GST_ELEMENT (scaletempo), + gst_message_new_latency (GST_OBJECT (scaletempo))); + } + p->bytes_stride_scaled = p->bytes_stride * p->scale; p->frames_stride_scaled = p->bytes_stride_scaled / p->bytes_per_frame; @@ -436,10 +448,11 @@ gst_scaletempo_transform (GstBaseTransform * trans, GstBuffer * inbuf, GstBuffer * outbuf) { GstScaletempo *scaletempo = GST_SCALETEMPO (trans); - GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *p = scaletempo->priv; gint8 *pout; guint offset_in, bytes_out; GstMapInfo omap; + GstClockTime timestamp; gst_buffer_map (outbuf, &omap, GST_MAP_WRITE); pout = (gint8 *) omap.data; @@ -450,7 +463,7 @@ gst_scaletempo_transform (GstBaseTransform * trans, gdouble frames_to_slide; guint frames_to_stride_whole; - // output stride + /* output stride */ if (p->output_overlap) { if (p->best_overlap_offset) { bytes_off = p->best_overlap_offset (scaletempo); @@ -462,7 +475,7 @@ gst_scaletempo_transform (GstBaseTransform * trans, pout += p->bytes_stride; bytes_out += p->bytes_stride; - // input stride + /* input stride */ memcpy (p->buf_overlap, p->buf_queue + bytes_off + p->bytes_stride, p->bytes_overlap); frames_to_slide = p->frames_stride_scaled + p->frames_stride_error; @@ -475,11 +488,17 @@ gst_scaletempo_transform (GstBaseTransform * trans, gst_buffer_unmap (outbuf, &omap); + timestamp = GST_BUFFER_TIMESTAMP (inbuf) - p->segment_start; + if (timestamp < p->latency) + timestamp = 0; + else + timestamp -= p->latency; + GST_BUFFER_TIMESTAMP (outbuf) = timestamp / p->scale + p->segment_start; + GST_BUFFER_DURATION (outbuf) = + gst_util_uint64_scale (bytes_out, GST_SECOND, + p->bytes_per_frame * p->sample_rate); gst_buffer_set_size (outbuf, bytes_out); - GST_BUFFER_TIMESTAMP (outbuf) = - (GST_BUFFER_TIMESTAMP (outbuf) - p->segment_start) / p->scale + - p->segment_start; - //GST_BUFFER_DURATION (outbuf) = bytes_out * GST_SECOND / (p->bytes_per_frame * p->sample_rate); + return GST_FLOW_OK; } @@ -490,7 +509,7 @@ gst_scaletempo_transform_size (GstBaseTransform * trans, { if (direction == GST_PAD_SINK) { GstScaletempo *scaletempo = GST_SCALETEMPO (trans); - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv = scaletempo->priv; gint bytes_to_out; if (priv->reinit_buffers) @@ -517,7 +536,7 @@ gst_scaletempo_sink_event (GstBaseTransform * trans, GstEvent * event) { if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) { GstScaletempo *scaletempo = GST_SCALETEMPO (trans); - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv = scaletempo->priv; GstSegment segment; gst_event_copy_segment (event, &segment); @@ -546,7 +565,7 @@ gst_scaletempo_sink_event (GstBaseTransform * trans, GstEvent * event) priv->segment_start = segment.start; segment.applied_rate = priv->scale; segment.rate = 1.0; - //gst_event_unref (event); + gst_event_unref (event); if (segment.stop != -1) { segment.stop = (segment.stop - segment.start) / segment.applied_rate + @@ -566,7 +585,7 @@ gst_scaletempo_set_caps (GstBaseTransform * trans, GstCaps * incaps, GstCaps * outcaps) { GstScaletempo *scaletempo = GST_SCALETEMPO (trans); - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv = scaletempo->priv; gint width, bps, nch, rate; gboolean use_int; @@ -598,6 +617,59 @@ gst_scaletempo_set_caps (GstBaseTransform * trans, return TRUE; } +static gboolean +gst_scaletempo_query (GstBaseTransform * trans, GstPadDirection direction, + GstQuery * query) +{ + GstScaletempo *scaletempo = GST_SCALETEMPO (trans); + GstScaletempoPrivate *p = scaletempo->priv; + + if (direction == GST_PAD_SRC) { + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_LATENCY:{ + GstPad *peer; + gboolean res; + + if ((peer = gst_pad_get_peer (GST_BASE_TRANSFORM_SINK_PAD (trans)))) { + if ((res = gst_pad_query (peer, query))) { + GstClockTime min, max; + gboolean live; + + gst_query_parse_latency (query, &live, &min, &max); + + GST_DEBUG_OBJECT (scaletempo, "Peer latency: min %" + GST_TIME_FORMAT " max %" GST_TIME_FORMAT, + GST_TIME_ARGS (min), GST_TIME_ARGS (max)); + + /* add our own latency */ + GST_DEBUG_OBJECT (scaletempo, "Our latency: %" GST_TIME_FORMAT, + GST_TIME_ARGS (p->latency)); + min += p->latency; + if (max != GST_CLOCK_TIME_NONE) + max += p->latency; + + GST_DEBUG_OBJECT (scaletempo, "Calculated total latency : min %" + GST_TIME_FORMAT " max %" GST_TIME_FORMAT, + GST_TIME_ARGS (min), GST_TIME_ARGS (max)); + gst_query_set_latency (query, live, min, max); + } + gst_object_unref (peer); + } + + return TRUE; + break; + } + default:{ + return GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction, + query); + break; + } + } + } else { + return GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction, + query); + } +} /* GObject vmethod implementations */ static void @@ -605,7 +677,7 @@ gst_scaletempo_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstScaletempo *scaletempo = GST_SCALETEMPO (object); - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv = scaletempo->priv; switch (prop_id) { case PROP_RATE: @@ -631,7 +703,7 @@ gst_scaletempo_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstScaletempo *scaletempo = GST_SCALETEMPO (object); - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv = scaletempo->priv; switch (prop_id) { case PROP_STRIDE:{ @@ -699,7 +771,7 @@ gst_scaletempo_class_init (GstScaletempoClass * klass) gst_static_pad_template_get (&src_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (gstelement_class, "Scaletempo", + gst_element_class_set_static_metadata (gstelement_class, "Scaletempo", "Filter/Effect/Rate", "Sync audio tempo with playback rate", "Rov Juvano <rovjuvano@users.sourceforge.net>"); @@ -710,12 +782,16 @@ gst_scaletempo_class_init (GstScaletempoClass * klass) basetransform_class->transform_size = GST_DEBUG_FUNCPTR (gst_scaletempo_transform_size); basetransform_class->transform = GST_DEBUG_FUNCPTR (gst_scaletempo_transform); + basetransform_class->query = GST_DEBUG_FUNCPTR (gst_scaletempo_query); } static void gst_scaletempo_init (GstScaletempo * scaletempo) { - GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + GstScaletempoPrivate *priv; + + scaletempo->priv = priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo); + /* defaults */ priv->ms_stride = 30; priv->percent_overlap = .2; diff --git a/gst/scaletempo/gstscaletempo.h b/gst/scaletempo/gstscaletempo.h index af2e8bbf..7a04be73 100644 --- a/gst/scaletempo/gstscaletempo.h +++ b/gst/scaletempo/gstscaletempo.h @@ -32,10 +32,13 @@ G_BEGIN_DECLS #define GST_IS_SCALETEMPO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_SCALETEMPO)) typedef struct _GstScaletempo GstScaletempo; typedef struct _GstScaletempoClass GstScaletempoClass; +typedef struct _GstScaletempoPrivate GstScaletempoPrivate; struct _GstScaletempo { GstBaseTransform element; + + GstScaletempoPrivate *priv; }; struct _GstScaletempoClass diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in index 670c0550..d6118ac3 100644 --- a/gst/sdi/Makefile.in +++ b/gst/sdi/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/sdi/gstsdidemux.c b/gst/sdi/gstsdidemux.c index 0b12db73..fe90cfb5 100644 --- a/gst/sdi/gstsdidemux.c +++ b/gst/sdi/gstsdidemux.c @@ -110,7 +110,7 @@ gst_sdi_demux_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_sdi_demux_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "SDI Demuxer", "Demuxer", "Demultiplex SDI streams into raw audio and video", diff --git a/gst/sdi/gstsdimux.c b/gst/sdi/gstsdimux.c index 8682502f..a7717257 100644 --- a/gst/sdi/gstsdimux.c +++ b/gst/sdi/gstsdimux.c @@ -113,7 +113,7 @@ gst_sdi_mux_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_sdi_mux_sink_template)); - gst_element_class_set_metadata (element_class, "SDI Muxer", + gst_element_class_set_static_metadata (element_class, "SDI Muxer", "Muxer", "Multiplex raw audio and video into SDI", "David Schleef <ds@schleef.org>"); diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in index b51a9410..1b31b444 100644 --- a/gst/sdp/Makefile.in +++ b/gst/sdp/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/sdp/gstsdpdemux.c b/gst/sdp/gstsdpdemux.c index e34e7d65..7a638c4b 100644 --- a/gst/sdp/gstsdpdemux.c +++ b/gst/sdp/gstsdpdemux.c @@ -165,7 +165,7 @@ gst_sdp_demux_class_init (GstSDPDemuxClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&rtptemplate)); - gst_element_class_set_metadata (gstelement_class, "SDP session setup", + gst_element_class_set_static_metadata (gstelement_class, "SDP session setup", "Codec/Demuxer/Network/RTP", "Receive data over the network via SDP", "Wim Taymans <wim.taymans@gmail.com>"); diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in index 9fc1d1f4..7ac496c0 100644 --- a/gst/segmentclip/Makefile.in +++ b/gst/segmentclip/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/segmentclip/gstaudiosegmentclip.c b/gst/segmentclip/gstaudiosegmentclip.c index b48b0581..7ace07a7 100644 --- a/gst/segmentclip/gstaudiosegmentclip.c +++ b/gst/segmentclip/gstaudiosegmentclip.c @@ -61,7 +61,7 @@ gst_audio_segment_clip_class_init (GstAudioSegmentClipClass * klass) segment_clip_klass->clip_buffer = GST_DEBUG_FUNCPTR (gst_audio_segment_clip_clip_buffer); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Audio buffer segment clipper", "Filter/Audio", "Clips audio buffers to the configured segment", diff --git a/gst/segmentclip/gstvideosegmentclip.c b/gst/segmentclip/gstvideosegmentclip.c index 174da76f..4cb84640 100644 --- a/gst/segmentclip/gstvideosegmentclip.c +++ b/gst/segmentclip/gstvideosegmentclip.c @@ -55,7 +55,7 @@ gst_video_segment_clip_class_init (GstVideoSegmentClipClass * klass) GST_DEBUG_CATEGORY_INIT (gst_video_segment_clip_debug, "videosegmentclip", 0, "videosegmentclip element"); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Video buffer segment clipper", "Filter/Video", "Clips video buffers to the configured segment", diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in index bd7f16db..cf8cf338 100644 --- a/gst/siren/Makefile.in +++ b/gst/siren/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c index 9afc1419..fbdfcd04 100644 --- a/gst/siren/gstsirendec.c +++ b/gst/siren/gstsirendec.c @@ -78,7 +78,7 @@ gst_siren_dec_class_init (GstSirenDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (element_class, "Siren Decoder element", + gst_element_class_set_static_metadata (element_class, "Siren Decoder element", "Codec/Decoder/Audio ", "Decode streams encoded with the Siren7 codec into 16bit PCM", "Youness Alaoui <kakaroto@kakaroto.homelinux.net>"); diff --git a/gst/siren/gstsirenenc.c b/gst/siren/gstsirenenc.c index e3c63a40..caf039e4 100644 --- a/gst/siren/gstsirenenc.c +++ b/gst/siren/gstsirenenc.c @@ -76,7 +76,7 @@ gst_siren_enc_class_init (GstSirenEncClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (element_class, "Siren Encoder element", + gst_element_class_set_static_metadata (element_class, "Siren Encoder element", "Codec/Encoder/Audio ", "Encode 16bit PCM streams into the Siren7 codec", "Youness Alaoui <kakaroto@kakaroto.homelinux.net>"); diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in index 43cfd70c..b7c25f7f 100644 --- a/gst/smooth/Makefile.in +++ b/gst/smooth/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/smooth/gstsmooth.c b/gst/smooth/gstsmooth.c index 8a72942f..76be7316 100644 --- a/gst/smooth/gstsmooth.c +++ b/gst/smooth/gstsmooth.c @@ -93,7 +93,7 @@ gst_smooth_class_init (GstSmoothClass * klass) gst_static_pad_template_get (&gst_smooth_sink_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_smooth_src_template)); - gst_element_class_set_metadata (gstelement_class, "Smooth effect", + gst_element_class_set_static_metadata (gstelement_class, "Smooth effect", "Filter/Effect/Video", "Apply a smooth filter to an image", "Wim Taymans <wim.taymans@chello.be>"); diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in index 63045c39..6ff2e409 100644 --- a/gst/speed/Makefile.in +++ b/gst/speed/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c index bfaf958f..a29baa2b 100644 --- a/gst/speed/gstspeed.c +++ b/gst/speed/gstspeed.c @@ -387,7 +387,7 @@ gst_speed_class_init (GstSpeedClass * klass) 0.1, 40.0, 1.0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, "Speed", + gst_element_class_set_static_metadata (gstelement_class, "Speed", "Filter/Effect/Audio", "Set speed/pitch on audio/raw streams (resampler)", "Andy Wingo <apwingo@eos.ncsu.edu>, " diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in index 4a6a0bd4..3f8d4fbc 100644 --- a/gst/stereo/Makefile.in +++ b/gst/stereo/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/stereo/gststereo.c b/gst/stereo/gststereo.c index 767ee42a..25d99659 100644 --- a/gst/stereo/gststereo.c +++ b/gst/stereo/gststereo.c @@ -86,7 +86,7 @@ gst_stereo_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); GstCaps *caps; - gst_element_class_set_metadata (element_class, "Stereo effect", + gst_element_class_set_static_metadata (element_class, "Stereo effect", "Filter/Effect/Audio", "Muck with the stereo signal to enhance its 'stereo-ness'", "Erik Walthinsen <omega@cse.ogi.edu>"); diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in index 898ddd6e..2e0e8885 100644 --- a/gst/subenc/Makefile.in +++ b/gst/subenc/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/subenc/gstsrtenc.c b/gst/subenc/gstsrtenc.c index 496e6439..46cb910c 100644 --- a/gst/subenc/gstsrtenc.c +++ b/gst/subenc/gstsrtenc.c @@ -20,10 +20,10 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "string.h" + +#include <string.h> #include "gstsrtenc.h" -#include <gst/controller/gstcontroller.h> GST_DEBUG_CATEGORY_STATIC (srtenc_debug); #define GST_CAT_DEFAULT srtenc_debug @@ -43,21 +43,23 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("text/plain; text/x-pango-markup")); + GST_STATIC_CAPS ("text/x-raw, format = { pango-markup, utf8 }")); -static GstFlowReturn gst_srt_enc_chain (GstPad * pad, GstBuffer * buf); -static gchar *gst_srt_enc_timeconvertion (GstSrtEnc * srtenc, GstBuffer * buf); -static gchar *gst_srt_enc_timestamp_to_string (GstClockTime timestamp); +static GstFlowReturn gst_srt_enc_chain (GstPad * pad, GstObject * parent, + GstBuffer * buf); +static gboolean gst_srt_enc_event (GstPad * pad, GstObject * parent, + GstEvent * event); static void gst_srt_enc_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void gst_srt_enc_reset (GstSrtEnc * srtenc); static void gst_srt_enc_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -GST_BOILERPLATE (GstSrtEnc, gst_srt_enc, GstElement, GST_TYPE_ELEMENT); +#define parent_class gst_srt_enc_parent_class +G_DEFINE_TYPE (GstSrtEnc, gst_srt_enc, GST_TYPE_ELEMENT); -static gchar * -gst_srt_enc_timestamp_to_string (GstClockTime timestamp) +static void +gst_srt_enc_append_timestamp_to_string (GstClockTime timestamp, GString * str) { guint h, m, s, ms; @@ -72,65 +74,84 @@ gst_srt_enc_timestamp_to_string (GstClockTime timestamp) timestamp -= s * GST_SECOND; ms = timestamp / GST_MSECOND; - return g_strdup_printf ("%.2d:%.2d:%.2d,%.3d", h, m, s, ms); -} - -static gchar * -gst_srt_enc_timeconvertion (GstSrtEnc * srtenc, GstBuffer * buf) -{ - gchar *start_time = - gst_srt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) + - srtenc->timestamp); - gchar *stop_time = - gst_srt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) + - srtenc->timestamp + GST_BUFFER_DURATION (buf) + srtenc->duration); - gchar *string = g_strdup_printf ("%s --> %s\n", start_time, stop_time); - - g_free (start_time); - g_free (stop_time); - return string; + g_string_append_printf (str, "%.2d:%.2d:%.2d,%.3d", h, m, s, ms); } static GstFlowReturn -gst_srt_enc_chain (GstPad * pad, GstBuffer * buf) +gst_srt_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { - GstSrtEnc *srtenc; + GstSrtEnc *srtenc = GST_SRT_ENC (parent); + GstClockTime ts, dur = GST_SECOND; GstBuffer *new_buffer; - gchar *timing; - gchar *string; - - srtenc = GST_SRT_ENC (gst_pad_get_parent_element (pad)); - gst_object_sync_values (GST_OBJECT (srtenc), GST_BUFFER_TIMESTAMP (buf)); - timing = gst_srt_enc_timeconvertion (srtenc, buf); - string = g_strdup_printf ("%d\n%s", srtenc->counter++, timing); - g_free (timing); - new_buffer = - gst_buffer_new_and_alloc (strlen (string) + GST_BUFFER_SIZE (buf) + 2); - memcpy (GST_BUFFER_DATA (new_buffer), string, strlen (string)); - memcpy (GST_BUFFER_DATA (new_buffer) + strlen (string), GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf)); - memcpy (GST_BUFFER_DATA (new_buffer) + GST_BUFFER_SIZE (new_buffer) - 2, - "\n\n", 2); - g_free (string); + GstMapInfo map_info; + GString *s; + gsize buf_size; + + gst_object_sync_values (GST_OBJECT (srtenc), GST_BUFFER_PTS (buf)); + + ts = GST_BUFFER_PTS (buf) + srtenc->timestamp; + if (GST_BUFFER_DURATION_IS_VALID (buf)) + dur = GST_BUFFER_DURATION (buf) + srtenc->duration; + else if (srtenc->duration > 0) + dur = srtenc->duration; + else + dur = GST_SECOND; + + buf_size = gst_buffer_get_size (buf); + s = g_string_sized_new (10 + 50 + buf_size + 2 + 1); + + /* stanza count */ + g_string_append_printf (s, "%d\n", srtenc->counter++); + + /* start_time --> end_time */ + gst_srt_enc_append_timestamp_to_string (ts, s); + g_string_append_printf (s, " --> "); + gst_srt_enc_append_timestamp_to_string (ts + dur, s); + g_string_append_c (s, '\n'); + + /* text */ + if (gst_buffer_map (buf, &map_info, GST_MAP_READ)) { + g_string_append_len (s, (const gchar *) map_info.data, map_info.size); + gst_buffer_unmap (buf, &map_info); + } + + g_string_append (s, "\n\n"); + + buf_size = s->len; + new_buffer = gst_buffer_new_wrapped (g_string_free (s, FALSE), buf_size); + + GST_BUFFER_TIMESTAMP (new_buffer) = GST_BUFFER_TIMESTAMP (buf); + GST_BUFFER_DURATION (new_buffer) = GST_BUFFER_DURATION (buf); gst_buffer_unref (buf); return gst_pad_push (srtenc->srcpad, new_buffer); } -static void -gst_srt_enc_base_init (gpointer klass) +static gboolean +gst_srt_enc_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&sink_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_template)); + GstSrtEnc *srtenc = GST_SRT_ENC (parent); + gboolean ret; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_CAPS: + { + GstCaps *caps; + + caps = gst_static_pad_template_get_caps (&src_template); + gst_pad_set_caps (srtenc->srcpad, caps); + gst_caps_unref (caps); + gst_event_unref (event); + ret = TRUE; + break; + } + default: + ret = gst_pad_event_default (pad, parent, event); + break; + } - gst_element_class_set_metadata (element_class, - "Srt encoder", "Codec/Encoder/Subtitle", - "Srt subtitle encoder", "Thijs Vermeir <thijsvermeir@gmail.com>"); + return ret; } static void @@ -225,18 +246,31 @@ gst_srt_enc_class_init (GstSrtEncClass * klass) 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&sink_template)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&src_template)); + + gst_element_class_set_static_metadata (element_class, + "Srt encoder", "Codec/Encoder/Subtitle", + "Srt subtitle encoder", "Thijs Vermeir <thijsvermeir@gmail.com>"); + GST_DEBUG_CATEGORY_INIT (srtenc_debug, "srtenc", 0, "SubRip subtitle encoder"); } static void -gst_srt_enc_init (GstSrtEnc * srtenc, GstSrtEncClass * klass) +gst_srt_enc_init (GstSrtEnc * srtenc) { gst_srt_enc_reset (srtenc); srtenc->srcpad = gst_pad_new_from_static_template (&src_template, "src"); gst_element_add_pad (GST_ELEMENT (srtenc), srtenc->srcpad); + srtenc->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink"); + gst_pad_set_chain_function (srtenc->sinkpad, + GST_DEBUG_FUNCPTR (gst_srt_enc_chain)); + gst_pad_set_event_function (srtenc->sinkpad, + GST_DEBUG_FUNCPTR (gst_srt_enc_event)); gst_element_add_pad (GST_ELEMENT (srtenc), srtenc->sinkpad); - gst_pad_set_chain_function (srtenc->sinkpad, gst_srt_enc_chain); } diff --git a/gst/subenc/gstwebvttenc.c b/gst/subenc/gstwebvttenc.c index 72737212..f1d08fd8 100644 --- a/gst/subenc/gstwebvttenc.c +++ b/gst/subenc/gstwebvttenc.c @@ -21,10 +21,10 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#include "string.h" + +#include <string.h> #include "gstwebvttenc.h" -#include <gst/controller/gstcontroller.h> GST_DEBUG_CATEGORY_STATIC (webvttenc_debug); #define GST_CAT_DEFAULT webvttenc_debug @@ -39,27 +39,29 @@ enum static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("text/webvtt")); + GST_STATIC_CAPS ("text/vtt")); static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("text/plain; text/x-pango-markup")); + GST_STATIC_CAPS ("text/x-raw, format = { pango-markup, utf8 }")); -static GstFlowReturn gst_webvtt_enc_chain (GstPad * pad, GstBuffer * buf); -static gchar *gst_webvtt_enc_timeconvertion (GstWebvttEnc * webvttenc, +static GstFlowReturn gst_webvtt_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf); -static gchar *gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp); +static void gst_webvtt_enc_append_timestamp_to_string (GstClockTime timestamp, + GString * str); static void gst_webvtt_enc_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void gst_webvtt_enc_reset (GstWebvttEnc * webvttenc); static void gst_webvtt_enc_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); -GST_BOILERPLATE (GstWebvttEnc, gst_webvtt_enc, GstElement, GST_TYPE_ELEMENT); +#define parent_class gst_webvtt_enc_parent_class +G_DEFINE_TYPE (GstWebvttEnc, gst_webvtt_enc, GST_TYPE_ELEMENT); -static gchar * -gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp) +static void +gst_webvtt_enc_append_timestamp_to_string (GstClockTime timestamp, + GString * str) { guint h, m, s, ms; @@ -74,97 +76,102 @@ gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp) timestamp -= s * GST_SECOND; ms = timestamp / GST_MSECOND; - return g_strdup_printf ("%02d:%02d:%02d.%03d", h, m, s, ms); -} - -static gchar * -gst_webvtt_enc_timeconvertion (GstWebvttEnc * webvttenc, GstBuffer * buf) -{ - gchar *start_time; - gchar *stop_time; - gchar *string; - - start_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) + - webvttenc->timestamp); - if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buf))) { - stop_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) + - webvttenc->timestamp + GST_BUFFER_DURATION (buf) + webvttenc->duration); - } else { - stop_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) + - webvttenc->timestamp + webvttenc->duration); - } - string = g_strdup_printf ("%s --> %s\n", start_time, stop_time); - - g_free (start_time); - g_free (stop_time); - return string; + g_string_append_printf (str, "%02d:%02d:%02d.%03d", h, m, s, ms); } static GstFlowReturn -gst_webvtt_enc_chain (GstPad * pad, GstBuffer * buf) +gst_webvtt_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { - GstWebvttEnc *webvttenc; + GstWebvttEnc *webvttenc = GST_WEBVTT_ENC (parent); + GstClockTime ts, dur = GST_SECOND; GstBuffer *new_buffer; - gchar *timing; + GstMapInfo map_info; GstFlowReturn ret; - - webvttenc = GST_WEBVTT_ENC (gst_pad_get_parent_element (pad)); + GString *s; + gsize buf_size; if (!webvttenc->pushed_header) { const char *header = "WEBVTT\n\n"; - new_buffer = gst_buffer_new_and_alloc (strlen (header)); - memcpy (GST_BUFFER_DATA (new_buffer), header, strlen (header)); + new_buffer = gst_buffer_new_wrapped (g_strdup (header), strlen (header)); - GST_BUFFER_TIMESTAMP (new_buffer) = GST_CLOCK_TIME_NONE; + GST_BUFFER_PTS (new_buffer) = GST_CLOCK_TIME_NONE; GST_BUFFER_DURATION (new_buffer) = GST_CLOCK_TIME_NONE; ret = gst_pad_push (webvttenc->srcpad, new_buffer); - if (ret != GST_FLOW_OK) { + + if (ret != GST_FLOW_OK) goto out; - } webvttenc->pushed_header = TRUE; } - gst_object_sync_values (GST_OBJECT (webvttenc), GST_BUFFER_TIMESTAMP (buf)); + gst_object_sync_values (GST_OBJECT (webvttenc), GST_BUFFER_PTS (buf)); + + ts = GST_BUFFER_PTS (buf) + webvttenc->timestamp; + if (GST_BUFFER_DURATION_IS_VALID (buf)) + dur = GST_BUFFER_DURATION (buf) + webvttenc->duration; + else if (webvttenc->duration > 0) + dur = webvttenc->duration; + else + dur = GST_SECOND; + + buf_size = gst_buffer_get_size (buf); + s = g_string_sized_new (50 + buf_size + 1 + 1); + + /* start_time --> end_time */ + gst_webvtt_enc_append_timestamp_to_string (ts, s); + g_string_append_printf (s, " --> "); + gst_webvtt_enc_append_timestamp_to_string (ts + dur, s); + g_string_append_c (s, '\n'); + + /* text */ + if (gst_buffer_map (buf, &map_info, GST_MAP_READ)) { + g_string_append_len (s, (const gchar *) map_info.data, map_info.size); + gst_buffer_unmap (buf, &map_info); + } + + g_string_append_c (s, '\n'); - timing = gst_webvtt_enc_timeconvertion (webvttenc, buf); - new_buffer = - gst_buffer_new_and_alloc (strlen (timing) + GST_BUFFER_SIZE (buf) + 1); - memcpy (GST_BUFFER_DATA (new_buffer), timing, strlen (timing)); - memcpy (GST_BUFFER_DATA (new_buffer) + strlen (timing), GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf)); - memcpy (GST_BUFFER_DATA (new_buffer) + GST_BUFFER_SIZE (new_buffer) - 1, - "\n", 1); - g_free (timing); + buf_size = s->len; + new_buffer = gst_buffer_new_wrapped (g_string_free (s, FALSE), buf_size); GST_BUFFER_TIMESTAMP (new_buffer) = GST_BUFFER_TIMESTAMP (buf); GST_BUFFER_DURATION (new_buffer) = GST_BUFFER_DURATION (buf); - ret = gst_pad_push (webvttenc->srcpad, new_buffer); out: + gst_buffer_unref (buf); - gst_object_unref (webvttenc); return ret; } -static void -gst_webvtt_enc_base_init (gpointer klass) +static gboolean +gst_webvtt_enc_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&sink_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_template)); + GstWebvttEnc *webvttenc = GST_WEBVTT_ENC (parent); + gboolean ret; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_CAPS: + { + GstCaps *caps; + + caps = gst_static_pad_template_get_caps (&src_template); + gst_pad_set_caps (webvttenc->srcpad, caps); + gst_caps_unref (caps); + gst_event_unref (event); + ret = TRUE; + break; + } + default: + ret = gst_pad_event_default (pad, parent, event); + break; + } - gst_element_class_set_metadata (element_class, - "WebVTT encoder", "Codec/Encoder/Subtitle", - "WebVTT subtitle encoder", "David Schleef <ds@schleef.org>"); + return ret; } static void @@ -259,12 +266,21 @@ gst_webvtt_enc_class_init (GstWebvttEncClass * klass) 0, G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&sink_template)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&src_template)); + + gst_element_class_set_static_metadata (element_class, + "WebVTT encoder", "Codec/Encoder/Subtitle", + "WebVTT subtitle encoder", "David Schleef <ds@schleef.org>"); + GST_DEBUG_CATEGORY_INIT (webvttenc_debug, "webvttenc", 0, "SubRip subtitle encoder"); } static void -gst_webvtt_enc_init (GstWebvttEnc * webvttenc, GstWebvttEncClass * klass) +gst_webvtt_enc_init (GstWebvttEnc * webvttenc) { gst_webvtt_enc_reset (webvttenc); @@ -272,6 +288,9 @@ gst_webvtt_enc_init (GstWebvttEnc * webvttenc, GstWebvttEncClass * klass) gst_element_add_pad (GST_ELEMENT (webvttenc), webvttenc->srcpad); webvttenc->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink"); + gst_pad_set_chain_function (webvttenc->sinkpad, + GST_DEBUG_FUNCPTR (gst_webvtt_enc_chain)); + gst_pad_set_event_function (webvttenc->sinkpad, + GST_DEBUG_FUNCPTR (gst_webvtt_enc_event)); gst_element_add_pad (GST_ELEMENT (webvttenc), webvttenc->sinkpad); - gst_pad_set_chain_function (webvttenc->sinkpad, gst_webvtt_enc_chain); } diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in index c0909652..78af10b7 100644 --- a/gst/tta/Makefile.in +++ b/gst/tta/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/tta/gstttadec.c b/gst/tta/gstttadec.c index aa7f4d0a..38da3d40 100644 --- a/gst/tta/gstttadec.c +++ b/gst/tta/gstttadec.c @@ -175,7 +175,7 @@ gst_tta_dec_base_init (GstTtaDecClass * klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, "TTA audio decoder", + gst_element_class_set_static_metadata (element_class, "TTA audio decoder", "Codec/Decoder/Audio", "Decode TTA audio data", "Arwed v. Merkatz <v.merkatz@gmx.net>"); } diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c index 9f164d72..25410545 100644 --- a/gst/tta/gstttaparse.c +++ b/gst/tta/gstttaparse.c @@ -96,7 +96,7 @@ gst_tta_parse_base_init (GstTtaParseClass * klass) gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_metadata (element_class, "TTA file parser", + gst_element_class_set_static_metadata (element_class, "TTA file parser", "Codec/Demuxer/Audio", "Parses TTA files", "Arwed v. Merkatz <v.merkatz@gmx.net>"); } diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in index c13b290f..d607bcc2 100644 --- a/gst/videofilters/Makefile.in +++ b/gst/videofilters/Makefile.in @@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/videofilters/gstscenechange.c b/gst/videofilters/gstscenechange.c index b15439d4..864cad34 100644 --- a/gst/videofilters/gstscenechange.c +++ b/gst/videofilters/gstscenechange.c @@ -132,7 +132,7 @@ gst_scene_change_base_init (gpointer g_class) GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Scene change detector", + gst_element_class_set_static_metadata (element_class, "Scene change detector", "Video/Filter", "Detects scene changes in video", "David Schleef <ds@entropywave.com>"); } diff --git a/gst/videofilters/gstzebrastripe.c b/gst/videofilters/gstzebrastripe.c index bcf0318c..62306887 100644 --- a/gst/videofilters/gstzebrastripe.c +++ b/gst/videofilters/gstzebrastripe.c @@ -94,7 +94,7 @@ gst_zebra_stripe_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Zebra stripe overlay", + gst_element_class_set_static_metadata (element_class, "Zebra stripe overlay", "Filter/Analysis", "Overlays zebra striping on overexposed areas of video", "David Schleef <ds@entropywave.com>"); diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in index ca4b04db..a8819c55 100644 --- a/gst/videomeasure/Makefile.in +++ b/gst/videomeasure/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/videomeasure/gstvideomeasure_collector.c b/gst/videomeasure/gstvideomeasure_collector.c index 081ce199..c51e4bbf 100644 --- a/gst/videomeasure/gstvideomeasure_collector.c +++ b/gst/videomeasure/gstvideomeasure_collector.c @@ -318,7 +318,7 @@ gst_measure_collector_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Video measure collector", "Filter/Effect/Video", "Collect measurements from a measuring element", "Руслан Ижбулатов <lrn _at_ gmail _dot_ com>"); diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c index 5e56875d..c0edd608 100644 --- a/gst/videomeasure/gstvideomeasure_ssim.c +++ b/gst/videomeasure/gstvideomeasure_ssim.c @@ -1101,7 +1101,7 @@ gst_ssim_class_init (GstSSimClass * klass) gst_static_pad_template_get (&gst_ssim_sink_original_template)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_ssim_sink_modified_template)); - gst_element_class_set_metadata (gstelement_class, "SSim", + gst_element_class_set_static_metadata (gstelement_class, "SSim", "Filter/Analyzer/Video", "Calculate Y-SSIM for n+2 YUV video streams", "Руслан Ижбулатов <lrn1986 _at_ gmail _dot_ com>"); diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in index fa7a5eb7..a0a9a2df 100644 --- a/gst/videoparsers/Makefile.in +++ b/gst/videoparsers/Makefile.in @@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c index 0f0bdb9a..25af43d8 100644 --- a/gst/videoparsers/gstdiracparse.c +++ b/gst/videoparsers/gstdiracparse.c @@ -113,7 +113,7 @@ gst_dirac_parse_class_init (GstDiracParseClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_dirac_parse_sink_template)); - gst_element_class_set_metadata (element_class, "Dirac parser", + gst_element_class_set_static_metadata (element_class, "Dirac parser", "Codec/Parser/Video", "Parses Dirac streams", "David Schleef <ds@schleef.org>"); diff --git a/gst/videoparsers/gsth263parse.c b/gst/videoparsers/gsth263parse.c index 75187813..fbbdf05f 100644 --- a/gst/videoparsers/gsth263parse.c +++ b/gst/videoparsers/gsth263parse.c @@ -74,7 +74,7 @@ gst_h263_parse_class_init (GstH263ParseClass * klass) gst_static_pad_template_get (&srctemplate)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, "H.263 parser", + gst_element_class_set_static_metadata (gstelement_class, "H.263 parser", "Codec/Parser/Video", "Parses H.263 streams", "Arun Raghavan <arun.raghavan@collabora.co.uk>," diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c index 2b0db51f..bb9ada9d 100644 --- a/gst/videoparsers/gsth264parse.c +++ b/gst/videoparsers/gsth264parse.c @@ -135,7 +135,7 @@ gst_h264_parse_class_init (GstH264ParseClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, "H.264 parser", + gst_element_class_set_static_metadata (gstelement_class, "H.264 parser", "Codec/Parser/Converter/Video", "Parses H.264 streams", "Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>"); diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c index f08af17a..94a6feb2 100644 --- a/gst/videoparsers/gstmpeg4videoparse.c +++ b/gst/videoparsers/gstmpeg4videoparse.c @@ -155,7 +155,7 @@ gst_mpeg4vparse_class_init (GstMpeg4VParseClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MPEG 4 video elementary stream parser", "Codec/Parser/Video", "Parses MPEG-4 Part 2 elementary video streams", "Julien Moutte <julien@fluendo.com>"); @@ -191,6 +191,7 @@ gst_mpeg4vparse_reset_frame (GstMpeg4VParse * mp4vparse) mp4vparse->last_sc = -1; mp4vparse->vop_offset = -1; mp4vparse->vo_found = FALSE; + mp4vparse->config_found = FALSE; mp4vparse->vol_offset = -1; mp4vparse->vo_offset = -1; } @@ -372,7 +373,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet, } /* parse config data ending here if proper startcodes found earlier; * we should have received a visual object before. */ - if (mp4vparse->vo_found) { + if (mp4vparse->config_found) { /*Do not take care startcode into account */ gst_mpeg4vparse_process_config (mp4vparse, packet->data, packet->offset, packet->offset - 3); @@ -382,6 +383,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet, } case GST_MPEG4_VISUAL_OBJ_SEQ_START: GST_LOG_OBJECT (mp4vparse, "Visual Sequence Start"); + mp4vparse->config_found = TRUE; mp4vparse->profile = gst_codec_utils_mpeg4video_get_profile (packet->data + packet->offset + 1, packet->offset); mp4vparse->level = gst_codec_utils_mpeg4video_get_level (packet->data @@ -404,6 +406,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet, /* VO (video object) cases */ } else if (packet->type <= GST_MPEG4_VIDEO_OBJ_LAST) { GST_LOG_OBJECT (mp4vparse, "Video object"); + mp4vparse->config_found = TRUE; } break; } @@ -825,6 +828,7 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps) /* And take it as config */ gst_mpeg4vparse_process_config (mp4vparse, data, 3, size); gst_buffer_unmap (buf, &map); + gst_mpeg4vparse_reset_frame (mp4vparse); } /* let's not interfere and accept regardless of config parsing success */ diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h index 339af6a0..1c8835b3 100644 --- a/gst/videoparsers/gstmpeg4videoparse.h +++ b/gst/videoparsers/gstmpeg4videoparse.h @@ -51,6 +51,7 @@ struct _GstMpeg4VParse { gint last_sc; gint vop_offset; gboolean vo_found; + gboolean config_found; gboolean intra_frame; gboolean vop_coded; gboolean update_caps; diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c index f455f8f8..bb111b0d 100644 --- a/gst/videoparsers/gstmpegvideoparse.c +++ b/gst/videoparsers/gstmpegvideoparse.c @@ -148,7 +148,7 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "MPEG video elementary stream parser", "Codec/Parser/Video", "Parses and frames MPEG-1 and MPEG-2 elementary video streams", @@ -741,8 +741,9 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse) else GST_DEBUG_OBJECT (mpvparse, "Invalid level - %u", level_c); - gst_caps_set_simple (caps, "interlaced", - G_TYPE_BOOLEAN, !mpvparse->sequenceext.progressive, NULL); + gst_caps_set_simple (caps, "interlace-mode", + G_TYPE_STRING, + (mpvparse->sequenceext.progressive ? "progressive" : "mixed"), NULL); } gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (mpvparse), caps); @@ -834,6 +835,7 @@ gst_mpegv_parse_set_caps (GstBaseParse * parse, GstCaps * caps) * src caps are based on sink caps so it will end up in there * whether sucessful or not */ gst_mpegv_parse_process_config (mpvparse, buf, gst_buffer_get_size (buf)); + gst_mpegv_parse_reset_frame (mpvparse); } /* let's not interfere and accept regardless of config parsing success */ diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in index 9681ecb3..b1c4a367 100644 --- a/gst/videosignal/Makefile.in +++ b/gst/videosignal/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/videosignal/gstvideoanalyse.c b/gst/videosignal/gstvideoanalyse.c index d18ac77c..a900ae45 100644 --- a/gst/videosignal/gstvideoanalyse.c +++ b/gst/videosignal/gstvideoanalyse.c @@ -275,7 +275,7 @@ gst_video_analyse_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Video analyser", + gst_element_class_set_static_metadata (element_class, "Video analyser", "Filter/Analyzer/Video", "Analyse video signal", "Wim Taymans <wim@fluendo.com>"); diff --git a/gst/videosignal/gstvideodetect.c b/gst/videosignal/gstvideodetect.c index c98b6739..1ffbce55 100644 --- a/gst/videosignal/gstvideodetect.c +++ b/gst/videosignal/gstvideodetect.c @@ -434,7 +434,7 @@ gst_video_detect_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Video detecter", + gst_element_class_set_static_metadata (element_class, "Video detecter", "Filter/Effect/Video", "Detect patterns in a video signal", "Wim Taymans <wim@fluendo.com>"); diff --git a/gst/videosignal/gstvideomark.c b/gst/videosignal/gstvideomark.c index 117f2bda..a5ad0444 100644 --- a/gst/videosignal/gstvideomark.c +++ b/gst/videosignal/gstvideomark.c @@ -321,7 +321,7 @@ gst_video_mark_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Video marker", + gst_element_class_set_static_metadata (element_class, "Video marker", "Filter/Effect/Video", "Marks a video signal with a pattern", "Wim Taymans <wim@fluendo.com>"); diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in index 594348ef..dba868a4 100644 --- a/gst/vmnc/Makefile.in +++ b/gst/vmnc/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/vmnc/vmncdec.c b/gst/vmnc/vmncdec.c index 879e4dc8..bee4706a 100644 --- a/gst/vmnc/vmncdec.c +++ b/gst/vmnc/vmncdec.c @@ -172,7 +172,7 @@ gst_vmnc_dec_base_init (gpointer g_class) gst_static_pad_template_get (&vmnc_dec_src_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&vmnc_dec_sink_factory)); - gst_element_class_set_metadata (element_class, "VMnc video decoder", + gst_element_class_set_static_metadata (element_class, "VMnc video decoder", "Codec/Decoder/Video", "Decode VmWare video to raw (RGB) video", "Michael Smith <msmith@xiph.org>"); diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in index a8d49a0a..9f9accaa 100644 --- a/gst/y4m/Makefile.in +++ b/gst/y4m/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/gst/y4m/gsty4mdec.c b/gst/y4m/gsty4mdec.c index bb328e63..95d215dd 100644 --- a/gst/y4m/gsty4mdec.c +++ b/gst/y4m/gsty4mdec.c @@ -111,7 +111,7 @@ gst_y4m_dec_class_init (GstY4mDecClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_y4m_dec_sink_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "YUV4MPEG demuxer/decoder", "Codec/Demuxer", "Demuxes/decodes YUV4MPEG streams", "David Schleef <ds@schleef.org>"); } diff --git a/m4/Makefile.in b/m4/Makefile.in index 29294288..bb7417d3 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in index d665695b..807915cc 100644 --- a/pkgconfig/Makefile.in +++ b/pkgconfig/Makefile.in @@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.7.6\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2004-03-18 14:16+0200\n" "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n" "Language-Team: Afrikaans <i18n@af.org.za>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2004-03-19 18:29+0200\n" "Last-Translator: Metin Amiroff <metin@karegen.com>\n" "Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 22:30+0300\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" Binary files differ@@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2012-01-01 14:19+0100\n" "Last-Translator: Gil Forcada <gforcada@gnome.org>\n" "Language-Team: Catalan <ca@dodds.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-08-29 01:48+0200\n" "Last-Translator: Petr Kovar <pknbe@volny.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-28 11:28+0200\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-28 00:04+0200\n" "Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.18.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-09-02 12:32+0300\n" "Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\n" "Language-Team: Greek <team@lists.gnome.gr>\n" diff --git a/po/en_GB.gmo b/po/en_GB.gmo Binary files differindex 19b41121..cca29058 100644 --- a/po/en_GB.gmo +++ b/po/en_GB.gmo diff --git a/po/en_GB.po b/po/en_GB.po index bbcb0e4a..66ddba82 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.8.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2004-04-26 10:41-0400\n" "Last-Translator: Gareth Owen <gowen72@yahoo.com>\n" "Language-Team: English (British) <en_gb@li.org>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-06-04 22:18+0200\n" "Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-10-02 15:47+0200\n" "Last-Translator: Jorge González González <aloriel@gmail.com>\n" "Language-Team: Spanish <es@li.org>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-03-25 12:30+0100\n" "Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n" "Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n" Binary files differ@@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-08-12 22:13+0300\n" "Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-28 09:13+0200\n" "Last-Translator: Claude Paroz <claude@2xlibre.net>\n" "Language-Team: French <traduc@traduc.org>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-09-05 12:50+0200\n" "Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n" "Language-Team: Galician <proxecto@trasno.net>\n" diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot index ce1633a0..6f9e7eaa 100644 --- a/po/gst-plugins-bad-1.0.pot +++ b/po/gst-plugins-bad-1.0.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: gst-plugins-bad 1.0.1\n" +"Project-Id-Version: gst-plugins-bad 1.0.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-08-12 23:33+0200\n" "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2012-01-28 10:27+0700\n" "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-08-14 00:12+0200\n" "Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n" "Language-Team: Italian <tp@lists.linux.it>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 19:38+0900\n" "Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n" "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.5\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2007-11-13 17:16+0600\n" "Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n" "Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.6.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2008-05-14 02:13+0300\n" "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-09-02 12:04-0000\n" "Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n" "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2008-10-26 20:27+0100\n" "Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n" "Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.5\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2007-11-03 14:46+0100\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-27 00:16+0200\n" "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2004-09-27 13:32+0530\n" "Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n" "Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 17:57+0200\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo Binary files differindex 6fbc091d..50f20a79 100644 --- a/po/pt_BR.gmo +++ b/po/pt_BR.gmo diff --git a/po/pt_BR.po b/po/pt_BR.po index 70ebd8bb..271a8f55 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.18.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-05-26 00:00-0300\n" "Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n" Binary files differ@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.18.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-08-16 03:11+0300\n" "Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n" "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 20:31+0400\n" "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" "Language-Team: Russian <gnu@mx.ru>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-03-08 09:20+0100\n" "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 15:21+0100\n" "Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n" "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.7.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2008-08-15 16:07+0200\n" "Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n" "Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-12-04 09:59+0200\n" "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <gnu@prevod.org>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.13.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-08-12 20:29+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" Binary files differ@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad-0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-26 19:21+0200\n" "Last-Translator: Server Acim <serveracim@gmail.com>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" Binary files differ@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.21.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2011-04-30 14:00+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" Binary files differ@@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.17.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2010-03-06 22:09+1030\n" "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n" "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo Binary files differindex 3ebc586d..733b8632 100644 --- a/po/zh_CN.gmo +++ b/po/zh_CN.gmo diff --git a/po/zh_CN.po b/po/zh_CN.po index c749c850..75ddff9e 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-bad 0.10.16.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-10-07 15:46+0100\n" +"POT-Creation-Date: 2012-10-25 01:37+0100\n" "PO-Revision-Date: 2009-11-20 18:12中国标准时间\n" "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" diff --git a/sys/Makefile.am b/sys/Makefile.am index d79d2232..c638c9de 100644 --- a/sys/Makefile.am +++ b/sys/Makefile.am @@ -4,6 +4,12 @@ else ACM_DIR= endif +if USE_ANDROID_MEDIA +ANDROID_MEDIA_DIR=androidmedia +else +ANDROID_MEDIA_DIR= +endif + if USE_APPLE_MEDIA APPLE_MEDIA_DIR=applemedia else @@ -94,6 +100,12 @@ else SHM_DIR= endif +if USE_OPENSLES +OPENSLES_DIR=opensles +else +OPENSLES_DIR= +endif + # if USE_QCAM # QCAM_DIR=qcam # else @@ -136,9 +148,9 @@ else UVCH264_DIR= endif -SUBDIRS = $(ACM_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) +SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) -DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \ - osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap +DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \ + opensles osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap include $(top_srcdir)/common/parallel-subdirs.mak diff --git a/sys/Makefile.in b/sys/Makefile.in index 8490b419..34ae2b9c 100644 --- a/sys/Makefile.in +++ b/sys/Makefile.in @@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -588,6 +590,8 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @USE_ACM_FALSE@ACM_DIR = @USE_ACM_TRUE@ACM_DIR = acmenc acmmp3dec +@USE_ANDROID_MEDIA_FALSE@ANDROID_MEDIA_DIR = +@USE_ANDROID_MEDIA_TRUE@ANDROID_MEDIA_DIR = androidmedia @USE_APPLE_MEDIA_FALSE@APPLE_MEDIA_DIR = @USE_APPLE_MEDIA_TRUE@APPLE_MEDIA_DIR = applemedia @USE_AVC_FALSE@AVC_DIR = @@ -626,6 +630,8 @@ top_srcdir = @top_srcdir@ @USE_PVR_TRUE@PVR_DIR = pvr2d @USE_SHM_FALSE@SHM_DIR = @USE_SHM_TRUE@SHM_DIR = shm +@USE_OPENSLES_FALSE@OPENSLES_DIR = +@USE_OPENSLES_TRUE@OPENSLES_DIR = opensles @USE_QUICKTIME_FALSE@QT_DIR = # if USE_QCAM @@ -648,9 +654,9 @@ top_srcdir = @top_srcdir@ @USE_DIRECT3D9_TRUE@WINSCREENCAP_DIR = winscreencap @USE_UVCH264_FALSE@UVCH264_DIR = @USE_UVCH264_TRUE@UVCH264_DIR = uvch264 -SUBDIRS = $(ACM_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) -DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \ - osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap +SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) +DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \ + opensles osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap all: all-recursive diff --git a/sys/acmenc/Makefile.in b/sys/acmenc/Makefile.in index 5673ff1d..9f48054d 100644 --- a/sys/acmenc/Makefile.in +++ b/sys/acmenc/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/acmenc/acmenc.c b/sys/acmenc/acmenc.c index 6e2eabda..86843f54 100644 --- a/sys/acmenc/acmenc.c +++ b/sys/acmenc/acmenc.c @@ -494,7 +494,7 @@ acmenc_base_init (ACMEncClass * klass) && *shortname) ? shortname : params->name); description = g_strdup_printf ("ACM Encoder: %s", (longname && *longname) ? longname : params->name); - gst_element_class_set_metadata (element_class, detail, + gst_element_class_set_static_metadata (element_class, detail, "Codec/Encoder/Audio", description, "Pioneers of the Inevitable <songbird@songbirdnest.com>"); g_free (shortname); diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in index 932a3ea0..ea7eb1d8 100644 --- a/sys/acmmp3dec/Makefile.in +++ b/sys/acmmp3dec/Makefile.in @@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/acmmp3dec/acmmp3dec.c b/sys/acmmp3dec/acmmp3dec.c index 3c1b3bcf..83945246 100644 --- a/sys/acmmp3dec/acmmp3dec.c +++ b/sys/acmmp3dec/acmmp3dec.c @@ -409,7 +409,7 @@ acmmp3dec_base_init (gpointer klass) gst_static_pad_template_get (&acmmp3dec_sink_template)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&acmmp3dec_src_template)); - gst_element_class_set_metadata (element_class, "ACM MP3 decoder", + gst_element_class_set_static_metadata (element_class, "ACM MP3 decoder", "Codec/Decoder/Audio", "Decode MP3 using ACM decoder", "Pioneers of the Inevitable <songbird@songbirdnest.com"); diff --git a/sys/androidmedia/Makefile.am b/sys/androidmedia/Makefile.am new file mode 100644 index 00000000..283488f9 --- /dev/null +++ b/sys/androidmedia/Makefile.am @@ -0,0 +1,43 @@ +plugin_LTLIBRARIES = libgstandroidmedia.la + +libgstandroidmedia_la_SOURCES = \ + gstamc.c \ + gstamcaudiodec.c \ + gstamcvideodec.c + +noinst_HEADERS = \ + gstamc.h \ + gstamc-constants.h \ + gstamcaudiodec.h \ + gstamcvideodec.h + +libgstandroidmedia_la_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_CFLAGS) \ + $(ORC_CFLAGS) +libgstandroidmedia_la_LIBADD = \ + $(GST_PLUGINS_BASE_LIBS) \ + -lgstaudio-@GST_API_VERSION@ \ + -lgstpbutils-@GST_API_VERSION@ \ + -lgstvideo-@GST_API_VERSION@ \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) \ + $(ORC_LIBS) +libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstandroidmedia_la_LIBTOOLFLAGS = --tag=disable-static + +Android.mk: Makefile.am $(BUILT_SOURCES) + androgenizer \ + -:PROJECT libgstandroidmedia -:SHARED libgstandroidmedia \ + -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libgstandroidmedia_la_SOURCES) \ + $(nodist_libgstandroidmedia_la_SOURCES) \ + -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstandroidmedia_la_CFLAGS) \ + -:LDFLAGS $(libgstandroidmedia_la_LDFLAGS) \ + $(libgstandroidmedia_la_LIBADD) \ + -ldl \ + -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ + LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-@GST_API_VERSION@' \ + > $@ diff --git a/sys/androidmedia/Makefile.in b/sys/androidmedia/Makefile.in new file mode 100644 index 00000000..981f7ea0 --- /dev/null +++ b/sys/androidmedia/Makefile.in @@ -0,0 +1,996 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = sys/androidmedia +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-auto-alt.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-libtool.m4 \ + $(top_srcdir)/common/m4/as-python.m4 \ + $(top_srcdir)/common/m4/as-scrub-include.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/common/m4/gst-arch.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-check.m4 \ + $(top_srcdir)/common/m4/gst-default.m4 \ + $(top_srcdir)/common/m4/gst-dowhile.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-gettext.m4 \ + $(top_srcdir)/common/m4/gst-glib2.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-platform.m4 \ + $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-x11.m4 \ + $(top_srcdir)/common/m4/gst.m4 \ + $(top_srcdir)/common/m4/gtk-doc.m4 \ + $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \ + $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(plugindir)" +LTLIBRARIES = $(plugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgstandroidmedia_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgstandroidmedia_la_OBJECTS = libgstandroidmedia_la-gstamc.lo \ + libgstandroidmedia_la-gstamcaudiodec.lo \ + libgstandroidmedia_la-gstamcvideodec.lo +libgstandroidmedia_la_OBJECTS = $(am_libgstandroidmedia_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libgstandroidmedia_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) \ + $(libgstandroidmedia_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgstandroidmedia_la_SOURCES) +DIST_SOURCES = $(libgstandroidmedia_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ACMENC_CFLAGS = @ACMENC_CFLAGS@ +ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APEXSINK_CFLAGS = @APEXSINK_CFLAGS@ +APEXSINK_LIBS = @APEXSINK_LIBS@ +AR = @AR@ +AS = @AS@ +ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@ +ASSRENDER_LIBS = @ASSRENDER_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BZ2_LIBS = @BZ2_LIBS@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@ +CDAUDIO_LIBS = @CDAUDIO_LIBS@ +CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@ +CELT_0_11_LIBS = @CELT_0_11_LIBS@ +CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@ +CELT_0_7_LIBS = @CELT_0_7_LIBS@ +CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@ +CELT_0_8_LIBS = @CELT_0_8_LIBS@ +CELT_CFLAGS = @CELT_CFLAGS@ +CELT_LIBS = @CELT_LIBS@ +CFLAGS = @CFLAGS@ +CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@ +CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@ +COG_CFLAGS = @COG_CFLAGS@ +COG_LIBS = @COG_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURL_CFLAGS = @CURL_CFLAGS@ +CURL_LIBS = @CURL_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DCCP_LIBS = @DCCP_LIBS@ +DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@ +DECKLINK_LIBS = @DECKLINK_LIBS@ +DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@ +DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@ +DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@ +DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@ +DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@ +DIRAC_CFLAGS = @DIRAC_CFLAGS@ +DIRAC_LIBS = @DIRAC_LIBS@ +DIRECT3D9_LIBS = @DIRECT3D9_LIBS@ +DIRECT3D_LIBS = @DIRECT3D_LIBS@ +DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@ +DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@ +DIRECTX_CFLAGS = @DIRECTX_CFLAGS@ +DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DTS_LIBS = @DTS_LIBS@ +DUMPBIN = @DUMPBIN@ +DVDNAV_CFLAGS = @DVDNAV_CFLAGS@ +DVDNAV_LIBS = @DVDNAV_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ +ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@ +EXEEXT = @EXEEXT@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FAAC_LIBS = @FAAC_LIBS@ +FAAD_IS_NEAAC = @FAAD_IS_NEAAC@ +FAAD_LIBS = @FAAD_LIBS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FLITE_CFLAGS = @FLITE_CFLAGS@ +FLITE_LIBS = @FLITE_LIBS@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GIO_CFLAGS = @GIO_CFLAGS@ +GIO_LDFLAGS = @GIO_LDFLAGS@ +GIO_LIBS = @GIO_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ +GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_PREFIX = @GLIB_PREFIX@ +GLIB_REQ = @GLIB_REQ@ +GME_LIBS = @GME_LIBS@ +GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@ +GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GMYTH_CFLAGS = @GMYTH_CFLAGS@ +GMYTH_LIBS = @GMYTH_LIBS@ +GREP = @GREP@ +GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@ +GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ +GSETTINGS_LIBS = @GSETTINGS_LIBS@ +GSM_LIBS = @GSM_LIBS@ +GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@ +GSTPB_PREFIX = @GSTPB_PREFIX@ +GST_AGE = @GST_AGE@ +GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@ +GST_API_VERSION = @GST_API_VERSION@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@ +GST_CHECK_LIBS = @GST_CHECK_LIBS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_CURRENT = @GST_CURRENT@ +GST_CXXFLAGS = @GST_CXXFLAGS@ +GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@ +GST_LIBS = @GST_LIBS@ +GST_LIBVERSION = @GST_LIBVERSION@ +GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ +GST_LICENSE = @GST_LICENSE@ +GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_OBJCFLAGS = @GST_OBJCFLAGS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ +GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@ +GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ +GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@ +GST_PLUGINS_ALL = @GST_PLUGINS_ALL@ +GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@ +GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@ +GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_PLUGINS_DIR = @GST_PLUGINS_DIR@ +GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@ +GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@ +GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@ +GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@ +GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@ +GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@ +GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@ +GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@ +GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@ +GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@ +GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@ +GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ +GST_PREFIX = @GST_PREFIX@ +GST_REVISION = @GST_REVISION@ +GST_TOOLS_DIR = @GST_TOOLS_DIR@ +GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@ +GST_VIDEO_LIBS = @GST_VIDEO_LIBS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +G_UDEV_CFLAGS = @G_UDEV_CFLAGS@ +G_UDEV_LIBS = @G_UDEV_LIBS@ +HAVE_BZ2 = @HAVE_BZ2@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DIRECT3D = @HAVE_DIRECT3D@ +HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@ +HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@ +HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@ +HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@ +HAVE_DTS = @HAVE_DTS@ +HAVE_FAAC = @HAVE_FAAC@ +HAVE_FAAD = @HAVE_FAAD@ +HAVE_FLITE = @HAVE_FLITE@ +HAVE_GSM = @HAVE_GSM@ +HAVE_JASPER = @HAVE_JASPER@ +HAVE_NAS = @HAVE_NAS@ +HAVE_WILDMIDI = @HAVE_WILDMIDI@ +HAVE_X = @HAVE_X@ +HAVE_X11 = @HAVE_X11@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JASPER_LIBS = @JASPER_LIBS@ +KATE_CFLAGS = @KATE_CFLAGS@ +KATE_LIBS = @KATE_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@ +LIBDC1394_LIBS = @LIBDC1394_LIBS@ +LIBDIR = @LIBDIR@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBM = @LIBM@ +LIBMMS_CFLAGS = @LIBMMS_CFLAGS@ +LIBMMS_LIBS = @LIBMMS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@ +LIBUDEV_LIBS = @LIBUDEV_LIBS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALEDIR = @LOCALEDIR@ +LRDF_CFLAGS = @LRDF_CFLAGS@ +LRDF_LIBS = @LRDF_LIBS@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MIMIC_CFLAGS = @MIMIC_CFLAGS@ +MIMIC_LIBS = @MIMIC_LIBS@ +MJPEG_CFLAGS = @MJPEG_CFLAGS@ +MJPEG_LIBS = @MJPEG_LIBS@ +MKDIR_P = @MKDIR_P@ +MODPLUG_CFLAGS = @MODPLUG_CFLAGS@ +MODPLUG_LIBS = @MODPLUG_LIBS@ +MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@ +MPEG2ENC_LIBS = @MPEG2ENC_LIBS@ +MPG123_CFLAGS = @MPG123_CFLAGS@ +MPG123_LIBS = @MPG123_LIBS@ +MPLEX_CFLAGS = @MPLEX_CFLAGS@ +MPLEX_LDFLAGS = @MPLEX_LDFLAGS@ +MPLEX_LIBS = @MPLEX_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +MUSEPACK_LIBS = @MUSEPACK_LIBS@ +MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@ +MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@ +NAS_CFLAGS = @NAS_CFLAGS@ +NAS_LIBS = @NAS_LIBS@ +NEON_CFLAGS = @NEON_CFLAGS@ +NEON_LIBS = @NEON_LIBS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OFA_CFLAGS = @OFA_CFLAGS@ +OFA_LIBS = @OFA_LIBS@ +OPENAL_CFLAGS = @OPENAL_CFLAGS@ +OPENAL_LIBS = @OPENAL_LIBS@ +OPENCV_CFLAGS = @OPENCV_CFLAGS@ +OPENCV_LIBS = @OPENCV_LIBS@ +OPENCV_PREFIX = @OPENCV_PREFIX@ +OPUS_CFLAGS = @OPUS_CFLAGS@ +OPUS_LIBS = @OPUS_LIBS@ +ORCC = @ORCC@ +ORCC_FLAGS = @ORCC_FLAGS@ +ORC_CFLAGS = @ORC_CFLAGS@ +ORC_LIBS = @ORC_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +POSUB = @POSUB@ +PROFILE_CFLAGS = @PROFILE_CFLAGS@ +PVR_CFLAGS = @PVR_CFLAGS@ +PVR_LIBS = @PVR_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@ +RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +RTMP_CFLAGS = @RTMP_CFLAGS@ +RTMP_LIBS = @RTMP_LIBS@ +SCHRO_CFLAGS = @SCHRO_CFLAGS@ +SCHRO_LIBS = @SCHRO_LIBS@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLV2_CFLAGS = @SLV2_CFLAGS@ +SLV2_LIBS = @SLV2_LIBS@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +SNDIO_LIBS = @SNDIO_LIBS@ +SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@ +SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@ +SPANDSP_CFLAGS = @SPANDSP_CFLAGS@ +SPANDSP_LIBS = @SPANDSP_LIBS@ +SPC_LIBS = @SPC_LIBS@ +STRIP = @STRIP@ +SWFDEC_CFLAGS = @SWFDEC_CFLAGS@ +SWFDEC_LIBS = @SWFDEC_LIBS@ +TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@ +TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@ +TIGER_CFLAGS = @TIGER_CFLAGS@ +TIGER_LIBS = @TIGER_LIBS@ +TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@ +TIMIDITY_LIBS = @TIMIDITY_LIBS@ +USE_NLS = @USE_NLS@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VDPAU_CFLAGS = @VDPAU_CFLAGS@ +VDPAU_LIBS = @VDPAU_LIBS@ +VERSION = @VERSION@ +VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ +VOAACENC_LIBS = @VOAACENC_LIBS@ +VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ +VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ +WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@ +WILDMIDI_LIBS = @WILDMIDI_LIBS@ +WINSOCK2_LIBS = @WINSOCK2_LIBS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +XVID_LIBS = @XVID_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZBAR_CFLAGS = @ZBAR_CFLAGS@ +ZBAR_LIBS = @ZBAR_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gsettingsschemadir = @gsettingsschemadir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +plugin_LTLIBRARIES = libgstandroidmedia.la +libgstandroidmedia_la_SOURCES = \ + gstamc.c \ + gstamcaudiodec.c \ + gstamcvideodec.c + +noinst_HEADERS = \ + gstamc.h \ + gstamc-constants.h \ + gstamcaudiodec.h \ + gstamcvideodec.h + +libgstandroidmedia_la_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_CFLAGS) \ + $(ORC_CFLAGS) + +libgstandroidmedia_la_LIBADD = \ + $(GST_PLUGINS_BASE_LIBS) \ + -lgstaudio-@GST_API_VERSION@ \ + -lgstpbutils-@GST_API_VERSION@ \ + -lgstvideo-@GST_API_VERSION@ \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) \ + $(ORC_LIBS) + +libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstandroidmedia_la_LIBTOOLFLAGS = --tag=disable-static +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/androidmedia/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu sys/androidmedia/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ + } + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgstandroidmedia.la: $(libgstandroidmedia_la_OBJECTS) $(libgstandroidmedia_la_DEPENDENCIES) $(EXTRA_libgstandroidmedia_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstandroidmedia_la_LINK) -rpath $(plugindir) $(libgstandroidmedia_la_OBJECTS) $(libgstandroidmedia_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libgstandroidmedia_la-gstamc.lo: gstamc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamc.c' object='libgstandroidmedia_la-gstamc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c + +libgstandroidmedia_la-gstamcaudiodec.lo: gstamcaudiodec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcaudiodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamcaudiodec.c' object='libgstandroidmedia_la-gstamcaudiodec.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c + +libgstandroidmedia_la-gstamcvideodec.lo: gstamcvideodec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcvideodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo -c -o libgstandroidmedia_la-gstamcvideodec.lo `test -f 'gstamcvideodec.c' || echo '$(srcdir)/'`gstamcvideodec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamcvideodec.c' object='libgstandroidmedia_la-gstamcvideodec.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcvideodec.lo `test -f 'gstamcvideodec.c' || echo '$(srcdir)/'`gstamcvideodec.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + + +Android.mk: Makefile.am $(BUILT_SOURCES) + androgenizer \ + -:PROJECT libgstandroidmedia -:SHARED libgstandroidmedia \ + -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libgstandroidmedia_la_SOURCES) \ + $(nodist_libgstandroidmedia_la_SOURCES) \ + -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstandroidmedia_la_CFLAGS) \ + -:LDFLAGS $(libgstandroidmedia_la_LDFLAGS) \ + $(libgstandroidmedia_la_LIBADD) \ + -ldl \ + -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ + LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-@GST_API_VERSION@' \ + > $@ + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/sys/androidmedia/gstamc-constants.h b/sys/androidmedia/gstamc-constants.h new file mode 100644 index 00000000..ea6288c5 --- /dev/null +++ b/sys/androidmedia/gstamc-constants.h @@ -0,0 +1,227 @@ +/* + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GST_AMC_CONSTANTS_H__ +#define __GST_AMC_CONSTANTS_H__ + +/* FIXME: We might need to get these values from Java if there's + * ever a device or Android version that changes these values + */ + +/* Copies from MediaCodec.java */ + +enum +{ + BUFFER_FLAG_SYNC_FRAME = 1, + BUFFER_FLAG_CODEC_CONFIG = 2, + BUFFER_FLAG_END_OF_STREAM = 4 +}; + +enum +{ + CONFIGURE_FLAG_ENCODE = 1 +}; + +enum +{ + INFO_TRY_AGAIN_LATER = -1, + INFO_OUTPUT_FORMAT_CHANGED = -2, + INFO_OUTPUT_BUFFERS_CHANGED = -3 +}; + +/* Copies from MediaCodecInfo.java */ +enum +{ + COLOR_FormatMonochrome = 1, + COLOR_Format8bitRGB332 = 2, + COLOR_Format12bitRGB444 = 3, + COLOR_Format16bitARGB4444 = 4, + COLOR_Format16bitARGB1555 = 5, + COLOR_Format16bitRGB565 = 6, + COLOR_Format16bitBGR565 = 7, + COLOR_Format18bitRGB666 = 8, + COLOR_Format18bitARGB1665 = 9, + COLOR_Format19bitARGB1666 = 10, + COLOR_Format24bitRGB888 = 11, + COLOR_Format24bitBGR888 = 12, + COLOR_Format24bitARGB1887 = 13, + COLOR_Format25bitARGB1888 = 14, + COLOR_Format32bitBGRA8888 = 15, + COLOR_Format32bitARGB8888 = 16, + COLOR_FormatYUV411Planar = 17, + COLOR_FormatYUV411PackedPlanar = 18, + COLOR_FormatYUV420Planar = 19, + COLOR_FormatYUV420PackedPlanar = 20, + COLOR_FormatYUV420SemiPlanar = 21, + COLOR_FormatYUV422Planar = 22, + COLOR_FormatYUV422PackedPlanar = 23, + COLOR_FormatYUV422SemiPlanar = 24, + COLOR_FormatYCbYCr = 25, + COLOR_FormatYCrYCb = 26, + COLOR_FormatCbYCrY = 27, + COLOR_FormatCrYCbY = 28, + COLOR_FormatYUV444Interleaved = 29, + COLOR_FormatRawBayer8bit = 30, + COLOR_FormatRawBayer10bit = 31, + COLOR_FormatRawBayer8bitcompressed = 32, + COLOR_FormatL2 = 33, + COLOR_FormatL4 = 34, + COLOR_FormatL8 = 35, + COLOR_FormatL16 = 36, + COLOR_FormatL24 = 37, + COLOR_FormatL32 = 38, + COLOR_FormatYUV420PackedSemiPlanar = 39, + COLOR_FormatYUV422PackedSemiPlanar = 40, + COLOR_Format18BitBGR666 = 41, + COLOR_Format24BitARGB6666 = 42, + COLOR_Format24BitABGR6666 = 43, + COLOR_FormatAndroidOpaque = 0x7F000789, + COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100, + COLOR_QCOM_FormatYUV420SemiPlanar = 0x7fa30c00, + /* From hardware/ti/omap4xxx/domx/omx_core/inc/OMX_TI_IVCommon.h */ + COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced = 0x7f000001 +}; + +enum +{ + AVCProfileBaseline = 0x01, + AVCProfileMain = 0x02, + AVCProfileExtended = 0x04, + AVCProfileHigh = 0x08, + AVCProfileHigh10 = 0x10, + AVCProfileHigh422 = 0x20, + AVCProfileHigh444 = 0x40 +}; + +enum +{ + AVCLevel1 = 0x01, + AVCLevel1b = 0x02, + AVCLevel11 = 0x04, + AVCLevel12 = 0x08, + AVCLevel13 = 0x10, + AVCLevel2 = 0x20, + AVCLevel21 = 0x40, + AVCLevel22 = 0x80, + AVCLevel3 = 0x100, + AVCLevel31 = 0x200, + AVCLevel32 = 0x400, + AVCLevel4 = 0x800, + AVCLevel41 = 0x1000, + AVCLevel42 = 0x2000, + AVCLevel5 = 0x4000, + AVCLevel51 = 0x8000 +}; + +enum +{ + H263ProfileBaseline = 0x01, + H263ProfileH320Coding = 0x02, + H263ProfileBackwardCompatible = 0x04, + H263ProfileISWV2 = 0x08, + H263ProfileISWV3 = 0x10, + H263ProfileHighCompression = 0x20, + H263ProfileInternet = 0x40, + H263ProfileInterlace = 0x80, + H263ProfileHighLatency = 0x100 +}; + +enum +{ + H263Level10 = 0x01, + H263Level20 = 0x02, + H263Level30 = 0x04, + H263Level40 = 0x08, + H263Level45 = 0x10, + H263Level50 = 0x20, + H263Level60 = 0x40, + H263Level70 = 0x80 +}; + +enum +{ + MPEG4ProfileSimple = 0x01, + MPEG4ProfileSimpleScalable = 0x02, + MPEG4ProfileCore = 0x04, + MPEG4ProfileMain = 0x08, + MPEG4ProfileNbit = 0x10, + MPEG4ProfileScalableTexture = 0x20, + MPEG4ProfileSimpleFace = 0x40, + MPEG4ProfileSimpleFBA = 0x80, + MPEG4ProfileBasicAnimated = 0x100, + MPEG4ProfileHybrid = 0x200, + MPEG4ProfileAdvancedRealTime = 0x400, + MPEG4ProfileCoreScalable = 0x800, + MPEG4ProfileAdvancedCoding = 0x1000, + MPEG4ProfileAdvancedCore = 0x2000, + MPEG4ProfileAdvancedScalable = 0x4000, + MPEG4ProfileAdvancedSimple = 0x8000 +}; + +enum +{ + MPEG4Level0 = 0x01, + MPEG4Level0b = 0x02, + MPEG4Level1 = 0x04, + MPEG4Level2 = 0x08, + MPEG4Level3 = 0x10, + MPEG4Level4 = 0x20, + MPEG4Level4a = 0x40, + MPEG4Level5 = 0x80 +}; + +enum +{ + AACObjectMain = 1, + AACObjectLC = 2, + AACObjectSSR = 3, + AACObjectLTP = 4, + AACObjectHE = 5, + AACObjectScalable = 6, + AACObjectERLC = 17, + AACObjectLD = 23, + AACObjectHE_PS = 29, + AACObjectELD = 39 +}; + +/* Copies from AudioFormat.java */ +enum +{ + CHANNEL_OUT_FRONT_LEFT = 0x4, + CHANNEL_OUT_FRONT_RIGHT = 0x8, + CHANNEL_OUT_FRONT_CENTER = 0x10, + CHANNEL_OUT_LOW_FREQUENCY = 0x20, + CHANNEL_OUT_BACK_LEFT = 0x40, + CHANNEL_OUT_BACK_RIGHT = 0x80, + CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x100, + CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200, + CHANNEL_OUT_BACK_CENTER = 0x400, + CHANNEL_OUT_SIDE_LEFT = 0x800, + CHANNEL_OUT_SIDE_RIGHT = 0x1000, + CHANNEL_OUT_TOP_CENTER = 0x2000, + CHANNEL_OUT_TOP_FRONT_LEFT = 0x4000, + CHANNEL_OUT_TOP_FRONT_CENTER = 0x8000, + CHANNEL_OUT_TOP_FRONT_RIGHT = 0x10000, + CHANNEL_OUT_TOP_BACK_LEFT = 0x20000, + CHANNEL_OUT_TOP_BACK_CENTER = 0x40000, + CHANNEL_OUT_TOP_BACK_RIGHT = 0x80000 +}; + +#endif diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c new file mode 100644 index 00000000..205b8502 --- /dev/null +++ b/sys/androidmedia/gstamc.c @@ -0,0 +1,2830 @@ +/* + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstamc.h" +#include "gstamc-constants.h" + +#include "gstamcvideodec.h" +#include "gstamcaudiodec.h" + +#include <gst/gst.h> +#include <gst/video/video.h> +#include <gst/audio/audio.h> +#include <string.h> +#include <jni.h> + +#include <pthread.h> + +GST_DEBUG_CATEGORY (gst_amc_debug); +#define GST_CAT_DEFAULT gst_amc_debug + +GQuark gst_amc_codec_info_quark = 0; + +static GList *codec_infos = NULL; +#ifdef GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS +static gboolean ignore_unknown_color_formats = TRUE; +#else +static gboolean ignore_unknown_color_formats = FALSE; +#endif + +static GModule *java_module; +static jint (*get_created_java_vms) (JavaVM ** vmBuf, jsize bufLen, + jsize * nVMs); +static jint (*create_java_vm) (JavaVM ** p_vm, JNIEnv ** p_env, void *vm_args); +static JavaVM *java_vm; +static gboolean started_java_vm = FALSE; + +static gboolean accepted_color_formats (GstAmcCodecType * type, + gboolean is_encoder); + +/* Global cached references */ +static struct +{ + jclass klass; + jmethodID constructor; +} java_string; +static struct +{ + jclass klass; + jmethodID configure; + jmethodID create_by_codec_name; + jmethodID dequeue_input_buffer; + jmethodID dequeue_output_buffer; + jmethodID flush; + jmethodID get_input_buffers; + jmethodID get_output_buffers; + jmethodID get_output_format; + jmethodID queue_input_buffer; + jmethodID release; + jmethodID release_output_buffer; + jmethodID start; + jmethodID stop; +} media_codec; +static struct +{ + jclass klass; + jmethodID constructor; + jfieldID flags; + jfieldID offset; + jfieldID presentation_time_us; + jfieldID size; +} media_codec_buffer_info; +static struct +{ + jclass klass; + jmethodID create_audio_format; + jmethodID create_video_format; + jmethodID to_string; + jmethodID contains_key; + jmethodID get_float; + jmethodID set_float; + jmethodID get_integer; + jmethodID set_integer; + jmethodID get_string; + jmethodID set_string; + jmethodID get_byte_buffer; + jmethodID set_byte_buffer; +} media_format; + +static pthread_key_t current_jni_env; + +static JNIEnv * +gst_amc_attach_current_thread (void) +{ + JNIEnv *env; + JavaVMAttachArgs args; + + GST_DEBUG ("Attaching thread %p", g_thread_self ()); + args.version = JNI_VERSION_1_6; + args.name = NULL; + args.group = NULL; + + if ((*java_vm)->AttachCurrentThread (java_vm, &env, &args) < 0) { + GST_ERROR ("Failed to attach current thread"); + return NULL; + } + + return env; +} + +static void +gst_amc_detach_current_thread (void *env) +{ + GST_DEBUG ("Detaching thread %p", g_thread_self ()); + (*java_vm)->DetachCurrentThread (java_vm); +} + +static JNIEnv * +gst_amc_get_jni_env (void) +{ + JNIEnv *env; + + if ((env = pthread_getspecific (current_jni_env)) == NULL) { + env = gst_amc_attach_current_thread (); + pthread_setspecific (current_jni_env, env); + } + + return env; +} + +static gboolean +initialize_java_vm (void) +{ + jsize n_vms; + + java_module = g_module_open ("libdvm", G_MODULE_BIND_LOCAL); + if (!java_module) + goto load_failed; + + if (!g_module_symbol (java_module, "JNI_CreateJavaVM", + (gpointer *) & create_java_vm)) + goto symbol_error; + + if (!g_module_symbol (java_module, "JNI_GetCreatedJavaVMs", + (gpointer *) & get_created_java_vms)) + goto symbol_error; + + n_vms = 0; + if (get_created_java_vms (&java_vm, 1, &n_vms) < 0) + goto get_created_failed; + + if (n_vms > 0) { + GST_DEBUG ("Successfully got existing Java VM %p", java_vm); + } else { + JNIEnv *env; + JavaVMInitArgs vm_args; + JavaVMOption options[4]; + + options[0].optionString = "-verbose:jni"; + options[1].optionString = "-verbose:gc"; + options[2].optionString = "-Xcheck:jni"; + options[3].optionString = "-Xdebug"; + + vm_args.version = JNI_VERSION_1_4; + vm_args.options = options; + vm_args.nOptions = 4; + vm_args.ignoreUnrecognized = JNI_TRUE; + if (create_java_vm (&java_vm, &env, &vm_args) < 0) + goto create_failed; + GST_DEBUG ("Successfully created Java VM %p", java_vm); + + started_java_vm = TRUE; + } + + return java_vm != NULL; + +load_failed: + { + GST_ERROR ("Failed to load libdvm: %s", g_module_error ()); + return FALSE; + } +symbol_error: + { + GST_ERROR ("Failed to locate required JNI symbols in libdvm: %s", + g_module_error ()); + g_module_close (java_module); + java_module = NULL; + return FALSE; + } +get_created_failed: + { + GST_ERROR ("Failed to get already created VMs"); + g_module_close (java_module); + java_module = NULL; + return FALSE; + } +create_failed: + { + GST_ERROR ("Failed to create a Java VM"); + g_module_close (java_module); + java_module = NULL; + return FALSE; + } +} + +GstAmcCodec * +gst_amc_codec_new (const gchar * name) +{ + JNIEnv *env; + GstAmcCodec *codec = NULL; + jstring name_str; + jobject object = NULL; + + g_return_val_if_fail (name != NULL, NULL); + + env = gst_amc_get_jni_env (); + + name_str = (*env)->NewStringUTF (env, name); + if (name_str == NULL) + goto error; + + codec = g_slice_new0 (GstAmcCodec); + + object = + (*env)->CallStaticObjectMethod (env, media_codec.klass, + media_codec.create_by_codec_name, name_str); + if ((*env)->ExceptionCheck (env) || !object) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to create codec '%s'", name); + goto error; + } + + codec->object = (*env)->NewGlobalRef (env, object); + if (!codec->object) { + GST_ERROR ("Failed to create global reference"); + (*env)->ExceptionClear (env); + goto error; + } + +done: + if (object) + (*env)->DeleteLocalRef (env, object); + if (name_str) + (*env)->DeleteLocalRef (env, name_str); + name_str = NULL; + + return codec; + +error: + if (codec) + g_slice_free (GstAmcCodec, codec); + codec = NULL; + goto done; +} + +void +gst_amc_codec_free (GstAmcCodec * codec) +{ + JNIEnv *env; + + g_return_if_fail (codec != NULL); + + env = gst_amc_get_jni_env (); + (*env)->DeleteGlobalRef (env, codec->object); + g_slice_free (GstAmcCodec, codec); +} + +gboolean +gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + g_return_val_if_fail (format != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.configure, + format->object, NULL, NULL, flags); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +GstAmcFormat * +gst_amc_codec_get_output_format (GstAmcCodec * codec) +{ + JNIEnv *env; + GstAmcFormat *ret = NULL; + jobject object = NULL; + + g_return_val_if_fail (codec != NULL, NULL); + + env = gst_amc_get_jni_env (); + + object = + (*env)->CallObjectMethod (env, codec->object, + media_codec.get_output_format); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + ret = g_slice_new0 (GstAmcFormat); + + ret->object = (*env)->NewGlobalRef (env, object); + if (!ret->object) { + GST_ERROR ("Failed to create global reference"); + (*env)->ExceptionClear (env); + g_slice_free (GstAmcFormat, ret); + ret = NULL; + } + + (*env)->DeleteLocalRef (env, object); + +done: + + return ret; +} + +gboolean +gst_amc_codec_start (GstAmcCodec * codec) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.start); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +gboolean +gst_amc_codec_stop (GstAmcCodec * codec) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.stop); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +gboolean +gst_amc_codec_flush (GstAmcCodec * codec) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.flush); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +gboolean +gst_amc_codec_release (GstAmcCodec * codec) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.release); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +void +gst_amc_codec_free_buffers (GstAmcBuffer * buffers, gsize n_buffers) +{ + JNIEnv *env; + jsize i; + + g_return_if_fail (buffers != NULL); + + env = gst_amc_get_jni_env (); + + for (i = 0; i < n_buffers; i++) { + if (buffers[i].object) + (*env)->DeleteGlobalRef (env, buffers[i].object); + } + g_free (buffers); +} + +GstAmcBuffer * +gst_amc_codec_get_output_buffers (GstAmcCodec * codec, gsize * n_buffers) +{ + JNIEnv *env; + jobject output_buffers = NULL; + jsize n_output_buffers; + GstAmcBuffer *ret = NULL; + jsize i; + + g_return_val_if_fail (codec != NULL, NULL); + g_return_val_if_fail (n_buffers != NULL, NULL); + + *n_buffers = 0; + env = gst_amc_get_jni_env (); + + output_buffers = + (*env)->CallObjectMethod (env, codec->object, + media_codec.get_output_buffers); + if ((*env)->ExceptionCheck (env) || !output_buffers) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + n_output_buffers = (*env)->GetArrayLength (env, output_buffers); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get output buffers array length"); + goto done; + } + + *n_buffers = n_output_buffers; + ret = g_new0 (GstAmcBuffer, n_output_buffers); + + for (i = 0; i < n_output_buffers; i++) { + jobject buffer = NULL; + + buffer = (*env)->GetObjectArrayElement (env, output_buffers, i); + if ((*env)->ExceptionCheck (env) || !buffer) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get output buffer %d", i); + goto error; + } + + ret[i].object = (*env)->NewGlobalRef (env, buffer); + (*env)->DeleteLocalRef (env, buffer); + if (!ret[i].object) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to create global reference %d", i); + goto error; + } + + ret[i].data = (*env)->GetDirectBufferAddress (env, ret[i].object); + if (!ret[i].data) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer address %d", i); + goto error; + } + ret[i].size = (*env)->GetDirectBufferCapacity (env, ret[i].object); + } + +done: + if (output_buffers) + (*env)->DeleteLocalRef (env, output_buffers); + output_buffers = NULL; + + return ret; +error: + if (ret) + gst_amc_codec_free_buffers (ret, n_output_buffers); + ret = NULL; + *n_buffers = 0; + goto done; +} + +GstAmcBuffer * +gst_amc_codec_get_input_buffers (GstAmcCodec * codec, gsize * n_buffers) +{ + JNIEnv *env; + jobject input_buffers = NULL; + jsize n_input_buffers; + GstAmcBuffer *ret = NULL; + jsize i; + + g_return_val_if_fail (codec != NULL, NULL); + g_return_val_if_fail (n_buffers != NULL, NULL); + + *n_buffers = 0; + env = gst_amc_get_jni_env (); + + input_buffers = + (*env)->CallObjectMethod (env, codec->object, + media_codec.get_input_buffers); + if ((*env)->ExceptionCheck (env) || !input_buffers) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + n_input_buffers = (*env)->GetArrayLength (env, input_buffers); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get input buffers array length"); + goto done; + } + + *n_buffers = n_input_buffers; + ret = g_new0 (GstAmcBuffer, n_input_buffers); + + for (i = 0; i < n_input_buffers; i++) { + jobject buffer = NULL; + + buffer = (*env)->GetObjectArrayElement (env, input_buffers, i); + if ((*env)->ExceptionCheck (env) || !buffer) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get input buffer %d", i); + goto error; + } + + ret[i].object = (*env)->NewGlobalRef (env, buffer); + (*env)->DeleteLocalRef (env, buffer); + if (!ret[i].object) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to create global reference %d", i); + goto error; + } + + ret[i].data = (*env)->GetDirectBufferAddress (env, ret[i].object); + if (!ret[i].data) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer address %d", i); + goto error; + } + ret[i].size = (*env)->GetDirectBufferCapacity (env, ret[i].object); + } + +done: + if (input_buffers) + (*env)->DeleteLocalRef (env, input_buffers); + input_buffers = NULL; + + return ret; +error: + if (ret) + gst_amc_codec_free_buffers (ret, n_input_buffers); + ret = NULL; + *n_buffers = 0; + goto done; +} + +gint +gst_amc_codec_dequeue_input_buffer (GstAmcCodec * codec, gint64 timeoutUs) +{ + JNIEnv *env; + gint ret = G_MININT; + + g_return_val_if_fail (codec != NULL, G_MININT); + + env = gst_amc_get_jni_env (); + + ret = + (*env)->CallIntMethod (env, codec->object, + media_codec.dequeue_input_buffer, timeoutUs); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = G_MININT; + goto done; + } + +done: + + return ret; +} + +static gboolean +gst_amc_codec_fill_buffer_info (JNIEnv * env, jobject buffer_info, + GstAmcBufferInfo * info) +{ + g_return_val_if_fail (buffer_info != NULL, FALSE); + + info->flags = + (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.flags); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer info field"); + return FALSE; + } + + info->offset = + (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.offset); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer info field"); + return FALSE; + } + + info->presentation_time_us = + (*env)->GetLongField (env, buffer_info, + media_codec_buffer_info.presentation_time_us); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer info field"); + return FALSE; + } + + info->size = + (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.size); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer info field"); + return FALSE; + } + + return TRUE; +} + +gint +gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec, + GstAmcBufferInfo * info, gint64 timeoutUs) +{ + JNIEnv *env; + gint ret = G_MININT; + jobject info_o = NULL; + + g_return_val_if_fail (codec != NULL, G_MININT); + + env = gst_amc_get_jni_env (); + + info_o = + (*env)->NewObject (env, media_codec_buffer_info.klass, + media_codec_buffer_info.constructor); + if (!info_o) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + ret = + (*env)->CallIntMethod (env, codec->object, + media_codec.dequeue_output_buffer, info_o, timeoutUs); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = G_MININT; + goto done; + } + + if (!gst_amc_codec_fill_buffer_info (env, info_o, info)) { + ret = G_MININT; + goto done; + } + +done: + if (info_o) + (*env)->DeleteLocalRef (env, info_o); + info_o = NULL; + + return ret; +} + +gboolean +gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index, + const GstAmcBufferInfo * info) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + g_return_val_if_fail (info != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.queue_input_buffer, + index, info->offset, info->size, info->presentation_time_us, info->flags); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +gboolean +gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index) +{ + JNIEnv *env; + gboolean ret = TRUE; + + g_return_val_if_fail (codec != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + (*env)->CallVoidMethod (env, codec->object, media_codec.release_output_buffer, + index, JNI_FALSE); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + ret = FALSE; + goto done; + } + +done: + + return ret; +} + +GstAmcFormat * +gst_amc_format_new_audio (const gchar * mime, gint sample_rate, gint channels) +{ + JNIEnv *env; + GstAmcFormat *format = NULL; + jstring mime_str; + jobject object = NULL; + + g_return_val_if_fail (mime != NULL, NULL); + + env = gst_amc_get_jni_env (); + + mime_str = (*env)->NewStringUTF (env, mime); + if (mime_str == NULL) + goto error; + + format = g_slice_new0 (GstAmcFormat); + + object = + (*env)->CallStaticObjectMethod (env, media_format.klass, + media_format.create_audio_format, mime_str, sample_rate, channels); + if ((*env)->ExceptionCheck (env) || !object) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to create format '%s'", mime); + goto error; + } + + format->object = (*env)->NewGlobalRef (env, object); + if (!format->object) { + GST_ERROR ("Failed to create global reference"); + (*env)->ExceptionClear (env); + goto error; + } + +done: + if (object) + (*env)->DeleteLocalRef (env, object); + if (mime_str) + (*env)->DeleteLocalRef (env, mime_str); + mime_str = NULL; + + return format; + +error: + if (format) + g_slice_free (GstAmcFormat, format); + format = NULL; + goto done; +} + +GstAmcFormat * +gst_amc_format_new_video (const gchar * mime, gint width, gint height) +{ + JNIEnv *env; + GstAmcFormat *format = NULL; + jstring mime_str; + jobject object = NULL; + + g_return_val_if_fail (mime != NULL, NULL); + + env = gst_amc_get_jni_env (); + + mime_str = (*env)->NewStringUTF (env, mime); + if (mime_str == NULL) + goto error; + + format = g_slice_new0 (GstAmcFormat); + + object = + (*env)->CallStaticObjectMethod (env, media_format.klass, + media_format.create_video_format, mime_str, width, height); + if ((*env)->ExceptionCheck (env) || !object) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to create format '%s'", mime); + goto error; + } + + format->object = (*env)->NewGlobalRef (env, object); + if (!format->object) { + GST_ERROR ("Failed to create global reference"); + (*env)->ExceptionClear (env); + goto error; + } + +done: + if (object) + (*env)->DeleteLocalRef (env, object); + if (mime_str) + (*env)->DeleteLocalRef (env, mime_str); + mime_str = NULL; + + return format; + +error: + if (format) + g_slice_free (GstAmcFormat, format); + format = NULL; + goto done; +} + +void +gst_amc_format_free (GstAmcFormat * format) +{ + JNIEnv *env; + + g_return_if_fail (format != NULL); + + env = gst_amc_get_jni_env (); + (*env)->DeleteGlobalRef (env, format->object); + g_slice_free (GstAmcFormat, format); +} + +gchar * +gst_amc_format_to_string (GstAmcFormat * format) +{ + JNIEnv *env; + jstring v_str = NULL; + const gchar *v = NULL; + gchar *ret = NULL; + + g_return_val_if_fail (format != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + v_str = + (*env)->CallObjectMethod (env, format->object, media_format.to_string); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + v = (*env)->GetStringUTFChars (env, v_str, NULL); + if (!v) { + GST_ERROR ("Failed to convert string to UTF8"); + (*env)->ExceptionClear (env); + goto done; + } + + ret = g_strdup (v); + +done: + if (v) + (*env)->ReleaseStringUTFChars (env, v_str, v); + if (v_str) + (*env)->DeleteLocalRef (env, v_str); + + return ret; +} + +gboolean +gst_amc_format_contains_key (GstAmcFormat * format, const gchar * key) +{ + JNIEnv *env; + gboolean ret = FALSE; + jstring key_str = NULL; + + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + ret = + (*env)->CallBooleanMethod (env, format->object, media_format.contains_key, + key_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + + return ret; +} + +gboolean +gst_amc_format_get_float (GstAmcFormat * format, const gchar * key, + gfloat * value) +{ + JNIEnv *env; + gboolean ret = FALSE; + jstring key_str = NULL; + + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + *value = 0; + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + *value = + (*env)->CallFloatMethod (env, format->object, media_format.get_float, + key_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + ret = TRUE; + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + + return ret; +} + +void +gst_amc_format_set_float (GstAmcFormat * format, const gchar * key, + gfloat value) +{ + JNIEnv *env; + jstring key_str = NULL; + + g_return_if_fail (format != NULL); + g_return_if_fail (key != NULL); + + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + (*env)->CallVoidMethod (env, format->object, media_format.set_float, key_str, + value); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); +} + +gboolean +gst_amc_format_get_int (GstAmcFormat * format, const gchar * key, gint * value) +{ + JNIEnv *env; + gboolean ret = FALSE; + jstring key_str = NULL; + + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + *value = 0; + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + *value = + (*env)->CallIntMethod (env, format->object, media_format.get_integer, + key_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + ret = TRUE; + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + + return ret; + +} + +void +gst_amc_format_set_int (GstAmcFormat * format, const gchar * key, gint value) +{ + JNIEnv *env; + jstring key_str = NULL; + + g_return_if_fail (format != NULL); + g_return_if_fail (key != NULL); + + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + (*env)->CallVoidMethod (env, format->object, media_format.set_integer, + key_str, value); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); +} + +gboolean +gst_amc_format_get_string (GstAmcFormat * format, const gchar * key, + gchar ** value) +{ + JNIEnv *env; + gboolean ret = FALSE; + jstring key_str = NULL; + jstring v_str = NULL; + const gchar *v = NULL; + + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + *value = 0; + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + v_str = + (*env)->CallObjectMethod (env, format->object, media_format.get_string, + key_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + v = (*env)->GetStringUTFChars (env, v_str, NULL); + if (!v) { + GST_ERROR ("Failed to convert string to UTF8"); + (*env)->ExceptionClear (env); + goto done; + } + + *value = g_strdup (v); + + ret = TRUE; + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + if (v) + (*env)->ReleaseStringUTFChars (env, v_str, v); + if (v_str) + (*env)->DeleteLocalRef (env, v_str); + + return ret; +} + +void +gst_amc_format_set_string (GstAmcFormat * format, const gchar * key, + const gchar * value) +{ + JNIEnv *env; + jstring key_str = NULL; + jstring v_str = NULL; + + g_return_if_fail (format != NULL); + g_return_if_fail (key != NULL); + g_return_if_fail (value != NULL); + + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + v_str = (*env)->NewStringUTF (env, value); + if (!v_str) + goto done; + + (*env)->CallVoidMethod (env, format->object, media_format.set_string, key_str, + v_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + if (v_str) + (*env)->DeleteLocalRef (env, v_str); +} + +gboolean +gst_amc_format_get_buffer (GstAmcFormat * format, const gchar * key, + GstBuffer ** value) +{ + JNIEnv *env; + gboolean ret = FALSE; + jstring key_str = NULL; + jobject v = NULL; + guint8 *data; + gsize size; + + g_return_val_if_fail (format != NULL, FALSE); + g_return_val_if_fail (key != NULL, FALSE); + g_return_val_if_fail (value != NULL, FALSE); + + *value = 0; + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + v = (*env)->CallObjectMethod (env, format->object, + media_format.get_byte_buffer, key_str); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + + data = (*env)->GetDirectBufferAddress (env, v); + if (!data) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer address"); + goto done; + } + size = (*env)->GetDirectBufferCapacity (env, v); + *value = gst_buffer_new_and_alloc (size); + memcpy (GST_BUFFER_DATA (*value), data, size); + + ret = TRUE; + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + if (v) + (*env)->DeleteLocalRef (env, v); + + return ret; +} + +void +gst_amc_format_set_buffer (GstAmcFormat * format, const gchar * key, + GstBuffer * value) +{ + JNIEnv *env; + jstring key_str = NULL; + jobject v = NULL; + + g_return_if_fail (format != NULL); + g_return_if_fail (key != NULL); + g_return_if_fail (value != NULL); + + env = gst_amc_get_jni_env (); + + key_str = (*env)->NewStringUTF (env, key); + if (!key_str) + goto done; + + /* FIXME: The buffer must remain valid until the codec is stopped */ + v = (*env)->NewDirectByteBuffer (env, GST_BUFFER_DATA (value), + GST_BUFFER_SIZE (value)); + if (!v) + goto done; + + (*env)->CallVoidMethod (env, format->object, media_format.set_byte_buffer, + key_str, v); + if ((*env)->ExceptionCheck (env)) { + GST_ERROR ("Failed to call Java method"); + (*env)->ExceptionClear (env); + goto done; + } + +done: + if (key_str) + (*env)->DeleteLocalRef (env, key_str); + if (v) + (*env)->DeleteLocalRef (env, v); +} + +static gboolean +get_java_classes (void) +{ + gboolean ret = TRUE; + JNIEnv *env; + jclass tmp; + + GST_DEBUG ("Retrieving Java classes"); + + env = gst_amc_get_jni_env (); + + tmp = (*env)->FindClass (env, "java/lang/String"); + if (!tmp) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get string class"); + goto done; + } + java_string.klass = (*env)->NewGlobalRef (env, tmp); + if (!java_string.klass) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get string class global reference"); + goto done; + } + (*env)->DeleteLocalRef (env, tmp); + tmp = NULL; + + java_string.constructor = + (*env)->GetMethodID (env, java_string.klass, "<init>", "([C)V"); + if (!java_string.constructor) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get string methods"); + goto done; + } + + tmp = (*env)->FindClass (env, "android/media/MediaCodec"); + if (!tmp) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec class"); + goto done; + } + media_codec.klass = (*env)->NewGlobalRef (env, tmp); + if (!media_codec.klass) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec class global reference"); + goto done; + } + (*env)->DeleteLocalRef (env, tmp); + tmp = NULL; + + media_codec.create_by_codec_name = + (*env)->GetStaticMethodID (env, media_codec.klass, "createByCodecName", + "(Ljava/lang/String;)Landroid/media/MediaCodec;"); + media_codec.configure = + (*env)->GetMethodID (env, media_codec.klass, "configure", + "(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V"); + media_codec.dequeue_input_buffer = + (*env)->GetMethodID (env, media_codec.klass, "dequeueInputBuffer", + "(J)I"); + media_codec.dequeue_output_buffer = + (*env)->GetMethodID (env, media_codec.klass, "dequeueOutputBuffer", + "(Landroid/media/MediaCodec$BufferInfo;J)I"); + media_codec.flush = + (*env)->GetMethodID (env, media_codec.klass, "flush", "()V"); + media_codec.get_input_buffers = + (*env)->GetMethodID (env, media_codec.klass, "getInputBuffers", + "()[Ljava/nio/ByteBuffer;"); + media_codec.get_output_buffers = + (*env)->GetMethodID (env, media_codec.klass, "getOutputBuffers", + "()[Ljava/nio/ByteBuffer;"); + media_codec.get_output_format = + (*env)->GetMethodID (env, media_codec.klass, "getOutputFormat", + "()Landroid/media/MediaFormat;"); + media_codec.queue_input_buffer = + (*env)->GetMethodID (env, media_codec.klass, "queueInputBuffer", + "(IIIJI)V"); + media_codec.release = + (*env)->GetMethodID (env, media_codec.klass, "release", "()V"); + media_codec.release_output_buffer = + (*env)->GetMethodID (env, media_codec.klass, "releaseOutputBuffer", + "(IZ)V"); + media_codec.start = + (*env)->GetMethodID (env, media_codec.klass, "start", "()V"); + media_codec.stop = + (*env)->GetMethodID (env, media_codec.klass, "stop", "()V"); + + if (!media_codec.configure || + !media_codec.create_by_codec_name || + !media_codec.dequeue_input_buffer || + !media_codec.dequeue_output_buffer || + !media_codec.flush || + !media_codec.get_input_buffers || + !media_codec.get_output_buffers || + !media_codec.get_output_format || + !media_codec.queue_input_buffer || + !media_codec.release || + !media_codec.release_output_buffer || + !media_codec.start || !media_codec.stop) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec methods"); + goto done; + } + + tmp = (*env)->FindClass (env, "android/media/MediaCodec$BufferInfo"); + if (!tmp) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec buffer info class"); + goto done; + } + media_codec_buffer_info.klass = (*env)->NewGlobalRef (env, tmp); + if (!media_codec_buffer_info.klass) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec buffer info class global reference"); + goto done; + } + (*env)->DeleteLocalRef (env, tmp); + tmp = NULL; + + media_codec_buffer_info.constructor = + (*env)->GetMethodID (env, media_codec_buffer_info.klass, "<init>", "()V"); + media_codec_buffer_info.flags = + (*env)->GetFieldID (env, media_codec_buffer_info.klass, "flags", "I"); + media_codec_buffer_info.offset = + (*env)->GetFieldID (env, media_codec_buffer_info.klass, "offset", "I"); + media_codec_buffer_info.presentation_time_us = + (*env)->GetFieldID (env, media_codec_buffer_info.klass, + "presentationTimeUs", "J"); + media_codec_buffer_info.size = + (*env)->GetFieldID (env, media_codec_buffer_info.klass, "size", "I"); + if (!media_codec_buffer_info.constructor || !media_codec_buffer_info.flags + || !media_codec_buffer_info.offset + || !media_codec_buffer_info.presentation_time_us + || !media_codec_buffer_info.size) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get buffer info methods and fields"); + goto done; + } + + tmp = (*env)->FindClass (env, "android/media/MediaFormat"); + if (!tmp) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get format class"); + goto done; + } + media_format.klass = (*env)->NewGlobalRef (env, tmp); + if (!media_format.klass) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get format class global reference"); + goto done; + } + (*env)->DeleteLocalRef (env, tmp); + tmp = NULL; + + media_format.create_audio_format = + (*env)->GetStaticMethodID (env, media_format.klass, "createAudioFormat", + "(Ljava/lang/String;II)Landroid/media/MediaFormat;"); + media_format.create_video_format = + (*env)->GetStaticMethodID (env, media_format.klass, "createVideoFormat", + "(Ljava/lang/String;II)Landroid/media/MediaFormat;"); + media_format.to_string = + (*env)->GetMethodID (env, media_format.klass, "toString", + "()Ljava/lang/String;"); + media_format.contains_key = + (*env)->GetMethodID (env, media_format.klass, "containsKey", + "(Ljava/lang/String;)Z"); + media_format.get_float = + (*env)->GetMethodID (env, media_format.klass, "getFloat", + "(Ljava/lang/String;)F"); + media_format.set_float = + (*env)->GetMethodID (env, media_format.klass, "setFloat", + "(Ljava/lang/String;F)V"); + media_format.get_integer = + (*env)->GetMethodID (env, media_format.klass, "getInteger", + "(Ljava/lang/String;)I"); + media_format.set_integer = + (*env)->GetMethodID (env, media_format.klass, "setInteger", + "(Ljava/lang/String;I)V"); + media_format.get_string = + (*env)->GetMethodID (env, media_format.klass, "getString", + "(Ljava/lang/String;)Ljava/lang/String;"); + media_format.set_string = + (*env)->GetMethodID (env, media_format.klass, "setString", + "(Ljava/lang/String;Ljava/lang/String;)V"); + media_format.get_byte_buffer = + (*env)->GetMethodID (env, media_format.klass, "getByteBuffer", + "(Ljava/lang/String;)Ljava/nio/ByteBuffer;"); + media_format.set_byte_buffer = + (*env)->GetMethodID (env, media_format.klass, "setByteBuffer", + "(Ljava/lang/String;Ljava/nio/ByteBuffer;)V"); + if (!media_format.create_audio_format || !media_format.create_video_format + || !media_format.contains_key || !media_format.get_float + || !media_format.set_float || !media_format.get_integer + || !media_format.set_integer || !media_format.get_string + || !media_format.set_string || !media_format.get_byte_buffer + || !media_format.set_byte_buffer) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get format methods"); + goto done; + } + +done: + if (tmp) + (*env)->DeleteLocalRef (env, tmp); + tmp = NULL; + + return ret; +} + +static gboolean +scan_codecs (GstPlugin * plugin) +{ + gboolean ret = TRUE; + JNIEnv *env; + jclass codec_list_class = NULL; + jmethodID get_codec_count_id, get_codec_info_at_id; + jint codec_count, i; + const GstStructure *cache_data; + + GST_DEBUG ("Scanning codecs"); + + if ((cache_data = gst_plugin_get_cache_data (plugin))) { + const GValue *arr = gst_structure_get_value (cache_data, "codecs"); + guint i, n; + + GST_DEBUG ("Getting codecs from cache"); + n = gst_value_array_get_size (arr); + for (i = 0; i < n; i++) { + const GValue *cv = gst_value_array_get_value (arr, i); + const GstStructure *cs = gst_value_get_structure (cv); + const gchar *name; + gboolean is_encoder; + const GValue *starr; + guint j, n2; + GstAmcCodecInfo *gst_codec_info; + + gst_codec_info = g_new0 (GstAmcCodecInfo, 1); + + name = gst_structure_get_string (cs, "name"); + gst_structure_get_boolean (cs, "is-encoder", &is_encoder); + gst_codec_info->name = g_strdup (name); + gst_codec_info->is_encoder = is_encoder; + + starr = gst_structure_get_value (cs, "supported-types"); + n2 = gst_value_array_get_size (starr); + + gst_codec_info->n_supported_types = n2; + gst_codec_info->supported_types = g_new0 (GstAmcCodecType, n2); + + for (j = 0; j < n2; j++) { + const GValue *stv = gst_value_array_get_value (starr, j); + const GstStructure *sts = gst_value_get_structure (stv); + const gchar *mime; + const GValue *cfarr; + const GValue *plarr; + guint k, n3; + GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[j]; + + mime = gst_structure_get_string (sts, "mime"); + gst_codec_type->mime = g_strdup (mime); + + cfarr = gst_structure_get_value (sts, "color-formats"); + n3 = gst_value_array_get_size (cfarr); + + gst_codec_type->n_color_formats = n3; + gst_codec_type->color_formats = g_new0 (gint, n3); + + for (k = 0; k < n3; k++) { + const GValue *cfv = gst_value_array_get_value (cfarr, k); + gint cf = g_value_get_int (cfv); + + gst_codec_type->color_formats[k] = cf; + } + + plarr = gst_structure_get_value (sts, "profile-levels"); + n3 = gst_value_array_get_size (plarr); + + gst_codec_type->n_profile_levels = n3; + gst_codec_type->profile_levels = + g_malloc0 (sizeof (gst_codec_type->profile_levels[0]) * n3); + + for (k = 0; k < n3; k++) { + const GValue *plv = gst_value_array_get_value (plarr, k); + const GValue *p, *l; + + p = gst_value_array_get_value (plv, 0); + l = gst_value_array_get_value (plv, 1); + gst_codec_type->profile_levels[k].profile = g_value_get_int (p); + gst_codec_type->profile_levels[k].level = g_value_get_int (l); + } + } + + codec_infos = g_list_append (codec_infos, gst_codec_info); + } + + return TRUE; + } + + env = gst_amc_get_jni_env (); + + codec_list_class = (*env)->FindClass (env, "android/media/MediaCodecList"); + if (!codec_list_class) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec list class"); + goto done; + } + + get_codec_count_id = + (*env)->GetStaticMethodID (env, codec_list_class, "getCodecCount", "()I"); + get_codec_info_at_id = + (*env)->GetStaticMethodID (env, codec_list_class, "getCodecInfoAt", + "(I)Landroid/media/MediaCodecInfo;"); + if (!get_codec_count_id || !get_codec_info_at_id) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec list method IDs"); + goto done; + } + + codec_count = + (*env)->CallStaticIntMethod (env, codec_list_class, get_codec_count_id); + if ((*env)->ExceptionCheck (env)) { + ret = FALSE; + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get number of available codecs"); + goto done; + } + + GST_LOG ("Found %d available codecs", codec_count); + + for (i = 0; i < codec_count; i++) { + GstAmcCodecInfo *gst_codec_info; + jobject codec_info = NULL; + jclass codec_info_class = NULL; + jmethodID get_capabilities_for_type_id, get_name_id; + jmethodID get_supported_types_id, is_encoder_id; + jobject name = NULL; + const gchar *name_str = NULL; + jboolean is_encoder; + jarray supported_types = NULL; + jsize n_supported_types; + jsize j; + gboolean valid_codec = TRUE; + + gst_codec_info = g_new0 (GstAmcCodecInfo, 1); + + codec_info = + (*env)->CallStaticObjectMethod (env, codec_list_class, + get_codec_info_at_id, i); + if ((*env)->ExceptionCheck (env) || !codec_info) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec info %d", i); + valid_codec = FALSE; + goto next_codec; + } + + codec_info_class = (*env)->GetObjectClass (env, codec_info); + if (!codec_list_class) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec info class"); + valid_codec = FALSE; + goto next_codec; + } + + get_capabilities_for_type_id = + (*env)->GetMethodID (env, codec_info_class, "getCapabilitiesForType", + "(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;"); + get_name_id = + (*env)->GetMethodID (env, codec_info_class, "getName", + "()Ljava/lang/String;"); + get_supported_types_id = + (*env)->GetMethodID (env, codec_info_class, "getSupportedTypes", + "()[Ljava/lang/String;"); + is_encoder_id = + (*env)->GetMethodID (env, codec_info_class, "isEncoder", "()Z"); + if (!get_capabilities_for_type_id || !get_name_id + || !get_supported_types_id || !is_encoder_id) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec info method IDs"); + valid_codec = FALSE; + goto next_codec; + } + + name = (*env)->CallObjectMethod (env, codec_info, get_name_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get codec name"); + valid_codec = FALSE; + goto next_codec; + } + name_str = (*env)->GetStringUTFChars (env, name, NULL); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to convert codec name to UTF8"); + valid_codec = FALSE; + goto next_codec; + } + + GST_INFO ("Checking codec '%s'", name_str); + + /* Compatibility codec names */ + if (strcmp (name_str, "AACEncoder") == 0 || + strcmp (name_str, "OMX.google.raw.decoder") == 0) { + GST_INFO ("Skipping compatibility codec '%s'", name_str); + valid_codec = FALSE; + goto next_codec; + } + + if (g_str_has_suffix (name_str, ".secure")) { + GST_INFO ("Skipping DRM codec '%s'", name_str); + valid_codec = FALSE; + goto next_codec; + } + + /* FIXME: Non-Google codecs usually just don't work and hang forever + * or crash when not used from a process that started the Java + * VM via the non-public AndroidRuntime class. Can we somehow + * initialize all this? + */ + if (started_java_vm && !g_str_has_prefix (name_str, "OMX.google.")) { + GST_INFO ("Skipping non-Google codec '%s' in standalone mode", name_str); + valid_codec = FALSE; + goto next_codec; + } + + /* FIXME: + * - Vorbis: Generates clicks for multi-channel streams + * - *Law: Generates output with too low frequencies + */ + if (strcmp (name_str, "OMX.google.vorbis.decoder") == 0 || + strcmp (name_str, "OMX.google.g711.alaw.decoder") == 0 || + strcmp (name_str, "OMX.google.g711.mlaw.decoder") == 0) { + GST_INFO ("Skipping known broken codec '%s'", name_str); + valid_codec = FALSE; + goto next_codec; + } + gst_codec_info->name = g_strdup (name_str); + + is_encoder = (*env)->CallBooleanMethod (env, codec_info, is_encoder_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to detect if codec is an encoder"); + valid_codec = FALSE; + goto next_codec; + } + gst_codec_info->is_encoder = is_encoder; + + supported_types = + (*env)->CallObjectMethod (env, codec_info, get_supported_types_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get supported types"); + valid_codec = FALSE; + goto next_codec; + } + + n_supported_types = (*env)->GetArrayLength (env, supported_types); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get supported types array length"); + valid_codec = FALSE; + goto next_codec; + } + + GST_INFO ("Codec '%s' has %d supported types", name_str, n_supported_types); + + gst_codec_info->supported_types = + g_new0 (GstAmcCodecType, n_supported_types); + gst_codec_info->n_supported_types = n_supported_types; + + if (n_supported_types == 0) { + valid_codec = FALSE; + GST_ERROR ("Codec has no supported types"); + goto next_codec; + } + + for (j = 0; j < n_supported_types; j++) { + GstAmcCodecType *gst_codec_type; + jobject supported_type = NULL; + const gchar *supported_type_str = NULL; + jobject capabilities = NULL; + jclass capabilities_class = NULL; + jfieldID color_formats_id, profile_levels_id; + jobject color_formats = NULL; + jobject profile_levels = NULL; + jint *color_formats_elems = NULL; + jsize n_elems, k; + + gst_codec_type = &gst_codec_info->supported_types[j]; + + supported_type = (*env)->GetObjectArrayElement (env, supported_types, j); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get %d-th supported type", j); + valid_codec = FALSE; + goto next_supported_type; + } + + supported_type_str = + (*env)->GetStringUTFChars (env, supported_type, NULL); + if ((*env)->ExceptionCheck (env) || !supported_type_str) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to convert supported type to UTF8"); + valid_codec = FALSE; + goto next_supported_type; + } + + GST_INFO ("Supported type '%s'", supported_type_str); + gst_codec_type->mime = g_strdup (supported_type_str); + + capabilities = + (*env)->CallObjectMethod (env, codec_info, + get_capabilities_for_type_id, supported_type); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get capabilities for supported type"); + valid_codec = FALSE; + goto next_supported_type; + } + + capabilities_class = (*env)->GetObjectClass (env, capabilities); + if (!capabilities_class) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get capabilities class"); + valid_codec = FALSE; + goto next_supported_type; + } + + color_formats_id = + (*env)->GetFieldID (env, capabilities_class, "colorFormats", "[I"); + profile_levels_id = + (*env)->GetFieldID (env, capabilities_class, "profileLevels", + "[Landroid/media/MediaCodecInfo$CodecProfileLevel;"); + if (!color_formats_id || !profile_levels_id) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get capabilities field IDs"); + valid_codec = FALSE; + goto next_supported_type; + } + + color_formats = + (*env)->GetObjectField (env, capabilities, color_formats_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get color formats"); + valid_codec = FALSE; + goto next_supported_type; + } + + n_elems = (*env)->GetArrayLength (env, color_formats); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get color formats array length"); + valid_codec = FALSE; + goto next_supported_type; + } + gst_codec_type->n_color_formats = n_elems; + gst_codec_type->color_formats = g_new0 (gint, n_elems); + color_formats_elems = + (*env)->GetIntArrayElements (env, color_formats, NULL); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get color format elements"); + valid_codec = FALSE; + goto next_supported_type; + } + + for (k = 0; k < n_elems; k++) { + GST_INFO ("Color format %d: %d", k, color_formats_elems[k]); + gst_codec_type->color_formats[k] = color_formats_elems[k]; + } + + if (g_str_has_prefix (gst_codec_type->mime, "video/")) { + if (!n_elems) { + GST_ERROR ("No supported color formats for video codec"); + valid_codec = FALSE; + goto next_supported_type; + } + + if (!ignore_unknown_color_formats + && !accepted_color_formats (gst_codec_type, is_encoder)) { + GST_ERROR ("Codec has unknown color formats, ignoring"); + valid_codec = FALSE; + g_assert_not_reached (); + goto next_supported_type; + } + } + + profile_levels = + (*env)->GetObjectField (env, capabilities, profile_levels_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get profile/levels"); + valid_codec = FALSE; + goto next_supported_type; + } + + n_elems = (*env)->GetArrayLength (env, profile_levels); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get profile/levels array length"); + valid_codec = FALSE; + goto next_supported_type; + } + gst_codec_type->n_profile_levels = n_elems; + gst_codec_type->profile_levels = + g_malloc0 (sizeof (gst_codec_type->profile_levels[0]) * n_elems); + for (k = 0; k < n_elems; k++) { + jobject profile_level = NULL; + jclass profile_level_class = NULL; + jfieldID level_id, profile_id; + jint level, profile; + + profile_level = (*env)->GetObjectArrayElement (env, profile_levels, k); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get %d-th profile/level", k); + valid_codec = FALSE; + goto next_profile_level; + } + + profile_level_class = (*env)->GetObjectClass (env, profile_level); + if (!profile_level_class) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get profile/level class"); + valid_codec = FALSE; + goto next_profile_level; + } + + level_id = (*env)->GetFieldID (env, profile_level_class, "level", "I"); + profile_id = + (*env)->GetFieldID (env, profile_level_class, "profile", "I"); + if (!level_id || !profile_id) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get profile/level field IDs"); + valid_codec = FALSE; + goto next_profile_level; + } + + level = (*env)->GetIntField (env, profile_level, level_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get level"); + valid_codec = FALSE; + goto next_profile_level; + } + GST_INFO ("Level %d: 0x%08x", k, level); + gst_codec_type->profile_levels[k].level = level; + + profile = (*env)->GetIntField (env, profile_level, profile_id); + if ((*env)->ExceptionCheck (env)) { + (*env)->ExceptionClear (env); + GST_ERROR ("Failed to get profile"); + valid_codec = FALSE; + goto next_profile_level; + } + GST_INFO ("Profile %d: 0x%08x", k, profile); + gst_codec_type->profile_levels[k].profile = profile; + + next_profile_level: + if (profile_level) + (*env)->DeleteLocalRef (env, profile_level); + profile_level = NULL; + if (profile_level_class) + (*env)->DeleteLocalRef (env, profile_level_class); + profile_level_class = NULL; + if (!valid_codec) + break; + } + + next_supported_type: + if (color_formats_elems) + (*env)->ReleaseIntArrayElements (env, color_formats, + color_formats_elems, JNI_ABORT); + color_formats_elems = NULL; + if (color_formats) + (*env)->DeleteLocalRef (env, color_formats); + color_formats = NULL; + if (profile_levels) + (*env)->DeleteLocalRef (env, profile_levels); + color_formats = NULL; + if (capabilities) + (*env)->DeleteLocalRef (env, capabilities); + capabilities = NULL; + if (capabilities_class) + (*env)->DeleteLocalRef (env, capabilities_class); + capabilities_class = NULL; + if (supported_type_str) + (*env)->ReleaseStringUTFChars (env, supported_type, supported_type_str); + supported_type_str = NULL; + if (supported_type) + (*env)->DeleteLocalRef (env, supported_type); + supported_type = NULL; + if (!valid_codec) + break; + } + + /* We need at least a valid supported type */ + if (valid_codec) { + GST_LOG ("Successfully scanned codec '%s'", name_str); + codec_infos = g_list_append (codec_infos, gst_codec_info); + gst_codec_info = NULL; + } + + /* Clean up of all local references we got */ + next_codec: + if (name_str) + (*env)->ReleaseStringUTFChars (env, name, name_str); + name_str = NULL; + if (name) + (*env)->DeleteLocalRef (env, name); + name = NULL; + if (supported_types) + (*env)->DeleteLocalRef (env, supported_types); + supported_types = NULL; + if (codec_info) + (*env)->DeleteLocalRef (env, codec_info); + codec_info = NULL; + if (codec_info_class) + (*env)->DeleteLocalRef (env, codec_info_class); + codec_info_class = NULL; + if (gst_codec_info) { + gint j; + + for (j = 0; j < gst_codec_info->n_supported_types; j++) { + GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[j]; + + g_free (gst_codec_type->mime); + g_free (gst_codec_type->color_formats); + g_free (gst_codec_type->profile_levels); + } + g_free (gst_codec_info->supported_types); + g_free (gst_codec_info->name); + g_free (gst_codec_info); + } + gst_codec_info = NULL; + valid_codec = TRUE; + } + + ret = codec_infos != NULL; + + /* If successful we store a cache of the codec information in + * the registry. Otherwise we would always load all codecs during + * plugin initialization which can take quite some time (because + * of hardware) and also loads lots of shared libraries (which + * number is limited by 64 in Android). + */ + if (ret) { + GstStructure *new_cache_data = gst_structure_empty_new ("gst-amc-cache"); + GList *l; + GValue arr = { 0, }; + + g_value_init (&arr, GST_TYPE_ARRAY); + + for (l = codec_infos; l; l = l->next) { + GstAmcCodecInfo *gst_codec_info = l->data; + GValue cv = { 0, }; + GstStructure *cs = gst_structure_empty_new ("gst-amc-codec"); + GValue starr = { 0, }; + gint i; + + gst_structure_set (cs, "name", G_TYPE_STRING, gst_codec_info->name, + "is-encoder", G_TYPE_BOOLEAN, gst_codec_info->is_encoder, NULL); + + g_value_init (&starr, GST_TYPE_ARRAY); + + for (i = 0; i < gst_codec_info->n_supported_types; i++) { + GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[i]; + GstStructure *sts = gst_structure_empty_new ("gst-amc-supported-type"); + GValue stv = { 0, }; + GValue tmparr = { 0, }; + gint j; + + gst_structure_set (sts, "mime", G_TYPE_STRING, gst_codec_type->mime, + NULL); + + g_value_init (&tmparr, GST_TYPE_ARRAY); + for (j = 0; j < gst_codec_type->n_color_formats; j++) { + GValue tmp = { 0, }; + + g_value_init (&tmp, G_TYPE_INT); + g_value_set_int (&tmp, gst_codec_type->color_formats[j]); + gst_value_array_append_value (&tmparr, &tmp); + g_value_unset (&tmp); + } + gst_structure_set_value (sts, "color-formats", &tmparr); + g_value_unset (&tmparr); + + g_value_init (&tmparr, GST_TYPE_ARRAY); + for (j = 0; j < gst_codec_type->n_profile_levels; j++) { + GValue tmparr2 = { 0, }; + GValue tmp = { 0, }; + + g_value_init (&tmparr2, GST_TYPE_ARRAY); + g_value_init (&tmp, G_TYPE_INT); + g_value_set_int (&tmp, gst_codec_type->profile_levels[j].profile); + gst_value_array_append_value (&tmparr2, &tmp); + g_value_set_int (&tmp, gst_codec_type->profile_levels[j].level); + gst_value_array_append_value (&tmparr2, &tmp); + gst_value_array_append_value (&tmparr, &tmparr2); + g_value_unset (&tmp); + g_value_unset (&tmparr2); + } + gst_structure_set_value (sts, "profile-levels", &tmparr); + + g_value_init (&stv, GST_TYPE_STRUCTURE); + gst_value_set_structure (&stv, sts); + gst_value_array_append_value (&starr, &stv); + g_value_unset (&tmparr); + gst_structure_free (sts); + } + + gst_structure_set_value (cs, "supported-types", &starr); + g_value_unset (&starr); + + g_value_init (&cv, GST_TYPE_STRUCTURE); + gst_value_set_structure (&cv, cs); + gst_value_array_append_value (&arr, &cv); + g_value_unset (&cv); + gst_structure_free (cs); + } + + gst_structure_set_value (new_cache_data, "codecs", &arr); + g_value_unset (&arr); + + gst_plugin_set_cache_data (plugin, new_cache_data); + } + +done: + if (codec_list_class) + (*env)->DeleteLocalRef (env, codec_list_class); + + return ret; +} + +static const struct +{ + gint color_format; + GstVideoFormat video_format; +} color_format_mapping_table[] = { + { + COLOR_FormatYUV420Planar, GST_VIDEO_FORMAT_I420}, { + COLOR_FormatYUV420SemiPlanar, GST_VIDEO_FORMAT_NV12}, { + COLOR_TI_FormatYUV420PackedSemiPlanar, GST_VIDEO_FORMAT_NV12}, { + COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced, GST_VIDEO_FORMAT_NV12}, { + COLOR_QCOM_FormatYUV420SemiPlanar, GST_VIDEO_FORMAT_NV12} +}; + +static gboolean +accepted_color_formats (GstAmcCodecType * type, gboolean is_encoder) +{ + gint i, j; + gint accepted = 0, all = type->n_color_formats; + + for (i = 0; i < type->n_color_formats; i++) { + gboolean found = FALSE; + /* We ignore this one */ + if (type->color_formats[i] == COLOR_FormatAndroidOpaque) + all--; + + for (j = 0; j < G_N_ELEMENTS (color_format_mapping_table); j++) { + if (color_format_mapping_table[j].color_format == type->color_formats[i]) { + found = TRUE; + break; + } + } + + if (found) + accepted++; + } + + if (is_encoder) + return accepted > 0; + else + return accepted == all && all > 0; +} + +GstVideoFormat +gst_amc_color_format_to_video_format (gint color_format) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (color_format_mapping_table); i++) { + if (color_format_mapping_table[i].color_format == color_format) + return color_format_mapping_table[i].video_format; + } + + return GST_VIDEO_FORMAT_UNKNOWN; +} + +gint +gst_amc_video_format_to_color_format (GstVideoFormat video_format) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (color_format_mapping_table); i++) { + if (color_format_mapping_table[i].video_format == video_format) + return color_format_mapping_table[i].color_format; + } + + return -1; +} + +static const struct +{ + gint id; + const gchar *str; + const gchar *alt_str; +} avc_profile_mapping_table[] = { + { + AVCProfileBaseline, "baseline", "constrained-baseline"}, { + AVCProfileMain, "main", NULL}, { + AVCProfileExtended, "extended", NULL}, { + AVCProfileHigh, "high"}, { + AVCProfileHigh10, "high-10", "high-10-intra"}, { + AVCProfileHigh422, "high-4:2:2", "high-4:2:2-intra"}, { + AVCProfileHigh444, "high-4:4:4", "high-4:4:4-intra"} +}; + +const gchar * +gst_amc_avc_profile_to_string (gint profile, const gchar ** alternative) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (avc_profile_mapping_table); i++) { + if (avc_profile_mapping_table[i].id == profile) { + *alternative = avc_profile_mapping_table[i].alt_str; + return avc_profile_mapping_table[i].str; + } + } + + return NULL; +} + +gint +gst_amc_avc_profile_from_string (const gchar * profile) +{ + gint i; + + g_return_val_if_fail (profile != NULL, -1); + + for (i = 0; i < G_N_ELEMENTS (avc_profile_mapping_table); i++) { + if (strcmp (avc_profile_mapping_table[i].str, profile) == 0) + return avc_profile_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + const gchar *str; +} avc_level_mapping_table[] = { + { + AVCLevel1, "1"}, { + AVCLevel1b, "1b"}, { + AVCLevel11, "1.1"}, { + AVCLevel12, "1.2"}, { + AVCLevel13, "1.3"}, { + AVCLevel2, "2"}, { + AVCLevel21, "2.1"}, { + AVCLevel22, "2.2"}, { + AVCLevel3, "3"}, { + AVCLevel31, "3.1"}, { + AVCLevel32, "3.2"}, { + AVCLevel4, "4"}, { + AVCLevel41, "4.1"}, { + AVCLevel42, "4.2"}, { + AVCLevel5, "5"}, { + AVCLevel51, "5.1"} +}; + +const gchar * +gst_amc_avc_level_to_string (gint level) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (avc_level_mapping_table); i++) { + if (avc_level_mapping_table[i].id == level) + return avc_level_mapping_table[i].str; + } + + return NULL; +} + +gint +gst_amc_avc_level_from_string (const gchar * level) +{ + gint i; + + g_return_val_if_fail (level != NULL, -1); + + for (i = 0; i < G_N_ELEMENTS (avc_level_mapping_table); i++) { + if (strcmp (avc_level_mapping_table[i].str, level) == 0) + return avc_level_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + gint gst_id; +} h263_profile_mapping_table[] = { + { + H263ProfileBaseline, 0}, { + H263ProfileH320Coding, 1}, { + H263ProfileBackwardCompatible, 2}, { + H263ProfileISWV2, 3}, { + H263ProfileISWV3, 4}, { + H263ProfileHighCompression, 5}, { + H263ProfileInternet, 6}, { + H263ProfileInterlace, 7}, { + H263ProfileHighLatency, 8} +}; + +gint +gst_amc_h263_profile_to_gst_id (gint profile) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (h263_profile_mapping_table); i++) { + if (h263_profile_mapping_table[i].id == profile) + return h263_profile_mapping_table[i].gst_id; + } + + return -1; +} + +gint +gst_amc_h263_profile_from_gst_id (gint profile) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (h263_profile_mapping_table); i++) { + if (h263_profile_mapping_table[i].gst_id == profile) + return h263_profile_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + gint gst_id; +} h263_level_mapping_table[] = { + { + H263Level10, 10}, { + H263Level20, 20}, { + H263Level30, 30}, { + H263Level40, 40}, { + H263Level50, 50}, { + H263Level60, 60}, { + H263Level70, 70} +}; + +gint +gst_amc_h263_level_to_gst_id (gint level) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (h263_level_mapping_table); i++) { + if (h263_level_mapping_table[i].id == level) + return h263_level_mapping_table[i].gst_id; + } + + return -1; +} + +gint +gst_amc_h263_level_from_gst_id (gint level) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (h263_level_mapping_table); i++) { + if (h263_level_mapping_table[i].gst_id == level) + return h263_level_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + const gchar *str; +} mpeg4_profile_mapping_table[] = { + { + MPEG4ProfileSimple, "simple"}, { + MPEG4ProfileSimpleScalable, "simple-scalable"}, { + MPEG4ProfileCore, "core"}, { + MPEG4ProfileMain, "main"}, { + MPEG4ProfileNbit, "n-bit"}, { + MPEG4ProfileScalableTexture, "scalable"}, { + MPEG4ProfileSimpleFace, "simple-face"}, { + MPEG4ProfileSimpleFBA, "simple-fba"}, { + MPEG4ProfileBasicAnimated, "basic-animated-texture"}, { + MPEG4ProfileHybrid, "hybrid"}, { + MPEG4ProfileAdvancedRealTime, "advanced-real-time"}, { + MPEG4ProfileCoreScalable, "core-scalable"}, { + MPEG4ProfileAdvancedCoding, "advanced-coding-efficiency"}, { + MPEG4ProfileAdvancedCore, "advanced-core"}, { + MPEG4ProfileAdvancedScalable, "advanced-scalable-texture"}, { + MPEG4ProfileAdvancedSimple, "advanced-simple"} +}; + +const gchar * +gst_amc_mpeg4_profile_to_string (gint profile) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (mpeg4_profile_mapping_table); i++) { + if (mpeg4_profile_mapping_table[i].id == profile) + return mpeg4_profile_mapping_table[i].str; + } + + return NULL; +} + +gint +gst_amc_avc_mpeg4_profile_from_string (const gchar * profile) +{ + gint i; + + g_return_val_if_fail (profile != NULL, -1); + + for (i = 0; i < G_N_ELEMENTS (mpeg4_profile_mapping_table); i++) { + if (strcmp (mpeg4_profile_mapping_table[i].str, profile) == 0) + return mpeg4_profile_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + const gchar *str; +} mpeg4_level_mapping_table[] = { + { + MPEG4Level0, "0"}, { + MPEG4Level0b, "0b"}, { + MPEG4Level1, "1"}, { + MPEG4Level2, "2"}, { + MPEG4Level3, "3"}, { + MPEG4Level4, "4"}, { + MPEG4Level4a, "4a"}, { +MPEG4Level5, "5"},}; + +const gchar * +gst_amc_mpeg4_level_to_string (gint level) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (mpeg4_level_mapping_table); i++) { + if (mpeg4_level_mapping_table[i].id == level) + return mpeg4_level_mapping_table[i].str; + } + + return NULL; +} + +gint +gst_amc_mpeg4_level_from_string (const gchar * level) +{ + gint i; + + g_return_val_if_fail (level != NULL, -1); + + for (i = 0; i < G_N_ELEMENTS (mpeg4_level_mapping_table); i++) { + if (strcmp (mpeg4_level_mapping_table[i].str, level) == 0) + return mpeg4_level_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + gint id; + const gchar *str; +} aac_profile_mapping_table[] = { + { + AACObjectMain, "main"}, { + AACObjectLC, "lc"}, { + AACObjectSSR, "ssr"}, { + AACObjectLTP, "ltp"} +}; + +const gchar * +gst_amc_aac_profile_to_string (gint profile) +{ + gint i; + + for (i = 0; i < G_N_ELEMENTS (aac_profile_mapping_table); i++) { + if (aac_profile_mapping_table[i].id == profile) + return aac_profile_mapping_table[i].str; + } + + return NULL; +} + +gint +gst_amc_aac_profile_from_string (const gchar * profile) +{ + gint i; + + g_return_val_if_fail (profile != NULL, -1); + + for (i = 0; i < G_N_ELEMENTS (aac_profile_mapping_table); i++) { + if (strcmp (aac_profile_mapping_table[i].str, profile) == 0) + return aac_profile_mapping_table[i].id; + } + + return -1; +} + +static const struct +{ + guint32 mask; + GstAudioChannelPosition pos; +} channel_mapping_table[] = { + { + CHANNEL_OUT_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, { + CHANNEL_OUT_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, { + CHANNEL_OUT_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, { + CHANNEL_OUT_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, { + CHANNEL_OUT_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, { + CHANNEL_OUT_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, { + CHANNEL_OUT_FRONT_LEFT_OF_CENTER, + GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, { + CHANNEL_OUT_FRONT_RIGHT_OF_CENTER, + GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, { + CHANNEL_OUT_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, { + CHANNEL_OUT_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, { + CHANNEL_OUT_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, { + CHANNEL_OUT_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, { + CHANNEL_OUT_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_INVALID} +}; + +GstAudioChannelPosition * +gst_amc_audio_channel_mask_to_positions (guint32 channel_mask, gint channels) +{ + GstAudioChannelPosition *pos = g_new0 (GstAudioChannelPosition, channels); + gint i, j; + + if (channel_mask == 0) { + if (channels == 1) { + pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO; + return pos; + } + if (channels == 2) { + pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT; + pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT; + return pos; + } + + /* Now let the guesswork begin, these are the + * AAC default channel assignments for these numbers + * of channels */ + if (channels == 3) { + channel_mask = + CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | + CHANNEL_OUT_FRONT_CENTER; + } else if (channels == 4) { + channel_mask = + CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER; + } else if (channels == 5) { + channel_mask = + CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT | + CHANNEL_OUT_BACK_RIGHT; + } else if (channels == 6) { + channel_mask = + CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT | + CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_LOW_FREQUENCY; + } else if (channels == 8) { + channel_mask = + CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT | + CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_LOW_FREQUENCY | + CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER; + } + } + + for (i = 0, j = 0; i < G_N_ELEMENTS (channel_mapping_table); i++) { + if ((channel_mask & channel_mapping_table[i].mask)) { + pos[j++] = channel_mapping_table[i].pos; + if (channel_mapping_table[i].pos == GST_AUDIO_CHANNEL_POSITION_INVALID) { + g_free (pos); + GST_ERROR ("Unable to map channel mask 0x%08x", + channel_mapping_table[i].mask); + return NULL; + } + if (j == channels) + break; + } + } + + if (j != channels) { + g_free (pos); + GST_ERROR ("Unable to map all channel positions in mask 0x%08x", + channel_mask); + return NULL; + } + + return pos; +} + +guint32 +gst_amc_audio_channel_mask_from_positions (GstAudioChannelPosition * positions, + gint channels) +{ + gint i, j; + guint32 channel_mask = 0; + + if (channels == 1 && !positions) + return CHANNEL_OUT_FRONT_CENTER; + if (channels == 2 && !positions) + return CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT; + + for (i = 0; i < channels; i++) { + if (positions[i] == GST_AUDIO_CHANNEL_POSITION_INVALID) + return 0; + + for (j = 0; j < G_N_ELEMENTS (channel_mapping_table); j++) { + if (channel_mapping_table[j].pos == positions[i]) { + channel_mask |= channel_mapping_table[j].mask; + break; + } + } + + if (j == G_N_ELEMENTS (channel_mapping_table)) { + GST_ERROR ("Unable to map channel position %d", positions[i]); + return 0; + } + } + + return channel_mask; +} + +static gchar * +create_type_name (const gchar * parent_name, const gchar * codec_name) +{ + gchar *typified_name; + gint i, k; + gint parent_name_len = strlen (parent_name); + gint codec_name_len = strlen (codec_name); + gboolean upper = TRUE; + + typified_name = g_new0 (gchar, parent_name_len + 1 + strlen (codec_name) + 1); + memcpy (typified_name, parent_name, parent_name_len); + typified_name[parent_name_len] = '-'; + + for (i = 0, k = 0; i < codec_name_len; i++) { + if (g_ascii_isalnum (codec_name[i])) { + if (upper) + typified_name[parent_name_len + 1 + k++] = + g_ascii_toupper (codec_name[i]); + else + typified_name[parent_name_len + 1 + k++] = + g_ascii_tolower (codec_name[i]); + + upper = FALSE; + } else { + /* Skip all non-alnum chars and start a new upper case word */ + upper = TRUE; + } + } + + return typified_name; +} + +static gchar * +create_element_name (gboolean video, gboolean encoder, const gchar * codec_name) +{ +#define PREFIX_LEN 10 + static const gchar *prefixes[] = { + "amcviddec-", + "amcauddec-", + "amcvidenc-", + "amcaudenc-" + }; + gchar *element_name; + gint i, k; + gint codec_name_len = strlen (codec_name); + const gchar *prefix; + + if (video && !encoder) + prefix = prefixes[0]; + else if (!video && !encoder) + prefix = prefixes[1]; + else if (video && encoder) + prefix = prefixes[2]; + else + prefix = prefixes[3]; + + element_name = g_new0 (gchar, PREFIX_LEN + strlen (codec_name) + 1); + memcpy (element_name, prefix, PREFIX_LEN); + + for (i = 0, k = 0; i < codec_name_len; i++) { + if (g_ascii_isalnum (codec_name[i])) { + element_name[PREFIX_LEN + k++] = g_ascii_tolower (codec_name[i]); + } + /* Skip all non-alnum chars */ + } + + return element_name; +} + +#undef PREFIX_LEN + +static gboolean +register_codecs (GstPlugin * plugin) +{ + gboolean ret = TRUE; + GList *l; + + GST_DEBUG ("Registering plugins"); + + for (l = codec_infos; l; l = l->next) { + GstAmcCodecInfo *codec_info = l->data; + gboolean is_audio = FALSE; + gboolean is_video = FALSE; + gint i; + gint n_types; + + GST_DEBUG ("Registering codec '%s'", codec_info->name); + for (i = 0; i < codec_info->n_supported_types; i++) { + GstAmcCodecType *codec_type = &codec_info->supported_types[i]; + + if (g_str_has_prefix (codec_type->mime, "audio/")) + is_audio = TRUE; + else if (g_str_has_prefix (codec_type->mime, "video/")) + is_video = TRUE; + } + + n_types = 0; + if (is_audio) + n_types++; + if (is_video) + n_types++; + + for (i = 0; i < n_types; i++) { + GTypeQuery type_query; + GTypeInfo type_info = { 0, }; + GType type, subtype; + gchar *type_name, *element_name; + guint rank; + + if (is_video && !codec_info->is_encoder) { + type = gst_amc_video_dec_get_type (); + } else if (is_audio && !codec_info->is_encoder) { + type = gst_amc_audio_dec_get_type (); + } else { + GST_DEBUG ("Skipping unsupported codec type"); + continue; + } + + g_type_query (type, &type_query); + memset (&type_info, 0, sizeof (type_info)); + type_info.class_size = type_query.class_size; + type_info.instance_size = type_query.instance_size; + type_name = create_type_name (type_query.type_name, codec_info->name); + + if (g_type_from_name (type_name) != G_TYPE_INVALID) { + GST_ERROR ("Type '%s' already exists for codec '%s'", type_name, + codec_info->name); + g_free (type_name); + continue; + } + + subtype = g_type_register_static (type, type_name, &type_info, 0); + g_free (type_name); + + g_type_set_qdata (subtype, gst_amc_codec_info_quark, codec_info); + + element_name = + create_element_name (is_video, codec_info->is_encoder, + codec_info->name); + + /* Give the Google software codec a secondary rank, + * everything else is likely a hardware codec */ + if (g_str_has_prefix (codec_info->name, "OMX.google")) + rank = GST_RANK_SECONDARY; + else + rank = GST_RANK_PRIMARY; + + ret |= gst_element_register (plugin, element_name, rank, subtype); + g_free (element_name); + + is_video = FALSE; + } + } + + return ret; +} + +static gboolean +plugin_init (GstPlugin * plugin) +{ + const gchar *ignore; + + GST_DEBUG_CATEGORY_INIT (gst_amc_debug, "amc", 0, "android-media-codec"); + + pthread_key_create (¤t_jni_env, gst_amc_detach_current_thread); + + if (!initialize_java_vm ()) + return FALSE; + + gst_plugin_add_dependency_simple (plugin, NULL, "/etc", "media_codecs.xml", + GST_PLUGIN_DEPENDENCY_FLAG_NONE); + + if (!get_java_classes ()) + return FALSE; + + /* Set this to TRUE to allow registering decoders that have + * any unknown color formats, or encoders that only have + * unknown color formats + */ + ignore = g_getenv ("GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS"); + if (ignore && strcmp (ignore, "yes") == 0) + ignore_unknown_color_formats = TRUE; + + if (!scan_codecs (plugin)) + return FALSE; + + gst_amc_codec_info_quark = g_quark_from_static_string ("gst-amc-codec-info"); + + if (!register_codecs (plugin)) + return FALSE; + + return TRUE; +} + +#ifdef GST_PLUGIN_DEFINE2 +GST_PLUGIN_DEFINE2 (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + androidmedia, + "Android Media plugin", + plugin_init, + PACKAGE_VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) +#else +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "androidmedia", + "Android Media plugin", + plugin_init, + PACKAGE_VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) +#endif diff --git a/sys/androidmedia/gstamc.h b/sys/androidmedia/gstamc.h new file mode 100644 index 00000000..9568b493 --- /dev/null +++ b/sys/androidmedia/gstamc.h @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GST_AMC_H__ +#define __GST_AMC_H__ + +#include <gst/gst.h> +#include <gst/video/video.h> +#include <gst/audio/multichannel.h> +#include <jni.h> + +G_BEGIN_DECLS + +typedef struct _GstAmcCodecInfo GstAmcCodecInfo; +typedef struct _GstAmcCodecType GstAmcCodecType; +typedef struct _GstAmcCodec GstAmcCodec; +typedef struct _GstAmcBufferInfo GstAmcBufferInfo; +typedef struct _GstAmcFormat GstAmcFormat; +typedef struct _GstAmcBuffer GstAmcBuffer; + +struct _GstAmcCodecType { + gchar *mime; + + gint *color_formats; + gint n_color_formats; + + struct { + gint profile; + gint level; + } *profile_levels; + gint n_profile_levels; +}; + +struct _GstAmcCodecInfo { + gchar *name; + gboolean is_encoder; + GstAmcCodecType *supported_types; + gint n_supported_types; +}; + +struct _GstAmcBuffer { + jobject object; /* global reference */ + guint8 *data; + gsize size; +}; + +struct _GstAmcFormat { + /* < private > */ + jobject object; /* global reference */ +}; + +struct _GstAmcCodec { + /* < private > */ + jobject object; /* global reference */ +}; + +struct _GstAmcBufferInfo { + gint flags; + gint offset; + gint64 presentation_time_us; + gint size; +}; + +extern GQuark gst_amc_codec_info_quark; + +GstAmcCodec * gst_amc_codec_new (const gchar *name); +void gst_amc_codec_free (GstAmcCodec * codec); + +gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags); +GstAmcFormat * gst_amc_codec_get_output_format (GstAmcCodec * codec); + +gboolean gst_amc_codec_start (GstAmcCodec * codec); +gboolean gst_amc_codec_stop (GstAmcCodec * codec); +gboolean gst_amc_codec_flush (GstAmcCodec * codec); +gboolean gst_amc_codec_release (GstAmcCodec * codec); + +GstAmcBuffer * gst_amc_codec_get_output_buffers (GstAmcCodec * codec, gsize * n_buffers); +GstAmcBuffer * gst_amc_codec_get_input_buffers (GstAmcCodec * codec, gsize * n_buffers); +void gst_amc_codec_free_buffers (GstAmcBuffer * buffers, gsize n_buffers); + +gint gst_amc_codec_dequeue_input_buffer (GstAmcCodec * codec, gint64 timeoutUs); +gint gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec, GstAmcBufferInfo *info, gint64 timeoutUs); + +gboolean gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index, const GstAmcBufferInfo *info); +gboolean gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index); + + +GstAmcFormat * gst_amc_format_new_audio (const gchar *mime, gint sample_rate, gint channels); +GstAmcFormat * gst_amc_format_new_video (const gchar *mime, gint width, gint height); +void gst_amc_format_free (GstAmcFormat * format); + +gchar * gst_amc_format_to_string (GstAmcFormat * format); + +gboolean gst_amc_format_contains_key (GstAmcFormat *format, const gchar *key); + +gboolean gst_amc_format_get_float (GstAmcFormat *format, const gchar *key, gfloat *value); +void gst_amc_format_set_float (GstAmcFormat *format, const gchar *key, gfloat value); +gboolean gst_amc_format_get_int (GstAmcFormat *format, const gchar *key, gint *value); +void gst_amc_format_set_int (GstAmcFormat *format, const gchar *key, gint value); +gboolean gst_amc_format_get_string (GstAmcFormat *format, const gchar *key, gchar **value); +void gst_amc_format_set_string (GstAmcFormat *format, const gchar *key, const gchar *value); +gboolean gst_amc_format_get_buffer (GstAmcFormat *format, const gchar *key, GstBuffer **value); +void gst_amc_format_set_buffer (GstAmcFormat *format, const gchar *key, GstBuffer *value); + +GstVideoFormat gst_amc_color_format_to_video_format (gint color_format); +gint gst_amc_video_format_to_color_format (GstVideoFormat video_format); + +const gchar * gst_amc_avc_profile_to_string (gint profile, const gchar **alternative); +gint gst_amc_avc_profile_from_string (const gchar *profile); +const gchar * gst_amc_avc_level_to_string (gint level); +gint gst_amc_avc_level_from_string (const gchar *level); +gint gst_amc_h263_profile_to_gst_id (gint profile); +gint gst_amc_h263_profile_from_gst_id (gint profile); +gint gst_amc_h263_level_to_gst_id (gint level); +gint gst_amc_h263_level_from_gst_id (gint level); +const gchar * gst_amc_mpeg4_profile_to_string (gint profile); +gint gst_amc_avc_mpeg4_profile_from_string (const gchar *profile); +const gchar * gst_amc_mpeg4_level_to_string (gint level); +gint gst_amc_mpeg4_level_from_string (const gchar *level); +const gchar * gst_amc_aac_profile_to_string (gint profile); +gint gst_amc_aac_profile_from_string (const gchar *profile); + +GstAudioChannelPosition* gst_amc_audio_channel_mask_to_positions (guint32 channel_mask, gint channels); +guint32 gst_amc_audio_channel_mask_from_positions (GstAudioChannelPosition *positions, gint channels); + +G_END_DECLS + +#endif /* __GST_AMC_H__ */ diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c new file mode 100644 index 00000000..31a8bf5f --- /dev/null +++ b/sys/androidmedia/gstamcaudiodec.c @@ -0,0 +1,1230 @@ +/* + * Initially based on gst-omx/omx/gstomxvideodec.c + * + * Copyright (C) 2011, Hewlett-Packard Development Company, L.P. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd. + * + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gst/gst.h> +#include <gst/audio/multichannel.h> +#include <string.h> + +#ifdef HAVE_ORC +#include <orc/orc.h> +#else +#define orc_memcpy memcpy +#endif + +#include "gstamcaudiodec.h" +#include "gstamc-constants.h" + +GST_DEBUG_CATEGORY_STATIC (gst_amc_audio_dec_debug_category); +#define GST_CAT_DEFAULT gst_amc_audio_dec_debug_category + +/* prototypes */ +static void gst_amc_audio_dec_finalize (GObject * object); + +static GstStateChangeReturn +gst_amc_audio_dec_change_state (GstElement * element, + GstStateChange transition); + +static gboolean gst_amc_audio_dec_open (GstAudioDecoder * decoder); +static gboolean gst_amc_audio_dec_close (GstAudioDecoder * decoder); +static gboolean gst_amc_audio_dec_start (GstAudioDecoder * decoder); +static gboolean gst_amc_audio_dec_stop (GstAudioDecoder * decoder); +static gboolean gst_amc_audio_dec_set_format (GstAudioDecoder * decoder, + GstCaps * caps); +static void gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard); +static GstFlowReturn gst_amc_audio_dec_handle_frame (GstAudioDecoder * decoder, + GstBuffer * buffer); + +static GstFlowReturn gst_amc_audio_dec_drain (GstAmcAudioDec * self); + +enum +{ + PROP_0 +}; + +/* class initialization */ + +#define DEBUG_INIT(bla) \ + GST_DEBUG_CATEGORY_INIT (gst_amc_audio_dec_debug_category, "amcaudiodec", 0, \ + "Android MediaCodec audio decoder"); + +GST_BOILERPLATE_FULL (GstAmcAudioDec, gst_amc_audio_dec, GstAudioDecoder, + GST_TYPE_AUDIO_DECODER, DEBUG_INIT); + +static GstCaps * +create_sink_caps (const GstAmcCodecInfo * codec_info) +{ + GstCaps *ret; + gint i; + + ret = gst_caps_new_empty (); + + for (i = 0; i < codec_info->n_supported_types; i++) { + const GstAmcCodecType *type = &codec_info->supported_types[i]; + + if (strcmp (type->mime, "audio/mpeg") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/mpeg", + "mpegversion", G_TYPE_INT, 1, + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/3gpp") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/AMR", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/amr-wb") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/AMR-WB", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/mp4a-latm") == 0) { + gint j; + GstStructure *tmp, *tmp2; + gboolean have_profile = FALSE; + GValue va = { 0, }; + GValue v = { 0, }; + + g_value_init (&va, GST_TYPE_LIST); + g_value_init (&v, G_TYPE_STRING); + g_value_set_string (&v, "raw"); + gst_value_list_append_value (&va, &v); + g_value_set_string (&v, "adts"); + gst_value_list_append_value (&va, &v); + g_value_unset (&v); + + tmp = gst_structure_new ("audio/mpeg", + "mpegversion", G_TYPE_INT, 4, + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "framed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_structure_set_value (tmp, "stream-format", &va); + g_value_unset (&va); + + for (j = 0; j < type->n_profile_levels; j++) { + const gchar *profile; + + profile = + gst_amc_aac_profile_to_string (type->profile_levels[j].profile); + + if (!profile) { + GST_ERROR ("Unable to map AAC profile 0x%08x", + type->profile_levels[j].profile); + continue; + } + + tmp2 = gst_structure_copy (tmp); + gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL); + gst_caps_merge_structure (ret, tmp2); + + have_profile = TRUE; + } + + if (!have_profile) { + gst_caps_merge_structure (ret, tmp); + } else { + gst_structure_free (tmp); + } + } else if (strcmp (type->mime, "audio/g711-alaw") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/x-alaw", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/g711-mlaw") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/x-mulaw", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/vorbis") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/x-vorbis", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/flac") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/x-flac", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "framed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "audio/mpeg-L2") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("audio/mpeg", + "mpegversion", G_TYPE_INT, 1, + "layer", G_TYPE_INT, 2, + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_caps_merge_structure (ret, tmp); + } else { + GST_WARNING ("Unsupported mimetype '%s'", type->mime); + } + } + + return ret; +} + +static const gchar * +caps_to_mime (GstCaps * caps) +{ + GstStructure *s; + const gchar *name; + + s = gst_caps_get_structure (caps, 0); + if (!s) + return NULL; + + name = gst_structure_get_name (s); + + if (strcmp (name, "audio/mpeg") == 0) { + gint mpegversion; + + if (!gst_structure_get_int (s, "mpegversion", &mpegversion)) + return NULL; + + if (mpegversion == 1) { + gint layer; + + if (!gst_structure_get_int (s, "layer", &layer) || layer == 3) + return "audio/mpeg"; + else if (layer == 2) + return "audio/mpeg-L2"; + } else if (mpegversion == 2 || mpegversion == 4) { + return "audio/mp4a-latm"; + } + } else if (strcmp (name, "audio/AMR") == 0) { + return "audio/3gpp"; + } else if (strcmp (name, "audio/AMR-WB") == 0) { + return "audio/amr-wb"; + } else if (strcmp (name, "audio/x-alaw") == 0) { + return "audio/g711-alaw"; + } else if (strcmp (name, "audio/x-mulaw") == 0) { + return "audio/g711-mlaw"; + } else if (strcmp (name, "audio/x-vorbis") == 0) { + return "audio/vorbis"; + } + + return NULL; +} + +static GstCaps * +create_src_caps (const GstAmcCodecInfo * codec_info) +{ + GstCaps *ret; + + ret = gst_caps_new_simple ("audio/x-raw-int", + "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL); + + return ret; +} + +static void +gst_amc_audio_dec_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstAmcAudioDecClass *audiodec_class = GST_AMC_AUDIO_DEC_CLASS (g_class); + const GstAmcCodecInfo *codec_info; + GstPadTemplate *templ; + GstCaps *caps; + gchar *longname; + + codec_info = + g_type_get_qdata (G_TYPE_FROM_CLASS (g_class), gst_amc_codec_info_quark); + /* This happens for the base class and abstract subclasses */ + if (!codec_info) + return; + + audiodec_class->codec_info = codec_info; + + /* Add pad templates */ + caps = create_sink_caps (codec_info); + templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps); + gst_element_class_add_pad_template (element_class, templ); + gst_object_unref (templ); + + caps = create_src_caps (codec_info); + templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps); + gst_element_class_add_pad_template (element_class, templ); + gst_object_unref (templ); + + longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name); + gst_element_class_set_details_simple (element_class, + codec_info->name, + "Codec/Decoder/Audio", + longname, "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); + g_free (longname); +} + +static void +gst_amc_audio_dec_class_init (GstAmcAudioDecClass * klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstAudioDecoderClass *audiodec_class = GST_AUDIO_DECODER_CLASS (klass); + + gobject_class->finalize = gst_amc_audio_dec_finalize; + + element_class->change_state = + GST_DEBUG_FUNCPTR (gst_amc_audio_dec_change_state); + + audiodec_class->start = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_start); + audiodec_class->stop = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_stop); +#if 0 + audiodec_class->open = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_open); + audiodec_class->close = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_close); +#endif + audiodec_class->flush = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_flush); + audiodec_class->set_format = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_set_format); + audiodec_class->handle_frame = + GST_DEBUG_FUNCPTR (gst_amc_audio_dec_handle_frame); +} + +static void +gst_amc_audio_dec_init (GstAmcAudioDec * self, GstAmcAudioDecClass * klass) +{ + gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (self), TRUE); + gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (self), TRUE); + + self->drain_lock = g_mutex_new (); + self->drain_cond = g_cond_new (); +} + +static gboolean +gst_amc_audio_dec_open (GstAudioDecoder * decoder) +{ + GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (decoder); + GstAmcAudioDecClass *klass = GST_AMC_AUDIO_DEC_GET_CLASS (self); + + GST_DEBUG_OBJECT (self, "Opening decoder"); + + self->codec = gst_amc_codec_new (klass->codec_info->name); + if (!self->codec) + return FALSE; + self->started = FALSE; + self->flushing = TRUE; + + GST_DEBUG_OBJECT (self, "Opened decoder"); + + return TRUE; +} + +static gboolean +gst_amc_audio_dec_close (GstAudioDecoder * decoder) +{ + GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Closing decoder"); + + if (self->codec) + gst_amc_codec_free (self->codec); + self->codec = NULL; + + self->started = FALSE; + self->flushing = TRUE; + + GST_DEBUG_OBJECT (self, "Closed decoder"); + + return TRUE; +} + +static void +gst_amc_audio_dec_finalize (GObject * object) +{ + GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (object); + + g_mutex_free (self->drain_lock); + g_cond_free (self->drain_cond); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static GstStateChangeReturn +gst_amc_audio_dec_change_state (GstElement * element, GstStateChange transition) +{ + GstAmcAudioDec *self; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; + + g_return_val_if_fail (GST_IS_AMC_AUDIO_DEC (element), + GST_STATE_CHANGE_FAILURE); + self = GST_AMC_AUDIO_DEC (element); + + switch (transition) { + case GST_STATE_CHANGE_NULL_TO_READY: + break; + case GST_STATE_CHANGE_READY_TO_PAUSED: + self->downstream_flow_ret = GST_FLOW_OK; + self->draining = FALSE; + self->started = FALSE; + if (!gst_amc_audio_dec_open (GST_AUDIO_DECODER (self))) + return GST_STATE_CHANGE_FAILURE; + break; + case GST_STATE_CHANGE_PAUSED_TO_PLAYING: + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + self->flushing = TRUE; + gst_amc_codec_flush (self->codec); + g_mutex_lock (self->drain_lock); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + g_mutex_unlock (self->drain_lock); + break; + default: + break; + } + + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + switch (transition) { + case GST_STATE_CHANGE_PLAYING_TO_PAUSED: + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + if (!gst_amc_audio_dec_close (GST_AUDIO_DECODER (self))) + return GST_STATE_CHANGE_FAILURE; + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + self->started = FALSE; + break; + case GST_STATE_CHANGE_READY_TO_NULL: + break; + default: + break; + } + + return ret; +} + +static gboolean +gst_amc_audio_dec_set_src_caps (GstAmcAudioDec * self, GstAmcFormat * format) +{ + GstCaps *caps; + gint rate, channels; + guint32 channel_mask = 0; + + if (!gst_amc_format_get_int (format, "sample-rate", &rate) || + !gst_amc_format_get_int (format, "channel-count", &channels)) { + GST_ERROR_OBJECT (self, "Failed to get output format metadata"); + return FALSE; + } + + if (rate == 0 || channels == 0) { + GST_ERROR_OBJECT (self, "Rate or channels not set"); + return FALSE; + } + + /* Not always present */ + if (gst_amc_format_contains_key (format, "channel-mask")) + gst_amc_format_get_int (format, "channel-mask", (gint *) & channel_mask); + + if (self->positions) + g_free (self->positions); + self->positions = + gst_amc_audio_channel_mask_to_positions (channel_mask, channels); + + + caps = gst_caps_new_simple ("audio/x-raw-int", + "rate", G_TYPE_INT, rate, + "channels", G_TYPE_INT, channels, + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL); + + if (self->positions) + gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), + self->positions); + + self->channels = channels; + self->rate = rate; + gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (self), caps); + gst_caps_unref (caps); + + self->input_caps_changed = FALSE; + + return TRUE; +} + +static void +gst_amc_audio_dec_loop (GstAmcAudioDec * self) +{ + GstFlowReturn flow_ret = GST_FLOW_OK; + gboolean is_eos; + GstAmcBufferInfo buffer_info; + gint idx; + + GST_AUDIO_DECODER_STREAM_LOCK (self); + +retry: + /*if (self->input_caps_changed) { + idx = INFO_OUTPUT_FORMAT_CHANGED; + } else { */ + GST_DEBUG_OBJECT (self, "Waiting for available output buffer"); + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + /* Wait at most 100ms here, some codecs don't fail dequeueing if + * the codec is flushing, causing deadlocks during shutdown */ + idx = gst_amc_codec_dequeue_output_buffer (self->codec, &buffer_info, 100000); + GST_AUDIO_DECODER_STREAM_LOCK (self); + /*} */ + + if (idx < 0) { + if (self->flushing) + goto flushing; + + switch (idx) { + case INFO_OUTPUT_BUFFERS_CHANGED:{ + GST_DEBUG_OBJECT (self, "Output buffers have changed"); + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, + self->n_output_buffers); + self->output_buffers = + gst_amc_codec_get_output_buffers (self->codec, + &self->n_output_buffers); + if (!self->output_buffers) + goto get_output_buffers_error; + break; + } + case INFO_OUTPUT_FORMAT_CHANGED:{ + GstAmcFormat *format; + gchar *format_string; + + GST_DEBUG_OBJECT (self, "Output format has changed"); + + format = gst_amc_codec_get_output_format (self->codec); + if (!format) + goto format_error; + + format_string = gst_amc_format_to_string (format); + GST_DEBUG_OBJECT (self, "Got new output format: %s", format_string); + g_free (format_string); + + if (!gst_amc_audio_dec_set_src_caps (self, format)) { + gst_amc_format_free (format); + goto format_error; + } + gst_amc_format_free (format); + + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, + self->n_output_buffers); + self->output_buffers = + gst_amc_codec_get_output_buffers (self->codec, + &self->n_output_buffers); + if (!self->output_buffers) + goto get_output_buffers_error; + + goto retry; + break; + } + case INFO_TRY_AGAIN_LATER: + GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out"); + goto retry; + break; + case G_MININT: + GST_ERROR_OBJECT (self, "Failure dequeueing output buffer"); + goto dequeue_error; + break; + default: + g_assert_not_reached (); + break; + } + + goto retry; + } + + GST_DEBUG_OBJECT (self, + "Got output buffer at index %d: size %d time %" G_GINT64_FORMAT + " flags 0x%08x", idx, buffer_info.size, buffer_info.presentation_time_us, + buffer_info.flags); + + is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM); + self->n_buffers++; + + if (buffer_info.size > 0) { + GstAmcAudioDecClass *klass = GST_AMC_AUDIO_DEC_GET_CLASS (self); + GstBuffer *outbuf; + GstAmcBuffer *buf; + + /* This sometimes happens at EOS or if the input is not properly framed, + * let's handle it gracefully by allocating a new buffer for the current + * caps and filling it + */ + if (idx >= self->n_output_buffers) + goto invalid_buffer_index; + + if (strcmp (klass->codec_info->name, "OMX.google.mp3.decoder") == 0) { + /* Google's MP3 decoder outputs garbage in the first output buffer + * so we just drop it here */ + if (self->n_buffers == 1) { + GST_DEBUG_OBJECT (self, + "Skipping first buffer of Google MP3 decoder output"); + goto done; + } + } + + outbuf = gst_buffer_try_new_and_alloc (buffer_info.size); + if (!outbuf) + goto failed_allocate; + + buf = &self->output_buffers[idx]; + orc_memcpy (GST_BUFFER_DATA (outbuf), buf->data + buffer_info.offset, + buffer_info.size); + + /* FIXME: We should get one decoded input frame here for + * every buffer. If this is not the case somewhere, we will + * error out at some point and will need to add workarounds + */ + flow_ret = + gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (self), outbuf, 1); + } + +done: + if (!gst_amc_codec_release_output_buffer (self->codec, idx)) + goto failed_release; + + if (is_eos || flow_ret == GST_FLOW_UNEXPECTED) { + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + g_mutex_lock (self->drain_lock); + if (self->draining) { + GST_DEBUG_OBJECT (self, "Drained"); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + } else if (flow_ret == GST_FLOW_OK) { + GST_DEBUG_OBJECT (self, "Component signalled EOS"); + flow_ret = GST_FLOW_UNEXPECTED; + } + g_mutex_unlock (self->drain_lock); + GST_AUDIO_DECODER_STREAM_LOCK (self); + } else { + GST_DEBUG_OBJECT (self, "Finished frame: %s", gst_flow_get_name (flow_ret)); + } + + self->downstream_flow_ret = flow_ret; + + if (flow_ret != GST_FLOW_OK) + goto flow_error; + + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + + return; + +dequeue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to dequeue output buffer")); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } + +get_output_buffers_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to get output buffers")); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } + +format_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to handle format")); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } +failed_release: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to release output buffer index %d", idx)); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } +flushing: + { + GST_DEBUG_OBJECT (self, "Flushing -- stopping task"); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } + +flow_error: + { + if (flow_ret == GST_FLOW_UNEXPECTED) { + GST_DEBUG_OBJECT (self, "EOS"); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), + gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + } else + if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_UNEXPECTED) { + GST_ELEMENT_ERROR (self, STREAM, FAILED, + ("Internal data stream error."), ("stream stopped, reason %s", + gst_flow_get_name (flow_ret))); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), + gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + } + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } + +invalid_buffer_index: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Invalid input buffer index %d of %d", idx, self->n_input_buffers)); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } + +failed_allocate: + { + GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL), + ("Failed to allocate output buffer")); + gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + return; + } +} + +static gboolean +gst_amc_audio_dec_start (GstAudioDecoder * decoder) +{ + GstAmcAudioDec *self; + + self = GST_AMC_AUDIO_DEC (decoder); + self->last_upstream_ts = 0; + self->eos = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + self->started = FALSE; + self->flushing = TRUE; + + return TRUE; +} + +static gboolean +gst_amc_audio_dec_stop (GstAudioDecoder * decoder) +{ + GstAmcAudioDec *self; + + self = GST_AMC_AUDIO_DEC (decoder); + GST_DEBUG_OBJECT (self, "Stopping decoder"); + self->flushing = TRUE; + if (self->started) { + gst_amc_codec_flush (self->codec); + gst_amc_codec_stop (self->codec); + self->started = FALSE; + if (self->input_buffers) + gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers); + self->input_buffers = NULL; + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, self->n_output_buffers); + self->output_buffers = NULL; + } + gst_pad_stop_task (GST_AUDIO_DECODER_SRC_PAD (decoder)); + + g_free (self->positions); + self->positions = NULL; + + g_list_foreach (self->codec_datas, (GFunc) gst_buffer_unref, NULL); + g_list_free (self->codec_datas); + self->codec_datas = NULL; + + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + self->eos = FALSE; + g_mutex_lock (self->drain_lock); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + g_mutex_unlock (self->drain_lock); + gst_buffer_replace (&self->codec_data, NULL); + GST_DEBUG_OBJECT (self, "Stopped decoder"); + return TRUE; +} + +static gboolean +gst_amc_audio_dec_set_format (GstAudioDecoder * decoder, GstCaps * caps) +{ + GstAmcAudioDec *self; + GstStructure *s; + GstAmcFormat *format; + const gchar *mime; + gboolean is_format_change = FALSE; + gboolean needs_disable = FALSE; + gchar *format_string; + gint rate, channels; + + self = GST_AMC_AUDIO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Setting new caps %" GST_PTR_FORMAT, caps); + + /* Check if the caps change is a real format change or if only irrelevant + * parts of the caps have changed or nothing at all. + */ + is_format_change |= (!self->input_caps + || !gst_caps_is_equal (self->input_caps, caps)); + + needs_disable = self->started; + + /* If the component is not started and a real format change happens + * we have to restart the component. If no real format change + * happened we can just exit here. + */ + if (needs_disable && !is_format_change) { + /* Framerate or something minor changed */ + self->input_caps_changed = TRUE; + GST_DEBUG_OBJECT (self, + "Already running and caps did not change the format"); + return TRUE; + } + + if (needs_disable && is_format_change) { + gst_amc_audio_dec_drain (self); + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + gst_amc_audio_dec_stop (GST_AUDIO_DECODER (self)); + GST_AUDIO_DECODER_STREAM_LOCK (self); + gst_amc_audio_dec_close (GST_AUDIO_DECODER (self)); + if (!gst_amc_audio_dec_open (GST_AUDIO_DECODER (self))) { + GST_ERROR_OBJECT (self, "Failed to open codec again"); + return FALSE; + } + + if (!gst_amc_audio_dec_start (GST_AUDIO_DECODER (self))) { + GST_ERROR_OBJECT (self, "Failed to start codec again"); + } + } + /* srcpad task is not running at this point */ + + mime = caps_to_mime (caps); + if (!mime) { + GST_ERROR_OBJECT (self, "Failed to convert caps to mime"); + return FALSE; + } + + s = gst_caps_get_structure (caps, 0); + if (!gst_structure_get_int (s, "rate", &rate) || + !gst_structure_get_int (s, "channels", &channels)) { + GST_ERROR_OBJECT (self, "Failed to get rate/channels"); + return FALSE; + } + + format = gst_amc_format_new_audio (mime, rate, channels); + if (!format) { + GST_ERROR_OBJECT (self, "Failed to create audio format"); + return FALSE; + } + + /* FIXME: These buffers needs to be valid until the codec is stopped again */ + g_list_foreach (self->codec_datas, (GFunc) gst_buffer_unref, NULL); + g_list_free (self->codec_datas); + self->codec_datas = NULL; + if (gst_structure_has_field (s, "codec_data")) { + const GValue *h = gst_structure_get_value (s, "codec_data"); + GstBuffer *codec_data = gst_value_get_buffer (h); + + self->codec_datas = + g_list_prepend (self->codec_datas, gst_buffer_ref (codec_data)); + gst_amc_format_set_buffer (format, "csd-0", codec_data); + } else if (gst_structure_has_field (s, "streamheader")) { + const GValue *sh = gst_structure_get_value (s, "streamheader"); + gint nsheaders = gst_value_array_get_size (sh); + GstBuffer *buf; + const GValue *h; + gint i, j; + gchar *fname; + + for (i = 0, j = 0; i < nsheaders; i++) { + h = gst_value_array_get_value (sh, i); + buf = gst_value_get_buffer (h); + + if (strcmp (mime, "audio/vorbis") == 0) { + guint8 header_type = GST_BUFFER_DATA (buf)[0]; + + /* Only use the identification and setup packets */ + if (header_type != 0x01 && header_type != 0x05) + continue; + } + + fname = g_strdup_printf ("csd-%d", j); + self->codec_datas = + g_list_prepend (self->codec_datas, gst_buffer_ref (buf)); + gst_amc_format_set_buffer (format, fname, buf); + g_free (fname); + j++; + } + } + + format_string = gst_amc_format_to_string (format); + GST_DEBUG_OBJECT (self, "Configuring codec with format: %s", format_string); + g_free (format_string); + + self->n_buffers = 0; + if (!gst_amc_codec_configure (self->codec, format, 0)) { + GST_ERROR_OBJECT (self, "Failed to configure codec"); + return FALSE; + } + + gst_amc_format_free (format); + + if (!gst_amc_codec_start (self->codec)) { + GST_ERROR_OBJECT (self, "Failed to start codec"); + return FALSE; + } + + if (self->input_buffers) + gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers); + self->input_buffers = + gst_amc_codec_get_input_buffers (self->codec, &self->n_input_buffers); + if (!self->input_buffers) { + GST_ERROR_OBJECT (self, "Failed to get input buffers"); + return FALSE; + } + + self->started = TRUE; + self->input_caps_changed = TRUE; + + /* Start the srcpad loop again */ + self->flushing = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + gst_pad_start_task (GST_AUDIO_DECODER_SRC_PAD (self), + (GstTaskFunction) gst_amc_audio_dec_loop, decoder); + + return TRUE; +} + +static void +gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard) +{ + GstAmcAudioDec *self; + + self = GST_AMC_AUDIO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Resetting decoder"); + + if (!self->started) { + GST_DEBUG_OBJECT (self, "Codec not started yet"); + return; + } + + self->flushing = TRUE; + gst_amc_codec_flush (self->codec); + + /* Wait until the srcpad loop is finished, + * unlock GST_AUDIO_DECODER_STREAM_LOCK to prevent deadlocks + * caused by using this lock from inside the loop function */ + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + GST_PAD_STREAM_LOCK (GST_AUDIO_DECODER_SRC_PAD (self)); + GST_PAD_STREAM_UNLOCK (GST_AUDIO_DECODER_SRC_PAD (self)); + GST_AUDIO_DECODER_STREAM_LOCK (self); + self->flushing = FALSE; + + /* Start the srcpad loop again */ + self->last_upstream_ts = 0; + self->eos = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + gst_pad_start_task (GST_AUDIO_DECODER_SRC_PAD (self), + (GstTaskFunction) gst_amc_audio_dec_loop, decoder); + + GST_DEBUG_OBJECT (self, "Reset decoder"); +} + +static GstFlowReturn +gst_amc_audio_dec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf) +{ + GstAmcAudioDec *self; + gint idx; + GstAmcBuffer *buf; + GstAmcBufferInfo buffer_info; + guint offset = 0; + GstClockTime timestamp, duration, timestamp_offset = 0; + + self = GST_AMC_AUDIO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Handling frame"); + + /* Make sure to keep a reference to the input here, + * it can be unreffed from the other thread if + * finish_frame() is called */ + if (inbuf) + inbuf = gst_buffer_ref (inbuf); + + if (!self->started) { + GST_ERROR_OBJECT (self, "Codec not started yet"); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_NOT_NEGOTIATED; + } + + if (self->eos) { + GST_WARNING_OBJECT (self, "Got frame after EOS"); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_UNEXPECTED; + } + + if (self->flushing) + goto flushing; + + if (self->downstream_flow_ret != GST_FLOW_OK) + goto downstream_error; + + if (!inbuf) + return gst_amc_audio_dec_drain (self); + + timestamp = GST_BUFFER_TIMESTAMP (inbuf); + duration = GST_BUFFER_DURATION (inbuf); + + while (offset < GST_BUFFER_SIZE (inbuf)) { + /* Make sure to release the base class stream lock, otherwise + * _loop() can't call _finish_frame() and we might block forever + * because no input buffers are released */ + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + /* Wait at most 100ms here, some codecs don't fail dequeueing if + * the codec is flushing, causing deadlocks during shutdown */ + idx = gst_amc_codec_dequeue_input_buffer (self->codec, 100000); + GST_AUDIO_DECODER_STREAM_LOCK (self); + + if (idx < 0) { + if (self->flushing) + goto flushing; + switch (idx) { + case INFO_TRY_AGAIN_LATER: + GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out"); + continue; /* next try */ + break; + case G_MININT: + GST_ERROR_OBJECT (self, "Failed to dequeue input buffer"); + goto dequeue_error; + default: + g_assert_not_reached (); + break; + } + + continue; + } + + if (idx >= self->n_input_buffers) + goto invalid_buffer_index; + + if (self->flushing) + goto flushing; + + if (self->downstream_flow_ret != GST_FLOW_OK) { + memset (&buffer_info, 0, sizeof (buffer_info)); + gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info); + goto downstream_error; + } + + /* Now handle the frame */ + + /* Copy the buffer content in chunks of size as requested + * by the port */ + buf = &self->input_buffers[idx]; + + memset (&buffer_info, 0, sizeof (buffer_info)); + buffer_info.offset = 0; + buffer_info.size = MIN (GST_BUFFER_SIZE (inbuf) - offset, buf->size); + + orc_memcpy (buf->data, GST_BUFFER_DATA (inbuf) + offset, buffer_info.size); + + /* Interpolate timestamps if we're passing the buffer + * in multiple chunks */ + if (offset != 0 && duration != GST_CLOCK_TIME_NONE) { + timestamp_offset = + gst_util_uint64_scale (offset, duration, GST_BUFFER_SIZE (inbuf)); + } + + if (timestamp != GST_CLOCK_TIME_NONE) { + buffer_info.presentation_time_us = + gst_util_uint64_scale (timestamp + timestamp_offset, 1, GST_USECOND); + self->last_upstream_ts = timestamp + timestamp_offset; + } + if (duration != GST_CLOCK_TIME_NONE) + self->last_upstream_ts += duration; + + if (offset == 0) { + if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_DELTA_UNIT)) + buffer_info.flags |= BUFFER_FLAG_SYNC_FRAME; + } + + offset += buffer_info.size; + GST_DEBUG_OBJECT (self, + "Queueing buffer %d: size %d time %" G_GINT64_FORMAT " flags 0x%08x", + idx, buffer_info.size, buffer_info.presentation_time_us, + buffer_info.flags); + if (!gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) + goto queue_error; + } + + gst_buffer_unref (inbuf); + + return self->downstream_flow_ret; + +downstream_error: + { + GST_ERROR_OBJECT (self, "Downstream returned %s", + gst_flow_get_name (self->downstream_flow_ret)); + if (inbuf) + gst_buffer_unref (inbuf); + return self->downstream_flow_ret; + } +invalid_buffer_index: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Invalid input buffer index %d of %d", idx, self->n_input_buffers)); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_ERROR; + } +dequeue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to dequeue input buffer")); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_ERROR; + } +queue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to queue input buffer")); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_ERROR; + } +flushing: + { + GST_DEBUG_OBJECT (self, "Flushing -- returning WRONG_STATE"); + if (inbuf) + gst_buffer_unref (inbuf); + return GST_FLOW_WRONG_STATE; + } +} + +static GstFlowReturn +gst_amc_audio_dec_drain (GstAmcAudioDec * self) +{ + GstFlowReturn ret; + gint idx; + + GST_DEBUG_OBJECT (self, "Draining codec"); + if (!self->started) { + GST_DEBUG_OBJECT (self, "Codec not started yet"); + return GST_FLOW_OK; + } + + /* Don't send EOS buffer twice, this doesn't work */ + if (self->eos) { + GST_DEBUG_OBJECT (self, "Codec is EOS already"); + return GST_FLOW_OK; + } + + /* Make sure to release the base class stream lock, otherwise + * _loop() can't call _finish_frame() and we might block forever + * because no input buffers are released */ + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + /* Send an EOS buffer to the component and let the base + * class drop the EOS event. We will send it later when + * the EOS buffer arrives on the output port. + * Wait at most 0.5s here. */ + idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000); + GST_AUDIO_DECODER_STREAM_LOCK (self); + + if (idx >= 0 && idx < self->n_input_buffers) { + GstAmcBufferInfo buffer_info; + + GST_AUDIO_DECODER_STREAM_UNLOCK (self); + g_mutex_lock (self->drain_lock); + self->draining = TRUE; + + memset (&buffer_info, 0, sizeof (buffer_info)); + buffer_info.size = 0; + buffer_info.presentation_time_us = + gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND); + buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM; + + if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) { + GST_DEBUG_OBJECT (self, "Waiting until codec is drained"); + g_cond_wait (self->drain_cond, self->drain_lock); + GST_DEBUG_OBJECT (self, "Drained codec"); + ret = GST_FLOW_OK; + } else { + GST_ERROR_OBJECT (self, "Failed to queue input buffer"); + ret = GST_FLOW_ERROR; + } + + g_mutex_unlock (self->drain_lock); + GST_AUDIO_DECODER_STREAM_LOCK (self); + } else if (idx >= self->n_input_buffers) { + GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d", + idx, self->n_input_buffers); + ret = GST_FLOW_ERROR; + } else { + GST_ERROR_OBJECT (self, "Failed to acquire buffer for EOS: %d", idx); + ret = GST_FLOW_ERROR; + } + + return ret; +} diff --git a/sys/androidmedia/gstamcaudiodec.h b/sys/androidmedia/gstamcaudiodec.h new file mode 100644 index 00000000..5941a011 --- /dev/null +++ b/sys/androidmedia/gstamcaudiodec.h @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GST_AMC_AUDIO_DEC_H__ +#define __GST_AMC_AUDIO_DEC_H__ + +#include <gst/gst.h> +#include <gst/audio/multichannel.h> +#include <gst/audio/gstaudiodecoder.h> + +#include "gstamc.h" + +G_BEGIN_DECLS + +#define GST_TYPE_AMC_AUDIO_DEC \ + (gst_amc_audio_dec_get_type()) +#define GST_AMC_AUDIO_DEC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDec)) +#define GST_AMC_AUDIO_DEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDecClass)) +#define GST_AMC_AUDIO_DEC_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDecClass)) +#define GST_IS_AMC_AUDIO_DEC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AMC_AUDIO_DEC)) +#define GST_IS_AMC_AUDIO_DEC_CLASS(obj) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AMC_AUDIO_DEC)) + +typedef struct _GstAmcAudioDec GstAmcAudioDec; +typedef struct _GstAmcAudioDecClass GstAmcAudioDecClass; + +struct _GstAmcAudioDec +{ + GstAudioDecoder parent; + + /* < private > */ + GstAmcCodec *codec; + GstAmcBuffer *input_buffers, *output_buffers; + gsize n_input_buffers, n_output_buffers; + + GstCaps *input_caps; + GList *codec_datas; + gboolean input_caps_changed; + + /* Output format of the codec */ + gint channels, rate; + GstAudioChannelPosition *positions; + + GstBuffer *codec_data; + /* TRUE if the component is configured and saw + * the first buffer */ + gboolean started; + gboolean flushing; + + GstClockTime last_upstream_ts; + + /* Draining state */ + GMutex *drain_lock; + GCond *drain_cond; + /* TRUE if EOS buffers shouldn't be forwarded */ + gboolean draining; + + /* TRUE if upstream is EOS */ + gboolean eos; + + GstFlowReturn downstream_flow_ret; + + /* Output buffers counter */ + gint n_buffers; +}; + +struct _GstAmcAudioDecClass +{ + GstAudioDecoderClass parent_class; + + const GstAmcCodecInfo *codec_info; +}; + +GType gst_amc_audio_dec_get_type (void); + +G_END_DECLS + +#endif /* __GST_AMC_AUDIO_DEC_H__ */ diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c new file mode 100644 index 00000000..dc3d7b2d --- /dev/null +++ b/sys/androidmedia/gstamcvideodec.c @@ -0,0 +1,1656 @@ +/* + * Initially based on gst-omx/omx/gstomxvideodec.c + * + * Copyright (C) 2011, Hewlett-Packard Development Company, L.P. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd. + * + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gst/gst.h> +#include <string.h> + +#ifdef HAVE_ORC +#include <orc/orc.h> +#else +#define orc_memcpy memcpy +#endif + +#include "gstamcvideodec.h" +#include "gstamc-constants.h" + +GST_DEBUG_CATEGORY_STATIC (gst_amc_video_dec_debug_category); +#define GST_CAT_DEFAULT gst_amc_video_dec_debug_category + +typedef struct _BufferIdentification BufferIdentification; +struct _BufferIdentification +{ + guint64 timestamp; +}; + +static BufferIdentification * +buffer_identification_new (GstClockTime timestamp) +{ + BufferIdentification *id = g_slice_new (BufferIdentification); + + id->timestamp = timestamp; + + return id; +} + +static void +buffer_identification_free (BufferIdentification * id) +{ + g_slice_free (BufferIdentification, id); +} + +/* prototypes */ +static void gst_amc_video_dec_finalize (GObject * object); + +static GstStateChangeReturn +gst_amc_video_dec_change_state (GstElement * element, + GstStateChange transition); + +static gboolean gst_amc_video_dec_open (GstVideoDecoder * decoder); +static gboolean gst_amc_video_dec_close (GstVideoDecoder * decoder); +static gboolean gst_amc_video_dec_start (GstVideoDecoder * decoder); +static gboolean gst_amc_video_dec_stop (GstVideoDecoder * decoder); +static gboolean gst_amc_video_dec_set_format (GstVideoDecoder * decoder, + GstVideoCodecState * state); +static gboolean gst_amc_video_dec_reset (GstVideoDecoder * decoder, + gboolean hard); +static GstFlowReturn gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame); +static GstFlowReturn gst_amc_video_dec_finish (GstVideoDecoder * decoder); + +static GstFlowReturn gst_amc_video_dec_drain (GstAmcVideoDec * self); + +enum +{ + PROP_0 +}; + +/* class initialization */ + +#define DEBUG_INIT(bla) \ + GST_DEBUG_CATEGORY_INIT (gst_amc_video_dec_debug_category, "amcvideodec", 0, \ + "Android MediaCodec video decoder"); + +GST_BOILERPLATE_FULL (GstAmcVideoDec, gst_amc_video_dec, GstVideoDecoder, + GST_TYPE_VIDEO_DECODER, DEBUG_INIT); + +static GstCaps * +create_sink_caps (const GstAmcCodecInfo * codec_info) +{ + GstCaps *ret; + gint i; + + ret = gst_caps_new_empty (); + + for (i = 0; i < codec_info->n_supported_types; i++) { + const GstAmcCodecType *type = &codec_info->supported_types[i]; + + if (strcmp (type->mime, "video/mp4v-es") == 0) { + gint j; + GstStructure *tmp, *tmp2; + gboolean have_profile_level = FALSE; + + tmp = gst_structure_new ("video/mpeg", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, + 0, 1, G_MAXINT, 1, + "mpegversion", G_TYPE_INT, 4, + "systemstream", G_TYPE_BOOLEAN, FALSE, + "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + + if (type->n_profile_levels) { + for (j = type->n_profile_levels - 1; j >= 0; j--) { + const gchar *profile, *level; + gint k; + GValue va = { 0, }; + GValue v = { 0, }; + + g_value_init (&va, GST_TYPE_LIST); + g_value_init (&v, G_TYPE_STRING); + + profile = + gst_amc_mpeg4_profile_to_string (type->profile_levels[j].profile); + if (!profile) { + GST_ERROR ("Unable to map MPEG4 profile 0x%08x", + type->profile_levels[j].profile); + continue; + } + + for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) { + level = gst_amc_mpeg4_level_to_string (k); + if (!level) + continue; + + g_value_set_string (&v, level); + gst_value_list_append_value (&va, &v); + g_value_reset (&v); + } + + tmp2 = gst_structure_copy (tmp); + gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL); + gst_structure_set_value (tmp2, "level", &va); + g_value_unset (&va); + g_value_unset (&v); + gst_caps_merge_structure (ret, tmp2); + have_profile_level = TRUE; + } + } + + if (!have_profile_level) { + gst_caps_merge_structure (ret, tmp); + } else { + gst_structure_free (tmp); + } + } else if (strcmp (type->mime, "video/3gpp") == 0) { + gint j; + GstStructure *tmp, *tmp2; + gboolean have_profile_level = FALSE; + + tmp = gst_structure_new ("video/x-h263", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, + 0, 1, G_MAXINT, 1, + "parsed", G_TYPE_BOOLEAN, TRUE, + "variant", G_TYPE_STRING, "itu", NULL); + + if (type->n_profile_levels) { + for (j = type->n_profile_levels - 1; j >= 0; j--) { + gint profile, level; + gint k; + GValue va = { 0, }; + GValue v = { 0, }; + + g_value_init (&va, GST_TYPE_LIST); + g_value_init (&v, G_TYPE_UINT); + + profile = + gst_amc_h263_profile_to_gst_id (type->profile_levels[j].profile); + + if (profile == -1) { + GST_ERROR ("Unable to map h263 profile 0x%08x", + type->profile_levels[j].profile); + continue; + } + + for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) { + level = gst_amc_h263_level_to_gst_id (k); + if (level == -1) + continue; + + g_value_set_uint (&v, level); + gst_value_list_append_value (&va, &v); + g_value_reset (&v); + } + tmp2 = gst_structure_copy (tmp); + gst_structure_set (tmp2, "profile", G_TYPE_UINT, profile, NULL); + gst_structure_set_value (tmp2, "level", &va); + g_value_unset (&va); + g_value_unset (&v); + gst_caps_merge_structure (ret, tmp2); + have_profile_level = TRUE; + } + } + + if (!have_profile_level) { + gst_caps_merge_structure (ret, tmp); + } else { + gst_structure_free (tmp); + } + } else if (strcmp (type->mime, "video/avc") == 0) { + gint j; + GstStructure *tmp, *tmp2; + gboolean have_profile_level = FALSE; + + tmp = gst_structure_new ("video/x-h264", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, + 0, 1, G_MAXINT, 1, + "parsed", G_TYPE_BOOLEAN, TRUE, + "stream-format", G_TYPE_STRING, "byte-stream", + "alignment", G_TYPE_STRING, "au", NULL); + + if (type->n_profile_levels) { + for (j = type->n_profile_levels - 1; j >= 0; j--) { + const gchar *profile, *alternative = NULL, *level; + gint k; + GValue va = { 0, }; + GValue v = { 0, }; + + g_value_init (&va, GST_TYPE_LIST); + g_value_init (&v, G_TYPE_STRING); + + profile = + gst_amc_avc_profile_to_string (type->profile_levels[j].profile, + &alternative); + + if (!profile) { + GST_ERROR ("Unable to map H264 profile 0x%08x", + type->profile_levels[j].profile); + continue; + } + + for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) { + level = gst_amc_avc_level_to_string (k); + if (!level) + continue; + + g_value_set_string (&v, level); + gst_value_list_append_value (&va, &v); + g_value_reset (&v); + } + tmp2 = gst_structure_copy (tmp); + gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL); + gst_structure_set_value (tmp2, "level", &va); + if (!alternative) + g_value_unset (&va); + g_value_unset (&v); + gst_caps_merge_structure (ret, tmp2); + + if (alternative) { + tmp2 = gst_structure_copy (tmp); + gst_structure_set (tmp2, "profile", G_TYPE_STRING, alternative, + NULL); + gst_structure_set_value (tmp2, "level", &va); + g_value_unset (&va); + gst_caps_merge_structure (ret, tmp2); + } + have_profile_level = TRUE; + } + } + + if (!have_profile_level) { + gst_caps_merge_structure (ret, tmp); + } else { + gst_structure_free (tmp); + } + } else if (strcmp (type->mime, "video/x-vnd.on2.vp8") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("video/x-vp8", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL); + + gst_caps_merge_structure (ret, tmp); + } else if (strcmp (type->mime, "video/mpeg2") == 0) { + GstStructure *tmp; + + tmp = gst_structure_new ("video/mpeg", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, + 0, 1, G_MAXINT, 1, + "mpegversion", GST_TYPE_INT_RANGE, 1, 2, + "systemstream", G_TYPE_BOOLEAN, FALSE, + "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + + gst_caps_merge_structure (ret, tmp); + } else { + GST_WARNING ("Unsupported mimetype '%s'", type->mime); + } + } + + return ret; +} + +static const gchar * +caps_to_mime (GstCaps * caps) +{ + GstStructure *s; + const gchar *name; + + s = gst_caps_get_structure (caps, 0); + if (!s) + return NULL; + + name = gst_structure_get_name (s); + + if (strcmp (name, "video/mpeg") == 0) { + gint mpegversion; + + if (!gst_structure_get_int (s, "mpegversion", &mpegversion)) + return NULL; + + if (mpegversion == 4) + return "video/mp4v-es"; + else if (mpegversion == 1 || mpegversion == 2) + return "video/mpeg2"; + } else if (strcmp (name, "video/x-h263") == 0) { + return "video/3gpp"; + } else if (strcmp (name, "video/x-h264") == 0) { + return "video/avc"; + } else if (strcmp (name, "video/x-vp8") == 0) { + return "video/x-vnd.on2.vp8"; + } + + return NULL; +} + +static GstCaps * +create_src_caps (const GstAmcCodecInfo * codec_info) +{ + GstCaps *ret; + gint i; + + ret = gst_caps_new_empty (); + + for (i = 0; i < codec_info->n_supported_types; i++) { + const GstAmcCodecType *type = &codec_info->supported_types[i]; + gint j; + + for (j = 0; j < type->n_color_formats; j++) { + GstVideoFormat format; + GstCaps *tmp; + + format = gst_amc_color_format_to_video_format (type->color_formats[j]); + if (format == GST_VIDEO_FORMAT_UNKNOWN) { + GST_WARNING ("Unknown color format 0x%08x", type->color_formats[j]); + continue; + } + tmp = gst_video_format_new_template_caps (format); + gst_caps_merge (ret, tmp); + } + } + + return ret; +} + +static void +gst_amc_video_dec_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstAmcVideoDecClass *videodec_class = GST_AMC_VIDEO_DEC_CLASS (g_class); + const GstAmcCodecInfo *codec_info; + GstPadTemplate *templ; + GstCaps *caps; + gchar *longname; + + codec_info = + g_type_get_qdata (G_TYPE_FROM_CLASS (g_class), gst_amc_codec_info_quark); + /* This happens for the base class and abstract subclasses */ + if (!codec_info) + return; + + videodec_class->codec_info = codec_info; + + /* Add pad templates */ + caps = create_sink_caps (codec_info); + templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps); + gst_element_class_add_pad_template (element_class, templ); + gst_object_unref (templ); + + caps = create_src_caps (codec_info); + templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps); + gst_element_class_add_pad_template (element_class, templ); + gst_object_unref (templ); + + longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name); + gst_element_class_set_details_simple (element_class, + codec_info->name, + "Codec/Decoder/Video", + longname, "Sebastian Dröge <sebastian.droege@collabora.co.uk>"); + g_free (longname); +} + +static void +gst_amc_video_dec_class_init (GstAmcVideoDecClass * klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstVideoDecoderClass *videodec_class = GST_VIDEO_DECODER_CLASS (klass); + + gobject_class->finalize = gst_amc_video_dec_finalize; + + element_class->change_state = + GST_DEBUG_FUNCPTR (gst_amc_video_dec_change_state); + + videodec_class->start = GST_DEBUG_FUNCPTR (gst_amc_video_dec_start); + videodec_class->stop = GST_DEBUG_FUNCPTR (gst_amc_video_dec_stop); + videodec_class->open = GST_DEBUG_FUNCPTR (gst_amc_video_dec_open); + videodec_class->close = GST_DEBUG_FUNCPTR (gst_amc_video_dec_close); + videodec_class->reset = GST_DEBUG_FUNCPTR (gst_amc_video_dec_reset); + videodec_class->set_format = GST_DEBUG_FUNCPTR (gst_amc_video_dec_set_format); + videodec_class->handle_frame = + GST_DEBUG_FUNCPTR (gst_amc_video_dec_handle_frame); + videodec_class->finish = GST_DEBUG_FUNCPTR (gst_amc_video_dec_finish); +} + +static void +gst_amc_video_dec_init (GstAmcVideoDec * self, GstAmcVideoDecClass * klass) +{ + gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE); + + self->drain_lock = g_mutex_new (); + self->drain_cond = g_cond_new (); +} + +static gboolean +gst_amc_video_dec_open (GstVideoDecoder * decoder) +{ + GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (decoder); + GstAmcVideoDecClass *klass = GST_AMC_VIDEO_DEC_GET_CLASS (self); + + GST_DEBUG_OBJECT (self, "Opening decoder"); + + self->codec = gst_amc_codec_new (klass->codec_info->name); + if (!self->codec) + return FALSE; + self->started = FALSE; + self->flushing = TRUE; + + GST_DEBUG_OBJECT (self, "Opened decoder"); + + return TRUE; +} + +static gboolean +gst_amc_video_dec_close (GstVideoDecoder * decoder) +{ + GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Closing decoder"); + + if (self->codec) + gst_amc_codec_free (self->codec); + self->codec = NULL; + + self->started = FALSE; + self->flushing = TRUE; + + GST_DEBUG_OBJECT (self, "Closed decoder"); + + return TRUE; +} + +static void +gst_amc_video_dec_finalize (GObject * object) +{ + GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (object); + + g_mutex_free (self->drain_lock); + g_cond_free (self->drain_cond); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +static GstStateChangeReturn +gst_amc_video_dec_change_state (GstElement * element, GstStateChange transition) +{ + GstAmcVideoDec *self; + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; + + g_return_val_if_fail (GST_IS_AMC_VIDEO_DEC (element), + GST_STATE_CHANGE_FAILURE); + self = GST_AMC_VIDEO_DEC (element); + + switch (transition) { + case GST_STATE_CHANGE_NULL_TO_READY: + break; + case GST_STATE_CHANGE_READY_TO_PAUSED: + self->downstream_flow_ret = GST_FLOW_OK; + self->draining = FALSE; + self->started = FALSE; + break; + case GST_STATE_CHANGE_PAUSED_TO_PLAYING: + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + self->flushing = TRUE; + gst_amc_codec_flush (self->codec); + g_mutex_lock (self->drain_lock); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + g_mutex_unlock (self->drain_lock); + break; + default: + break; + } + + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + + if (ret == GST_STATE_CHANGE_FAILURE) + return ret; + + switch (transition) { + case GST_STATE_CHANGE_PLAYING_TO_PAUSED: + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + self->started = FALSE; + break; + case GST_STATE_CHANGE_READY_TO_NULL: + break; + default: + break; + } + + return ret; +} + +#define MAX_FRAME_DIST_TIME (5 * GST_SECOND) +#define MAX_FRAME_DIST_FRAMES (100) + +static GstVideoCodecFrame * +_find_nearest_frame (GstAmcVideoDec * self, GstClockTime reference_timestamp) +{ + GList *l, *best_l = NULL; + GList *finish_frames = NULL; + GstVideoCodecFrame *best = NULL; + guint64 best_timestamp = 0; + guint64 best_diff = G_MAXUINT64; + BufferIdentification *best_id = NULL; + GList *frames; + + frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self)); + + for (l = frames; l; l = l->next) { + GstVideoCodecFrame *tmp = l->data; + BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); + guint64 timestamp, diff; + + /* This happens for frames that were just added but + * which were not passed to the component yet. Ignore + * them here! + */ + if (!id) + continue; + + timestamp = id->timestamp; + + if (timestamp > reference_timestamp) + diff = timestamp - reference_timestamp; + else + diff = reference_timestamp - timestamp; + + if (best == NULL || diff < best_diff) { + best = tmp; + best_timestamp = timestamp; + best_diff = diff; + best_l = l; + best_id = id; + + /* For frames without timestamp we simply take the first frame */ + if ((reference_timestamp == 0 && timestamp == 0) || diff == 0) + break; + } + } + + if (best_id) { + for (l = frames; l && l != best_l; l = l->next) { + GstVideoCodecFrame *tmp = l->data; + BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp); + guint64 diff_time, diff_frames; + + if (id->timestamp > best_timestamp) + break; + + if (id->timestamp == 0 || best_timestamp == 0) + diff_time = 0; + else + diff_time = best_timestamp - id->timestamp; + diff_frames = best->system_frame_number - tmp->system_frame_number; + + if (diff_time > MAX_FRAME_DIST_TIME + || diff_frames > MAX_FRAME_DIST_FRAMES) { + finish_frames = g_list_prepend (finish_frames, tmp); + } + } + } + + if (finish_frames) { + g_warning ("%s: Too old frames, bug in decoder -- please file a bug", + GST_ELEMENT_NAME (self)); + for (l = finish_frames; l; l = l->next) { + gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), l->data); + } + } + + if (best) + gst_video_codec_frame_ref (best); + + g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL); + g_list_free (frames); + + return best; +} + +static gboolean +gst_amc_video_dec_set_src_caps (GstAmcVideoDec * self, GstAmcFormat * format) +{ + GstVideoCodecState *output_state; + gint color_format, width, height; + gint stride, slice_height; + gint crop_left, crop_right; + gint crop_top, crop_bottom; + GstVideoFormat gst_format; + + if (!gst_amc_format_get_int (format, "color-format", &color_format) || + !gst_amc_format_get_int (format, "width", &width) || + !gst_amc_format_get_int (format, "height", &height)) { + GST_ERROR_OBJECT (self, "Failed to get output format metadata"); + return FALSE; + } + + if (!gst_amc_format_get_int (format, "stride", &stride) || + !gst_amc_format_get_int (format, "slice-height", &slice_height)) { + GST_ERROR_OBJECT (self, "Failed to get stride and slice-height"); + return FALSE; + } + + if (!gst_amc_format_get_int (format, "crop-left", &crop_left) || + !gst_amc_format_get_int (format, "crop-right", &crop_right) || + !gst_amc_format_get_int (format, "crop-top", &crop_top) || + !gst_amc_format_get_int (format, "crop-bottom", &crop_bottom)) { + GST_ERROR_OBJECT (self, "Failed to get crop rectangle"); + return FALSE; + } + + if (width == 0 || height == 0) { + GST_ERROR_OBJECT (self, "Height or width not set"); + return FALSE; + } + + if (crop_bottom) + height = height - (height - crop_bottom - 1); + if (crop_top) + height = height - crop_top; + + if (crop_right) + width = width - (width - crop_right - 1); + if (crop_left) + width = width - crop_left; + + gst_format = gst_amc_color_format_to_video_format (color_format); + if (gst_format == GST_VIDEO_FORMAT_UNKNOWN) { + GST_ERROR_OBJECT (self, "Unknown color format 0x%08x", color_format); + return FALSE; + } + + output_state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), + gst_format, width, height, self->input_state); + + self->format = gst_format; + self->color_format = color_format; + self->height = height; + self->width = width; + self->stride = stride; + self->slice_height = slice_height; + self->crop_left = crop_left; + self->crop_right = crop_right; + self->crop_top = crop_top; + self->crop_bottom = crop_bottom; + + gst_video_codec_state_unref (output_state); + self->input_state_changed = FALSE; + + return TRUE; +} + +/* The weird handling of cropping, alignment and everything is taken from + * platform/frameworks/media/libstagefright/colorconversion/ColorConversion.cpp + */ +static gboolean +gst_amc_video_dec_fill_buffer (GstAmcVideoDec * self, gint idx, + const GstAmcBufferInfo * buffer_info, GstBuffer * outbuf) +{ + GstAmcVideoDecClass *klass = GST_AMC_VIDEO_DEC_GET_CLASS (self); + GstAmcBuffer *buf = &self->output_buffers[idx]; + GstVideoCodecState *state = + gst_video_decoder_get_output_state (GST_VIDEO_DECODER (self)); + GstVideoInfo *info = &state->info; + gboolean ret = FALSE; + + if (idx >= self->n_output_buffers) { + GST_ERROR_OBJECT (self, "Invalid output buffer index %d of %d", + idx, self->n_output_buffers); + goto done; + } + + /* Same video format */ + if (buffer_info->size == GST_BUFFER_SIZE (outbuf)) { + GST_DEBUG_OBJECT (self, "Buffer sizes equal, doing fast copy"); + orc_memcpy (GST_BUFFER_DATA (outbuf), buf->data + buffer_info->offset, + buffer_info->size); + ret = TRUE; + goto done; + } + + GST_DEBUG_OBJECT (self, + "Sizes not equal (%d vs %d), doing slow line-by-line copying", + buffer_info->size, GST_BUFFER_SIZE (outbuf)); + + /* Different video format, try to convert */ + switch (self->color_format) { + case COLOR_FormatYUV420Planar:{ + gint i, j, height; + guint8 *src, *dest; + gint stride, slice_height; + gint src_stride, dest_stride; + gint row_length; + + stride = self->stride; + if (stride == 0) { + GST_ERROR_OBJECT (self, "Stride not set"); + goto done; + } + + slice_height = self->slice_height; + if (slice_height == 0) { + /* NVidia Tegra 3 on Nexus 7 does not set this */ + if (g_str_has_prefix (klass->codec_info->name, "OMX.Nvidia.")) { + slice_height = GST_ROUND_UP_32 (self->height); + } else { + GST_ERROR_OBJECT (self, "Slice height not set"); + goto done; + } + } + + for (i = 0; i < 3; i++) { + if (i == 0) { + src_stride = stride; + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } else { + src_stride = (stride + 1) / 2; + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } + + src = buf->data + buffer_info->offset; + + if (i == 0) { + src += self->crop_top * stride; + src += self->crop_left; + row_length = self->width; + } else if (i > 0) { + src += slice_height * stride; + src += self->crop_top * src_stride; + src += self->crop_left / 2; + row_length = (self->width + 1) / 2; + } + if (i == 2) + src += ((slice_height + 1) / 2) * ((stride + 1) / 2); + + dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i); + height = GST_VIDEO_INFO_COMP_HEIGHT (info, i); + + for (j = 0; j < height; j++) { + orc_memcpy (dest, src, row_length); + src += src_stride; + dest += dest_stride; + } + } + ret = TRUE; + break; + } + case COLOR_TI_FormatYUV420PackedSemiPlanar: + case COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced:{ + gint i, j, height; + guint8 *src, *dest; + gint src_stride, dest_stride; + gint row_length; + + /* This should always be set */ + if (self->stride == 0 || self->slice_height == 0) { + GST_ERROR_OBJECT (self, "Stride or slice height not set"); + goto done; + } + + /* FIXME: This does not work for odd widths or heights + * but might as well be a bug in the codec */ + for (i = 0; i < 2; i++) { + if (i == 0) { + src_stride = self->stride; + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } else { + src_stride = GST_ROUND_UP_2 (self->stride); + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } + + src = buf->data + buffer_info->offset; + if (i == 0) { + row_length = self->width; + } else if (i == 1) { + src += (self->slice_height - self->crop_top / 2) * self->stride; + row_length = GST_ROUND_UP_2 (self->width); + } + + dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i); + height = GST_VIDEO_INFO_COMP_HEIGHT (info, i); + + for (j = 0; j < height; j++) { + orc_memcpy (dest, src, row_length); + src += src_stride; + dest += dest_stride; + } + } + ret = TRUE; + break; + } + case COLOR_QCOM_FormatYUV420SemiPlanar: + case COLOR_FormatYUV420SemiPlanar:{ + gint i, j, height; + guint8 *src, *dest; + gint src_stride, dest_stride; + gint row_length; + + /* This should always be set */ + if (self->stride == 0 || self->slice_height == 0) { + GST_ERROR_OBJECT (self, "Stride or slice height not set"); + goto done; + } + + /* FIXME: This is untested! */ + + for (i = 0; i < 2; i++) { + if (i == 0) { + src_stride = self->stride; + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } else { + src_stride = self->stride; + dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i); + } + + src = buf->data + buffer_info->offset; + if (i == 0) { + src += self->crop_top * self->stride; + src += self->crop_left; + row_length = self->width; + } else if (i == 1) { + src += self->slice_height * self->stride; + src += self->crop_top * self->stride; + src += self->crop_left; + row_length = self->width; + } + + dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i); + height = GST_VIDEO_INFO_COMP_HEIGHT (info, i); + + for (j = 0; j < height; j++) { + orc_memcpy (dest, src, row_length); + src += src_stride; + dest += dest_stride; + } + } + ret = TRUE; + break; + } + default: + GST_ERROR_OBJECT (self, "Unsupported color format %d", + self->color_format); + goto done; + break; + } + +done: + gst_video_codec_state_unref (state); + return ret; +} + +static void +gst_amc_video_dec_loop (GstAmcVideoDec * self) +{ + GstVideoCodecFrame *frame; + GstFlowReturn flow_ret = GST_FLOW_OK; + GstClockTimeDiff deadline; + gboolean is_eos; + GstAmcBufferInfo buffer_info; + gint idx; + + GST_VIDEO_DECODER_STREAM_LOCK (self); + +retry: + /*if (self->input_state_changed) { + idx = INFO_OUTPUT_FORMAT_CHANGED; + } else { */ + GST_DEBUG_OBJECT (self, "Waiting for available output buffer"); + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + /* Wait at most 100ms here, some codecs don't fail dequeueing if + * the codec is flushing, causing deadlocks during shutdown */ + idx = gst_amc_codec_dequeue_output_buffer (self->codec, &buffer_info, 100000); + GST_VIDEO_DECODER_STREAM_LOCK (self); + /*} */ + + if (idx < 0) { + if (self->flushing || self->downstream_flow_ret == GST_FLOW_WRONG_STATE) + goto flushing; + + switch (idx) { + case INFO_OUTPUT_BUFFERS_CHANGED:{ + GST_DEBUG_OBJECT (self, "Output buffers have changed"); + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, + self->n_output_buffers); + self->output_buffers = + gst_amc_codec_get_output_buffers (self->codec, + &self->n_output_buffers); + if (!self->output_buffers) + goto get_output_buffers_error; + break; + } + case INFO_OUTPUT_FORMAT_CHANGED:{ + GstAmcFormat *format; + gchar *format_string; + + GST_DEBUG_OBJECT (self, "Output format has changed"); + + format = gst_amc_codec_get_output_format (self->codec); + if (!format) + goto format_error; + + format_string = gst_amc_format_to_string (format); + GST_DEBUG_OBJECT (self, "Got new output format: %s", format_string); + g_free (format_string); + + if (!gst_amc_video_dec_set_src_caps (self, format)) { + gst_amc_format_free (format); + goto format_error; + } + gst_amc_format_free (format); + + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, + self->n_output_buffers); + self->output_buffers = + gst_amc_codec_get_output_buffers (self->codec, + &self->n_output_buffers); + if (!self->output_buffers) + goto get_output_buffers_error; + + goto retry; + break; + } + case INFO_TRY_AGAIN_LATER: + GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out"); + goto retry; + break; + case G_MININT: + GST_ERROR_OBJECT (self, "Failure dequeueing input buffer"); + goto dequeue_error; + break; + default: + g_assert_not_reached (); + break; + } + + goto retry; + } + + GST_DEBUG_OBJECT (self, + "Got output buffer at index %d: size %d time %" G_GINT64_FORMAT + " flags 0x%08x", idx, buffer_info.size, buffer_info.presentation_time_us, + buffer_info.flags); + + frame = + _find_nearest_frame (self, + gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, 1)); + + is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM); + + if (frame + && (deadline = + gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (self), + frame)) < 0) { + GST_WARNING_OBJECT (self, + "Frame is too late, dropping (deadline %" GST_TIME_FORMAT ")", + GST_TIME_ARGS (-deadline)); + flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame); + } else if (!frame && buffer_info.size > 0) { + GstBuffer *outbuf; + + /* This sometimes happens at EOS or if the input is not properly framed, + * let's handle it gracefully by allocating a new buffer for the current + * caps and filling it + */ + GST_ERROR_OBJECT (self, "No corresponding frame found"); + + outbuf = gst_video_decoder_alloc_output_buffer (GST_VIDEO_DECODER (self)); + + if (!gst_amc_video_dec_fill_buffer (self, idx, &buffer_info, outbuf)) { + gst_buffer_unref (outbuf); + if (!gst_amc_codec_release_output_buffer (self->codec, idx)) + GST_ERROR_OBJECT (self, "Failed to release output buffer index %d", + idx); + goto invalid_buffer; + } + + GST_BUFFER_TIMESTAMP (outbuf) = + gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, + 1); + flow_ret = gst_pad_push (GST_VIDEO_DECODER_SRC_PAD (self), outbuf); + } else if (buffer_info.size > 0) { + if ((flow_ret = gst_video_decoder_alloc_output_frame (GST_VIDEO_DECODER + (self), frame)) != GST_FLOW_OK) { + GST_ERROR_OBJECT (self, "Failed to allocate buffer"); + goto flow_error; + } + + if (!gst_amc_video_dec_fill_buffer (self, idx, &buffer_info, + frame->output_buffer)) { + gst_buffer_replace (&frame->output_buffer, NULL); + gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame); + if (!gst_amc_codec_release_output_buffer (self->codec, idx)) + GST_ERROR_OBJECT (self, "Failed to release output buffer index %d", + idx); + goto invalid_buffer; + } + + flow_ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (self), frame); + } else if (frame != NULL) { + flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame); + } + + if (!gst_amc_codec_release_output_buffer (self->codec, idx)) + goto failed_release; + + if (is_eos || flow_ret == GST_FLOW_UNEXPECTED) { + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + g_mutex_lock (self->drain_lock); + if (self->draining) { + GST_DEBUG_OBJECT (self, "Drained"); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + } else if (flow_ret == GST_FLOW_OK) { + GST_DEBUG_OBJECT (self, "Component signalled EOS"); + flow_ret = GST_FLOW_UNEXPECTED; + } + g_mutex_unlock (self->drain_lock); + GST_VIDEO_DECODER_STREAM_LOCK (self); + } else { + GST_DEBUG_OBJECT (self, "Finished frame: %s", gst_flow_get_name (flow_ret)); + } + + self->downstream_flow_ret = flow_ret; + + if (flow_ret != GST_FLOW_OK) + goto flow_error; + + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + + return; + +dequeue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to dequeue output buffer")); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } + +get_output_buffers_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to get output buffers")); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } + +format_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to handle format")); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } +failed_release: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to release output buffer index %d", idx)); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_ERROR; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } +flushing: + { + GST_DEBUG_OBJECT (self, "Flushing -- stopping task"); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } + +flow_error: + { + if (flow_ret == GST_FLOW_UNEXPECTED) { + GST_DEBUG_OBJECT (self, "EOS"); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), + gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + } else + if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_UNEXPECTED) { + GST_ELEMENT_ERROR (self, STREAM, FAILED, + ("Internal data stream error."), ("stream stopped, reason %s", + gst_flow_get_name (flow_ret))); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), + gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + } + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } + +invalid_buffer: + { + GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL), + ("Invalid sized input buffer")); + gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ()); + gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self)); + self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED; + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + return; + } +} + +static gboolean +gst_amc_video_dec_start (GstVideoDecoder * decoder) +{ + GstAmcVideoDec *self; + + self = GST_AMC_VIDEO_DEC (decoder); + self->last_upstream_ts = 0; + self->eos = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + self->started = FALSE; + self->flushing = TRUE; + + return TRUE; +} + +static gboolean +gst_amc_video_dec_stop (GstVideoDecoder * decoder) +{ + GstAmcVideoDec *self; + + self = GST_AMC_VIDEO_DEC (decoder); + GST_DEBUG_OBJECT (self, "Stopping decoder"); + self->flushing = TRUE; + if (self->started) { + gst_amc_codec_flush (self->codec); + gst_amc_codec_stop (self->codec); + self->started = FALSE; + if (self->input_buffers) + gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers); + self->input_buffers = NULL; + if (self->output_buffers) + gst_amc_codec_free_buffers (self->output_buffers, self->n_output_buffers); + self->output_buffers = NULL; + } + gst_pad_stop_task (GST_VIDEO_DECODER_SRC_PAD (decoder)); + + self->downstream_flow_ret = GST_FLOW_WRONG_STATE; + self->eos = FALSE; + g_mutex_lock (self->drain_lock); + self->draining = FALSE; + g_cond_broadcast (self->drain_cond); + g_mutex_unlock (self->drain_lock); + gst_buffer_replace (&self->codec_data, NULL); + GST_DEBUG_OBJECT (self, "Stopped decoder"); + return TRUE; +} + +static gboolean +gst_amc_video_dec_set_format (GstVideoDecoder * decoder, + GstVideoCodecState * state) +{ + GstAmcVideoDec *self; + GstAmcFormat *format; + const gchar *mime; + gboolean is_format_change = FALSE; + gboolean needs_disable = FALSE; + gchar *format_string; + + self = GST_AMC_VIDEO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Setting new caps %" GST_PTR_FORMAT, state->caps); + + /* Check if the caps change is a real format change or if only irrelevant + * parts of the caps have changed or nothing at all. + */ + is_format_change |= self->width != state->info.width; + is_format_change |= self->height != state->info.height; + is_format_change |= (self->codec_data != state->codec_data); + + needs_disable = self->started; + + /* If the component is not started and a real format change happens + * we have to restart the component. If no real format change + * happened we can just exit here. + */ + if (needs_disable && !is_format_change) { + /* Framerate or something minor changed */ + self->input_state_changed = TRUE; + GST_DEBUG_OBJECT (self, + "Already running and caps did not change the format"); + return TRUE; + } + + if (needs_disable && is_format_change) { + gst_amc_video_dec_drain (self); + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + gst_amc_video_dec_stop (GST_VIDEO_DECODER (self)); + GST_VIDEO_DECODER_STREAM_LOCK (self); + gst_amc_video_dec_close (GST_VIDEO_DECODER (self)); + if (!gst_amc_video_dec_open (GST_VIDEO_DECODER (self))) { + GST_ERROR_OBJECT (self, "Failed to open codec again"); + return FALSE; + } + + if (!gst_amc_video_dec_start (GST_VIDEO_DECODER (self))) { + GST_ERROR_OBJECT (self, "Failed to start codec again"); + } + } + /* srcpad task is not running at this point */ + + gst_buffer_replace (&self->codec_data, state->codec_data); + + mime = caps_to_mime (state->caps); + if (!mime) { + GST_ERROR_OBJECT (self, "Failed to convert caps to mime"); + return FALSE; + } + + format = + gst_amc_format_new_video (mime, state->info.width, state->info.height); + if (!format) { + GST_ERROR_OBJECT (self, "Failed to create video format"); + return FALSE; + } + + /* FIXME: This buffer needs to be valid until the codec is stopped again */ + if (self->codec_data) + gst_amc_format_set_buffer (format, "csd-0", self->codec_data); + + format_string = gst_amc_format_to_string (format); + GST_DEBUG_OBJECT (self, "Configuring codec with format: %s", format_string); + g_free (format_string); + + if (!gst_amc_codec_configure (self->codec, format, 0)) { + GST_ERROR_OBJECT (self, "Failed to configure codec"); + return FALSE; + } + + gst_amc_format_free (format); + + if (!gst_amc_codec_start (self->codec)) { + GST_ERROR_OBJECT (self, "Failed to start codec"); + return FALSE; + } + + if (self->input_buffers) + gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers); + self->input_buffers = + gst_amc_codec_get_input_buffers (self->codec, &self->n_input_buffers); + if (!self->input_buffers) { + GST_ERROR_OBJECT (self, "Failed to get input buffers"); + return FALSE; + } + + self->started = TRUE; + self->input_state_changed = TRUE; + + /* Start the srcpad loop again */ + self->flushing = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), + (GstTaskFunction) gst_amc_video_dec_loop, decoder); + + return TRUE; +} + +static gboolean +gst_amc_video_dec_reset (GstVideoDecoder * decoder, gboolean hard) +{ + GstAmcVideoDec *self; + + self = GST_AMC_VIDEO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Resetting decoder"); + + if (!self->started) { + GST_DEBUG_OBJECT (self, "Codec not started yet"); + return TRUE; + } + + self->flushing = TRUE; + gst_amc_codec_flush (self->codec); + + /* Wait until the srcpad loop is finished, + * unlock GST_VIDEO_DECODER_STREAM_LOCK to prevent deadlocks + * caused by using this lock from inside the loop function */ + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + GST_PAD_STREAM_LOCK (GST_VIDEO_DECODER_SRC_PAD (self)); + GST_PAD_STREAM_UNLOCK (GST_VIDEO_DECODER_SRC_PAD (self)); + GST_VIDEO_DECODER_STREAM_LOCK (self); + self->flushing = FALSE; + + /* Start the srcpad loop again */ + self->last_upstream_ts = 0; + self->eos = FALSE; + self->downstream_flow_ret = GST_FLOW_OK; + gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self), + (GstTaskFunction) gst_amc_video_dec_loop, decoder); + + GST_DEBUG_OBJECT (self, "Reset decoder"); + + return TRUE; +} + +static GstFlowReturn +gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder, + GstVideoCodecFrame * frame) +{ + GstAmcVideoDec *self; + gint idx; + GstAmcBuffer *buf; + GstAmcBufferInfo buffer_info; + guint offset = 0; + GstClockTime timestamp, duration, timestamp_offset = 0; + + self = GST_AMC_VIDEO_DEC (decoder); + + GST_DEBUG_OBJECT (self, "Handling frame"); + + if (!self->started) { + GST_ERROR_OBJECT (self, "Codec not started yet"); + gst_video_codec_frame_unref (frame); + return GST_FLOW_NOT_NEGOTIATED; + } + + if (self->eos) { + GST_WARNING_OBJECT (self, "Got frame after EOS"); + gst_video_codec_frame_unref (frame); + return GST_FLOW_UNEXPECTED; + } + + if (self->flushing) + goto flushing; + + if (self->downstream_flow_ret != GST_FLOW_OK) + goto downstream_error; + + timestamp = frame->pts; + duration = frame->duration; + + while (offset < GST_BUFFER_SIZE (frame->input_buffer)) { + /* Make sure to release the base class stream lock, otherwise + * _loop() can't call _finish_frame() and we might block forever + * because no input buffers are released */ + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + /* Wait at most 100ms here, some codecs don't fail dequeueing if + * the codec is flushing, causing deadlocks during shutdown */ + idx = gst_amc_codec_dequeue_input_buffer (self->codec, 100000); + GST_VIDEO_DECODER_STREAM_LOCK (self); + + if (idx < 0) { + if (self->flushing) + goto flushing; + switch (idx) { + case INFO_TRY_AGAIN_LATER: + GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out"); + continue; /* next try */ + break; + case G_MININT: + GST_ERROR_OBJECT (self, "Failed to dequeue input buffer"); + goto dequeue_error; + default: + g_assert_not_reached (); + break; + } + + continue; + } + + if (idx >= self->n_input_buffers) + goto invalid_buffer_index; + + if (self->flushing) + goto flushing; + + if (self->downstream_flow_ret != GST_FLOW_OK) { + memset (&buffer_info, 0, sizeof (buffer_info)); + gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info); + goto downstream_error; + } + + /* Now handle the frame */ + + /* Copy the buffer content in chunks of size as requested + * by the port */ + buf = &self->input_buffers[idx]; + + memset (&buffer_info, 0, sizeof (buffer_info)); + buffer_info.offset = 0; + buffer_info.size = + MIN (GST_BUFFER_SIZE (frame->input_buffer) - offset, buf->size); + + orc_memcpy (buf->data, GST_BUFFER_DATA (frame->input_buffer) + offset, + buffer_info.size); + + /* Interpolate timestamps if we're passing the buffer + * in multiple chunks */ + if (offset != 0 && duration != GST_CLOCK_TIME_NONE) { + timestamp_offset = + gst_util_uint64_scale (offset, duration, + GST_BUFFER_SIZE (frame->input_buffer)); + } + + if (timestamp != GST_CLOCK_TIME_NONE) { + buffer_info.presentation_time_us = + gst_util_uint64_scale (timestamp + timestamp_offset, 1, GST_USECOND); + self->last_upstream_ts = timestamp + timestamp_offset; + } + if (duration != GST_CLOCK_TIME_NONE) + self->last_upstream_ts += duration; + + if (offset == 0) { + BufferIdentification *id = + buffer_identification_new (timestamp + timestamp_offset); + if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame)) + buffer_info.flags |= BUFFER_FLAG_SYNC_FRAME; + gst_video_codec_frame_set_user_data (frame, id, + (GDestroyNotify) buffer_identification_free); + } + + offset += buffer_info.size; + GST_DEBUG_OBJECT (self, + "Queueing buffer %d: size %d time %" G_GINT64_FORMAT " flags 0x%08x", + idx, buffer_info.size, buffer_info.presentation_time_us, + buffer_info.flags); + if (!gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) + goto queue_error; + } + + gst_video_codec_frame_unref (frame); + + return self->downstream_flow_ret; + +downstream_error: + { + GST_ERROR_OBJECT (self, "Downstream returned %s", + gst_flow_get_name (self->downstream_flow_ret)); + gst_video_codec_frame_unref (frame); + return self->downstream_flow_ret; + } +invalid_buffer_index: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Invalid input buffer index %d of %d", idx, self->n_input_buffers)); + gst_video_codec_frame_unref (frame); + return GST_FLOW_ERROR; + } +dequeue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to dequeue input buffer")); + gst_video_codec_frame_unref (frame); + return GST_FLOW_ERROR; + } +queue_error: + { + GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL), + ("Failed to queue input buffer")); + gst_video_codec_frame_unref (frame); + return GST_FLOW_ERROR; + } +flushing: + { + GST_DEBUG_OBJECT (self, "Flushing -- returning WRONG_STATE"); + gst_video_codec_frame_unref (frame); + return GST_FLOW_WRONG_STATE; + } +} + +static GstFlowReturn +gst_amc_video_dec_finish (GstVideoDecoder * decoder) +{ + GstAmcVideoDec *self; + gint idx; + + self = GST_AMC_VIDEO_DEC (decoder); + GST_DEBUG_OBJECT (self, "Sending EOS to the component"); + + /* Don't send EOS buffer twice, this doesn't work */ + if (self->eos) { + GST_DEBUG_OBJECT (self, "Component is already EOS"); + return GST_VIDEO_DECODER_FLOW_DROPPED; + } + self->eos = TRUE; + + /* Make sure to release the base class stream lock, otherwise + * _loop() can't call _finish_frame() and we might block forever + * because no input buffers are released */ + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + /* Send an EOS buffer to the component and let the base + * class drop the EOS event. We will send it later when + * the EOS buffer arrives on the output port. + * Wait at most 0.5s here. */ + idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000); + GST_VIDEO_DECODER_STREAM_LOCK (self); + + if (idx >= 0 && idx < self->n_input_buffers) { + GstAmcBufferInfo buffer_info; + + memset (&buffer_info, 0, sizeof (buffer_info)); + buffer_info.size = 0; + buffer_info.presentation_time_us = + gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND); + buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM; + + if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) + GST_DEBUG_OBJECT (self, "Sent EOS to the codec"); + else + GST_ERROR_OBJECT (self, "Failed to send EOS to the codec"); + } else if (idx >= self->n_input_buffers) { + GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d", + idx, self->n_input_buffers); + } else { + GST_ERROR_OBJECT (self, "Failed to dequeue input buffer for EOS: %d", idx); + } + + return GST_VIDEO_DECODER_FLOW_DROPPED; +} + +static GstFlowReturn +gst_amc_video_dec_drain (GstAmcVideoDec * self) +{ + GstFlowReturn ret; + gint idx; + + GST_DEBUG_OBJECT (self, "Draining codec"); + if (!self->started) { + GST_DEBUG_OBJECT (self, "Codec not started yet"); + return GST_FLOW_OK; + } + + /* Don't send EOS buffer twice, this doesn't work */ + if (self->eos) { + GST_DEBUG_OBJECT (self, "Codec is EOS already"); + return GST_FLOW_OK; + } + + /* Make sure to release the base class stream lock, otherwise + * _loop() can't call _finish_frame() and we might block forever + * because no input buffers are released */ + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + /* Send an EOS buffer to the component and let the base + * class drop the EOS event. We will send it later when + * the EOS buffer arrives on the output port. + * Wait at most 0.5s here. */ + idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000); + GST_VIDEO_DECODER_STREAM_LOCK (self); + + if (idx >= 0 && idx < self->n_input_buffers) { + GstAmcBufferInfo buffer_info; + + GST_VIDEO_DECODER_STREAM_UNLOCK (self); + g_mutex_lock (self->drain_lock); + self->draining = TRUE; + + memset (&buffer_info, 0, sizeof (buffer_info)); + buffer_info.size = 0; + buffer_info.presentation_time_us = + gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND); + buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM; + + if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) { + GST_DEBUG_OBJECT (self, "Waiting until codec is drained"); + g_cond_wait (self->drain_cond, self->drain_lock); + GST_DEBUG_OBJECT (self, "Drained codec"); + ret = GST_FLOW_OK; + } else { + GST_ERROR_OBJECT (self, "Failed to queue input buffer"); + ret = GST_FLOW_ERROR; + } + + g_mutex_unlock (self->drain_lock); + GST_VIDEO_DECODER_STREAM_LOCK (self); + } else if (idx >= self->n_input_buffers) { + GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d", + idx, self->n_input_buffers); + ret = GST_FLOW_ERROR; + } else { + GST_ERROR_OBJECT (self, "Failed to acquire buffer for EOS: %d", idx); + ret = GST_FLOW_ERROR; + } + + return ret; +} diff --git a/sys/androidmedia/gstamcvideodec.h b/sys/androidmedia/gstamcvideodec.h new file mode 100644 index 00000000..4a33e483 --- /dev/null +++ b/sys/androidmedia/gstamcvideodec.h @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2012, Collabora Ltd. + * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GST_AMC_VIDEO_DEC_H__ +#define __GST_AMC_VIDEO_DEC_H__ + +#include <gst/gst.h> + +#include <gst/video/gstvideodecoder.h> + +#include "gstamc.h" + +G_BEGIN_DECLS + +#define GST_TYPE_AMC_VIDEO_DEC \ + (gst_amc_video_dec_get_type()) +#define GST_AMC_VIDEO_DEC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDec)) +#define GST_AMC_VIDEO_DEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDecClass)) +#define GST_AMC_VIDEO_DEC_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDecClass)) +#define GST_IS_AMC_VIDEO_DEC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AMC_VIDEO_DEC)) +#define GST_IS_AMC_VIDEO_DEC_CLASS(obj) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AMC_VIDEO_DEC)) + +typedef struct _GstAmcVideoDec GstAmcVideoDec; +typedef struct _GstAmcVideoDecClass GstAmcVideoDecClass; + +struct _GstAmcVideoDec +{ + GstVideoDecoder parent; + + /* < private > */ + GstAmcCodec *codec; + GstAmcBuffer *input_buffers, *output_buffers; + gsize n_input_buffers, n_output_buffers; + + GstVideoCodecState *input_state; + gboolean input_state_changed; + + /* Output format of the codec */ + GstVideoFormat format; + gint color_format; + gint width, height, stride, slice_height; + gint crop_left, crop_right; + gint crop_top, crop_bottom; + + GstBuffer *codec_data; + /* TRUE if the component is configured and saw + * the first buffer */ + gboolean started; + gboolean flushing; + + GstClockTime last_upstream_ts; + + /* Draining state */ + GMutex *drain_lock; + GCond *drain_cond; + /* TRUE if EOS buffers shouldn't be forwarded */ + gboolean draining; + + /* TRUE if upstream is EOS */ + gboolean eos; + + GstFlowReturn downstream_flow_ret; +}; + +struct _GstAmcVideoDecClass +{ + GstVideoDecoderClass parent_class; + + const GstAmcCodecInfo *codec_info; +}; + +GType gst_amc_video_dec_get_type (void); + +G_END_DECLS + +#endif /* __GST_AMC_VIDEO_DEC_H__ */ diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in index 4538f987..53f3dd64 100644 --- a/sys/applemedia/Makefile.in +++ b/sys/applemedia/Makefile.in @@ -306,6 +306,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in index fbd8b028..7f365680 100644 --- a/sys/avc/Makefile.in +++ b/sys/avc/Makefile.in @@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/avc/gstavcsrc.cpp b/sys/avc/gstavcsrc.cpp index 21dcb509..6d926dc2 100644 --- a/sys/avc/gstavcsrc.cpp +++ b/sys/avc/gstavcsrc.cpp @@ -102,7 +102,7 @@ gst_avc_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_avc_src_src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "AVC Video Services Source", "Video/Source", "Captures DV or HDV video from Firewire port", "David Schleef <ds@entropywave.com>"); diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in index 8bf1dc0f..db034305 100644 --- a/sys/d3dvideosink/Makefile.in +++ b/sys/d3dvideosink/Makefile.in @@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in index 90face25..b65f0b05 100644 --- a/sys/decklink/Makefile.in +++ b/sys/decklink/Makefile.in @@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp index eeb1c95c..7ee661e4 100644 --- a/sys/decklink/gstdecklinksink.cpp +++ b/sys/decklink/gstdecklinksink.cpp @@ -186,7 +186,7 @@ gst_decklink_sink_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_decklink_sink_audiosink_template)); - gst_element_class_set_metadata (element_class, "Decklink Sink", + gst_element_class_set_static_metadata (element_class, "Decklink Sink", "Video/Sink", "Decklink Sink", "David Schleef <ds@entropywave.com>"); } diff --git a/sys/decklink/gstdecklinksrc.cpp b/sys/decklink/gstdecklinksrc.cpp index ee1c4645..331ca721 100644 --- a/sys/decklink/gstdecklinksrc.cpp +++ b/sys/decklink/gstdecklinksrc.cpp @@ -190,7 +190,7 @@ gst_decklink_src_base_init (gpointer g_class) gst_pad_template_new ("videosrc", GST_PAD_SRC, GST_PAD_ALWAYS, gst_decklink_mode_get_template_caps ())); - gst_element_class_set_metadata (element_class, "Decklink source", + gst_element_class_set_static_metadata (element_class, "Decklink source", "Source/Video", "DeckLink Source", "David Schleef <ds@entropywave.com>"); } diff --git a/sys/directdraw/Makefile.in b/sys/directdraw/Makefile.in index bb5abf02..9ec2fdc7 100644 --- a/sys/directdraw/Makefile.in +++ b/sys/directdraw/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c index 4ab14d4e..534d61d8 100644 --- a/sys/directdraw/gstdirectdrawsink.c +++ b/sys/directdraw/gstdirectdrawsink.c @@ -382,8 +382,8 @@ gst_directdraw_sink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "Direct Draw Video Sink", - "Sink/Video", + gst_element_class_set_static_metadata (element_class, + "Direct Draw Video Sink", "Sink/Video", "Output to a video card via Direct Draw", "Sebastien Moutte <sebastien@moutte.net>"); gst_element_class_add_pad_template (element_class, @@ -1753,9 +1753,9 @@ gst_directdraw_sink_get_depth (LPDDPIXELFORMAT lpddpfPixelFormat) gint order = 0, binary; binary = - lpddpfPixelFormat->dwRBitMask | lpddpfPixelFormat-> - dwGBitMask | lpddpfPixelFormat->dwBBitMask | lpddpfPixelFormat-> - dwRGBAlphaBitMask; + lpddpfPixelFormat-> + dwRBitMask | lpddpfPixelFormat->dwGBitMask | lpddpfPixelFormat-> + dwBBitMask | lpddpfPixelFormat->dwRGBAlphaBitMask; while (binary != 0) { if ((binary % 2) == 1) order++; diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in index aadbb658..09c19d04 100644 --- a/sys/directsound/Makefile.in +++ b/sys/directsound/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/directsound/gstdirectsoundsrc.c b/sys/directsound/gstdirectsoundsrc.c index 169073b8..d7023fef 100644 --- a/sys/directsound/gstdirectsoundsrc.c +++ b/sys/directsound/gstdirectsoundsrc.c @@ -48,12 +48,25 @@ TODO: add device selection and check rate etc. */ +/** + * SECTION:element-directsoundsrc + * + * Reads audio data using the DirectSound API. + * + * <refsect2> + * <title>Example pipelines</title> + * |[ + * gst-launch -v directsoundsrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=dsound.ogg + * ]| Record from DirectSound and encode to Ogg/Vorbis. + * </refsect2> + */ + #ifdef HAVE_CONFIG_H # include "config.h" #endif #include <gst/gst.h> -#include <gst/audio/gstbaseaudiosrc.h> +#include <gst/audio/gstaudiobasesrc.h> #include "gstdirectsoundsrc.h" @@ -73,7 +86,6 @@ enum PROP_DEVICE }; - static HRESULT (WINAPI * pDSoundCaptureCreate) (LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN); @@ -88,47 +100,30 @@ static void gst_directsound_src_get_property (GObject * object, static gboolean gst_directsound_src_open (GstAudioSrc * asrc); static gboolean gst_directsound_src_close (GstAudioSrc * asrc); static gboolean gst_directsound_src_prepare (GstAudioSrc * asrc, - GstRingBufferSpec * spec); + GstAudioRingBufferSpec * spec); static gboolean gst_directsound_src_unprepare (GstAudioSrc * asrc); static void gst_directsound_src_reset (GstAudioSrc * asrc); -static GstCaps *gst_directsound_src_getcaps (GstBaseSrc * bsrc); +static GstCaps *gst_directsound_src_getcaps (GstBaseSrc * bsrc, + GstCaps * filter); static guint gst_directsound_src_read (GstAudioSrc * asrc, - gpointer data, guint length); + gpointer data, guint length, GstClockTime * timestamp); static void gst_directsound_src_dispose (GObject * object); -static void gst_directsound_src_do_init (GType type); - static guint gst_directsound_src_delay (GstAudioSrc * asrc); static GstStaticPadTemplate directsound_src_src_factory = - GST_STATIC_PAD_TEMPLATE ("src", +GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, " - "signed = (boolean) { TRUE, FALSE }, " - "width = (int) 16, " - "depth = (int) 16, " - "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]; " - "audio/x-raw-int, " - "signed = (boolean) { TRUE, FALSE }, " - "width = (int) 8, " - "depth = (int) 8, " + GST_STATIC_CAPS ("audio/x-raw, " + "format = (string) { S16LE, S8 }, " + "layout = (string) interleaved, " "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]")); -static void -gst_directsound_src_do_init (GType type) -{ - GST_DEBUG_CATEGORY_INIT (directsoundsrc_debug, "directsoundsrc", 0, - "DirectSound Src"); - - -} - -GST_BOILERPLATE_FULL (GstDirectSoundSrc, gst_directsound_src, GstAudioSrc, - GST_TYPE_AUDIO_SRC, gst_directsound_src_do_init); +#define gst_directsound_src_parent_class parent_class +G_DEFINE_TYPE (GstDirectSoundSrc, gst_directsound_src, GST_TYPE_AUDIO_SRC); static void gst_directsound_src_dispose (GObject * object) @@ -147,39 +142,19 @@ gst_directsound_src_finalize (GObject * object) } static void -gst_directsound_src_base_init (gpointer g_class) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - - GST_DEBUG ("initializing directsoundsrc base\n"); - - gst_element_class_set_metadata (element_class, "Direct Sound Audio Src", - "Source/Audio", - "Capture from a soundcard via DIRECTSOUND", - "Joni Valtanen <joni.valtanen@movial.fi>"); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&directsound_src_src_factory)); -} - - -/* initialize the plugin's class */ -static void gst_directsound_src_class_init (GstDirectSoundSrcClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; GstBaseSrcClass *gstbasesrc_class; - GstBaseAudioSrcClass *gstbaseaudiosrc_class; GstAudioSrcClass *gstaudiosrc_class; gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; gstbasesrc_class = (GstBaseSrcClass *) klass; - gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass; gstaudiosrc_class = (GstAudioSrcClass *) klass; - GST_DEBUG ("initializing directsoundsrc class\n"); + GST_DEBUG ("initializing directsoundsrc class"); gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_directsound_src_finalize); gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_directsound_src_dispose); @@ -199,23 +174,30 @@ gst_directsound_src_class_init (GstDirectSoundSrcClass * klass) gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_directsound_src_delay); gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_directsound_src_reset); + GST_DEBUG_CATEGORY_INIT (directsoundsrc_debug, "directsoundsrc", 0, + "DirectSound Src"); + gst_element_class_set_static_metadata (gstelement_class, + "DirectSound audio source", "Source/Audio", + "Capture from a soundcard via DirectSound", + "Joni Valtanen <joni.valtanen@movial.fi>"); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&directsound_src_src_factory)); } static GstCaps * -gst_directsound_src_getcaps (GstBaseSrc * bsrc) +gst_directsound_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter) { GstDirectSoundSrc *dsoundsrc; GstCaps *caps = NULL; - GST_DEBUG ("get caps\n"); + GST_DEBUG_OBJECT (bsrc, "get caps"); dsoundsrc = GST_DIRECTSOUND_SRC (bsrc); - caps = gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD (bsrc))); return caps; - } static void @@ -223,7 +205,7 @@ gst_directsound_src_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { // GstDirectSoundSrc *src = GST_DIRECTSOUND_SRC (object); - GST_DEBUG ("set property\n"); + GST_DEBUG ("set property"); switch (prop_id) { #if 0 @@ -246,7 +228,7 @@ gst_directsound_src_get_property (GObject * object, guint prop_id, GstDirectSoundSrc *src = GST_DIRECTSOUND_SRC (object); #endif - GST_DEBUG ("get property\n"); + GST_DEBUG ("get property"); switch (prop_id) { #if 0 @@ -268,22 +250,19 @@ gst_directsound_src_get_property (GObject * object, guint prop_id, * initialize structure */ static void -gst_directsound_src_init (GstDirectSoundSrc * src, - GstDirectSoundSrcClass * gclass) +gst_directsound_src_init (GstDirectSoundSrc * src) { - GST_DEBUG ("initializing directsoundsrc\n"); + GST_DEBUG_OBJECT (src, "initializing directsoundsrc"); src->dsound_lock = g_mutex_new (); } - - static gboolean gst_directsound_src_open (GstAudioSrc * asrc) { GstDirectSoundSrc *dsoundsrc; HRESULT hRes; /* Result for windows functions */ - GST_DEBUG ("initializing directsoundsrc\n"); + GST_DEBUG_OBJECT (asrc, "opening directsoundsrc"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); @@ -342,7 +321,7 @@ gst_directsound_src_close (GstAudioSrc * asrc) GstDirectSoundSrc *dsoundsrc; HRESULT hRes; /* Result for windows functions */ - GST_DEBUG ("initializing directsoundsrc\n"); + GST_DEBUG_OBJECT (asrc, "closing directsoundsrc"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); @@ -356,49 +335,37 @@ gst_directsound_src_close (GstAudioSrc * asrc) } static gboolean -gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec) +gst_directsound_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec) { - GstDirectSoundSrc *dsoundsrc; WAVEFORMATEX wfx; /* Wave format structure */ HRESULT hRes; /* Result for windows functions */ - DSCBUFFERDESC descSecondary; /* Capturebuffer decsiption */ + DSCBUFFERDESC descSecondary; /* Capturebuffer description */ dsoundsrc = GST_DIRECTSOUND_SRC (asrc); - GST_DEBUG ("initializing directsoundsrc\n"); + GST_DEBUG_OBJECT (asrc, "preparing directsoundsrc"); /* Define buffer */ memset (&wfx, 0, sizeof (WAVEFORMATEX)); - wfx.wFormatTag = WAVE_FORMAT_PCM; /* should be WAVE_FORMAT_PCM */ - wfx.nChannels = spec->channels; - wfx.nSamplesPerSec = spec->rate; /* 8000|11025|22050|44100 */ - wfx.wBitsPerSample = spec->width; // 8|16; - - wfx.nBlockAlign = wfx.nChannels * (wfx.wBitsPerSample / 8); + wfx.wFormatTag = WAVE_FORMAT_PCM; + wfx.nChannels = GST_AUDIO_INFO_CHANNELS (&spec->info); + wfx.nSamplesPerSec = GST_AUDIO_INFO_RATE (&spec->info); + wfx.wBitsPerSample = GST_AUDIO_INFO_BPF (&spec->info) * 8 / wfx.nChannels; + wfx.nBlockAlign = GST_AUDIO_INFO_BPF (&spec->info); wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; - wfx.cbSize = 0; /* This size is allways for PCM-format */ + /* Ignored for WAVE_FORMAT_PCM. */ + wfx.cbSize = 0; - /* 1 or 2 Channels etc... - FIXME: Never really tested. Is this ok? - */ - if (spec->width == 16 && spec->channels == 1) { - spec->format = GST_S16_LE; - } else if (spec->width == 16 && spec->channels == 2) { - spec->format = GST_U16_LE; - } else if (spec->width == 8 && spec->channels == 1) { - spec->format = GST_S8; - } else if (spec->width == 8 && spec->channels == 2) { - spec->format = GST_U8; - } + if (wfx.wBitsPerSample != 16 && wfx.wBitsPerSample != 8) + goto dodgy_width; /* Set the buffer size to two seconds. This should never reached. */ dsoundsrc->buffer_size = wfx.nAvgBytesPerSec * 2; - //notifysize * 16; //spec->width; /*original 16*/ - GST_DEBUG ("Buffer size: %d", dsoundsrc->buffer_size); + GST_DEBUG_OBJECT (asrc, "Buffer size: %d", dsoundsrc->buffer_size); /* Init secondary buffer desciption */ memset (&descSecondary, 0, sizeof (DSCBUFFERDESC)); @@ -413,19 +380,15 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec) /* Create buffer */ hRes = IDirectSoundCapture_CreateCaptureBuffer (dsoundsrc->pDSC, &descSecondary, &dsoundsrc->pDSBSecondary, NULL); - if (hRes != DS_OK) { + if (hRes != DS_OK) goto capture_buffer; - } - spec->channels = wfx.nChannels; - spec->rate = wfx.nSamplesPerSec; - spec->bytes_per_sample = (spec->width / 8) * spec->channels; - dsoundsrc->bytes_per_sample = spec->bytes_per_sample; + dsoundsrc->bytes_per_sample = GST_AUDIO_INFO_BPF (&spec->info); GST_DEBUG ("latency time: %" G_GUINT64_FORMAT " - buffer time: %" G_GUINT64_FORMAT, spec->latency_time, spec->buffer_time); - /* Buffer-time should be allways more than 2*latency */ + /* Buffer-time should be always more than 2*latency */ if (spec->buffer_time < spec->latency_time * 2) { spec->buffer_time = spec->latency_time * 2; GST_WARNING ("buffer-time was less than latency"); @@ -438,7 +401,6 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec) dsoundsrc->latency_size = (gint) wfx.nAvgBytesPerSec * dsoundsrc->latency_time / 1000000.0; - spec->segsize = (guint) (((double) spec->buffer_time / 1000000.0) * wfx.nAvgBytesPerSec); @@ -446,27 +408,23 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec) if (spec->segsize < 1) spec->segsize = 1; - spec->segtotal = spec->width * (wfx.nAvgBytesPerSec / spec->segsize); - - GST_DEBUG ("bytes/sec: %lu, buffer size: %d, segsize: %d, segtotal: %d", - wfx.nAvgBytesPerSec, - dsoundsrc->buffer_size, spec->segsize, spec->segtotal); - - spec->silence_sample[0] = 0; - spec->silence_sample[1] = 0; - spec->silence_sample[2] = 0; - spec->silence_sample[3] = 0; + spec->segtotal = GST_AUDIO_INFO_BPF (&spec->info) * 8 * + (wfx.nAvgBytesPerSec / spec->segsize); - if (spec->width != 16 && spec->width != 8) - goto dodgy_width; + GST_DEBUG_OBJECT (asrc, + "bytes/sec: %lu, buffer size: %d, segsize: %d, segtotal: %d", + wfx.nAvgBytesPerSec, dsoundsrc->buffer_size, spec->segsize, + spec->segtotal); - /* Not readed anything yet */ + /* Not read anything yet */ dsoundsrc->current_circular_offset = 0; - GST_DEBUG ("GstRingBufferSpec->channels: %d, GstRingBufferSpec->rate: %d, \ -GstRingBufferSpec->bytes_per_sample: %d\n\ -WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d, \ -WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld\n", spec->channels, spec->rate, spec->bytes_per_sample, wfx.nSamplesPerSec, wfx.wBitsPerSample, wfx.nBlockAlign, wfx.nAvgBytesPerSec); + GST_DEBUG_OBJECT (asrc, "channels: %d, rate: %d, bytes_per_sample: %d" + " WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d," + " WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld", + GST_AUDIO_INFO_CHANNELS (&spec->info), GST_AUDIO_INFO_RATE (&spec->info), + GST_AUDIO_INFO_BPF (&spec->info), wfx.nSamplesPerSec, wfx.wBitsPerSample, + wfx.nBlockAlign, wfx.nAvgBytesPerSec); return TRUE; @@ -479,21 +437,18 @@ capture_buffer: dodgy_width: { GST_ELEMENT_ERROR (dsoundsrc, RESOURCE, OPEN_READ, - ("Unexpected width %d", spec->width), (NULL)); + ("Unexpected width %d", wfx.wBitsPerSample), (NULL)); return FALSE; } - } static gboolean gst_directsound_src_unprepare (GstAudioSrc * asrc) { GstDirectSoundSrc *dsoundsrc; + HRESULT hRes; - HRESULT hRes; /* Result for windows functions */ - - /* Resets */ - GST_DEBUG ("unpreparing directsoundsrc"); + GST_DEBUG_OBJECT (asrc, "unpreparing directsoundsrc"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); @@ -504,13 +459,13 @@ gst_directsound_src_unprepare (GstAudioSrc * asrc) hRes = IDirectSoundCaptureBuffer_Release (dsoundsrc->pDSBSecondary); return TRUE; - } /* return number of readed bytes */ static guint -gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length) +gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length, + GstClockTime * timestamp) { GstDirectSoundSrc *dsoundsrc; @@ -525,7 +480,7 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length) DWORD dwStatus = 0; - GST_DEBUG ("reading directsoundsrc\n"); + GST_DEBUG_OBJECT (asrc, "reading directsoundsrc"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); @@ -535,12 +490,12 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length) hRes = IDirectSoundCaptureBuffer_GetStatus (dsoundsrc->pDSBSecondary, &dwStatus); - /* Starting capturing if not allready */ + /* Starting capturing if not already */ if (!(dwStatus & DSCBSTATUS_CAPTURING)) { hRes = IDirectSoundCaptureBuffer_Start (dsoundsrc->pDSBSecondary, DSCBSTART_LOOPING); // Sleep (dsoundsrc->latency_time/1000); - GST_DEBUG ("capture started"); + GST_DEBUG_OBJECT (asrc, "capture started"); } // calculate_buffersize: while (length > dwBufferSize) { @@ -558,8 +513,6 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length) dwBufferSize = dwCurrentCaptureCursor - dsoundsrc->current_circular_offset; } - - } // while (... /* Lock the buffer */ @@ -588,7 +541,6 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length) /* return length (readed data size in bytes) */ return length; - } static guint @@ -600,7 +552,7 @@ gst_directsound_src_delay (GstAudioSrc * asrc) DWORD dwBytesInQueue = 0; gint nNbSamplesInQueue = 0; - GST_DEBUG ("Delay\n"); + GST_DEBUG_OBJECT (asrc, "Delay"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); @@ -632,7 +584,7 @@ gst_directsound_src_reset (GstAudioSrc * asrc) LPVOID pLockedBuffer = NULL; DWORD dwSizeBuffer = 0; - GST_DEBUG ("reset directsoundsrc\n"); + GST_DEBUG_OBJECT (asrc, "reset directsoundsrc"); dsoundsrc = GST_DIRECTSOUND_SRC (asrc); diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in index 4601f7aa..6b47cfba 100644 --- a/sys/dshowdecwrapper/Makefile.in +++ b/sys/dshowdecwrapper/Makefile.in @@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in index 686d725e..89c60252 100644 --- a/sys/dshowsrcwrapper/Makefile.in +++ b/sys/dshowsrcwrapper/Makefile.in @@ -186,6 +186,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp index 6d4f15c7..2ba9c3b1 100644 --- a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp +++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp @@ -121,7 +121,7 @@ gst_dshowaudiosrc_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Directshow audio capture source", "Source/Audio", "Receive data from a directshow audio capture graph", "Sebastien Moutte <sebastien@moutte.net>"); diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp index 87293239..4fe0695a 100644 --- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp +++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp @@ -129,7 +129,7 @@ gst_dshowvideosrc_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "DirectShow video capture source", "Source/Video", "Receive data from a directshow video capture graph", "Sebastien Moutte <sebastien@moutte.net>"); diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in index 6e518e20..7ec55a5b 100644 --- a/sys/dshowvideosink/Makefile.in +++ b/sys/dshowvideosink/Makefile.in @@ -186,6 +186,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/dshowvideosink/dshowvideosink.cpp b/sys/dshowvideosink/dshowvideosink.cpp index 0bd2eb0a..062317fb 100644 --- a/sys/dshowvideosink/dshowvideosink.cpp +++ b/sys/dshowvideosink/dshowvideosink.cpp @@ -224,7 +224,7 @@ gst_dshowvideosink_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "DirectShow video sink", + gst_element_class_set_static_metadata (element_class, "DirectShow video sink", "Sink/Video", "Display data using a DirectShow video renderer", "Pioneers of the Inevitable <songbird@songbirdnest.com>, " \ "FLUENDO S.A. <support@fluendo.com>"); diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in index fc628720..91233e7f 100644 --- a/sys/dvb/Makefile.in +++ b/sys/dvb/Makefile.in @@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c index 4e91491a..45a7aad5 100644 --- a/sys/dvb/dvbbasebin.c +++ b/sys/dvb/dvbbasebin.c @@ -228,7 +228,7 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "DVB bin", + gst_element_class_set_static_metadata (element_class, "DVB bin", "Source/Bin/Video", "Access descramble and split DVB streams", "Alessandro Decina <alessandro@nnva.org>"); diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c index b7dcb783..84aca09f 100644 --- a/sys/dvb/gstdvbsrc.c +++ b/sys/dvb/gstdvbsrc.c @@ -334,7 +334,7 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&ts_src_factory)); - gst_element_class_set_metadata (gstelement_class, "DVB Source", + gst_element_class_set_static_metadata (gstelement_class, "DVB Source", "Source/Video", "Digital Video Broadcast Source", "P2P-VCR, C-Lab, University of Paderborn," diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in index 56eb825f..de5ff9e7 100644 --- a/sys/fbdev/Makefile.in +++ b/sys/fbdev/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/fbdev/gstfbdevsink.c b/sys/fbdev/gstfbdevsink.c index 70fad8ed..639641d9 100644 --- a/sys/fbdev/gstfbdevsink.c +++ b/sys/fbdev/gstfbdevsink.c @@ -90,7 +90,7 @@ gst_fbdevsink_base_init (gpointer g_class) GST_STATIC_CAPS (GST_FBDEV_TEMPLATE_CAPS) ); - gst_element_class_set_metadata (element_class, "fbdev video sink", + gst_element_class_set_static_metadata (element_class, "fbdev video sink", "Sink/Video", "A linux framebuffer videosink", "Sean D'Epagnier <sean@depagnier.com>"); gst_element_class_add_pad_template (element_class, diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in index cc821160..3305bfb3 100644 --- a/sys/linsys/Makefile.in +++ b/sys/linsys/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/linsys/gstlinsyssdisink.c b/sys/linsys/gstlinsyssdisink.c index 4250e079..bcb1c8ca 100644 --- a/sys/linsys/gstlinsyssdisink.c +++ b/sys/linsys/gstlinsyssdisink.c @@ -102,7 +102,7 @@ gst_linsys_sdi_sink_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_linsys_sdi_sink_sink_template)); - gst_element_class_set_metadata (element_class, "SDI video sink", + gst_element_class_set_static_metadata (element_class, "SDI video sink", "Sink/Video", "Writes video from SDI transmit device", "David Schleef <ds@entropywave.com>"); } diff --git a/sys/linsys/gstlinsyssdisrc.c b/sys/linsys/gstlinsyssdisrc.c index 9b5a3270..6bdbe5ed 100644 --- a/sys/linsys/gstlinsyssdisrc.c +++ b/sys/linsys/gstlinsyssdisrc.c @@ -106,7 +106,7 @@ gst_linsys_sdi_src_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_linsys_sdi_src_src_template)); - gst_element_class_set_metadata (element_class, "SDI video source", + gst_element_class_set_static_metadata (element_class, "SDI video source", "Source/Video", "Reads video from SDI capture device", "David Schleef <ds@entropywave.com>"); } diff --git a/sys/opensles/Makefile.am b/sys/opensles/Makefile.am new file mode 100644 index 00000000..dda50327 --- /dev/null +++ b/sys/opensles/Makefile.am @@ -0,0 +1,23 @@ + +plugin_LTLIBRARIES = libgstopensles.la + +libgstopensles_la_SOURCES = openslesringbuffer.c \ + openslessink.c \ + openslessrc.c \ + opensles.c + +libgstopensles_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \ + -Wno-deprecated-declarations +libgstopensles_la_LIBADD = \ + -lgstinterfaces-@GST_MAJORMINOR@ \ + -lgstaudio-@GST_MAJORMINOR@ \ + $(GST_PLUGINS_BASE_LIBS) \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) +libgstopensles_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -lOpenSLES +libgstopensles_la_LIBTOOLFLAGS = --tag=disable-static --tag=CC + +noinst_HEADERS = openslesringbuffer.h \ + openslessink.h \ + openslessrc.h + diff --git a/sys/opensles/Makefile.in b/sys/opensles/Makefile.in new file mode 100644 index 00000000..99c5c5a7 --- /dev/null +++ b/sys/opensles/Makefile.in @@ -0,0 +1,982 @@ +# Makefile.in generated by automake 1.11.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = sys/opensles +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ + $(top_srcdir)/common/m4/as-auto-alt.m4 \ + $(top_srcdir)/common/m4/as-compiler-flag.m4 \ + $(top_srcdir)/common/m4/as-libtool.m4 \ + $(top_srcdir)/common/m4/as-python.m4 \ + $(top_srcdir)/common/m4/as-scrub-include.m4 \ + $(top_srcdir)/common/m4/as-version.m4 \ + $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/common/m4/gst-arch.m4 \ + $(top_srcdir)/common/m4/gst-args.m4 \ + $(top_srcdir)/common/m4/gst-check.m4 \ + $(top_srcdir)/common/m4/gst-default.m4 \ + $(top_srcdir)/common/m4/gst-dowhile.m4 \ + $(top_srcdir)/common/m4/gst-error.m4 \ + $(top_srcdir)/common/m4/gst-feature.m4 \ + $(top_srcdir)/common/m4/gst-gettext.m4 \ + $(top_srcdir)/common/m4/gst-glib2.m4 \ + $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \ + $(top_srcdir)/common/m4/gst-platform.m4 \ + $(top_srcdir)/common/m4/gst-plugin-docs.m4 \ + $(top_srcdir)/common/m4/gst-plugindir.m4 \ + $(top_srcdir)/common/m4/gst-x11.m4 \ + $(top_srcdir)/common/m4/gst.m4 \ + $(top_srcdir)/common/m4/gtk-doc.m4 \ + $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \ + $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(plugindir)" +LTLIBRARIES = $(plugin_LTLIBRARIES) +am__DEPENDENCIES_1 = +libgstopensles_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_libgstopensles_la_OBJECTS = \ + libgstopensles_la-openslesringbuffer.lo \ + libgstopensles_la-openslessink.lo \ + libgstopensles_la-openslessrc.lo libgstopensles_la-opensles.lo +libgstopensles_la_OBJECTS = $(am_libgstopensles_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libgstopensles_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(libgstopensles_la_CFLAGS) $(CFLAGS) \ + $(libgstopensles_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libgstopensles_la_SOURCES) +DIST_SOURCES = $(libgstopensles_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ACMENC_CFLAGS = @ACMENC_CFLAGS@ +ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APEXSINK_CFLAGS = @APEXSINK_CFLAGS@ +APEXSINK_LIBS = @APEXSINK_LIBS@ +AR = @AR@ +AS = @AS@ +ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@ +ASSRENDER_LIBS = @ASSRENDER_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BZ2_LIBS = @BZ2_LIBS@ +CC = @CC@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@ +CDAUDIO_LIBS = @CDAUDIO_LIBS@ +CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@ +CELT_0_11_LIBS = @CELT_0_11_LIBS@ +CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@ +CELT_0_7_LIBS = @CELT_0_7_LIBS@ +CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@ +CELT_0_8_LIBS = @CELT_0_8_LIBS@ +CELT_CFLAGS = @CELT_CFLAGS@ +CELT_LIBS = @CELT_LIBS@ +CFLAGS = @CFLAGS@ +CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@ +CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@ +COG_CFLAGS = @COG_CFLAGS@ +COG_LIBS = @COG_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURL_CFLAGS = @CURL_CFLAGS@ +CURL_LIBS = @CURL_LIBS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DCCP_LIBS = @DCCP_LIBS@ +DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@ +DECKLINK_LIBS = @DECKLINK_LIBS@ +DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@ +DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@ +DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@ +DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@ +DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@ +DIRAC_CFLAGS = @DIRAC_CFLAGS@ +DIRAC_LIBS = @DIRAC_LIBS@ +DIRECT3D9_LIBS = @DIRECT3D9_LIBS@ +DIRECT3D_LIBS = @DIRECT3D_LIBS@ +DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@ +DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@ +DIRECTFB_LIBS = @DIRECTFB_LIBS@ +DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@ +DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@ +DIRECTX_CFLAGS = @DIRECTX_CFLAGS@ +DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DTS_LIBS = @DTS_LIBS@ +DUMPBIN = @DUMPBIN@ +DVDNAV_CFLAGS = @DVDNAV_CFLAGS@ +DVDNAV_LIBS = @DVDNAV_LIBS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ +EGREP = @EGREP@ +ERROR_CFLAGS = @ERROR_CFLAGS@ +ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ +ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@ +EXEEXT = @EXEEXT@ +EXIF_CFLAGS = @EXIF_CFLAGS@ +EXIF_LIBS = @EXIF_LIBS@ +FAAC_LIBS = @FAAC_LIBS@ +FAAD_IS_NEAAC = @FAAD_IS_NEAAC@ +FAAD_LIBS = @FAAD_LIBS@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +FLITE_CFLAGS = @FLITE_CFLAGS@ +FLITE_LIBS = @FLITE_LIBS@ +GCOV = @GCOV@ +GCOV_CFLAGS = @GCOV_CFLAGS@ +GCOV_LIBS = @GCOV_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GIO_CFLAGS = @GIO_CFLAGS@ +GIO_LDFLAGS = @GIO_LDFLAGS@ +GIO_LIBS = @GIO_LIBS@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ +GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@ +GLIB_GENMARSHAL = @GLIB_GENMARSHAL@ +GLIB_LIBS = @GLIB_LIBS@ +GLIB_MKENUMS = @GLIB_MKENUMS@ +GLIB_PREFIX = @GLIB_PREFIX@ +GLIB_REQ = @GLIB_REQ@ +GME_LIBS = @GME_LIBS@ +GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@ +GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GMYTH_CFLAGS = @GMYTH_CFLAGS@ +GMYTH_LIBS = @GMYTH_LIBS@ +GREP = @GREP@ +GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@ +GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ +GSETTINGS_LIBS = @GSETTINGS_LIBS@ +GSM_LIBS = @GSM_LIBS@ +GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@ +GSTPB_PREFIX = @GSTPB_PREFIX@ +GST_AGE = @GST_AGE@ +GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@ +GST_API_VERSION = @GST_API_VERSION@ +GST_BASE_CFLAGS = @GST_BASE_CFLAGS@ +GST_BASE_LIBS = @GST_BASE_LIBS@ +GST_CFLAGS = @GST_CFLAGS@ +GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@ +GST_CHECK_LIBS = @GST_CHECK_LIBS@ +GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@ +GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@ +GST_CURRENT = @GST_CURRENT@ +GST_CXXFLAGS = @GST_CXXFLAGS@ +GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@ +GST_LIBS = @GST_LIBS@ +GST_LIBVERSION = @GST_LIBVERSION@ +GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@ +GST_LICENSE = @GST_LICENSE@ +GST_LT_LDFLAGS = @GST_LT_LDFLAGS@ +GST_OBJCFLAGS = @GST_OBJCFLAGS@ +GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@ +GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@ +GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@ +GST_PACKAGE_NAME = @GST_PACKAGE_NAME@ +GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@ +GST_PLUGINS_ALL = @GST_PLUGINS_ALL@ +GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@ +GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@ +GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@ +GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@ +GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@ +GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@ +GST_PLUGINS_DIR = @GST_PLUGINS_DIR@ +GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@ +GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@ +GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@ +GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@ +GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@ +GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@ +GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@ +GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@ +GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@ +GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@ +GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@ +GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ +GST_PREFIX = @GST_PREFIX@ +GST_REVISION = @GST_REVISION@ +GST_TOOLS_DIR = @GST_TOOLS_DIR@ +GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@ +GST_VIDEO_LIBS = @GST_VIDEO_LIBS@ +GTKDOC_CHECK = @GTKDOC_CHECK@ +GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@ +GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@ +GTKDOC_MKPDF = @GTKDOC_MKPDF@ +GTKDOC_REBASE = @GTKDOC_REBASE@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +G_UDEV_CFLAGS = @G_UDEV_CFLAGS@ +G_UDEV_LIBS = @G_UDEV_LIBS@ +HAVE_BZ2 = @HAVE_BZ2@ +HAVE_CXX = @HAVE_CXX@ +HAVE_DIRECT3D = @HAVE_DIRECT3D@ +HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@ +HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@ +HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@ +HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@ +HAVE_DTS = @HAVE_DTS@ +HAVE_FAAC = @HAVE_FAAC@ +HAVE_FAAD = @HAVE_FAAD@ +HAVE_FLITE = @HAVE_FLITE@ +HAVE_GSM = @HAVE_GSM@ +HAVE_JASPER = @HAVE_JASPER@ +HAVE_NAS = @HAVE_NAS@ +HAVE_WILDMIDI = @HAVE_WILDMIDI@ +HAVE_X = @HAVE_X@ +HAVE_X11 = @HAVE_X11@ +HTML_DIR = @HTML_DIR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +JASPER_LIBS = @JASPER_LIBS@ +KATE_CFLAGS = @KATE_CFLAGS@ +KATE_LIBS = @KATE_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@ +LIBDC1394_LIBS = @LIBDC1394_LIBS@ +LIBDIR = @LIBDIR@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBM = @LIBM@ +LIBMMS_CFLAGS = @LIBMMS_CFLAGS@ +LIBMMS_LIBS = @LIBMMS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@ +LIBUDEV_LIBS = @LIBUDEV_LIBS@ +LIBUSB_CFLAGS = @LIBUSB_CFLAGS@ +LIBUSB_LIBS = @LIBUSB_LIBS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALEDIR = @LOCALEDIR@ +LRDF_CFLAGS = @LRDF_CFLAGS@ +LRDF_LIBS = @LRDF_LIBS@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MIMIC_CFLAGS = @MIMIC_CFLAGS@ +MIMIC_LIBS = @MIMIC_LIBS@ +MJPEG_CFLAGS = @MJPEG_CFLAGS@ +MJPEG_LIBS = @MJPEG_LIBS@ +MKDIR_P = @MKDIR_P@ +MODPLUG_CFLAGS = @MODPLUG_CFLAGS@ +MODPLUG_LIBS = @MODPLUG_LIBS@ +MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@ +MPEG2ENC_LIBS = @MPEG2ENC_LIBS@ +MPG123_CFLAGS = @MPG123_CFLAGS@ +MPG123_LIBS = @MPG123_LIBS@ +MPLEX_CFLAGS = @MPLEX_CFLAGS@ +MPLEX_LDFLAGS = @MPLEX_LDFLAGS@ +MPLEX_LIBS = @MPLEX_LIBS@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +MUSEPACK_LIBS = @MUSEPACK_LIBS@ +MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@ +MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@ +NAS_CFLAGS = @NAS_CFLAGS@ +NAS_LIBS = @NAS_LIBS@ +NEON_CFLAGS = @NEON_CFLAGS@ +NEON_LIBS = @NEON_LIBS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJC = @OBJC@ +OBJCDEPMODE = @OBJCDEPMODE@ +OBJCFLAGS = @OBJCFLAGS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OFA_CFLAGS = @OFA_CFLAGS@ +OFA_LIBS = @OFA_LIBS@ +OPENAL_CFLAGS = @OPENAL_CFLAGS@ +OPENAL_LIBS = @OPENAL_LIBS@ +OPENCV_CFLAGS = @OPENCV_CFLAGS@ +OPENCV_LIBS = @OPENCV_LIBS@ +OPENCV_PREFIX = @OPENCV_PREFIX@ +OPUS_CFLAGS = @OPUS_CFLAGS@ +OPUS_LIBS = @OPUS_LIBS@ +ORCC = @ORCC@ +ORCC_FLAGS = @ORCC_FLAGS@ +ORC_CFLAGS = @ORC_CFLAGS@ +ORC_LIBS = @ORC_LIBS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@ +PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@ +PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@ +PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@ +PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PLUGINDIR = @PLUGINDIR@ +POSUB = @POSUB@ +PROFILE_CFLAGS = @PROFILE_CFLAGS@ +PVR_CFLAGS = @PVR_CFLAGS@ +PVR_LIBS = @PVR_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@ +RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@ +RSVG_CFLAGS = @RSVG_CFLAGS@ +RSVG_LIBS = @RSVG_LIBS@ +RTMP_CFLAGS = @RTMP_CFLAGS@ +RTMP_LIBS = @RTMP_LIBS@ +SCHRO_CFLAGS = @SCHRO_CFLAGS@ +SCHRO_LIBS = @SCHRO_LIBS@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_LIBS = @SDL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLV2_CFLAGS = @SLV2_CFLAGS@ +SLV2_LIBS = @SLV2_LIBS@ +SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ +SNDFILE_LIBS = @SNDFILE_LIBS@ +SNDIO_LIBS = @SNDIO_LIBS@ +SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@ +SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@ +SPANDSP_CFLAGS = @SPANDSP_CFLAGS@ +SPANDSP_LIBS = @SPANDSP_LIBS@ +SPC_LIBS = @SPC_LIBS@ +STRIP = @STRIP@ +SWFDEC_CFLAGS = @SWFDEC_CFLAGS@ +SWFDEC_LIBS = @SWFDEC_LIBS@ +TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@ +TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@ +TIGER_CFLAGS = @TIGER_CFLAGS@ +TIGER_LIBS = @TIGER_LIBS@ +TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@ +TIMIDITY_LIBS = @TIMIDITY_LIBS@ +USE_NLS = @USE_NLS@ +VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ +VALGRIND_LIBS = @VALGRIND_LIBS@ +VALGRIND_PATH = @VALGRIND_PATH@ +VDPAU_CFLAGS = @VDPAU_CFLAGS@ +VDPAU_LIBS = @VDPAU_LIBS@ +VERSION = @VERSION@ +VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ +VOAACENC_LIBS = @VOAACENC_LIBS@ +VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ +VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +WARNING_CFLAGS = @WARNING_CFLAGS@ +WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ +WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@ +WAYLAND_CFLAGS = @WAYLAND_CFLAGS@ +WAYLAND_LIBS = @WAYLAND_LIBS@ +WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@ +WILDMIDI_LIBS = @WILDMIDI_LIBS@ +WINSOCK2_LIBS = @WINSOCK2_LIBS@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +XVID_LIBS = @XVID_LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZBAR_CFLAGS = @ZBAR_CFLAGS@ +ZBAR_LIBS = @ZBAR_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_OBJC = @ac_ct_OBJC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gsettingsschemadir = @gsettingsschemadir@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +plugindir = @plugindir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +plugin_LTLIBRARIES = libgstopensles.la +libgstopensles_la_SOURCES = openslesringbuffer.c \ + openslessink.c \ + openslessrc.c \ + opensles.c + +libgstopensles_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \ + -Wno-deprecated-declarations + +libgstopensles_la_LIBADD = \ + -lgstinterfaces-@GST_MAJORMINOR@ \ + -lgstaudio-@GST_MAJORMINOR@ \ + $(GST_PLUGINS_BASE_LIBS) \ + $(GST_BASE_LIBS) \ + $(GST_LIBS) + +libgstopensles_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -lOpenSLES +libgstopensles_la_LIBTOOLFLAGS = --tag=disable-static --tag=CC +noinst_HEADERS = openslesringbuffer.h \ + openslessink.h \ + openslessrc.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/opensles/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu sys/opensles/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ + } + +uninstall-pluginLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ + done + +clean-pluginLTLIBRARIES: + -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) + @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libgstopensles.la: $(libgstopensles_la_OBJECTS) $(libgstopensles_la_DEPENDENCIES) $(EXTRA_libgstopensles_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstopensles_la_LINK) -rpath $(plugindir) $(libgstopensles_la_OBJECTS) $(libgstopensles_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-opensles.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslesringbuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslessink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslessrc.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libgstopensles_la-openslesringbuffer.lo: openslesringbuffer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslesringbuffer.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslesringbuffer.Tpo -c -o libgstopensles_la-openslesringbuffer.lo `test -f 'openslesringbuffer.c' || echo '$(srcdir)/'`openslesringbuffer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslesringbuffer.Tpo $(DEPDIR)/libgstopensles_la-openslesringbuffer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslesringbuffer.c' object='libgstopensles_la-openslesringbuffer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslesringbuffer.lo `test -f 'openslesringbuffer.c' || echo '$(srcdir)/'`openslesringbuffer.c + +libgstopensles_la-openslessink.lo: openslessink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslessink.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslessink.Tpo -c -o libgstopensles_la-openslessink.lo `test -f 'openslessink.c' || echo '$(srcdir)/'`openslessink.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslessink.Tpo $(DEPDIR)/libgstopensles_la-openslessink.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslessink.c' object='libgstopensles_la-openslessink.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslessink.lo `test -f 'openslessink.c' || echo '$(srcdir)/'`openslessink.c + +libgstopensles_la-openslessrc.lo: openslessrc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslessrc.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslessrc.Tpo -c -o libgstopensles_la-openslessrc.lo `test -f 'openslessrc.c' || echo '$(srcdir)/'`openslessrc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslessrc.Tpo $(DEPDIR)/libgstopensles_la-openslessrc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslessrc.c' object='libgstopensles_la-openslessrc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslessrc.lo `test -f 'openslessrc.c' || echo '$(srcdir)/'`openslessrc.c + +libgstopensles_la-opensles.lo: opensles.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-opensles.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-opensles.Tpo -c -o libgstopensles_la-opensles.lo `test -f 'opensles.c' || echo '$(srcdir)/'`opensles.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-opensles.Tpo $(DEPDIR)/libgstopensles_la-opensles.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opensles.c' object='libgstopensles_la-opensles.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-opensles.lo `test -f 'opensles.c' || echo '$(srcdir)/'`opensles.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(plugindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pluginLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-pluginLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-pluginLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pluginLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-pluginLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/sys/opensles/opensles.c b/sys/opensles/opensles.c new file mode 100644 index 00000000..03af1d3a --- /dev/null +++ b/sys/opensles/opensles.c @@ -0,0 +1,46 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "openslessink.h" +#include "openslessrc.h" + +static gboolean +plugin_init (GstPlugin * plugin) +{ + if (!gst_element_register (plugin, "openslessink", GST_RANK_PRIMARY, + GST_TYPE_OPENSLES_SINK)) { + return FALSE; + } + if (!gst_element_register (plugin, "openslessrc", GST_RANK_PRIMARY, + GST_TYPE_OPENSLES_SRC)) { + return FALSE; + } + + return TRUE; +} + +GST_PLUGIN_DEFINE2 (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + opensles, + "OpenSL ES support for GStreamer", + plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/sys/opensles/openslesringbuffer.c b/sys/opensles/openslesringbuffer.c new file mode 100644 index 00000000..8038821a --- /dev/null +++ b/sys/opensles/openslesringbuffer.c @@ -0,0 +1,997 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "openslesringbuffer.h" + +GST_DEBUG_CATEGORY_STATIC (opensles_ringbuffer_debug); +#define GST_CAT_DEFAULT opensles_ringbuffer_debug + +static GstRingBufferClass *ring_parent_class = NULL; + +static void +_do_init (GType type) +{ + GST_DEBUG_CATEGORY_INIT (opensles_ringbuffer_debug, + "opensles_ringbuffer", 0, "OpenSL ES ringbuffer"); +} + +GST_BOILERPLATE_FULL (GstOpenSLESRingBuffer, gst_opensles_ringbuffer, + GstRingBuffer, GST_TYPE_RING_BUFFER, _do_init); + +/* + * Some generic helper functions + */ + +static inline SLuint32 +_opensles_sample_rate (guint rate) +{ + switch (rate) { + case 8000: + return SL_SAMPLINGRATE_8; + case 11025: + return SL_SAMPLINGRATE_11_025; + case 12000: + return SL_SAMPLINGRATE_12; + case 16000: + return SL_SAMPLINGRATE_16; + case 22050: + return SL_SAMPLINGRATE_22_05; + case 24000: + return SL_SAMPLINGRATE_24; + case 32000: + return SL_SAMPLINGRATE_32; + case 44100: + return SL_SAMPLINGRATE_44_1; + case 48000: + return SL_SAMPLINGRATE_48; + case 64000: + return SL_SAMPLINGRATE_64; + case 88200: + return SL_SAMPLINGRATE_88_2; + case 96000: + return SL_SAMPLINGRATE_96; + case 192000: + return SL_SAMPLINGRATE_192; + default: + return 0; + } +} + +static inline SLuint32 +_opensles_channel_mask (GstRingBufferSpec * spec) +{ + switch (spec->channels) { + case 1: + return (SL_SPEAKER_FRONT_CENTER); + case 2: + return (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT); + default: + return 0; + } +} + +static inline void +_opensles_format (GstRingBufferSpec * spec, SLDataFormat_PCM * format) +{ + format->formatType = SL_DATAFORMAT_PCM; + format->numChannels = spec->channels; + format->samplesPerSec = _opensles_sample_rate (spec->rate); + format->bitsPerSample = spec->depth; + format->containerSize = spec->width; + format->channelMask = _opensles_channel_mask (spec); + format->endianness = + (spec->bigend ? SL_BYTEORDER_BIGENDIAN : SL_BYTEORDER_LITTLEENDIAN); +} + +/* + * Recorder related functions + */ + +static gboolean +_opensles_recorder_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + SLDataFormat_PCM format; + + /* Configure audio source */ + SLDataLocator_IODevice loc_dev = { + SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, + SL_DEFAULTDEVICEID_AUDIOINPUT, NULL + }; + SLDataSource audioSrc = { &loc_dev, NULL }; + + /* Configure audio sink */ + SLDataLocator_AndroidSimpleBufferQueue loc_bq = { + SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2 + }; + SLDataSink audioSink = { &loc_bq, &format }; + + /* Required optional interfaces */ + const SLInterfaceID id[1] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; + const SLboolean req[1] = { SL_BOOLEAN_TRUE }; + + /* Define the audio format in OpenSL ES terminology */ + _opensles_format (spec, &format); + + /* Create the audio recorder object (requires the RECORD_AUDIO permission) */ + result = (*thiz->engineEngine)->CreateAudioRecorder (thiz->engineEngine, + &thiz->recorderObject, &audioSrc, &audioSink, 1, id, req); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "engine.CreateAudioRecorder failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Realize the audio recorder object */ + result = + (*thiz->recorderObject)->Realize (thiz->recorderObject, SL_BOOLEAN_FALSE); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "recorder.Realize failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Get the record interface */ + result = (*thiz->recorderObject)->GetInterface (thiz->recorderObject, + SL_IID_RECORD, &thiz->recorderRecord); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "recorder.GetInterface(Record) failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Get the buffer queue interface */ + result = + (*thiz->recorderObject)->GetInterface (thiz->recorderObject, + SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &thiz->bufferQueue); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "recorder.GetInterface(BufferQueue) failed(0x%08x)", + (guint32) result); + goto failed; + } + + return TRUE; + +failed: + return FALSE; +} + +/* This callback function is executed when the ringbuffer is started to preroll + * the output buffer queue with empty buffers, from app thread, and each time + * there's a filled buffer, from audio device processing thread, + * the callback behaviour. + */ +static void +_opensles_recorder_cb (SLAndroidSimpleBufferQueueItf bufferQueue, void *context) +{ + GstRingBuffer *rb = GST_RING_BUFFER_CAST (context); + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + guint8 *ptr; + gint seg; + gint len; + + /* Advance only when we are called by the callback function */ + if (bufferQueue) { + gst_ring_buffer_advance (rb, 1); + } + + /* Get a segment form the GStreamer ringbuffer to write in */ + if (!gst_ring_buffer_prepare_read (rb, &seg, &ptr, &len)) { + GST_WARNING_OBJECT (rb, "No segment available"); + return; + } + + GST_LOG_OBJECT (thiz, "enqueue: %p size %d segment: %d", ptr, len, seg); + + /* Enqueue the sefment as buffer to be written */ + result = (*thiz->bufferQueue)->Enqueue (thiz->bufferQueue, ptr, len); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.Enqueue failed(0x%08x)", + (guint32) result); + return; + } +} + +static gboolean +_opensles_recorder_start (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + + /* Register callback on the buffer queue */ + if (!thiz->is_queue_callback_registered) { + result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue, + _opensles_recorder_cb, rb); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)", + (guint32) result); + return FALSE; + } + thiz->is_queue_callback_registered = TRUE; + } + + /* Preroll one buffer */ + _opensles_recorder_cb (NULL, rb); + + /* Start recording */ + result = + (*thiz->recorderRecord)->SetRecordState (thiz->recorderRecord, + SL_RECORDSTATE_RECORDING); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "recorder.SetRecordState failed(0x%08x)", + (guint32) result); + return FALSE; + } + + return TRUE; +} + +static gboolean +_opensles_recorder_stop (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + + /* Stop recording */ + result = + (*thiz->recorderRecord)->SetRecordState (thiz->recorderRecord, + SL_RECORDSTATE_STOPPED); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "recorder.SetRecordState failed(0x%08x)", + (guint32) result); + return FALSE; + } + + /* Unregister callback on the buffer queue */ + result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue, + NULL, NULL); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)", + (guint32) result); + return FALSE; + } + thiz->is_queue_callback_registered = FALSE; + + /* Reset the queue */ + result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)", + (guint32) result); + return FALSE; + } + + return TRUE; +} + +/* + * Player related functions + */ + +static gboolean +_opensles_player_change_volume (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + SLresult result; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + if (thiz->playerVolume) { + gint millibel = (1.0 - thiz->volume) * -5000.0; + result = + (*thiz->playerVolume)->SetVolumeLevel (thiz->playerVolume, millibel); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetVolumeLevel failed(0x%08x)", + (guint32) result); + return FALSE; + } + GST_DEBUG_OBJECT (thiz, "changed volume to %d", millibel); + } + + return TRUE; +} + +static gboolean +_opensles_player_change_mute (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + SLresult result; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + if (thiz->playerVolume) { + result = (*thiz->playerVolume)->SetMute (thiz->playerVolume, thiz->mute); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetMute failed(0x%08x)", + (guint32) result); + return FALSE; + } + GST_DEBUG_OBJECT (thiz, "changed mute to %d", thiz->mute); + } + + return TRUE; +} + +/* This is a callback function invoked by the playback device thread and + * it's used to monitor position changes */ +static void +_opensles_player_event_cb (SLPlayItf caller, void *context, SLuint32 event) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (context); + + if (event & SL_PLAYEVENT_HEADATNEWPOS) { + SLmillisecond position; + + (*caller)->GetPosition (caller, &position); + GST_LOG_OBJECT (thiz, "at position=%u ms", (guint) position); + } +} + +static gboolean +_opensles_player_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + SLDataFormat_PCM format; + + /* Configure audio source */ + SLDataLocator_AndroidSimpleBufferQueue loc_bufq = { + SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, + MIN (32, (spec->segtotal >> 1)) + }; + SLDataSource audioSrc = { &loc_bufq, &format }; + + /* Configure audio sink */ + SLDataLocator_OutputMix loc_outmix = { + SL_DATALOCATOR_OUTPUTMIX, thiz->outputMixObject + }; + SLDataSink audioSink = { &loc_outmix, NULL }; + + /* Define the required interfaces */ + const SLInterfaceID ids[2] = { SL_IID_BUFFERQUEUE, SL_IID_VOLUME }; + const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE }; + + /* Define the format in OpenSL ES terminology */ + _opensles_format (spec, &format); + + /* Create the player object */ + result = (*thiz->engineEngine)->CreateAudioPlayer (thiz->engineEngine, + &thiz->playerObject, &audioSrc, &audioSink, 2, ids, req); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "engine.CreateAudioPlayer failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Realize the player object */ + result = + (*thiz->playerObject)->Realize (thiz->playerObject, SL_BOOLEAN_FALSE); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.Realize failed(0x%08x)", (guint32) result); + goto failed; + } + + /* Get the play interface */ + result = (*thiz->playerObject)->GetInterface (thiz->playerObject, + SL_IID_PLAY, &thiz->playerPlay); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.GetInterface(Play) failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Get the buffer queue interface */ + result = (*thiz->playerObject)->GetInterface (thiz->playerObject, + SL_IID_BUFFERQUEUE, &thiz->bufferQueue); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.GetInterface(BufferQueue) failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Get the volume interface */ + result = (*thiz->playerObject)->GetInterface (thiz->playerObject, + SL_IID_VOLUME, &thiz->playerVolume); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.GetInterface(Volume) failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Request position update events at each 20 ms */ + result = (*thiz->playerPlay)->SetPositionUpdatePeriod (thiz->playerPlay, 20); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetPositionUpdatePeriod failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Define the event mask to be monitorized */ + result = (*thiz->playerPlay)->SetCallbackEventsMask (thiz->playerPlay, + SL_PLAYEVENT_HEADATNEWPOS); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetCallbackEventsMask failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Register a callback to process the events */ + result = (*thiz->playerPlay)->RegisterCallback (thiz->playerPlay, + _opensles_player_event_cb, thiz); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.RegisterCallback(event_cb) failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Configure the volume and mute state */ + _opensles_player_change_volume (rb); + _opensles_player_change_mute (rb); + + /* Allocate the queue associated ringbuffer memory */ + thiz->data_segtotal = loc_bufq.numBuffers; + thiz->data_size = spec->segsize * thiz->data_segtotal; + thiz->data = g_malloc0 (thiz->data_size); + g_atomic_int_set (&thiz->segqueued, 0); + g_atomic_int_set (&thiz->is_prerolled, 0); + thiz->cursor = 0; + + return TRUE; + +failed: + return FALSE; +} + +/* This callback function is executed when the ringbuffer is started to preroll + * the input buffer queue with few buffers, from app thread, and each time + * that rendering of one buffer finishes, from audio device processing thread, + * the callback behaviour. + * + * We wrap the queue behaviour with an appropriate chunk of memory (queue len * + * ringbuffer segment size) which is used to hold the audio data while it's + * being processed in the queue. The memory region is used whit a ringbuffer + * behaviour. + */ +static void +_opensles_player_cb (SLAndroidSimpleBufferQueueItf bufferQueue, void *context) +{ + GstRingBuffer *rb = GST_RING_BUFFER_CAST (context); + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + guint8 *ptr, *cur; + gint seg; + gint len; + + /* Get a segment form the GStreamer ringbuffer to read some samples */ + if (!gst_ring_buffer_prepare_read (rb, &seg, &ptr, &len)) { + GST_WARNING_OBJECT (rb, "No segment available"); + return; + } + + /* copy the segment data to our queue associated ringbuffer memory */ + cur = thiz->data + (thiz->cursor * rb->spec.segsize); + memcpy (cur, ptr, len); + g_atomic_int_inc (&thiz->segqueued); + + GST_LOG_OBJECT (thiz, "enqueue: %p size %d segment: %d in queue[%d]", + cur, len, seg, thiz->cursor); + /* advance the cursor in our queue associated ringbuffer */ + thiz->cursor = (thiz->cursor + 1) % thiz->data_segtotal; + + /* Enqueue the buffer to be rendered */ + result = (*thiz->bufferQueue)->Enqueue (thiz->bufferQueue, cur, len); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.Enqueue failed(0x%08x)", + (guint32) result); + return; + } + + /* Fill with silence samples the segment of the GStreamer ringbuffer */ + gst_ring_buffer_clear (rb, seg); + /* Make the segment reusable */ + gst_ring_buffer_advance (rb, 1); +} + +static gboolean +_opensles_player_start (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + gint i; + + /* Register callback on the buffer queue */ + if (!thiz->is_queue_callback_registered) { + result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue, + _opensles_player_cb, rb); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)", + (guint32) result); + return FALSE; + } + thiz->is_queue_callback_registered = TRUE; + } + + /* Fill the queue by enqueing buffers */ + if (!g_atomic_int_get (&thiz->is_prerolled)) { + for (i = 0; i < thiz->data_segtotal; i++) { + _opensles_player_cb (NULL, rb); + } + g_atomic_int_set (&thiz->is_prerolled, 1); + } + + /* Change player state into PLAYING */ + result = + (*thiz->playerPlay)->SetPlayState (thiz->playerPlay, + SL_PLAYSTATE_PLAYING); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)", + (guint32) result); + return FALSE; + } + + return TRUE; +} + +static gboolean +_opensles_player_pause (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + + result = + (*thiz->playerPlay)->SetPlayState (thiz->playerPlay, SL_PLAYSTATE_PAUSED); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)", + (guint32) result); + return FALSE; + } + + return TRUE; +} + +static gboolean +_opensles_player_stop (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + SLresult result; + + /* Change player state into STOPPED */ + result = + (*thiz->playerPlay)->SetPlayState (thiz->playerPlay, + SL_PLAYSTATE_STOPPED); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)", + (guint32) result); + return FALSE; + } + + /* Unregister callback on the buffer queue */ + result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue, + NULL, NULL); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)", + (guint32) result); + return FALSE; + } + thiz->is_queue_callback_registered = FALSE; + + /* Reset the queue */ + result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)", + (guint32) result); + return FALSE; + } + + /* Reset our state */ + g_atomic_int_set (&thiz->segqueued, 0); + thiz->cursor = 0; + + return TRUE; +} + +/* + * OpenSL ES ringbuffer wrapper + */ + +GstRingBuffer * +gst_opensles_ringbuffer_new (RingBufferMode mode) +{ + GstOpenSLESRingBuffer *thiz; + + g_return_val_if_fail (mode > RB_MODE_NONE && mode < RB_MODE_LAST, NULL); + + thiz = g_object_new (GST_TYPE_OPENSLES_RING_BUFFER, NULL); + + if (thiz) { + thiz->mode = mode; + if (mode == RB_MODE_SRC) { + thiz->acquire = _opensles_recorder_acquire; + thiz->start = _opensles_recorder_start; + thiz->pause = _opensles_recorder_stop; + thiz->stop = _opensles_recorder_stop; + thiz->change_volume = NULL; + } else if (mode == RB_MODE_SINK_PCM) { + thiz->acquire = _opensles_player_acquire; + thiz->start = _opensles_player_start; + thiz->pause = _opensles_player_pause; + thiz->stop = _opensles_player_stop; + thiz->change_volume = _opensles_player_change_volume; + } + } + + GST_DEBUG_OBJECT (thiz, "ringbuffer created"); + + return GST_RING_BUFFER (thiz); +} + +void +gst_opensles_ringbuffer_set_volume (GstRingBuffer * rb, gfloat volume) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + thiz->volume = volume; + + if (thiz->change_volume) { + thiz->change_volume (rb); + } +} + +void +gst_opensles_ringbuffer_set_mute (GstRingBuffer * rb, gboolean mute) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + thiz->mute = mute; + + if (thiz->change_mute) { + thiz->change_mute (rb); + } +} + +static gboolean +gst_opensles_ringbuffer_open_device (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + SLresult result; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + /* Create the engine object */ + result = slCreateEngine (&thiz->engineObject, 0, NULL, 0, NULL, NULL); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "slCreateEngine failed(0x%08x)", (guint32) result); + goto failed; + } + + /* Realize the engine object */ + result = (*thiz->engineObject)->Realize (thiz->engineObject, + SL_BOOLEAN_FALSE); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "engine.Realize failed(0x%08x)", (guint32) result); + goto failed; + } + + /* Get the engine interface, which is needed in order to create other objects */ + result = (*thiz->engineObject)->GetInterface (thiz->engineObject, + SL_IID_ENGINE, &thiz->engineEngine); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "engine.GetInterface(Engine) failed(0x%08x)", + (guint32) result); + goto failed; + } + + if (thiz->mode == RB_MODE_SINK_PCM) { + SLOutputMixItf outputMix; + + /* Create an output mixer object */ + result = (*thiz->engineEngine)->CreateOutputMix (thiz->engineEngine, + &thiz->outputMixObject, 0, NULL, NULL); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "engine.CreateOutputMix failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Realize the output mixer object */ + result = (*thiz->outputMixObject)->Realize (thiz->outputMixObject, + SL_BOOLEAN_FALSE); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (thiz, "outputMix.Realize failed(0x%08x)", + (guint32) result); + goto failed; + } + + /* Get the mixer interface */ + result = (*thiz->outputMixObject)->GetInterface (thiz->outputMixObject, + SL_IID_OUTPUTMIX, &outputMix); + if (result != SL_RESULT_SUCCESS) { + GST_WARNING_OBJECT (thiz, "outputMix.GetInterface failed(0x%08x)", + (guint32) result); + } else { + SLint32 numDevices = 0; + SLuint32 deviceIDs[MAX_NUMBER_OUTPUT_DEVICES]; + gint i; + + /* Query the list of output devices */ + (*outputMix)->GetDestinationOutputDeviceIDs (outputMix, &numDevices, + deviceIDs); + GST_DEBUG_OBJECT (thiz, "Found %d output devices", (gint) numDevices); + for (i = 0; i < numDevices; i++) { + GST_DEBUG_OBJECT (thiz, " DeviceID: %08x", (guint) deviceIDs[i]); + } + } + } + + GST_DEBUG_OBJECT (thiz, "device opened"); + return TRUE; + +failed: + return FALSE; +} + +static gboolean +gst_opensles_ringbuffer_close_device (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + /* Destroy the output mix object */ + if (thiz->outputMixObject) { + (*thiz->outputMixObject)->Destroy (thiz->outputMixObject); + thiz->outputMixObject = NULL; + } + + /* Destroy the engine object and invalidate all associated interfaces */ + if (thiz->engineObject) { + (*thiz->engineObject)->Destroy (thiz->engineObject); + thiz->engineObject = NULL; + thiz->engineEngine = NULL; + } + + thiz->bufferQueue = NULL; + + GST_DEBUG_OBJECT (thiz, "device closed"); + return TRUE; +} + +static gboolean +gst_opensles_ringbuffer_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + /* Instantiate and configure the OpenSL ES interfaces */ + if (!thiz->acquire (rb, spec)) { + return FALSE; + } + + /* Initialize our ringbuffer memory region */ + rb->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize); + memset (GST_BUFFER_DATA (rb->data), 0, GST_BUFFER_SIZE (rb->data)); + + GST_DEBUG_OBJECT (thiz, "ringbuffer acquired"); + return TRUE; +} + +static gboolean +gst_opensles_ringbuffer_release (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER (rb); + + /* Destroy audio player object, and invalidate all associated interfaces */ + if (thiz->playerObject) { + (*thiz->playerObject)->Destroy (thiz->playerObject); + thiz->playerObject = NULL; + thiz->playerPlay = NULL; + thiz->playerVolume = NULL; + } + + /* Destroy audio recorder object, and invalidate all associated interfaces */ + if (thiz->recorderObject) { + (*thiz->recorderObject)->Destroy (thiz->recorderObject); + thiz->recorderObject = NULL; + thiz->recorderRecord = NULL; + } + + if (thiz->data) { + g_free (thiz->data); + thiz->data = NULL; + } + + if (rb->data) { + gst_buffer_unref (rb->data); + rb->data = NULL; + } + + GST_DEBUG_OBJECT (thiz, "ringbuffer released"); + return TRUE; +} + +static gboolean +gst_opensles_ringbuffer_start (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + gboolean res; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + res = thiz->start (rb); + + GST_DEBUG_OBJECT (thiz, "ringbuffer %s started", (res ? "" : "not")); + return res; +} + +static gboolean +gst_opensles_ringbuffer_pause (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + gboolean res; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + res = thiz->pause (rb); + + GST_DEBUG_OBJECT (thiz, "ringbuffer %s paused", (res ? "" : "not")); + return res; +} + +static gboolean +gst_opensles_ringbuffer_stop (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + gboolean res; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + res = thiz->stop (rb); + + GST_DEBUG_OBJECT (thiz, "ringbuffer %s stopped", (res ? " " : "not")); + return res; +} + +static guint +gst_opensles_ringbuffer_delay (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + guint res = 0; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + if (thiz->playerPlay) { + SLuint32 state; + SLmillisecond position; + guint64 playedpos = 0, queuedpos = 0; + (*thiz->playerPlay)->GetPlayState (thiz->playerPlay, &state); + if (state == SL_PLAYSTATE_PLAYING) { + (*thiz->playerPlay)->GetPosition (thiz->playerPlay, &position); + playedpos = gst_util_uint64_scale_round (position, rb->spec.rate, 1000); + queuedpos = g_atomic_int_get (&thiz->segqueued) * rb->samples_per_seg; + res = queuedpos - playedpos; + } + + GST_LOG_OBJECT (thiz, "queued samples %" G_GUINT64_FORMAT " position %u ms " + "(%" G_GUINT64_FORMAT " samples) delay %u samples", + queuedpos, (guint) position, playedpos, res); + } + + return res; +} + +static void +gst_opensles_ringbuffer_clear_all (GstRingBuffer * rb) +{ + GstOpenSLESRingBuffer *thiz; + + thiz = GST_OPENSLES_RING_BUFFER_CAST (rb); + + if (thiz->data) { + SLresult result; + + memset (thiz->data, 0, thiz->data_size); + g_atomic_int_set (&thiz->segqueued, 0); + thiz->cursor = 0; + /* Reset the queue */ + result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue); + if (result != SL_RESULT_SUCCESS) { + GST_WARNING_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)", + (guint32) result); + } + g_atomic_int_set (&thiz->is_prerolled, 0); + } + + GST_CALL_PARENT (GST_RING_BUFFER_CLASS, clear_all, (rb)); +} + +static void +gst_opensles_ringbuffer_dispose (GObject * object) +{ + G_OBJECT_CLASS (ring_parent_class)->dispose (object); +} + +static void +gst_opensles_ringbuffer_finalize (GObject * object) +{ + G_OBJECT_CLASS (ring_parent_class)->finalize (object); +} + +static void +gst_opensles_ringbuffer_base_init (gpointer g_class) +{ + /* Nothing to do right now */ +} + +static void +gst_opensles_ringbuffer_class_init (GstOpenSLESRingBufferClass * klass) +{ + GObjectClass *gobject_class; + GstRingBufferClass *gstringbuffer_class; + + gobject_class = (GObjectClass *) klass; + gstringbuffer_class = (GstRingBufferClass *) klass; + + ring_parent_class = g_type_class_peek_parent (klass); + + gobject_class->dispose = gst_opensles_ringbuffer_dispose; + gobject_class->finalize = gst_opensles_ringbuffer_finalize; + + gstringbuffer_class->open_device = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_open_device); + gstringbuffer_class->close_device = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_close_device); + gstringbuffer_class->acquire = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_acquire); + gstringbuffer_class->release = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_release); + gstringbuffer_class->start = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_start); + gstringbuffer_class->pause = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_pause); + gstringbuffer_class->resume = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_start); + gstringbuffer_class->stop = GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_stop); + gstringbuffer_class->delay = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_delay); + gstringbuffer_class->clear_all = + GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_clear_all); +} + +static void +gst_opensles_ringbuffer_init (GstOpenSLESRingBuffer * thiz, + GstOpenSLESRingBufferClass * g_class) +{ + thiz->mode = RB_MODE_NONE; + thiz->engineObject = NULL; + thiz->outputMixObject = NULL; + thiz->playerObject = NULL; + thiz->recorderObject = NULL; + thiz->is_queue_callback_registered = FALSE; +} diff --git a/sys/opensles/openslesringbuffer.h b/sys/opensles/openslesringbuffer.h new file mode 100644 index 00000000..7da6563d --- /dev/null +++ b/sys/opensles/openslesringbuffer.h @@ -0,0 +1,117 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __OPENSLESRINGBUFFER_H__ +#define __OPENSLESRINGBUFFER_H__ + +#include <gst/gst.h> +#include <gst/audio/gstringbuffer.h> + +#include <SLES/OpenSLES.h> +#include <SLES/OpenSLES_Android.h> + +G_BEGIN_DECLS + +#define MAX_NUMBER_OUTPUT_DEVICES 16 + +#define GST_TYPE_OPENSLES_RING_BUFFER \ + (gst_opensles_ringbuffer_get_type()) +#define GST_OPENSLES_RING_BUFFER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBuffer)) +#define GST_OPENSLES_RING_BUFFER_CAST(obj) \ + ((GstOpenSLESRingBuffer*) obj) +#define GST_OPENSLES_RING_BUFFER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBufferClass)) +#define GST_OPENSLES_RING_BUFFER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBufferClass)) +#define GST_IS_OPENSLES_RING_BUFFER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OPENSLES_RING_BUFFER)) +#define GST_IS_OPENSLES_RING_BUFFER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OPENSLES_RING_BUFFER)) + +typedef enum +{ + RB_MODE_NONE = 0, + RB_MODE_SRC, + RB_MODE_SINK_PCM, + RB_MODE_SINK_COMPRESSED, + RB_MODE_LAST +} RingBufferMode; + +typedef gboolean (*AcquireFunc) (GstRingBuffer * rb, GstRingBufferSpec * spec); +typedef gboolean (*StateFunc) (GstRingBuffer * rb); + +typedef struct _GstOpenSLESRingBuffer GstOpenSLESRingBuffer; +typedef struct _GstOpenSLESRingBufferClass GstOpenSLESRingBufferClass; + +struct _GstOpenSLESRingBuffer +{ + GstRingBuffer object; + + RingBufferMode mode; + + /* engine interfaces */ + SLObjectItf engineObject; + SLEngineItf engineEngine; + + /* outputMixObject */ + SLObjectItf outputMixObject; + + /* player interfaces */ + SLObjectItf playerObject; + SLPlayItf playerPlay; + SLVolumeItf playerVolume; + gfloat volume; + gboolean mute; + gint is_prerolled; /* ATOMIC */ + + /* recorder interfaces */ + SLObjectItf recorderObject; + SLRecordItf recorderRecord; + + /* buffer queue */ + SLAndroidSimpleBufferQueueItf bufferQueue; + guint data_segtotal; + guint8 * data; + guint data_size; + guint cursor; + gint segqueued; /* ATOMIC */ + gboolean is_queue_callback_registered; + + /* vmethods */ + AcquireFunc acquire; + StateFunc start; + StateFunc pause; + StateFunc stop; + StateFunc change_volume; + StateFunc change_mute; +}; + +struct _GstOpenSLESRingBufferClass +{ + GstRingBufferClass parent_class; +}; + +GType gst_opensles_ringbuffer_get_type (void); +GstRingBuffer *gst_opensles_ringbuffer_new (RingBufferMode mode); +void gst_opensles_ringbuffer_set_volume (GstRingBuffer * rb, gfloat volume); +void gst_opensles_ringbuffer_set_mute (GstRingBuffer * rb, gboolean mute); + +G_END_DECLS +#endif /* __OPENSLESRINGBUFFER_H__ */ diff --git a/sys/opensles/openslessink.c b/sys/opensles/openslessink.c new file mode 100644 index 00000000..625fc091 --- /dev/null +++ b/sys/opensles/openslessink.c @@ -0,0 +1,289 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:element-openslessink + * @see_also: openslessrc + * + * This element renders raw audio samples using the OpenSL ES API in Android OS. + * + * <refsect2> + * <title>Example pipelines</title> + * |[ + * gst-launch -v filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! opeslessink + * ]| Play an Ogg/Vorbis file. + * </refsect2> + * + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "openslessink.h" + +GST_DEBUG_CATEGORY_STATIC (opensles_sink_debug); +#define GST_CAT_DEFAULT opensles_sink_debug + +enum +{ + PROP_0, + PROP_VOLUME, + PROP_MUTE, + PROP_LAST +}; + +#define DEFAULT_VOLUME 1.0 +#define DEFAULT_MUTE FALSE + + +/* According to Android's NDK doc the following are the supported rates */ +#define RATES "8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100" +/* 48000 Hz is also claimed to be supported but the AudioFlinger downsampling + * doesn't seems to work properly so we relay GStreamer audioresample element + * to cope with this samplerate. */ + +static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw-int, " + "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, " + "signed = (boolean) { TRUE }, " + "width = (int) 16, " + "depth = (int) 16, " + "rate = (int) { " RATES "}, " + "channels = (int) [1, 2];" + "audio/x-raw-int, " + "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, " + "signed = (boolean) { FALSE }, " + "width = (int) 8, " + "depth = (int) 8, " + "rate = (int) { " RATES "}, " "channels = (int) [1, 2]") + ); + +static void +_do_init (GType type) +{ + GST_DEBUG_CATEGORY_INIT (opensles_sink_debug, "opensles_sink", 0, + "OpenSL ES Sink"); +} + +GST_BOILERPLATE_FULL (GstOpenSLESSink, gst_opensles_sink, GstBaseAudioSink, + GST_TYPE_BASE_AUDIO_SINK, _do_init); + +static void +gst_opensles_sink_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + + gst_element_class_add_static_pad_template (element_class, &sink_factory); + + gst_element_class_set_details_simple (element_class, "OpenSL ES Sink", + "Sink/Audio", + "Output sound using the OpenSL ES APIs", + "Josep Torra <support@fluendo.com>"); +} + +static GstRingBuffer * +gst_opensles_sink_create_ringbuffer (GstBaseAudioSink * base) +{ + GstOpenSLESSink *sink = GST_OPENSLES_SINK (base); + GstRingBuffer *rb; + + rb = gst_opensles_ringbuffer_new (RB_MODE_SINK_PCM); + gst_opensles_ringbuffer_set_volume (rb, sink->volume); + gst_opensles_ringbuffer_set_mute (rb, sink->mute); + return rb; +} + +#define AUDIO_OUTPUT_DESC_FORMAT \ + "deviceName: %s deviceConnection: %d deviceScope: %d deviceLocation: %d " \ + "isForTelephony: %d minSampleRate: %d maxSampleRate: %d " \ + "isFreqRangeContinuous: %d maxChannels: %d" + +#define AUDIO_OUTPUT_DESC_ARGS(aod) \ + (gchar*) (aod)->pDeviceName, (gint) (aod)->deviceConnection, \ + (gint) (aod)->deviceScope, (gint) (aod)->deviceLocation, \ + (gint) (aod)->isForTelephony, (gint) (aod)->minSampleRate, \ + (gint) (aod)->maxSampleRate, (gint) (aod)->isFreqRangeContinuous, \ + (gint) (aod)->maxChannels + +static gboolean +_opensles_query_capabilities (GstOpenSLESSink * sink) +{ + gboolean res = FALSE; + SLresult result; + SLObjectItf engineObject = NULL; + SLAudioIODeviceCapabilitiesItf audioIODeviceCapabilities; + SLint32 i, j, numOutputs = MAX_NUMBER_OUTPUT_DEVICES; + SLuint32 outputDeviceIDs[MAX_NUMBER_OUTPUT_DEVICES]; + SLAudioOutputDescriptor audioOutputDescriptor; + + /* Create engine */ + result = slCreateEngine (&engineObject, 0, NULL, 0, NULL, NULL); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (sink, "slCreateEngine failed(0x%08x)", (guint32) result); + goto beach; + } + + /* Realize the engine */ + result = (*engineObject)->Realize (engineObject, SL_BOOLEAN_FALSE); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (sink, "engine.Realize failed(0x%08x)", (guint32) result); + goto beach; + } + + /* Get the engine interface, which is needed in order to create other objects */ + result = (*engineObject)->GetInterface (engineObject, + SL_IID_AUDIOIODEVICECAPABILITIES, &audioIODeviceCapabilities); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (sink, + "engine.GetInterface(IODeviceCapabilities) failed(0x%08x)", + (guint32) result); + goto beach; + } + + /* Query the list of available audio outputs */ + result = (*audioIODeviceCapabilities)->GetAvailableAudioOutputs + (audioIODeviceCapabilities, &numOutputs, outputDeviceIDs); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (sink, + "IODeviceCapabilities.GetAvailableAudioOutputs failed(0x%08x)", + (guint32) result); + goto beach; + } + + GST_DEBUG_OBJECT (sink, "Found %d output devices", (gint32) numOutputs); + + for (i = 0; i < numOutputs; i++) { + result = (*audioIODeviceCapabilities)->QueryAudioOutputCapabilities + (audioIODeviceCapabilities, outputDeviceIDs[i], &audioOutputDescriptor); + if (result != SL_RESULT_SUCCESS) { + GST_ERROR_OBJECT (sink, + "IODeviceCapabilities.QueryAudioOutputCapabilities failed(0x%08x)", + (guint32) result); + continue; + } + + GST_DEBUG_OBJECT (sink, " ID: %08x " AUDIO_OUTPUT_DESC_FORMAT, + (guint) outputDeviceIDs[i], + AUDIO_OUTPUT_DESC_ARGS (&audioOutputDescriptor)); + GST_DEBUG_OBJECT (sink, " Found %d supported sample rated", + audioOutputDescriptor.numOfSamplingRatesSupported); + + for (j = 0; j < audioOutputDescriptor.numOfSamplingRatesSupported; j++) { + GST_DEBUG_OBJECT (sink, " %d Hz", + (gint) audioOutputDescriptor.samplingRatesSupported[j]); + } + } + + res = TRUE; +beach: + /* Destroy the engine object */ + if (engineObject) { + (*engineObject)->Destroy (engineObject); + } + + return res; +} + +static void +gst_opensles_sink_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstOpenSLESSink *sink = GST_OPENSLES_SINK (object); + GstRingBuffer *rb = GST_BASE_AUDIO_SINK (sink)->ringbuffer; + + switch (prop_id) { + case PROP_VOLUME: + sink->volume = g_value_get_double (value); + if (rb && GST_IS_OPENSLES_RING_BUFFER (rb)) { + gst_opensles_ringbuffer_set_volume (rb, sink->volume); + } + break; + case PROP_MUTE: + sink->mute = g_value_get_boolean (value); + if (rb && GST_IS_OPENSLES_RING_BUFFER (rb)) { + gst_opensles_ringbuffer_set_mute (rb, sink->mute); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_opensles_sink_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstOpenSLESSink *sink = GST_OPENSLES_SINK (object); + switch (prop_id) { + case PROP_VOLUME: + g_value_set_double (value, sink->volume); + break; + case PROP_MUTE: + g_value_set_boolean (value, sink->mute); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_opensles_sink_class_init (GstOpenSLESSinkClass * klass) +{ + GObjectClass *gobject_class; + GstBaseAudioSinkClass *gstbaseaudiosink_class; + + gobject_class = (GObjectClass *) klass; + gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass; + + parent_class = g_type_class_peek_parent (klass); + + gobject_class->set_property = gst_opensles_sink_set_property; + gobject_class->get_property = gst_opensles_sink_get_property; + + g_object_class_install_property (gobject_class, PROP_VOLUME, + g_param_spec_double ("volume", "Volume", "Volume of this stream", + 0, 1.0, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_MUTE, + g_param_spec_boolean ("mute", "Mute", "Mute state of this stream", + DEFAULT_MUTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gstbaseaudiosink_class->create_ringbuffer = + GST_DEBUG_FUNCPTR (gst_opensles_sink_create_ringbuffer); +} + +static void +gst_opensles_sink_init (GstOpenSLESSink * sink, GstOpenSLESSinkClass * gclass) +{ + sink->volume = DEFAULT_VOLUME; + sink->mute = DEFAULT_MUTE; + + _opensles_query_capabilities (sink); + + gst_base_audio_sink_set_provide_clock (GST_BASE_AUDIO_SINK (sink), TRUE); + /* Override some default values to fit on the AudioFlinger behaviour of + * processing 20ms buffers as minimum buffer size. */ + GST_BASE_AUDIO_SINK (sink)->buffer_time = 400000; + GST_BASE_AUDIO_SINK (sink)->latency_time = 20000; +} diff --git a/sys/opensles/openslessink.h b/sys/opensles/openslessink.h new file mode 100644 index 00000000..da9e6064 --- /dev/null +++ b/sys/opensles/openslessink.h @@ -0,0 +1,55 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __OPENSLESSINK_H__ +#define __OPENSLESSINK_H__ + +#include <gst/gst.h> +#include <gst/audio/gstbaseaudiosink.h> +#include "openslesringbuffer.h" + +G_BEGIN_DECLS + +#define GST_TYPE_OPENSLES_SINK \ + (gst_opensles_sink_get_type()) +#define GST_OPENSLES_SINK(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_SINK,GstOpenSLESSink)) +#define GST_OPENSLES_SINK_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_SINK,GstOpenSLESSinkClass)) + +typedef struct _GstOpenSLESSink GstOpenSLESSink; +typedef struct _GstOpenSLESSinkClass GstOpenSLESSinkClass; + +struct _GstOpenSLESSink +{ + GstBaseAudioSink sink; + + gfloat volume; + gboolean mute; +}; + +struct _GstOpenSLESSinkClass +{ + GstBaseAudioSinkClass parent_class; +}; + +GType gst_opensles_sink_get_type (void); + +G_END_DECLS +#endif /* __OPENSLESSINK_H__ */ diff --git a/sys/opensles/openslessrc.c b/sys/opensles/openslessrc.c new file mode 100644 index 00000000..df697aba --- /dev/null +++ b/sys/opensles/openslessrc.c @@ -0,0 +1,111 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:element-openslessrc + * @see_also: openslessink + * + * This element reads data from default audio input using the OpenSL ES API in Android OS. + * + * <refsect2> + * <title>Example pipelines</title> + * |[ + * gst-launch -v openslessrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=recorded.ogg + * ]| Record from default audio input and encode to Ogg/Vorbis. + * </refsect2> + * + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "openslessrc.h" + +GST_DEBUG_CATEGORY_STATIC (opensles_src_debug); +#define GST_CAT_DEFAULT opensles_src_debug + +/* *INDENT-OFF* */ +static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw-int, " + "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, " + "signed = (boolean) { TRUE }, " + "width = (int) 16, " + "depth = (int) 16, " + "rate = (int) 16000, " + "channels = (int) 1") + ); +/* *INDENT-ON* */ + +static void +_do_init (GType type) +{ + GST_DEBUG_CATEGORY_INIT (opensles_src_debug, "opensles_src", 0, + "OpenSL ES Src"); +} + +GST_BOILERPLATE_FULL (GstOpenSLESSrc, gst_opensles_src, GstBaseAudioSrc, + GST_TYPE_BASE_AUDIO_SRC, _do_init); + +static void +gst_opensles_src_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + + gst_element_class_add_static_pad_template (element_class, &src_factory); + + gst_element_class_set_details_simple (element_class, "OpenSL ES Src", + "Src/Audio", + "Input sound using the OpenSL ES APIs", + "Josep Torra <support@fluendo.com>"); +} + +static GstRingBuffer * +gst_opensles_src_create_ringbuffer (GstBaseAudioSrc * base) +{ + GstRingBuffer *rb; + + rb = gst_opensles_ringbuffer_new (RB_MODE_SRC); + + return rb; +} + +static void +gst_opensles_src_class_init (GstOpenSLESSrcClass * klass) +{ + GstBaseAudioSrcClass *gstbaseaudiosrc_class; + + gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass; + + parent_class = g_type_class_peek_parent (klass); + + gstbaseaudiosrc_class->create_ringbuffer = + GST_DEBUG_FUNCPTR (gst_opensles_src_create_ringbuffer); +} + +static void +gst_opensles_src_init (GstOpenSLESSrc * src, GstOpenSLESSrcClass * gclass) +{ + /* Override some default values to fit on the AudioFlinger behaviour of + * processing 20ms buffers as minimum buffer size. */ + GST_BASE_AUDIO_SRC (src)->buffer_time = 400000; + GST_BASE_AUDIO_SRC (src)->latency_time = 20000; +} diff --git a/sys/opensles/openslessrc.h b/sys/opensles/openslessrc.h new file mode 100644 index 00000000..9f57c933 --- /dev/null +++ b/sys/opensles/openslessrc.h @@ -0,0 +1,52 @@ +/* GStreamer + * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __OPENSLESSRC_H__ +#define __OPENSLESSRC_H__ + +#include <gst/gst.h> +#include <gst/audio/gstbaseaudiosrc.h> +#include "openslesringbuffer.h" + +G_BEGIN_DECLS + +#define GST_TYPE_OPENSLES_SRC \ + (gst_opensles_src_get_type()) +#define GST_OPENSLES_SRC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_SRC,GstOpenSLESSrc)) +#define GST_OPENSLES_SRC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_SRC,GstOpenSLESSrcClass)) + +typedef struct _GstOpenSLESSrc GstOpenSLESSrc; +typedef struct _GstOpenSLESSrcClass GstOpenSLESSrcClass; + +struct _GstOpenSLESSrc +{ + GstBaseAudioSrc src; +}; + +struct _GstOpenSLESSrcClass +{ + GstBaseAudioSrcClass parent_class; +}; + +GType gst_opensles_src_get_type (void); + +G_END_DECLS +#endif /* __OPENSLESSRC_H__ */ diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in index 0372fdf9..b436d353 100644 --- a/sys/osxvideo/Makefile.in +++ b/sys/osxvideo/Makefile.in @@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/osxvideo/osxvideosrc.c b/sys/osxvideo/osxvideosrc.c index 14b70997..79faaf60 100644 --- a/sys/osxvideo/osxvideosrc.c +++ b/sys/osxvideo/osxvideosrc.c @@ -642,7 +642,7 @@ gst_osx_video_src_base_init (gpointer gclass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "Video Source (OSX)", + gst_element_class_set_static_metadata (element_class, "Video Source (OSX)", "Source/Video", "Reads raw frames from a capture device on OS X", "Ole Andre Vadla Ravnaas <ole.andre.ravnas@tandberg.com>, " diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in index 21077e0b..809f9de8 100644 --- a/sys/pvr2d/Makefile.in +++ b/sys/pvr2d/Makefile.in @@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/pvr2d/gstpvrvideosink.c b/sys/pvr2d/gstpvrvideosink.c index 0a93687d..aaacff4d 100644 --- a/sys/pvr2d/gstpvrvideosink.c +++ b/sys/pvr2d/gstpvrvideosink.c @@ -1460,7 +1460,7 @@ gst_pvrvideosink_class_init (GstPVRVideoSinkClass * klass) "original aspect ratio", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "PVR Video sink", "Sink/Video", "A PVR videosink", "Luciana Fujii Pontello <luciana.fujii@collabora.co.uk"); diff --git a/sys/qtwrapper/Makefile.in b/sys/qtwrapper/Makefile.in index fb522231..48083b51 100644 --- a/sys/qtwrapper/Makefile.in +++ b/sys/qtwrapper/Makefile.in @@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in index 9e700e9a..7db20863 100644 --- a/sys/shm/Makefile.in +++ b/sys/shm/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/shm/gstshmsink.c b/sys/shm/gstshmsink.c index 1711e8ea..d760bc56 100644 --- a/sys/shm/gstshmsink.c +++ b/sys/shm/gstshmsink.c @@ -176,7 +176,7 @@ gst_shm_sink_class_init (GstShmSinkClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sinktemplate)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Shared Memory Sink", "Sink", "Send data over shared memory to the matching source", diff --git a/sys/shm/gstshmsrc.c b/sys/shm/gstshmsrc.c index 1c904918..ec6838d8 100644 --- a/sys/shm/gstshmsrc.c +++ b/sys/shm/gstshmsrc.c @@ -134,7 +134,7 @@ gst_shm_src_class_init (GstShmSrcClass * klass) gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&srctemplate)); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Shared Memory Source", "Source", "Receive data from the shared memory sink", diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in index bb72566f..fe22e7ed 100644 --- a/sys/uvch264/Makefile.in +++ b/sys/uvch264/Makefile.in @@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c index 880b4491..e194cdab 100644 --- a/sys/uvch264/gstuvch264_mjpgdemux.c +++ b/sys/uvch264/gstuvch264_mjpgdemux.c @@ -200,7 +200,7 @@ gst_uvc_h264_mjpg_demux_base_init (gpointer g_class) gst_element_class_add_pad_template (element_class, pt); gst_object_unref (pt); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "UVC H264 MJPG Demuxer", "Video/Demuxer", "Demux UVC H264 auxiliary streams from MJPG images", diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c index ac99768d..1b766917 100644 --- a/sys/uvch264/gstuvch264_src.c +++ b/sys/uvch264/gstuvch264_src.c @@ -273,7 +273,7 @@ gst_uvc_h264_src_base_init (gpointer g_class) GST_DEBUG_CATEGORY_INIT (uvc_h264_src_debug, "uvch264_src", 0, "UVC H264 Compliant camera bin source"); - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "UVC H264 Source", "Source/Video", "UVC H264 Encoding camera source", diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in index 77fd285e..c5465651 100644 --- a/sys/vcd/Makefile.in +++ b/sys/vcd/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/vcd/vcdsrc.c b/sys/vcd/vcdsrc.c index 294bd2ad..8c6e6725 100644 --- a/sys/vcd/vcdsrc.c +++ b/sys/vcd/vcdsrc.c @@ -95,7 +95,7 @@ gst_vcdsrc_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "VCD Source", + gst_element_class_set_static_metadata (element_class, "VCD Source", "Source/File", "Asynchronous read from VCD disk", "Erik Walthinsen <omega@cse.ogi.edu>"); diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in index 44124259..099715a2 100644 --- a/sys/vdpau/Makefile.in +++ b/sys/vdpau/Makefile.in @@ -298,6 +298,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/vdpau/basevideodecoder/Makefile.in b/sys/vdpau/basevideodecoder/Makefile.in index 79d7ab35..2c8178b6 100644 --- a/sys/vdpau/basevideodecoder/Makefile.in +++ b/sys/vdpau/basevideodecoder/Makefile.in @@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/vdpau/gstvdp/Makefile.in b/sys/vdpau/gstvdp/Makefile.in index 358c46c5..9ca97a92 100644 --- a/sys/vdpau/gstvdp/Makefile.in +++ b/sys/vdpau/gstvdp/Makefile.in @@ -266,6 +266,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/vdpau/gstvdpsink.c b/sys/vdpau/gstvdpsink.c index ff4f7453..a171b022 100644 --- a/sys/vdpau/gstvdpsink.c +++ b/sys/vdpau/gstvdpsink.c @@ -1385,7 +1385,7 @@ gst_vdp_sink_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "VDPAU Sink", "Sink/Video", "VDPAU Sink", "Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>"); diff --git a/sys/vdpau/gstvdpvideopostprocess.c b/sys/vdpau/gstvdpvideopostprocess.c index 4d76eceb..29466ae8 100644 --- a/sys/vdpau/gstvdpvideopostprocess.c +++ b/sys/vdpau/gstvdpvideopostprocess.c @@ -1179,7 +1179,7 @@ gst_vdp_vpp_base_init (gpointer gclass) GstCaps *src_caps, *sink_caps; GstPadTemplate *src_template, *sink_template; - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "VdpauVideoPostProcess", "Filter/Converter/Decoder/Video", "Post process GstVdpVideoBuffers and output GstVdpOutputBuffers", diff --git a/sys/vdpau/h264/gstvdph264dec.c b/sys/vdpau/h264/gstvdph264dec.c index ba44c6dc..92e33fcd 100644 --- a/sys/vdpau/h264/gstvdph264dec.c +++ b/sys/vdpau/h264/gstvdph264dec.c @@ -866,7 +866,7 @@ gst_vdp_h264_dec_base_init (gpointer g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "VDPAU H264 Decoder", "Decoder", "Decode h264 stream with vdpau", diff --git a/sys/vdpau/mpeg/gstvdpmpegdec.c b/sys/vdpau/mpeg/gstvdpmpegdec.c index ef1210e4..304cb9a3 100644 --- a/sys/vdpau/mpeg/gstvdpmpegdec.c +++ b/sys/vdpau/mpeg/gstvdpmpegdec.c @@ -620,7 +620,7 @@ gst_vdp_mpeg_dec_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "VDPAU Mpeg Decoder", "Decoder", "Decode mpeg stream with vdpau", diff --git a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c index 8ebd8932..fb0a2fd8 100644 --- a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c +++ b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c @@ -439,7 +439,7 @@ gst_vdp_mpeg4_dec_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "VDPAU Mpeg4 Decoder", "Decoder", "Decode mpeg4 stream with vdpau", diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in index a54b3904..49b04112 100644 --- a/sys/wasapi/Makefile.in +++ b/sys/wasapi/Makefile.in @@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c index f8f7103a..307bbe91 100644 --- a/sys/wasapi/gstwasapisink.c +++ b/sys/wasapi/gstwasapisink.c @@ -67,7 +67,7 @@ gst_wasapi_sink_base_init (gpointer gclass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_template)); - gst_element_class_set_metadata (element_class, "WasapiSrc", + gst_element_class_set_static_metadata (element_class, "WasapiSrc", "Sink/Audio", "Stream audio to an audio capture device through WASAPI", "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>"); diff --git a/sys/wasapi/gstwasapisrc.c b/sys/wasapi/gstwasapisrc.c index 7163f520..38a829d3 100644 --- a/sys/wasapi/gstwasapisrc.c +++ b/sys/wasapi/gstwasapisrc.c @@ -71,7 +71,7 @@ gst_wasapi_src_base_init (gpointer gclass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, "WasapiSrc", + gst_element_class_set_static_metadata (element_class, "WasapiSrc", "Source/Audio", "Stream audio from an audio capture device through WASAPI", "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>"); diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in index 25f130e2..9957eec4 100644 --- a/sys/wininet/Makefile.in +++ b/sys/wininet/Makefile.in @@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/wininet/gstwininetsrc.c b/sys/wininet/gstwininetsrc.c index ed719b1c..2adf93ff 100644 --- a/sys/wininet/gstwininetsrc.c +++ b/sys/wininet/gstwininetsrc.c @@ -86,7 +86,7 @@ gst_win_inet_src_base_init (gpointer gclass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "Windows Network Source", "Source/Network", "Receive data as a client over the network via HTTP or FTP", "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>"); diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in index 18d9e52a..d10ccd8f 100644 --- a/sys/winks/Makefile.in +++ b/sys/winks/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c index 1f4d7075..06e82490 100644 --- a/sys/winks/gstksvideosrc.c +++ b/sys/winks/gstksvideosrc.c @@ -168,7 +168,7 @@ gst_ks_video_src_base_init (gpointer gclass) { GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - gst_element_class_set_metadata (element_class, "KsVideoSrc", + gst_element_class_set_static_metadata (element_class, "KsVideoSrc", "Source/Video", "Stream data from a video capture device through Windows kernel streaming", "Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>\n" diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in index 10f84a43..82bf6301 100644 --- a/sys/winscreencap/Makefile.in +++ b/sys/winscreencap/Makefile.in @@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/sys/winscreencap/gstdx9screencapsrc.c b/sys/winscreencap/gstdx9screencapsrc.c index 82a0d4d6..32a8b29a 100644 --- a/sys/winscreencap/gstdx9screencapsrc.c +++ b/sys/winscreencap/gstdx9screencapsrc.c @@ -104,7 +104,7 @@ gst_dx9screencapsrc_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "DirectX 9 screen capture source", "Source/Video", "Captures screen", "Haakon Sporsheim <hakon.sporsheim@tandberg.com>"); } diff --git a/sys/winscreencap/gstgdiscreencapsrc.c b/sys/winscreencap/gstgdiscreencapsrc.c index fccd97a8..a8da30ba 100644 --- a/sys/winscreencap/gstgdiscreencapsrc.c +++ b/sys/winscreencap/gstgdiscreencapsrc.c @@ -99,7 +99,7 @@ gst_gdiscreencapsrc_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_template)); - gst_element_class_set_metadata (element_class, + gst_element_class_set_static_metadata (element_class, "GDI screen capture source", "Source/Video", "Captures screen", "Haakon Sporsheim <hakon.sporsheim@tandberg.com>"); } diff --git a/tests/Makefile.in b/tests/Makefile.in index 49c421ea..0794bfe5 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index c1a87298..d10f2a26 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -81,6 +81,12 @@ else check_mpeg2enc = endif +if USE_MPG123 +check_mpg123 = elements/mpg123audiodec +else +check_mpg123 = +endif + if USE_MPLEX check_mplex = elements/mplex else @@ -212,6 +218,7 @@ check_PROGRAMS = \ elements/mpegtsmux \ elements/mpegvideoparse \ elements/mpeg4videoparse \ + $(check_mpg123) \ elements/mxfdemux \ elements/mxfmux \ elements/id3mux \ @@ -351,6 +358,11 @@ elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD) +elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) +elements_mpg123audiodec_LDADD = \ + $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \ + -lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@ + elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \ $(AM_CFLAGS) diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in index efbdd47b..4f061715 100644 --- a/tests/check/Makefile.in +++ b/tests/check/Makefile.in @@ -57,7 +57,7 @@ target_triplet = @target@ DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) \ - pipelines/streamheader$(EXEEXT) $(am__EXEEXT_20) + pipelines/streamheader$(EXEEXT) $(am__EXEEXT_21) check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \ @@ -71,14 +71,14 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_13) elements/jpegparse$(EXEEXT) $(am__EXEEXT_14) \ elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \ elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \ - elements/mpeg4videoparse$(EXEEXT) elements/mxfdemux$(EXEEXT) \ - elements/mxfmux$(EXEEXT) elements/id3mux$(EXEEXT) \ - pipelines/mxf$(EXEEXT) $(am__EXEEXT_15) \ - elements/rtpmux$(EXEEXT) libs/mpegvideoparser$(EXEEXT) \ - libs/h264parser$(EXEEXT) $(am__EXEEXT_16) \ - libs/vc1parser$(EXEEXT) $(am__EXEEXT_17) \ - elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_18) \ - $(am__EXEEXT_19) + elements/mpeg4videoparse$(EXEEXT) $(am__EXEEXT_15) \ + elements/mxfdemux$(EXEEXT) elements/mxfmux$(EXEEXT) \ + elements/id3mux$(EXEEXT) pipelines/mxf$(EXEEXT) \ + $(am__EXEEXT_16) elements/rtpmux$(EXEEXT) \ + libs/mpegvideoparser$(EXEEXT) libs/h264parser$(EXEEXT) \ + $(am__EXEEXT_17) libs/vc1parser$(EXEEXT) $(am__EXEEXT_18) \ + elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_19) \ + $(am__EXEEXT_20) subdir = tests/check ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \ @@ -148,12 +148,13 @@ libparser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @USE_CURL_TRUE@ elements/curlsmtpsink$(EXEEXT) @USE_EXIF_TRUE@am__EXEEXT_13 = elements/jifmux$(EXEEXT) @USE_COG_TRUE@am__EXEEXT_14 = elements/logoinsert$(EXEEXT) -@USE_MIMIC_TRUE@am__EXEEXT_15 = pipelines/mimic$(EXEEXT) -@USE_UVCH264_TRUE@am__EXEEXT_16 = elements/uvch264demux$(EXEEXT) -@USE_SCHRO_TRUE@am__EXEEXT_17 = elements/schroenc$(EXEEXT) -@USE_ZBAR_TRUE@am__EXEEXT_18 = elements/zbar$(EXEEXT) -@HAVE_ORC_TRUE@am__EXEEXT_19 = orc/cog$(EXEEXT) orc/bayer$(EXEEXT) -@USE_NEON_TRUE@am__EXEEXT_20 = elements/neonhttpsrc$(EXEEXT) +@USE_MPG123_TRUE@am__EXEEXT_15 = elements/mpg123audiodec$(EXEEXT) +@USE_MIMIC_TRUE@am__EXEEXT_16 = pipelines/mimic$(EXEEXT) +@USE_UVCH264_TRUE@am__EXEEXT_17 = elements/uvch264demux$(EXEEXT) +@USE_SCHRO_TRUE@am__EXEEXT_18 = elements/schroenc$(EXEEXT) +@USE_ZBAR_TRUE@am__EXEEXT_19 = elements/zbar$(EXEEXT) +@HAVE_ORC_TRUE@am__EXEEXT_20 = orc/cog$(EXEEXT) orc/bayer$(EXEEXT) +@USE_NEON_TRUE@am__EXEEXT_21 = elements/neonhttpsrc$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) elements_asfmux_SOURCES = elements/asfmux.c elements_asfmux_OBJECTS = asfmux.$(OBJEXT) @@ -307,6 +308,16 @@ elements_mpegvideoparse_SOURCES = elements/mpegvideoparse.c elements_mpegvideoparse_OBJECTS = mpegvideoparse.$(OBJEXT) elements_mpegvideoparse_DEPENDENCIES = libparser.la \ $(am__DEPENDENCIES_2) +elements_mpg123audiodec_SOURCES = elements/mpg123audiodec.c +elements_mpg123audiodec_OBJECTS = \ + elements_mpg123audiodec-mpg123audiodec.$(OBJEXT) +elements_mpg123audiodec_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +elements_mpg123audiodec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ elements_mplex_SOURCES = elements/mplex.c elements_mplex_OBJECTS = mplex.$(OBJEXT) elements_mplex_LDADD = $(LDADD) @@ -484,15 +495,15 @@ SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \ $(elements_jifmux_SOURCES) elements/jpegparse.c \ elements/kate.c elements/logoinsert.c elements/mpeg2enc.c \ elements/mpeg4videoparse.c elements/mpegtsmux.c \ - elements/mpegvideoparse.c elements/mplex.c elements/mxfdemux.c \ - elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \ - elements/opus.c elements/rtpmux.c elements/schroenc.c \ - elements/timidity.c elements/uvch264demux.c \ - elements/viewfinderbin.c elements/voaacenc.c \ - elements/voamrwbenc.c elements/zbar.c generic/states.c \ - libs/h264parser.c libs/mpegvideoparser.c libs/vc1parser.c \ - orc/bayer.c orc/cog.c pipelines/colorspace.c pipelines/mimic.c \ - pipelines/mxf.c pipelines/streamheader.c + elements/mpegvideoparse.c elements/mpg123audiodec.c \ + elements/mplex.c elements/mxfdemux.c elements/mxfmux.c \ + elements/neonhttpsrc.c elements/ofa.c elements/opus.c \ + elements/rtpmux.c elements/schroenc.c elements/timidity.c \ + elements/uvch264demux.c elements/viewfinderbin.c \ + elements/voaacenc.c elements/voamrwbenc.c elements/zbar.c \ + generic/states.c libs/h264parser.c libs/mpegvideoparser.c \ + libs/vc1parser.c orc/bayer.c orc/cog.c pipelines/colorspace.c \ + pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \ elements/assrender.c elements/autoconvert.c \ elements/autovideoconvert.c \ @@ -505,15 +516,15 @@ DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \ $(elements_jifmux_SOURCES) elements/jpegparse.c \ elements/kate.c elements/logoinsert.c elements/mpeg2enc.c \ elements/mpeg4videoparse.c elements/mpegtsmux.c \ - elements/mpegvideoparse.c elements/mplex.c elements/mxfdemux.c \ - elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \ - elements/opus.c elements/rtpmux.c elements/schroenc.c \ - elements/timidity.c elements/uvch264demux.c \ - elements/viewfinderbin.c elements/voaacenc.c \ - elements/voamrwbenc.c elements/zbar.c generic/states.c \ - libs/h264parser.c libs/mpegvideoparser.c libs/vc1parser.c \ - orc/bayer.c orc/cog.c pipelines/colorspace.c pipelines/mimic.c \ - pipelines/mxf.c pipelines/streamheader.c + elements/mpegvideoparse.c elements/mpg123audiodec.c \ + elements/mplex.c elements/mxfdemux.c elements/mxfmux.c \ + elements/neonhttpsrc.c elements/ofa.c elements/opus.c \ + elements/rtpmux.c elements/schroenc.c elements/timidity.c \ + elements/uvch264demux.c elements/viewfinderbin.c \ + elements/voaacenc.c elements/voamrwbenc.c elements/zbar.c \ + generic/states.c libs/h264parser.c libs/mpegvideoparser.c \ + libs/vc1parser.c orc/bayer.c orc/cog.c pipelines/colorspace.c \ + pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -600,6 +611,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -1001,6 +1014,8 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp @USE_COG_TRUE@check_logoinsert = elements/logoinsert @USE_MPEG2ENC_FALSE@check_mpeg2enc = @USE_MPEG2ENC_TRUE@check_mpeg2enc = elements/mpeg2enc +@USE_MPG123_FALSE@check_mpg123 = +@USE_MPG123_TRUE@check_mpg123 = elements/mpg123audiodec @USE_MPLEX_FALSE@check_mplex = @USE_MPLEX_TRUE@check_mplex = elements/mplex @USE_NEON_FALSE@check_neon = @@ -1165,6 +1180,11 @@ elements_assrender_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_C elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD) elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD) +elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) +elements_mpg123audiodec_LDADD = \ + $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \ + -lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@ + elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \ $(AM_CFLAGS) @@ -1320,6 +1340,9 @@ elements/mpegtsmux$(EXEEXT): $(elements_mpegtsmux_OBJECTS) $(elements_mpegtsmux_ elements/mpegvideoparse$(EXEEXT): $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_DEPENDENCIES) $(EXTRA_elements_mpegvideoparse_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/mpegvideoparse$(EXEEXT) $(AM_V_CCLD)$(LINK) $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_LDADD) $(LIBS) +elements/mpg123audiodec$(EXEEXT): $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_DEPENDENCIES) $(EXTRA_elements_mpg123audiodec_DEPENDENCIES) elements/$(am__dirstamp) + @rm -f elements/mpg123audiodec$(EXEEXT) + $(AM_V_CCLD)$(elements_mpg123audiodec_LINK) $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_LDADD) $(LIBS) elements/mplex$(EXEEXT): $(elements_mplex_OBJECTS) $(elements_mplex_DEPENDENCIES) $(EXTRA_elements_mplex_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/mplex$(EXEEXT) $(AM_V_CCLD)$(LINK) $(elements_mplex_OBJECTS) $(elements_mplex_LDADD) $(LIBS) @@ -1431,6 +1454,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jifmux-jifmux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_kate-kate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_mpegtsmux-mpegtsmux.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_rtpmux-rtpmux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_timidity-timidity.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_uvch264demux-uvch264demux.Po@am__quote@ @@ -1870,6 +1894,20 @@ mpegvideoparse.obj: elements/mpegvideoparse.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpegvideoparse.obj `if test -f 'elements/mpegvideoparse.c'; then $(CYGPATH_W) 'elements/mpegvideoparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpegvideoparse.c'; fi` +elements_mpg123audiodec-mpg123audiodec.o: elements/mpg123audiodec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements_mpg123audiodec-mpg123audiodec.o -MD -MP -MF $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/mpg123audiodec.c' object='elements_mpg123audiodec-mpg123audiodec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c + +elements_mpg123audiodec-mpg123audiodec.obj: elements/mpg123audiodec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements_mpg123audiodec-mpg123audiodec.obj -MD -MP -MF $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/mpg123audiodec.c' object='elements_mpg123audiodec-mpg123audiodec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi` + mplex.o: elements/mplex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mplex.o -MD -MP -MF $(DEPDIR)/mplex.Tpo -c -o mplex.o `test -f 'elements/mplex.c' || echo '$(srcdir)/'`elements/mplex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mplex.Tpo $(DEPDIR)/mplex.Po diff --git a/tests/check/elements/baseaudiovisualizer.c b/tests/check/elements/baseaudiovisualizer.c index 5025d610..b0a0c1b5 100644 --- a/tests/check/elements/baseaudiovisualizer.c +++ b/tests/check/elements/baseaudiovisualizer.c @@ -71,7 +71,7 @@ gst_test_scope_class_init (GstTestScopeClass * g_class) { GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - gst_element_class_set_metadata (element_class, "test scope", + gst_element_class_set_static_metadata (element_class, "test scope", "Visualization", "Dummy test scope", "Stefan Kost <ensonic@users.sf.net>"); diff --git a/tests/check/elements/camerabin.c b/tests/check/elements/camerabin.c index 3cb8d806..2f968ab7 100644 --- a/tests/check/elements/camerabin.c +++ b/tests/check/elements/camerabin.c @@ -153,7 +153,7 @@ gst_test_camera_src_class_init (GstTestCameraSrcClass * klass) gstbasecamera_class = GST_BASE_CAMERA_SRC_CLASS (klass); gstbasecamera_class->set_mode = gst_test_camera_src_set_mode; - gst_element_class_set_metadata (gstelement_class, + gst_element_class_set_static_metadata (gstelement_class, "Test Camera Src", "Camera/Src", "Some test camera src", diff --git a/tests/check/elements/dataurisrc.c b/tests/check/elements/dataurisrc.c index 49c9bdbb..da805996 100644 --- a/tests/check/elements/dataurisrc.c +++ b/tests/check/elements/dataurisrc.c @@ -169,7 +169,7 @@ const gchar data_uri[] = "data:audio/ogg;base64," "AWZeiL1v7LSgX1wHDrB3NhI3k3sSnaKJAAAAAAAAQOJJS94nzV+3/3r/2Ho5ub5tHN70XSuPfdZZ" "C/9eZOtqZc5Zfl8wP5ZenOT3hbWPpZeE6jzjkdY3f+GXCblaF41qKouT/N7UyQA="; -GST_START_TEST (test_playbin2) +GST_START_TEST (test_playbin) { GstElement *playbin, *sink; int loops = 2; @@ -225,7 +225,7 @@ dataurisrc_suite (void) suite_add_tcase (s, tc_chain); - tcase_add_test (tc_chain, test_playbin2); + tcase_add_test (tc_chain, test_playbin); return s; } diff --git a/tests/check/elements/mpg123audiodec.c b/tests/check/elements/mpg123audiodec.c new file mode 100644 index 00000000..57567e53 --- /dev/null +++ b/tests/check/elements/mpg123audiodec.c @@ -0,0 +1,542 @@ +/* GStreamer + * + * unit test for mpg123audiodec + * + * Copyright (c) 2012 Carlos Rafael Giani <dv@pseudoterminal.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <unistd.h> + +#include <gst/check/gstcheck.h> +#include <gst/audio/audio.h> + +#include <gst/fft/gstfft.h> +#include <gst/fft/gstffts16.h> +#include <gst/fft/gstffts32.h> +#include <gst/fft/gstfftf32.h> +#include <gst/fft/gstfftf64.h> + +#include <gst/app/gstappsink.h> + +/* For ease of programming we use globals to keep refs for our floating + * src and sink pads we create; otherwise we always have to do get_pad, + * get_peer, and then remove references in every test function */ +static GstPad *mysrcpad, *mysinkpad; + + +#define MP2_STREAM_FILENAME "stream.mp2" +#define MP3_CBR_STREAM_FILENAME "cbr_stream.mp3" +#define MP3_VBR_STREAM_FILENAME "vbr_stream.mp3" + + +/* mpeg 1 layer 2 stream created with: + * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \ + * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \ + * avenc_mp2 bitrate=32000 ! tee name=t \ + * t. ! queue ! fakesink silent=false \ + * t. ! queue ! filesink location=test.mp2 + * + * mpeg 1 layer 3 CBR stream created with: + * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \ + * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \ + * lamemp3enc encoding-engine-quality=high cbr=true target=bitrate bitrate=32 ! \ + * "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \ + * t. ! queue ! fakesink silent=false \ + * t. ! queue ! filesink location=test.mp3 + * + * mpeg 1 layer 3 VBR stream created with: + * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \ + * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \ + * lamemp3enc encoding-engine-quality=high cbr=false target=quality quality=7 ! \ + * "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \ + * t. ! queue ! fakesink silent=false \ + * t. ! queue ! filesink location=test.mp3 + */ + + +/* FFT test helpers taken from gst-plugins-base tests/check/audioresample.c */ + +#define FFT_HELPERS(type,ffttag,ffttag2,scale) \ +static gdouble magnitude##ffttag (const GstFFT##ffttag##Complex *c) \ +{ \ + gdouble mag = (gdouble) c->r * (gdouble) c->r; \ + mag += (gdouble) c->i * (gdouble) c->i; \ + mag /= scale * scale; \ + mag = 10.0 * log10 (mag); \ + return mag; \ +} \ +static gdouble find_main_frequency_spot_##ffttag ( \ + const GstFFT##ffttag##Complex *v, int elements) \ +{ \ + int i; \ + gdouble maxmag = -9999; \ + int maxidx = 0; \ + for (i=0; i<elements; ++i) { \ + gdouble mag = magnitude##ffttag (v+i); \ + if (mag > maxmag) { \ + maxmag = mag; \ + maxidx = i; \ + } \ + } \ + return maxidx / (gdouble) elements; \ +} \ +static gboolean is_zero_except_##ffttag (const GstFFT##ffttag##Complex *v, \ + int elements, gdouble spot) \ +{ \ + int i; \ + for (i=0; i<elements; ++i) { \ + gdouble pos = i / (gdouble) elements; \ + gdouble mag = magnitude##ffttag (v+i); \ + if (fabs (pos - spot) > 0.01) { \ + if (mag > -35.0) { \ + GST_LOG("Found magnitude at %f : %f (peak at %f)\n", pos, mag, spot); \ + return FALSE; \ + } \ + } \ + } \ + return TRUE; \ +} \ +static void check_main_frequency_spot_##ffttag (GstBuffer *buffer, gdouble \ + expected_spot) \ +{ \ + GstMapInfo map; \ + int num_samples; \ + gdouble actual_spot; \ + GstFFT##ffttag *ctx; \ + GstFFT##ffttag##Complex *fftdata; \ + \ + gst_buffer_map (buffer, &map, GST_MAP_READ); \ + \ + num_samples = map.size / sizeof(type) & ~1; \ + ctx = gst_fft_##ffttag2##_new (num_samples, FALSE); \ + fftdata = g_new (GstFFT##ffttag##Complex, num_samples / 2 + 1); \ + \ + gst_fft_##ffttag2##_window (ctx, (type*)map.data, \ + GST_FFT_WINDOW_HAMMING); \ + gst_fft_##ffttag2##_fft (ctx, (type*)map.data, fftdata); \ + \ + actual_spot = find_main_frequency_spot_##ffttag (fftdata, \ + num_samples / 2 + 1); \ + GST_LOG ("Expected spot: %.3f actual: %.3f %f", expected_spot, actual_spot, \ + fabs (expected_spot - actual_spot)); \ + fail_unless (fabs (expected_spot - actual_spot) < 0.05, \ + "Actual main frequency spot is too far away from expected one"); \ + fail_unless (is_zero_except_##ffttag (fftdata, num_samples / 2 + 1, \ + actual_spot), "One secondary peak in spectrum exceeds threshold"); \ + \ + gst_buffer_unmap (buffer, &map); \ + \ + gst_fft_##ffttag2##_free (ctx); \ + g_free (fftdata); \ +} +FFT_HELPERS (gint32, S32, s32, 2147483647.0); + + +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("audio/x-raw, format = (string) S32LE ") + ); +static GstStaticPadTemplate layer2_srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); +static GstStaticPadTemplate layer3_srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + + +static void +setup_input_pipeline (gchar const *stream_filename, GstElement ** pipeline, + GstElement ** appsink) +{ + GstElement *source, *parser; + + *pipeline = gst_pipeline_new (NULL); + source = gst_element_factory_make ("filesrc", NULL); + parser = gst_element_factory_make ("mpegaudioparse", NULL); + *appsink = gst_element_factory_make ("appsink", NULL); + + gst_bin_add_many (GST_BIN (*pipeline), source, parser, *appsink, NULL); + gst_element_link_many (source, parser, *appsink, NULL); + + { + char *full_filename = + g_build_filename (GST_TEST_FILES_PATH, stream_filename, NULL); + g_object_set (G_OBJECT (source), "location", full_filename, NULL); + g_free (full_filename); + } + + gst_element_set_state (*pipeline, GST_STATE_PLAYING); +} + +static void +cleanup_input_pipeline (GstElement * pipeline) +{ + gst_element_set_state (pipeline, GST_STATE_NULL); + gst_object_unref (pipeline); +} + +static GstElement * +setup_mpeg1layer2dec (void) +{ + GstElement *mpg123audiodec; + GstSegment seg; + GstCaps *caps; + + GST_DEBUG ("setup_mpeg1layer2dec"); + mpg123audiodec = gst_check_setup_element ("mpg123audiodec"); + mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer2_srctemplate); + mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate); + gst_pad_set_active (mysrcpad, TRUE); + gst_pad_set_active (mysinkpad, TRUE); + + gst_segment_init (&seg, GST_FORMAT_TIME); + gst_pad_push_event (mysrcpad, gst_event_new_segment (&seg)); + + /* This is necessary to trigger a set_format call in the decoder; + * fixed caps don't trigger it */ + caps = gst_caps_new_simple ("audio/mpeg", + "mpegversion", G_TYPE_INT, 1, + "layer", G_TYPE_INT, 2, + "rate", G_TYPE_INT, 44100, + "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_pad_set_caps (mysrcpad, caps); + gst_caps_unref (caps); + + return mpg123audiodec; +} + +static GstElement * +setup_mpeg1layer3dec (void) +{ + GstElement *mpg123audiodec; + GstSegment seg; + GstCaps *caps; + + GST_DEBUG ("setup_mpeg1layer3dec"); + mpg123audiodec = gst_check_setup_element ("mpg123audiodec"); + mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer3_srctemplate); + mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate); + gst_pad_set_active (mysrcpad, TRUE); + gst_pad_set_active (mysinkpad, TRUE); + + gst_segment_init (&seg, GST_FORMAT_TIME); + gst_pad_push_event (mysrcpad, gst_event_new_segment (&seg)); + + /* This is necessary to trigger a set_format call in the decoder; + * fixed caps don't trigger it */ + caps = gst_caps_new_simple ("audio/mpeg", + "mpegversion", G_TYPE_INT, 1, + "layer", G_TYPE_INT, 3, + "rate", G_TYPE_INT, 44100, + "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL); + gst_pad_set_caps (mysrcpad, caps); + gst_caps_unref (caps); + + return mpg123audiodec; +} + +static void +cleanup_mpg123audiodec (GstElement * mpg123audiodec) +{ + GST_DEBUG ("cleanup_mpeg1layer2dec"); + gst_element_set_state (mpg123audiodec, GST_STATE_NULL); + + gst_pad_set_active (mysrcpad, FALSE); + gst_pad_set_active (mysinkpad, FALSE); + gst_check_teardown_src_pad (mpg123audiodec); + gst_check_teardown_sink_pad (mpg123audiodec); + gst_check_teardown_element (mpg123audiodec); +} + +static void +run_decoding_test (GstElement * mpg123audiodec, gchar const *filename) +{ + GstBus *bus; + unsigned int num_input_buffers, num_decoded_buffers; + gint expected_size; + GstCaps *out_caps, *caps; + GstAudioInfo audioinfo; + GstElement *input_pipeline, *input_appsink; + int i; + GstBuffer *outbuffer; + + /* 440 Hz = frequency of sine wave in audio data + * 44100 Hz = sample rate + * (44100 / 2) Hz = Nyquist frequency */ + static double const expected_frequency_spot = 440.0 / (44100.0 / 2.0); + + fail_unless (gst_element_set_state (mpg123audiodec, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + bus = gst_bus_new (); + + gst_element_set_bus (mpg123audiodec, bus); + + setup_input_pipeline (filename, &input_pipeline, &input_appsink); + + num_input_buffers = 0; + while (TRUE) { + GstSample *sample; + GstBuffer *input_buffer; + + sample = gst_app_sink_pull_sample (GST_APP_SINK (input_appsink)); + if (sample == NULL) + break; + + fail_unless (GST_IS_SAMPLE (sample)); + + input_buffer = gst_sample_get_buffer (sample); + fail_if (input_buffer == NULL); + + /* This is done to be on the safe side - docs say lifetime of the input buffer + * depends *solely* on the sample */ + input_buffer = gst_buffer_copy (input_buffer); + + fail_unless_equals_int (gst_pad_push (mysrcpad, input_buffer), GST_FLOW_OK); + + ++num_input_buffers; + + gst_sample_unref (sample); + } + + num_decoded_buffers = g_list_length (buffers); + + /* check number of decoded buffers */ + fail_unless_equals_int (num_decoded_buffers, num_input_buffers - 2); + + caps = gst_pad_get_current_caps (mysinkpad); + GST_LOG ("output caps %" GST_PTR_FORMAT, caps); + fail_unless (gst_audio_info_from_caps (&audioinfo, caps), + "Getting audio info from caps failed"); + + /* check caps */ + out_caps = gst_caps_new_simple ("audio/x-raw", + "format", G_TYPE_STRING, "S32LE", + "layout", G_TYPE_STRING, "interleaved", + "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1, NULL); + + fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps"); + + gst_caps_unref (out_caps); + gst_caps_unref (caps); + + /* here, test if decoded data is a sine tone, and if the sine frequency is at the + * right spot in the spectrum */ + for (i = 0; i < num_decoded_buffers; ++i) { + outbuffer = GST_BUFFER (buffers->data); + fail_if (outbuffer == NULL, "Invalid buffer retrieved"); + + /* MPEG 1 layer 2 uses 1152 samples per frame */ + expected_size = 1152 * GST_AUDIO_INFO_BPF (&audioinfo); + fail_unless_equals_int (gst_buffer_get_size (outbuffer), expected_size); + + check_main_frequency_spot_S32 (outbuffer, expected_frequency_spot); + + buffers = g_list_remove (buffers, outbuffer); + gst_buffer_unref (outbuffer); + outbuffer = NULL; + } + + g_list_free (buffers); + buffers = NULL; + + cleanup_input_pipeline (input_pipeline); + gst_bus_set_flushing (bus, TRUE); + gst_element_set_bus (mpg123audiodec, NULL); + gst_object_unref (GST_OBJECT (bus)); +} + + +GST_START_TEST (test_decode_mpeg1layer2) +{ + GstElement *mpg123audiodec; + mpg123audiodec = setup_mpeg1layer2dec (); + run_decoding_test (mpg123audiodec, MP2_STREAM_FILENAME); + cleanup_mpg123audiodec (mpg123audiodec); + mpg123audiodec = NULL; +} + +GST_END_TEST; + + +GST_START_TEST (test_decode_mpeg1layer3_cbr) +{ + GstElement *mpg123audiodec; + mpg123audiodec = setup_mpeg1layer3dec (); + run_decoding_test (mpg123audiodec, MP3_CBR_STREAM_FILENAME); + cleanup_mpg123audiodec (mpg123audiodec); +} + +GST_END_TEST; + + +GST_START_TEST (test_decode_mpeg1layer3_vbr) +{ + GstElement *mpg123audiodec; + mpg123audiodec = setup_mpeg1layer3dec (); + run_decoding_test (mpg123audiodec, MP3_VBR_STREAM_FILENAME); + cleanup_mpg123audiodec (mpg123audiodec); +} + +GST_END_TEST; + + +GST_START_TEST (test_decode_garbage_mpeg1layer2) +{ + GstElement *mpg123audiodec; + GstBuffer *inbuffer; + GstBus *bus; + int i, num_buffers; + guint32 *tmpbuf; + + mpg123audiodec = setup_mpeg1layer2dec (); + + fail_unless (gst_element_set_state (mpg123audiodec, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + bus = gst_bus_new (); + + /* initialize the buffer with something that is no mpeg2 */ + tmpbuf = g_new (guint32, 4096); + for (i = 0; i < 4096; i++) { + tmpbuf[i] = i; + } + inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32)); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + gst_element_set_bus (mpg123audiodec, bus); + + /* should be possible to push without problems but nothing gets decoded */ + fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK); + + num_buffers = g_list_length (buffers); + + /* should be 0 buffers as decoding should've been impossible */ + fail_unless_equals_int (num_buffers, 0); + + g_list_free (buffers); + buffers = NULL; + + gst_bus_set_flushing (bus, TRUE); + gst_element_set_bus (mpg123audiodec, NULL); + gst_object_unref (GST_OBJECT (bus)); + cleanup_mpg123audiodec (mpg123audiodec); + mpg123audiodec = NULL; +} + +GST_END_TEST; + + +GST_START_TEST (test_decode_garbage_mpeg1layer3) +{ + GstElement *mpg123audiodec; + GstBuffer *inbuffer; + GstBus *bus; + int i, num_buffers; + guint32 *tmpbuf; + + mpg123audiodec = setup_mpeg1layer3dec (); + + fail_unless (gst_element_set_state (mpg123audiodec, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + bus = gst_bus_new (); + + /* initialize the buffer with something that is no mpeg2 */ + tmpbuf = g_new (guint32, 4096); + for (i = 0; i < 4096; i++) { + tmpbuf[i] = i; + } + inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32)); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + gst_element_set_bus (mpg123audiodec, bus); + + /* should be possible to push without problems but nothing gets decoded */ + fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK); + + num_buffers = g_list_length (buffers); + + /* should be 0 buffers as decoding should've been impossible */ + fail_unless_equals_int (num_buffers, 0); + + g_list_free (buffers); + buffers = NULL; + + gst_bus_set_flushing (bus, TRUE); + gst_element_set_bus (mpg123audiodec, NULL); + gst_object_unref (GST_OBJECT (bus)); + cleanup_mpg123audiodec (mpg123audiodec); + mpg123audiodec = NULL; +} + +GST_END_TEST; + + +static gboolean +is_test_file_available (gchar const *filename) +{ + gboolean ret; + gchar *full_filename; + gchar *cwd; + + cwd = g_get_current_dir (); + full_filename = g_build_filename (cwd, GST_TEST_FILES_PATH, filename, NULL); + ret = + g_file_test (full_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS); + g_free (full_filename); + g_free (cwd); + return ret; +} + +static Suite * +mpg123audiodec_suite (void) +{ + GstRegistry *registry; + Suite *s = suite_create ("mpg123audiodec"); + TCase *tc_chain = tcase_create ("general"); + + registry = gst_registry_get (); + + suite_add_tcase (s, tc_chain); + if (gst_registry_check_feature_version (registry, "filesrc", + GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) && + gst_registry_check_feature_version (registry, "mpegaudioparse", + GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) && + gst_registry_check_feature_version (registry, "appsrc", + GST_VERSION_MAJOR, GST_VERSION_MINOR, 0)) { + if (is_test_file_available (MP2_STREAM_FILENAME)) + tcase_add_test (tc_chain, test_decode_mpeg1layer2); + if (is_test_file_available (MP3_CBR_STREAM_FILENAME)) + tcase_add_test (tc_chain, test_decode_mpeg1layer3_cbr); + if (is_test_file_available (MP3_VBR_STREAM_FILENAME)) + tcase_add_test (tc_chain, test_decode_mpeg1layer3_vbr); + } + tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer2); + tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer3); + + return s; +} + + +GST_CHECK_MAIN (mpg123audiodec) diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in index f1f56df3..fc4fc69b 100644 --- a/tests/examples/Makefile.in +++ b/tests/examples/Makefile.in @@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in index 65b6cc03..92f1fc78 100644 --- a/tests/examples/camerabin2/Makefile.in +++ b/tests/examples/camerabin2/Makefile.in @@ -237,6 +237,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in index 8fb506a3..c4d1f402 100644 --- a/tests/examples/directfb/Makefile.in +++ b/tests/examples/directfb/Makefile.in @@ -217,6 +217,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in index 2402245b..5f9dedfe 100644 --- a/tests/examples/mxf/Makefile.in +++ b/tests/examples/mxf/Makefile.in @@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in index 31355149..55efecfc 100644 --- a/tests/examples/opencv/Makefile.in +++ b/tests/examples/opencv/Makefile.in @@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/examples/scaletempo/Makefile.in b/tests/examples/scaletempo/Makefile.in index d6b4df28..ab71215d 100644 --- a/tests/examples/scaletempo/Makefile.in +++ b/tests/examples/scaletempo/Makefile.in @@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ # FIXME 0.11: ignore GValueArray warnings for now until this is sorted diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in index 7a465c73..209149bb 100644 --- a/tests/examples/uvch264/Makefile.in +++ b/tests/examples/uvch264/Makefile.in @@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am index 2cf37983..d46c18e9 100644 --- a/tests/files/Makefile.am +++ b/tests/files/Makefile.am @@ -1,2 +1,5 @@ EXTRA_DIST = \ - barcode.png + barcode.png \ + cbr_stream.mp3 \ + stream.mp2 \ + vbr_stream.mp3 diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in index 074543b4..302719a2 100644 --- a/tests/files/Makefile.in +++ b/tests/files/Makefile.in @@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ @@ -542,7 +544,10 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ - barcode.png + barcode.png \ + cbr_stream.mp3 \ + stream.mp2 \ + vbr_stream.mp3 all: all-am diff --git a/tests/files/cbr_stream.mp3 b/tests/files/cbr_stream.mp3 Binary files differnew file mode 100644 index 00000000..b1a5c439 --- /dev/null +++ b/tests/files/cbr_stream.mp3 diff --git a/tests/files/stream.mp2 b/tests/files/stream.mp2 Binary files differnew file mode 100644 index 00000000..ab6e900d --- /dev/null +++ b/tests/files/stream.mp2 diff --git a/tests/files/vbr_stream.mp3 b/tests/files/vbr_stream.mp3 Binary files differnew file mode 100644 index 00000000..81fc38b5 --- /dev/null +++ b/tests/files/vbr_stream.mp3 diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in index b8988b97..2d2b1613 100644 --- a/tests/icles/Makefile.in +++ b/tests/icles/Makefile.in @@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tools/Makefile.in b/tools/Makefile.in index df557463..c8eef123 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ +EGLGLES_CFLAGS = @EGLGLES_CFLAGS@ +EGLGLES_LIBS = @EGLGLES_LIBS@ EGREP = @EGREP@ ERROR_CFLAGS = @ERROR_CFLAGS@ ERROR_CXXFLAGS = @ERROR_CXXFLAGS@ diff --git a/tools/gst-app-maker b/tools/gst-app-maker index f9094421..d8f2f43b 100755 --- a/tools/gst-app-maker +++ b/tools/gst-app-maker @@ -220,7 +220,7 @@ gst_replace_create_pipeline_playbin (GstReplace *replace, const char *uri) pipeline = gst_pipeline_new (NULL); gst_bin_add (GST_BIN(pipeline), - gst_element_factory_make ("playbin2", "source")); + gst_element_factory_make ("playbin", "source")); if (error) { g_print("pipeline parsing error: %s\n", error->message); diff --git a/tools/gst-element-maker b/tools/gst-element-maker index dc85c5f8..a28c4da7 100755 --- a/tools/gst-element-maker +++ b/tools/gst-element-maker @@ -189,7 +189,7 @@ done cat <<EOF - gst_element_class_set_metadata (element_class, "FIXME Long name", + gst_element_class_set_static_metadata (element_class, "FIXME Long name", "Generic", "FIXME Description", "$REAL_NAME <$EMAIL_ADDRESS>"); } diff --git a/win32/common/config.h b/win32/common/config.h index af9e3509..3ce2ffbf 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -199,7 +199,7 @@ #undef USE_POISONING /* Version number of package */ -#define VERSION "1.0.1" +#define VERSION "1.0.2" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ |