diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-09-14 10:49:31 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-09-14 10:49:31 +0200 |
commit | 5a155a05d15180794bd02b15b1f5f99766da3a51 (patch) | |
tree | f392fe6bce3bd747fc15fc4975a6f0adac3f89b7 | |
parent | 63e92019fec98e462d68331ce3c8d9f9cb61f164 (diff) |
Imported Upstream version 0.11.94upstream/0.11.94
738 files changed, 29597 insertions, 7760 deletions
@@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. diff --git a/COPYING.LIB b/COPYING.LIB index eb685a5e..14cf986d 100644 --- a/COPYING.LIB +++ b/COPYING.LIB @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -464,7 +464,7 @@ convey the exclusion of warranty; and each file should have at least the 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., 675 Mass Ave, Cambridge, MA 02139, USA. + Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. @@ -1,9 +1,4677 @@ +2012-09-14 02:06:48 +0100 Tim-Philipp Müller <tim@centricular.net> + + * docs/plugins/gst-plugins-bad-plugins.args: + * docs/plugins/gst-plugins-bad-plugins.hierarchy: + * docs/plugins/gst-plugins-bad-plugins.interfaces: + * 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-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-freeze.xml: + * docs/plugins/inspect/plugin-gaudieffects.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-mpegtsdemux.xml: + * docs/plugins/inspect/plugin-mpegtsmux.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-speed.xml: + * docs/plugins/inspect/plugin-videoparsersbad.xml: + * docs/plugins/inspect/plugin-voaacenc.xml: + * docs/plugins/inspect/plugin-vp8.xml: + * docs/plugins/inspect/plugin-y4mdec.xml: + * docs/plugins/inspect/plugin-zbar.xml: + docs: update docs + +2012-09-13 13:44:05 -0700 Jan Schmidt <thaytan@noraisin.net> + + * tests/check/elements/parser.c: + check: Verify the DTS emerging from the parser, not PTS + PTS doesn't increment linearly in parsers with frame re-ordering, but + DTS does. Verify that instead. + +2012-09-13 13:34:16 -0700 Jan Schmidt <thaytan@noraisin.net> + + * tests/check/libs/mpegvideoparser.c: + check: Fix mpegvideoparser PAR expectation + The parser (correctly) now interprets the test header using + MPEG-1 semantics, so fix the test expectation. + +2012-09-13 15:51:02 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/inter/gstintervideosrc.c: + interaudiosrc: Make caps writable in fixate + +2012-09-13 15:06:52 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/inter/gstinteraudiosink.c: + * gst/inter/gstinteraudiosrc.c: + * gst/inter/gstintersubsink.c: + * gst/inter/gstintersubsrc.c: + * gst/inter/gstintertest.c: + * gst/inter/gstintervideosink.c: + * gst/inter/gstintervideosrc.c: + * gst/inter/gstintervideosrc.h: + inter: Port to 1.0 API + Also remove a lot of empty, non-implemented methods + +2012-09-12 22:58:04 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/videoparsers/gstdiracparse.c: + * gst/videoparsers/gsth264parse.c: + * gst/videoparsers/gstmpeg4videoparse.c: + * gst/videoparsers/gstmpegvideoparse.c: + videoparsers: Disable PTS interpolation in the base parse class + All these formats have re-ordered PTS which the base class gets + wrong. It's better to leave them blank and let the decoder sort it + out. Better yet would be to track and interpolate the timestamps + in the subclasses (FIXME) + +2012-09-09 16:40:00 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/dvdspu/gstdvdspu.c: + dvdspu: Advance video stream with gap events. + Handle Gap events the way we used to handle segment updates + and advance/fill in the video stream accordingly. Fixes + 'still' menus which aren't DVD still frames, but are just a + single frame with accompanying audio. + +2012-09-09 16:29:52 -0700 Jan Schmidt <thaytan@noraisin.net> + + * ext/resindvd/resindvdbin.c: + * ext/resindvd/resindvdbin.h: + resindvd: Start with a larger subpicture queue for preroll. + Shrink the queue once we're prerolled. Fixes the Fringe S1 + DVD. Also, ensure we only fire no_more_pads once. + +2012-09-08 19:21:47 -0700 Jan Schmidt <thaytan@noraisin.net> + + * ext/resindvd/resindvdbin.c: + resindvd: Disable input-selector syncing + Until segments are better worked out. Also, use + internal input-selector for audio as well + +2012-09-03 09:47:30 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst-libs/gst/codecparsers/gstmpegvideoparser.c: + * gst-libs/gst/codecparsers/gstmpegvideoparser.h: + * gst/videoparsers/gstmpegvideoparse.c: + * gst/videoparsers/gstmpegvideoparse.h: + mpegvideoparse: Handle Sequence Display Extension + Change the way the pixel-aspect-ratio is computed by + interpreting the sequence header aspect ratio info + as MPEG-1 values until a sequence extension or + sequence display extension is seen, and then updating + the sequence header struct accordingly. + Fixes incorrect anamorphic display on some MPEG-2 (DVD) + sequences. + +2012-09-13 01:40:42 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/pipelines/mxf.c: + tests: disable yet another mxf tests until the elements are ported + +2012-09-13 01:34:45 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/flite/gstflitetestsrc.c: + flitetestsrc: fix caps fixation + Make caps writable before changing them. + +2012-09-13 01:26:28 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/segmentclip/gstsegmentclip.c: + segmentclip: fix wrong pad template unref + Blows up when trying to instantiate a second clip element + of the same type, like in the generic/states unit test. + +2012-09-13 01:07:46 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/wayland/gstwaylandsink.c: + waylandsink: fail gracefully with an error message if we can't connect to wayland + g_return_val_if_fail() is not for error handling, it's for + catching programming errors in public API. + Fixes problem with generic/states unit test. + +2012-09-13 00:59:33 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/siren/gstsirendec.c: + * gst/siren/gstsirenenc.c: + siren: init debug category before logging anything + +2012-09-13 00:55:28 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/elements/mxfdemux.c: + * tests/check/elements/mxfmux.c: + tests: skip mxf tests while elements haven't been ported yet + +2012-09-13 00:50:04 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/schroedinger/gstschroenc.c: + schroenc: remove GST_ERROR statement that was committed by accident + +2012-09-13 00:40:44 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/elements/jifmux.c: + tests: fix jifmux test + Need to pass a GstSample now for GST_TAG_APPLICATION_DATA + instead of a GstBuffer. + +2012-09-12 18:34:03 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/pnm/gstpnmdec.c: + * gst/pnm/gstpnmdec.h: + * gst/pnm/gstpnmenc.c: + * gst/pnm/gstpnmenc.h: + pnm: Port to 1.0 API + +2012-09-12 17:34:03 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/freeze/gstfreeze.c: + * gst/freeze/gstfreeze.h: + freeze: Use a GPtrArray instead of a GQueue + This way, the most common function (changing buffers) becomes O(1) instead + of O(n) + +2012-09-12 17:24:26 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/freeze/gstfreeze.c: + * gst/freeze/gstfreeze.h: + freeze: Port to 1.0 API + +2012-09-12 16:23:47 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/speed/gstspeed.c: + * gst/speed/gstspeed.h: + speed: Various 1.0 style additions + Use GstAudioInfo everywhere, etc + +2012-09-10 17:16:07 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * gst/speed/Makefile.am: + * gst/speed/gstspeed.c: + speed: port to 0.11 + https://bugzilla.gnome.org/show_bug.cgi?id=683727 + +2012-09-12 16:03:06 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/liveadder/liveadder.c: + * gst/liveadder/liveadder.h: + liveadder: port to 1.0 API + +2012-09-12 21:13:35 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/asfmux/gstasfmux.c: + * gst/debugutils/gstcompare.c: + * gst/frei0r/gstfrei0rmixer.c: + * gst/mpegpsmux/mpegpsmux.c: + * gst/mpegtsmux/mpegtsmux.c: + * gst/mxf/mxfmux.c: + * gst/videomeasure/gstvideomeasure_ssim.c: + collectpads: remove gst_collect_pads_add_pad_full + Rename gst_collect_pads_add_pad_full() to gst_collect_pads_add_pad() and fix all + invocations. + +2012-09-12 12:14:53 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/siren/gstsirendec.c: + * gst/siren/gstsirenenc.c: + siren: Port to 1.0 API + +2012-09-12 15:08:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: Use default query handlers where needed + And fixup getcaps handler while I'm at it + +2012-09-12 09:42:09 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: port tagsetter mode setting code + Check directly with GST_IS_TAG_SETTER instead of using the + deprecated GstImplementsInterface + Fixes the image tag setting unit test + +2012-09-12 13:03:28 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * tests/check/pipelines/streamheader.c: + tests: fix win32 build even more + +2012-09-12 13:17:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: port to the new GLib thread API + +2012-09-12 11:08:25 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com> + + * gst-libs/gst/codecparsers/gstvc1parser.c: + codecparsers: vc1: fix aspect ratio calculation. + ASPECT_HORIZ_SIZE and ASPECT_VERT_SIZE are syntax elements that hold + binary encodings of sizes ranging from 1 to 256. Thus, the calculated + pixel-aspect-ratio was off by one. + Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com> + https://bugzilla.gnome.org/show_bug.cgi?id=683858 + +2012-09-12 11:01:34 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com> + + * gst-libs/gst/codecparsers/gsth264parser.c: + * gst-libs/gst/codecparsers/gsth264parser.h: + * gst/videoparsers/gsth264parse.c: + codecparsers: h264parse: don't use anonymous unions. + Anonymous union is an ISO C (2011) feature that is not exposed in + compilers strictly conforming to the previous standard. + Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com> + +2012-09-12 11:21:41 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com> + + * gst-libs/gst/codecparsers/gsth264parser.c: + * gst-libs/gst/codecparsers/gsth264parser.h: + codecparsers: h264: compute pixel aspect ratio. + Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk> + Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com> + +2012-09-12 09:48:47 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/pipelines/streamheader.c: + tests: attempt to get disabled streamheader test to compile on win32 + Though it probably won't work, but then it's disabled. + +2012-09-12 09:10:35 +0200 Peter Korsgaard <jacmet@sunsite.dk> + + * ext/opus/gstopusdec.c: + * ext/opus/gstopusenc.c: + * gst/jpegformat/gstjpegparse.c: + opus + jpegformat: unbreak non-debug build + opus + jpegformat plugin builds fail when gstreamer is configured with + --disable-gst-debug as they are checking the GST_DISABLE_DEBUG symbol + instead of GST_DISABLE_GST_DEBUG. + Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk> + https://bugzilla.gnome.org/show_bug.cgi?id=683850 + +2012-09-12 01:35:42 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/jpegformat/Makefile.am: + jpegformat: don't link to libgstinterfaces which doesn't exist any longer + +2012-09-11 20:30:55 -0400 Olivier Crête <olivier.crete@collabora.com> + + * ext/spandsp/gstspanplc.c: + spanplc: Don't unref too much, don't forward gap event + +2012-09-11 20:19:48 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * ext/spandsp/gstspanplc.c: + * ext/spandsp/gstspanplc.h: + spanplc: Port to 1.0 API + +2012-09-11 19:41:31 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/audiovisualizers/gstaudiovisualizer.c: + audiovisualizer: Don't try to sync controller values to invalid timestamp + +2012-09-11 19:36:24 -0400 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * gst/jpegformat/gstjifmux.c: + * gst/jpegformat/gstjpegparse.c: + * tests/check/elements/jpegparse.c: + jpegparse: Finish port to 1.0 API + +2012-09-11 18:55:11 -0400 Olivier Crête <olivier.crete@collabora.com> + + * tests/check/elements/autoconvert.c: + test: Simplify autoconvert test + +2012-09-11 18:53:43 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/autoconvert/gstautoconvert.c: + autoconvert: Look at all possibilities for accept-caps even if there is a selected subelement + If the accept-caps succeeds with a different subelement, then the subsequent + caps event will change the current subelement. + +2012-09-11 18:02:28 -0400 Olivier Crête <olivier.crete@collabora.com> + + * tests/check/elements/opus.c: + test: Flush opus encoder between tests + +2012-09-11 18:01:58 -0400 Olivier Crête <olivier.crete@collabora.com> + + * tests/check/elements/opus.c: + test: Flush opus encoder between tests + +2012-09-10 18:20:48 -0400 Youness Alaoui <youness.alaoui@collabora.co.uk> + + * configure.ac: + * sys/uvch264/gstuvch264_src.c: + * sys/uvch264/gstuvch264_src.h: + uvch264: Make gudev/libusb a hard dependency and remove XU_FIND_UNIT ioctl support + Conflicts: + sys/uvch264/gstuvch264_src.c + +2012-09-11 17:47:16 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/modplug/gstmodplug.cc: + * ext/resindvd/gstmpegdemux.c: + * gst/asfmux/gstasfparse.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegtsdemux/mpegtsbase.c: + * gst/rawparse/gstrawparse.c: + ext, gst: only activate in pull mode if upstream is seekable + +2012-09-11 15:07:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/festival/gstfestival.c: + festival: timed text is text/x-raw now + +2012-09-11 15:02:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * sys/d3dvideosink/d3dvideosink.c: + * sys/d3dvideosink/d3dvideosink.h: + * sys/d3dvideosink/directx/dx.c: + d3dvideosink: port to the new GLib thread API + +2012-09-11 14:32:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpeg2enc.c: + * tests/check/elements/mplex.c: + tests: mpeg2enc, mplex: port to the new GLib thread API + +2012-09-11 14:31:49 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/opus/gstopusenc.c: + * ext/opus/gstopusenc.h: + opusenc: port to the new GLib thread API + +2012-09-11 01:52:46 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + * tests/check/Makefile.am: + * tests/check/pipelines/.gitignore: + gdp: move gdp plugin here from -base + Needs some reworking. + +2012-09-09 18:05:55 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/gdp/dataprotocol.c: + gdp: dump bytes into debug log using GST_MEMDUMP + Instead of home-grown solution. + +2012-07-27 15:21:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + update for new variable names + +2012-07-02 12:52:17 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/pipelines/streamheader.c: + tests: use multifdsink for streamheader test + Use multifdsink for pipes instead of multisocketsink, + to avoid "creating GSocket from fd 9: Socket operation + on non-socket "criticals from Gio. Test still fails, + but it fails in a different way now. + +2012-04-25 18:07:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + gdppay: plug buffer leak + +2012-04-19 14:41:40 +0200 Stefan Sauer <ensonic@users.sf.net> + + * tests/check/pipelines/streamheader.c: + tests: initialize variables + +2012-04-10 00:45:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + Use new gst_element_class_set_static_metadata() + +2012-04-05 15:11:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/gdp/gstgdp.c: + gst: Update for GST_PLUGIN_DEFINE() API change + +2012-04-01 18:11:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + Improve buffer allocation of wrapped memory + +2012-03-30 18:12:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + update for buffer api change + +2012-03-28 12:48:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + update for buffer changes + +2012-03-15 13:32:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + update for memory api changes + +2012-02-22 02:05:24 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + update for new memory api + +2012-02-03 11:38:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + gdp: fixup unit tests + +2012-02-03 11:38:15 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + gdppay: fixup for changed caps + Try to send the streamheader after the first buffer. + +2012-02-03 11:37:21 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + dataprotocol: don't define default Category + Since we now include this into the unit tests directly, don't define the default + category macro because it conflicts with check. + +2012-01-30 17:16:17 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + * gst/gdp/gstgdppay.c: + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + * tests/check/pipelines/streamheader.c: + update for HEADER flag changes + +2012-01-20 16:11:54 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + * gst/gdp/gstgdpdepay.c: + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + * tests/check/pipelines/streamheader.c: + port to new map API + +2012-01-19 15:32:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/pipelines/streamheader.c: + tests: fix some tests + +2012-01-04 16:41:53 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + * tests/check/pipelines/streamheader.c: + tests: port and enable more unit tests + +2011-12-25 23:19:57 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/Makefile.am: + * gst/gdp/dataprotocol.c: + * gst/gdp/dp-private.h: + * gst/gdp/gstgdp.c: + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + gdp: move dataprotocol library into gdp plugin and make private + We have removed things like protocol=gdp in the tcp elements + in favour of explicit gdppay/depay elements, so there's no need + to keep a public API and library for now. We can still add it + back later. Someone needs to think hard about 0.11 and gdp + anyway one of these days. + +2011-11-11 17:17:43 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.h: + gdp: fix header files + Ensure correct indentation and retab + Make sure all structure have padding + +2011-08-16 17:32:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: rename buffer PREROLL -> LIVE flag + Rename the GST_BUFFER_FLAG_PREROLL to GST_BUFFER_FLAG_LIVE and give the new flag + a meaning. The old PREROLL flag never had a clear meaning. + +2011-06-10 13:40:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: make new _buffer_allocate method + Make a new method to allocate a buffer + memory that takes the allocator and the + alignment as parameters. Provide a macro for the old method but prefer to use + the new method to encourage plugins to negotiate the allocator properly. + +2011-05-13 18:07:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: Rework GstSegment handling + Improve GstSegment, rename some fields. The idea is to have the GstSegment + structure represent the timing structure of the buffers as they are generated by + the source or demuxer element. + gst_segment_set_seek() -> gst_segment_do_seek() + Rename the NEWSEGMENT event to SEGMENT. + Make parsing of the SEGMENT event into a GstSegment structure. + Pass a GstSegment structure when making a new SEGMENT event. This allows us to + pass the timing info directly to the next element. No accumulation is needed in + the receiving element, all the info is inside the element. + Remove gst_segment_set_newsegment(): This function as used to accumulate + segments received from upstream, which is now not needed anymore because the + segment event contains the complete timing information. + +2011-05-10 11:50:16 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: Hide the GstStructure in GstEvent + Hide the GstStructure of the event in the implementation specific part so that + we can change it. + Add methods to check and make the event writable. + Add a new method to get a writable GstStructure of the element. + Avoid directly accising the event structure. + +2011-05-02 16:00:52 +0300 Stefan Kost <ensonic@users.sf.net> + + * gst/gdp/dataprotocol.h: + gdp: add docs for GstDPPacketizer + +2011-03-21 18:13:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: port code to new buffer data API + +2010-12-06 19:40:03 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + * gst/gdp/dataprotocol.h: + gdp: remove deprecated code + +2010-10-08 09:34:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: make public enum _get_type() functions thread-safe + Not that it is likely to matter in practice, but since these are public + API they should probably be thread-safe. + +2010-10-08 00:38:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/dataprotocol.c: + gdp: dataprotocol, lfocontrolsource: fix enum value name in enums that are public API + So run-time bindings can introspect the names correctly (we abuse this + field as description field only in elements, not for public API + (where the description belongs into the gtk-doc chunk). + https://bugzilla.gnome.org/show_bug.cgi?id=629946 + +2010-03-02 22:58:06 +0100 Benjamin Otte <otte@redhat.com> + + * gst/gdp/dataprotocol.c: + gdp: Fixes for -Wmissing-declarations -Wmissing-prototypes + Also adds those flags to the configure warning flags + https://bugzilla.gnome.org/show_bug.cgi?id=611692 + +2010-03-02 23:51:18 +0100 Benjamin Otte <otte@redhat.com> + + * gst/gdp/dp-private.h: + gdp: Make code safe for -Wredundant-decls + Adds that warning to configure.ac + Includes a tiny change of the GST_BOILERPLATE_FULL() macro: + The get_type() function is no longer declared before being defined. + https://bugzilla.gnome.org/show_bug.cgi?id=611692 + +2009-11-27 16:39:37 +0200 Stefan Kost <ensonic@users.sf.net> + + * gst/gdp/dataprotocol.c: + gdp: fix broken xrefs in docs + +2008-06-30 09:38:45 +0000 Sebastian Dröge <slomo@circular-chaos.org> + + gdp: Don't write to the same region of memory as a uint64 and uint16 as this breaks ... + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + Don't write to the same region of memory as a uint64 and uint16 + as this breaks strict aliasing rules and apparantly breaks on PPC + and s390. Thanks to Sjoerd Simons for analysing. Fixes bug #348114. + +2008-03-27 15:23:55 +0000 Michael Smith <msmith@xiph.org> + + gdp: When calculating GDP body CRC, use the correct pointer. + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_packet_from_event_1_0): + When calculating GDP body CRC, use the correct pointer. + Fixes part of #522401. + +2008-02-29 12:41:33 +0000 Sebastian Dröge <slomo@circular-chaos.org> + + gdp: Correct all relevant warnings found by the sparse semantic code analyzer. This include marking several symbols static... + Original commit message from CVS: + * gst/gstconfig.h.in: + * libs/gst/base/gstcollectpads.c: (gst_collect_pads_read_buffer): + * libs/gst/check/gstcheck.c: (gst_check_log_message_func), + (gst_check_log_critical_func), (gst_check_drop_buffers), + (gst_check_element_push_buffer_list): + * libs/gst/controller/gstcontroller.c: (gst_controller_get), + (gst_controller_get_type): + * libs/gst/controller/gsthelper.c: (gst_object_control_properties), + (gst_object_get_controller), (gst_object_get_control_source): + * libs/gst/controller/gstinterpolationcontrolsource.c: + (gst_interpolation_control_source_new): + * libs/gst/controller/gstlfocontrolsource.c: + (gst_lfo_control_source_new): + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_event_from_packet_0_2): + * plugins/elements/gstfdsrc.c: + * plugins/elements/gstmultiqueue.c: + * plugins/elements/gsttee.c: + * plugins/elements/gsttypefindelement.c: + * plugins/indexers/gstfileindex.c: (_file_index_id_save_xml), + (gst_file_index_add_association): + * plugins/indexers/gstmemindex.c: + * tests/benchmarks/gstpollstress.c: (mess_some_more): + * tests/check/elements/queue.c: (setup_queue): + * tests/check/gst/gstpipeline.c: + * tests/check/libs/collectpads.c: (setup), (teardown), + (gst_collect_pads_suite): + * tests/examples/adapter/adapter_test.c: + * tests/examples/metadata/read-metadata.c: (make_pipeline): + * tests/examples/xml/createxml.c: + * tests/examples/xml/runxml.c: + * tools/gst-inspect.c: + * tools/gst-run.c: + Correct all relevant warnings found by the sparse semantic code + analyzer. This include marking several symbols static, using + NULL instead of 0 for pointers, not using variable sized arrays + on the stack, moving variable declarations to the beginning of + a block and using "foo (void)" instead of "foo ()" for declarations. + +2008-01-08 02:07:38 +0000 Damien Lespiau <damien.lespiau@gmail.com> + + gdp: Fix empty prototypes. Fixes bug #507957. + Original commit message from CVS: + Patch by: Damien Lespiau <damien.lespiau@gmail.com> + * libs/gst/controller/gstcontroller.h: + * libs/gst/controller/gstcontrolsource.h: + * libs/gst/controller/gstinterpolationcontrolsource.h: + * libs/gst/controller/gstlfocontrolsource.h: + * libs/gst/dataprotocol/dataprotocol.h: + Fix empty prototypes. Fixes bug #507957. + +2007-11-01 21:50:05 +0000 Tim-Philipp Müller <tim@centricular.net> + + gdp: g_type_class_ref() other types as well, see #349410 and #64764. + Original commit message from CVS: + * gst/gst.c: (init_post): + * gst/gstevent.c: (_gst_event_initialize): + * gst/gstquery.c: (_gst_query_initialize): + * libs/gst/dataprotocol/dataprotocol.c (gst_dp_init): + g_type_class_ref() other types as well, see #349410 and #64764. + * gst/gstbuffer.c: (_gst_buffer_initialize): + * gst/gstmessage.c: (_gst_message_initialize): + Simplify existing g_type_class_ref(). + +2006-10-05 14:26:08 +0000 Tim-Philipp Müller <tim@centricular.net> + + gdp: Printf fixes. + Original commit message from CVS: + * gst/gstpad.c: (pre_activate): + * gst/gstregistry.c: (gst_registry_scan_path_level): + * gst/gstregistryxml.c: (load_plugin): + * libs/gst/controller/gstcontroller.c: + (gst_controlled_property_set_interpolation_mode): + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_packet_from_event_1_0): + * libs/gst/net/gstnetclientclock.c: + (gst_net_client_clock_observe_times): + * plugins/elements/gstfdsrc.c: (gst_fd_src_create): + Printf fixes. + +2006-08-11 15:26:33 +0000 Andy Wingo <wingo@pobox.com> + + gdp: GST_DISABLE_DEPRECATED is only for users of API that don't want to see deprecated functions in the headers; people th... + Original commit message from CVS: + 2006-08-11 Andy Wingo <wingo@pobox.com> + * configure.ac: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packetizer_new): + * tests/check/libs/gdp.c: (gst_dp_suite): GST_DISABLE_DEPRECATED + is only for users of API that don't want to see deprecated + functions in the headers; people that want to compile out + deprecated code should pass -DGST_REMOVE_DEPRECATED into the + CFLAGS. Fixes the build of multifdsink, or will soon.. + +2006-08-10 19:46:14 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + gdp: add gst_object_{s,g}et_control_rate(), add private data section, fix docs + Original commit message from CVS: + * docs/libs/gstreamer-libs-sections.txt: + * libs/gst/controller/gstcontroller.c: + (_gst_controller_get_property), (_gst_controller_set_property), + (_gst_controller_init), (_gst_controller_class_init): + * libs/gst/controller/gstcontroller.h: + * libs/gst/controller/gsthelper.c: (gst_object_get_control_rate), + (gst_object_set_control_rate): + API: add gst_object_{s,g}et_control_rate(), add private data section, + fix docs + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packetizer_new): + * libs/gst/dataprotocol/dataprotocol.h: + add deprecation guards to make gtk-doc happy and allow disabling cruft + +2006-08-02 15:19:30 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Make debug category static + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer_any), (gst_dp_packet_from_caps_any), + (gst_dp_crc), (gst_dp_header_payload_length), + (gst_dp_header_payload_type), (gst_dp_packet_from_event), + (gst_dp_packet_from_event_1_0), (gst_dp_buffer_from_header), + (gst_dp_caps_from_packet), (gst_dp_event_from_packet_0_2), + (gst_dp_event_from_packet), (gst_dp_validate_header), + (gst_dp_validate_payload): + Make debug category static + Constify the crc table. + Do some more arg checking in public functions. + Fix some docs and do some small cleanups. + * tests/check/libs/gdp.c: (GST_START_TEST), (gst_dp_suite): + Add some more checks to see if GDP deals with bogus input. + +2006-07-13 14:02:16 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: fix failure to deserialize event packets with empty payload (only ev... + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_event_from_packet_1_0): + Fixes #347337: failure to deserialize event packets with + empty payload (only event type) + +2006-06-13 19:24:34 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: add a gdp image to the docs + Original commit message from CVS: + * docs/README: + * docs/images/gdp-header.svg: + add a gdp image + * docs/libs/Makefile.am: + * docs/libs/gdp-header.png: + * libs/gst/dataprotocol/dataprotocol.c: + add it to the API docs + * docs/manual/intro-motivation.xml: + fix typo + +2006-06-06 14:29:54 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + gdp: add note to docs about GDP versioning; remove tmpl file + Original commit message from CVS: + add note to docs about GDP versioning; remove tmpl file + +2006-06-06 14:24:00 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: add a GstDPPacketizer object, and create/free functions + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer_any), (gst_dp_packet_from_caps_any), + (gst_dp_version_get_type), (gst_dp_init), + (gst_dp_header_from_buffer), (gst_dp_header_from_buffer_1_0), + (gst_dp_packet_from_caps), (gst_dp_packet_from_caps_1_0), + (gst_dp_packet_from_event), (gst_dp_packet_from_event_1_0), + (gst_dp_event_from_packet_0_2), (gst_dp_event_from_packet_1_0), + (gst_dp_event_from_packet), (gst_dp_packetizer_new), + (gst_dp_packetizer_free): + * libs/gst/dataprotocol/dataprotocol.h: + API: add a GstDPPacketizer object, and create/free functions + API: add GstDPVersion enum + Add 1.0 event function that uses the string serialization + Serialize more useful buffer flags + Fixes #343988 + +2006-06-02 16:46:19 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: factor out CRC code + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer), (gst_dp_packet_from_caps), + (gst_dp_packet_from_event): + factor out CRC code + +2006-06-02 10:58:47 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: factor out some common header init code + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer), (gst_dp_packet_from_caps), + (gst_dp_packet_from_event): + factor out some common header init code + +2006-06-02 10:08:31 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: make gst_dp_crc() public + Original commit message from CVS: + * docs/libs/gstreamer-libs-sections.txt: + * docs/libs/tmpl/gstdataprotocol.sgml: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_crc): + * libs/gst/dataprotocol/dataprotocol.h: + API: make gst_dp_crc() public + +2006-06-01 11:13:44 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gdp: make sure we zero the whole ABI-compatible area + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer): + make sure we zero the whole ABI-compatible area + +2006-05-08 15:53:12 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + gdp: whitespace, comment, doc fixup + Original commit message from CVS: + whitespace, comment, doc fixup + +2006-04-28 13:40:15 +0000 Michael Smith <msmith@xiph.org> + + gdp: Fixes in reading/writing events over GDP (not currently used?) - dereferencing ... + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event), + (gst_dp_event_from_packet): + Fixes in reading/writing events over GDP (not currently used?) - + dereferencing NULL events for unknown/invalid event types, memory + leak, and change g_warning to GST_WARNING. + +2006-03-10 15:30:27 +0000 Michael Smith <msmith@xiph.org> + + gdp: Fix docs for dataprocotol to not get the return types completely wrong for a fe... + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + Fix docs for dataprocotol to not get the return types completely + wrong for a few functions. + +2005-12-18 16:04:41 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Documentation updates. + Original commit message from CVS: + * libs/gst/base/gstadapter.c: + * libs/gst/base/gstadapter.h: + * libs/gst/base/gstbasesink.c: (gst_base_sink_class_init), + (gst_base_sink_get_position): + * libs/gst/base/gstbasesink.h: + * libs/gst/base/gstbasesrc.c: (gst_base_src_class_init), + (gst_base_src_default_query), (gst_base_src_default_do_seek), + (gst_base_src_do_seek), (gst_base_src_perform_seek), + (gst_base_src_send_event), (gst_base_src_update_length), + (gst_base_src_get_range), (gst_base_src_loop), + (gst_base_src_start): + * libs/gst/base/gstbasesrc.h: + * libs/gst/base/gstbasetransform.h: + * libs/gst/base/gstcollectpads.h: + * libs/gst/base/gstpushsrc.c: + * libs/gst/base/gstpushsrc.h: + * libs/gst/dataprotocol/dataprotocol.c: + * libs/gst/dataprotocol/dataprotocol.h: + * libs/gst/net/gstnetclientclock.h: + * libs/gst/net/gstnettimeprovider.h: + Documentation updates. + +2005-10-13 16:26:12 +0000 Andy Wingo <wingo@pobox.com> + + gdp: Fix Timmeke Waymans bug. + Original commit message from CVS: + 2005-10-13 Andy Wingo <wingo@pobox.com> + * libs/gst/dataprotocol/dataprotocol.c (gst_dp_packet_from_caps): + Fix Timmeke Waymans bug. + (gst_dp_caps_from_packet): Make sure we pass a NUL-terminated + string of the proper length to gst_caps_from_string. There's a + potential for, before this fix, that this could cause someone + connecting over the network to cause a segfault if the payload is + not NUL-terminated. + +2005-10-10 23:55:39 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + gdp: fix more valgrind warnings before turning up the heat + Original commit message from CVS: + fix more valgrind warnings before turning up the heat + +2005-10-08 17:17:25 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: It's about time we bump the version number. + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer), (gst_dp_packet_from_caps), + (gst_dp_packet_from_event): + * libs/gst/dataprotocol/dataprotocol.h: + * libs/gst/dataprotocol/dp-private.h: + It's about time we bump the version number. + Since event types don't fit in the guint8 anymore describing + the payload type, make payload type 16 bits wide. + +2005-09-27 16:30:26 +0000 Andy Wingo <wingo@pobox.com> + + gdp: Fix error-checking return values. + Original commit message from CVS: + 2005-09-27 Andy Wingo <wingo@pobox.com> + * libs/gst/dataprotocol/dataprotocol.c: Fix error-checking return + values. + +2005-07-27 19:00:36 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Fix serialization of seek events. + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event), + (gst_dp_event_from_packet): + Fix serialization of seek events. + +2005-07-27 18:33:03 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Some docs updates + Original commit message from CVS: + * CHANGES-0.9: + * docs/design/part-TODO.txt: + * docs/design/part-events.txt: + Some docs updates + * gst/base/gstbasesink.c: (gst_base_sink_handle_object), + (gst_base_sink_event), (gst_base_sink_do_sync), + (gst_base_sink_activate_push), (gst_base_sink_activate_pull): + * gst/base/gstbasesrc.c: (gst_base_src_send_discont), + (gst_base_src_do_seek), (gst_base_src_event_handler), + (gst_base_src_loop): + * gst/base/gstbasetransform.c: (gst_base_transform_transform_caps), + (gst_base_transform_configure_caps), (gst_base_transform_setcaps), + (gst_base_transform_get_size), (gst_base_transform_buffer_alloc), + (gst_base_transform_event), (gst_base_transform_handle_buffer), + (gst_base_transform_set_passthrough), + (gst_base_transform_is_passthrough): + * gst/elements/gstfakesink.c: (gst_fake_sink_event): + * gst/elements/gstfilesink.c: (gst_file_sink_event): + Event updates. + * gst/gstbuffer.h: + Use faster casts. + * gst/gstelement.c: (gst_element_seek): + * gst/gstelement.h: + Update gst_element_seek. + * gst/gstevent.c: (gst_event_finalize), (_gst_event_copy), + (gst_event_new), (gst_event_new_custom), (gst_event_get_structure), + (gst_event_new_flush_start), (gst_event_new_flush_stop), + (gst_event_new_eos), (gst_event_new_newsegment), + (gst_event_parse_newsegment), (gst_event_new_tag), + (gst_event_parse_tag), (gst_event_new_filler), (gst_event_new_qos), + (gst_event_parse_qos), (gst_event_new_seek), + (gst_event_parse_seek), (gst_event_new_navigation): + * gst/gstevent.h: + Make GstEvent use GstStructure. Add parsing code, make sure the + API is sufficiently generic. + Mark possible directions of events and serialization. + * gst/gstmessage.c: (gst_message_init), (gst_message_finalize), + (_gst_message_copy), (gst_message_new_segment_start), + (gst_message_new_segment_done), (gst_message_new_custom), + (gst_message_parse_segment_start), + (gst_message_parse_segment_done): + Small cleanups. + * gst/gstpad.c: (gst_pad_get_caps_unlocked), (gst_pad_accept_caps), + (gst_pad_set_caps), (gst_pad_send_event): + Update for new events. + Catch events sent in wrong directions. + * gst/gstqueue.c: (gst_queue_link_src), + (gst_queue_handle_sink_event), (gst_queue_chain), (gst_queue_loop), + (gst_queue_handle_src_query): + Event updates. + * gst/gsttag.c: + * gst/gsttag.h: + Remove event code from this file. + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event), + (gst_dp_event_from_packet): + Event updates. + +2005-07-05 10:20:14 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Ported dataprotol to 0.9. + Original commit message from CVS: + * configure.ac: + * libs/gst/dataprotocol/Makefile.am: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_validate_packet): + * libs/gst/dataprotocol/dataprotocol.h: + * pkgconfig/Makefile.am: + * pkgconfig/gstreamer-dataprotocol-uninstalled.pc.in: + * pkgconfig/gstreamer-dataprotocol.pc.in: + Ported dataprotol to 0.9. + Added pkgconfig files. + +2005-05-16 20:21:55 +0000 David Schleef <ds@schleef.org> + + gdp: remove GstData checks + Original commit message from CVS: + * check/Makefile.am: remove GstData checks + * check/gst-libs/gdp.c: (START_TEST): fix for API changes + * gst/Makefile.am: add miniobject, remove data + * gst/gst.h: add miniobject, remove data + * gst/gstdata.c: remove + * gst/gstdata.h: remove + * gst/gstdata_private.h: remove + * gst/gsttypes.h: remove GstEvent and GstMessage + * gst/gstelement.c: (gst_element_post_message): fix for API changes + * gst/gstmarshal.list: change BOXED -> OBJECT + Implement GstMiniObject. + * gst/gstminiobject.c: + * gst/gstminiobject.h: + Modify to be subclasses of GstMiniObject. + * gst/gstbuffer.c: (_gst_buffer_initialize), (gst_buffer_get_type), + (gst_buffer_class_init), (gst_buffer_finalize), (_gst_buffer_copy), + (gst_buffer_init), (gst_buffer_new), (gst_buffer_new_and_alloc), + (gst_subbuffer_get_type), (gst_subbuffer_init), + (gst_buffer_create_sub), (gst_buffer_is_span_fast), + (gst_buffer_span): + * gst/gstbuffer.h: + * gst/gstevent.c: (_gst_event_initialize), (gst_event_get_type), + (gst_event_class_init), (gst_event_init), (gst_event_finalize), + (_gst_event_copy), (gst_event_new): + * gst/gstevent.h: + * gst/gstmessage.c: (_gst_message_initialize), + (gst_message_get_type), (gst_message_class_init), + (gst_message_init), (gst_message_finalize), (_gst_message_copy), + (gst_message_new), (gst_message_new_error), + (gst_message_new_warning), (gst_message_new_tag), + (gst_message_new_state_changed), (gst_message_new_application): + * gst/gstmessage.h: + * gst/gstprobe.c: (gst_probe_perform), + (gst_probe_dispatcher_dispatch): + * gst/gstprobe.h: + * gst/gstquery.c: (_gst_query_initialize), (gst_query_get_type), + (gst_query_class_init), (gst_query_finalize), (gst_query_init), + (_gst_query_copy), (gst_query_new): + Update elements for GstData -> GstMiniObject changes + * gst/gstquery.h: + * gst/gstqueue.c: (gst_queue_finalize), (gst_queue_locked_flush), + (gst_queue_chain), (gst_queue_loop): + * gst/elements/gstbufferstore.c: + (gst_buffer_store_add_buffer_func), + (gst_buffer_store_cleared_func), (gst_buffer_store_get_buffer): + * gst/elements/gstfakesink.c: (gst_fakesink_class_init), + (gst_fakesink_render): + * gst/elements/gstfakesrc.c: (gst_fakesrc_class_init): + * gst/elements/gstfilesrc.c: (gst_mmap_buffer_get_type), + (gst_mmap_buffer_class_init), (gst_mmap_buffer_init), + (gst_mmap_buffer_finalize), (gst_filesrc_map_region), + (gst_filesrc_create_read): + * gst/elements/gstidentity.c: (gst_identity_class_init): + * gst/elements/gsttypefindelement.c: + (gst_type_find_element_src_event), (free_entry_buffers), + (gst_type_find_element_handle_event): + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer): + * libs/gst/dataprotocol/dataprotocol.h: + * libs/gst/dataprotocol/dp-private.h: + +2005-05-04 21:29:44 +0000 Andy Wingo <wingo@pobox.com> + + gdp: GCC 4 fixen. + Original commit message from CVS: + 2005-05-04 Andy Wingo <wingo@pobox.com> + * check/Makefile.am: + * docs/gst/tmpl/gstatomic.sgml: + * docs/gst/tmpl/gstplugin.sgml: + * gst/base/gstbasesink.c: (gst_basesink_activate): + * gst/base/gstbasesrc.c: (gst_basesrc_class_init), + (gst_basesrc_init), (gst_basesrc_set_dataflow_funcs), + (gst_basesrc_query), (gst_basesrc_set_property), + (gst_basesrc_get_property), (gst_basesrc_check_get_range), + (gst_basesrc_activate): + * gst/base/gstbasesrc.h: + * gst/base/gstbasetransform.c: (gst_base_transform_sink_activate), + (gst_base_transform_src_activate): + * gst/elements/gstelements.c: + * gst/elements/gstfakesrc.c: (gst_fakesrc_class_init), + (gst_fakesrc_set_property), (gst_fakesrc_get_property): + * gst/elements/gsttee.c: (gst_tee_sink_activate): + * gst/elements/gsttypefindelement.c: (find_element_get_length), + (gst_type_find_element_checkgetrange), + (gst_type_find_element_activate): + * gst/gstbin.c: (gst_bin_save_thyself), (gst_bin_restore_thyself): + * gst/gstcaps.c: (gst_caps_do_simplify), (gst_caps_save_thyself), + (gst_caps_load_thyself): + * gst/gstelement.c: (gst_element_pads_activate), + (gst_element_save_thyself), (gst_element_restore_thyself): + * gst/gstpad.c: (gst_pad_load_and_link), (gst_pad_save_thyself), + (gst_ghost_pad_save_thyself), (gst_pad_check_pull_range): + * gst/gstpad.h: + * gst/gstxml.c: (gst_xml_write), (gst_xml_parse_doc), + (gst_xml_parse_file), (gst_xml_parse_memory), + (gst_xml_get_element), (gst_xml_make_element): + * gst/indexers/gstfileindex.c: (gst_file_index_load), + (_file_index_id_save_xml), (gst_file_index_commit): + * gst/registries/gstlibxmlregistry.c: (read_string), (read_uint), + (read_enum), (load_pad_template), (load_feature), (load_plugin), + (load_paths): + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_caps), + (gst_dp_packet_from_event), (gst_dp_caps_from_packet): + * tools/gst-complete.c: (main): + * tools/gst-compprep.c: (main): + * tools/gst-inspect.c: (print_element_properties_info): + * tools/gst-launch.c: (xmllaunch_parse_cmdline): + * tools/gst-xmlinspect.c: (print_element_properties): + GCC 4 fixen. + +2005-03-21 17:34:02 +0000 Wim Taymans <wim.taymans@gmail.com> + + * gst/gdp/dataprotocol.c: + gdp: Next big merge. + Original commit message from CVS: + Next big merge. + Added GstBus for mainloop integration. + Added GstMessage for sending notifications on the bus. + Added GstTask as an abstraction for pipeline entry points. + Removed GstThread. + Removed Schedulers. + Simplified GstQueue for multithreaded core. + Made _link threadsafe, removed old capsnego. + Added STREAM_LOCK and PREROLL_LOCK in GstPad. + Added pad blocking functions. + Reworked scheduling functions in GstPad to prepare for + scheduling updates soon. + Moved events out of data stream. + Simplified GstEvent types. + Added return values to push/pull. + Removed clocking from GstElement. + Added prototypes for state change function for next merge. + Removed iterate from bins and state change management. + Fixed some elements, disabled others for now. + Fixed -inspect and -launch. + Added check for GstBus. + +2005-03-07 18:27:42 +0000 Wim Taymans <wim.taymans@gmail.com> + + * gst/gdp/dataprotocol.c: + gdp: First THREADED backport attempt, focusing on adding locks and making sure the API is threadsafe. Needs more work. Mor... + Original commit message from CVS: + First THREADED backport attempt, focusing on adding locks and + making sure the API is threadsafe. Needs more work. More docs + follow this week. + +2005-02-18 13:58:36 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org> + + gdp: Allocate the 1 byte more memory that was forgotten!!!!! + Original commit message from CVS: + 2005-02-18 Zaheer Abbas Merali <zaheerabbas at merali dot org> + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_dump_byte_array): + Allocate the 1 byte more memory that was forgotten!!!!! + +2004-10-01 16:49:01 +0000 Wim Taymans <wim.taymans@gmail.com> + + gdp: Fix threadsafety of the crc checking function. + Original commit message from CVS: + * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_crc): + Fix threadsafety of the crc checking function. + +2004-08-16 10:35:36 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + gdp: fix for #150242 + Original commit message from CVS: + fix for #150242 + +2004-07-28 10:22:07 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + gdp: doc style fixes + Original commit message from CVS: + doc style fixes + +2004-06-09 16:24:19 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + * gst/gdp/dataprotocol.h: + * gst/gdp/dp-private.h: + gdp: bump GDP to 0.1, add buffer flags + Original commit message from CVS: + bump GDP to 0.1, add buffer flags + +2004-05-24 16:38:15 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.h: + gdp: wrap header in _NEW + Original commit message from CVS: + wrap header in _NEW + +2004-05-19 17:22:53 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + * gst/gdp/dp-private.h: + Original commit message from CVS: use GST macros; add asserts + +2004-05-19 16:59:39 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dp-private.h: + gdp: private prototype + Original commit message from CVS: + private prototype + +2004-05-19 16:37:53 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/dataprotocol.c: + * gst/gdp/dataprotocol.h: + * gst/gdp/dp-private.h: + gdp: add dataprotocol + Original commit message from CVS: + clean up libs docs; add dataprotocol + +2011-11-17 12:48:25 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + add parent to pad functions + +2011-11-10 18:32:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + update for adapter api changes + +2011-09-29 13:46:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + tests: update for new audio caps + +2011-07-08 20:02:25 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + gdppay: parse caps event and payload caps + Which makes it actually output stuff. + +2011-06-13 16:32:56 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + -base: update for buffer API change + +2011-05-16 13:48:11 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + -base: port to new SEGMENT API + +2011-05-09 18:16:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + segment: fix for new core API + Fix for gst_*_segment_full rename. + +2011-05-09 13:05:12 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + -base: don't use buffer caps + Port to newest 0.11 core API, remove GST_PAD_CAPS and GST_BUFFER_CAPS. + +2011-04-19 11:35:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + gst: Use G_DEFINE_TYPE instead of GST_BOILERPLATE + +2011-01-27 17:28:51 +0100 Alessandro Decina <alessandro.d@gmail.com> + + * gst/gdp/Makefile.am: + android: make it ready for androgenizer + Remove the android/ top dir + Fixe the Makefile.am to be androgenized + To build gstreamer for android we are now using androgenizer which generates the + needed Android.mk files. + Androgenizer can be found here: + http://git.collabora.co.uk/?p=user/derek/androgenizer.git + +2011-03-31 17:47:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + bufferlist: fixes for new API + +2011-03-28 17:46:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/gdppay.c: + tests: fix more unit tests + +2011-03-28 15:51:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/pipelines/streamheader.c: + tests: fix remaining unit tests + +2011-03-28 14:12:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + tests: work on porting the unit tests + +2011-03-27 16:35:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + plugins: port some plugins to the new memory API + +2011-02-09 12:45:23 +0100 Andoni Morales Alastruey <amorales@flumotion.com> + + * gst/gdp/gstgdppay.c: + gdppay: ensure buffer's metadata is writable before setting caps + +2011-01-16 14:55:46 -0800 David Schleef <ds@schleef.org> + + * gst/gdp/gstgdppay.c: + gdppay: make newsegment buffer metadata writable + +2010-06-18 16:37:14 +0300 Stefan Kost <ensonic@users.sf.net> + + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + tests: use our own macros for the tests main function + +2010-03-15 22:49:53 +0100 Benjamin Otte <otte@redhat.com> + + * tests/check/elements/gdpdepay.c: + Add -Wwrite-strings to configure + Fixes for the code included + +2010-03-16 15:45:23 +0100 Benjamin Otte <otte@redhat.com> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + gst_element_class_set_details => gst_element_class_set_details_simple + Also change my email from the old university one to the current one. + +2010-03-11 13:32:14 +0100 Benjamin Otte <otte@redhat.com> + + * gst/gdp/gstgdpdepay.h: + * gst/gdp/gstgdppay.h: + Add -Wmissing-declarations -Wmissing-prototypes to warning flags + Includes all the fixes necessary to make stuff compile again. + +2009-11-05 15:42:09 +0100 Olivier Crête <olivier.crete@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + gdpdepay: Clear adapter on flush and state change + Fixes #600469 + +2009-10-28 00:59:35 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + Remove GST_DEBUG_FUNCPTR where they're pointless + There's not much point in using GST_DEBUG_FUNCPTR with GObject + virtual functions such as get_property, set_propery, finalize and + dispose, since they'll never be used by anyone anyway. Saves a + few bytes and possibly a sixteenth of a polar bear. + +2009-09-22 11:58:26 +0100 Jan Schmidt <thaytan@noraisin.net> + + * gst/gdp/gstgdppay.c: + gdppay: Don't repeat tags buffers for every new segment + Only send a tag buffer when one is received, not after every new segment + event/update. + +2009-08-27 18:59:49 +0200 Marc-André Lureau <mlureau@flumotion.com> + + * gst/gdp/gstgdppay.c: + Bug 593035 - set IN_CAPS for streamheader buffer + +2009-08-10 15:40:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * tests/check/pipelines/streamheader.c: + streamheader: Fix caps leak in the vorbisenc unit test + +2009-08-10 14:14:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * tests/check/pipelines/streamheader.c: + checks: fix stream header unit test hanging in gst_task_cleanup_all() + Set pipelines to NULL state and unref when done. + +2009-05-27 12:10:05 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gdp/gstgdppay.c: + gdppay: set caps on outgoing buffers + Set caps on outgoing buffers because NULL caps confuse basetransform. + Fixes #583867 + +2008-10-16 15:07:00 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + Don't install static libs for plugins. Fixes #550851 for base. + Original commit message from CVS: + * ext/alsa/Makefile.am: + * ext/cdparanoia/Makefile.am: + * ext/gio/Makefile.am: + * ext/gnomevfs/Makefile.am: + * ext/libvisual/Makefile.am: + * ext/ogg/Makefile.am: + * ext/pango/Makefile.am: + * ext/theora/Makefile.am: + * ext/vorbis/Makefile.am: + * gst/adder/Makefile.am: + * gst/audioconvert/Makefile.am: + * gst/audiorate/Makefile.am: + * gst/audioresample/Makefile.am: + * gst/audiotestsrc/Makefile.am: + * gst/ffmpegcolorspace/Makefile.am: + * gst/gdp/Makefile.am: + * gst/playback/Makefile.am: + * gst/subparse/Makefile.am: + * gst/tcp/Makefile.am: + * gst/typefind/Makefile.am: + * gst/videorate/Makefile.am: + * gst/videoscale/Makefile.am: + * gst/videotestsrc/Makefile.am: + * gst/volume/Makefile.am: + * sys/v4l/Makefile.am: + * sys/ximage/Makefile.am: + * sys/xvimage/Makefile.am: + Don't install static libs for plugins. Fixes #550851 for base. + +2008-07-10 21:06:06 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + Cleanup Plugin docs. Link to signals and properties. Fix sub-section titles. Drop mentining that all our example pipe... + Original commit message from CVS: + * docs/plugins/gst-plugins-base-plugins-docs.sgml: + * docs/plugins/gst-plugins-base-plugins-overrides.txt: + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/gst-plugins-base-plugins.hierarchy: + * docs/plugins/gst-plugins-base-plugins.interfaces: + * docs/plugins/gst-plugins-base-plugins.prerequisites: + * docs/plugins/gst-plugins-base-plugins.signals: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-decodebin.xml: + * docs/plugins/inspect/plugin-ffmpegcolorspace.xml: + * docs/plugins/inspect/plugin-gdp.xml: + * docs/plugins/inspect/plugin-gnomevfs.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-queue2.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-uridecodebin.xml: + * docs/plugins/inspect/plugin-video4linux.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * ext/alsa/gstalsamixer.c: + * ext/alsa/gstalsasink.c: + * ext/alsa/gstalsasrc.c: + * ext/gio/gstgiosink.c: + * ext/gio/gstgiosrc.c: + * ext/gio/gstgiostreamsink.c: + * ext/gio/gstgiostreamsrc.c: + * ext/gnomevfs/gstgnomevfssink.c: + * ext/gnomevfs/gstgnomevfssrc.c: + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggmux.c: + * ext/pango/gstclockoverlay.c: + * ext/pango/gsttextoverlay.c: + * ext/pango/gsttextrender.c: + * ext/pango/gsttimeoverlay.c: + * ext/theora/theoradec.c: + * ext/theora/theoraenc.c: + * ext/theora/theoraparse.c: + * ext/vorbis/vorbisdec.c: + * ext/vorbis/vorbisenc.c: + * ext/vorbis/vorbisparse.c: + * ext/vorbis/vorbistag.c: + * gst/adder/gstadder.c: + * gst/audioconvert/gstaudioconvert.c: + * gst/audioresample/gstaudioresample.c: + * gst/audiotestsrc/gstaudiotestsrc.c: + * gst/ffmpegcolorspace/gstffmpegcolorspace.c: + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + * gst/playback/gstdecodebin2.c: + * gst/playback/gstplaybin.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gstqueue2.c: + * gst/playback/gsturidecodebin.c: + * gst/tcp/gstmultifdsink.c: + * gst/tcp/gsttcpserversink.c: + * gst/videorate/gstvideorate.c: + * gst/videoscale/gstvideoscale.c: + * gst/videotestsrc/gstvideotestsrc.c: + * gst/volume/gstvolume.c: + * sys/ximage/ximagesink.c: + * sys/xvimage/xvimagesink.c: + Cleanup Plugin docs. Link to signals and properties. Fix sub-section + titles. Drop mentining that all our example pipelines are "simple" + pipelines. + +2008-06-30 09:46:15 +0000 Sebastian Dröge <slomo@circular-chaos.org> + + tests/check/: Enable unit tests on PPC again as the bugs are now fixed. + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (gdpdepay_suite): + * tests/check/pipelines/streamheader.c: (streamheader_suite): + Enable unit tests on PPC again as the bugs are now fixed. + +2008-06-20 08:45:13 +0000 Antoine Tremblay <hexa00@gmail.com> + + gst/gdp/gstgdppay.c: Fix a buffer memleak and remove a confusing and wrong debug output. + Original commit message from CVS: + Patch by: Antoine Tremblay <hexa00 at gmail dot com> + * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset): + Fix a buffer memleak and remove a confusing and wrong debug output. + Fixes bug #538663. + +2008-06-04 16:00:26 +0000 Peter Kjellerstedt <pkj@axis.com> + + tests/check/pipelines/streamheader.c: Do not try to run a test which requires vorbisenc unless we have actually built... + Original commit message from CVS: + * tests/check/pipelines/streamheader.c: (buffer_probe_cb), + (test_multifdsink_gdp_vorbisenc), (streamheader_suite): + Do not try to run a test which requires vorbisenc unless we have + actually built it. + +2008-06-04 05:58:38 +0000 Antoine Tremblay <hexa00@gmail.com> + + gst/gdp/gstgdppay.c: Don't set caps on the buffers that contain a copy of the buffer including the caps of them resul... + Original commit message from CVS: + Patch by: Antoine Tremblay <hexa00 at gmail dot com> + * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader): + Don't set caps on the buffers that contain a copy of the buffer + including the caps of them resulting in an always increasing refcount + of the caps and insanely large caps. Instead include a buffer without + caps in the new caps. Fixes bug #536475. + +2008-05-22 22:09:16 +0000 Jan Schmidt <thaytan@mad.scientist.com> + + Add some documentation comments, and some new headers to be scanned. + Original commit message from CVS: + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-base-plugins-overrides.txt: + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * docs/plugins/gst-plugins-base-plugins.args: + * docs/plugins/gst-plugins-base-plugins.hierarchy: + * docs/plugins/gst-plugins-base-plugins.interfaces: + * docs/plugins/gst-plugins-base-plugins.prerequisites: + * docs/plugins/inspect/plugin-adder.xml: + * docs/plugins/inspect/plugin-alsa.xml: + * docs/plugins/inspect/plugin-audioconvert.xml: + * docs/plugins/inspect/plugin-audiorate.xml: + * docs/plugins/inspect/plugin-audioresample.xml: + * docs/plugins/inspect/plugin-audiotestsrc.xml: + * docs/plugins/inspect/plugin-cdparanoia.xml: + * docs/plugins/inspect/plugin-decodebin.xml: + * docs/plugins/inspect/plugin-ffmpegcolorspace.xml: + * docs/plugins/inspect/plugin-gdp.xml: + * docs/plugins/inspect/plugin-gio.xml: + * docs/plugins/inspect/plugin-gnomevfs.xml: + * docs/plugins/inspect/plugin-libvisual.xml: + * docs/plugins/inspect/plugin-ogg.xml: + * docs/plugins/inspect/plugin-pango.xml: + * docs/plugins/inspect/plugin-playback.xml: + * docs/plugins/inspect/plugin-queue2.xml: + * docs/plugins/inspect/plugin-subparse.xml: + * docs/plugins/inspect/plugin-tcp.xml: + * docs/plugins/inspect/plugin-theora.xml: + * docs/plugins/inspect/plugin-typefindfunctions.xml: + * docs/plugins/inspect/plugin-uridecodebin.xml: + * docs/plugins/inspect/plugin-video4linux.xml: + * docs/plugins/inspect/plugin-videorate.xml: + * docs/plugins/inspect/plugin-videoscale.xml: + * docs/plugins/inspect/plugin-videotestsrc.xml: + * docs/plugins/inspect/plugin-volume.xml: + * docs/plugins/inspect/plugin-vorbis.xml: + * docs/plugins/inspect/plugin-ximagesink.xml: + * docs/plugins/inspect/plugin-xvimagesink.xml: + * ext/cdparanoia/gstcdparanoiasrc.c: + * ext/ogg/gstoggdemux.c: + * ext/ogg/gstoggdemux.h: + * ext/ogg/gstoggmux.c: + * ext/ogg/gstoggmux.h: + * gst/audioconvert/audioconvert.c: + * gst/audioconvert/audioconvert.h: + * gst/audioconvert/gstaudioconvert.h: + * gst/gdp/gstgdpdepay.h: + * gst/gdp/gstgdppay.h: + * gst/playback/gstdecodebin.c: + * gst/playback/gstdecodebin2.c: + * gst/playback/gstplaybin.c: + * gst/playback/gstplaybin2.c: + * gst/playback/gsturidecodebin.c: + * gst/tcp/gstmultifdsink.c: + * gst/tcp/gstmultifdsink.h: + * gst/tcp/gsttcp.h: + Add some documentation comments, and some new headers to be scanned. + Rename some internal enum declarations (audioconvert's DitherType and + NoiseShapingType, GstUnitType from the TCP elements) to match the + documented GObject type names so that the docs pick them up. + Name the playbin2 docs markups properly so they get picked up. They'll + need renaming back when/if playbin2 becomes playbin. + 100% symbol coverage for the plugin docs, booya. + +2008-05-21 16:36:50 +0000 Wim Taymans <wim.taymans@gmail.com> + + Don't use bad gst_element_get_pad(). + Original commit message from CVS: + * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind): + * gst/playback/decodetest.c: (new_decoded_pad_cb): + * gst/playback/gstdecodebin.c: (gst_decode_bin_init), + (try_to_link_1), (elem_is_dynamic), (close_link), (type_found), + (cleanup_decodebin): + * gst/playback/gstdecodebin2.c: (gst_decode_bin_init), + (connect_element), (gst_decode_group_control_demuxer_pad): + * gst/playback/gstplaybasebin.c: (queue_remove_probe), + (queue_out_of_data), (gen_preroll_element), (preroll_unlinked), + (mute_group_type): + * gst/playback/gstplaybin.c: (gst_play_bin_vis_blocked), + (gst_play_bin_set_property), (handoff), (gen_video_element), + (gen_text_element), (gen_audio_element), (gen_vis_element), + (remove_sinks), (add_sink), (setup_sinks): + * gst/playback/gstplaybin2.c: (pad_added_cb), (no_more_pads_cb): + * gst/playback/gstplaysink.c: (gst_play_sink_get_video_sink), + (gst_play_sink_get_audio_sink), (gst_play_sink_vis_unblocked), + (gst_play_sink_vis_blocked), (gst_play_sink_set_vis_plugin), + (gst_play_sink_get_vis_plugin), (gst_play_sink_set_mute), + (gen_video_chain), (gen_text_chain), (gen_audio_chain), + (gen_vis_chain), (gst_play_sink_reconfigure), + (gst_play_sink_set_font_desc), (gst_play_sink_get_font_desc), + (gst_play_sink_request_pad): + * gst/playback/gsturidecodebin.c: (type_found), (setup_source): + * gst/playback/test.c: (gen_video_element), (gen_audio_element), + (cb_newpad): + * gst/playback/test6.c: (new_decoded_pad_cb): + * tests/check/elements/audioconvert.c: (GST_START_TEST): + * tests/check/elements/audiorate.c: (test_injector_chain), + (do_perfect_stream_test): + * tests/check/elements/ffmpegcolorspace.c: (GST_START_TEST): + * tests/check/elements/gdpdepay.c: (GST_START_TEST): + * tests/check/elements/gnomevfssink.c: + * tests/check/elements/textoverlay.c: + (notgst_check_setup_src_pad2), (notgst_check_teardown_src_pad2): + * tests/check/elements/videotestsrc.c: (GST_START_TEST): + * tests/check/libs/cddabasesrc.c: (GST_START_TEST): + * tests/check/pipelines/oggmux.c: (test_pipeline): + * tests/check/pipelines/streamheader.c: (GST_START_TEST): + * tests/check/pipelines/theoraenc.c: (GST_START_TEST): + * tests/check/pipelines/vorbisenc.c: (GST_START_TEST): + * tests/examples/seek/scrubby.c: (make_wav_pipeline): + * tests/examples/seek/seek.c: (make_mod_pipeline), + (make_dv_pipeline), (make_wav_pipeline), (make_flac_pipeline), + (make_sid_pipeline), (make_parse_pipeline), (make_vorbis_pipeline), + (make_theora_pipeline), (make_vorbis_theora_pipeline), + (make_avi_msmpeg4v3_mp3_pipeline), (make_mp3_pipeline), + (make_avi_pipeline), (make_mpeg_pipeline), (make_mpegnt_pipeline), + (update_fill), (msg_buffering): + Don't use bad gst_element_get_pad(). + +2008-05-21 06:45:22 +0000 Antoine Tremblay <hexa00@gmail.com> + + gst/gdp/gstgdppay.c: Close a buffer memory leak. Fixes bug #534071. + Original commit message from CVS: + Patch by: Antoine Tremblay <hexa00 at gmail dot com> + * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain): + Close a buffer memory leak. Fixes bug #534071. + +2008-04-18 14:54:01 +0000 Edward Hervey <bilboed@bilboed.com> + + gst/gdp/gstgdpdepay.c: Don't validate the payload if there isn't any. + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain): + Don't validate the payload if there isn't any. + Fixes #525915 + +2008-03-27 15:26:38 +0000 Michael Smith <msmith@xiph.org> + + gst/gdp/gstgdpdepay.c: Check the body CRC (if set) when depayloading. + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain): + Check the body CRC (if set) when depayloading. + Fixes #522401. + +2008-03-23 13:12:41 +0000 Tim-Philipp Müller <tim@centricular.net> + + tests/check/elements/gdpdepay.c: Make test compile without unused function/variable warnings on PPC. + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: + Make test compile without unused function/variable warnings on PPC. + +2008-03-22 15:00:53 +0000 Sebastian Dröge <slomo@circular-chaos.org> + + Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use static strings (i.e. all). This gives us less memory u... + Original commit message from CVS: + * configure.ac: + * ext/alsa/gstalsamixerelement.c: + (gst_alsa_mixer_element_class_init): + * ext/alsa/gstalsasink.c: (gst_alsasink_class_init): + * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init): + * ext/cdparanoia/gstcdparanoiasrc.c: + (gst_cd_paranoia_src_class_init): + * ext/gio/gstgiosink.c: (gst_gio_sink_class_init): + * ext/gio/gstgiosrc.c: (gst_gio_src_class_init): + * ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_class_init): + * ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_class_init): + * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init): + * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init): + * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init): + * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init): + * ext/pango/gsttextrender.c: (gst_text_render_class_init): + * ext/theora/theoradec.c: (gst_theora_dec_class_init): + * ext/theora/theoraenc.c: (gst_theora_enc_class_init): + * ext/theora/theoraparse.c: (gst_theora_parse_class_init): + * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_class_init): + * gst-libs/gst/audio/gstaudiofiltertemplate.c: + (gst_audio_filter_template_class_init): + * gst-libs/gst/audio/gstbaseaudiosink.c: + (gst_base_audio_sink_class_init): + * gst-libs/gst/audio/gstbaseaudiosrc.c: + (gst_base_audio_src_class_init): + * gst-libs/gst/cdda/gstcddabasesrc.c: + (gst_cdda_base_src_class_init): + * gst-libs/gst/interfaces/mixertrack.c: + (gst_mixer_track_class_init): + * gst-libs/gst/rtp/gstbasertpdepayload.c: + (gst_base_rtp_depayload_class_init): + * gst-libs/gst/rtp/gstbasertppayload.c: + (gst_basertppayload_class_init): + * gst/audioconvert/gstaudioconvert.c: + (gst_audio_convert_class_init): + * gst/audiorate/gstaudiorate.c: (gst_audio_rate_class_init): + * gst/audioresample/gstaudioresample.c: + (gst_audioresample_class_init): + * gst/audiotestsrc/gstaudiotestsrc.c: + (gst_audio_test_src_class_init): + * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init): + * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init): + * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init), + (preroll_unlinked): + * gst/playback/gstplaybin.c: (gst_play_bin_class_init): + * gst/playback/gstplaybin2.c: (gst_play_bin_class_init): + * gst/playback/gstplaysink.c: (gst_play_sink_class_init): + * gst/playback/gstqueue2.c: (gst_queue_class_init): + * gst/playback/gststreaminfo.c: (gst_stream_info_class_init): + * gst/playback/gststreamselector.c: (gst_selector_pad_class_init), + (gst_stream_selector_class_init): + * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init): + * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init): + * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init): + * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init): + * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init): + * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init): + * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init): + * gst/videorate/gstvideorate.c: (gst_video_rate_class_init): + * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init): + * gst/videotestsrc/gstvideotestsrc.c: + (gst_video_test_src_class_init): + * gst/volume/gstvolume.c: (gst_volume_class_init): + * sys/v4l/gstv4lelement.c: (gst_v4lelement_class_init): + * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init): + * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init): + * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init): + * sys/ximage/ximagesink.c: (gst_ximagesink_class_init): + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init): + Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use + static strings (i.e. all). This gives us less memory usage, + fewer allocations and thus less memory defragmentation. Depend + on core CVS for this. Fixes bug #523806. + +2008-03-03 06:04:31 +0000 Sebastian Dröge <slomo@circular-chaos.org> + + Correct all relevant warnings found by the sparse semantic code analyzer. This include marking several symbols static... + Original commit message from CVS: + * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_get_type): + * ext/alsa/gstalsasink.c: (set_hwparams): + * ext/alsa/gstalsasrc.c: (set_hwparams): + * ext/gio/gstgio.c: (gst_gio_uri_handler_get_uri): + * ext/ogg/gstoggmux.h: + * ext/ogg/gstogmparse.c: + * gst-libs/gst/audio/audio.c: + * gst-libs/gst/fft/kiss_fft_f64.c: (kiss_fft_f64_alloc): + * gst-libs/gst/pbutils/missing-plugins.c: + (gst_missing_uri_sink_message_new), + (gst_missing_element_message_new), + (gst_missing_decoder_message_new), + (gst_missing_encoder_message_new): + * gst-libs/gst/rtp/gstbasertppayload.c: + * gst-libs/gst/rtp/gstrtcpbuffer.c: + (gst_rtcp_packet_bye_get_reason): + * gst/audioconvert/gstaudioconvert.c: + * gst/audioresample/gstaudioresample.c: + * gst/ffmpegcolorspace/imgconvert.c: + * gst/playback/test.c: (gen_video_element), (gen_audio_element): + * gst/typefind/gsttypefindfunctions.c: + * gst/videoscale/vs_4tap.c: + * gst/videoscale/vs_4tap.h: + * sys/v4l/gstv4lelement.c: + * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_any_caps): + * sys/v4l/v4l_calls.c: + * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init), + (gst_v4lsrc_try_capture): + * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls), + (gst_ximagesink_ximage_new): + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls), + (gst_xvimagesink_xvimage_new): + * tests/check/elements/audioconvert.c: + * tests/check/elements/audioresample.c: + (fail_unless_perfect_stream): + * tests/check/elements/audiotestsrc.c: (setup_audiotestsrc): + * tests/check/elements/decodebin.c: + * tests/check/elements/gdpdepay.c: (setup_gdpdepay), + (setup_gdpdepay_streamheader): + * tests/check/elements/gdppay.c: (setup_gdppay), (GST_START_TEST), + (setup_gdppay_streamheader): + * tests/check/elements/gnomevfssink.c: (setup_gnomevfssink): + * tests/check/elements/multifdsink.c: (setup_multifdsink): + * tests/check/elements/textoverlay.c: + * tests/check/elements/videorate.c: (setup_videorate): + * tests/check/elements/videotestsrc.c: (setup_videotestsrc): + * tests/check/elements/volume.c: (setup_volume): + * tests/check/elements/vorbisdec.c: (setup_vorbisdec): + * tests/check/elements/vorbistag.c: + * tests/check/generic/clock-selection.c: + * tests/check/generic/states.c: (setup), (teardown): + * tests/check/libs/cddabasesrc.c: + * tests/check/libs/video.c: + * tests/check/pipelines/gio.c: + * tests/check/pipelines/oggmux.c: + * tests/check/pipelines/simple-launch-lines.c: + (simple_launch_lines_suite): + * tests/check/pipelines/streamheader.c: + * tests/check/pipelines/theoraenc.c: + * tests/check/pipelines/vorbisdec.c: + * tests/check/pipelines/vorbisenc.c: + * tests/examples/seek/scrubby.c: + * tests/examples/seek/seek.c: (query_positions_elems), + (query_positions_pads): + * tests/icles/stress-xoverlay.c: (myclock): + Correct all relevant warnings found by the sparse semantic code + analyzer. This include marking several symbols static, using + NULL instead of 0 for pointers and using "foo (void)" instead + of "foo ()" for declarations. + * win32/common/libgstrtp.def: + Add gst_rtp_buffer_set_extension_data to the symbol definition file. + +2007-06-14 19:53:27 +0000 Tim-Philipp Müller <tim@centricular.net> + + tests/check/pipelines/streamheader.c: Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it fails on the p5-ppc6... + Original commit message from CVS: + * tests/check/pipelines/streamheader.c: (streamheader_suite): + Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it + fails on the p5-ppc64 build bot and the failure looks like it is due + to the same issue as #348114, ie. a compiler bug. + +2007-04-14 12:34:55 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gst/gdp/gstgdppay.c (gst_gdp_pay_chain): tests/check/pipelines/streamheader.c (tag_event_probe_cb, + Original commit message from CVS: + * gst/gdp/gstgdppay.c (gst_gdp_pay_chain): + * tests/check/pipelines/streamheader.c (tag_event_probe_cb, + GST_START_TEST, buffer_probe_cb, GST_START_TEST): + Fix a bug where serialized IN_CAPS buffers needed to be set IN_CAPS. + +2007-04-13 21:55:31 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * tests/check/pipelines/streamheader.c: + tests/check/pipelines/streamheader.c (tag_event_probe_cb, + Original commit message from CVS: + * tests/check/pipelines/streamheader.c (tag_event_probe_cb, + GST_START_TEST, n_in_caps, buffer_probe_cb, GST_START_TEST, + streamheader_suite): + Add another test set up for failure + +2007-04-13 21:09:04 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdpdepay.c: + debug changes + Original commit message from CVS: + debug changes + +2007-04-13 21:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + tests/check/Makefile.am: tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb, + Original commit message from CVS: + * tests/check/Makefile.am: + * tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb, + GST_START_TEST, streamheader_suite, main): + Add a test for the streamheader bug Wim fixed. + +2007-04-12 10:03:22 +0000 Wim Taymans <wim.taymans@gmail.com> + + gst/gdp/gstgdppay.c: Make sure we set the IN_CAPS flag correctly. + Original commit message from CVS: + * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain), + (gst_gdp_pay_sink_event): + Make sure we set the IN_CAPS flag correctly. + * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render): + Get the IN_CAPS flag before we call functions that mess with the flags. + +2007-04-10 20:37:05 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdppay.c: + gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader, gst_gdp_pay_chain, gst_gdp_pay_sink_event): + Original commit message from CVS: + * gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader, + gst_gdp_pay_chain, gst_gdp_pay_sink_event): + Only stamp buffers with offset/offset_end right before they get + pushed. This ensures offset continuity, which was not the case + before as shown by + gst-launch -v -m audiotestsrc num-buffers=10 ! audioconvert ! vorbisenc ! gdppay ! identity check-imperfect-offset=TRUE ! fakesink silent=TRUE + +2007-04-10 20:25:06 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + adding debugging + Original commit message from CVS: + adding debugging + +2007-03-14 15:05:32 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdpdepay.c: + add buffer logging + Original commit message from CVS: + add buffer logging + +2006-12-22 12:10:18 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + tests/check/elements/: Fix the dp tests, but activating the pads for the streamheader tests too and cleaning up condi... + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (cleanup_gdpdepay), + (setup_gdpdepay_streamheader): + * tests/check/elements/gdppay.c: (cleanup_gdppay), + (setup_gdppay_streamheader): + Fix the dp tests, but activating the pads for the streamheader tests + too and cleaning up conditionaly + +2006-12-21 08:12:26 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + tests/check/elements/: consistent pad (de)activation + Original commit message from CVS: + * tests/check/elements/audioresample.c: (cleanup_audioresample): + * tests/check/elements/audiotestsrc.c: (cleanup_audiotestsrc): + * tests/check/elements/gdpdepay.c: (setup_gdpdepay), + (cleanup_gdpdepay): + * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay): + * tests/check/elements/subparse.c: (teardown_subparse): + * tests/check/elements/textoverlay.c: (cleanup_textoverlay): + * tests/check/elements/videorate.c: (cleanup_videorate): + * tests/check/elements/videotestsrc.c: (cleanup_videotestsrc): + * tests/check/elements/volume.c: (cleanup_volume): + * tests/check/elements/vorbisdec.c: (setup_vorbisdec), + (cleanup_vorbisdec): + * tests/check/elements/vorbistag.c: (setup_vorbistag), + (cleanup_vorbistag): + consistent pad (de)activation + +2006-09-21 05:31:00 +0000 Wim Taymans <wim.taymans@gmail.com> + + tests/check/: Some more compilation fixes. + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (GST_START_TEST): + * tests/check/libs/audio.c: + Some more compilation fixes. + +2006-09-20 17:04:57 +0000 Wim Taymans <wim.taymans@gmail.com> + + tests/check/: Fix some warnings. + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (GST_START_TEST): + * tests/check/elements/multifdsink.c: (GST_START_TEST): + * tests/check/elements/videorate.c: (GST_START_TEST): + * tests/check/libs/cddabasesrc.c: (GST_START_TEST): + * tests/check/pipelines/oggmux.c: (eos_buffer_probe): + Fix some warnings. + +2006-08-25 16:19:55 +0000 Michael Smith <msmith@xiph.org> + + gst/gdp/gstgdppay.c: Fix memory leaks and misleading debug messages, add a couple of comments. + Original commit message from CVS: + * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset), + (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain): + Fix memory leaks and misleading debug messages, add a couple of + comments. + * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_get_stats), + (gst_multi_fd_sink_render): + Do not use gst_buffer_make_writable() in a basesink render method, + as it may incorrectly unref the buffer. Instead, use convoluted + dance to avoid copying the buffer except when we need to. + +2006-08-21 19:04:14 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/README: + adding a README + Original commit message from CVS: + adding a README + +2006-08-21 19:01:41 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + Move GDP plugin to -base from -bad. Closes #347783. + Original commit message from CVS: + * configure.ac: + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-base-plugins-docs.sgml: + * docs/plugins/gst-plugins-base-plugins-sections.txt: + * docs/plugins/inspect/plugin-gdp.xml: + * gst/gdp/Makefile.am: + * tests/check/Makefile.am: + Move GDP plugin to -base from -bad. Closes #347783. + +2006-08-08 13:57:29 +0000 Edward Hervey <bilboed@bilboed.com> + + tests/check/elements/gdpdepay.c: I forgot to include the file containing the #define :) + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (gdpdepay_suite): + I forgot to include the file containing the #define :) + Now includes "config.h" + +2006-08-08 13:45:44 +0000 Edward Hervey <bilboed@bilboed.com> + + tests/check/elements/gdpdepay.c: Ignore test known to fail on PPC64. See #348114. + Original commit message from CVS: + * tests/check/elements/gdpdepay.c: (gdpdepay_suite): + Ignore test known to fail on PPC64. See #348114. + +2006-08-04 13:20:23 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org> + + gst/gdp/gstgdpdepay.c: Fix event parsing by gdpdepay. Fixes #349916. + Original commit message from CVS: + 2006-08-04 Zaheer Abbas Merali <zaheerabbas at merali dot org> + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain): + Fix event parsing by gdpdepay. Fixes #349916. + +2006-08-02 16:56:19 +0000 Wim Taymans <wim.taymans@gmail.com> + + gst/gdp/gstgdpdepay.c: Disable seeking. + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init), + (gst_gdp_depay_finalize), (gst_gdp_depay_sink_event), + (gst_gdp_depay_src_event), (gst_gdp_depay_chain), + (gst_gdp_depay_change_state): + Disable seeking. + Small cleanups. + Clear adapter on disconts. + Clear caps when going to READY instead of NULL + * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init), + (gst_gdp_pay_init), (gst_gdp_pay_finalize), (gst_gdp_pay_reset), + (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer), + (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader), + (gst_gdp_queue_buffer), (gst_gdp_pay_chain), + (gst_gdp_pay_sink_event), (gst_gdp_pay_src_event), + (gst_gdp_pay_change_state): + * gst/gdp/gstgdppay.h: + Reset payloader when going to READY. + Fix leaked buffers in ->queue on push errors. + Disable seeking. + Code cleanups. + Create packetizer in _init, free in _finalize. + +2006-07-31 08:48:36 +0000 Wim Taymans <wim.taymans@gmail.com> + + gst/gdp/gstgdpdepay.c: Consume all events except EOS because we generate events from the gdp payload instead. Fixes #... + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init), + (gst_gdp_depay_sink_event), (gst_gdp_depay_chain): + Consume all events except EOS because we generate events from + the gdp payload instead. Fixes #349204 + +2006-07-26 10:52:05 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gst/gdp/gstgdpdepay.c: proxying get/set caps is the wrong thing to do, since we really do change caps quite fundament... + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init): + proxying get/set caps is the wrong thing to do, since we really + do change caps quite fundamentally + * tests/check/elements/gdpdepay.c: + * tests/check/elements/gdppay.c: + remove declaration of buffers, it's already done in gstcheck.h + +2006-07-17 14:17:45 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gst/gdp/: remove parent_class setting, BOILERPLATE does this fix typo in comment + Original commit message from CVS: + 2006-07-17 Thomas Vander Stichele <thomas at apestaart dot org> + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_class_init): + * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init), + remove parent_class setting, BOILERPLATE does this + (gst_gdp_pay_reset_streamheader): + fix typo in comment + +2006-07-14 10:34:36 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/Makefile.am: + build as a plugin, not a lib + Original commit message from CVS: + build as a plugin, not a lib + +2006-07-13 15:25:58 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + docs/plugins/: add more plugins and elements to docs + Original commit message from CVS: + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-bad-plugins-docs.sgml: + * docs/plugins/gst-plugins-bad-plugins-sections.txt: + add more plugins and elements to docs + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain): + fix segfaults due to wrong g_free + add example + * gst/gdp/gstgdppay.c: + add example + +2006-06-23 09:09:44 +0000 Tim-Philipp Müller <tim@centricular.net> + + Use GST_DEBUG_CATEGORY_STATIC where possible (#342503) and fix one GObject boilerplate macro. + Original commit message from CVS: + * ext/directfb/dfbvideosink.c: + * ext/gsm/gstgsmdec.c: + * ext/gsm/gstgsmenc.c: + * ext/libmms/gstmms.c: + * ext/neon/gstneonhttpsrc.c: + * ext/theora/theoradec.c: + * gst/freeze/gstfreeze.c: + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.c: + * sys/glsink/glimagesink.c: + Use GST_DEBUG_CATEGORY_STATIC where possible (#342503) + and fix one GObject boilerplate macro. + +2006-06-06 16:26:59 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdppay.c: + adapt to new api + Original commit message from CVS: + adapt to new api + +2006-06-06 14:39:15 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + configure.ac: enable building of GDP elements + Original commit message from CVS: + * configure.ac: + enable building of GDP elements + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain): + * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init), + (gst_gdp_pay_init), (gst_gdp_buffer_from_caps), + (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event), + (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_sink_event), + (gst_gdp_pay_set_property), (gst_gdp_pay_get_property), + (gst_gdp_pay_change_state): + * gst/gdp/gstgdppay.h: + add version 1.0 + +2006-06-02 16:45:59 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + * gst/gdp/gstgdpdepay.c: + * gst/gdp/gstgdppay.h: + small fixes + Original commit message from CVS: + small fixes + +2006-06-02 10:28:32 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gst/gdp/gstgdppay.c: add crc-header and crc-payload properties don't error out on some things that are recoverable + Original commit message from CVS: + * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init), + (gst_gdp_pay_init), (gst_gdp_buffer_from_caps), + (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event), + (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain), + (gst_gdp_pay_sink_event), (gst_gdp_pay_set_property), + (gst_gdp_pay_get_property): + add crc-header and crc-payload properties + don't error out on some things that are recoverable + * tests/check/elements/gdppay.c: (GST_START_TEST), (gdppay_suite): + add test for crc + +2006-06-01 22:00:23 +0000 Stefan Kost <ensonic@users.sourceforge.net> + + Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass + Original commit message from CVS: + * ext/alsaspdif/alsaspdifsink.h: + * ext/amrwb/gstamrwbdec.h: + * ext/amrwb/gstamrwbenc.h: + * ext/amrwb/gstamrwbparse.h: + * ext/arts/gst_arts.h: + * ext/artsd/gstartsdsink.h: + * ext/audiofile/gstafparse.h: + * ext/audiofile/gstafsink.h: + * ext/audiofile/gstafsrc.h: + * ext/audioresample/gstaudioresample.h: + * ext/bz2/gstbz2dec.h: + * ext/bz2/gstbz2enc.h: + * ext/dirac/gstdiracdec.h: + * ext/directfb/dfbvideosink.h: + * ext/divx/gstdivxdec.h: + * ext/divx/gstdivxenc.h: + * ext/dts/gstdtsdec.h: + * ext/faac/gstfaac.h: + * ext/gsm/gstgsmdec.h: + * ext/gsm/gstgsmenc.h: + * ext/ivorbis/vorbisenc.h: + * ext/libfame/gstlibfame.h: + * ext/nas/nassink.h: + * ext/neon/gstneonhttpsrc.h: + * ext/polyp/polypsink.h: + * ext/sdl/sdlaudiosink.h: + * ext/sdl/sdlvideosink.h: + * ext/shout/gstshout.h: + * ext/snapshot/gstsnapshot.h: + * ext/sndfile/gstsf.h: + * ext/swfdec/gstswfdec.h: + * ext/tarkin/gsttarkindec.h: + * ext/tarkin/gsttarkinenc.h: + * ext/theora/theoradec.h: + * ext/wavpack/gstwavpackdec.h: + * ext/wavpack/gstwavpackparse.h: + * ext/xine/gstxine.h: + * ext/xvid/gstxviddec.h: + * ext/xvid/gstxvidenc.h: + * gst/cdxaparse/gstcdxaparse.h: + * gst/cdxaparse/gstcdxastrip.h: + * gst/colorspace/gstcolorspace.h: + * gst/festival/gstfestival.h: + * gst/freeze/gstfreeze.h: + * gst/gdp/gstgdpdepay.h: + * gst/gdp/gstgdppay.h: + * gst/modplug/gstmodplug.h: + * gst/mpeg1sys/gstmpeg1systemencode.h: + * gst/mpeg1videoparse/gstmp1videoparse.h: + * gst/mpeg2sub/gstmpeg2subt.h: + * gst/mpegaudioparse/gstmpegaudioparse.h: + * gst/multifilesink/gstmultifilesink.h: + * gst/overlay/gstoverlay.h: + * gst/playondemand/gstplayondemand.h: + * gst/qtdemux/qtdemux.h: + * gst/rtjpeg/gstrtjpegdec.h: + * gst/rtjpeg/gstrtjpegenc.h: + * gst/smooth/gstsmooth.h: + * gst/smoothwave/gstsmoothwave.h: + * gst/spectrum/gstspectrum.h: + * gst/speed/gstspeed.h: + * gst/stereo/gststereo.h: + * gst/switch/gstswitch.h: + * gst/tta/gstttadec.h: + * gst/tta/gstttaparse.h: + * gst/videodrop/gstvideodrop.h: + * gst/xingheader/gstxingmux.h: + * sys/directdraw/gstdirectdrawsink.h: + * sys/directsound/gstdirectsoundsink.h: + * sys/dxr3/dxr3audiosink.h: + * sys/dxr3/dxr3spusink.h: + * sys/dxr3/dxr3videosink.h: + * sys/qcam/gstqcamsrc.h: + * sys/vcd/vcdsrc.h: + Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass + +2006-05-22 15:53:07 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + gst/gdp/: Handle error cases when calling functions do downwards state change after parent's change_state + Original commit message from CVS: + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain), + (gst_gdp_depay_change_state): + * gst/gdp/gstgdpdepay.h: + * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader), + (gst_gdp_pay_chain), (gst_gdp_pay_sink_event), + (gst_gdp_pay_change_state): + * gst/gdp/gstgdppay.h: + Handle error cases when calling functions + do downwards state change after parent's change_state + * tests/check/elements/gdpdepay.c: (GST_START_TEST): + * tests/check/elements/gdppay.c: (GST_START_TEST): + clean up more + +2006-05-22 13:25:52 +0000 Thomas Vander Stichele <thomas@apestaart.org> + + adding GDP payloader and depayloader. Build integration will follow later when the GDP issues for core are sorted out. + Original commit message from CVS: + * gst/gdp/Makefile.am: + * gst/gdp/gstgdp.c: (plugin_init): + * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_base_init), + (gst_gdp_depay_class_init), (gst_gdp_depay_init), + (gst_gdp_depay_finalize), (gst_gdp_depay_chain), + (gst_gdp_depay_change_state), (gst_gdp_depay_plugin_init): + * gst/gdp/gstgdpdepay.h: + * gst/gdp/gstgdppay.c: (gst_gdp_pay_base_init), + (gst_gdp_pay_class_init), (gst_gdp_pay_init), + (gst_gdp_pay_dispose), (gst_gdp_stamp_buffer), + (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer), + (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader), + (gst_gdp_queue_buffer), (gst_gdp_pay_chain), + (gst_gdp_pay_sink_event), (gst_gdp_pay_change_state), + (gst_gdp_pay_plugin_init): + * gst/gdp/gstgdppay.h: + * tests/check/Makefile.am: + * tests/check/elements/gdpdepay.c: (setup_gdpdepay), + (cleanup_gdpdepay), (gdpdepay_push_per_byte), (GST_START_TEST), + (setup_gdpdepay_streamheader), (gdpdepay_suite), (main): + * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay), + (GST_START_TEST), (setup_gdppay_streamheader), (gdppay_suite), + (main): + adding GDP payloader and depayloader. Build integration will + follow later when the GDP issues for core are sorted out. + +2012-09-10 20:38:14 -0400 Olivier Crête <olivier.crete@collabora.com> + + * gst/rtpmux/gstrtpmux.c: + * tests/check/elements/rtpmux.c: + rtpmux: Misc fix for 0.11 + Convert the incoming caps before proxying them + Clear the last_pad when going to ready + tests: Implement accept_caps, don't leak event + +2012-09-10 16:12:39 -0400 Olivier Crête <olivier.crete@collabora.com> + + * sys/uvch264/Makefile.am: + * sys/uvch264/gstuvch264-marshal.list: + * sys/uvch264/gstuvch264_src.c: + uvch264src: Use generic marshaller + +2012-09-10 16:09:26 -0400 Youness Alaoui <youness.alaoui@collabora.co.uk> + + * configure.ac: + * sys/Makefile.am: + * sys/uvch264/Makefile.am: + * sys/uvch264/gstuvch264-marshal.list: + * sys/uvch264/gstuvch264.c: + * sys/uvch264/gstuvch264_mjpgdemux.c: + * sys/uvch264/gstuvch264_mjpgdemux.h: + * sys/uvch264/gstuvch264_src.c: + * sys/uvch264/gstuvch264_src.h: + * sys/uvch264/uvc_h264.c: + * sys/uvch264/uvc_h264.h: + * tests/check/Makefile.am: + * tests/check/elements/.gitignore: + * tests/check/elements/uvch264demux.c: + * tests/check/elements/uvch264demux_data/valid_h264_jpg.h264: + * tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg: + * tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg: + * tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264: + * tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg: + * tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2: + * tests/examples/Makefile.am: + * tests/examples/uvch264/Makefile.am: + * tests/examples/uvch264/boolean_property.glade: + * tests/examples/uvch264/enum_property.glade: + * tests/examples/uvch264/enum_property_gtk2.glade: + * tests/examples/uvch264/int_property.glade: + * tests/examples/uvch264/test-uvch264.c: + * tests/examples/uvch264/window.glade: + UVC H264 plugin + +2012-09-09 23:52:41 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/opencv/gstmotioncells.c: + opencv: disable motioncells "date" property for now + Shouldn't be of type long. Not sure it's useful at all, so + just disable it for now to see if someone misses it. + +2012-09-09 14:35:51 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + configure: remove non-existant hlssink plugin from NONPORTED list + +2012-09-08 16:08:21 -0700 David Schleef <ds@schleef.org> + + * sys/decklink/gstdecklinksink.cpp: + decklinksink: Fix memory leak + +2012-09-08 15:57:57 -0700 David Schleef <ds@schleef.org> + + * gst/inter/gstinteraudiosink.c: + * gst/inter/gstinteraudiosrc.c: + inter: fix leaks in audiosrc/sink + +2012-09-08 17:03:33 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/videoparsers/gstmpeg4videoparse.c: + mpeg4videoparse: Don't override upstream framerate and PAR + If upstream provided some, there's a good chance they are the ones to use + +2012-09-08 14:43:37 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/hls/Makefile.am: + * gst/hls/gstfragmentedplugin.c: + hls: disable hlssink but do build hlsdemux + +2012-09-08 14:31:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + Revert "configure.ac: Properly disable HLS plugin" + This reverts commit 3ad3445a25f31bc0d0167a4f413791bea8006783. + This disabled hlsdemux as well + +2012-09-08 14:05:08 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * configure.ac: + configure.ac: Properly disable HLS plugin + +2012-09-07 16:08:57 +0200 Robert Swain <robert.swain@collabora.co.uk> + + * gst/hls/Makefile.am: + hls: Add missing GST_PLUGINS_BASE_CFLAGS + +2012-09-07 16:07:40 +0200 Robert Swain <robert.swain@collabora.co.uk> + + * gst/hls/gsthlssink.c: + * gst/hls/gsthlssink.h: + hlssink: Add segment target-duration property + This property causes hlssink to push a force key unit event upstream + every target-duration seconds. This is for simple automatic segmenting. + To disable it, set the property to 0 and push the force key unit event + manually. + +2011-08-21 11:00:51 +0200 Alessandro Decina <alessandro.d@gmail.com> + + * configure.ac: + * gst/hls/Makefile.am: + * gst/hls/gstfragmentedplugin.c: + * gst/hls/gsthlssink.c: + * gst/hls/gsthlssink.h: + * gst/hls/gstm3u8playlist.c: + * gst/hls/gstm3u8playlist.h: + hls: add hlssink element + +2012-09-06 01:53:07 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin2: use correct variable when handling pad probe buffers + Pad probe data is in the GstPadProbeInfo, not in the user data + parameter. + +2012-09-03 19:25:52 +0100 Rico Tzschichholz <ricotz@t-online.de> + + * ext/mythtv/gstmythtvsrc.c: + mythtv: update for duration message API change + +2012-09-03 14:21:19 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/schroedinger/gstschroenc.c: + schroenc: set interlace_coding based on input caps + and remove property. + +2012-09-03 14:04:40 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/schroedinger/gstschroenc.c: + schroenc: configure profile/level from allowed downstream caps instead of properties + This is how it's done elsewhere and works better with encodebin. + Removes "force-profile" property, read-only "profile" property and + "level" property. + https://bugzilla.gnome.org/show_bug.cgi?id=670608 + +2012-09-03 13:58:16 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/videoparsers/gstdiracparse.c: + diracparse: fix main profile mapping + +2012-09-03 13:04:01 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/schroedinger/gstschroenc.c: + schroenc: prettify enum property nicks + Use '-' instead of '_' as word separator. + +2012-09-03 12:41:33 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/videoparsers/gstdiracparse.c: + diracparse: change "interlaced" boolean in caps to "interlace-mode" + Not strictly needed, but let's make it consistent with the raw + video way of doing things. + +2012-09-03 12:33:51 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/videoparsers/gstdiracparse.c: + diracparse: use strings for profile and level in caps + For consistency with most other formats. + https://bugzilla.gnome.org/show_bug.cgi?id=658436 + +2012-09-02 12:36:37 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * ext/spc/gstspc.c: + spc: No need to define GLIB_DISABLE_DEPRECATION_WARNINGS + https://bugzilla.gnome.org/show_bug.cgi?id=683175 + +2012-09-02 03:55:35 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/id3tag/id3tag.c: + id3tag: extract year to write into ID3v1 tag from GST_TAG_DATE_TIME not GST_TAG_DATE + +2012-09-01 21:46:19 +0200 Matej Knopp <matej.knopp@gmail.com> + + * gst/videoparsers/gstmpeg4videoparse.c: + * gst/videoparsers/gstmpeg4videoparse.h: + mpeg4videoparse: set 0 duration when vop_coded is 0 + https://bugzilla.gnome.org/show_bug.cgi?id=683169 + +2012-09-02 01:42:30 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/resindvd/resindvdsrc.c: + * ext/soundtouch/gstpitch.cc: + * gst/hls/gsthlsdemux.c: + gst_message_new_duration -> gst_message_new_duration_changed + +2012-09-01 09:12:51 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/autoconvert/gstautoconvert.c: + autoconvert: Handle caps query on internal srcpad + Reply with ANY caps to ensure linking the internal src pad. This + might need more attention later, to reply with the real upstream caps + for the currently active element. + +2012-08-31 15:28:29 -0700 Jan Schmidt <thaytan@noraisin.net> + + * ext/resindvd/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.c: + resindvd/mpegdemux: Send both PTS and DTS downstream + Now that we can. + +2012-09-02 00:04:18 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/spc/gstspc.c: + spc: don't leak buffer in case of an init error + +2012-09-02 00:34:38 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * ext/spc/Makefile.am: + * ext/spc/gstspc.c: + * ext/spc/tag.c: + * ext/spc/tag.h: + spc: port to 0.11 + https://bugzilla.gnome.org/show_bug.cgi?id=683175 + +2012-08-31 14:13:58 -0700 Jan Schmidt <thaytan@noraisin.net> + + * ext/resindvd/resindvdbin.c: + * ext/resindvd/resindvdbin.h: + resindvd: Plug a video parser in front of decoder + Seems to make playback both better and worse. The parser needs some + fixing, it seems :-/ + +2012-08-31 12:31:48 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/dvdspu/gstdvdspu.c: + dvdspu: Make GAP event aware + +2012-08-31 08:46:45 -0700 Jan Schmidt <thaytan@noraisin.net> + + * ext/resindvd/Makefile.am: + * ext/resindvd/gstmpegdemux.c: + * ext/resindvd/gstmpegdemux.h: + * ext/resindvd/resindvdbin.c: + * ext/resindvd/resindvdbin.h: + * ext/resindvd/resindvdsrc.c: + * ext/resindvd/rsnaudiomunge.c: + * ext/resindvd/rsnaudiomunge.h: + resindvd: Add some GAP event stuff to make still-frames start to work + And remove the dead audiomunge element. It isn't needed now, we just + send GAP events + +2012-06-09 22:36:06 +1000 Jan Schmidt <thaytan@noraisin.net> + + * configure.ac: + * ext/resindvd/Makefile.am: + * ext/resindvd/gstmpegdefs.h: + * ext/resindvd/gstmpegdemux.c: + * ext/resindvd/gstmpegdemux.h: + * ext/resindvd/gstpesfilter.c: + * ext/resindvd/gstpesfilter.h: + * ext/resindvd/plugin.c: + * ext/resindvd/resindvdbin.c: + * ext/resindvd/resindvdsrc.c: + * ext/resindvd/rsnaudiomunge.c: + * ext/resindvd/rsndec.c: + * ext/resindvd/rsninputselector.c: + * ext/resindvd/rsninputselector.h: + * ext/resindvd/rsnstreamselector.c: + * ext/resindvd/rsnstreamselector.h: + resindvd: Initial partial port to 0.11 + +2012-08-30 18:39:50 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/autoconvert/gstautoconvert.c: + autoconvert: Don't drop upstream events due to silly typo + +2012-08-30 17:51:50 -0700 Jan Schmidt <thaytan@noraisin.net> + + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + mpegdemux: Merge some DVD pieces and fixes + Bring the resindvd copy of mpegpsdemux and the normal version + slightly closer together. + Don't forward incoming sink caps event to downstream elements. + +2012-06-11 08:33:36 +1000 Jan Schmidt <thaytan@noraisin.net> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: avoid extra refs/unrefs of the demuxer + Change all the gst_pad_get_parent() calls to a cast to the + passed parent variable where appropriate, and don't unref, + including the extra unref in the + gst_flups_demux_sink_activate_push() function. + +2012-08-30 12:11:20 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: adjust to modified video overlay composition API + ... and supply overlay rectangle data in AYUV as provided by input + data rather than converting to RGB. + +2012-08-29 22:05:56 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: no need to set clock/basetime again + The base and clock aren't lost anymore on state changes + in 1.0 + +2012-08-29 22:05:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstwrappercamerabinsrc.c: + camerabin: no need to send extra reconfigure + Setting capsfilters already sends reconfigure events when a new + caps is set, no need to resend them. + +2012-08-28 21:01:55 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: request _%u templates instead of _%d + In 1.0, templates have been renamed to _%u as default + +2012-08-26 16:43:37 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * tests/check/elements/camerabin.c: + tests: camerabin: fix image location switching test + The test should wait until the last image-done is posted so it + can correctly check that all images have been saved. + +2012-08-26 16:42:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstwrappercamerabinsrc.c: + wrappercamerabinsrc: rework video recording eos push + Push EOS outside of wrappercamerabinsrc so that none of the + internal elements gets its pads into eos state, preventing any + further data from passing + +2012-08-28 11:07:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/videoparsers/gsth264parse.c: + h264parse: ensure sufficiently sized buffer when wrapping NAL + Noted by <zhangyanping210@yahoo.com.cn> + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=682589 + +2012-08-24 09:01:41 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * sys/shm/Makefile.am: + shm: remove unneeded glib-gen-mak include in Makefile + No enums or marshallers to be generated here. Should also + be gst-glib-gen.mak then. + +2012-08-22 15:08:53 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstaudiovisualizer.c: + audiovisualizer: revert renaming of the type + The special type name was lost when merging from base. + +2012-08-22 13:30:40 +0200 Stefan Sauer <ensonic@users.sf.net> + + * common: + Automatic update of common submodule + From 668acee to 4f962f7 + +2012-08-22 13:19:53 +0200 Stefan Sauer <ensonic@users.sf.net> + + * configure.ac: + configure: bump gtk-doc req to 1.12 (mar-2009) + This allows us to e.g. unconditionally use gtkdoc-rebase. + +2012-08-21 13:29:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/audiovisualizers/gstaudiovisualizer.c: + audiovisualizer: avoid registering enum type of same name as libvisual plugin in -base + +2012-08-17 11:12:22 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * ext/wayland/gstwaylandsink.c: + wayland: use scale fullscreen method. + This makes the compositor scale the surface to fit and preserves + aspect ratio. + https://bugzilla.gnome.org/show_bug.cgi?id=681453 + +2012-08-17 11:10:39 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * ext/wayland/gstwaylandsink.c: + wayland: respond to ping/pong protocol so we're not deemed unresponsive. + https://bugzilla.gnome.org/show_bug.cgi?id=681453 + +2012-08-21 10:37:10 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + configure: fix check for wayland + We only seem to need wayland-client. Also make work with + wayland being installed in a non-default prefix by not + overwriting/clearing WAYLAND_{CFLAGS,LIBS} for no reason + at all. + +2012-08-21 10:29:55 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/id3tag/id3tag.c: + id3tag: fix build + Some code slipped into the last commit that was meant to be + pushed separately. Use gst_date_time_unref() instead of _free(). + +2012-08-08 17:10:28 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * ext/wayland/Makefile.am: + * ext/wayland/gstwaylandsink.c: + * ext/wayland/gstwaylandsink.h: + * ext/wayland/waylandpool.c: + * ext/wayland/waylandpool.h: + wayland: More fixes based on wayland-0.95.0 and gstreamer-1.0 apis + - bump wayland version to 0.95.0 which will lead to stable 1.0 release + - avoid memcopy and use propose_allocation for GstBufferPool allocation + - using WaylandBufferPool + - shm: Allocate shm buffers through new wl_shm_pool interface + (the shm buffer allocation is a two step process now: first + allocate a wl_shm_pool, then allocate a buffer from the pool) + https://bugzilla.gnome.org/show_bug.cgi?id=681453 + +2012-08-21 10:22:49 +0100 Tim-Philipp Müller <tim@centricular.net> + + * configure.ac: + * gst/id3tag/gstid3mux.c: + * gst/id3tag/id3tag.c: + id3tag: port to 0.11 + +2012-08-21 00:10:10 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/examples/camerabin2/gst-camerabin2-test.c: + examples: GST_TAG_DATE -> GST_TAG_DATE_TIME + In camerabin2 example. + +2012-08-20 23:37:00 +0100 Tim-Philipp Müller <tim@centricular.net> + + * docs/plugins/inspect/plugin-dvdspu.xml: + * docs/plugins/inspect/plugin-kate.xml: + * docs/plugins/inspect/plugin-mpegdemux2.xml: + * docs/plugins/inspect/plugin-mpegtsdemux.xml: + * docs/plugins/inspect/plugin-resindvd.xml: + * ext/kate/gstkateenc.c: + * ext/kate/gstkatespu.h: + * ext/kate/gstkateutil.c: + * ext/resindvd/gstmpegdemux.c: + * ext/resindvd/resindvdbin.c: + * gst/dvdspu/gstdvdspu.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegtsdemux/tsdemux.c: + * tests/check/elements/kate.c: + video/x-dvd-subpicture -> subpicture/x-dvd + +2012-08-18 20:31:17 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/wayland/gstwaylandsink.c: + * ext/wayland/gstwaylandsink.h: + * gst/mpeg1sys/main.h: + * gst/rtjpeg/RTjpeg.c: + * gst/rtjpeg/RTjpeg.h: + * gst/tta/filters.h: + * gst/vbidec/vbidata.c: + * gst/vbidec/vbidata.h: + * gst/vbidec/vbiscreen.c: + * gst/vbidec/vbiscreen.h: + Fix up FSF address in some source files as well + +2012-08-18 11:09:39 -0400 Brian Pepple <bpepple@fedoraproject.org> + + * COPYING: + * COPYING.LIB: + Correct incorrect FSF address in license files + https://bugzilla.gnome.org/show_bug.cgi?id=682158 + +2012-08-17 22:57:10 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstaudiovisualizer.c: + * gst/audiovisualizers/gstaudiovisualizer.h: + * gst/audiovisualizers/gstspacescope.c: + * gst/audiovisualizers/gstspectrascope.c: + * gst/audiovisualizers/gstsynaescope.c: + * gst/audiovisualizers/gstwavescope.c: + audiovisualizer: sync to change in base and port + Add support for GstVideoMeta and GstVideoFrame. Remove some redundant fields + that are also in GstVideoInfo. Don't disable the shader code, it does not + look broken. + +2012-08-17 15:15:34 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/README: + audiovisualizer: status update + +2012-08-15 18:28:09 -0400 Brian Pepple <bpepple@fedoraproject.org> + + * configure.ac: + configure: add missing AC_LANG_PROGRAM call to DirectShow tests + https://bugzilla.gnome.org/show_bug.cgi?id=681952 + +2012-08-15 11:26:59 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstaudiovisualizer.c: + visualizer: small cleanup + Apply cleanup from copy in base. + +2012-07-24 20:39:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Fix flushing/sync handling + There was a stray adapter_flush() now that we used a temporary buffer + +2012-07-19 13:35:51 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Better detect PCR resets + Assume that any differences in PCR greater than 15s means there is + a reset in the stream. + +2012-07-19 09:05:28 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/vp8/gstvp8dec.c: + vp8dec: Call gst_video_decoder_negotiate() + +2012-07-19 09:05:13 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/schroedinger/gstschrodec.c: + schrodec: Call gst_video_decoder_negotiate() + +2012-07-14 13:59:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Remove/demote some debugging + +2012-07-13 16:56:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Always use current PTS/DTS + This avoids setting old PTS and/or DTS + +2012-07-13 16:22:27 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Remove unneeded memset(0) + +2012-07-13 16:22:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/gstmpegdesc.h: + * gst/mpegtsdemux/mpegtsbase.h: + * gst/mpegtsdemux/mpegtspacketizer.h: + * gst/mpegtsdemux/mpegtsparse.h: + * gst/mpegtsdemux/pesparse.h: + * gst/mpegtsdemux/tsdemux.h: + mpegts: Use G_GNUC_INTERNAL + +2012-07-11 08:10:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * configure.ac: + configure.ac: dvb plugin is ported + +2012-07-11 08:10:18 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/dvbbasebin.c: + * sys/dvb/gstdvbsrc.c: + dvb: More fixups to 1.0 + Not tested yet ! + Conflicts: + sys/dvb/gstdvbsrc.c + +2012-06-29 18:04:04 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/camdevice.c: + cam: Allow time for CA to initialize + Some devices take some time to initialize, and until they are they + will error out when trying to get information about the CA device. + +2012-06-29 18:01:15 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/camconditionalaccess.c: + cam: PMT_REPLY parsing + Not used yet + +2012-06-29 18:00:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/dvbbasebin.c: + * sys/dvb/dvbbasebin.h: + dvbbasebin: Switch to use tsparse + +2012-06-29 17:53:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Use gst_structure_*_take_value where applicable + Saves copying/freeing data + +2012-06-29 16:14:02 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Cache the GIConv + Avoids having to constantly open/free them (which will end up being + very often with EIT/NIT). + +2012-06-29 16:09:31 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + mpegtbase: reset element in READY=>PAUSED + Ensures all subclass reset vmethods are called + +2012-06-28 12:18:28 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Use more Quarks + +2012-06-26 19:01:07 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Remove useless code + PCR/OPCR is meant to be handled by the packetizer + +2012-06-26 18:59:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + * gst/mpegtsdemux/mpegtspacketizer.h: + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Calculate pcr/time/offset separately per program + Avoids quite a few issues with multi-program streams + +2012-06-26 18:54:55 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsparse.c: + tsparse: Push out buffer on main source pad + +2012-06-26 18:51:21 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + * gst/mpegtsdemux/mpegtsbase.h: + mpegtbase: vmethod to notify when we're done processing input + This can be used to notify subclasses no more data is expected this + round. + tsparse will use it to push whole buffers (without copy) on the main + source pad. + It could also be used later to decide whether to push pending data + in order to reduce latency. + +2011-02-01 11:39:16 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com> + + * sys/dvb/gstdvbsrc.c: + * sys/dvb/gstdvbsrc.h: + dvbsrc + dvb api buffer property to overcome buffer under reads + +2012-08-08 15:06:09 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/soundtouch/gstpitch.cc: + soundtouch: Don't assume output buffer timestamps + There's no guarantee whatsoever that the first buffer to output will + start at the segment.start. + Instead, wait for the first buffer after a segment, and use that timestamp + +2012-08-14 11:17:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/vp8/gstvp8dec.c: + * ext/vp8/gstvp8dec.h: + vp8dec: Add support for multiple decoding threads + +2012-08-14 11:09:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * ext/vp8/gstvp8dec.c: + vp8dec: Add support for the MFQE postprocessing flag + Which is enabled by default if postprocessing is enabled. + +2012-08-13 10:57:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/videoparsers/gstmpegvideoparse.c: + mpegvideoparse: only apply repeat count when set + When there is no extension header, the repeat_count variable is left to 0 and + then the duration on the output buffers is calculated wrongly. Because the + duration is used to interpolate output timestamps, the output timestamps are + also wrong, causing bad framerates. + See https://bugzilla.gnome.org/show_bug.cgi?id=681535 + +2012-08-09 13:37:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * ext/vp8/Makefile.am: + vp8: Use pkg-config file for getting the LIBS and CFLAGS + +2012-08-09 11:48:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/mpg123/gstmpg123audiodec.c: + mpg123: Give MARGINAL rank to the mpg123 decoder element + +2012-08-08 17:40:34 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/dtmf/gstdtmfsrc.c: + * gst/dtmf/gstrtpdtmfdepay.c: + gst: Set alignment at the correct place of GstAllocationParams + +2012-08-08 17:06:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/vp8/gstvp8enc.c: + vp8enc: Update the per-component strides for every frame too + This is necessary because of GstVideoAlignment + +2012-08-08 16:35:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + * win32/common/config.h: + Back to development + +=== release 0.11.93 === + +2012-08-08 15:32:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + * gst-plugins-bad.doap: + Release 0.11.93 + +2012-08-08 12:58:50 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/mpg123/Makefile.am: + mpg123: dist header file + +2012-08-08 12:13:13 +0100 Tim-Philipp Müller <tim@centricular.net> + + * win32/common/config.h: + * win32/common/libgstphotography.def: + win32: update for photography API changes + +2012-08-08 11:53:05 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/elements/.gitignore: + tests: .gitignore new curlsmtpsink test binary + +2012-08-03 16:21:09 +0100 Olivier Crête <olivier.crete@collabora.com> + + * configure.ac: + * ext/mimic/gstmimdec.c: + * ext/mimic/gstmimdec.h: + * ext/mimic/gstmimenc.c: + * ext/mimic/gstmimenc.h: + mimic: Port to 0.11 + +2012-08-07 18:23:37 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/winks/gstksvideosrc.c: + winks: add missing default switch case + +2012-08-07 18:23:05 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/winks/gstksvideodevice.c: + winks: fix types + +2012-08-07 18:22:36 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/winks/gstksvideodevice.c: + winks: fix format warnings + +2012-08-07 18:21:49 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/winks/gstksclock.c: + * sys/winks/gstksvideosrc.c: + winks: fix unused variables warnings + +2012-08-07 18:20:53 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/winks/ksvideohelpers.c: + winks: don't reinitialize MEDIASUBTYPE_I420 + +2012-08-07 18:19:29 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/dshowsrcwrapper/gstdshow.cpp: + * sys/winks/kshelpers.c: + winks: define STATIC_KSPROPSETID_Wave_Queued if not defined + +2012-08-07 16:53:02 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * configure.ac: + * sys/Makefile.am: + * sys/winks/Makefile.am: + winks: integrate build with autotools + +2012-08-02 14:26:32 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: avoid duplicated symbols in static links + Rename the DLL entry point the avoid duplicated symbols in static + links. + +2012-08-02 14:26:32 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/Makefile.am: + d3dvideosink: avoid duplicated symbols in static links + Rename the DLL entry point the avoid duplicated symbols in static + links. + +2012-08-06 13:59:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/hls/gsthlsdemux.c: + * gst/mpegtsdemux/mpegtsparse.c: + * gst/mpegtsdemux/tsdemux.c: + gst: Add stream-id to stream-start events + +2012-07-26 19:31:14 +0200 Oleksij Rempel <bug-track@fisher-privat.net> + + * ext/vp8/gstvp8enc.c: + vp8enc: initiate encoder to fix a crash. + Without this patch vp8enc send header before and after first + key frame. On second keyframe vp8dec will crash without getting + decoded frame. With this pipe it is easy to reproduce this issue: + gst-launch-1.0 videotestsrc ! vp8enc ! vp8dec ! fakesink + https://bugzilla.gnome.org/show_bug.cgi?id=680667 + +2012-08-05 16:40:28 +0100 Tim-Philipp Müller <tim@centricular.net> + + * common: + Automatic update of common submodule + From 94ccf4c to 668acee + +2012-08-04 16:31:30 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/celt/gstceltenc.c: + * ext/kate/gstkateenc.c: + * ext/kate/gstkatetag.c: + * ext/kate/gstkateutil.c: + * ext/opus/gstopusenc.c: + * ext/opus/gstopusheader.c: + * ext/resindvd/rsnstreamselector.c: + * gst/aiff/aiffparse.c: + * gst/asfmux/gstasfmux.c: + * gst/camerabin2/gstcamerabin2.c: + * gst/jpegformat/gstjifmux.c: + * gst/jpegformat/gstjpegparse.c: + * gst/mpegtsdemux/mpegtsbase.c: + * gst/mxf/mxfdemux.c: + * gst/nsf/gstnsf.c: + * tests/check/elements/camerabin.c: + * tests/check/elements/id3mux.c: + * tests/check/elements/jifmux.c: + * tests/check/elements/kate.c: + * tests/check/elements/ofa.c: + * tests/examples/mxf/mxfdemux-structure.c: + * tests/icles/metadata_editor.c: + gst_tag_list_free -> gst_tag_list_unref + +2012-08-03 11:31:00 +0200 Patricia Muscalu <patricia@axis.com> + + * ext/curl/gstcurlbasesink.c: + * ext/curl/gstcurlsmtpsink.c: + * tests/check/elements/curlfilesink.c: + curl: fixed some memory leaks in the plugin and the unit tests + https://bugzilla.gnome.org/show_bug.cgi?id=681117 + https://bugzilla.gnome.org/show_bug.cgi?id=681115 + +2012-08-03 14:12:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + configure: require libmpg123 >= 1.13 for 24-bit formats + +2012-08-03 13:43:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * ext/mpg123/gstmpg123audiodec.c: + mpg123: map input buffer in READ mode, not WRITE mode + Makes things actually work. + +2012-08-03 11:50:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * ext/mpg123/gstmpg123audiodec.c: + mpg123: query supported output formats at run-time + Fixes stuff. We use a string here since we can't be bothered + with GValue. + +2012-08-03 11:48:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * configure.ac: + * ext/Makefile.am: + * ext/mpg123/Makefile.am: + mpg123: hook up to build system + +2012-08-03 11:13:48 +0100 Carlos Rafael Giani <dv@pseudoterminal.org> + + * ext/mpg123/gstmpg123audiodec.c: + * ext/mpg123/gstmpg123audiodec.h: + mpg123: add new libmpg123-based mp3 decoder plugin + Needs a bit of cleaning up. + https://bugzilla.gnome.org/show_bug.cgi?id=681003 + +2012-08-03 00:10:01 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/schroedinger/gstschro.c: + * gst/mpegtsmux/mpegtsmux.c: + schroedinger, mpegtsmux: fix plugin names + +2012-07-31 09:36:35 +0200 Robert Swain <robert.swain@collabora.co.uk> + + * gst/camerabin2/gstwrappercamerabinsrc.c: + * gst/camerabin2/gstwrappercamerabinsrc.h: + wrappercamerabinsrc: Save image/video reconfiguration until capturing + Add a src pad event handler function that filters reconfigure events to + trigger the renegotiation code paths in the mode-specific start-capture + phase. + This is to work towards fixing unit tests but more work is needed. + +2012-08-02 14:40:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/faad/gstfaad.c: + faad: do not access frame buffer following _finish_frame call + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680494 + +2012-08-01 11:34:08 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/mplex/gstmplexjob.cc: + mplex: default to DVD MPEG-2 format instead of Generic MPEG-1 + +2012-08-01 11:31:04 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/mplex/gstmplexjob.cc: + mplexjob: add nicks for format enums, add some more formats + +2012-07-30 17:21:10 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/elements/jifmux.c: + tests: fix jifmux test for fixed fail() + https://bugzilla.gnome.org/show_bug.cgi?id=680755 + +2012-07-29 01:11:29 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * tests/check/elements/camerabin.c: + tests: camerabin: fix preview message handling + Preview messages now contain GstSamples instead of GstBuffers + +2012-07-29 00:53:29 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c: + * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h: + * gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c: + * gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.h: + * gst/camerabin2/gstwrappercamerabinsrc.c: + camerabin: update preview buffer pushing + need to pass a GstSample to the utilitary preview buffer post functions + as a GstBuffer doesn't have caps anymore. The GstSample has the GstCaps + and it is used to inform the preview's pipeline about the format of the + input, before it gets converted to the user's requested output format. + +2012-07-29 00:04:35 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/camerabin2/gstcamerabin2.c: + Revert "camerabin: update to new tag event creation API" + This reverts commit 5d890b3c92714e1f37163290c32911bcd7818a57. + The new API is the old API. + +2012-07-28 18:04:57 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: Fix references to avoid element leaking + Some pad probes are never going to be removed from the pads, so + we shouldn't keep a camerabin reference with them or camerabin will + never get released + +2012-07-28 15:17:17 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * gst/camerabin2/gstcamerabin2.c: + camerabin: update to new tag event creation API + +2012-07-28 12:09:42 -0300 Thiago Santos <thiago.sousa.santos@collabora.com> + + * tests/examples/camerabin2/gst-camerabin2-test.c: + examples: camerabin: remove assertion on null property + Check if the flags are not null before trying to set them to + camerabin to avoid an assertion + +2012-07-28 00:32:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/chromaprint/gstchromaprint.c: + * ext/gme/gstgme.c: + * ext/modplug/gstmodplug.cc: + * ext/schroedinger/gstschrodec.c: + * ext/soundtouch/gstbpmdetect.cc: + * ext/vp8/gstvp8dec.c: + * gst/camerabin2/gstcamerabin2.c: + * gst/mpegtsdemux/tsdemux.c: + * gst/videoparsers/gstmpegvideoparse.c: + tag: Update for taglist/tag event API changes + +2012-07-27 13:22:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/assrender/gstassrender.c: + assrender: process ATTACHMENT tag as sample + +2012-07-25 16:05:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/faac/gstfaac.c: + * ext/voaacenc/gstvoaacenc.c: + faac, voaacenc: adjust to modified audioencoder getcaps helper API + +2012-07-24 12:28:18 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/audiovisualizers/gstaudiovisualizer.c: + audiovisualizer: fixate caps + +2012-07-24 10:46:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/gaudieffects/gstburn.c: + * gst/gaudieffects/gstgaudieffectsorc-dist.c: + * gst/gaudieffects/gstgaudieffectsorc-dist.h: + * gst/gaudieffects/gstgaudieffectsorc.orc: + guadi: prefix orc functions with gaudi_orc_ + +2012-07-24 10:44:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/fieldanalysis/gstfieldanalysis.c: + * gst/fieldanalysis/gstfieldanalysisorc-dist.c: + * gst/fieldanalysis/gstfieldanalysisorc-dist.h: + * gst/fieldanalysis/gstfieldanalysisorc.orc: + fieldanalysis: prefix orc functions + +2012-07-24 10:32:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/bayer/gstbayer2rgb.c: + * gst/bayer/gstbayerorc-dist.c: + * gst/bayer/gstbayerorc-dist.h: + * gst/bayer/gstbayerorc.orc: + * tests/check/Makefile.am: + bayer: prefix orc functions with bayer_orc + Add bayer orc to the unit test + +2012-07-24 10:32:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/Makefile.am: + * tests/check/elements/baseaudiovisualizer.c: + tests: fix visualizer compilation + +2012-07-23 11:36:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/schroedinger/gstschrodec.c: + * ext/schroedinger/gstschroenc.c: + * ext/schroedinger/gstschroutils.c: + * ext/schroedinger/gstschroutils.h: + schro: Add support for video metadata and arbitrary strides + +2012-07-23 10:54:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/schroedinger/gstschrodec.c: + * ext/schroedinger/gstschroenc.c: + * ext/schroedinger/gstschroutils.c: + * ext/schroedinger/gstschroutils.h: + schro: Map raw video buffers with the correct read/write flags + +2012-07-23 10:35:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/schroedinger/gstschrodec.c: + * ext/vp8/gstvp8dec.c: + ext: Update for video base classes API changes + +2012-07-23 08:45:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * common: + Automatic update of common submodule + From 98e386f to 94ccf4c + +2012-07-21 19:59:21 +0200 Oleksij Rempel <bug-track@fisher-privat.net> + + * ext/vp8/gstvp8enc.c: + vp8enc: fix memory leak + unref frame. i hope it is correct place to do it. + Signed-off-by: Oleksij Rempel <bug-track@fisher-privat.net> + +2012-07-20 23:28:49 +0200 Robert Swain <robert.swain@collabora.co.uk> + + * gst/interlace/gstinterlace.c: + interlace: Use buffer flags and caps correctly + This requires a recent commit to -base that adds an INTERLACED buffer + flag. + +2012-07-20 16:43:19 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * ext/faad/gstfaad.c: + faad: only discard frame once upon decoding error + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679886 + +2012-07-19 16:10:40 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstspectrascope.c: + spectrascope: fabs->sqrt to calculate the magnitude + +2012-07-18 09:19:30 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/mpegdemux/gstmpegdemux.c: + mpegpsdemux: also activate in push mode if the scheduling query failed + In case pads are unlinked somewhere. + +2012-07-18 08:41:43 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/mpegdemux/gstmpegdemux.c: + mpegdemux: fix push mode activation + Extra unref on push mode activation caused havoc. + +2012-07-16 00:05:26 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/spc/gstspc.c: + spc: extract year as GstDateTime instead of GDate + +2012-07-17 18:05:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: no need to make buffer writable twice + +2012-07-17 18:05:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: plug some ref leaks + +2012-07-17 14:02:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: adjust to modified video overlay composition API + +2012-07-17 16:39:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/dtmf/gstrtpdtmfdepay.c: + * gst/rtpmux/gstrtpmux.c: + update for RTP buffer api changes + +2012-07-16 22:02:44 +0200 Stefan Sauer <ensonic@users.sf.net> + + * docs/plugins/Makefile.am: + * gst/audiovisualizers/Makefile.am: + * gst/audiovisualizers/gstaudiovisualizer.c: + * gst/audiovisualizers/gstaudiovisualizer.h: + * gst/audiovisualizers/gstbaseaudiovisualizer.c: + * gst/audiovisualizers/gstbaseaudiovisualizer.h: + * gst/audiovisualizers/gstspacescope.c: + * gst/audiovisualizers/gstspacescope.h: + * gst/audiovisualizers/gstspectrascope.c: + * gst/audiovisualizers/gstspectrascope.h: + * gst/audiovisualizers/gstsynaescope.c: + * gst/audiovisualizers/gstsynaescope.h: + * gst/audiovisualizers/gstwavescope.c: + * gst/audiovisualizers/gstwavescope.h: + audiovisualizer: shorten base class name + As suggested on IRC rename to AudioVisualizer. We use custom suffix on the type + to avoid clashing with other copies for the time being. + +2012-07-15 12:27:12 +0100 Tim-Philipp Müller <tim@centricular.net> + + * ext/celt/gstceltenc.c: + * ext/opencv/gsttemplatematch.c: + * ext/wayland/gstwaylandsink.c: + * gst/dvbsuboverlay/dvb-sub.c: + * gst/festival/gstfestival.c: + * gst/hls/gsthlsdemux.c: + celt, opencv, wayland, dvbsub, festival, hls: printf format fixes + +2012-07-14 15:51:08 +0200 Alban Browaeys <prahal@yahoo.com> + + * ext/wayland/Makefile.am: + wayland: don't link to gstinterfaces, which doesn't exist any more + https://bugzilla.gnome.org/show_bug.cgi?id=679929 + +2012-06-30 00:22:40 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * ext/opencv/gstcvdilate.c: + * ext/opencv/gstcvdilateerode.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/gstopencvutils.c: + * ext/opencv/gstopencvvideofilter.c: + * ext/opencv/gstpyramidsegment.c: + * ext/opencv/gsttemplatematch.c: + * ext/opencv/gsttextoverlay.c: + * ext/opencv/gsttextoverlay.h: + opencv: port to 0.11 + Basic port to 0.11 API. + https://bugzilla.gnome.org/show_bug.cgi?id=679164 + +2012-07-13 12:32:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + * gst/dvbsuboverlay/gstdvbsuboverlay.h: + dvbsuboverlay: adaptively blend or attach video overlay composition + Conflicts: + gst/dvbsuboverlay/gstdvbsuboverlay.c + +2012-07-13 12:27:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + * gst/dvbsuboverlay/gstdvbsuboverlay.h: + dvbsuboverlay: use video overlay composition helper + ... rather than custom home-made blending. + Conflicts: + gst/dvbsuboverlay/gstdvbsuboverlay.c + +2012-07-12 10:13:50 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: more correctly determine expected PES packet payload size + ... particularly considering that packet_length == 0 is possible. + +2012-07-11 23:17:19 +0200 Stefan Sauer <ensonic@users.sf.net> + + * ext/soundtouch/gstpitch.cc: + pitch: register as effect + +2012-07-11 20:34:05 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: correctly determine expected PES packet payload size + Avoids consistently failing to detect that a packet is complete, which + would then only be pushed upon the start of a next packet, which leads + to quite a delay in case of a sparse (subtitle) stream. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=666674 + +2012-07-10 17:58:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: ensure minimum page time out of 1 second + ... to compensate for some bogus subtitle with a 0 timeout, which would + result in only being shown for a very unreadable amount of time. + See https://bugzilla.gnome.org/show_bug.cgi?id=666674 + +2012-07-11 14:27:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * tests/icles/pitch-test.c: + tests: fix build of pitch-test + Does not sound like the same test in 0.10 though.. + +2012-07-11 13:59:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: fix compiler warnings + gstdvbsuboverlay.c:772:15: error: pointer targets in passing argument 5 of 'gst_segment_clip' differ in signedness + /home/tpm/gst/0.11/gstreamer/gst/gstsegment.h:192:14: note: expected 'guint64 *' but argument is of type 'gint64 *' + gstdvbsuboverlay.c:772:15: error: pointer targets in passing argument 6 of 'gst_segment_clip' differ in signedness + +2012-07-11 13:49:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: fixup end-of-display-set forcing + Conflicts: + gst/dvbsuboverlay/gstdvbsuboverlay.c + +2012-07-11 13:48:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + dvbsuboverlay: ensure valid subtitle running time by proper clipping + In particular, pass buffer timestamp (pts) to dvb_sub, and then clip + and convert to running time when the duration (timeout) is known after + decoding it. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=660233 + Conflicts: + gst/dvbsuboverlay/gstdvbsuboverlay.c + +2012-07-11 13:45:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/dvbsuboverlay/dvb-sub.c: + * gst/dvbsuboverlay/gstdvbsuboverlay.c: + * gst/dvbsuboverlay/gstdvbsuboverlay.h: + dvbsuboverlay: properly force end-of-display-set + ... which is upon receiving new data with different PTS spec-wise, + or optionally upon each packet of subtitle data if desired by property. + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=669310 + Conflicts: + gst/dvbsuboverlay/gstdvbsuboverlay.c + +2011-12-21 13:00:27 +0200 Mart Raudsepp <mart.raudsepp@collabora.com> + + * gst/dvbsuboverlay/dvb-sub.c: + dvbsuboverlay: Handle non_modifying_colour_flag correctly in the RLE handlers + The check for when to not memset was checking on an undeterministic 'bits' variable value, + which is only meant to be used inside the loop earlier when it is supposed to check if + clut_index is 1 together with non_mod set, as per spec: + "non_modifying_colour_flag: If set to '1' this indicates that the CLUT entry value '1' + is a non modifying colour. When the non modifying colour is assigned to an object pixel, + then the pixel of the underlying region background or object shall not be modified. This + can be used to create "transparent holes" in objects." + https://bugzilla.gnome.org/show_bug.cgi?id=666352 + +2010-10-13 10:55:17 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com> + + * gst-libs/gst/interfaces/photography.c: + * gst-libs/gst/interfaces/photography.h: + photography: update documentation + https://bugzilla.gnome.org/show_bug.cgi?id=622482 + +2010-10-14 10:49:55 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com> + + * gst-libs/gst/interfaces/photography.c: + * gst-libs/gst/interfaces/photography.h: + photography: Add manual control of exposure, focus and white balance + Add new interface properties and mode for better manual control of + exposure, focus and white balance. + https://bugzilla.gnome.org/show_bug.cgi?id=622482 + +2010-10-08 11:33:31 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com> + + * docs/plugins/gst-plugins-bad-plugins-sections.txt: + * gst-libs/gst/interfaces/photography.c: + * gst-libs/gst/interfaces/photography.h: + * gst/camerabin2/gstwrappercamerabinsrc.c: + photography: Add GstPhotography prefix and fix spelling colour->color + https://bugzilla.gnome.org/show_bug.cgi?id=622482 + +2012-07-10 23:27:23 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst-libs/gst/codecparsers/gstmpegvideoparser.h: + codecparsers: minor header indentation clean-up for mpegvideoparser + +2012-07-10 17:47:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * configure.ac: + * ext/soundtouch/gstbpmdetect.cc: + * ext/soundtouch/gstpitch.cc: + soundtouch: port to 0.11 + +2012-07-10 12:10:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/festival/gstfestival.c: + festival: unmap input buffer + +2012-07-04 10:14:35 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com> + + * configure.ac: + * gst/festival/Makefile.am: + * gst/festival/gstfestival.c: + port festival to 0.11 + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679373 + +2012-07-10 11:14:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * tests/check/elements/camerabin.c: + tests: fix some pad template-related criticals in camerabin test + +2012-07-10 00:59:40 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/dataurisrc/gstdataurisrc.c: + dataurisrc: copy into provided buffer if a buffer is provided + +2012-07-09 22:08:50 +0100 Tim-Philipp Müller <tim@centricular.net> + + * tests/check/elements/zbar.c: + tests: fix zbar test + +2012-07-09 12:22:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/asfmux/gstasfmux.c: + asfmux: update for riff field rename + +2012-07-08 19:23:30 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstbaseaudiovisualizer.c: + * gst/audiovisualizers/gstbaseaudiovisualizer.h: + audiovisualizers: update baseclass from libvisual porting + +2012-07-08 00:08:55 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/dtmf/gstdtmfsrc.c: + dtmfsrc: pass unhandled non-custom events to the base class + https://bugzilla.gnome.org/show_bug.cgi?id=666626 + +2012-07-06 14:53:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/asfmux/gstasfmux.c: + asfmux: remove deprecated "is-live" property + Use the "streamable" property instead. + +2012-07-06 11:50:53 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/vp8/gstvp8enc.c: + * sys/pvr2d/gstpvrvideosink.c: + update for query api changes + +2012-07-06 11:26:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/vp8/gstvp8dec.c: + update for query api changes + +2012-07-06 11:03:04 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/vp8/gstvp8enc.c: + update for allocation query changes + +2012-07-04 11:38:51 +0200 Aleix Conchillo Flaque <aleix@oblong.com> + + * sys/shm/shmpipe.c: + shmsrc: memory corruption when a client disconnects (fixes #679385) + +2012-07-05 13:18:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * ext/musepack/gstmusepackdec.c: + * gst/aiff/aiffparse.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mxf/mxfdemux.c: + * gst/rawparse/gstrawparse.c: + gst: Implement segment-done event + +2012-07-03 12:57:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * sys/directsound/gstdirectsoundsrc.c: + directsoundsrc: Chain up to the parent class' finalize implementation + +2012-07-02 17:55:37 -0700 David Schleef <ds@schleef.org> + + * sys/decklink/gstdecklinksink.cpp: + * sys/decklink/gstdecklinksink.h: + decklinksink: Better handling of audio output + Conflicts: + sys/decklink/gstdecklinksink.cpp + +2012-07-02 17:52:15 -0700 David Schleef <ds@schleef.org> + + * sys/decklink/gstdecklinksrc.cpp: + * sys/decklink/gstdecklinksrc.h: + decklinksrc: Send newsegment events + +2012-07-02 17:51:18 -0700 David Schleef <ds@schleef.org> + + * sys/decklink/gstdecklinksink.cpp: + decklinksink: Mark element as sink element + +2012-07-02 17:49:54 -0700 David Schleef <ds@schleef.org> + + * sys/decklink/gstdecklink.cpp: + decklink: use GOnce in type registration + +2012-07-02 17:32:14 -0700 David Schleef <ds@schleef.org> + + * gst/inter/gstinteraudiosink.c: + * gst/inter/gstinteraudiosrc.c: + inter: Increase the inter audio surface buffering + +2012-07-02 12:04:19 -0700 David Schleef <ds@schleef.org> + + * gst/inter/gstinteraudiosink.c: + interaudiosink: reenable channel property + +2012-07-02 12:03:44 -0700 David Schleef <ds@schleef.org> + + * gst/inter/gstinteraudiosrc.c: + interaudiosrc: Set format to time + +2012-06-29 12:03:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * sys/d3dvideosink/d3dvideosink.c: + * sys/directdraw/gstdirectdrawsink.c: + * sys/dshowvideosink/dshowvideosink.cpp: + * sys/pvr2d/gstpvrvideosink.c: + * sys/vdpau/gstvdpvideopostprocess.c: + sys: make video sinks default to force-aspect-ratio=true + +2012-06-28 18:04:10 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + * gst/mpegtsdemux/mpegtsparse.c: + mpegtsbase: Move known PSI PIDs to where they belong + This avoids tsdemux parsing data is doesn't really care about + Conflicts: + gst/mpegtsdemux/mpegtsparse.c + +2012-06-02 08:05:44 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + mpegtbase: Add more known default SI PIDs + +2012-06-28 17:40:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/tsdemux.c: + tsdemux: Fix AAC LATM caps + +2012-06-22 16:47:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: add basic output unit test verification + +2012-06-22 17:51:37 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmux.c: + mpegtsmux: apply some more CLOCK_BASE to ensure slack for PCR offset + Conflicts: + gst/mpegtsmux/tsmux/tsmux.c + +2012-06-27 11:23:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/asfmux/gstasfmux.c: + * sys/dshowdecwrapper/gstdshowvideodec.cpp: + fix x-wmv format string + +2012-06-26 16:33:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * configure.ac: + * gst/interlace/gstinterlace.c: + interlace: port to 0.11 + +2012-06-25 16:18:41 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: release the offscreen surface before the d3d device + The offscreen surface keeps a reference on the d3d device, so if the + device is released first we don't see the reference count debug message + going to 0 as it should be. + +2012-06-19 20:16:40 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: clean up element + Remove old commented code and uneeded extra indentation + +2012-06-19 20:03:02 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + * sys/d3dvideosink/d3dvideosink.h: + d3dvideosink: rework locking for devices lost + +2012-06-19 20:19:27 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: release and recreate the device in prepare_window + +2012-06-24 21:11:39 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/gstspectrascope.c: + spectrascope: avoid dark pixels in fade-and-move-up mode + +2012-06-24 20:54:24 +0200 Stefan Sauer <ensonic@users.sf.net> + + * gst/audiovisualizers/README: + * gst/audiovisualizers/gstbaseaudiovisualizer.c: + audiovisualizers: fix input buffer handling + Use _replace instead of _append to fix growing buffers. + +2012-06-23 15:02:13 +0100 Tim-Philipp Müller <tim@centricular.net> + + * gst/hls/gsturidownloader.c: + * gst/sdp/gstsdpdemux.c: + hls, sdp: update for gst_element_make_from_uri() changes + +2012-06-21 12:17:09 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * sys/v4l2/README: + sys: remove left-over v4l2 dir which has moved to good + let's not keep a README around to announce it's moved to -good, + that's just clutter. + +2012-06-21 11:43:23 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + configure: Really always define DECKLINK_OSX conditional + +2011-07-13 19:25:08 +0100 Tony Houghton <h@realh.co.uk> + + * gst/mpegtsdemux/gstmpegdesc.h: + * gst/mpegtsdemux/mpegtspacketizer.c: + * sys/dvb/gstdvbsrc.c: + Correct satellite delivery descriptor parsing. + Original code to parse satellite delivery descriptors to generate + "satellite" structures appeared to be copy & pasted from cable's code + without amending for satellite. + Also added 8PSK to dvbsrc's enum for modulation. + https://bugzilla.gnome.org/show_bug.cgi?id=654485 + Conflicts: + gst/mpegdemux/gstmpegdesc.h + gst/mpegdemux/mpegtspacketizer.c + +2012-06-20 18:14:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsparse.c: + * gst/mpegtsdemux/mpegtsparse.h: + tsparse: Rework handling and cleanups + tspad always has a static source pad which output everything received + (not functional yet). + Program pads are now request pads. + Remove all cruft that should have been removed from the switch over + to mpegtsbase. + Conflicts: + gst/mpegtsdemux/mpegtsparse.c + +2012-06-20 18:10:37 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + mpegtbase: Always send EOS + subclass will take care of handling it more if needed + +2012-06-20 17:52:13 -0500 Mike Ruprecht <mike.ruprecht@collabora.co.uk> + + * ext/rtmp/gstrtmpsrc.c: + rtmpsrc: Fix element losing data at the end of buffers + rtmpsrc outputs truncated buffers because, when enough data is + read to fill the buffer, the amount read that time (todo) is set + to zero before it's added to the cumulative buffer size (bsize). + The buffer is then truncated to bsize resulting in lost data. + This patch adds todo to bsize before setting todo to zero. + Fixes #678509 + +2012-06-20 11:02:03 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/timidity/gsttimidity.c: + timidity: Fix flag checking + +2012-06-20 10:59:08 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/teletextdec/gstteletextdec.c: + teletext: #if0 code that never happens + The only place this method is called is with lofp being a guint8 (from + a data block). + +2012-06-20 10:58:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/teletextdec/gstteletextdec.c: + teletextdec: Use proper variable type + +2012-06-20 12:31:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst-libs/gst/video/videocontext.c: + * gst/hls/gsturidownloader.c: + * tests/examples/camerabin2/gst-camera2.c: + * tests/examples/camerabin2/gst-camerabin2-test.c: + update for bus api changes + +2012-06-20 12:19:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: port test to 0.11 + +2012-06-20 12:17:37 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + mpegtsmux: fix value handling in pad iteration + +2012-06-20 10:34:48 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/gme/gstgme.c: + * ext/mimic/gstmimenc.c: + * ext/modplug/gstmodplug.cc: + * ext/mpeg2enc/gstmpeg2enc.cc: + * ext/mplex/gstmplex.cc: + * ext/musepack/gstmusepackdec.c: + * ext/sndfile/gstsfsink.c: + * ext/spc/gstspc.c: + * ext/timidity/gsttimidity.c: + * ext/timidity/gstwildmidi.c: + * gst/aiff/aiffparse.c: + * gst/asfmux/gstasfparse.c: + * gst/cdxaparse/gstcdxaparse.c: + * gst/freeze/gstfreeze.c: + * gst/hls/gsthlsdemux.c: + * gst/liveadder/liveadder.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegtsdemux/mpegtsbase.c: + * gst/mxf/mxfdemux.c: + * gst/nsf/gstnsf.c: + * gst/nuvdemux/gstnuvdemux.c: + * gst/rawparse/gstrawparse.c: + * gst/tta/gstttaparse.c: + update for task api change + +2012-06-19 22:45:27 -0400 Matej Knopp <Matej@new-host-5.home> + + * gst/mpegtsmux/mpegtsmux.c: + mpegtsmux: fix memory leak + https://bugzilla.gnome.org/show_bug.cgi?id=678130 + +2012-06-19 10:35:48 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/parsechannels.c: + dvb: Detect more issues with configuration file + Report useful errors when: + * file is present but empty + * requested channel is not present + +2012-06-19 10:22:50 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * sys/dvb/dvbbasebin.c: + * sys/dvb/parsechannels.c: + * sys/dvb/parsechannels.h: + dvbbasebin: Emit an error when we fail reading the channels file + Conflicts: + sys/dvb/dvbbasebin.c + +2011-02-01 10:23:04 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com> + + * sys/dvb/gstdvbsrc.c: + dvbsrc: spell-check + +2011-01-14 19:30:08 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com> + + * sys/dvb/gstdvbsrc.c: + dvb: better dvsrc polarity info + +2012-06-18 11:36:15 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * ext/teletextdec/gstteletextdec.c: + teletext: Fix initialization + We always ended up erroring on the first page otherwise + Conflicts: + ext/teletextdec/gstteletextdec.c + +2012-06-10 11:36:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegtspacketizer: Don't use GByteArray + Using a simple array comes to the same result for a fraction of the cost + +2012-06-10 11:21:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/mpegtsbase.c: + mpegtbase: Avoid copying GstStructure + +2012-06-08 15:12:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/mpegtsdemux/gstmpegdesc.c: + * gst/mpegtsdemux/gstmpegdesc.h: + * gst/mpegtsdemux/mpegtspacketizer.c: + mpegdesc: Don't allocate/free GstMPEGDescriptor + Just use static variables + +2012-06-16 16:49:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/mpegdemux/Makefile.am: + * gst/mpegdemux/flumpegdemux.c: + * gst/mpegdemux/gstmpegdemux.c: + * gst/mpegdemux/gstmpegdemux.h: + * gst/mpegdemux/gstpesfilter.c: + * gst/mpegdemux/plugin.c: + mpegdemux: rename plugin to mpegpsdemux + +2012-06-16 16:30:17 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/mpegdemux/Makefile.am: + * gst/mpegdemux/flumpegdemux.c: + * gst/mpegdemux/flutspatinfo.c: + * gst/mpegdemux/flutspatinfo.h: + * gst/mpegdemux/flutspmtinfo.c: + * gst/mpegdemux/flutspmtinfo.h: + * gst/mpegdemux/flutspmtstreaminfo.c: + * gst/mpegdemux/flutspmtstreaminfo.h: + * gst/mpegdemux/gstmpegdesc.c: + * gst/mpegdemux/gstmpegdesc.h: + * gst/mpegdemux/gstmpegtsdemux.c: + * gst/mpegdemux/gstmpegtsdemux.h: + * gst/mpegdemux/gstsectionfilter.c: + * gst/mpegdemux/gstsectionfilter.h: + * gst/mpegdemux/mpegtspacketizer.c: + * gst/mpegdemux/mpegtspacketizer.h: + * gst/mpegdemux/mpegtsparse.c: + * gst/mpegdemux/mpegtsparse.h: + mpegdemux: remove unused TS demuxer bits that have moved to tsdemux + +2012-06-16 19:20:29 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: remove obsolete struct field + +2012-06-16 16:50:43 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/Makefile.am: + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux_ttxt.c: + * gst/mpegtsmux/mpegtsmux_ttxt.h: + * gst/mpegtsmux/tsmux/tsmuxstream.c: + * gst/mpegtsmux/tsmux/tsmuxstream.h: + mpegtsmux: add support for DVB subtitle and teletext streams + See bug #673582. + Conflicts: + gst/mpegtsmux/Makefile.am + +2012-06-16 16:50:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmuxcommon.h: + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: optionally use fixed-size PES header + +2012-06-16 16:50:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: only write PTS and DTS if different + +2012-06-16 16:50:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmuxcommon.h: + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: optionally set data_alignment flag in PES header + +2012-06-16 16:50:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: re-enable inadvertent disabled code + +2012-06-16 16:44:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: adjust again to modified buffer collect behaviour + ... by effectively reverting previous adjustment. + +2012-06-16 16:49:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: use default CollectPads collect heuristic + ... with an appropriately custom buffer clip function to arrange for + buffer processing. + Conflicts: + gst/mpegtsmux/mpegtsmux.c + gst/mpegtsmux/mpegtsmux.h + +2012-06-16 15:54:49 +0300 Raimo Järvi <raimo.jarvi@gmail.com> + + * gst/mpegtsmux/tsmux/tsmuxcommon.h: + mpegtsmux: Fix compiler warnings + https://bugzilla.gnome.org/show_bug.cgi?id=678211 + +2012-06-16 19:17:49 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + mpegtsmux: fix ported segment init + +2012-06-14 14:49:55 -0700 Matej Knopp <matej.knopp@gmail.com> + + * configure.ac: + * gst/mpegtsmux/Makefile.am: + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + * gst/mpegtsmux/mpegtsmux_aac.c: + * gst/mpegtsmux/mpegtsmux_h264.c: + * gst/mpegtsmux/mpegtsmux_h264.h: + * gst/mpegtsmux/tsmux/crc.h: + * gst/mpegtsmux/tsmux/tsmux.c: + mpegtsmux: port to 0.11 + https://bugzilla.gnome.org/show_bug.cgi?id=678130 + +2012-06-15 13:00:37 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: don't recreate the d3d device if it already exists + +2012-06-15 11:41:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + * ext/Makefile.am: + * ext/jasper/Makefile.am: + * ext/jasper/gstjasper.c: + * ext/jasper/gstjasperdec.c: + * ext/jasper/gstjasperdec.h: + * ext/jasper/gstjasperenc.c: + * ext/jasper/gstjasperenc.h: + * ext/jp2k/Makefile.am: + * ext/jp2k/gstjasperdec.c: + * ext/jp2k/gstjasperdec.h: + * ext/jp2k/gstjasperenc.c: + * ext/jp2k/gstjasperenc.h: + * ext/jp2k/gstjp2k.c: + jasper: Rename from jp2k to jasper + Jasper is not the only JPEG2000 library out there and we + might want to add encoders/decoders based on OpenJPEG for example. + +2012-06-15 10:32:39 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> + + * ext/opus/gstopusenc.c: + opusenc: add missing mutex unlock on error path + +2012-06-15 10:24:24 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> + + * ext/opus/gstopusdec.c: + * ext/opus/gstopusdec.h: + * ext/opus/gstopusenc.c: + * ext/opus/gstopusenc.h: + * ext/opus/gstopusheader.h: + * ext/opus/gstopusparse.c: + * ext/opus/gstopusparse.h: + opus: set author to myself, and update copyright notices + because as slomo noted, in fact pretty much all the code in there is mine. + +2012-06-15 00:58:43 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/d3dvideosink/d3dvideosink.c: + d3dvideosink: don't create new internal windows if we already have one + +2012-06-08 23:01:26 +0300 Raimo Järvi <raimo.jarvi@gmail.com> + + * gst/librfb/gstrfbsrc.c: + rfbsrc: Fix compiling in Windows + https://bugzilla.gnome.org/show_bug.cgi?id=677724 + +2012-06-11 13:10:43 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> + + * ext/resindvd/Makefile.am: + resindvd: rename the lib from libresindvd to libgstresindvd + For consistency. + +2012-06-07 15:06:34 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> + + * ext/resindvd/resindvdsrc.c: + resindvd: guard against not finding some data on a DVD + May possibly help with a particular DVD. + https://bugzilla.gnome.org/show_bug.cgi?id=673118 + +2012-06-14 02:47:10 +0200 Sebastian Rasmussen <sebrn@axis.com> + + * tests/check/elements/curlfilesink.c: + curlfilesink: Remove stray debug prints + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=678060 + +2012-06-12 21:35:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * LICENSE_readme: + * ext/Makefile.am: + * ext/lcs/Makefile.am: + * ext/lcs/gstcolorspace.c: + lcs: remove old LCS colorspace conversion plugin + Wasn't even ported to 0.10, and even back in the day + no one knew where the corresponding lib was from. + +2012-06-12 21:29:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/chart/.gitignore: + * gst/chart/Makefile.am: + * gst/chart/chart.vcproj: + * gst/chart/gstchart.c: + chart: remove old plugin that has never been ported to 0.10 + +2012-06-12 21:20:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/videodrop/Makefile.am: + * gst/videodrop/gstvideodrop.c: + * gst/videodrop/gstvideodrop.h: + * gst/videodrop/videodrop.vcproj: + videodrop: drop videodrop + It was never even ported to 0.10, and videorate does its job now. + +2012-06-12 21:16:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * LICENSE_readme: + * REQUIREMENTS: + * ext/Makefile.am: + * ext/arts/.gitignore: + * ext/arts/Makefile.am: + * ext/arts/gst_arts.c: + * ext/arts/gst_arts.h: + * ext/arts/gst_artsio.idl: + * ext/arts/gst_artsio_impl.cc: + * ext/arts/gst_artsio_impl.h: + * ext/artsd/Makefile.am: + * ext/artsd/REQUIREMENTS: + * ext/artsd/gstartsdsink.c: + * ext/artsd/gstartsdsink.h: + * m4/Makefile.am: + * m4/as-arts.m4: + * m4/gst-artsc.m4: + arts: remove aRts-related plugins + aRts development stopped in 2004, it's unlikely ever is + still using it. Besides, these elements were never even + ported to 0.10. + +2012-06-12 21:02:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * LICENSE_readme: + * ext/Makefile.am: + * ext/shout/Makefile.am: + * ext/shout/gstshout.c: + * ext/shout/gstshout.h: + shout: remove old shout plugin that has never been ported to 0.10 + There's shout2 in -good now. + +2012-06-12 20:35:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * LICENSE_readme: + * ext/Makefile.am: + * ext/hermes/Makefile.am: + * ext/hermes/gsthermescolorspace.c: + hermes: remove hermes colorspace converter that was never ported to 0.10 + +2012-06-12 19:06:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * Android.mk: + * configure.ac: + * docs/plugins/Makefile.am: + * docs/plugins/gst-plugins-bad-plugins-docs.sgml: + * docs/plugins/gst-plugins-bad-plugins-sections.txt: + * docs/plugins/inspect/plugin-legacyresample.xml: + * gst-plugins-bad.spec.in: + * gst/legacyresample/Makefile.am: + * gst/legacyresample/buffer.c: + * gst/legacyresample/buffer.h: + * gst/legacyresample/debug.c: + * gst/legacyresample/debug.h: + * gst/legacyresample/functable.c: + * gst/legacyresample/functable.h: + * gst/legacyresample/gstlegacyresample.c: + * gst/legacyresample/gstlegacyresample.h: + * gst/legacyresample/resample.c: + * gst/legacyresample/resample.h: + * gst/legacyresample/resample_functable.c: + * gst/legacyresample/resample_ref.c: + * tests/check/Makefile.am: + * tests/check/elements/legacyresample.c: + legacyresample: remove legacy plugin + +2012-06-12 19:02:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * ext/Makefile.am: + * ext/audioresample/Makefile.am: + * ext/audioresample/gstaudioresample.c: + * ext/audioresample/gstaudioresample.h: + audioresample: remove old audioresample plugin that was never even ported to 0.10 + +2012-06-12 18:53:13 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * ext/chromaprint/gstchromaprint.c: + chromaprint: update for new tag event API + +2012-06-12 18:47:21 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * LICENSE_readme: + * REQUIREMENTS: + * configure.ac: + * docs/plugins/gst-plugins-bad-plugins.signals: + * docs/plugins/inspect/plugin-divxdec.xml: + * docs/plugins/inspect/plugin-divxenc.xml: + * ext/Makefile.am: + * ext/divx/Makefile.am: + * ext/divx/gstdivxdec.c: + * ext/divx/gstdivxdec.h: + * ext/divx/gstdivxenc.c: + * ext/divx/gstdivxenc.h: + divx: remove plugin that the world doesn't need any more + 2002 called. + +2012-06-12 10:59:39 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * gst/dvdspu/gstdvdspu.c: + dvdspu: Fix array type + We wanted an array of guint8 (and not an array of pointers) to store + the data from gst_buffer_extract() and read it. + +2012-06-12 09:10:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * ext/faad/gstfaad.c: + faad: don't access buffer after _finish_frame + Unmap the buffer before calling _finish_frame because we are not allowed to + access it after. + +2012-06-11 16:45:53 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + mpegtsmux: sprinkle some more debug catering + +2012-06-11 16:44:02 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: add SPN/PTS indexing capabilities + Based on patch by Andreas Frisch <fraxinas@opendreambox.org> + Fixes https://bugzilla.gnome.org/show_bug.cgi?id=644890 + +2012-06-11 14:03:26 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/tsmux/tsmux.c: + * gst/mpegtsmux/tsmux/tsmux.h: + mpegtsmux: avoid memcpy due to temporary packet buffer + ... by writing directly into the output buffer instead. + +2012-06-11 10:49:15 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> + + * gst-libs/gst/codecparsers/gsth264parser.c: + h264parser: do not assert on data input, just return + https://bugzilla.gnome.org/show_bug.cgi?id=674069 + +2012-06-10 14:29:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk> + + * gst/dvdspu/gstdvdspu.c: + * gst/dvdspu/gstdvdspu.h: + * gst/dvdspu/gstspu-vobsub-render.c: + dvdspu: allow debugging of render and highlight rectangles via environment variable + Enable debugging of rectangles via GST_DVD_SPU_DEBUG. + https://bugzilla.gnome.org/show_bug.cgi?id=667223 + Conflicts: + gst/dvdspu/gstspu-vobsub-render.c + +2011-12-31 18:35:40 -0600 Rob Clark <rob@ti.com> + + * gst/dvdspu/gstspu-vobsub-render.c: + dvdspu: cleanup debug code + Clean up debug code for drawing highlight rects which wasn't even + compiling previously. + TODO: might be nice if this could be controlled by properties or + env variables to make it possible to enable the debug code at + runtime. + https://bugzilla.gnome.org/show_bug.cgi?id=667223 + Conflicts: + gst/dvdspu/gstspu-vobsub-render.c + +2012-06-08 17:14:09 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/tsmux/tsmuxstream.c: + mpegtsmux: plug leaks when freeing stream + +2012-06-08 17:13:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: plug some leaks + +2012-06-08 15:58:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * gst/audiovisualizers/gstbaseaudiovisualizer.c: + * gst/hls/gsthlsdemux.c: + * tests/check/elements/curlfilesink.c: + * win32/common/config.h: + elements: Use gst_pad_set_caps() instead of manual event fiddling + +2012-06-08 15:05:12 +0200 Edward Hervey <edward.hervey@collabora.co.uk> + + * common: + Automatic update of common submodule + From 03a0e57 to 98e386f + +2012-06-08 11:55:35 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/elements/mpegtsmux.c: + tests: mpegtsmux: adjust to modified buffer collect behaviour + +2012-06-08 11:12:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * tests/check/libs/mpegvideoparser.c: + tests: mpegvideoparser: adjust to modified API + +2012-06-07 17:43:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: drain cached data upon EOS + +2012-06-07 17:38:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + mpegtsmux: allow for aligned output + ... and refactor packet handling some more in the process. + Fixes #651805. + +2012-06-07 14:38:10 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + * gst/mpegtsmux/mpegtsmux.h: + * gst/mpegtsmux/tsmux/tsmux.c: + * gst/mpegtsmux/tsmux/tsmux.h: + mpegtsmux: improve m2ts timestamp interpolation + * a known PCR should really belong to a packet holding that PCR + * interpolation can be extended backward for initial packets (PAT, PMT) + +2012-06-07 12:17:24 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> + + * gst/mpegtsmux/mpegtsmux.c: + mpegtsmux: tweak output buffer timestamping + +2012-06-07 16:23:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + Back to development + === release 0.11.92 === -2012-06-07 Sebastian Dröge <sebastian.droege@collabora.co.uk> +2012-06-07 16:23:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + * ChangeLog: + * NEWS: + * RELEASE: * configure.ac: - releasing 0.11.92, "Shine On You Crazy Diamond" + * docs/plugins/gst-plugins-bad-plugins.args: + * docs/plugins/gst-plugins-bad-plugins.hierarchy: + * docs/plugins/gst-plugins-bad-plugins.interfaces: + * docs/plugins/gst-plugins-bad-plugins.signals: + * 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-celt.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-dvbsuboverlay.xml: + * docs/plugins/inspect/plugin-dvdspu.xml: + * docs/plugins/inspect/plugin-faac.xml: + * docs/plugins/inspect/plugin-faad.xml: + * docs/plugins/inspect/plugin-flite.xml: + * docs/plugins/inspect/plugin-fragmented.xml: + * docs/plugins/inspect/plugin-gaudieffects.xml: + * docs/plugins/inspect/plugin-geometrictransform.xml: + * docs/plugins/inspect/plugin-gmedec.xml: + * docs/plugins/inspect/plugin-gsm.xml: + * docs/plugins/inspect/plugin-mms.xml: + * docs/plugins/inspect/plugin-modplug.xml: + * docs/plugins/inspect/plugin-mpegdemux2.xml: + * docs/plugins/inspect/plugin-mpegtsdemux.xml: + * docs/plugins/inspect/plugin-pcapparse.xml: + * docs/plugins/inspect/plugin-rawparse.xml: + * docs/plugins/inspect/plugin-removesilence.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-sdp.xml: + * docs/plugins/inspect/plugin-segmentclip.xml: + * docs/plugins/inspect/plugin-shm.xml: + * docs/plugins/inspect/plugin-smooth.xml: + * docs/plugins/inspect/plugin-videoparsersbad.xml: + * docs/plugins/inspect/plugin-voaacenc.xml: + * docs/plugins/inspect/plugin-vp8.xml: + * docs/plugins/inspect/plugin-y4mdec.xml: + * docs/plugins/inspect/plugin-zbar.xml: + * ext/cog/gstcogorc-dist.c: + * gst-plugins-bad.doap: + * gst/bayer/gstbayerorc-dist.c: + * gst/fieldanalysis/gstfieldanalysisorc-dist.c: + * gst/gaudieffects/Makefile.am: + * win32/common/config.h: + Release 0.11.92 + +2012-06-07 16:22:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * po/af.po: + * po/az.po: + * po/bg.po: + * po/ca.po: + * po/cs.po: + * po/da.po: + * po/de.po: + * po/el.po: + * po/en_GB.po: + * po/eo.po: + * po/es.po: + * po/eu.po: + * po/fi.po: + * po/fr.po: + * po/gl.po: + * po/hu.po: + * po/id.po: + * po/it.po: + * po/ja.po: + * po/ky.po: + * po/lt.po: + * po/lv.po: + * po/mt.po: + * po/nb.po: + * po/nl.po: + * po/or.po: + * po/pl.po: + * po/pt_BR.po: + * po/ro.po: + * po/ru.po: + * po/sk.po: + * po/sl.po: + * po/sq.po: + * po/sr.po: + * po/sv.po: + * po/tr.po: + * po/uk.po: + * po/vi.po: + * po/zh_CN.po: + Update .po files 2012-06-07 12:33:31 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk> diff --git a/Makefile.in b/Makefile.in index ede5ad32..a62f1816 100644 --- a/Makefile.in +++ b/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/common/Makefile.in b/common/Makefile.in index 2b783f48..74ca2573 100644 --- a/common/Makefile.in +++ b/common/Makefile.in @@ -314,6 +314,8 @@ 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@ @@ -321,6 +323,8 @@ 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@ @@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -363,6 +366,10 @@ 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@ @@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak index f7c05ed6..2468cb08 100644 --- a/common/gtk-doc-plugins.mak +++ b/common/gtk-doc-plugins.mak @@ -294,8 +294,7 @@ install-data-local: $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \ fi; \ - (which gtkdoc-rebase >/dev/null && \ - gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \ fi) uninstall-local: if test -d $(DESTDIR)$(TARGET_DIR); then \ diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak index 31b56f9f..a1e07dc8 100644 --- a/common/gtk-doc.mak +++ b/common/gtk-doc.mak @@ -194,8 +194,7 @@ install-data-local: $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \ fi; \ - (which gtkdoc-rebase >/dev/null && \ - gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \ fi) uninstall-local: if test -d $(DESTDIR)$(TARGET_DIR); then \ diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in index 3abec0eb..3978da29 100644 --- a/common/m4/Makefile.in +++ b/common/m4/Makefile.in @@ -274,6 +274,8 @@ 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@ @@ -281,6 +283,8 @@ 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@ @@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -323,6 +326,10 @@ 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@ @@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4 index 0c1a3053..b243f1cf 100644 --- a/common/m4/gtk-doc.m4 +++ b/common/m4/gtk-doc.m4 @@ -67,5 +67,4 @@ AC_DEFUN([GTK_DOC_CHECK], AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes]) AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes]) AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"]) - AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"]) ]) diff --git a/config.h.in b/config.h.in index ee5fd81e..14f1cb3a 100644 --- a/config.h.in +++ b/config.h.in @@ -256,6 +256,9 @@ /* Define to enable GSM library (used by gsmenc gsmdec). */ #undef HAVE_GSM +/* Define if gudev is installed */ +#undef HAVE_GUDEV + /* Define to 1 if you have the <highgui.h> header file. */ #undef HAVE_HIGHGUI_H @@ -289,6 +292,9 @@ /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET +/* Define if libusb 1.x is installed */ +#undef HAVE_LIBUSB + /* Define to enable Linear Systems SDI plugin (used by linsys). */ #undef HAVE_LINSYS @@ -466,6 +472,9 @@ /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H +/* Define to enable UVC H264 (used by uvch264). */ +#undef HAVE_UVCH264 + /* Define if valgrind should be used */ #undef HAVE_VALGRIND @@ -493,6 +502,9 @@ /* Defined if the VP8 encoder is available */ #undef HAVE_VP8_ENCODER +/* Defined if the VP8 decoder has MFQE support */ +#undef HAVE_VP8_MFQE + /* Define to enable wayland sink (used by wayland ). */ #undef HAVE_WAYLAND @@ -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 0.11.93. +# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 0.11.94. # # 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='0.11.93' -PACKAGE_STRING='GStreamer Bad Plug-ins 0.11.93' +PACKAGE_VERSION='0.11.94' +PACKAGE_STRING='GStreamer Bad Plug-ins 0.11.94' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -674,7 +674,7 @@ RTMP_CFLAGS USE_VP8_FALSE USE_VP8_TRUE VPX_LIBS -HAVE_VPX +VPX_CFLAGS USE_ZBAR_FALSE USE_ZBAR_TRUE ZBAR_LIBS @@ -932,6 +932,16 @@ USE_ASSRENDER_FALSE USE_ASSRENDER_TRUE ASSRENDER_LIBS ASSRENDER_CFLAGS +LIBUDEV_LIBS +LIBUDEV_CFLAGS +USE_UVCH264_FALSE +USE_UVCH264_TRUE +LIBUSB_LIBS +LIBUSB_CFLAGS +G_UDEV_LIBS +G_UDEV_CFLAGS +GST_VIDEO_LIBS +GST_VIDEO_CFLAGS USE_VCD_FALSE USE_VCD_TRUE USE_SHM_FALSE @@ -1054,6 +1064,8 @@ USE_PLUGIN_HLS_FALSE USE_PLUGIN_HLS_TRUE USE_PLUGIN_HDVPARSE_FALSE USE_PLUGIN_HDVPARSE_TRUE +USE_PLUGIN_GDP_FALSE +USE_PLUGIN_GDP_TRUE USE_PLUGIN_GEOMETRICTRANSFORM_FALSE USE_PLUGIN_GEOMETRICTRANSFORM_TRUE USE_PLUGIN_GAUDIEFFECTS_FALSE @@ -1194,8 +1206,6 @@ PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_VERSION PYTHON -GTK_DOC_USE_REBASE_FALSE -GTK_DOC_USE_REBASE_TRUE GTK_DOC_USE_LIBTOOL_FALSE GTK_DOC_USE_LIBTOOL_TRUE GTK_DOC_BUILD_PDF_FALSE @@ -1501,6 +1511,7 @@ enable_freeverb enable_frei0r enable_gaudieffects enable_geometrictransform +enable_gdp enable_hdvparse enable_hls enable_id3tag @@ -1554,6 +1565,7 @@ enable_avc enable_quicktime enable_shm enable_vcd +enable_uvch264 enable_assrender enable_voamrwbenc enable_voaacenc @@ -1676,6 +1688,12 @@ EXIF_CFLAGS EXIF_LIBS ORC_CFLAGS ORC_LIBS +GST_VIDEO_CFLAGS +GST_VIDEO_LIBS +G_UDEV_CFLAGS +G_UDEV_LIBS +LIBUSB_CFLAGS +LIBUSB_LIBS ASSRENDER_CFLAGS ASSRENDER_LIBS VOAMRWBENC_CFLAGS @@ -1769,6 +1787,8 @@ SCHRO_CFLAGS SCHRO_LIBS ZBAR_CFLAGS ZBAR_LIBS +VPX_CFLAGS +VPX_LIBS RTMP_CFLAGS RTMP_LIBS SPANDSP_CFLAGS @@ -2315,7 +2335,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 0.11.93 to adapt to many kinds of systems. +\`configure' configures GStreamer Bad Plug-ins 0.11.94 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2390,7 +2410,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 0.11.93:";; + short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 0.11.94:";; esac cat <<\_ACEOF @@ -2455,6 +2475,7 @@ Optional Features: --disable-gaudieffects disable dependency-less gaudieffects plugin --disable-geometrictransform disable dependency-less geometrictransform plugin + --disable-gdp disable dependency-less gdp plugin --disable-hdvparse disable dependency-less hdvparse plugin --disable-hls disable dependency-less hls plugin --disable-id3tag disable dependency-less id3tag plugin @@ -2508,6 +2529,7 @@ Optional Features: --disable-quicktime disable QuickTime wrapper: qtwrapper --disable-shm disable POSIX shared memory source and sink: shm --disable-vcd disable Video CD: vcdsrc + --disable-uvch264 disable UVC H264: uvch264 --disable-assrender disable ASS/SSA renderer: assrender --disable-voamrwbenc disable vo-amrwbenc library: vo-amrwbenc --disable-voaacenc disable vo-aacenc library: vo-aacenc @@ -2689,6 +2711,16 @@ Some influential environment variables: EXIF_LIBS linker flags for EXIF, overriding pkg-config ORC_CFLAGS C compiler flags for ORC, overriding pkg-config ORC_LIBS linker flags for ORC, overriding pkg-config + GST_VIDEO_CFLAGS + C compiler flags for GST_VIDEO, overriding pkg-config + GST_VIDEO_LIBS + linker flags for GST_VIDEO, overriding pkg-config + G_UDEV_CFLAGS + C compiler flags for G_UDEV, overriding pkg-config + G_UDEV_LIBS linker flags for G_UDEV, overriding pkg-config + LIBUSB_CFLAGS + C compiler flags for LIBUSB, overriding pkg-config + LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config ASSRENDER_CFLAGS C compiler flags for ASSRENDER, overriding pkg-config ASSRENDER_LIBS @@ -2836,6 +2868,8 @@ Some influential environment variables: SCHRO_LIBS linker flags for SCHRO, overriding pkg-config ZBAR_CFLAGS C compiler flags for ZBAR, overriding pkg-config ZBAR_LIBS linker flags for ZBAR, overriding pkg-config + VPX_CFLAGS C compiler flags for VPX, overriding pkg-config + VPX_LIBS linker flags for VPX, overriding pkg-config RTMP_CFLAGS C compiler flags for RTMP, overriding pkg-config RTMP_LIBS linker flags for RTMP, overriding pkg-config SPANDSP_CFLAGS @@ -2913,7 +2947,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Bad Plug-ins configure 0.11.93 +GStreamer Bad Plug-ins configure 0.11.94 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3886,7 +3920,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 0.11.93, which was +It was created by GStreamer Bad Plug-ins $as_me 0.11.94, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4820,7 +4854,7 @@ fi # Define the identity of the package. PACKAGE='gst-plugins-bad' - VERSION='0.11.93' + VERSION='0.11.94' cat >>confdefs.h <<_ACEOF @@ -4943,9 +4977,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; } - PACKAGE_VERSION_MAJOR=$(echo 0.11.93 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 0.11.93 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 0.11.93 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 0.11.94 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 0.11.94 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 0.11.94 | cut -d'.' -f3) @@ -4956,7 +4990,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 0.11.93 | cut -d'.' -f4) + NANO=$(echo 0.11.94 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -13868,8 +13902,8 @@ CC="$lt_save_CC" -GST_REQ=0.11.93 -GSTPB_REQ=0.11.93 +GST_REQ=0.11.94 +GSTPB_REQ=0.11.94 @@ -22711,14 +22745,14 @@ fi if test x$enable_gtk_doc = xyes; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.3") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.12\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.12") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : else - as_fn_error $? "You need to have gtk-doc >= 1.3 installed to build $PACKAGE_NAME" "$LINENO" 5 + as_fn_error $? "You need to have gtk-doc >= 1.12 installed to build $PACKAGE_NAME" "$LINENO" 5 fi if test "x$PACKAGE_NAME" != "xglib"; then @@ -22942,14 +22976,6 @@ else GTK_DOC_USE_LIBTOOL_FALSE= fi - if test -n "$GTKDOC_REBASE"; then - GTK_DOC_USE_REBASE_TRUE= - GTK_DOC_USE_REBASE_FALSE='#' -else - GTK_DOC_USE_REBASE_TRUE='#' - GTK_DOC_USE_REBASE_FALSE= -fi - @@ -27677,19 +27703,19 @@ _ACEOF GST_PLUGINS_NONPORTED=" aiff \ cdxaparse \ dccp faceoverlay \ - fieldanalysis freeverb freeze frei0r \ - hdvparse id3tag inter ivfparse jpegformat jp2kdecimator \ - kate liveadder librfb \ + fieldanalysis freeverb frei0r \ + hdvparse ivfparse jp2kdecimator \ + kate librfb \ mpegpsmux mve mxf mythtv nsf nuvdemux \ - patchdetect pnm real \ - sdi siren speed subenc stereo tta videofilters \ + patchdetect real \ + sdi subenc stereo tta videofilters \ videomeasure videosignal vmnc \ decklink fbdev linsys vcd \ - apexsink cdaudio cog dc1394 dirac directfb resindvd \ + apexsink cdaudio cog dc1394 dirac directfb \ gsettings jasper ladspa \ - musepack musicbrainz nas neon ofa openal rsvg sdl sndfile spandsp spc timidity \ + musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \ directsound directdraw direct3d9 acm wininet \ - wildmidi xvid lv2 teletextdec dvb sndio" + wildmidi xvid lv2 teletextdec sndio uvch264" @@ -28725,6 +28751,49 @@ fi + GST_PLUGINS_ALL="$GST_PLUGINS_ALL gdp" + + + + # Check whether --enable-gdp was given. +if test "${enable_gdp+set}" = set; then : + enableval=$enable_gdp; + case "${enableval}" in + yes) gst_use_gdp=yes ;; + no) gst_use_gdp=no ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gdp" "$LINENO" 5 ;; + esac + +else + gst_use_gdp=yes +fi + + if test x$gst_use_gdp = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin gdp" >&5 +$as_echo "$as_me: disabling dependency-less plugin gdp" >&6;} + WITHOUT_PLUGINS="$WITHOUT_PLUGINS gdp" + fi + + + if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then + GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED gdp" + fi + if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'` + fi + if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " gdp " > /dev/null; then + GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'` + fi + if echo " $GST_PLUGINS_SELECTED " | grep -i " gdp " > /dev/null; then + USE_PLUGIN_GDP_TRUE= + USE_PLUGIN_GDP_FALSE='#' +else + USE_PLUGIN_GDP_TRUE='#' + USE_PLUGIN_GDP_FALSE= +fi + + + GST_PLUGINS_ALL="$GST_PLUGINS_ALL hdvparse" @@ -31206,6 +31275,13 @@ int main () { return 0; } +int +main () +{ + + ; + return 0; +} _ACEOF if ac_fn_c_try_link "$LINENO"; then : HAVE_DIRECTSHOW="yes" @@ -31969,6 +32045,360 @@ fi +echo +{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: UVC H264 ***" >&5 +$as_echo "$as_me: *** checking feature: UVC H264 ***" >&6;} +if test "xuvch264" != "x" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: uvch264 ***" >&5 +$as_echo "$as_me: *** for plug-ins: uvch264 ***" >&6;} +fi +NOUSE= +if test "x$USE_UVCH264" = "xno"; then + NOUSE="yes" +fi +# Check whether --enable-uvch264 was given. +if test "${enable_uvch264+set}" = set; then : + enableval=$enable_uvch264; case "${enableval}" in + yes) USE_UVCH264=yes;; + no) USE_UVCH264=no;; + *) as_fn_error $? "bad value ${enableval} for --enable-uvch264" "$LINENO" 5 ;; + esac +else + USE_UVCH264=yes +fi + +if test "x$NOUSE" = "xyes"; then + USE_UVCH264="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** uvch264 pre-configured not to be built" >&5 +$as_echo "$as_me: WARNING: *** uvch264 pre-configured not to be built" >&2;} +fi +NOUSE= + +if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " UVCH264 " > /dev/null; then + USE_UVCH264="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** uvch264 not ported" >&5 +$as_echo "$as_me: WARNING: *** uvch264 not ported" >&2;} +fi + + +if test x$USE_UVCH264 = 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_UVCH264=no + + ac_fn_c_check_header_mongrel "$LINENO" "linux/uvcvideo.h" "ac_cv_header_linux_uvcvideo_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_uvcvideo_h" = xyes; then : + HAVE_UVCVIDEO_H=yes +else + HAVE_UVCVIDEO_H=no +fi + + + + which="gstreamer-video-0.10 >= 0.10.36" + required="no" + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5 +$as_echo_n "checking for GST_VIDEO... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$GST_VIDEO_CFLAGS"; then + pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$GST_VIDEO_LIBS"; then + pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5 + ($PKG_CONFIG --exists --print-errors "$which") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 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 + GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"` + else + GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"` + fi + # Put the nasty error message in config.log where it belongs + echo "$GST_VIDEO_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + + HAVE_GST_VIDEO="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5 +$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;} + fi + +elif test $pkg_failed = untried; then + + HAVE_GST_VIDEO="no" + if test "x$required" = "xyes"; then + as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5 +$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;} + fi + +else + GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS + GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + HAVE_GST_VIDEO="yes" + +fi + + + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for G_UDEV" >&5 +$as_echo_n "checking for G_UDEV... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$G_UDEV_CFLAGS"; then + pkg_cv_G_UDEV_CFLAGS="$G_UDEV_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0 \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gudev-1.0 ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_G_UDEV_CFLAGS=`$PKG_CONFIG --cflags "gudev-1.0 " 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$G_UDEV_LIBS"; then + pkg_cv_G_UDEV_LIBS="$G_UDEV_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0 \""; } >&5 + ($PKG_CONFIG --exists --print-errors "gudev-1.0 ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_G_UDEV_LIBS=`$PKG_CONFIG --libs "gudev-1.0 " 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 + G_UDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gudev-1.0 "` + else + G_UDEV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gudev-1.0 "` + fi + # Put the nasty error message in config.log where it belongs + echo "$G_UDEV_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_GUDEV="no" +elif test $pkg_failed = untried; then + HAVE_GUDEV="no" +else + G_UDEV_CFLAGS=$pkg_cv_G_UDEV_CFLAGS + G_UDEV_LIBS=$pkg_cv_G_UDEV_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +$as_echo "#define HAVE_GUDEV 1" >>confdefs.h + + HAVE_GUDEV="yes" +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUSB" >&5 +$as_echo_n "checking for LIBUSB... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$LIBUSB_CFLAGS"; then + pkg_cv_LIBUSB_CFLAGS="$LIBUSB_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 \""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0 ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_CFLAGS=`$PKG_CONFIG --cflags "libusb-1.0 " 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$LIBUSB_LIBS"; then + pkg_cv_LIBUSB_LIBS="$LIBUSB_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 \""; } >&5 + ($PKG_CONFIG --exists --print-errors "libusb-1.0 ") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBUSB_LIBS=`$PKG_CONFIG --libs "libusb-1.0 " 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 + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libusb-1.0 "` + else + LIBUSB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libusb-1.0 "` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBUSB_PKG_ERRORS" >&5 + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_LIBUSB="no" +elif test $pkg_failed = untried; then + HAVE_LIBUSB="no" +else + LIBUSB_CFLAGS=$pkg_cv_LIBUSB_CFLAGS + LIBUSB_LIBS=$pkg_cv_LIBUSB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +$as_echo "#define HAVE_LIBUSB 1" >>confdefs.h + + HAVE_LIBUSB="yes" +fi + if test "x$HAVE_UVCVIDEO_H" == "xyes" && \ + test "x$HAVE_GUDEV" == "xyes" && \ + test "x$HAVE_LIBUSB" == "xyes"; then + HAVE_UVCH264=yes + else + HAVE_UVCH264=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_UVCH264 = xno; then + USE_UVCH264=no + else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: uvch264" >&5 +$as_echo "$as_me: *** These plugins will be built: uvch264" >&6;} + fi +fi +if test x$USE_UVCH264 = xyes; then + : + if test "xuvch264" != "x"; then + GST_PLUGINS_YES="\tuvch264\n$GST_PLUGINS_YES" + fi + +$as_echo "#define HAVE_UVCH264 /**/" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: uvch264" >&5 +$as_echo "$as_me: *** These plugins will not be built: uvch264" >&6;} + if test "xuvch264" != "x"; then + GST_PLUGINS_NO="\tuvch264\n$GST_PLUGINS_NO" + fi + : +fi + if test x$USE_UVCH264 = xyes; then + USE_UVCH264_TRUE= + USE_UVCH264_FALSE='#' +else + USE_UVCH264_TRUE='#' + USE_UVCH264_FALSE= +fi + + + + + + + + + if test "x$BUILD_EXTERNAL" = "xyes"; then echo @@ -34642,12 +35072,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-server <= 0.85.0 wayland-client <= 0.85.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0") 2>&5 + { { $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 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-server <= 0.85.0 wayland-client <= 0.85.0" 2>/dev/null` + pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 0.95.0" 2>/dev/null` else pkg_failed=yes fi @@ -34660,12 +35090,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-server <= 0.85.0 wayland-client <= 0.85.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0") 2>&5 + { { $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 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-server <= 0.85.0 wayland-client <= 0.85.0" 2>/dev/null` + pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 0.95.0" 2>/dev/null` else pkg_failed=yes fi @@ -34684,25 +35114,19 @@ 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-server <= 0.85.0 wayland-client <= 0.85.0"` + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 0.95.0"` else - WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0"` + WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 0.95.0"` fi # Put the nasty error message in config.log where it belongs echo "$WAYLAND_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no wayland." >&5 -$as_echo "no wayland." >&6; } - HAVE_WAYLAND="no" + HAVE_WAYLAND="no" elif test $pkg_failed = untried; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no wayland." >&5 -$as_echo "no wayland." >&6; } - HAVE_WAYLAND="no" + HAVE_WAYLAND="no" else WAYLAND_CFLAGS=$pkg_cv_WAYLAND_CFLAGS @@ -34710,41 +35134,10 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - ac_fn_c_check_header_mongrel "$LINENO" "wayland-client.h" "ac_cv_header_wayland_client_h" "$ac_includes_default" -if test "x$ac_cv_header_wayland_client_h" = xyes; then : - HAVE_WAYLAND_CLIENT="yes" -else - HAVE_WAYLAND_CLIENT="no" -fi - - - ac_fn_c_check_header_mongrel "$LINENO" "wayland-client-protocol.h" "ac_cv_header_wayland_client_protocol_h" "$ac_includes_default" -if test "x$ac_cv_header_wayland_client_protocol_h" = xyes; then : - HAVE_WAYLAND_CLIENT_PROTOCOL="yes" -else - HAVE_WAYLAND_CLIENT_PROTOCOL="no" + HAVE_WAYLAND="yes" fi - if test "x$HAVE_WAYLAND_CLIENT" = "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: wayland-client.h could not be found." >&5 -$as_echo "wayland-client.h could not be found." >&6; } - HAVE_WAYLAND="no" - elif test "x$HAVE_WAYLAND_CLIENT_PROTOCOL" = "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: wayland-client-protocol.h could not be found." >&5 -$as_echo "wayland-client-protocol.h could not be found." >&6; } - HAVE_WAYLAND="no" - else - HAVE_WAYLAND="yes" - WAYLAND_LIBS="-lwayland-client" - fi - -fi -WAYLAND_CFLAGS="" - - - - LIBS=$gst_check_save_LIBS LDFLAGS=$gst_check_save_LDFLAGS CFLAGS=$gst_check_save_CFLAGS @@ -46622,66 +47015,84 @@ if test x$USE_VP8 = xyes; then HAVE_VP8=no - VPX_LIBS="" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vpx_codec_version in -lvpx" >&5 -$as_echo_n "checking for vpx_codec_version in -lvpx... " >&6; } -if ${ac_cv_lib_vpx_vpx_codec_version+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lvpx $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VPX" >&5 +$as_echo_n "checking for VPX... " >&6; } -/* 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 vpx_codec_version (); -int -main () -{ -return vpx_codec_version (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_vpx_vpx_codec_version=yes +if test -n "$PKG_CONFIG"; then + if test -n "$VPX_CFLAGS"; then + pkg_cv_VPX_CFLAGS="$VPX_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"vpx\""; } >&5 + ($PKG_CONFIG --exists --print-errors "vpx") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VPX_CFLAGS=`$PKG_CONFIG --cflags "vpx" 2>/dev/null` else - ac_cv_lib_vpx_vpx_codec_version=no + pkg_failed=yes fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + fi +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$VPX_LIBS"; then + pkg_cv_VPX_LIBS="$VPX_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"vpx\""; } >&5 + ($PKG_CONFIG --exists --print-errors "vpx") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_VPX_LIBS=`$PKG_CONFIG --libs "vpx" 2>/dev/null` +else + pkg_failed=yes fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vpx_vpx_codec_version" >&5 -$as_echo "$ac_cv_lib_vpx_vpx_codec_version" >&6; } -if test "x$ac_cv_lib_vpx_vpx_codec_version" = xyes; then : - HAVE_VPX=yes + fi else - HAVE_VPX=no + pkg_failed=untried fi - if test "x$HAVE_VPX" = "xyes"; then - ac_fn_c_check_header_mongrel "$LINENO" "vpx/vpx_codec.h" "ac_cv_header_vpx_vpx_codec_h" "$ac_includes_default" -if test "x$ac_cv_header_vpx_vpx_codec_h" = xyes; then : - : + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - HAVE_VPX=no + _pkg_short_errors_supported=no fi + if test $_pkg_short_errors_supported = yes; then + VPX_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "vpx"` + else + VPX_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "vpx"` + fi + # Put the nasty error message in config.log where it belongs + echo "$VPX_PKG_ERRORS" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + HAVE_VPX="no" +elif test $pkg_failed = untried; then + HAVE_VPX="no" +else + VPX_CFLAGS=$pkg_cv_VPX_CFLAGS + VPX_LIBS=$pkg_cv_VPX_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + HAVE_VPX="yes" +fi - if test "x$HAVE_VPX" = "xyes"; then - + if test $HAVE_VPX = "yes"; then HAVE_VP8_ENCODER=no HAVE_VP8_DECODER=no OLD_LIBS="$LIBS" - LIBS="$LIBS $LIBM -lpthread" + LIBS="$LIBS $VPX_LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vpx_codec_vp8_cx_algo in -lvpx" >&5 $as_echo_n "checking for vpx_codec_vp8_cx_algo in -lvpx... " >&6; } if ${ac_cv_lib_vpx_vpx_codec_vp8_cx_algo+:} false; then : @@ -46724,7 +47135,6 @@ if test "x$ac_cv_lib_vpx_vpx_codec_vp8_cx_algo" = xyes; then : $as_echo "#define HAVE_VP8_ENCODER 1" >>confdefs.h - VPX_LIBS="-lvpx" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for VP8E_SET_TUNING presence" >&5 $as_echo_n "checking for VP8E_SET_TUNING presence... " >&6; } @@ -46805,20 +47215,45 @@ if test "x$ac_cv_lib_vpx_vpx_codec_vp8_dx_algo" = xyes; then : $as_echo "#define HAVE_VP8_DECODER 1" >>confdefs.h - VPX_LIBS="-lvpx" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for VP8_MFQE presence" >&5 +$as_echo_n "checking for VP8_MFQE presence... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -fi +#include <vpx/vpx_decoder.h> +#include <vpx/vp8dx.h> +int foo=VP8_MFQE; - LIBS="$OLD_LIBS" +int +main () +{ - else - : - fi - else - : - fi +return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + +$as_echo "#define HAVE_VP8_MFQE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi + + LIBS="$OLD_LIBS" + fi @@ -48315,6 +48750,14 @@ else USE_SNDIO_FALSE= fi + if false; then + USE_UVCH264_TRUE= + USE_UVCH264_FALSE='#' +else + USE_UVCH264_TRUE='#' + USE_UVCH264_FALSE= +fi + fi @@ -48364,7 +48807,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/freeze/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/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/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/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/vp8/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/freeze/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/vp8/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 @@ -48609,10 +49052,6 @@ if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then - as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${ENABLE_PLUGIN_DOCS_TRUE}" && test -z "${ENABLE_PLUGIN_DOCS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PLUGIN_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -48745,6 +49184,10 @@ if test -z "${USE_PLUGIN_GEOMETRICTRANSFORM_TRUE}" && test -z "${USE_PLUGIN_GEOM as_fn_error $? "conditional \"USE_PLUGIN_GEOMETRICTRANSFORM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_PLUGIN_GDP_TRUE}" && test -z "${USE_PLUGIN_GDP_FALSE}"; then + as_fn_error $? "conditional \"USE_PLUGIN_GDP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_PLUGIN_HDVPARSE_TRUE}" && test -z "${USE_PLUGIN_HDVPARSE_FALSE}"; then as_fn_error $? "conditional \"USE_PLUGIN_HDVPARSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -48973,6 +49416,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_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 +fi if test -z "${USE_ASSRENDER_TRUE}" && test -z "${USE_ASSRENDER_FALSE}"; then as_fn_error $? "conditional \"USE_ASSRENDER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -49521,6 +49968,10 @@ if test -z "${USE_SNDIO_TRUE}" && test -z "${USE_SNDIO_FALSE}"; then as_fn_error $? "conditional \"USE_SNDIO\" 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 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -49918,7 +50369,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 0.11.93, which was +This file was extended by GStreamer Bad Plug-ins $as_me 0.11.94, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -49984,7 +50435,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 0.11.93 +GStreamer Bad Plug-ins config.status 0.11.94 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -50549,6 +51000,7 @@ do "gst/frei0r/Makefile") CONFIG_FILES="$CONFIG_FILES gst/frei0r/Makefile" ;; "gst/gaudieffects/Makefile") CONFIG_FILES="$CONFIG_FILES gst/gaudieffects/Makefile" ;; "gst/geometrictransform/Makefile") CONFIG_FILES="$CONFIG_FILES gst/geometrictransform/Makefile" ;; + "gst/gdp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/gdp/Makefile" ;; "gst/hdvparse/Makefile") CONFIG_FILES="$CONFIG_FILES gst/hdvparse/Makefile" ;; "gst/hls/Makefile") CONFIG_FILES="$CONFIG_FILES gst/hls/Makefile" ;; "gst/id3tag/Makefile") CONFIG_FILES="$CONFIG_FILES gst/id3tag/Makefile" ;; @@ -50617,6 +51069,7 @@ do "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" ;; + "sys/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES sys/uvch264/Makefile" ;; "sys/vcd/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vcd/Makefile" ;; "sys/vdpau/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vdpau/Makefile" ;; "sys/vdpau/gstvdp/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vdpau/gstvdp/Makefile" ;; @@ -50635,6 +51088,7 @@ do "tests/examples/mxf/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/mxf/Makefile" ;; "tests/examples/scaletempo/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/scaletempo/Makefile" ;; "tests/examples/opencv/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/opencv/Makefile" ;; + "tests/examples/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/uvch264/Makefile" ;; "tests/icles/Makefile") CONFIG_FILES="$CONFIG_FILES tests/icles/Makefile" ;; "ext/voamrwbenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voamrwbenc/Makefile" ;; "ext/voaacenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voaacenc/Makefile" ;; diff --git a/configure.ac b/configure.ac index 47cc30e4..9dca8f79 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, 0.11.93, +AC_INIT(GStreamer Bad Plug-ins, 0.11.94, http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, gst-plugins-bad) @@ -53,8 +53,8 @@ dnl sets GST_LT_LDFLAGS AS_LIBTOOL(GST, 0, 0, 0) dnl *** required versions of GStreamer stuff *** -GST_REQ=0.11.93 -GSTPB_REQ=0.11.93 +GST_REQ=0.11.94 +GSTPB_REQ=0.11.94 dnl *** autotools stuff **** @@ -126,7 +126,7 @@ AC_PATH_PROG(VALGRIND_PATH, valgrind, no) AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno") dnl check for documentation tools -GTK_DOC_CHECK([1.3]) +GTK_DOC_CHECK([1.12]) AS_PATH_PYTHON([2.1]) AG_GST_PLUGIN_DOCS([1.3],[2.1]) @@ -313,19 +313,19 @@ dnl Make sure you have a space before and after all plugins GST_PLUGINS_NONPORTED=" aiff \ cdxaparse \ dccp faceoverlay \ - fieldanalysis freeverb freeze frei0r \ - hdvparse id3tag inter ivfparse jpegformat jp2kdecimator \ - kate liveadder librfb \ + fieldanalysis freeverb frei0r \ + hdvparse ivfparse jp2kdecimator \ + kate librfb \ mpegpsmux mve mxf mythtv nsf nuvdemux \ - patchdetect pnm real \ - sdi siren speed subenc stereo tta videofilters \ + patchdetect real \ + sdi subenc stereo tta videofilters \ videomeasure videosignal vmnc \ decklink fbdev linsys vcd \ - apexsink cdaudio cog dc1394 dirac directfb resindvd \ + apexsink cdaudio cog dc1394 dirac directfb \ gsettings jasper ladspa \ - musepack musicbrainz nas neon ofa openal rsvg sdl sndfile spandsp spc timidity \ + musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \ directsound directdraw direct3d9 acm wininet \ - wildmidi xvid lv2 teletextdec dvb sndio" + wildmidi xvid lv2 teletextdec sndio uvch264" AC_SUBST(GST_PLUGINS_NONPORTED) dnl these are all the gst plug-ins, compilable without additional libs @@ -353,6 +353,7 @@ AG_GST_CHECK_PLUGIN(freeverb) AG_GST_CHECK_PLUGIN(frei0r) AG_GST_CHECK_PLUGIN(gaudieffects) AG_GST_CHECK_PLUGIN(geometrictransform) +AG_GST_CHECK_PLUGIN(gdp) AG_GST_CHECK_PLUGIN(hdvparse) AG_GST_CHECK_PLUGIN(hls) AG_GST_CHECK_PLUGIN(id3tag) @@ -567,7 +568,7 @@ AG_GST_CHECK_FEATURE(DIRECTSHOW, [DirectShow plug-in], winks, [ LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS" LIBS="$LIBS -lole32 -luuid -lstrmiids" AC_MSG_CHECKING(for DirectShow LDFLAGS) - AC_LINK_IFELSE([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <windows.h> #include <strmif.h> #include <uuids.h> @@ -580,7 +581,7 @@ int main () { return 0; } -], +]])], [HAVE_DIRECTSHOW="yes"], [HAVE_DIRECTSHOW="no"]) AC_MSG_RESULT($HAVE_DIRECTSHOW) @@ -689,6 +690,34 @@ AG_GST_CHECK_FEATURE(VCD, [Video CD], vcdsrc, [ AC_CHECK_HEADER(linux/cdrom.h, HAVE_VCD="yes", HAVE_VCD="no") ]) + +dnl *** UVC H264 *** +translit(dnm, m, l) AM_CONDITIONAL(USE_UVCH264, true) +AG_GST_CHECK_FEATURE(UVCH264, [UVC H264], uvch264, [ + AC_CHECK_HEADER(linux/uvcvideo.h, HAVE_UVCVIDEO_H=yes, HAVE_UVCVIDEO_H=no) + AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-0.10 >= 0.10.36) + PKG_CHECK_MODULES(G_UDEV, gudev-1.0 , [ + AC_DEFINE([HAVE_GUDEV], 1, [Define if gudev is installed]) + HAVE_GUDEV="yes" ], + [HAVE_GUDEV="no"]) + PKG_CHECK_MODULES(LIBUSB, libusb-1.0 , [ + AC_DEFINE([HAVE_LIBUSB], 1, [Define if libusb 1.x is installed]) + HAVE_LIBUSB="yes" ], + [HAVE_LIBUSB="no"]) + if test "x$HAVE_UVCVIDEO_H" == "xyes" && \ + test "x$HAVE_GUDEV" == "xyes" && \ + test "x$HAVE_LIBUSB" == "xyes"; then + HAVE_UVCH264=yes + else + HAVE_UVCH264=no + fi +]) +AC_SUBST(LIBUDEV_CFLAGS) +AC_SUBST(LIBUDEV_LIBS) +AC_SUBST(LIBUSB_CFLAGS) +AC_SUBST(LIBUSB_LIBS) + + dnl *** ext plug-ins *** dnl keep this list sorted alphabetically ! @@ -898,26 +927,9 @@ 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-server <= 0.85.0 wayland-client <= 0.85.0, [ - AC_CHECK_HEADER(wayland-client.h, HAVE_WAYLAND_CLIENT="yes", HAVE_WAYLAND_CLIENT="no") - AC_CHECK_HEADER(wayland-client-protocol.h, HAVE_WAYLAND_CLIENT_PROTOCOL="yes", HAVE_WAYLAND_CLIENT_PROTOCOL="no") - if test "x$HAVE_WAYLAND_CLIENT" = "xno"; then - AC_MSG_RESULT(wayland-client.h could not be found.) - HAVE_WAYLAND="no" - elif test "x$HAVE_WAYLAND_CLIENT_PROTOCOL" = "xno"; then - AC_MSG_RESULT(wayland-client-protocol.h could not be found.) - HAVE_WAYLAND="no" - else - HAVE_WAYLAND="yes" - WAYLAND_LIBS="-lwayland-client" - fi - ], [ - AC_MSG_RESULT(no wayland.) - HAVE_WAYLAND="no" + PKG_CHECK_MODULES(WAYLAND, wayland-client >= 0.95.0, [ + HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no" ]) -WAYLAND_CFLAGS="" -AC_SUBST(WAYLAND_CFLAGS) -AC_SUBST(WAYLAND_LIBS) ]) dnl **** Dirac **** @@ -1761,19 +1773,17 @@ AG_GST_CHECK_FEATURE(ZBAR, [ZBar barcode detector], zbar, [ dnl *** vp8 *** translit(dnm, m, l) AM_CONDITIONAL(USE_VP8, vp8) AG_GST_CHECK_FEATURE(VP8, [VP8 decoder], vp8, [ - VPX_LIBS="" - AG_GST_CHECK_LIBHEADER(VPX, vpx, - vpx_codec_version, , - vpx/vpx_codec.h, [ + PKG_CHECK_MODULES(VPX, vpx, [HAVE_VPX="yes"], [HAVE_VPX="no"]) + + if test $HAVE_VPX = "yes"; then HAVE_VP8_ENCODER=no HAVE_VP8_DECODER=no OLD_LIBS="$LIBS" - LIBS="$LIBS $LIBM -lpthread" + LIBS="$LIBS $VPX_LIBS" AC_CHECK_LIB(vpx, vpx_codec_vp8_cx_algo, [ HAVE_VP8=yes AC_DEFINE(HAVE_VP8_ENCODER, 1, [Defined if the VP8 encoder is available]) - VPX_LIBS="-lvpx" AC_MSG_CHECKING([for VP8E_SET_TUNING presence]) AC_TRY_COMPILE([ @@ -1792,11 +1802,24 @@ return 0; AC_CHECK_LIB(vpx, vpx_codec_vp8_dx_algo, [ HAVE_VP8=yes AC_DEFINE(HAVE_VP8_DECODER, 1, [Defined if the VP8 decoder is available]) - VPX_LIBS="-lvpx" + AC_MSG_CHECKING([for VP8_MFQE presence]) + AC_TRY_COMPILE([ +#include <vpx/vpx_decoder.h> +#include <vpx/vp8dx.h> +int foo=VP8_MFQE; + ], [ +return 0; + ], [ + AC_DEFINE(HAVE_VP8_MFQE, 1, [Defined if the VP8 decoder has MFQE support]) + AC_MSG_RESULT(yes) + ], [ + AC_MSG_RESULT(no) + ]) ]) LIBS="$OLD_LIBS" - ]) + fi AC_SUBST(VPX_LIBS) + AC_SUBST(VPX_CFLAGS) ]) dnl *** rtmp *** @@ -1911,6 +1934,7 @@ AM_CONDITIONAL(USE_VP8, false) AM_CONDITIONAL(USE_RTMP, false) AM_CONDITIONAL(USE_TELETEXTDEC, false) AM_CONDITIONAL(USE_SNDIO, false) +AM_CONDITIONAL(USE_UVCH264, false) fi dnl of EXT plugins @@ -2017,6 +2041,7 @@ gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile +gst/gdp/Makefile gst/hdvparse/Makefile gst/hls/Makefile gst/id3tag/Makefile @@ -2085,6 +2110,7 @@ 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 @@ -2103,6 +2129,7 @@ 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 diff --git a/docs/Makefile.in b/docs/Makefile.in index c85a2b19..5763367e 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -314,6 +314,8 @@ 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@ @@ -321,6 +323,8 @@ 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@ @@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -363,6 +366,10 @@ 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@ @@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in index 95f0fe6b..0943f508 100644 --- a/docs/libs/Makefile.in +++ b/docs/libs/Makefile.in @@ -295,6 +295,8 @@ 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@ @@ -302,6 +304,8 @@ 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@ @@ -316,7 +320,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -344,6 +347,10 @@ 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@ @@ -470,6 +477,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -1058,8 +1066,7 @@ install-data-local: $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \ fi; \ - (which gtkdoc-rebase >/dev/null && \ - gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \ fi) uninstall-local: if test -d $(DESTDIR)$(TARGET_DIR); then \ diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html index 2972b813..d350c216 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="idp6800176"></a><h2>Compiling against the bad plugins libraries</h2> +<a name="idp8056976"></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 60e129c3..2ec24cda 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="idp8041232"></a><h3>Example uploading to GL texture</h3> +<a name="idp12477888"></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 d6e6e874..70a76be1 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="idp12143472"></a><h3>For Element</h3> +<a name="idp12748560"></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="idp12155728"></a><h3>For Application</h3> +<a name="idp12760816"></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="idp12160224"></a><h3>Example using ClutterVideoGstVideoSink</h3> +<a name="idp12765312"></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-h264parser.html b/docs/libs/html/gst-plugins-bad-libs-h264parser.html index 64b0e64f..5372cfdb 100644 --- a/docs/libs/html/gst-plugins-bad-libs-h264parser.html +++ b/docs/libs/html/gst-plugins-bad-libs-h264parser.html @@ -977,6 +977,10 @@ dpb_output_delay syntax element</td> guint32 log2_max_mv_length_vertical; guint32 num_reorder_frames; guint32 max_dec_frame_buffering; + + /* calculated values */ + guint par_n; + guint par_d; }; </pre> <p> @@ -1156,6 +1160,14 @@ or non-paired fields that precede any frame,</td> <td>specifies the required size of the HRD decoded picture buffer in units of frame buffers.</td> </tr> +<tr> +<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-n"></a>par_n</code></em>;</span></p></td> +<td></td> +</tr> +<tr> +<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-d"></a>par_d</code></em>;</span></p></td> +<td></td> +</tr> </tbody> </table></div> </div> @@ -1342,7 +1354,7 @@ units of frame buffers.</td> GstH264BufferingPeriod buffering_period; GstH264PicTiming pic_timing; /* ... could implement more */ - }; + } payload; }; </pre> </div> diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html index 0bee0fe7..4a013edc 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="idp9618704"></a><p> +<a name="idp9348160"></a><p> Provides useful functions for mpeg videos bitstream parsing. </p> </div> @@ -487,7 +487,7 @@ The Mpeg2 Video Sequence Extension structure. <tbody> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.profile"></a>profile</code></em>;</span></p></td> -<td>mpeg2 decoder profil</td> +<td>mpeg2 decoder profile</td> </tr> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.level"></a>level</code></em>;</span></p></td> @@ -496,7 +496,7 @@ The Mpeg2 Video Sequence Extension structure. <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.progressive"></a>progressive</code></em>;</span></p></td> <td> -<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frames are progressive <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwize</td> +<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frames are progressive <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</td> </tr> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.chroma-format"></a>chroma_format</code></em>;</span></p></td> @@ -516,13 +516,13 @@ The Mpeg2 Video Sequence Extension structure. </tr> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.vbv-buffer-size-extension"></a>vbv_buffer_size_extension</code></em>;</span></p></td> -<td>Vbv vuffer size</td> +<td>VBV vuffer size</td> </tr> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.low-delay"></a>low_delay</code></em>;</span></p></td> <td> <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the sequence doesn't contain any B-pictures, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> -otherwize</td> +otherwise</td> </tr> <tr> <td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.fps-n-ext"></a>fps_n_ext</code></em>;</span></p></td> diff --git a/docs/libs/html/gst-plugins-bad-libs.devhelp2 b/docs/libs/html/gst-plugins-bad-libs.devhelp2 index 707269b6..891a2693 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#idp9618704"/> + <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp9348160"/> <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#idp12143472"/> - <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12155728"/> - <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12160224"/> + <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12748560"/> + <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12760816"/> + <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12765312"/> <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#idp8041232"/> + <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp12477888"/> <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 06dbc5a7..db9324ce 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 (0.11.93) + for GStreamer Bad Library 1.0 (0.11.94) <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.in b/docs/plugins/Makefile.in index c582e719..9ebb5379 100644 --- a/docs/plugins/Makefile.in +++ b/docs/plugins/Makefile.in @@ -333,6 +333,8 @@ 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@ @@ -340,6 +342,8 @@ 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@ @@ -354,7 +358,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -382,6 +385,10 @@ 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@ @@ -508,6 +515,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -1500,8 +1508,7 @@ install-data-local: $(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \ $(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \ fi; \ - (which gtkdoc-rebase >/dev/null && \ - gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \ + $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \ fi) uninstall-local: if test -d $(DESTDIR)$(TARGET_DIR); then \ diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args index 7455423c..55d0257e 100644 --- a/docs/plugins/gst-plugins-bad-plugins.args +++ b/docs/plugins/gst-plugins-bad-plugins.args @@ -39,6 +39,16 @@ </ARG> <ARG> +<NAME>GstPitch::output-rate</NAME> +<TYPE>gfloat</TYPE> +<RANGE>[0.1,10]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Output Rate</NICK> +<BLURB>Output rate on downstream segment events.</BLURB> +<DEFAULT>1</DEFAULT> +</ARG> + +<ARG> <NAME>GstXvidEnc::averaging-period</NAME> <TYPE>gint</TYPE> <RANGE>[-1,100]</RANGE> @@ -1335,7 +1345,7 @@ <FLAGS>rw</FLAGS> <NICK>Version</NICK> <BLURB>Version of the GStreamer Data Protocol.</BLURB> -<DEFAULT>GDP Version 1.0</DEFAULT> +<DEFAULT>GST_DP_VERSION_1_0</DEFAULT> </ARG> <ARG> @@ -1789,6 +1799,16 @@ </ARG> <ARG> +<NAME>GstDvbSrc::dvb-buffer-size</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>dvb-buffer-size</NICK> +<BLURB>The kernel buffer size used by the DVB api.</BLURB> +<DEFAULT>1925120</DEFAULT> +</ARG> + +<ARG> <NAME>GstRfbSrc::host</NAME> <TYPE>gchar*</TYPE> <RANGE></RANGE> @@ -19120,7 +19140,7 @@ <FLAGS>rw</FLAGS> <NICK>Format</NICK> <BLURB>Encoding profile format.</BLURB> -<DEFAULT>Generic MPEG-1</DEFAULT> +<DEFAULT>DVD MPEG-2</DEFAULT> </ARG> <ARG> @@ -22434,6 +22454,16 @@ </ARG> <ARG> +<NAME>MpegTsMux::alignment</NAME> +<TYPE>gint</TYPE> +<RANGE>>= G_MAXULONG</RANGE> +<FLAGS>rw</FLAGS> +<NICK>packet alignment</NICK> +<BLURB>Number of packets per buffer (padded with dummy packets on EOS) (-1 = auto, 0 = all available packets).</BLURB> +<DEFAULT>-1</DEFAULT> +</ARG> + +<ARG> <NAME>GstApExSink::host</NAME> <TYPE>gchar*</TYPE> <RANGE></RANGE> @@ -28360,7 +28390,7 @@ <FLAGS>rw</FLAGS> <NICK>inter_wavelet</NICK> <BLURB>inter_wavelet.</BLURB> -<DEFAULT>desl_dubuc_9_7</DEFAULT> +<DEFAULT>desl-dubuc-9-7</DEFAULT> </ARG> <ARG> @@ -28380,7 +28410,7 @@ <FLAGS>rw</FLAGS> <NICK>intra_wavelet</NICK> <BLURB>intra_wavelet.</BLURB> -<DEFAULT>desl_dubuc_9_7</DEFAULT> +<DEFAULT>desl-dubuc-9-7</DEFAULT> </ARG> <ARG> @@ -28700,7 +28730,7 @@ <FLAGS>rw</FLAGS> <NICK>rate_control</NICK> <BLURB>rate_control.</BLURB> -<DEFAULT>constant_quality</DEFAULT> +<DEFAULT>constant-quality</DEFAULT> </ARG> <ARG> @@ -45850,7 +45880,17 @@ <FLAGS>rw</FLAGS> <NICK>Post Processing Flags</NICK> <BLURB>Flags to control post processing.</BLURB> -<DEFAULT>Deblock|Demacroblock</DEFAULT> +<DEFAULT>Deblock|Demacroblock|Multi-frame quality enhancement</DEFAULT> +</ARG> + +<ARG> +<NAME>GstVP8Dec::threads</NAME> +<TYPE>guint</TYPE> +<RANGE>[1,16]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Max Threads</NICK> +<BLURB>Maximum number of decoding threads.</BLURB> +<DEFAULT>1</DEFAULT> </ARG> <ARG> @@ -46135,7 +46175,7 @@ <ARG> <NAME>GstPhotography::flash-mode</NAME> -<TYPE>GstFlashMode</TYPE> +<TYPE>GstPhotographyFlashMode</TYPE> <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Flash mode property</NICK> @@ -46145,7 +46185,7 @@ <ARG> <NAME>GstPhotography::flicker-mode</NAME> -<TYPE>GstFlickerReductionMode</TYPE> +<TYPE>GstPhotographyFlickerReductionMode</TYPE> <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Flicker reduction mode property</NICK> @@ -46155,7 +46195,7 @@ <ARG> <NAME>GstPhotography::focus-mode</NAME> -<TYPE>GstFocusMode</TYPE> +<TYPE>GstPhotographyFocusMode</TYPE> <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Focus mode property</NICK> @@ -46185,7 +46225,7 @@ <ARG> <NAME>GstPhotography::scene-mode</NAME> -<TYPE>GstSceneMode</TYPE> +<TYPE>GstPhotographySceneMode</TYPE> <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>Scene mode property</NICK> @@ -46195,7 +46235,7 @@ <ARG> <NAME>GstPhotography::white-balance-mode</NAME> -<TYPE>GstWhiteBalanceMode</TYPE> +<TYPE>GstPhotographyWhiteBalanceMode</TYPE> <RANGE></RANGE> <FLAGS>rw</FLAGS> <NICK>White balance mode property</NICK> @@ -46234,6 +46274,86 @@ </ARG> <ARG> +<NAME>GstPhotography::analog-gain</NAME> +<TYPE>gfloat</TYPE> +<RANGE>>= 1</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Analog gain applied to the sensor</NICK> +<BLURB>Analog gain applied to the sensor.</BLURB> +<DEFAULT>1</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::color-temperature</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Color temperature in Kelvin units</NICK> +<BLURB>Color temperature in Kelvin units for manual white balance.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::color-tone-mode</NAME> +<TYPE>GstPhotographyColorToneMode</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Color tone mode property</NICK> +<BLURB>Color tone setting changes color shading in the photo.</BLURB> +<DEFAULT>GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::exposure-time</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Exposure time in milliseconds</NICK> +<BLURB>Exposure time defines how long the shutter will stay open (0 = auto).</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::lens-focus</NAME> +<TYPE>gfloat</TYPE> +<RANGE>>= 0</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Manual lens focus</NICK> +<BLURB>Focus point in diopter units.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::max-exposure-time</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Maximum exposure time</NICK> +<BLURB>Maximum exposure time for automatic exposure mode.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::min-exposure-time</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Minimum exposure time</NICK> +<BLURB>Minimum exposure time for automatic exposure mode.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPhotography::white-point</NAME> +<TYPE>GValueArray*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>White point</NICK> +<BLURB>Describe color white as raw values.</BLURB> +<DEFAULT></DEFAULT> +</ARG> + +<ARG> <NAME>GstWaterRipple::amplitude</NAME> <TYPE>gdouble</TYPE> <RANGE></RANGE> @@ -47196,7 +47316,7 @@ <ARG> <NAME>GstCvSobel::x-order</NAME> <TYPE>gint</TYPE> -<RANGE>>= -1</RANGE> +<RANGE>>= G_MAXULONG</RANGE> <FLAGS>rw</FLAGS> <NICK>x order</NICK> <BLURB>Order of the derivative x.</BLURB> @@ -47206,7 +47326,7 @@ <ARG> <NAME>GstCvSobel::y-order</NAME> <TYPE>gint</TYPE> -<RANGE>>= -1</RANGE> +<RANGE>>= G_MAXULONG</RANGE> <FLAGS>rw</FLAGS> <NICK>y order</NICK> <BLURB>Order of the derivative y.</BLURB> @@ -47494,6 +47614,16 @@ </ARG> <ARG> +<NAME>GstDVBSubOverlay::force-end</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Force End</NICK> +<BLURB>Assume PES-aligned subtitles and force end-of-display.</BLURB> +<DEFAULT>FALSE</DEFAULT> +</ARG> + +<ARG> <NAME>GstRsvgOverlay::data</NAME> <TYPE>gchar*</TYPE> <RANGE></RANGE> @@ -48410,7 +48540,7 @@ <FLAGS>rw</FLAGS> <NICK>text</NICK> <BLURB>Text to be display.</BLURB> -<DEFAULT>""</DEFAULT> +<DEFAULT>"Opencv Text Overlay"</DEFAULT> </ARG> <ARG> @@ -58493,3 +58623,463 @@ <DEFAULT>FALSE</DEFAULT> </ARG> +<ARG> +<NAME>GstInterVideoSrc::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstInterVideoSink::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstInterSubSrc::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstInterSubSink::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstInterAudioSrc::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstInterAudioSink::channel</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Channel</NICK> +<BLURB>Channel name to match inter src and sink elements.</BLURB> +<DEFAULT>"default"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstWaylandSink::wayland-display</NAME> +<TYPE>gpointer</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Wayland Display</NICK> +<BLURB>Wayland Display handle created by the application .</BLURB> +<DEFAULT></DEFAULT> +</ARG> + +<ARG> +<NAME>GstPyramidSegment::level</NAME> +<TYPE>gint</TYPE> +<RANGE>[0,4]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Level</NICK> +<BLURB>Maximum level of the pyramid segmentation.</BLURB> +<DEFAULT>4</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPyramidSegment::silent</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Silent</NICK> +<BLURB>Produce verbose output ?.</BLURB> +<DEFAULT>FALSE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPyramidSegment::threshold1</NAME> +<TYPE>gdouble</TYPE> +<RANGE>[0,1000]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Threshold1</NICK> +<BLURB>Error threshold for establishing links.</BLURB> +<DEFAULT>50</DEFAULT> +</ARG> + +<ARG> +<NAME>GstPyramidSegment::threshold2</NAME> +<TYPE>gdouble</TYPE> +<RANGE>[0,1000]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Threshold2</NICK> +<BLURB>Error threshold for segment clustering.</BLURB> +<DEFAULT>60</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::calculatemotion</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Calculate Motion</NICK> +<BLURB>If needs calculate motion on frame you need this property setting true otherwise false.</BLURB> +<DEFAULT>TRUE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::cellscolor</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Color of Motion Cells</NICK> +<BLURB>The color of motion cells separated with ",".</BLURB> +<DEFAULT>"255,255,0"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::datafile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>DataFile</NICK> +<BLURB>Location of motioncells data file (empty string means no saving).</BLURB> +<DEFAULT>NULL</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::datafileextension</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>DataFile Extension</NICK> +<BLURB>Extension of datafile.</BLURB> +<DEFAULT>"vamc"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::display</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Display</NICK> +<BLURB>Motion Cells visible or not on Current Frame.</BLURB> +<DEFAULT>FALSE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::gap</NAME> +<TYPE>gint</TYPE> +<RANGE>[1,60]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Gap is time in second, elapsed time from last motion timestamp. </NICK> +<BLURB>If elapsed time minus form last motion timestamp is greater or equal than gap then we post motion finished bus message. .</BLURB> +<DEFAULT>5</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::gridx</NAME> +<TYPE>gint</TYPE> +<RANGE>[8,32]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Number of Horizontal Grids</NICK> +<BLURB>You can give number of horizontal grid cells.</BLURB> +<DEFAULT>10</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::gridy</NAME> +<TYPE>gint</TYPE> +<RANGE>[8,32]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Number of Vertical Grids</NICK> +<BLURB>You can give number of vertical grid cells.</BLURB> +<DEFAULT>10</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::minimummotionframes</NAME> +<TYPE>gint</TYPE> +<RANGE>[1,60]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>MINIMUN MOTION FRAMES</NICK> +<BLURB>Define the minimum number of motion frames that trigger a motion event.</BLURB> +<DEFAULT>1</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::motioncellsidx</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Motion Cells Of Interest(MOCI)</NICK> +<BLURB>The line and column idx separated with ":", describe a cell. Cells separated with ",".</BLURB> +<DEFAULT>NULL</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::motioncellthickness</NAME> +<TYPE>gint</TYPE> +<RANGE>[G_MAXULONG,5]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Motion Cell Thickness</NICK> +<BLURB>Motion Cell Border Thickness, if it's -1 then motion cell will be fill.</BLURB> +<DEFAULT>1</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::motionmaskcellspos</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Motion Mask with Cells Position</NICK> +<BLURB>The line and column idx separated with ":" what cells want we mask-out, describe a cell. Cells separated with ",".</BLURB> +<DEFAULT>NULL</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::motionmaskcoords</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Motion Mask with Coordinates</NICK> +<BLURB>The upper left x, y and lower right x, y coordinates separated with ":", describe a region. Regions separated with ",".</BLURB> +<DEFAULT>NULL</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::postallmotion</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Post All Motion</NICK> +<BLURB>Element post bus msg for every motion frame or just motion start and motion stop.</BLURB> +<DEFAULT>FALSE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::postnomotion</NAME> +<TYPE>gint</TYPE> +<RANGE>[0,180]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>POSTNOMOTION</NICK> +<BLURB>If non 0 post a no_motion event is posted on the bus if no motion is detected for N seconds.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::sensitivity</NAME> +<TYPE>gdouble</TYPE> +<RANGE>[0,1]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Motion Sensitivity</NICK> +<BLURB>You can tunning the element motion sensitivity.</BLURB> +<DEFAULT>0.5</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::threshold</NAME> +<TYPE>gdouble</TYPE> +<RANGE>[0,1]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Lower bound of motion cells number</NICK> +<BLURB>Threshold value for motion, when motion cells number greater sum cells * threshold, we show motion.</BLURB> +<DEFAULT>0.01</DEFAULT> +</ARG> + +<ARG> +<NAME>GstMotioncells::usealpha</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Use alpha</NICK> +<BLURB>Use or not alpha blending on frames with motion cells.</BLURB> +<DEFAULT>TRUE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::display</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Display</NICK> +<BLURB>Sets whether the detected faces should be highlighted in the output.</BLURB> +<DEFAULT>TRUE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::eyes-profile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Eyes profile</NICK> +<BLURB>Location of Haar cascade file to use for eye-pair detection.</BLURB> +<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_small.xml"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::flags</NAME> +<TYPE>GstOpencvFaceDetectFlags</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Flags</NICK> +<BLURB>Flags to cvHaarDetectObjects.</BLURB> +<DEFAULT></DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::min-neighbors</NAME> +<TYPE>gint</TYPE> +<RANGE>>= 0</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Mininum neighbors</NICK> +<BLURB>Minimum number (minus 1) of neighbor rectangles that makes up an object.</BLURB> +<DEFAULT>3</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::min-size-height</NAME> +<TYPE>gint</TYPE> +<RANGE>>= 0</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Minimum face height</NICK> +<BLURB>Minimum area height to be recognized as a face.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::min-size-width</NAME> +<TYPE>gint</TYPE> +<RANGE>>= 0</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Minimum face width</NICK> +<BLURB>Minimum area width to be recognized as a face.</BLURB> +<DEFAULT>0</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::mouth-profile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Mouth profile</NICK> +<BLURB>Location of Haar cascade file to use for mouth detection.</BLURB> +<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_mouth.xml"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::nose-profile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Nose profile</NICK> +<BLURB>Location of Haar cascade file to use for nose detection.</BLURB> +<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_nose.xml"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::profile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Face profile</NICK> +<BLURB>Location of Haar cascade file to use for face detection.</BLURB> +<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceDetect::scale-factor</NAME> +<TYPE>gdouble</TYPE> +<RANGE>[1.1,10]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Scale factor</NICK> +<BLURB>Factor by which the frame is scaled after each object scan.</BLURB> +<DEFAULT>1.1</DEFAULT> +</ARG> + +<ARG> +<NAME>GstFaceBlur::profile</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Profile</NICK> +<BLURB>Location of Haar cascade file to use for face blurion.</BLURB> +<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT> +</ARG> + +<ARG> +<NAME>GstEdgeDetect::aperture</NAME> +<TYPE>gint</TYPE> +<RANGE>[3,7]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Aperture</NICK> +<BLURB>Aperture size for Sobel operator (Must be either 3, 5 or 7.</BLURB> +<DEFAULT>3</DEFAULT> +</ARG> + +<ARG> +<NAME>GstEdgeDetect::mask</NAME> +<TYPE>gboolean</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Mask</NICK> +<BLURB>Sets whether the detected edges should be used as a mask on the original input or not.</BLURB> +<DEFAULT>TRUE</DEFAULT> +</ARG> + +<ARG> +<NAME>GstEdgeDetect::threshold1</NAME> +<TYPE>gint</TYPE> +<RANGE>[0,1000]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Threshold1</NICK> +<BLURB>Threshold value for canny edge detection.</BLURB> +<DEFAULT>50</DEFAULT> +</ARG> + +<ARG> +<NAME>GstEdgeDetect::threshold2</NAME> +<TYPE>gint</TYPE> +<RANGE>[0,1000]</RANGE> +<FLAGS>rw</FLAGS> +<NICK>Threshold2</NICK> +<BLURB>Second threshold value for canny edge detection.</BLURB> +<DEFAULT>150</DEFAULT> +</ARG> + +<ARG> +<NAME>GstChromaprint::duration</NAME> +<TYPE>guint</TYPE> +<RANGE></RANGE> +<FLAGS>rw</FLAGS> +<NICK>Duration limit</NICK> +<BLURB>Number of seconds of audio to use for fingerprinting.</BLURB> +<DEFAULT>120</DEFAULT> +</ARG> + +<ARG> +<NAME>GstChromaprint::fingerprint</NAME> +<TYPE>gchar*</TYPE> +<RANGE></RANGE> +<FLAGS>r</FLAGS> +<NICK>Resulting fingerprint</NICK> +<BLURB>Resulting fingerprint.</BLURB> +<DEFAULT>NULL</DEFAULT> +</ARG> + diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy index af5eacff..8428d41c 100644 --- a/docs/plugins/gst-plugins-bad-plugins.hierarchy +++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy @@ -1,6 +1,8 @@ GObject GInitiallyUnowned GstObject + GstAllocator + GstDefaultAllocator GstBus GstClock GstControlBinding @@ -15,16 +17,17 @@ GObject GstDtsDec GstFaad GstGSMDec - GstOpusDec + GstMpg123AudioDec + GstSirenDec GstAudioEncoder ADPCMEnc GstCeltEnc GstFaac GstGSMEnc - GstOpusEnc + GstSirenEnc GstVoAacEnc GstVoAmrWbEnc - GstBaseAudioVisualizer + GstAudioVisualizer-BadGstAudioVisualizers GstSpaceScope GstSpectraScope GstSynaeScope @@ -36,7 +39,6 @@ GObject GstIRTSPParse GstMpeg4VParse GstMpegvParse - GstOpusParse GstBaseSink GstChecksumSink GstCurlBaseSink @@ -45,18 +47,30 @@ GObject GstCurlFtpSink GstCurlHttpSink GstCurlSmtpSink + GstInterAudioSink + GstInterSubSink + GstInterVideoSink GstRTMPSink GstShmSink + GstVideoSink + GstWaylandSink GstBaseSrc GstDTMFSrc GstDataURISrc GstFliteTestSrc + GstInterAudioSrc + GstInterSubSrc + GstInterVideoSrc GstPushSrc + GstDvbSrc GstMMS GstRTMPSrc GstShmSrc GstRTPDTMFSrc GstBaseTransform + GstAudioFilter + GstBPMDetect + GstChromaprint GstBayer2RGB GstDebugSpy GstDtmfDetect @@ -89,10 +103,20 @@ GObject GstMirror GstRotate GstSquare + GstOpencvVideoFilter + GstCvDilateErode + GstCvDilate + GstCvErode + GstCvEqualizeHist + GstCvLaplace + GstCvSmooth + GstCvSobel + GstFaceDetect GstSmooth GstSolarize GstZBar GstBin + DvbBaseBin GstAutoConvert GstAutoVideoConvert GstBaseCameraSrc @@ -102,24 +126,43 @@ GObject GstCameraBin GstSDPDemux GstViewfinderBin + RsnDvdBin GstBz2dec GstBz2enc GstChopMyData GstCompare GstDVBSubOverlay GstDVDSpu + GstEdgeDetect + GstFaceBlur + GstFestival + GstFreeze + GstGDPDepay + GstGDPPay GstGmeDec GstHLSDemux + GstInterlace + GstJifMux + GstJpegParse + GstLiveAdder + GstMimDec + GstMimEnc GstModPlug + GstMotioncells + GstMpeg2enc GstMpegPSDemux + GstMplex + GstOpencvTextOverlay GstPcapParse + GstPitch + GstPnmdec + GstPnmenc + GstPyramidSegment GstRTPBaseDepayload - GstRTPOpusDepay GstRtpDTMFDepay GstRtpVP8Depay GstRTPBasePayload GstRtpAsfPay - GstRtpOPUSPay GstRtpVP8Pay GstRTPMux GstRTPDTMFMux @@ -129,6 +172,11 @@ GObject GstSegmentClip GstAudioSegmentClip GstVideoSegmentClip + GstSpanPlc + GstSpeed + GstTagMux + GstId3Mux + GstTemplateMatch GstVideoDecoder GstSchroDec GstVP8Dec @@ -139,6 +187,7 @@ GObject MpegTSBase GstTSDemux MpegTSParse2 + MpegTsMux GstPad GstPadTemplate GstPlugin @@ -155,4 +204,5 @@ GInterface GstPhotography GstPreset GstTagSetter + GstTagXmpWriter GstURIHandler diff --git a/docs/plugins/gst-plugins-bad-plugins.interfaces b/docs/plugins/gst-plugins-bad-plugins.interfaces index 71435a8a..84248c66 100644 --- a/docs/plugins/gst-plugins-bad-plugins.interfaces +++ b/docs/plugins/gst-plugins-bad-plugins.interfaces @@ -44,6 +44,8 @@ GstRTMPSrc GstURIHandler GstSDLVideoSink GstImplementsInterface GstXOverlay GstNavigation GstSDPDemux GstChildProxy GstSchroEnc GstPreset +GstSirenEnc GstPreset +GstTagMux GstTagSetter GstVCDSrc GstURIHandler GstVP8Enc GstPreset GstTagSetter GstVP8Enc GstTagSetter GstPreset diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html index aee69575..da9a18e5 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="idp180320"></a>gst-plugins-bad Elements</h2></div></div></div> +<a name="idp4163440"></a>gst-plugins-bad Elements</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-aiffparse.html">aiffparse</a></span><span class="refpurpose"> — Parse a .aiff file into raw audio</span> diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html index 2ca048da..17fae669 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="idp95744"></a>gst-plugins-bad Plugins</h2></div></div></div> +<a name="idp95632"></a>gst-plugins-bad Plugins</h2></div></div></div> <div class="toc"><dl> <dt> <span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-aiff.html">aiff</a></span><span class="refpurpose"> — <a name="plugin-aiff"></a>Create and parse Audio Interchange File Format (AIFF) files</span> diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html index 6a2c020c..abf43587 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="idp5222192"></a>gst-plugins-bad Interfaces</h2></div></div></div> +<a name="idp5223952"></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-aiffmux.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html index e694ce5e..a2f95d7d 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html @@ -48,7 +48,7 @@ Format an audio stream into the Audio Interchange File Format <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idm5328"></a><h3>Element Information</h3> +<a name="idp9042592"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -71,7 +71,7 @@ Format an audio stream into the Audio Interchange File Format </div> <hr> <div class="refsect2"> -<a name="idp2882240"></a><h3>Element Pads</h3> +<a name="idp6205328"></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-aiffparse.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html index 2f828aa9..6cf45434 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html @@ -45,7 +45,7 @@ <p> </p> <div class="refsect2"> -<a name="idp2839760"></a><h3>Example launch line</h3> +<a name="idp2432752"></a><h3>Example launch line</h3> <p> Parse a .aiff file into raw or compressed audio. </p> @@ -76,7 +76,7 @@ Stream data from a network url. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp2837072"></a><h3>Element Information</h3> +<a name="idm32416"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -99,7 +99,7 @@ Stream data from a network url. </div> <hr> <div class="refsect2"> -<a name="idp8518944"></a><h3>Element Pads</h3> +<a name="idp8021392"></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-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html index 421fc279..30c93766 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="idp2829696"></a><h3>Element Information</h3> +<a name="idp8424192"></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="idp9032096"></a><h3>Element Pads</h3> +<a name="idp6630304"></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 11cb0a09..1ec5cf5d 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="idp8989648"></a><h3>Element Information</h3> +<a name="idp7315056"></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="idp9554912"></a><h3>Element Pads</h3> +<a name="idp8841344"></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 dc80c48f..72245726 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="idp8525232"></a><h3>Element Information</h3> +<a name="idp2590624"></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="idp8434096"></a><h3>Element Pads</h3> +<a name="idp6640816"></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 36405ad0..7af30850 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="idp8106800"></a><h3>Example launch line</h3> +<a name="idp7756416"></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="idp9238224"></a><h3>Element Information</h3> +<a name="idp9017600"></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="idp6053072"></a><h3>Element Pads</h3> +<a name="idp5773584"></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-celtdec.html b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html index f70cd39b..898fff22 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="idp6823200"></a><h3>Element Information</h3> +<a name="idp8597360"></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="idp7058896"></a><h3>Element Pads</h3> +<a name="idp9503808"></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 fceffcbd..edf7732e 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="idp5670784"></a><h3>Element Information</h3> +<a name="idp8244960"></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="idp5678192"></a><h3>Element Pads</h3> +<a name="idp8252368"></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 cad36bfd..207b5bb0 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="idp6233824"></a><h3>Example launch line</h3> +<a name="idp6787520"></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="idp7745728"></a><h3>Element Information</h3> +<a name="idp6219936"></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="idp8349200"></a><h3>Element Pads</h3> +<a name="idp6800928"></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 45a14e75..ec30901e 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="idp8856160"></a><h3>Element Information</h3> +<a name="idp6333184"></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="idp9475024"></a><h3>Element Pads</h3> +<a name="idp10266592"></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 cf1393b6..c74b587e 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="idp5402224"></a><h3>Example launch line</h3> +<a name="idp8132528"></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="idp8594816"></a><h3>Element Information</h3> +<a name="idp7956752"></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="idp5968336"></a><h3>Element Pads</h3> +<a name="idp9517664"></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 3a16dff0..9795e573 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10187328"></a><h3>Element Information</h3> +<a name="idp10076688"></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="idp6379600"></a><h3>Element Pads</h3> +<a name="idp7368880"></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 87e6d450..458012e9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7384896"></a><h3>Element Information</h3> +<a name="idp8933888"></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="idp6143184"></a><h3>Element Pads</h3> +<a name="idp6523584"></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 831af941..8d736010 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10307792"></a><h3>Element Information</h3> +<a name="idp6716272"></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="idp9514848"></a><h3>Element Pads</h3> +<a name="idp7974000"></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 ef998799..142f2817 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html @@ -53,7 +53,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8492880"></a><h3>Element Information</h3> +<a name="idp8532496"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -76,7 +76,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp7770336"></a><h3>Element Pads</h3> +<a name="idp7759776"></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 fd79cc67..41614c61 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html @@ -57,7 +57,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp2985344"></a><h3>Element Information</h3> +<a name="idp7339296"></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="idp9014304"></a><h3>Element Pads</h3> +<a name="idp9515440"></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 2d4a9786..155e2a6f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html @@ -55,7 +55,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10101808"></a><h3>Element Information</h3> +<a name="idp6124432"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -78,7 +78,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp2988560"></a><h3>Element Pads</h3> +<a name="idp9485824"></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 5bd8c3d0..bc97d5ed 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="idp7313360"></a><h3>Example launch line</h3> +<a name="idp7265264"></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="idp10104336"></a><h3>Element Information</h3> +<a name="idp5536608"></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="idp9922496"></a><h3>Element Pads</h3> +<a name="idp5544128"></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-dccpclientsink.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html index 813e4117..57862bec 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html @@ -71,7 +71,7 @@ TCP and UDP. <p> </p> <div class="refsect2"> -<a name="idp10818016"></a><h3>Example pipeline</h3> +<a name="idp10625616"></a><h3>Example pipeline</h3> <p> </p> <div class="informalexample"> @@ -111,7 +111,7 @@ Run the server pipeline first than the client pipeline. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10822640"></a><h3>Element Information</h3> +<a name="idp10630192"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -134,7 +134,7 @@ Run the server pipeline first than the client pipeline. </div> <hr> <div class="refsect2"> -<a name="idp10830048"></a><h3>Element Pads</h3> +<a name="idp10637600"></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-dccpclientsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html index c2852871..97e8b73c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html @@ -72,7 +72,7 @@ TCP and UDP. <p> </p> <div class="refsect2"> -<a name="idp9953888"></a><h3>Example pipeline</h3> +<a name="idp10967904"></a><h3>Example pipeline</h3> <p> </p> <div class="informalexample"> @@ -113,7 +113,7 @@ to connect to the same server (see wait-connections property at dccpserversink). <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9958528"></a><h3>Element Information</h3> +<a name="idp10972496"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -136,7 +136,7 @@ to connect to the same server (see wait-connections property at dccpserversink). </div> <hr> <div class="refsect2"> -<a name="idp11044688"></a><h3>Element Pads</h3> +<a name="idp10856160"></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-dccpserversink.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html index 269be4ae..5c0f320a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html @@ -71,7 +71,7 @@ TCP and UDP. <p> </p> <div class="refsect2"> -<a name="idp10852864"></a><h3>Example pipeline</h3> +<a name="idp5933632"></a><h3>Example pipeline</h3> <p> </p> <div class="informalexample"> @@ -112,7 +112,7 @@ to connect to the same server (see wait-connections property at dccpserversink). <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10857504"></a><h3>Element Information</h3> +<a name="idp5938272"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -135,7 +135,7 @@ to connect to the same server (see wait-connections property at dccpserversink). </div> <hr> <div class="refsect2"> -<a name="idp10864912"></a><h3>Element Pads</h3> +<a name="idp5945680"></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-dccpserversrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html index e523d331..35b31c43 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html @@ -72,7 +72,7 @@ TCP and UDP. <p> </p> <div class="refsect2"> -<a name="idp10323360"></a><h3>Example pipeline</h3> +<a name="idp6902352"></a><h3>Example pipeline</h3> <p> </p> <div class="informalexample"> @@ -112,7 +112,7 @@ Run the server pipeline first than the client pipeline. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10327984"></a><h3>Element Information</h3> +<a name="idp6906976"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -135,7 +135,7 @@ Run the server pipeline first than the client pipeline. </div> <hr> <div class="refsect2"> -<a name="idp9084256"></a><h3>Element Pads</h3> +<a name="idp10760768"></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-dfbvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html index 0a9b15b8..aeefa09b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html @@ -67,7 +67,7 @@ GstDfbVideoSink implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8833824"></a><h3>Element Information</h3> +<a name="idp10779952"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -90,7 +90,7 @@ GstDfbVideoSink implements </div> <hr> <div class="refsect2"> -<a name="idp8841280"></a><h3>Element Pads</h3> +<a name="idp10787408"></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 0a84f15c..543f8573 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="idp6315568"></a><h3>Element Information</h3> +<a name="idp8327520"></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="idp5484464"></a><h3>Element Pads</h3> +<a name="idp10993056"></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 fdb19cd1..c3404e5a 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="idp2860624"></a><h3>Example launch line</h3> +<a name="idp2520512"></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="idp9241504"></a><h3>Element Information</h3> +<a name="idp6737488"></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="idp11010224"></a><h3>Element Pads</h3> +<a name="idp7798544"></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-directdrawsink.html b/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html index f4a67b5e..6796c2f9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp5578000"></a><h3>Element Information</h3> +<a name="idp6837808"></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="idp7595952"></a><h3>Element Pads</h3> +<a name="idp8198960"></a><h3>Element Pads</h3> </div> </div> <p> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html index 33356921..bfcde688 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="idp5282976"></a><h3>Example launch line</h3> +<a name="idp7058192"></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="idp7389040"></a><h3>Element Information</h3> +<a name="idp6875920"></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="idp7545072"></a><h3>Element Pads</h3> +<a name="idp11183408"></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 2e7edc11..3e7bf792 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="idp7706656"></a><h3>Element Information</h3> +<a name="idp7226832"></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="idp11601232"></a><h3>Element Pads</h3> +<a name="idp11636272"></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 1a835be4..7ee7305c 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="idp11224640"></a><h3>Element Information</h3> +<a name="idp11460400"></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="idp11232048"></a><h3>Element Pads</h3> +<a name="idp11467808"></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 6b412f93..bc36cb60 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="idp5376000"></a><h3>Element Information</h3> +<a name="idp6510528"></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="idp11099120"></a><h3>Element Pads</h3> +<a name="idp7058944"></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 a946bf71..a40bcfd5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html @@ -39,7 +39,7 @@ </tr></table></div> <div class="refsynopsisdiv"> <a name="gst-plugins-bad-plugins-dvbsrc.synopsis"></a><h2>Synopsis</h2> -<pre class="synopsis"> <a class="link" href="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc" title="GstDvbSrc">GstDvbSrc</a>; +<pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc" title="struct GstDvbSrc">GstDvbSrc</a>; </pre> </div> <div class="refsect1"> @@ -75,7 +75,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11415376"></a><h3>Element Information</h3> +<a name="idp12196064"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -98,7 +98,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp11422896"></a><h3>Element Pads</h3> +<a name="idp12203584"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -128,8 +128,50 @@ <div class="refsect1"> <a name="gst-plugins-bad-plugins-dvbsrc.details"></a><h2>Details</h2> <div class="refsect2"> -<a name="GstDvbSrc"></a><h3>GstDvbSrc</h3> -<pre class="programlisting">typedef struct _GstDvbSrc GstDvbSrc;</pre> +<a name="GstDvbSrc"></a><h3>struct GstDvbSrc</h3> +<pre class="programlisting">struct GstDvbSrc { + GstPushSrc element; + GstPad *srcpad; + + GMutex tune_mutex; + gboolean need_tune; + + int adapter_type; + + int adapter_number; /* the device directory with the sub-devices */ + int frontend_number; + + int fd_frontend; + int fd_dvr; + int fd_filters[MAX_FILTERS]; + GstPoll *poll; + GstPollFD poll_fd_dvr; + + guint16 pids[MAX_FILTERS]; + unsigned int freq; + unsigned int sym_rate; + int tone; + int diseqc_src; + gboolean send_diseqc; + + int bandwidth; + int code_rate_hp; + int code_rate_lp; + int modulation; + int guard_interval; + int transmission_mode; + int hierarchy_information; + int inversion; + guint64 timeout; + + GstDvbSrcPol pol; + guint stats_interval; + guint stats_counter; + gboolean need_unlock; + + guint dvb_buffer_size; +}; +</pre> <p> </p> </div> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html index 0d6f4c13..d8fab1aa 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="idp11809936"></a><h3>Example launch line</h3> +<a name="idp12001248"></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="idp11807760"></a><h3>Element Information</h3> +<a name="idp11999072"></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="idp10147840"></a><h3>Element Pads</h3> +<a name="idp8128208"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -119,7 +119,7 @@ DVD sub picture overlay element. </tr> <tr> <td><p><span class="term">details</span></p></td> -<td>video/x-dvd-subpicture</td> +<td>subpicture/x-dvd</td> </tr> <tr> <td><p><span class="term"></span></p></td> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html index 0f19ee21..d0a32f9d 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html @@ -44,7 +44,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10940736"></a><h3>Element Information</h3> +<a name="idp11550640"></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="idp6591344"></a><h3>Element Pads</h3> +<a name="idp6416064"></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-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html index 71038ac7..852ccd28 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="idp9396624"></a><h3>Example launch line</h3> +<a name="idp8309072"></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="idp8932464"></a><h3>Element Information</h3> +<a name="idp5371744"></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="idp11280224"></a><h3>Element Pads</h3> +<a name="idp11347856"></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 34fb4b0c..949e8bfa 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html @@ -81,7 +81,7 @@ GstFaac implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11501600"></a><h3>Element Information</h3> +<a name="idp11324736"></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="idp11509008"></a><h3>Element Pads</h3> +<a name="idp11920336"></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 bcebd902..7749ef48 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="idp9439936"></a><h3>Element Information</h3> +<a name="idp8788672"></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="idp8424256"></a><h3>Element Pads</h3> +<a name="idp5451968"></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 9d6f34f5..c995fd22 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="idp12116352"></a><h3>Element Information</h3> +<a name="idp10377776"></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="idp5590592"></a><h3>Element Pads</h3> +<a name="idp8951616"></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 d721c20c..16c3f47c 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="idp11520160"></a><h3>Element Information</h3> +<a name="idp11439888"></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="idp5610512"></a><h3>Element Pads</h3> +<a name="idp10798496"></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 e7b8cf30..640f71d2 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html @@ -53,7 +53,7 @@ in server mode, started as </p> <p> </p> <div class="refsect2"> -<a name="idp7376432"></a><h3>Example pipeline</h3> +<a name="idp11762160"></a><h3>Example pipeline</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -71,7 +71,7 @@ in server mode, started as </p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6240512"></a><h3>Element Information</h3> +<a name="idp5971472"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -94,7 +94,7 @@ in server mode, started as </p> </div> <hr> <div class="refsect2"> -<a name="idp8800384"></a><h3>Element Pads</h3> +<a name="idp6743744"></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 cb4b2abf..6b21d445 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="idp8362800"></a><h3>Element Information</h3> +<a name="idp6122960"></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="idm17504"></a><h3>Element Pads</h3> +<a name="idp9559136"></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 46007fe1..90617b29 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="idp12498544"></a><h3>Example launch lines</h3> +<a name="idp11756224"></a><h3>Example launch lines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -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="idp12501520"></a><h3>Element Information</h3> +<a name="idp11883216"></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="idp12508928"></a><h3>Element Pads</h3> +<a name="idp11890624"></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-freeze.html b/docs/plugins/html/gst-plugins-bad-plugins-freeze.html index 667d2b9a..f0c1a59f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-freeze.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-freeze.html @@ -56,7 +56,7 @@ Makes a stream from buffers of data. <p> </p> <div class="refsect2"> -<a name="idp5907696"></a><h3>Example launch line</h3> +<a name="idp12368304"></a><h3>Example launch line</h3> <p> </p> <div class="informalexample"> @@ -78,7 +78,7 @@ Makes a stream from buffers of data. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp6909424"></a><h3>Element Information</h3> +<a name="idp6890656"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -101,7 +101,7 @@ Makes a stream from buffers of data. </div> <hr> <div class="refsect2"> -<a name="idp9991056"></a><h3>Element Pads</h3> +<a name="idp7718512"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -158,8 +158,8 @@ Makes a stream from buffers of data. GstPad *sinkpad, *srcpad; - GQueue *buffers; - GstBuffer *current; + GPtrArray *buffers; + guint current; guint max_buffers; diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html index 16b992b2..c1040c51 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="idp12024128"></a><h3>Example launch line</h3> +<a name="idp12360176"></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="idp9259088"></a><h3>Element Information</h3> +<a name="idp11874592"></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="idp6607072"></a><h3>Element Pads</h3> +<a name="idp6926800"></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-ivfparse.html b/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html index eb3e46fc..4da35751 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp11952912"></a><h3>Element Information</h3> +<a name="idp12110704"></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="idp9189616"></a><h3>Element Pads</h3> +<a name="idp6673296"></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 72f218b9..178fff32 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html @@ -59,7 +59,7 @@ among others. Jpegparse can also extract metadata (e.g. xmp). <p> </p> <div class="refsect2"> -<a name="idp3034448"></a><h3>Example launch line</h3> +<a name="idp7839088"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -79,7 +79,7 @@ HTTP and stores it in a matroska file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10792880"></a><h3>Element Information</h3> +<a name="idp5664464"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -102,7 +102,7 @@ HTTP and stores it in a matroska file. </div> <hr> <div class="refsect2"> -<a name="idp10706864"></a><h3>Element Pads</h3> +<a name="idp11569792"></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 1e949504..d3b660b3 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="idp5801264"></a><h3>Element Information</h3> +<a name="idp6192944"></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="idp12348688"></a><h3>Element Pads</h3> +<a name="idp12611152"></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-katedec.html b/docs/plugins/html/gst-plugins-bad-plugins-katedec.html index 76993dba..0c4897b5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-katedec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-katedec.html @@ -57,7 +57,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp5802928"></a><h3>Element Information</h3> +<a name="idp7525552"></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="idp8247488"></a><h3>Element Pads</h3> +<a name="idp8065040"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -127,7 +127,7 @@ </tr> <tr> <td><p><span class="term"></span></p></td> -<td> video/x-dvd-subpicture</td> +<td> subpicture/x-dvd</td> </tr> </tbody> </table></div> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html b/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html index 1200c5bb..7c1738f0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html @@ -69,7 +69,7 @@ GstKateEnc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp10902416"></a><h3>Element Information</h3> +<a name="idp7453376"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -92,7 +92,7 @@ GstKateEnc implements </div> <hr> <div class="refsect2"> -<a name="idp12073872"></a><h3>Element Pads</h3> +<a name="idp12536720"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -118,7 +118,7 @@ GstKateEnc implements </tr> <tr> <td><p><span class="term"></span></p></td> -<td> video/x-dvd-subpicture</td> +<td> subpicture/x-dvd</td> </tr> </tbody> </table></div> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html b/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html index 994a7dfd..c4905ff7 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13189408"></a><h3>Element Information</h3> +<a name="idp13210048"></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="idp11775552"></a><h3>Element Pads</h3> +<a name="idp7734608"></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-katetag.html b/docs/plugins/html/gst-plugins-bad-plugins-katetag.html index 42faf4c7..cd96635f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-katetag.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-katetag.html @@ -64,7 +64,7 @@ GstKateTag implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp7110000"></a><h3>Element Information</h3> +<a name="idp10661680"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -87,7 +87,7 @@ GstKateTag implements </div> <hr> <div class="refsect2"> -<a name="idp9817712"></a><h3>Element Pads</h3> +<a name="idp11385696"></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 c47dcd39..f4c0d701 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html @@ -64,7 +64,7 @@ Last reviewed on 2008-02-10 (0.10.11) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12826656"></a><h3>Element Information</h3> +<a name="idp11071952"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -87,7 +87,7 @@ Last reviewed on 2008-02-10 (0.10.11) </div> <hr> <div class="refsect2"> -<a name="idp9026016"></a><h3>Element Pads</h3> +<a name="idp8160752"></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 a50b0902..a45a5495 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="idp7617392"></a><h3>Element Information</h3> +<a name="idp5270400"></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="idp12058384"></a><h3>Element Pads</h3> +<a name="idp9286000"></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 6d47b426..6e1234f4 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13106560"></a><h3>Element Information</h3> +<a name="idp13148992"></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="idp9528928"></a><h3>Element Pads</h3> +<a name="idp6263552"></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 8f7ded86..fb5a7d94 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html @@ -53,7 +53,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13195040"></a><h3>Element Information</h3> +<a name="idp13176608"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -76,7 +76,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp8042176"></a><h3>Element Pads</h3> +<a name="idp11618608"></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 4b7b1f5b..266e34aa 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="idp8393712"></a><h3>Element Information</h3> +<a name="idp9326800"></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="idp13036976"></a><h3>Element Pads</h3> +<a name="idp13320112"></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 de21140e..d8d5effc 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="idp13248064"></a><h3>Element Information</h3> +<a name="idp13071536"></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="idp13636368"></a><h3>Element Pads</h3> +<a name="idp13078992"></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 fa3130f3..f8d82a70 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html @@ -94,7 +94,7 @@ GstMpeg2enc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13547984"></a><h3>Element Information</h3> +<a name="idp14314960"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -118,7 +118,7 @@ Ronald Bultje <rbultje@ronald.bitfreak.net></td> </div> <hr> <div class="refsect2"> -<a name="idp13555392"></a><h3>Element Pads</h3> +<a name="idp14322368"></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-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html index 23451afb..8dd41fc5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html @@ -59,7 +59,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp12900480"></a><h3>Element Information</h3> +<a name="idp13167136"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -84,7 +84,7 @@ Mark Nauwelaerts <mnauw@users.sourceforge.net></td> </div> <hr> <div class="refsect2"> -<a name="idp6275440"></a><h3>Element Pads</h3> +<a name="idp6517568"></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-mxfdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html index e830c896..c93cf6fd 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html @@ -58,7 +58,7 @@ mxfdemux demuxes an MXF file into the different contained streams. <p> </p> <div class="refsect2"> -<a name="idp8561696"></a><h3>Example launch line</h3> +<a name="idp10383872"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -76,7 +76,7 @@ mxfdemux demuxes an MXF file into the different contained streams. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp9156400"></a><h3>Element Information</h3> +<a name="idp5962464"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -99,7 +99,7 @@ mxfdemux demuxes an MXF file into the different contained streams. </div> <hr> <div class="refsect2"> -<a name="idp13501376"></a><h3>Element Pads</h3> +<a name="idp13024752"></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-mxfmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html index 63282757..942a83f4 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html @@ -48,7 +48,7 @@ mxfmux muxes different streams into an MXF file. <p> </p> <div class="refsect2"> -<a name="idp14255584"></a><h3>Example launch line</h3> +<a name="idp13934992"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -66,7 +66,7 @@ mxfmux muxes different streams into an MXF file. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp14253088"></a><h3>Element Information</h3> +<a name="idp13932496"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -89,7 +89,7 @@ mxfmux muxes different streams into an MXF file. </div> <hr> <div class="refsect2"> -<a name="idp14247008"></a><h3>Element Pads</h3> +<a name="idp13926416"></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-mythtvsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html index 9d6eba6b..61b1edcd 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html @@ -67,7 +67,7 @@ GstMythtvSrc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13365808"></a><h3>Element Information</h3> +<a name="idp13391504"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -90,7 +90,7 @@ GstMythtvSrc implements </div> <hr> <div class="refsect2"> -<a name="idp13373216"></a><h3>Element Pads</h3> +<a name="idp13398912"></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-nuvdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html index d5da6294..ae4a6f8a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html @@ -52,7 +52,7 @@ This element currently only supports pull-based scheduling. <p> </p> <div class="refsect2"> -<a name="idp13944096"></a><h3>Example launch line</h3> +<a name="idp13505664"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -73,7 +73,7 @@ right decoder elements/plugins installed. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp13431056"></a><h3>Element Information</h3> +<a name="idp13504256"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -96,7 +96,7 @@ right decoder elements/plugins installed. </div> <hr> <div class="refsect2"> -<a name="idp13925568"></a><h3>Element Pads</h3> +<a name="idp13368928"></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 8262ec0f..d8670c55 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="idp15722560"></a><h3>Element Information</h3> +<a name="idp18968192"></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="idp21229872"></a><h3>Element Pads</h3> +<a name="idp21384832"></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 dcc9a0c8..d63b7895 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html @@ -76,7 +76,7 @@ should be included. <p> </p> <div class="refsect2"> -<a name="idp13930912"></a><h3>Example pipelines</h3> +<a name="idp13480208"></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="idp13933744"></a><h3>Element Information</h3> +<a name="idp13483040"></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="idp13941152"></a><h3>Element Pads</h3> +<a name="idp13490448"></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 38131ae6..eb95ef02 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="idp6354624"></a><h3>Element Information</h3> +<a name="idp10290272"></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="idp13398464"></a><h3>Element Pads</h3> +<a name="idp13377856"></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-aiff.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html index e1de198b..37b45394 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp19668208"></a><h2>Plugin Information</h2> +<a name="idp15921200"></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="idp15166784"></a><h2>Elements</h2> +<a name="idp18767712"></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-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html index 02f92cb9..42a3fe68 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="idp20019408"></a><h2>Plugin Information</h2> +<a name="idp20190480"></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="idp18344912"></a><h2>Elements</h2> +<a name="idp20621328"></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 b7b5875d..c0e65377 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="idp19078960"></a><h2>Plugin Information</h2> +<a name="idp17314240"></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="idp18017232"></a><h2>Elements</h2> +<a name="idp16196416"></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 c0b07114..7ab69a63 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="idp19021200"></a><h2>Plugin Information</h2> +<a name="idp20128560"></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="idp16067856"></a><h2>Elements</h2> +<a name="idp21639920"></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 32bab432..31299a7b 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="idp22325728"></a><h2>Plugin Information</h2> +<a name="idp16219040"></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="idp18021488"></a><h2>Elements</h2> +<a name="idp19998736"></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 ddaa0b20..94cfc12d 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="idp20007680"></a><h2>Plugin Information</h2> +<a name="idp20669056"></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="idp18973584"></a><h2>Elements</h2> +<a name="idp16226944"></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-cdaudio.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html index 57f190f7..efe33af3 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17371872"></a><h2>Plugin Information</h2> +<a name="idp20398480"></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="idp22140880"></a><h2>Elements</h2> +<a name="idp19289904"></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-cdxaparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html index a6d03b20..a7814239 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16364144"></a><h2>Plugin Information</h2> +<a name="idp23779264"></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="idp18627920"></a><h2>Elements</h2> +<a name="idp15175248"></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 3b8e869e..a0e0e87e 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="idp16892768"></a><h2>Plugin Information</h2> +<a name="idp19351344"></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="idp16884144"></a><h2>Elements</h2> +<a name="idp18872656"></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 4455884c..a965656f 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="idp18541856"></a><h2>Plugin Information</h2> +<a name="idp23338608"></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="idp16250272"></a><h2>Elements</h2> +<a name="idp17969136"></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 384999a0..b0dd8503 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="idp16276784"></a><h2>Plugin Information</h2> +<a name="idp23667264"></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="idp19483808"></a><h2>Elements</h2> +<a name="idp15756960"></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 32726505..8c7e0836 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="idp17164096"></a><h2>Plugin Information</h2> +<a name="idp16044736"></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="idp15662576"></a><h2>Elements</h2> +<a name="idp19235632"></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-dccp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html index da2b9c1c..9e921a1a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16655872"></a><h2>Plugin Information</h2> +<a name="idp20017200"></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="idp19566352"></a><h2>Elements</h2> +<a name="idp19811248"></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-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html index 9da2817d..7c69e060 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="idp19190848"></a><h2>Plugin Information</h2> +<a name="idp22709328"></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="idp19319136"></a><h2>Elements</h2> +<a name="idp19896208"></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-dfbvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html index 530a49af..9e42ced0 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20079296"></a><h2>Plugin Information</h2> +<a name="idp20308144"></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="idp19866592"></a><h2>Elements</h2> +<a name="idp21243728"></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-dirac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html index 81213fca..01317bb9 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="idp22387648"></a><h2>Plugin Information</h2> +<a name="idp19685984"></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="idp18737264"></a><h2>Elements</h2> +<a name="idp21819504"></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-directdraw.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html index 09ce8986..cedbfe34 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17951344"></a><h2>Plugin Information</h2> +<a name="idp19243696"></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="idp18455616"></a><h2>Elements</h2> +<a name="idp18313824"></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 33b06938..3219dde3 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="idp15703744"></a><h2>Plugin Information</h2> +<a name="idp20208336"></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="idp19478800"></a><h2>Elements</h2> +<a name="idp17588848"></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 3919f9a1..abfe26f4 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="idp23142192"></a><h2>Plugin Information</h2> +<a name="idp15071024"></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="idp19163440"></a><h2>Elements</h2> +<a name="idp19609344"></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 6b43ccfb..17bbc970 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="idp16710096"></a><h2>Plugin Information</h2> +<a name="idp19440896"></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="idp15679696"></a><h2>Elements</h2> +<a name="idp19319232"></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 325a8dde..008dd173 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="idp16516992"></a><h2>Plugin Information</h2> +<a name="idp18330896"></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="idp16770272"></a><h2>Elements</h2> +<a name="idp19341776"></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 22f56eac..9e6ab2fd 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="idp16943728"></a><h2>Plugin Information</h2> +<a name="idp16380896"></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="idp16516656"></a><h2>Elements</h2> +<a name="idp15787712"></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 2c9f8f3e..4b16ef44 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="idp20462688"></a><h2>Plugin Information</h2> +<a name="idp23496688"></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="idp19873824"></a><h2>Elements</h2> +<a name="idp18932208"></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-fbdevsink.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html index d546f7b2..f6a2ec59 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16116768"></a><h2>Plugin Information</h2> +<a name="idp17331600"></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="idp17005616"></a><h2>Elements</h2> +<a name="idp17991360"></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 71b035cb..0b09778d 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="idp19019888"></a><h2>Plugin Information</h2> +<a name="idp18283584"></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="idp20199872"></a><h2>Elements</h2> +<a name="idp15336768"></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-filter.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html index 65b8ca67..942650f4 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23846416"></a><h2>Plugin Information</h2> +<a name="idp19604960"></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="idp15283168"></a><h2>Elements</h2> +<a name="idp23466208"></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-freeze.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html index dd998377..0affdfa7 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23867648"></a><h2>Plugin Information</h2> +<a name="idp21124256"></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="idp19093728"></a><h2>Elements</h2> +<a name="idp18297072"></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-frei0r.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html index 1ec9ea30..973693ed 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp19525968"></a><h2>Plugin Information</h2> +<a name="idp20354064"></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="idp19371552"></a><h2>Elements</h2> +<a name="idp19692784"></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-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html index 5cff67aa..fa805f72 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="idp23250352"></a><h2>Plugin Information</h2> +<a name="idp23276832"></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="idp20591408"></a><h2>Elements</h2> +<a name="idp20098640"></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 81fe71fd..f5057045 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="idp23273456"></a><h2>Plugin Information</h2> +<a name="idp24011776"></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="idp19624512"></a><h2>Elements</h2> +<a name="idp20740464"></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 4750797d..bcf4d829 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="idp16111536"></a><h2>Plugin Information</h2> +<a name="idp21805024"></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="idp17494256"></a><h2>Elements</h2> +<a name="idp18326976"></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-ivfparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html index c4fe00c7..8e0c4407 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp19916464"></a><h2>Plugin Information</h2> +<a name="idp19689056"></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="idp20199136"></a><h2>Elements</h2> +<a name="idp21012000"></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-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html index a8fc10d5..b70a4654 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="idp23245760"></a><h2>Plugin Information</h2> +<a name="idp20336784"></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="idp17009136"></a><h2>Elements</h2> +<a name="idp18319760"></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-kate.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html index 9cfae8ad..81c236cc 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23307168"></a><h2>Plugin Information</h2> +<a name="idp24822064"></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="idp16749296"></a><h2>Elements</h2> +<a name="idp18376000"></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-ladspa.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html index 42879510..d2cec867 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16913984"></a><h2>Plugin Information</h2> +<a name="idp22556448"></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="idp16279552"></a><h2>Elements</h2> +<a name="idp23476320"></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 ad98b80c..ceff8172 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="idp19563504"></a><h2>Plugin Information</h2> +<a name="idp18500064"></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="idp17188736"></a><h2>Elements</h2> +<a name="idp17476912"></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-lv2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html index bcfcd66c..3bb6fa81 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp22781056"></a><h2>Plugin Information</h2> +<a name="idp23302448"></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="idp20551936"></a><h2>Elements</h2> +<a name="idp20543408"></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-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html index 5ad93e8e..0147ce33 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="idp23528784"></a><h2>Plugin Information</h2> +<a name="idp19283216"></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="idp15227488"></a><h2>Elements</h2> +<a name="idp24704144"></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 a6cf795e..793724b0 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="idp22872112"></a><h2>Plugin Information</h2> +<a name="idp21509120"></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="idp17671040"></a><h2>Elements</h2> +<a name="idp18791216"></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 0b59604d..27f102c3 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="idp23842800"></a><h2>Plugin Information</h2> +<a name="idp20736464"></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="idp20310752"></a><h2>Elements</h2> +<a name="idp17343056"></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 ab0a0dce..23991947 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="idp20025792"></a><h2>Plugin Information</h2> +<a name="idp17270384"></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="idp22653344"></a><h2>Elements</h2> +<a name="idp23961344"></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-mpeg4videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html index dad026ae..61614a0c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17501296"></a><h2>Plugin Information</h2> +<a name="idp16121184"></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="idp16429744"></a><h2>Elements</h2> +<a name="idp24118048"></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-mpegdemux2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html index 6573abab..e3e5ce54 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16721872"></a><h2>Plugin Information</h2> +<a name="idp22747008"></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="idp16848768"></a><h2>Elements</h2> +<a name="idp23241472"></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-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html index 5bfeefb5..b16f53fc 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23102432"></a><h2>Plugin Information</h2> +<a name="idp16018720"></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="idp17409424"></a><h2>Elements</h2> +<a name="idp21147168"></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 76aa0905..f34c6797 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="idp16614464"></a><h2>Plugin Information</h2> +<a name="idp19131376"></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="idp22694704"></a><h2>Elements</h2> +<a name="idp15910784"></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 c41edded..9a600740 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="idp18386272"></a><h2>Plugin Information</h2> +<a name="idp19758000"></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="idp24238032"></a><h2>Elements</h2> +<a name="idp19647952"></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-musepack.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html index 6e7cda07..cf71a922 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16696832"></a><h2>Plugin Information</h2> +<a name="idp18754368"></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="idp23816224"></a><h2>Elements</h2> +<a name="idp16173312"></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-musicbrainz.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html index c59a626b..136b0484 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23400608"></a><h2>Plugin Information</h2> +<a name="idp21926256"></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="idp16594320"></a><h2>Elements</h2> +<a name="idp16139264"></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-mve.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html index e1c43679..ea1fccb9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23350976"></a><h2>Plugin Information</h2> +<a name="idp24510224"></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="idp23884448"></a><h2>Elements</h2> +<a name="idp23912384"></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-mxf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html index 65bd63a5..1d01618a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18689488"></a><h2>Plugin Information</h2> +<a name="idp24036224"></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="idp24343712"></a><h2>Elements</h2> +<a name="idp23733888"></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-nas.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html index b1699af1..1909599b 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17499248"></a><h2>Plugin Information</h2> +<a name="idp23238192"></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="idp18591856"></a><h2>Elements</h2> +<a name="idp17759456"></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-neon.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html index 99197f02..d6db7ae9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15775552"></a><h2>Plugin Information</h2> +<a name="idp15954992"></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="idp19014224"></a><h2>Elements</h2> +<a name="idp16166240"></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-nsf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html index 3f17f55e..84e33e37 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp18236560"></a><h2>Plugin Information</h2> +<a name="idp19317776"></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="idp15937840"></a><h2>Elements</h2> +<a name="idp20532768"></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-nuvdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html index 06831c00..b2ea8615 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp22496192"></a><h2>Plugin Information</h2> +<a name="idp24562064"></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="idp23318064"></a><h2>Elements</h2> +<a name="idp19303504"></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 0b66a558..171d8d43 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="idp23509792"></a><h2>Plugin Information</h2> +<a name="idp18971728"></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="idp22316272"></a><h2>Elements</h2> +<a name="idp21745104"></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 e7cfaca1..534e71ee 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="idp16427792"></a><h2>Plugin Information</h2> +<a name="idp22710768"></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="idp22426912"></a><h2>Elements</h2> +<a name="idp18362640"></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 d4d2e06c..ac73043e 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="idp21282896"></a><h2>Plugin Information</h2> +<a name="idp18926256"></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="idp20091488"></a><h2>Elements</h2> +<a name="idp16204272"></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-real.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html index 2e9ead9a..20fbe9e5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17087424"></a><h2>Plugin Information</h2> +<a name="idp24132096"></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="idp22656304"></a><h2>Elements</h2> +<a name="idp16008240"></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-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html index fed11526..ef28de64 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp15874192"></a><h2>Plugin Information</h2> +<a name="idp18970624"></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="idp16890928"></a><h2>Elements</h2> +<a name="idp17500064"></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-rsvg.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html index 4b61b5a9..9898710c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp24214448"></a><h2>Plugin Information</h2> +<a name="idp20656144"></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="idp15278048"></a><h2>Elements</h2> +<a name="idp17337664"></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 438a6cee..d30a6435 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="idp21036416"></a><h2>Plugin Information</h2> +<a name="idp19813504"></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="idp23088224"></a><h2>Elements</h2> +<a name="idp16182272"></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 273b4db8..cb166e19 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="idp15271952"></a><h2>Plugin Information</h2> +<a name="idp15241808"></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="idp22705248"></a><h2>Elements</h2> +<a name="idp15955728"></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 b12ab8d5..d68ab471 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="idp18052432"></a><h2>Plugin Information</h2> +<a name="idp20962336"></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="idp23474192"></a><h2>Elements</h2> +<a name="idp15315376"></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-sdl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html index 806887d2..16fb8f1e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23537968"></a><h2>Plugin Information</h2> +<a name="idp17850032"></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="idp24834512"></a><h2>Elements</h2> +<a name="idp20477744"></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-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html index 58b8802c..d6159f71 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="idp18968592"></a><h2>Plugin Information</h2> +<a name="idp20354512"></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="idp18741552"></a><h2>Elements</h2> +<a name="idp24880000"></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 54ded6f7..303d75d9 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="idp20059952"></a><h2>Plugin Information</h2> +<a name="idp18754624"></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="idp16133504"></a><h2>Elements</h2> +<a name="idp19757216"></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-sndfile.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html index 2e77d9e6..00f903ce 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20756192"></a><h2>Plugin Information</h2> +<a name="idp24129904"></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="idp18353152"></a><h2>Elements</h2> +<a name="idp19548800"></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 20dc65c9..85dab661 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="idp20304512"></a><h2>Plugin Information</h2> +<a name="idp21515200"></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="idp17399008"></a><h2>Elements</h2> +<a name="idp19315424"></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-spcdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html index ce2fc05e..b7941c6f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20141440"></a><h2>Plugin Information</h2> +<a name="idp19090272"></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="idp20074336"></a><h2>Elements</h2> +<a name="idp24205408"></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-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html index 8de4103e..0637ded0 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="idp15937152"></a><h2>Plugin Information</h2> +<a name="idp20610624"></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="idp21308464"></a><h2>Elements</h2> +<a name="idp16273776"></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-stereo.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html index 9a29e739..d047c66a 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16026848"></a><h2>Plugin Information</h2> +<a name="idp24523200"></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="idp16104624"></a><h2>Elements</h2> +<a name="idp18098384"></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-swfdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html index a907adc8..0d167faa 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16258128"></a><h2>Plugin Information</h2> +<a name="idp18226480"></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="idp22103120"></a><h2>Elements</h2> +<a name="idp17624848"></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-timidity.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html index cd488907..4656d821 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16245712"></a><h2>Plugin Information</h2> +<a name="idp15918736"></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="idp16039504"></a><h2>Elements</h2> +<a name="idp18999712"></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-tta.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html index ee0567c6..99f87d63 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp16843808"></a><h2>Plugin Information</h2> +<a name="idp20456336"></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="idp24280816"></a><h2>Elements</h2> +<a name="idp19845776"></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-vcdsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html index 0a1ef79c..4537ebef 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17496064"></a><h2>Plugin Information</h2> +<a name="idp15219136"></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="idp19015968"></a><h2>Elements</h2> +<a name="idp25575872"></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-videosignal.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html index a35fdb17..cae1b41f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20085216"></a><h2>Plugin Information</h2> +<a name="idp18789920"></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="idp18135184"></a><h2>Elements</h2> +<a name="idp22558592"></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-vmnc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html index 5d82363b..698faeca 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp22402208"></a><h2>Plugin Information</h2> +<a name="idp18152624"></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="idp16461104"></a><h2>Elements</h2> +<a name="idp20122176"></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 353f994f..61a60c09 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="idp20562432"></a><h2>Plugin Information</h2> +<a name="idp17816448"></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="idp18836640"></a><h2>Elements</h2> +<a name="idp22681136"></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-vp8.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html index de7bf59a..2f38a4dd 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp17763520"></a><h2>Plugin Information</h2> +<a name="idp20775920"></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="idp23067392"></a><h2>Elements</h2> +<a name="idp22724064"></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-wildmidi.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html index 36b96de2..9f7dbcfe 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp23182768"></a><h2>Plugin Information</h2> +<a name="idp21525408"></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="idp19675376"></a><h2>Elements</h2> +<a name="idp21803232"></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-xvid.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html index edf1cea6..d2bc1f28 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html @@ -29,7 +29,7 @@ <td valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> -<a name="idp20289872"></a><h2>Plugin Information</h2> +<a name="idp14915488"></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="idp16962352"></a><h2>Elements</h2> +<a name="idp17438480"></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-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html index c55c1117..70c79d38 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="idp18015520"></a><h2>Plugin Information</h2> +<a name="idp18043984"></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="idp16418096"></a><h2>Elements</h2> +<a name="idp20566368"></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 4b654733..1ca8d6fc 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="idp14000208"></a><h3>Element Information</h3> +<a name="idp14497280"></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="idp3027664"></a><h3>Element Pads</h3> +<a name="idp11587360"></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-rsvgdec.html b/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html index ee44fb79..99cc6e3d 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp14111776"></a><h3>Element Information</h3> +<a name="idp14165152"></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="idp6327280"></a><h3>Element Pads</h3> +<a name="idp9167136"></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-rsvgoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html index 8051cfe5..a2838ba6 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html @@ -63,7 +63,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp8873504"></a><h3>Element Information</h3> +<a name="idp11018832"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -86,7 +86,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp6531632"></a><h3>Element Pads</h3> +<a name="idp6380368"></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 08902467..333e9d7a 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="idp14357424"></a><h3>Element Information</h3> +<a name="idp14453392"></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="idp14850736"></a><h3>Element Pads</h3> +<a name="idp14460848"></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 17035816..fb9edc03 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="idp14543488"></a><h3>Element Information</h3> +<a name="idp14546816"></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="idp14550896"></a><h3>Element Pads</h3> +<a name="idp14430464"></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 b0017e83..510d1117 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="idp16782432"></a><h3>Element Information</h3> +<a name="idp19986432"></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="idp17006352"></a><h3>Element Pads</h3> +<a name="idp20333312"></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 9792ee00..3db0a577 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="idp17022976"></a><h3>Element Information</h3> +<a name="idp18567184"></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="idp17030432"></a><h3>Element Pads</h3> +<a name="idp18574640"></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 7cbd186a..2481940b 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="idp17746640"></a><h3>Example pipelines</h3> +<a name="idp15136368"></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="idp17643120"></a><h3>Element Information</h3> +<a name="idp19059856"></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="idp19813008"></a><h3>Element Pads</h3> +<a name="idp19213504"></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 4739341b..5616b479 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="idp16573952"></a><h3>Example pipelines</h3> +<a name="idp17244576"></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="idp15832672"></a><h3>Element Information</h3> +<a name="idp19163024"></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="idp15840080"></a><h3>Element Pads</h3> +<a name="idp16286400"></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-sdlaudiosink.html b/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html index 76f37032..b24dfaf5 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18902496"></a><h3>Element Information</h3> +<a name="idp20014976"></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="idp15272912"></a><h3>Element Pads</h3> +<a name="idp18412368"></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-sdlvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html index 4b86d7ca..15f2a2f9 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html @@ -61,7 +61,7 @@ GstSDLVideoSink implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp17401024"></a><h3>Element Information</h3> +<a name="idp17693504"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -84,7 +84,7 @@ GstSDLVideoSink implements </div> <hr> <div class="refsect2"> -<a name="idp16920944"></a><h3>Element Pads</h3> +<a name="idp20086528"></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 417ce819..bfa3eb07 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="idp17196560"></a><h3>Example launch line</h3> +<a name="idp18513248"></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="idp17199760"></a><h3>Element Information</h3> +<a name="idp18516496"></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="idp17207232"></a><h3>Element Pads</h3> +<a name="idp18523968"></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 3a640bce..674896e9 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="idp16542432"></a><h3>Element Information</h3> +<a name="idp19782064"></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="idp20338208"></a><h3>Element Pads</h3> +<a name="idp20860160"></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 054624a8..fe644ac4 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="idp20282800"></a><h3>Element Information</h3> +<a name="idp14969568"></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="idp19500304"></a><h3>Element Pads</h3> +<a name="idp19375552"></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 0fc0e2fd..57467efc 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="idp20323408"></a><h3>Example launch line</h3> +<a name="idp20119248"></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="idp19459616"></a><h3>Element Information</h3> +<a name="idp20029840"></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="idp19467024"></a><h3>Element Pads</h3> +<a name="idp20037248"></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 06ca2e82..b8bff659 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="idp18613216"></a><h3>Example launch line</h3> +<a name="idp20579712"></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="idp19068512"></a><h3>Element Information</h3> +<a name="idp19484896"></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="idp19699456"></a><h3>Element Pads</h3> +<a name="idp17904576"></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 760d71db..6b8a28e0 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="idp15225088"></a><h3>Example launch line</h3> +<a name="idp20202256"></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="idp18868880"></a><h3>Element Information</h3> +<a name="idp18414112"></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="idp17506816"></a><h3>Element Pads</h3> +<a name="idp16050688"></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 64309ee2..7d42534e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html @@ -62,7 +62,7 @@ requires a fairly up-to-date gst-plugins-base, as of February 2007). <p> </p> <div class="refsect2"> -<a name="idp19002560"></a><h3>Example launch line</h3> +<a name="idp17674992"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -83,7 +83,7 @@ Last reviewed on 2007-02-26 (0.10.4.1) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp19000640"></a><h3>Element Information</h3> +<a name="idp14709536"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -106,7 +106,7 @@ Last reviewed on 2007-02-26 (0.10.4.1) </div> <hr> <div class="refsect2"> -<a name="idp15359088"></a><h3>Element Pads</h3> +<a name="idp18356464"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -177,12 +177,7 @@ Last reviewed on 2007-02-26 (0.10.4.1) gint64 offset; gint64 timestamp; - guint rate; - guint channels; - guint width; - - guint sample_size; - GstSpeedFormat format; + GstAudioInfo info; }; </pre> <p> diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html index 66ef7385..ecc68773 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="idp19928336"></a><h3>Element Information</h3> +<a name="idp17483584"></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="idp20761296"></a><h3>Element Pads</h3> +<a name="idp21675968"></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 094a2556..d2cdb02b 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="idp19553440"></a><h3>Element Information</h3> +<a name="idp20583616"></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="idp20820448"></a><h3>Element Pads</h3> +<a name="idp16246720"></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-stereo.html b/docs/plugins/html/gst-plugins-bad-plugins-stereo.html index 81d12544..1e351efe 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-stereo.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-stereo.html @@ -57,7 +57,7 @@ Create a wide stereo effect. <p> </p> <div class="refsect2"> -<a name="idp19235648"></a><h3>Example pipelines</h3> +<a name="idp17825968"></a><h3>Example pipelines</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -75,7 +75,7 @@ Create a wide stereo effect. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp19150016"></a><h3>Element Information</h3> +<a name="idp20328512"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -98,7 +98,7 @@ Create a wide stereo effect. </div> <hr> <div class="refsect2"> -<a name="idp17320912"></a><h3>Element Pads</h3> +<a name="idp18363104"></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 acf57307..911f46b9 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="idp18019696"></a><h3>Element Information</h3> +<a name="idp16205664"></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="idp18043264"></a><h3>Element Pads</h3> +<a name="idp18135264"></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 547710f2..37698a49 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="idp18850720"></a><h3>Example launch line</h3> +<a name="idp17350272"></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="idp17287248"></a><h3>Element Information</h3> +<a name="idp16443200"></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="idp20813440"></a><h3>Element Pads</h3> +<a name="idp19044320"></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 8bfe4fe4..5514982c 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="idp20961872"></a><h3>Element Information</h3> +<a name="idp17433488"></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="idp19181872"></a><h3>Element Pads</h3> +<a name="idp18146544"></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-tiger.html b/docs/plugins/html/gst-plugins-bad-plugins-tiger.html index 7bda0250..25268f19 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-tiger.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-tiger.html @@ -68,7 +68,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp19151600"></a><h3>Element Information</h3> +<a name="idp21291760"></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="idp15228016"></a><h3>Element Pads</h3> +<a name="idp20096864"></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-timidity.html b/docs/plugins/html/gst-plugins-bad-plugins-timidity.html index 81981f58..749b8c7f 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-timidity.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-timidity.html @@ -45,7 +45,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp21215776"></a><h3>Element Information</h3> +<a name="idp18287296"></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="idp18857904"></a><h3>Element Pads</h3> +<a name="idp18236592"></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-trm.html b/docs/plugins/html/gst-plugins-bad-plugins-trm.html index 28dbfaf7..adf115d6 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-trm.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-trm.html @@ -54,7 +54,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18425328"></a><h3>Element Information</h3> +<a name="idp19347856"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -77,7 +77,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp16439904"></a><h3>Element Pads</h3> +<a name="idp18385808"></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 e77d8195..10bda597 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="idp21208752"></a><h3>Element Information</h3> +<a name="idp19316176"></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="idp18154848"></a><h3>Element Pads</h3> +<a name="idp20573392"></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 33ef4e99..88c966cf 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="idp16665216"></a><h3>Element Information</h3> +<a name="idp15063328"></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="idp21429408"></a><h3>Element Pads</h3> +<a name="idp15161392"></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-videoanalyse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html index 215661c3..2c71dca3 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html @@ -95,7 +95,7 @@ The message's structure contains these fields: <p> </p> <div class="refsect2"> -<a name="idp18809280"></a><h3>Example launch line</h3> +<a name="idp21210992"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -116,7 +116,7 @@ Last reviewed on 2007-05-30 (0.10.5) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp20570432"></a><h3>Element Information</h3> +<a name="idp21214064"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -139,7 +139,7 @@ Last reviewed on 2007-05-30 (0.10.5) </div> <hr> <div class="refsect2"> -<a name="idp16152368"></a><h3>Element Pads</h3> +<a name="idp21221520"></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-videodetect.html b/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html index cd442ddd..6ed2357e 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html @@ -124,7 +124,7 @@ The message's structure contains these fields: <p> </p> <div class="refsect2"> -<a name="idp22180608"></a><h3>Example launch line</h3> +<a name="idp22388416"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -145,7 +145,7 @@ Last reviewed on 2007-05-30 (0.10.5) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp22011472"></a><h3>Element Information</h3> +<a name="idp22391520"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -168,7 +168,7 @@ Last reviewed on 2007-05-30 (0.10.5) </div> <hr> <div class="refsect2"> -<a name="idp22018880"></a><h3>Element Pads</h3> +<a name="idp22398976"></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-videomark.html b/docs/plugins/html/gst-plugins-bad-plugins-videomark.html index 2b34d371..f5fe4886 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-videomark.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-videomark.html @@ -77,7 +77,7 @@ mostly used together with the <a class="link" href="gst-plugins-bad-plugins-vide <p> </p> <div class="refsect2"> -<a name="idp21390816"></a><h3>Example launch line</h3> +<a name="idp21917808"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -98,7 +98,7 @@ Last reviewed on 2007-06-01 (0.10.6) <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp21393888"></a><h3>Element Information</h3> +<a name="idp21920880"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -121,7 +121,7 @@ Last reviewed on 2007-06-01 (0.10.6) </div> <hr> <div class="refsect2"> -<a name="idp22538704"></a><h3>Element Pads</h3> +<a name="idp22800128"></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 f7ba2390..1fe1fae4 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="idp21751600"></a><h3>Element Information</h3> +<a name="idp22680176"></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="idp20475712"></a><h3>Element Pads</h3> +<a name="idp22899200"></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 6ffbdcf8..5b55feee 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="idp17914144"></a><h3>Element Information</h3> +<a name="idp17495776"></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="idp21720256"></a><h3>Element Pads</h3> +<a name="idp22615488"></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-vp8dec.html b/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html index 31473f70..d7252492 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html @@ -69,7 +69,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp20899744"></a><h3>Element Information</h3> +<a name="idp20734128"></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="idp20410064"></a><h3>Element Pads</h3> +<a name="idp23615264"></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-vp8enc.html b/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html index 29c49e1e..43e4dd08 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html @@ -96,7 +96,7 @@ GstVP8Enc implements <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp22900400"></a><h3>Element Information</h3> +<a name="idp23045648"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -119,7 +119,7 @@ GstVP8Enc implements </div> <hr> <div class="refsect2"> -<a name="idp22907856"></a><h3>Element Pads</h3> +<a name="idp23053104"></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 ae6c0347..117103b3 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="idp18632496"></a><h3>Element Information</h3> +<a name="idp19194976"></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="idp21704208"></a><h3>Element Pads</h3> +<a name="idp22598208"></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 7553c2ab..a632555b 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="idp19259136"></a><h3>Example launch line</h3> +<a name="idp20264176"></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="idp16783184"></a><h3>Element Information</h3> +<a name="idp20539776"></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="idp22670816"></a><h3>Element Pads</h3> +<a name="idp23689744"></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-wildmidi.html b/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html index 36decd5d..df96b64c 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html +++ b/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html @@ -54,7 +54,7 @@ <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="idp18431824"></a><h3>Element Information</h3> +<a name="idp19466576"></a><h3>Element Information</h3> <div class="variablelist"><table border="0"> <col align="left" valign="top"> <tbody> @@ -77,7 +77,7 @@ </div> <hr> <div class="refsect2"> -<a name="idp16127040"></a><h3>Element Pads</h3> +<a name="idp21415856"></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 12d0962f..548abc6c 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="idp19371104"></a><h3>Element Information</h3> +<a name="idp17859120"></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="idp20177872"></a><h3>Element Pads</h3> +<a name="idp22646960"></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 5d44db3e..59faae07 100644 --- a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 +++ b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 @@ -203,38 +203,38 @@ </sub> </chapters> <functions> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-aiffparse.html#idp2839760"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffparse.html#idp2837072"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffparse.html#idp8518944"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-aiffparse.html#idp2432752"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffparse.html#idm32416"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffparse.html#idp8021392"/> <keyword type="struct" name="struct GstAiffParse" link="gst-plugins-bad-plugins-aiffparse.html#GstAiffParse"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffmux.html#idm5328"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffmux.html#idp2882240"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffmux.html#idp9042592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffmux.html#idp6205328"/> <keyword type="struct" name="struct GstAiffMux" link="gst-plugins-bad-plugins-aiffmux.html#GstAiffMux"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp2829696"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp9032096"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp8424192"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp6630304"/> <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#idp8989648"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp9554912"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp7315056"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp8841344"/> <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#idp8525232"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp8434096"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp2590624"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp6640816"/> <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#idp8106800"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9238224"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp6053072"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp7756416"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9017600"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp5773584"/> <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-celtdec.html#idp6823200"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp7058896"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp8597360"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp9503808"/> <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#idp5670784"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp5678192"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp8244960"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp8252368"/> <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"/> @@ -243,59 +243,59 @@ <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#idp6233824"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp7745728"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp8349200"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp6787520"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp6219936"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp6800928"/> <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#idp8856160"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp9475024"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp6333184"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp10266592"/> <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#idp5402224"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp8594816"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp5968336"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp8132528"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp7956752"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp9517664"/> <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#idp10187328"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp6379600"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10076688"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp7368880"/> <keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10307792"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp9514848"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp6716272"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7974000"/> <keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp7384896"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp6143184"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp8933888"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp6523584"/> <keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp8492880"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7770336"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp8532496"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7759776"/> <keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace"/> <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#idp2985344"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp9014304"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp7339296"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp9515440"/> <keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth"/> <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#idp10101808"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp2988560"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp6124432"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp9485824"/> <keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel"/> <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#idp7313360"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp10104336"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9922496"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp7265264"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp5536608"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp5544128"/> <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="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10818016"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10822640"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10830048"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10625616"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10630192"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10637600"/> <keyword type="struct" name="struct GstDCCPClientSink" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink"/> <keyword type="property" name="The "ccid" property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--ccid"/> <keyword type="property" name="The "close-socket" property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--close-socket"/> @@ -303,9 +303,9 @@ <keyword type="property" name="The "port" property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--port"/> <keyword type="property" name="The "sockfd" property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--sockfd"/> <keyword type="signal" name="The "connected" signal" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink-connected"/> - <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp9953888"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp9958528"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp11044688"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10967904"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10972496"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10856160"/> <keyword type="struct" name="struct GstDCCPClientSrc" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc"/> <keyword type="property" name="The "caps" property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--caps"/> <keyword type="property" name="The "ccid" property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--ccid"/> @@ -314,9 +314,9 @@ <keyword type="property" name="The "port" property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--port"/> <keyword type="property" name="The "sockfd" property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--sockfd"/> <keyword type="signal" name="The "connected" signal" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc-connected"/> - <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversink.html#idp10852864"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversink.html#idp10857504"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversink.html#idp10864912"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversink.html#idp5933632"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversink.html#idp5938272"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversink.html#idp5945680"/> <keyword type="struct" name="struct GstDCCPServerSink" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink"/> <keyword type="property" name="The "ccid" property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--ccid"/> <keyword type="property" name="The "close-socket" property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--close-socket"/> @@ -324,9 +324,9 @@ <keyword type="property" name="The "sockfd" property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--sockfd"/> <keyword type="property" name="The "wait-connections" property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--wait-connections"/> <keyword type="signal" name="The "connected" signal" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink-connected"/> - <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10323360"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10327984"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversrc.html#idp9084256"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversrc.html#idp6902352"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversrc.html#idp6906976"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10760768"/> <keyword type="struct" name="struct GstDCCPServerSrc" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc"/> <keyword type="property" name="The "caps" property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--caps"/> <keyword type="property" name="The "ccid" property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--ccid"/> @@ -335,8 +335,8 @@ <keyword type="property" name="The "port" property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--port"/> <keyword type="property" name="The "sockfd" property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--sockfd"/> <keyword type="signal" name="The "connected" signal" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc-connected"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dfbvideosink.html#idp8833824"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dfbvideosink.html#idp8841280"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dfbvideosink.html#idp10779952"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dfbvideosink.html#idp10787408"/> <keyword type="struct" name="struct GstDfbVideoSink" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink"/> <keyword type="property" name="The "brightness" property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--brightness"/> <keyword type="property" name="The "contrast" property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--contrast"/> @@ -345,38 +345,38 @@ <keyword type="property" name="The "saturation" property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--saturation"/> <keyword type="property" name="The "surface" property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--surface"/> <keyword type="property" name="The "vsync" property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--vsync"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp6315568"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp5484464"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp8327520"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp10993056"/> <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#idp2860624"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp9241504"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp11010224"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp2520512"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp6737488"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp7798544"/> <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="Element Information" link="gst-plugins-bad-plugins-directdrawsink.html#idp5578000"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-directdrawsink.html#idp7595952"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-directdrawsink.html#idp6837808"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-directdrawsink.html#idp8198960"/> <keyword type="struct" name="struct GstDirectDrawSink" link="gst-plugins-bad-plugins-directdrawsink.html#GstDirectDrawSink"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp5282976"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp7389040"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp7545072"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp7058192"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp6875920"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp11183408"/> <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#idp7706656"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp11601232"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp7226832"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp11636272"/> <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#idp11224640"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11232048"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11460400"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11467808"/> <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#idp5376000"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp11099120"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp6510528"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp7058944"/> <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#idp11415376"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11422896"/> - <keyword type="struct" name="GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp12196064"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp12203584"/> + <keyword type="struct" name="struct GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc"/> <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"/> <keyword type="property" name="The "code-rate-lp" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--code-rate-lp"/> @@ -400,20 +400,20 @@ <keyword type="property" name="The "symbol-rate" property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--symbol-rate"/> <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="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp11809936"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11807760"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp10147840"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp12001248"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11999072"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp8128208"/> <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#idp9396624"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp8932464"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11280224"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp8309072"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp5371744"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11347856"/> <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#idp10940736"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6591344"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11501600"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11509008"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp11550640"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6416064"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11324736"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11920336"/> <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"/> @@ -423,23 +423,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#idp9439936"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp8424256"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp8788672"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp5451968"/> <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#idp12116352"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp5590592"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11520160"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp5610512"/> - <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp7376432"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp6240512"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp8800384"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp10377776"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp8951616"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11439888"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp10798496"/> + <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp11762160"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp5971472"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp6743744"/> <keyword type="struct" name="struct GstFestival" link="gst-plugins-bad-plugins-festival.html#GstFestival"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp8362800"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idm17504"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp6122960"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idp9559136"/> <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#idp12498544"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12501520"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12508928"/> + <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11756224"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11883216"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11890624"/> <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"/> @@ -453,20 +453,20 @@ <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-freeze.html#idp5907696"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-freeze.html#idp6909424"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-freeze.html#idp9991056"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-freeze.html#idp12368304"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-freeze.html#idp6890656"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-freeze.html#idp7718512"/> <keyword type="struct" name="struct GstFreeze" link="gst-plugins-bad-plugins-freeze.html#GstFreeze"/> <keyword type="property" name="The "max-buffers" property" link="gst-plugins-bad-plugins-freeze.html#GstFreeze--max-buffers"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp12024128"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp9259088"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp6607072"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-ivfparse.html#idp11952912"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-ivfparse.html#idp9189616"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp12360176"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11874592"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp6926800"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-ivfparse.html#idp12110704"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-ivfparse.html#idp6673296"/> <keyword type="struct" name="struct GstIvfParse" link="gst-plugins-bad-plugins-ivfparse.html#GstIvfParse"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp3034448"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp10792880"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp10706864"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp7839088"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp5664464"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp11569792"/> <keyword type="struct" name="struct GstJpegParse" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParse"/> <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"/> @@ -475,14 +475,14 @@ <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#idp5801264"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12348688"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp6192944"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12611152"/> <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-kateenc.html#idp10902416"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateenc.html#idp12073872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateenc.html#idp7453376"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateenc.html#idp12536720"/> <keyword type="struct" name="struct GstKateEnc" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc"/> <keyword type="property" name="The "category" property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--category"/> <keyword type="property" name="The "default-spu-duration" property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--default-spu-duration"/> @@ -493,49 +493,49 @@ <keyword type="property" name="The "language" property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--language"/> <keyword type="property" name="The "original-canvas-height" property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--original-canvas-height"/> <keyword type="property" name="The "original-canvas-width" property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--original-canvas-width"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katedec.html#idp5802928"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katedec.html#idp8247488"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katedec.html#idp7525552"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katedec.html#idp8065040"/> <keyword type="struct" name="struct GstKateDec" link="gst-plugins-bad-plugins-katedec.html#GstKateDec"/> <keyword type="property" name="The "category" property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--category"/> <keyword type="property" name="The "language" property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--language"/> <keyword type="property" name="The "original-canvas-height" property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--original-canvas-height"/> <keyword type="property" name="The "original-canvas-width" property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--original-canvas-width"/> <keyword type="property" name="The "remove-markup" property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--remove-markup"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateparse.html#idp13189408"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateparse.html#idp11775552"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateparse.html#idp13210048"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateparse.html#idp7734608"/> <keyword type="struct" name="struct GstKateParse" link="gst-plugins-bad-plugins-kateparse.html#GstKateParse"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katetag.html#idp7110000"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katetag.html#idp9817712"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katetag.html#idp10661680"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katetag.html#idp11385696"/> <keyword type="struct" name="struct GstKateTag" link="gst-plugins-bad-plugins-katetag.html#GstKateTag"/> <keyword type="property" name="The "category" property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--category"/> <keyword type="property" name="The "language" property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--language"/> <keyword type="property" name="The "original-canvas-height" property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--original-canvas-height"/> <keyword type="property" name="The "original-canvas-width" property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--original-canvas-width"/> <keyword type="struct" name="struct GstLADSPA" link="gst-plugins-bad-plugins-ladspa.html#GstLADSPA"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp12826656"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp9026016"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp11071952"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp8160752"/> <keyword type="struct" name="struct GstLiveAdder" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder"/> <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#idp7617392"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12058384"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp5270400"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp9286000"/> <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#idp13195040"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp8042176"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp13176608"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp11618608"/> <keyword type="struct" name="struct GstMimEnc" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc"/> <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#idp13106560"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp9528928"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp13148992"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp6263552"/> <keyword type="struct" name="struct GstMimDec" link="gst-plugins-bad-plugins-mimdec.html#GstMimDec"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp8393712"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp13036976"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp9326800"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp13320112"/> <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#idp13248064"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13636368"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp13071536"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13078992"/> <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"/> @@ -549,8 +549,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#idp13547984"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13555392"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp14314960"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp14322368"/> <keyword type="struct" name="GstMpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc"/> <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"/> @@ -586,8 +586,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#idp12900480"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp6275440"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp13167136"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp6517568"/> <keyword type="struct" name="GstMplex" link="gst-plugins-bad-plugins-mplex.html#GstMplex"/> <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"/> @@ -596,8 +596,8 @@ <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="Element Information" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13365808"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13373216"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13391504"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13398912"/> <keyword type="struct" name="struct GstMythtvSrc" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc"/> <keyword type="property" name="The "location" property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--location"/> <keyword type="property" name="The "mythtv-channel" property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-channel"/> @@ -606,24 +606,24 @@ <keyword type="property" name="The "mythtv-live-chainid" property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-live-chainid"/> <keyword type="property" name="The "mythtv-live-id" property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-live-id"/> <keyword type="property" name="The "mythtv-version" property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-version"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfdemux.html#idp8561696"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfdemux.html#idp9156400"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfdemux.html#idp13501376"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfdemux.html#idp10383872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfdemux.html#idp5962464"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfdemux.html#idp13024752"/> <keyword type="struct" name="struct GstMXFDemux" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux"/> <keyword type="property" name="The "package" property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--package"/> <keyword type="property" name="The "max-drift" property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--max-drift"/> <keyword type="property" name="The "structure" property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--structure"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfmux.html#idp14255584"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfmux.html#idp14253088"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfmux.html#idp14247008"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfmux.html#idp13934992"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfmux.html#idp13932496"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfmux.html#idp13926416"/> <keyword type="struct" name="GstMXFMux" link="gst-plugins-bad-plugins-mxfmux.html#GstMXFMux"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-nuvdemux.html#idp13944096"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-nuvdemux.html#idp13431056"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-nuvdemux.html#idp13925568"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-nuvdemux.html#idp13505664"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-nuvdemux.html#idp13504256"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-nuvdemux.html#idp13368928"/> <keyword type="struct" name="GstNuvDemux" link="gst-plugins-bad-plugins-nuvdemux.html#GstNuvDemux"/> - <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp13930912"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp13933744"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13941152"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp13480208"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp13483040"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13490448"/> <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"/> @@ -631,18 +631,18 @@ <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#idp6354624"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13398464"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp10290272"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13377856"/> <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#idp14000208"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp3027664"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp14497280"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp11587360"/> <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-rsvgdec.html#idp14111776"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgdec.html#idp6327280"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgdec.html#idp14165152"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgdec.html#idp9167136"/> <keyword type="struct" name="struct GstRsvgDec" link="gst-plugins-bad-plugins-rsvgdec.html#GstRsvgDec"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp8873504"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp6531632"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp11018832"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp6380368"/> <keyword type="struct" name="struct GstRsvgOverlay" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay"/> <keyword type="property" name="The "data" property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--data"/> <keyword type="property" name="The "fit-to-frame" property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--fit-to-frame"/> @@ -655,24 +655,24 @@ <keyword type="property" name="The "width-relative" property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--width-relative"/> <keyword type="property" name="The "x-relative" property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--x-relative"/> <keyword type="property" name="The "y-relative" property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--y-relative"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp14357424"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp14850736"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp14453392"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp14460848"/> <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#idp14543488"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14550896"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14546816"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14430464"/> <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#idp8663952"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp14575824"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp14583280"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp12974912"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp14584768"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13647824"/> <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#idp17022976"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp17030432"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp18567184"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp18574640"/> <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"/> @@ -683,36 +683,36 @@ <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#idp16782432"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17006352"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp19986432"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp20333312"/> <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#idp17746640"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp17643120"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp19813008"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp15136368"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp19059856"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp19213504"/> <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#idp16573952"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp15832672"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp15840080"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp17244576"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp19163024"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp16286400"/> <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-sdlaudiosink.html#idp18902496"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp15272912"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp20014976"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp18412368"/> <keyword type="struct" name="struct GstSDLAudioSink" link="gst-plugins-bad-plugins-sdlaudiosink.html#GstSDLAudioSink"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlvideosink.html#idp17401024"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlvideosink.html#idp16920944"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlvideosink.html#idp17693504"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlvideosink.html#idp20086528"/> <keyword type="struct" name="struct GstSDLVideoSink" link="gst-plugins-bad-plugins-sdlvideosink.html#GstSDLVideoSink"/> <keyword type="property" name="The "fullscreen" property" link="gst-plugins-bad-plugins-sdlvideosink.html#GstSDLVideoSink--fullscreen"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp16542432"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp20338208"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp19782064"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp20860160"/> <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"/> @@ -721,74 +721,74 @@ <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#idp20282800"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp19500304"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp14969568"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp19375552"/> <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#idp17196560"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp17199760"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp17207232"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp18513248"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp18516496"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp18523968"/> <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#idp20323408"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp19459616"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp19467024"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp20119248"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp20029840"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp20037248"/> <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#idp18613216"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp19068512"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp19699456"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp20579712"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp19484896"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp17904576"/> <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#idp15225088"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18868880"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp17506816"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp20202256"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18414112"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp16050688"/> <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#idp18850720"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp17287248"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp20813440"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp17350272"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp16443200"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp19044320"/> <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#idp19002560"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp19000640"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp15359088"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp17674992"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp14709536"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp18356464"/> <keyword type="struct" name="struct GstSpeed" link="gst-plugins-bad-plugins-speed.html#GstSpeed"/> <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#idp19928336"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp20761296"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp17483584"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp21675968"/> <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#idp19553440"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp20820448"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp20583616"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp16246720"/> <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="Example pipelines" link="gst-plugins-bad-plugins-stereo.html#idp19235648"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stereo.html#idp19150016"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stereo.html#idp17320912"/> + <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-stereo.html#idp17825968"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stereo.html#idp20328512"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stereo.html#idp18363104"/> <keyword type="struct" name="struct GstStereo" link="gst-plugins-bad-plugins-stereo.html#GstStereo"/> <keyword type="property" name="The "active" property" link="gst-plugins-bad-plugins-stereo.html#GstStereo--active"/> <keyword type="property" name="The "stereo" property" link="gst-plugins-bad-plugins-stereo.html#GstStereo--stereo"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp18019696"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp18043264"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp16205664"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp18135264"/> <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#idp20961872"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp19181872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp17433488"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp18146544"/> <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#idp15722560"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp21229872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp18968192"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp21384832"/> <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"/> @@ -800,8 +800,8 @@ <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-tiger.html#idp19151600"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tiger.html#idp15228016"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tiger.html#idp21291760"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tiger.html#idp20096864"/> <keyword type="struct" name="struct GstKateTiger" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger"/> <keyword type="property" name="The "category" property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--category"/> <keyword type="property" name="The "default-background-alpha" property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--default-background-alpha"/> @@ -819,29 +819,29 @@ <keyword type="property" name="The "original-canvas-height" property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--original-canvas-height"/> <keyword type="property" name="The "original-canvas-width" property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--original-canvas-width"/> <keyword type="property" name="The "quality" property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--quality"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-timidity.html#idp21215776"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-timidity.html#idp18857904"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-timidity.html#idp18287296"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-timidity.html#idp18236592"/> <keyword type="struct" name="struct GstTimidity" link="gst-plugins-bad-plugins-timidity.html#GstTimidity"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-trm.html#idp18425328"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-trm.html#idp16439904"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-trm.html#idp19347856"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-trm.html#idp18385808"/> <keyword type="struct" name="struct GstTRM" link="gst-plugins-bad-plugins-trm.html#GstTRM"/> <keyword type="property" name="The "proxy-address" property" link="gst-plugins-bad-plugins-trm.html#GstTRM--proxy-address"/> <keyword type="property" name="The "proxy-port" property" link="gst-plugins-bad-plugins-trm.html#GstTRM--proxy-port"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp21208752"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp18154848"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp19316176"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp20573392"/> <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#idp16665216"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp21429408"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp15063328"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp15161392"/> <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="Example launch line" link="gst-plugins-bad-plugins-videoanalyse.html#idp18809280"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoanalyse.html#idp20570432"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoanalyse.html#idp16152368"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videoanalyse.html#idp21210992"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoanalyse.html#idp21214064"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoanalyse.html#idp21221520"/> <keyword type="struct" name="struct GstVideoAnalyse" link="gst-plugins-bad-plugins-videoanalyse.html#GstVideoAnalyse"/> <keyword type="property" name="The "message" property" link="gst-plugins-bad-plugins-videoanalyse.html#GstVideoAnalyse--message"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videodetect.html#idp22180608"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videodetect.html#idp22011472"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videodetect.html#idp22018880"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videodetect.html#idp22388416"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videodetect.html#idp22391520"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videodetect.html#idp22398976"/> <keyword type="struct" name="struct GstVideoDetect" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect"/> <keyword type="property" name="The "message" property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--message"/> <keyword type="property" name="The "pattern-count" property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--pattern-count"/> @@ -852,9 +852,9 @@ <keyword type="property" name="The "bottom-offset" property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--bottom-offset"/> <keyword type="property" name="The "left-offset" property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--left-offset"/> <keyword type="property" name="The "pattern-center" property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--pattern-center"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videomark.html#idp21390816"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videomark.html#idp21393888"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videomark.html#idp22538704"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videomark.html#idp21917808"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videomark.html#idp21920880"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videomark.html#idp22800128"/> <keyword type="struct" name="struct GstVideoMark" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark"/> <keyword type="property" name="The "enabled" property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--enabled"/> <keyword type="property" name="The "pattern-count" property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--pattern-count"/> @@ -865,8 +865,8 @@ <keyword type="property" name="The "bottom-offset" property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--bottom-offset"/> <keyword type="property" name="The "left-offset" property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--left-offset"/> <keyword type="property" name="The "pattern-data-uint64" property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--pattern-data-uint64"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp21751600"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20475712"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp22680176"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp22899200"/> <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"/> @@ -882,35 +882,35 @@ <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#idp18632496"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp21704208"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp19194976"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp22598208"/> <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-wildmidi.html#idp18431824"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wildmidi.html#idp16127040"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wildmidi.html#idp19466576"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wildmidi.html#idp21415856"/> <keyword type="struct" name="struct GstWildmidi" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi"/> <keyword type="property" name="The "high-quality" property" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi--high-quality"/> <keyword type="property" name="The "linear-volume" property" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi--linear-volume"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp19371104"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp20177872"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp17859120"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp22646960"/> <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#idp17914144"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp21720256"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp17495776"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp22615488"/> <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-vp8dec.html#idp20899744"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8dec.html#idp20410064"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8dec.html#idp20734128"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8dec.html#idp23615264"/> <keyword type="struct" name="struct GstVP8Dec" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec-struct"/> <keyword type="property" name="The "deblocking-level" property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--deblocking-level"/> <keyword type="property" name="The "noise-level" property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--noise-level"/> <keyword type="property" name="The "post-processing" property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--post-processing"/> <keyword type="property" name="The "post-processing-flags" property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--post-processing-flags"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8enc.html#idp22900400"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8enc.html#idp22907856"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8enc.html#idp23045648"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8enc.html#idp23053104"/> <keyword type="struct" name="struct GstVP8Enc" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc-struct"/> <keyword type="property" name="The "bitrate" property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--bitrate"/> <keyword type="property" name="The "error-resilient" property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--error-resilient"/> @@ -935,9 +935,9 @@ <keyword type="property" name="The "static-threshold" property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--static-threshold"/> <keyword type="property" name="The "token-parts" property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--token-parts"/> <keyword type="property" name="The "tune" property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--tune"/> - <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp19259136"/> - <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp16783184"/> - <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp22670816"/> + <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp20264176"/> + <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp20539776"/> + <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp23689744"/> <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 58b8ce30..6c1177ca 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 (0.11.93) + for GStreamer Bad Plugins 1.0 (0.11.94) 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> diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml index aa3900b6..f9c22048 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>0.11.92</version> + <version>0.11.94</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 531c5660..15c328d7 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>0.11.92</version> + <version>0.11.94</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 6299c568..fabcc2a2 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>0.11.92</version> + <version>0.11.94</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 a8cd6d8f..4c7e24b9 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>0.11.92</version> + <version>0.11.94</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 9d981085..3a5b8bd5 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>0.11.92</version> + <version>0.11.94</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 9c45b6f3..768f160c 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>0.11.92</version> + <version>0.11.94</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 fa4ba035..cee0893f 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>0.11.92</version> + <version>0.11.94</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 e0487470..9387aba8 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>0.11.92</version> + <version>0.11.94</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 new file mode 100644 index 00000000..8ea7451b --- /dev/null +++ b/docs/plugins/inspect/plugin-camerabin.xml @@ -0,0 +1,64 @@ +<plugin> + <name>camerabin</name> + <description>Take image snapshots and record movies from camera</description> + <filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename> + <basename>libgstcamerabin2.so</basename> + <version>0.11.94</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>camerabin</name> + <longname>Camera Bin</longname> + <class>Generic/Bin/Camera</class> + <description>Take image snapshots and record movies from camera</description> + <author>Thiago Santos <thiago.sousa.santos@collabora.co.uk></author> + <pads> + </pads> + </element> + <element> + <name>viewfinderbin</name> + <longname>Viewfinder Bin</longname> + <class>Sink/Video</class> + <description>Viewfinder Bin used in camerabin2</description> + <author>Thiago Santos <thiago.sousa.santos@collabora.com></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>video/x-raw</details> + </caps> + </pads> + </element> + <element> + <name>wrappercamerabinsrc</name> + <longname>Wrapper camera src element for camerabin2</longname> + <class>Source/Video</class> + <description>Wrapper camera src element for camerabin2</description> + <author>Thiago Santos <thiago.sousa.santos@collabora.com></author> + <pads> + <caps> + <name>imgsrc</name> + <direction>source</direction> + <presence>always</presence> + <details>ANY</details> + </caps> + <caps> + <name>vfsrc</name> + <direction>source</direction> + <presence>always</presence> + <details>ANY</details> + </caps> + <caps> + <name>vidsrc</name> + <direction>source</direction> + <presence>always</presence> + <details>ANY</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-celt.xml b/docs/plugins/inspect/plugin-celt.xml index 96dec0e0..6b55a459 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>0.11.92</version> + <version>0.11.94</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 0e88b0a0..25f93d15 100644 --- a/docs/plugins/inspect/plugin-chromaprint.xml +++ b/docs/plugins/inspect/plugin-chromaprint.xml @@ -3,10 +3,10 @@ <description>Calculate Chromaprint fingerprint from audio files</description> <filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename> <basename>libgstchromaprint.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,13 +20,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int){ 1234 }, width=(int){ 16 }, depth=(int){ 16 }, signed=(boolean)true</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int){ 1234 }, width=(int){ 16 }, depth=(int){ 16 }, signed=(boolean)true</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml index 949ec77e..d1ac3bae 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>0.11.92</version> + <version>0.11.94</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 e96f9732..c943ad65 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>0.11.92</version> + <version>0.11.94</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 f567eca5..bdc107e4 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>0.11.92</version> + <version>0.11.94</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 b89a09ec..5ebad757 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>0.11.92</version> + <version>0.11.94</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 827872b0..e2d486ab 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>0.11.92</version> + <version>0.11.94</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 0f16f824..dd65e7f4 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>0.11.92</version> + <version>0.11.94</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 42788ff0..55efe58b 100644 --- a/docs/plugins/inspect/plugin-dvb.xml +++ b/docs/plugins/inspect/plugin-dvb.xml @@ -3,10 +3,10 @@ <description>DVB elements</description> <filename>../../sys/dvb/.libs/libgstdvb.so</filename> <basename>libgstdvb.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -17,13 +17,13 @@ <author>Alessandro Decina <alessandro@nnva.org></author> <pads> <caps> - <name>program_%d</name> + <name>src</name> <direction>source</direction> - <presence>sometimes</presence> + <presence>always</presence> <details>video/mpegts, systemstream=(boolean)true</details> </caps> <caps> - <name>src%d</name> + <name>program_%u</name> <direction>source</direction> <presence>request</presence> <details>video/mpegts, systemstream=(boolean)true</details> diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml index 6ffb0af7..4b4f25d0 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>0.11.92</version> + <version>0.11.94</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 27f47ea0..6ebfb6ac 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>0.11.92</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> @@ -20,7 +20,7 @@ <name>subpicture</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-dvd-subpicture; subpicture/x-pgs</details> + <details>subpicture/x-dvd; subpicture/x-pgs</details> </caps> <caps> <name>video</name> diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml index 771b3728..91f0d5ac 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>0.11.92</version> + <version>0.11.94</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 92bf97de..3b6f61f4 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>0.11.92</version> + <version>0.11.94</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 d3d21ffd..59b75434 100644 --- a/docs/plugins/inspect/plugin-festival.xml +++ b/docs/plugins/inspect/plugin-festival.xml @@ -3,10 +3,10 @@ <description>Synthesizes plain text into audio</description> <filename>../../gst/festival/.libs/libgstfestival.so</filename> <basename>libgstfestival.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -14,13 +14,13 @@ <longname>Festival Text-to-Speech synthesizer</longname> <class>Filter/Effect/Audio</class> <description>Synthesizes plain text into audio</description> - <author>Wim Taymans <wim.taymans@chello.be></author> + <author>Wim Taymans <wim.taymans@gmail.com></author> <pads> <caps> <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>text/plain</details> + <details>text/x-raw, format=(string)utf8</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml index 64ce577a..6b148abb 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>0.11.92</version> + <version>0.11.94</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 bf9b8094..d4c1c902 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>0.11.92</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins</package> diff --git a/docs/plugins/inspect/plugin-freeze.xml b/docs/plugins/inspect/plugin-freeze.xml index eaab6ab4..fae9f6ff 100644 --- a/docs/plugins/inspect/plugin-freeze.xml +++ b/docs/plugins/inspect/plugin-freeze.xml @@ -3,10 +3,10 @@ <description>Stream freezer</description> <filename>../../gst/freeze/.libs/libgstfreeze.so</filename> <basename>libgstfreeze.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml index fc521fdd..1a4e68fe 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>0.11.92</version> + <version>0.11.94</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 new file mode 100644 index 00000000..b7cd9244 --- /dev/null +++ b/docs/plugins/inspect/plugin-gdp.xml @@ -0,0 +1,55 @@ +<plugin> + <name>gdp</name> + <description>Payload/depayload GDP packets</description> + <filename>../../gst/gdp/.libs/libgstgdp.so</filename> + <basename>libgstgdp.so</basename> + <version>0.11.94</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>gdpdepay</name> + <longname>GDP Depayloader</longname> + <class>GDP/Depayloader</class> + <description>Depayloads GStreamer Data Protocol buffers</description> + <author>Thomas Vander Stichele <thomas at apestaart dot org></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>application/x-gdp</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>ANY</details> + </caps> + </pads> + </element> + <element> + <name>gdppay</name> + <longname>GDP Payloader</longname> + <class>GDP/Payloader</class> + <description>Payloads GStreamer Data Protocol buffers</description> + <author>Thomas Vander Stichele <thomas at apestaart dot org></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>ANY</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>application/x-gdp</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml index 6026f3dc..22acdd34 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>0.11.92</version> + <version>0.11.94</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 15fd677f..07489720 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>0.11.92</version> + <version>0.11.94</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 1324ca6f..6f322ce8 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>0.11.92</version> + <version>0.11.94</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 2548297c..cec1dffb 100644 --- a/docs/plugins/inspect/plugin-gstsiren.xml +++ b/docs/plugins/inspect/plugin-gstsiren.xml @@ -3,10 +3,10 @@ <description>Siren encoder/decoder/payloader/depayloader plugins</description> <filename>../../gst/siren/.libs/libgstsiren.so</filename> <basename>libgstsiren.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, rate=(int)16000, channels=(int)1</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)16000, channels=(int)1</details> </caps> </pads> </element> @@ -41,7 +41,7 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, rate=(int)16000, channels=(int)1</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)16000, channels=(int)1</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml index 45f5cff7..ded2ea27 100644 --- a/docs/plugins/inspect/plugin-id3tag.xml +++ b/docs/plugins/inspect/plugin-id3tag.xml @@ -3,10 +3,10 @@ <description>ID3 v1 and v2 muxing plugin</description> <filename>../../gst/id3tag/.libs/libgstid3tag.so</filename> <basename>libgstid3tag.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml index 4883ad63..f702f713 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>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins</package> @@ -11,40 +11,40 @@ <elements> <element> <name>interaudiosink</name> - <longname>FIXME Long name</longname> - <class>Generic</class> - <description>FIXME Description</description> - <author>FIXME <fixme@example.com></author> + <longname>Internal audio sink</longname> + <class>Sink/Audio</class> + <description>Virtual audio sink for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)48000, channels=(int)2</details> </caps> </pads> </element> <element> <name>interaudiosrc</name> - <longname>FIXME Long name</longname> - <class>Generic</class> - <description>FIXME Description</description> - <author>FIXME <fixme@example.com></author> + <longname>Internal audio source</longname> + <class>Source/Audio</class> + <description>Virtual audio source for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details> + <details>audio/x-raw, format=(string)S16LE, rate=(int)48000, channels=(int)2</details> </caps> </pads> </element> <element> <name>intersubsink</name> - <longname>FIXME Long name</longname> - <class>Generic</class> - <description>FIXME Description</description> - <author>FIXME <fixme@example.com></author> + <longname>Internal subtitle sink</longname> + <class>Sink/Subtitle</class> + <description>Virtual subtitle sink for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>sink</name> @@ -56,10 +56,10 @@ </element> <element> <name>intersubsrc</name> - <longname>Inter-pipeline subtitle source</longname> + <longname>Internal subtitle source</longname> <class>Source/Subtitle</class> - <description>Inter-pipeline subtitle source</description> - <author>David Schleef <ds@entropywave.com></author> + <description>Virtual subtitle source for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>src</name> @@ -71,31 +71,31 @@ </element> <element> <name>intervideosink</name> - <longname>FIXME Long name</longname> - <class>Generic</class> - <description>FIXME Description</description> - <author>FIXME <fixme@example.com></author> + <longname>Internal video sink</longname> + <class>Sink/Video</class> + <description>Virtual video sink for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> <element> <name>intervideosrc</name> - <longname>FIXME Long name</longname> - <class>Generic</class> - <description>FIXME Description</description> - <author>FIXME <fixme@example.com></author> + <longname>Internal video source</longname> + <class>Source/Video</class> + <description>Virtual video source for internal process communication</description> + <author>David Schleef <ds@schleef.org></author> <pads> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml index ae157e81..006c8de2 100644 --- a/docs/plugins/inspect/plugin-interlace.xml +++ b/docs/plugins/inspect/plugin-interlace.xml @@ -3,10 +3,10 @@ <description>Create an interlaced video stream</description> <filename>../../gst/interlace/.libs/libgstinterlace.so</filename> <basename>libgstinterlace.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,13 +20,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-yuv, format=(fourcc){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean)false</details> + <details>video/x-raw, format=(string){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-raw-yuv, format=(fourcc){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean)true</details> + <details>video/x-raw, format=(string){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string){ interleaved, mixed }</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml index b893f813..406cef0f 100644 --- a/docs/plugins/inspect/plugin-jpegformat.xml +++ b/docs/plugins/inspect/plugin-jpegformat.xml @@ -3,10 +3,10 @@ <description>JPEG interchange format plugin</description> <filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename> <basename>libgstjpegformat.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -47,7 +47,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>image/jpeg, format=(fourcc){ I420, Y41B, UYVY, YV12 }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], interlaced=(boolean){ true, false }, framerate=(fraction)[ 0/1, 2147483647/1 ], parsed=(boolean)true</details> + <details>image/jpeg, format=(string){ I420, Y41B, UYVY, YV12 }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], interlaced=(boolean){ true, false }, framerate=(fraction)[ 0/1, 2147483647/1 ], parsed=(boolean)true</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-kate.xml b/docs/plugins/inspect/plugin-kate.xml index 288b52f5..be788602 100644 --- a/docs/plugins/inspect/plugin-kate.xml +++ b/docs/plugins/inspect/plugin-kate.xml @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>text/plain; text/x-pango-markup; video/x-dvd-subpicture</details> + <details>text/plain; text/x-pango-markup; subpicture/x-dvd</details> </caps> </pads> </element> @@ -41,7 +41,7 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>text/plain; text/x-pango-markup; video/x-dvd-subpicture</details> + <details>text/plain; text/x-pango-markup; subpicture/x-dvd</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml index aa3264a8..bc0dcee4 100644 --- a/docs/plugins/inspect/plugin-liveadder.xml +++ b/docs/plugins/inspect/plugin-liveadder.xml @@ -3,10 +3,10 @@ <description>Adds multiple live discontinuous streams</description> <filename>../../gst/liveadder/.libs/libgstliveadder.so</filename> <basename>libgstliveadder.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -17,16 +17,16 @@ <author>Olivier Crete <olivier.crete@collabora.co.uk></author> <pads> <caps> - <name>sink%d</name> + <name>sink_%u</name> <direction>sink</direction> <presence>request</presence> - <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details> + <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details> + <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml index b44b5adc..0bfef8b6 100644 --- a/docs/plugins/inspect/plugin-mimic.xml +++ b/docs/plugins/inspect/plugin-mimic.xml @@ -3,10 +3,10 @@ <description>Mimic codec</description> <filename>../../ext/mimic/.libs/libgstmimic.so</filename> <basename>libgstmimic.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)0/1, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)320, height=(int)240; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)0/1, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)160, height=(int)120</details> + <details>video/x-raw, format=(string)RGB, framerate=(fraction)0/1, width=(int)320, height=(int)240; video/x-raw, format=(string)RGB, framerate=(fraction)0/1, width=(int)160, height=(int)120</details> </caps> </pads> </element> @@ -41,7 +41,7 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)[ 1/1, 30/1 ], red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)320, height=(int)240; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)[ 1/1, 30/1 ], red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)160, height=(int)120</details> + <details>video/x-raw, format=(string)RGB, framerate=(fraction)[ 1/1, 30/1 ], width=(int)320, height=(int)240; video/x-raw, format=(string)RGB, framerate=(fraction)[ 1/1, 30/1 ], width=(int)160, height=(int)120</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml index 243e8523..a1eb5dd5 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>0.11.92</version> + <version>0.11.94</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 7da6c2e8..bc904c0a 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>0.11.92</version> + <version>0.11.94</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 f66e1059..50582029 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>0.11.2</version> + <version>0.11.94</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-mpegdemux2.xml b/docs/plugins/inspect/plugin-mpegdemux2.xml index 4e4c1eb5..1f403bfd 100644 --- a/docs/plugins/inspect/plugin-mpegdemux2.xml +++ b/docs/plugins/inspect/plugin-mpegdemux2.xml @@ -38,7 +38,7 @@ <name>subpicture_%02x</name> <direction>source</direction> <presence>sometimes</presence> - <details>video/x-dvd-subpicture</details> + <details>subpicture/x-dvd</details> </caps> <caps> <name>video_%02x</name> diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml new file mode 100644 index 00000000..ffc5edd6 --- /dev/null +++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml @@ -0,0 +1,52 @@ +<plugin> + <name>mpegpsdemux</name> + <description>MPEG-PS demuxer</description> + <filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename> + <basename>libgstmpegpsdemux.so</basename> + <version>0.11.94</version> + <license>unknown</license> + <source>gst-plugins-bad</source> + <package>GStreamer Bad Plug-ins source release</package> + <origin>Unknown package origin</origin> + <elements> + <element> + <name>mpegpsdemux</name> + <longname>The Fluendo MPEG Program Stream Demuxer</longname> + <class>Codec/Demuxer</class> + <description>Demultiplexes MPEG Program Streams</description> + <author>Wim Taymans <wim@fluendo.com></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)true; video/x-cdxa</details> + </caps> + <caps> + <name>audio_%02x</name> + <direction>source</direction> + <presence>sometimes</presence> + <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)4, stream-format=(string){ adts, loas }; audio/x-private1-lpcm; audio/x-private1-ac3; audio/x-private1-dts; audio/ac3</details> + </caps> + <caps> + <name>private_%d</name> + <direction>source</direction> + <presence>sometimes</presence> + <details>ANY</details> + </caps> + <caps> + <name>subpicture_%02x</name> + <direction>source</direction> + <presence>sometimes</presence> + <details>subpicture/x-dvd</details> + </caps> + <caps> + <name>video_%02x</name> + <direction>source</direction> + <presence>sometimes</presence> + <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-h264</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml index 32bcab64..b74a7c54 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>0.11.92</version> + <version>0.11.94</version> <license>unknown</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> @@ -27,7 +27,7 @@ Edward Hervey <edward.hervey@collabora.co.uk></author> <name>audio_%04x</name> <direction>source</direction> <presence>sometimes</presence> - <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)latm; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-private-ts-lpcm</details> + <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)loas; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-private-ts-lpcm</details> </caps> <caps> <name>private_%04x</name> @@ -39,7 +39,7 @@ Edward Hervey <edward.hervey@collabora.co.uk></author> <name>subpicture_%04x</name> <direction>source</direction> <presence>sometimes</presence> - <details>subpicture/x-pgs; video/x-dvd-subpicture</details> + <details>subpicture/x-pgs; subpicture/x-dvd</details> </caps> <caps> <name>video_%04x</name> @@ -63,13 +63,13 @@ Edward Hervey <edward.hervey@collabora.co.uk></author> <details>video/mpegts, systemstream=(boolean)true</details> </caps> <caps> - <name>program_%u</name> + <name>src</name> <direction>source</direction> - <presence>sometimes</presence> + <presence>always</presence> <details>video/mpegts, systemstream=(boolean)true</details> </caps> <caps> - <name>src_%u</name> + <name>program_%u</name> <direction>source</direction> <presence>request</presence> <details>video/mpegts, systemstream=(boolean)true</details> diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml index 303bd9bd..186eef63 100644 --- a/docs/plugins/inspect/plugin-mpegtsmux.xml +++ b/docs/plugins/inspect/plugin-mpegtsmux.xml @@ -3,10 +3,10 @@ <description>MPEG-TS muxer</description> <filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename> <basename>libgstmpegtsmux.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,7 +20,7 @@ <name>sink_%d</name> <direction>sink</direction> <presence>request</presence> - <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream; audio/mpeg, mpegversion=(int){ 1, 2 }; audio/mpeg, mpegversion=(int)4, stream-format=(string){ raw, adts }; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts</details> + <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream; audio/mpeg, mpegversion=(int){ 1, 2 }; audio/mpeg, mpegversion=(int)4, stream-format=(string){ raw, adts }; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts; subpicture/x-dvb; private/teletext</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml new file mode 100644 index 00000000..9f58d36a --- /dev/null +++ b/docs/plugins/inspect/plugin-mpg123.xml @@ -0,0 +1,34 @@ +<plugin> + <name>mpg123</name> + <description>mp3 decoding based on the mpg123 library</description> + <filename>../../ext/mpg123/.libs/libgstmpg123.so</filename> + <basename>libgstmpg123.so</basename> + <version>0.11.94</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>mpg123audiodec</name> + <longname>mpg123 mp3 decoder</longname> + <class>Codec/Decoder/Audio</class> + <description>Decodes mp3 streams using the mpg123 library</description> + <author>Carlos Rafael Giani <dv@pseudoterminal.org></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>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</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>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</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml index 16e92fcb..cc1ab4c6 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>0.11.2</version> + <version>0.11.94</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 f5a7b428..8e659d07 100644 --- a/docs/plugins/inspect/plugin-opencv.xml +++ b/docs/plugins/inspect/plugin-opencv.xml @@ -3,10 +3,10 @@ <description>GStreamer OpenCV Plugins</description> <filename>../../ext/opencv/.libs/libgstopencv.so</filename> <basename>libgstopencv.so</basename> - <version>0.10.22.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,13 +20,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -41,13 +41,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -62,13 +62,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -83,13 +83,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -104,13 +104,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -125,13 +125,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -146,13 +146,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -167,13 +167,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -188,13 +188,34 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb</details> + <details>video/x-raw, format=(string)RGB, 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-rgb</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + </caps> + </pads> + </element> + <element> + <name>motioncells</name> + <longname>motioncells</longname> + <class>Filter/Effect/Video</class> + <description>Performs motion detection on videos and images, providing detected motion cells index via bus messages</description> + <author>Robert Jobbagy <jobbagy dot robert at gmail dot com>, Nicola Murino <nicola dot murino at gmail.com></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>video/x-raw, format=(string)RGB, 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)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -209,13 +230,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -230,13 +251,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -244,20 +265,20 @@ <name>templatematch</name> <longname>templatematch</longname> <class>Filter/Effect/Video</class> - <description>Performs template matching on videos and images, providing detected positions via bus messages</description> + <description>Performs template matching on videos and images, providing detected positions via bus messages.</description> <author>Noam Lewis <jones.noamle@gmail.com></author> <pads> <caps> <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml index 8fdfdef1..a2a54b5e 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>0.11.92</version> + <version>0.11.94</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 e6301472..c572da06 100644 --- a/docs/plugins/inspect/plugin-pnm.xml +++ b/docs/plugins/inspect/plugin-pnm.xml @@ -3,10 +3,10 @@ <description>PNM plugin</description> <filename>../../gst/pnm/.libs/libgstpnm.so</filename> <basename>libgstpnm.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -41,7 +41,7 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8</details> + <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml index ecb29b7c..c08c5ea2 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>0.11.92</version> + <version>0.11.94</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 77063e87..71463756 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>0.11.92</version> + <version>0.11.94</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 61848db3..17715dc4 100644 --- a/docs/plugins/inspect/plugin-resindvd.xml +++ b/docs/plugins/inspect/plugin-resindvd.xml @@ -1,9 +1,9 @@ <plugin> <name>resindvd</name> <description>Resin DVD playback elements</description> - <filename>../../ext/resindvd/.libs/libresindvd.so</filename> - <basename>libresindvd.so</basename> - <version>0.10.23.1</version> + <filename>../../ext/resindvd/.libs/libgstresindvd.so</filename> + <basename>libgstresindvd.so</basename> + <version>0.11.94</version> <license>GPL</license> <source>gst-plugins-bad</source> <package>GStreamer</package> @@ -20,19 +20,19 @@ <name>audio</name> <direction>source</direction> <presence>sometimes</presence> - <details>audio/x-raw-int; audio/x-raw-float</details> + <details>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details> </caps> <caps> <name>subpicture</name> <direction>source</direction> <presence>sometimes</presence> - <details>video/x-dvd-subpicture</details> + <details>subpicture/x-dvd</details> </caps> <caps> <name>video</name> <direction>source</direction> <presence>sometimes</presence> - <details>video/x-raw-yuv</details> + <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml index fb691783..2c3d636d 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>0.11.92</version> + <version>0.11.94</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 f6bc8dc0..67ba654b 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>0.11.92</version> + <version>0.11.94</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 e06e698e..34a54b94 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>0.11.92</version> + <version>0.11.94</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 67e9ae50..5042e0f2 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>0.11.92</version> + <version>0.11.94</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 31ab6959..6023490c 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>0.11.90</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64, ARGB }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> </pads> </element> @@ -41,7 +41,7 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64, ARGB }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> + <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details> </caps> <caps> <name>src</name> diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml index a69a29e1..c95fe817 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>0.11.92</version> + <version>0.11.94</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 70fb1679..78f03a0f 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>0.11.92</version> + <version>0.11.94</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 3919b4a2..efee7536 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>0.11.92</version> + <version>0.11.94</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 56d19e23..b1bbedc2 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>0.11.92</version> + <version>0.11.94</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 626347ff..8ea2c2f6 100644 --- a/docs/plugins/inspect/plugin-soundtouch.xml +++ b/docs/plugins/inspect/plugin-soundtouch.xml @@ -3,10 +3,10 @@ <description>Audio Pitch Controller & BPM Detection</description> <filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename> <basename>libgstsoundtouch.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,20 +20,20 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-float, width=(int)32, endianness=(int)1234, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> + <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-float, width=(int)32, endianness=(int)1234, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> + <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> </pads> </element> <element> <name>pitch</name> <longname>Pitch controller</longname> - <class>Filter/Converter/Audio</class> + <class>Filter/Effect/Audio</class> <description>Control the pitch of an audio stream</description> <author>Wouter Paesen <wouter@blue-gate.be></author> <pads> @@ -41,13 +41,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-float, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int)1234, width=(int)32</details> + <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-float, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int)1234, width=(int)32</details> + <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml new file mode 100644 index 00000000..521de7ac --- /dev/null +++ b/docs/plugins/inspect/plugin-spandsp.xml @@ -0,0 +1,34 @@ +<plugin> + <name>spandsp</name> + <description>libspandsp plugin</description> + <filename>../../ext/spandsp/.libs/libgstspandsp.so</filename> + <basename>libgstspandsp.so</basename> + <version>0.11.94</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>spanplc</name> + <longname>SpanDSP PLC</longname> + <class>Filter/Effect/Audio</class> + <description>Adds packet loss concealment to audio</description> + <author>Youness Alaoui <youness.alaoui@collabora.co.uk></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)1</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)1</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml index 502b5e45..d1ab12d4 100644 --- a/docs/plugins/inspect/plugin-speed.xml +++ b/docs/plugins/inspect/plugin-speed.xml @@ -3,10 +3,10 @@ <description>Set speed/pitch on audio/raw streams (resampler)</description> <filename>../../gst/speed/.libs/libgstspeed.so</filename> <basename>libgstspeed.so</basename> - <version>0.10.23.1</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> - <package>GStreamer Bad Plug-ins git</package> + <package>GStreamer Bad Plug-ins source release</package> <origin>Unknown package origin</origin> <elements> <element> @@ -20,13 +20,13 @@ <name>sink</name> <direction>sink</direction> <presence>always</presence> - <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</details> + <details>audio/x-raw, format=(string){ F32LE, S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details> </caps> <caps> <name>src</name> <direction>source</direction> <presence>always</presence> - <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</details> + <details>audio/x-raw, format=(string){ F32LE, S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml index 45ca7157..61535f5a 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>0.11.92</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> @@ -26,7 +26,7 @@ <name>src</name> <direction>source</direction> <presence>always</presence> - <details>video/x-dirac, parsed=(boolean)true, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], pixel-aspect-ratio=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean){ true, false }, profile=(int)[ 0, 2147483647 ], level=(int)[ 0, 2147483647 ]</details> + <details>video/x-dirac, parsed=(boolean)true, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], pixel-aspect-ratio=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string){ progressive, interleaved }, profile=(string){ vc2-low-delay, vc2-simple, vc2-main, main }, level=(string){ 0, 1, 128 }</details> </caps> </pads> </element> diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml index 78ad9345..aaf86ea4 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>0.11.92</version> + <version>0.11.94</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 new file mode 100644 index 00000000..5a835e86 --- /dev/null +++ b/docs/plugins/inspect/plugin-voamrwbenc.xml @@ -0,0 +1,34 @@ +<plugin> + <name>voamrwbenc</name> + <description>Adaptive Multi-Rate Wide-Band Encoder</description> + <filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename> + <basename>libgstvoamrwbenc.so</basename> + <version>0.11.94</version> + <license>unknown</license> + <source>gst-plugins-bad</source> + <package>GStreamer Bad Plug-ins source release</package> + <origin>Unknown package origin</origin> + <elements> + <element> + <name>voamrwbenc</name> + <longname>AMR-WB audio encoder</longname> + <class>Codec/Encoder/Audio</class> + <description>Adaptive Multi-Rate Wideband audio encoder</description> + <author>Renato Araujo <renato.filho@indt.org.br></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)16000, channels=(int)1</details> + </caps> + <caps> + <name>src</name> + <direction>source</direction> + <presence>always</presence> + <details>audio/AMR-WB, rate=(int)16000, channels=(int)1</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-vp8.xml b/docs/plugins/inspect/plugin-vp8.xml index 073b531d..fcfa221f 100644 --- a/docs/plugins/inspect/plugin-vp8.xml +++ b/docs/plugins/inspect/plugin-vp8.xml @@ -3,7 +3,7 @@ <description>VP8 plugin</description> <filename>../../ext/vp8/.libs/libgstvp8.so</filename> <basename>libgstvp8.so</basename> - <version>0.11.92</version> + <version>0.11.94</version> <license>LGPL</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 new file mode 100644 index 00000000..758a8524 --- /dev/null +++ b/docs/plugins/inspect/plugin-waylandsink.xml @@ -0,0 +1,28 @@ +<plugin> + <name>waylandsink</name> + <description>Wayland Video Sink</description> + <filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename> + <basename>libgstwaylandsink.so</basename> + <version>0.11.94</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>waylandsink</name> + <longname>wayland video sink</longname> + <class>Sink/Video</class> + <description>Output to wayland surface</description> + <author>Sreerenj Balachandran <sreerenj.balachandran@intel.com></author> + <pads> + <caps> + <name>sink</name> + <direction>sink</direction> + <presence>always</presence> + <details>video/x-raw, format=(string)BGRA, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details> + </caps> + </pads> + </element> + </elements> +</plugin>
\ No newline at end of file diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml index 115f945b..ba12fc4b 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>0.11.92</version> + <version>0.11.94</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 feed829b..2ad19fd3 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>0.11.92</version> + <version>0.11.94</version> <license>LGPL</license> <source>gst-plugins-bad</source> <package>GStreamer Bad Plug-ins source release</package> diff --git a/ext/Makefile.in b/ext/Makefile.in index ecbe64aa..093e8b7f 100644 --- a/ext/Makefile.in +++ b/ext/Makefile.in @@ -319,6 +319,8 @@ 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@ @@ -326,6 +328,8 @@ 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@ @@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -368,6 +371,10 @@ 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@ @@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in index 253fa9ab..d44dc873 100644 --- a/ext/apexsink/Makefile.in +++ b/ext/apexsink/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in index a6bbf4f2..2b6e70a1 100644 --- a/ext/assrender/Makefile.in +++ b/ext/assrender/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in index f19442af..f41116a2 100644 --- a/ext/bz2/Makefile.in +++ b/ext/bz2/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/cdaudio/Makefile.in b/ext/cdaudio/Makefile.in index 9b20900b..1df0738c 100644 --- a/ext/cdaudio/Makefile.in +++ b/ext/cdaudio/Makefile.in @@ -337,6 +337,8 @@ 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@ @@ -344,6 +346,8 @@ 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@ @@ -358,7 +362,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -386,6 +389,10 @@ 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@ @@ -512,6 +519,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/celt/Makefile.in b/ext/celt/Makefile.in index bb130568..b46a7861 100644 --- a/ext/celt/Makefile.in +++ b/ext/celt/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in index 9da0bac4..25e50dfe 100644 --- a/ext/chromaprint/Makefile.in +++ b/ext/chromaprint/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/cog/Makefile.in b/ext/cog/Makefile.in index 5ede7aba..f45e18fe 100644 --- a/ext/cog/Makefile.in +++ b/ext/cog/Makefile.in @@ -385,6 +385,8 @@ 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@ @@ -392,6 +394,8 @@ 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@ @@ -406,7 +410,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -434,6 +437,10 @@ 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@ @@ -560,6 +567,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in index 9998a995..d56c6c72 100644 --- a/ext/curl/Makefile.in +++ b/ext/curl/Makefile.in @@ -348,6 +348,8 @@ 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@ @@ -355,6 +357,8 @@ 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@ @@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +400,10 @@ 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@ @@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in index 61d51c10..192afaa4 100644 --- a/ext/dc1394/Makefile.in +++ b/ext/dc1394/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/dirac/Makefile.in b/ext/dirac/Makefile.in index 16e36fc0..e64af3d4 100644 --- a/ext/dirac/Makefile.in +++ b/ext/dirac/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in index 686676cb..fa631d05 100644 --- a/ext/directfb/Makefile.in +++ b/ext/directfb/Makefile.in @@ -351,6 +351,8 @@ 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@ @@ -358,6 +360,8 @@ 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@ @@ -372,7 +376,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -400,6 +403,10 @@ 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@ @@ -526,6 +533,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in index 37b79f74..a6660a33 100644 --- a/ext/dts/Makefile.in +++ b/ext/dts/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in index 1465bc03..8d34c4e9 100644 --- a/ext/faac/Makefile.in +++ b/ext/faac/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in index 49a36a1c..21e6947f 100644 --- a/ext/faad/Makefile.in +++ b/ext/faad/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in index 922cf5b3..4e75a25b 100644 --- a/ext/flite/Makefile.in +++ b/ext/flite/Makefile.in @@ -340,6 +340,8 @@ 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@ @@ -347,6 +349,8 @@ 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@ @@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -389,6 +392,10 @@ 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@ @@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/flite/gstflitetestsrc.c b/ext/flite/gstflitetestsrc.c index e7efc20b..15bcaab7 100644 --- a/ext/flite/gstflitetestsrc.c +++ b/ext/flite/gstflitetestsrc.c @@ -177,6 +177,9 @@ gst_flite_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps) GstStructure *structure; gint channels; + caps = gst_caps_truncate (caps); + caps = gst_caps_make_writable (caps); + structure = gst_caps_get_structure (caps, 0); gst_structure_fixate_field_nearest_int (structure, "channels", 2); diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in index 705ee201..64bac624 100644 --- a/ext/gme/Makefile.in +++ b/ext/gme/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/gsettings/Makefile.in b/ext/gsettings/Makefile.in index 5d46ccb8..a141da0f 100644 --- a/ext/gsettings/Makefile.in +++ b/ext/gsettings/Makefile.in @@ -352,6 +352,8 @@ 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@ @@ -359,6 +361,8 @@ 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@ @@ -373,7 +377,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -401,6 +404,10 @@ 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@ @@ -527,6 +534,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in index 49827359..d6cbd68d 100644 --- a/ext/gsm/Makefile.in +++ b/ext/gsm/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/jasper/Makefile.in b/ext/jasper/Makefile.in index d87007b1..365de735 100644 --- a/ext/jasper/Makefile.in +++ b/ext/jasper/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in index 70a81a3c..63d30e5c 100644 --- a/ext/kate/Makefile.in +++ b/ext/kate/Makefile.in @@ -353,6 +353,8 @@ 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@ @@ -360,6 +362,8 @@ 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@ @@ -374,7 +378,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -402,6 +405,10 @@ 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@ @@ -528,6 +535,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c index fb84c4c1..239bbb3d 100644 --- a/ext/kate/gstkateenc.c +++ b/ext/kate/gstkateenc.c @@ -527,7 +527,7 @@ gst_kate_enc_setcaps (GstPad * pad, GstCaps * caps) GST_ELEMENT_WARNING (ke, LIBRARY, SETTINGS, (NULL), ("Category set to '%s', but input is text-based.", ke->category)); } - } else if (gst_structure_has_name (s, "video/x-dvd-subpicture")) { + } else if (gst_structure_has_name (s, "subpicture/x-dvd")) { if (strcmp (ke->category, "SUB") == 0 || strcmp (ke->category, "subtitles") == 0) { GST_ELEMENT_WARNING (ke, LIBRARY, SETTINGS, (NULL), diff --git a/ext/kate/gstkatespu.h b/ext/kate/gstkatespu.h index b89e7934..f0c98944 100644 --- a/ext/kate/gstkatespu.h +++ b/ext/kate/gstkatespu.h @@ -33,7 +33,7 @@ #define GST_KATE_STM_TO_GST(stm) ((GST_MSECOND * 1024 * (stm)) / 90) #define GST_KATE_GST_TO_STM(gst) ((int)(((gst) * 90000 ) / 1024)) -#define GST_KATE_SPU_MIME_TYPE "video/x-dvd-subpicture" +#define GST_KATE_SPU_MIME_TYPE "subpicture/x-dvd" G_BEGIN_DECLS diff --git a/ext/kate/gstkateutil.c b/ext/kate/gstkateutil.c index d4ca3112..a5eb838f 100644 --- a/ext/kate/gstkateutil.c +++ b/ext/kate/gstkateutil.c @@ -299,7 +299,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder, } if (strcmp (decoder->k.ki->category, "K-SPU") == 0 || strcmp (decoder->k.ki->category, "spu-subtitles") == 0) { - *src_caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture"); + *src_caps = gst_caps_new_empty_simple ("subpicture/x-dvd"); } else if (decoder->k.ki->text_markup_type == kate_markup_none) { *src_caps = gst_caps_new_empty_simple ("text/plain"); } else { diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in index da032ce0..be850654 100644 --- a/ext/ladspa/Makefile.in +++ b/ext/ladspa/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in index ffd43063..5749c151 100644 --- a/ext/libmms/Makefile.in +++ b/ext/libmms/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in index c22f5f88..bd6d4a84 100644 --- a/ext/lv2/Makefile.in +++ b/ext/lv2/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in index cc3387ae..c9340fff 100644 --- a/ext/mimic/Makefile.in +++ b/ext/mimic/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in index 7dd5832a..e0117b40 100644 --- a/ext/modplug/Makefile.in +++ b/ext/modplug/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc index 103812eb..e2a17864 100644 --- a/ext/modplug/gstmodplug.cc +++ b/ext/modplug/gstmodplug.cc @@ -565,7 +565,8 @@ gst_modplug_sinkpad_activate (GstPad * sinkpad, GstObject * parent) goto activate_push; } - pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL); + pull_mode = gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE); gst_query_unref (query); if (!pull_mode) diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in index 2ef44b81..801b37b5 100644 --- a/ext/mpeg2enc/Makefile.in +++ b/ext/mpeg2enc/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/mpg123/Makefile.in b/ext/mpg123/Makefile.in index d3e7b699..10dda6d3 100644 --- a/ext/mpg123/Makefile.in +++ b/ext/mpg123/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/mpg123/gstmpg123audiodec.c b/ext/mpg123/gstmpg123audiodec.c index ec6a2fc1..adaa54f0 100644 --- a/ext/mpg123/gstmpg123audiodec.c +++ b/ext/mpg123/gstmpg123audiodec.c @@ -616,7 +616,7 @@ static gboolean plugin_init (GstPlugin * plugin) { return gst_element_register (plugin, "mpg123audiodec", - GST_RANK_NONE, gst_mpg123_audio_dec_get_type ()); + GST_RANK_MARGINAL, gst_mpg123_audio_dec_get_type ()); } GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in index b1d34c62..a10fe5fa 100644 --- a/ext/mplex/Makefile.in +++ b/ext/mplex/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in index f6f7aa11..2ffe9003 100644 --- a/ext/musepack/Makefile.in +++ b/ext/musepack/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/musicbrainz/Makefile.in b/ext/musicbrainz/Makefile.in index 55588b5e..3faa9b3f 100644 --- a/ext/musicbrainz/Makefile.in +++ b/ext/musicbrainz/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/mythtv/Makefile.in b/ext/mythtv/Makefile.in index 5c347b3f..9d31e39c 100644 --- a/ext/mythtv/Makefile.in +++ b/ext/mythtv/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c index dfb34876..bc71cd4e 100644 --- a/ext/mythtv/gstmythtvsrc.c +++ b/ext/mythtv/gstmythtvsrc.c @@ -598,8 +598,7 @@ gst_mythtv_src_start (GstBaseSrc * bsrc) src->content_size = gmyth_file_get_filesize (src->file); - msg = gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES, - src->content_size); + msg = gst_message_new_duration_changed (GST_OBJECT (src)); gst_element_post_message (GST_ELEMENT (src), msg); src->do_start = FALSE; @@ -608,8 +607,7 @@ gst_mythtv_src_start (GstBaseSrc * bsrc) gst_segment_set_duration (&basesrc->segment, GST_FORMAT_BYTES, src->content_size); gst_element_post_message (GST_ELEMENT (src), - gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES, - src->content_size)); + gst_message_new_duration_changed (GST_OBJECT (src))); #if 0 gst_pad_push_event (GST_BASE_SRC_PAD (GST_BASE_SRC (src)), gst_event_new_new_segment (TRUE, 1.0, diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in index 70065ab0..3e9a3d3e 100644 --- a/ext/nas/Makefile.in +++ b/ext/nas/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in index 8c28ac70..09ddb924 100644 --- a/ext/neon/Makefile.in +++ b/ext/neon/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in index b058e6dd..ff76640a 100644 --- a/ext/ofa/Makefile.in +++ b/ext/ofa/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in index ac45642a..b2435aad 100644 --- a/ext/openal/Makefile.in +++ b/ext/openal/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in index 966b71b3..2719d158 100644 --- a/ext/opencv/Makefile.in +++ b/ext/opencv/Makefile.in @@ -373,6 +373,8 @@ 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@ @@ -380,6 +382,8 @@ 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@ @@ -394,7 +398,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -422,6 +425,10 @@ 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@ @@ -548,6 +555,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c index ad5758c4..04d5de34 100644 --- a/ext/opencv/gstmotioncells.c +++ b/ext/opencv/gstmotioncells.c @@ -258,10 +258,14 @@ gst_motion_cells_class_init (GstMotioncellsClass * klass) g_param_spec_boolean ("usealpha", "Use alpha", "Use or not alpha blending on frames with motion cells", TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +#if 0 + /* FIXME: should not be a long property, make it either gint or gint64 + * (is this property actually used or useful for anything?) */ g_object_class_install_property (gobject_class, PROP_DATE, g_param_spec_long ("date", "Motion Cell Date", "Current Date in milliseconds", DATE_MIN, DATE_MAX, DATE_DEF, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +#endif g_object_class_install_property (gobject_class, PROP_DATAFILE, g_param_spec_string ("datafile", "DataFile", "Location of motioncells data file (empty string means no saving)", diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in index a17bead7..7ee66bfa 100644 --- a/ext/opus/Makefile.in +++ b/ext/opus/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c index 0e2805cc..ab7221d7 100644 --- a/ext/opus/gstopusdec.c +++ b/ext/opus/gstopusdec.c @@ -375,7 +375,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer) GST_DEBUG_OBJECT (dec, "Creating decoder with %d channels, %d Hz", dec->n_channels, dec->sample_rate); -#ifndef GST_DISABLE_DEBUG +#ifndef GST_DISABLE_GST_DEBUG gst_opus_common_log_channel_mapping_table (GST_ELEMENT (dec), opusdec_debug, "Mapping table", dec->n_channels, dec->channel_mapping); #endif diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c index 337be8c0..d9917951 100644 --- a/ext/opus/gstopusenc.c +++ b/ext/opus/gstopusenc.c @@ -287,7 +287,7 @@ gst_opus_enc_finalize (GObject * object) enc = GST_OPUS_ENC (object); - g_mutex_free (enc->property_lock); + g_mutex_clear (&enc->property_lock); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -299,7 +299,7 @@ gst_opus_enc_init (GstOpusEnc * enc) GST_DEBUG_OBJECT (enc, "init"); - enc->property_lock = g_mutex_new (); + g_mutex_init (&enc->property_lock); enc->n_channels = -1; enc->sample_rate = -1; @@ -574,7 +574,7 @@ gst_opus_enc_setup_channel_mappings (GstOpusEnc * enc, } } -#ifndef GST_DISABLE_DEBUG +#ifndef GST_DISABLE_GST_DEBUG GST_INFO_OBJECT (enc, "Mapping tables built: %d channels, %d stereo streams", enc->n_channels, enc->n_stereo_streams); @@ -608,7 +608,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info) enc = GST_OPUS_ENC (benc); - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); enc->n_channels = GST_AUDIO_INFO_CHANNELS (info); enc->sample_rate = GST_AUDIO_INFO_RATE (info); @@ -622,7 +622,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info) enc->state = NULL; } if (!gst_opus_enc_setup (enc)) { - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); return FALSE; } @@ -631,7 +631,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info) /* feedback to base class */ gst_opus_enc_setup_base_class (enc, benc); - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); return TRUE; } @@ -641,7 +641,7 @@ gst_opus_enc_setup (GstOpusEnc * enc) { int error = OPUS_OK; -#ifndef GST_DISABLE_DEBUG +#ifndef GST_DISABLE_GST_DEBUG GST_DEBUG_OBJECT (enc, "setup: %d Hz, %d channels, %d stereo streams, family %d", enc->sample_rate, enc->n_channels, enc->n_stereo_streams, @@ -793,7 +793,7 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf) gint outsize; GstBuffer *outbuf; - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); if (G_LIKELY (buf)) { gst_buffer_map (buf, &map, GST_MAP_READ); @@ -859,7 +859,7 @@ done: if (bdata) gst_buffer_unmap (buf, &map); - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); if (mdata) g_free (mdata); @@ -914,7 +914,7 @@ gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value, enc = GST_OPUS_ENC (object); - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); switch (prop_id) { case PROP_AUDIO: @@ -955,7 +955,7 @@ gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value, break; } - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); } static void @@ -967,12 +967,12 @@ gst_opus_enc_set_property (GObject * object, guint prop_id, enc = GST_OPUS_ENC (object); #define GST_OPUS_UPDATE_PROPERTY(prop,type,ctl) do { \ - g_mutex_lock (enc->property_lock); \ + g_mutex_lock (&enc->property_lock); \ enc->prop = g_value_get_##type (value); \ if (enc->state) { \ opus_multistream_encoder_ctl (enc->state, OPUS_SET_##ctl (enc->prop)); \ } \ - g_mutex_unlock (enc->property_lock); \ + g_mutex_unlock (&enc->property_lock); \ } while(0) switch (prop_id) { @@ -986,18 +986,18 @@ gst_opus_enc_set_property (GObject * object, guint prop_id, GST_OPUS_UPDATE_PROPERTY (bandwidth, enum, BANDWIDTH); break; case PROP_FRAME_SIZE: - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); enc->frame_size = g_value_get_enum (value); enc->frame_samples = gst_opus_enc_get_frame_samples (enc); gst_opus_enc_setup_base_class (enc, GST_AUDIO_ENCODER (enc)); - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); break; case PROP_CBR: /* this one has an opposite meaning to the opus ctl... */ - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); enc->cbr = g_value_get_boolean (value); opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (!enc->cbr)); - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); break; case PROP_CONSTRAINED_VBR: GST_OPUS_UPDATE_PROPERTY (constrained_vbr, boolean, VBR_CONSTRAINT); @@ -1015,9 +1015,9 @@ gst_opus_enc_set_property (GObject * object, guint prop_id, GST_OPUS_UPDATE_PROPERTY (packet_loss_percentage, int, PACKET_LOSS_PERC); break; case PROP_MAX_PAYLOAD_SIZE: - g_mutex_lock (enc->property_lock); + g_mutex_lock (&enc->property_lock); enc->max_payload_size = g_value_get_uint (value); - g_mutex_unlock (enc->property_lock); + g_mutex_unlock (&enc->property_lock); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); diff --git a/ext/opus/gstopusenc.h b/ext/opus/gstopusenc.h index 00f1b991..df994e30 100644 --- a/ext/opus/gstopusenc.h +++ b/ext/opus/gstopusenc.h @@ -54,7 +54,7 @@ struct _GstOpusEnc { OpusMSEncoder *state; /* Locks those properties which may be changed at play time */ - GMutex *property_lock; + GMutex property_lock; /* properties */ gboolean audio_or_voip; diff --git a/ext/resindvd/Makefile.am b/ext/resindvd/Makefile.am index 9c3651e7..77f6a876 100644 --- a/ext/resindvd/Makefile.am +++ b/ext/resindvd/Makefile.am @@ -5,30 +5,27 @@ plugin_LTLIBRARIES = libgstresindvd.la libgstresindvd_la_SOURCES = \ plugin.c \ resindvdbin.c \ - rsnaudiomunge.c \ - rsndec.c \ - rsnstreamselector.c \ resindvdsrc.c \ + rsndec.c \ gstmpegdesc.c \ gstmpegdemux.c \ gstpesfilter.c \ - rsnparsetter.c \ - rsnwrappedbuffer.c + rsninputselector.c \ + # rsnparsetter.c \ + # rsnwrappedbuffer.c libgstresindvd_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) $(DVDNAV_CFLAGS) libgstresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ --lgstinterfaces-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \ --lgstpbutils-$(GST_API_VERSION) \ +-lgstvideo-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \ $(GST_BASE_LIBS) $(GST_LIBS) $(DVDNAV_LIBS) libgstresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstresindvd_la_LIBTOOLFLAGS = --tag=disable-static noinst_HEADERS = resindvdbin.h \ - rsnaudiomunge.h \ rsndec.h \ - rsnstreamselector.h \ + rsninputselector.h \ resindvdsrc.h \ gstmpegdefs.h \ gstmpegdesc.h \ diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in index 49562f0f..8b6ff0e1 100644 --- a/ext/resindvd/Makefile.in +++ b/ext/resindvd/Makefile.in @@ -134,14 +134,11 @@ libgstresindvd_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libgstresindvd_la_OBJECTS = libgstresindvd_la-plugin.lo \ libgstresindvd_la-resindvdbin.lo \ - libgstresindvd_la-rsnaudiomunge.lo libgstresindvd_la-rsndec.lo \ - libgstresindvd_la-rsnstreamselector.lo \ - libgstresindvd_la-resindvdsrc.lo \ + libgstresindvd_la-resindvdsrc.lo libgstresindvd_la-rsndec.lo \ libgstresindvd_la-gstmpegdesc.lo \ libgstresindvd_la-gstmpegdemux.lo \ libgstresindvd_la-gstpesfilter.lo \ - libgstresindvd_la-rsnparsetter.lo \ - libgstresindvd_la-rsnwrappedbuffer.lo + libgstresindvd_la-rsninputselector.lo libgstresindvd_la_OBJECTS = $(am_libgstresindvd_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -353,6 +350,8 @@ 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@ @@ -360,6 +359,8 @@ 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@ @@ -374,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -402,6 +402,10 @@ 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@ @@ -528,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -618,31 +623,28 @@ plugin_LTLIBRARIES = libgstresindvd.la libgstresindvd_la_SOURCES = \ plugin.c \ resindvdbin.c \ - rsnaudiomunge.c \ - rsndec.c \ - rsnstreamselector.c \ resindvdsrc.c \ + rsndec.c \ gstmpegdesc.c \ gstmpegdemux.c \ gstpesfilter.c \ - rsnparsetter.c \ - rsnwrappedbuffer.c + rsninputselector.c \ + # rsnparsetter.c \ + # rsnwrappedbuffer.c libgstresindvd_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) $(DVDNAV_CFLAGS) libgstresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ --lgstinterfaces-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \ --lgstpbutils-$(GST_API_VERSION) \ +-lgstvideo-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \ $(GST_BASE_LIBS) $(GST_LIBS) $(DVDNAV_LIBS) libgstresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstresindvd_la_LIBTOOLFLAGS = --tag=disable-static noinst_HEADERS = resindvdbin.h \ - rsnaudiomunge.h \ rsndec.h \ - rsnstreamselector.h \ + rsninputselector.h \ resindvdsrc.h \ gstmpegdefs.h \ gstmpegdesc.h \ @@ -733,11 +735,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-plugin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-resindvdbin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsndec.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnparsetter.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnstreamselector.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsninputselector.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -774,12 +773,12 @@ libgstresindvd_la-resindvdbin.lo: resindvdbin.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdbin.lo `test -f 'resindvdbin.c' || echo '$(srcdir)/'`resindvdbin.c -libgstresindvd_la-rsnaudiomunge.lo: rsnaudiomunge.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnaudiomunge.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Tpo -c -o libgstresindvd_la-rsnaudiomunge.lo `test -f 'rsnaudiomunge.c' || echo '$(srcdir)/'`rsnaudiomunge.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Tpo $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnaudiomunge.c' object='libgstresindvd_la-rsnaudiomunge.lo' libtool=yes @AMDEPBACKSLASH@ +libgstresindvd_la-resindvdsrc.lo: resindvdsrc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-resindvdsrc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo $(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resindvdsrc.c' object='libgstresindvd_la-resindvdsrc.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnaudiomunge.lo `test -f 'rsnaudiomunge.c' || echo '$(srcdir)/'`rsnaudiomunge.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c libgstresindvd_la-rsndec.lo: rsndec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsndec.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsndec.Tpo -c -o libgstresindvd_la-rsndec.lo `test -f 'rsndec.c' || echo '$(srcdir)/'`rsndec.c @@ -788,20 +787,6 @@ libgstresindvd_la-rsndec.lo: rsndec.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsndec.lo `test -f 'rsndec.c' || echo '$(srcdir)/'`rsndec.c -libgstresindvd_la-rsnstreamselector.lo: rsnstreamselector.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnstreamselector.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Tpo -c -o libgstresindvd_la-rsnstreamselector.lo `test -f 'rsnstreamselector.c' || echo '$(srcdir)/'`rsnstreamselector.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Tpo $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnstreamselector.c' object='libgstresindvd_la-rsnstreamselector.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnstreamselector.lo `test -f 'rsnstreamselector.c' || echo '$(srcdir)/'`rsnstreamselector.c - -libgstresindvd_la-resindvdsrc.lo: resindvdsrc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-resindvdsrc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo $(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resindvdsrc.c' object='libgstresindvd_la-resindvdsrc.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c - libgstresindvd_la-gstmpegdesc.lo: gstmpegdesc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-gstmpegdesc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Tpo -c -o libgstresindvd_la-gstmpegdesc.lo `test -f 'gstmpegdesc.c' || echo '$(srcdir)/'`gstmpegdesc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Tpo $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Plo @@ -823,19 +808,12 @@ libgstresindvd_la-gstpesfilter.lo: gstpesfilter.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-gstpesfilter.lo `test -f 'gstpesfilter.c' || echo '$(srcdir)/'`gstpesfilter.c -libgstresindvd_la-rsnparsetter.lo: rsnparsetter.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnparsetter.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnparsetter.Tpo -c -o libgstresindvd_la-rsnparsetter.lo `test -f 'rsnparsetter.c' || echo '$(srcdir)/'`rsnparsetter.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnparsetter.Tpo $(DEPDIR)/libgstresindvd_la-rsnparsetter.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnparsetter.c' object='libgstresindvd_la-rsnparsetter.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnparsetter.lo `test -f 'rsnparsetter.c' || echo '$(srcdir)/'`rsnparsetter.c - -libgstresindvd_la-rsnwrappedbuffer.lo: rsnwrappedbuffer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnwrappedbuffer.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Tpo -c -o libgstresindvd_la-rsnwrappedbuffer.lo `test -f 'rsnwrappedbuffer.c' || echo '$(srcdir)/'`rsnwrappedbuffer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Tpo $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnwrappedbuffer.c' object='libgstresindvd_la-rsnwrappedbuffer.lo' libtool=yes @AMDEPBACKSLASH@ +libgstresindvd_la-rsninputselector.lo: rsninputselector.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsninputselector.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsninputselector.Tpo -c -o libgstresindvd_la-rsninputselector.lo `test -f 'rsninputselector.c' || echo '$(srcdir)/'`rsninputselector.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsninputselector.Tpo $(DEPDIR)/libgstresindvd_la-rsninputselector.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsninputselector.c' object='libgstresindvd_la-rsninputselector.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnwrappedbuffer.lo `test -f 'rsnwrappedbuffer.c' || echo '$(srcdir)/'`rsnwrappedbuffer.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsninputselector.lo `test -f 'rsninputselector.c' || echo '$(srcdir)/'`rsninputselector.c mostlyclean-libtool: -rm -f *.lo diff --git a/ext/resindvd/gstmpegdefs.h b/ext/resindvd/gstmpegdefs.h index 608769ae..a0429e7a 100644 --- a/ext/resindvd/gstmpegdefs.h +++ b/ext/resindvd/gstmpegdefs.h @@ -125,30 +125,56 @@ * 0x0F-0x7F ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved * 0x80-0xFF User Private */ -#define ST_RESERVED 0x00 -#define ST_VIDEO_MPEG1 0x01 -#define ST_VIDEO_MPEG2 0x02 -#define ST_AUDIO_MPEG1 0x03 -#define ST_AUDIO_MPEG2 0x04 -#define ST_PRIVATE_SECTIONS 0x05 -#define ST_PRIVATE_DATA 0x06 -#define ST_MHEG 0x07 -#define ST_DSMCC 0x08 -#define ST_H222_1 0x09 +#define ST_RESERVED 0x00 +#define ST_VIDEO_MPEG1 0x01 +#define ST_VIDEO_MPEG2 0x02 +#define ST_AUDIO_MPEG1 0x03 +#define ST_AUDIO_MPEG2 0x04 +#define ST_PRIVATE_SECTIONS 0x05 +#define ST_PRIVATE_DATA 0x06 +#define ST_MHEG 0x07 +#define ST_DSMCC 0x08 +#define ST_H222_1 0x09 /* later extensions */ -#define ST_AUDIO_AAC 0x0f -#define ST_VIDEO_MPEG4 0x10 -#define ST_VIDEO_H264 0x1b +#define ST_AUDIO_AAC_ADTS 0x0f +/* LATM/LOAS AAC syntax */ +#define ST_AUDIO_AAC_LOAS 0x11 +#define ST_VIDEO_MPEG4 0x10 +#define ST_VIDEO_H264 0x1b /* Un-official Dirac extension */ -#define ST_VIDEO_DIRAC 0xd1 +#define ST_VIDEO_DIRAC 0xd1 /* private stream types */ -#define ST_PS_AUDIO_AC3 0x81 -#define ST_PS_AUDIO_DTS 0x8a -#define ST_PS_AUDIO_LPCM 0x8b +#define ST_PS_AUDIO_AC3 0x81 +#define ST_PS_AUDIO_DTS 0x8a +#define ST_PS_AUDIO_LPCM 0x8b #define ST_PS_DVD_SUBPICTURE 0xff +/* Blu-ray related */ +#define ST_BD_AUDIO_LPCM 0x80 +#define ST_BD_AUDIO_AC3 0x81 +#define ST_BD_AUDIO_DTS 0x82 +#define ST_BD_AUDIO_AC3_TRUE_HD 0x83 +#define ST_BD_AUDIO_AC3_PLUS 0x84 +#define ST_BD_AUDIO_DTS_HD 0x85 +#define ST_BD_AUDIO_DTS_HD_MASTER_AUDIO 0x86 +#define ST_BD_AUDIO_EAC3 0x87 +#define ST_BD_PGS_SUBPICTURE 0x90 +#define ST_BD_IGS 0x91 +#define ST_BD_SUBTITLE 0x92 +#define ST_BD_SECONDARY_AC3_PLUS 0xa1 +#define ST_BD_SECONDARY_DTS_HD 0xa2 + +/* defined for VC1 extension in RP227 */ +#define ST_PRIVATE_EA 0xea + +/* HDV AUX stream mapping + * 0xA0 ISO/IEC 61834-11 + * 0xA1 ISO/IEC 61834-11 + */ +#define ST_HDV_AUX_A 0xa0 +#define ST_HDV_AUX_V 0xa1 /* Un-official time-code stream */ #define ST_PS_TIMECODE 0xd2 @@ -168,8 +194,19 @@ #define MPEG_MUX_RATE_MULT 50 +/* sync:4 == 00xx ! pts:3 ! 1 ! pts:15 ! 1 | pts:15 ! 1 */ +#define READ_TS(data, target, lost_sync_label) \ + if ((*data & 0x01) != 0x01) goto lost_sync_label; \ + target = ((guint64) (*data++ & 0x0E)) << 29; \ + target |= ((guint64) (*data++ )) << 22; \ + if ((*data & 0x01) != 0x01) goto lost_sync_label; \ + target |= ((guint64) (*data++ & 0xFE)) << 14; \ + target |= ((guint64) (*data++ )) << 7; \ + if ((*data & 0x01) != 0x01) goto lost_sync_label; \ + target |= ((guint64) (*data++ & 0xFE)) >> 1; + /* some extra GstFlowReturn values used internally */ -#define GST_FLOW_NEED_MORE_DATA GST_FLOW_CUSTOM_SUCCESS -#define GST_FLOW_LOST_SYNC GST_FLOW_CUSTOM_SUCCESS_1 +#define GST_FLOW_NEED_MORE_DATA GST_FLOW_CUSTOM_SUCCESS +#define GST_FLOW_LOST_SYNC GST_FLOW_CUSTOM_SUCCESS_1 #endif /* __GST_MPEG_DEFS_H__ */ diff --git a/ext/resindvd/gstmpegdemux.c b/ext/resindvd/gstmpegdemux.c index bfa88350..a687707a 100644 --- a/ext/resindvd/gstmpegdemux.c +++ b/ext/resindvd/gstmpegdemux.c @@ -24,6 +24,7 @@ #endif #include <string.h> +#include <gst/video/video.h> #include "gstmpegdefs.h" #include "gstmpegdemux.h" @@ -45,7 +46,7 @@ GST_DEBUG_CATEGORY_STATIC (gstflupsdemux_debug); #define GST_CAT_DEFAULT (gstflupsdemux_debug) -GST_DEBUG_CATEGORY_EXTERN (gstflupesfilter_debug); +GST_DEBUG_CATEGORY_EXTERN (mpegpspesfilter_debug); /* MPEG2Demux signals and args */ enum @@ -89,7 +90,7 @@ static GstStaticPadTemplate subpicture_template = GST_STATIC_PAD_TEMPLATE ("subpicture_%02x", GST_PAD_SRC, GST_PAD_SOMETIMES, - GST_STATIC_CAPS ("video/x-dvd-subpicture") + GST_STATIC_CAPS ("subpicture/x-dvd") ); static GstStaticPadTemplate private_template = @@ -104,16 +105,35 @@ static void gst_flups_demux_init (GstFluPSDemux * demux); static void gst_flups_demux_finalize (GstFluPSDemux * demux); static void gst_flups_demux_reset (GstFluPSDemux * demux); -static gboolean gst_flups_demux_sink_event (GstPad * pad, GstEvent * event); -static gboolean gst_flups_demux_src_event (GstPad * pad, GstEvent * event); -static gboolean gst_flups_demux_src_query (GstPad * pad, GstQuery * query); -static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer); +static gboolean gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); +static gboolean gst_flups_demux_sink_activate (GstPad * sinkpad, + GstObject * parent); +static gboolean gst_flups_demux_sink_activate_mode (GstPad * pad, + GstObject * parent, GstPadMode mode, gboolean active); +// static void gst_flups_demux_loop (GstPad * pad); + +static gboolean gst_flups_demux_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_flups_demux_src_query (GstPad * pad, GstObject * parent, + GstQuery * query); static GstStateChangeReturn gst_flups_demux_change_state (GstElement * element, GstStateChange transition); +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 GstElementClass *parent_class = NULL; +static void gst_segment_set_position (GstSegment * segment, GstFormat format, + guint64 position); +//static void gst_segment_set_duration (GstSegment * segment, GstFormat format, +// guint64 duration); + /*static guint gst_flups_demux_signals[LAST_SIGNAL] = { 0 };*/ GType @@ -132,6 +152,7 @@ gst_flups_demux_get_type (void) sizeof (GstFluPSDemux), 0, (GInstanceInitFunc) gst_flups_demux_init, + NULL }; flups_demux_type = @@ -159,14 +180,15 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass) gst_element_class_add_pad_template (element_class, klass->video_template); gst_element_class_add_pad_template (element_class, klass->audio_template); - gst_element_class_add_pad_template (element_class, klass->private_template); gst_element_class_add_pad_template (element_class, klass->subpicture_template); + 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_details_simple (element_class, "MPEG Program Demuxer", - "Codec/Demuxer", - "Demultiplexes MPEG Program Streams", "Wim Taymans <wim@fluendo.com>"); + gst_element_class_set_details_simple (element_class, + "MPEG Program Demuxer", "Codec/Demuxer", + "Demultiplexes MPEG Program Streams", + "Jan Schmidt <thaytan@noraisin.net>"); } static void @@ -191,8 +213,15 @@ gst_flups_demux_init (GstFluPSDemux * demux) GstFluPSDemuxClass *klass = GST_FLUPS_DEMUX_GET_CLASS (demux); demux->sinkpad = gst_pad_new_from_template (klass->sink_template, "sink"); - gst_pad_set_event_function (demux->sinkpad, gst_flups_demux_sink_event); - gst_pad_set_chain_function (demux->sinkpad, gst_flups_demux_chain); + gst_pad_set_event_function (demux->sinkpad, + GST_DEBUG_FUNCPTR (gst_flups_demux_sink_event)); + gst_pad_set_chain_function (demux->sinkpad, + GST_DEBUG_FUNCPTR (gst_flups_demux_chain)); + gst_pad_set_activate_function (demux->sinkpad, + GST_DEBUG_FUNCPTR (gst_flups_demux_sink_activate)); + gst_pad_set_activatemode_function (demux->sinkpad, + GST_DEBUG_FUNCPTR (gst_flups_demux_sink_activate_mode)); + gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad); demux->streams = @@ -230,8 +259,8 @@ gst_flups_demux_reset (GstFluPSDemux * demux) } p_ev = &demux->lang_codes; - gst_event_replace (p_ev, NULL); + gst_event_replace (p_ev, NULL); demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE); } @@ -259,7 +288,6 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) case ST_GST_VIDEO_MPEG1_OR_2: { gint mpeg_version = 1; - if (stream_type == ST_VIDEO_MPEG2 || (stream_type == ST_GST_VIDEO_MPEG1_OR_2 && demux->is_mpeg2_pack)) { mpeg_version = 2; @@ -287,45 +315,62 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) case ST_PRIVATE_DATA: case ST_MHEG: case ST_DSMCC: - case ST_AUDIO_AAC: + break; + case ST_AUDIO_AAC_ADTS: + template = klass->audio_template; + name = g_strdup_printf ("audio_%02x", id); + caps = gst_caps_new_simple ("audio/mpeg", + "mpegversion", G_TYPE_INT, 4, + "stream-format", G_TYPE_STRING, "adts", NULL); + break; + case ST_AUDIO_AAC_LOAS: // LATM/LOAS AAC syntax + template = klass->audio_template; + name = g_strdup_printf ("audio_%02x", id); + caps = gst_caps_new_simple ("audio/mpeg", + "mpegversion", G_TYPE_INT, 4, + "stream-format", G_TYPE_STRING, "loas", NULL); break; case ST_VIDEO_H264: template = klass->video_template; name = g_strdup_printf ("video_%02x", id); - caps = gst_caps_new_simple ("video/x-h264", NULL); + caps = gst_caps_new_empty_simple ("video/x-h264"); threshold = VIDEO_SEGMENT_THRESHOLD; break; case ST_PS_AUDIO_AC3: template = klass->audio_template; name = g_strdup_printf ("audio_%02x", id); - caps = gst_caps_new_simple ("audio/x-private1-ac3", NULL); + caps = gst_caps_new_empty_simple ("audio/x-private1-ac3"); break; case ST_PS_AUDIO_DTS: template = klass->audio_template; name = g_strdup_printf ("audio_%02x", id); - caps = gst_caps_new_simple ("audio/x-private1-dts", NULL); + caps = gst_caps_new_empty_simple ("audio/x-private1-dts"); break; case ST_PS_AUDIO_LPCM: template = klass->audio_template; name = g_strdup_printf ("audio_%02x", id); - caps = gst_caps_new_simple ("audio/x-private1-lpcm", NULL); + caps = gst_caps_new_empty_simple ("audio/x-private1-lpcm"); break; case ST_PS_DVD_SUBPICTURE: template = klass->subpicture_template; name = g_strdup_printf ("subpicture_%02x", id); - caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL); + caps = gst_caps_new_empty_simple ("subpicture/x-dvd"); break; case ST_GST_AUDIO_RAWA52: template = klass->audio_template; name = g_strdup_printf ("audio_%02x", id); - caps = gst_caps_new_simple ("audio/ac3", NULL); + caps = gst_caps_new_empty_simple ("audio/ac3"); break; default: break; } - if (name == NULL || template == NULL || caps == NULL) - return NULL; + if (name == NULL || template == NULL || caps == NULL) { + g_free (name); + if (caps) + gst_caps_unref (caps); + return FALSE; + } stream = g_new0 (GstFluPSStream, 1); stream->id = id; @@ -334,12 +379,21 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) stream->type = stream_type; stream->pad = gst_pad_new_from_template (template, name); stream->segment_thresh = threshold; - gst_pad_set_event_function (stream->pad, gst_flups_demux_src_event); - gst_pad_set_query_function (stream->pad, gst_flups_demux_src_query); + gst_pad_set_event_function (stream->pad, + GST_DEBUG_FUNCPTR (gst_flups_demux_src_event)); + gst_pad_set_query_function (stream->pad, + GST_DEBUG_FUNCPTR (gst_flups_demux_src_query)); gst_pad_use_fixed_caps (stream->pad); + + /* needed for set_caps to work */ + if (!gst_pad_set_active (stream->pad, TRUE)) { + GST_WARNING_OBJECT (demux, "Failed to activate pad %" GST_PTR_FORMAT, + stream->pad); + } + gst_pad_set_caps (stream->pad, caps); - gst_caps_unref (caps); GST_DEBUG_OBJECT (demux, "create pad %s, caps %" GST_PTR_FORMAT, name, caps); + gst_caps_unref (caps); g_free (name); return stream; @@ -357,7 +411,6 @@ 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_pad_set_active (stream->pad, TRUE); gst_element_add_pad (GST_ELEMENT (demux), stream->pad); demux->streams[id] = stream; @@ -377,17 +430,17 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, GstBuffer * buf) { GstFlowReturn result; - guint64 timestamp; + GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE; guint size; if (stream == NULL) goto no_stream; /* timestamps */ - if (demux->next_pts != G_MAXUINT64) - timestamp = MPEGTIME_TO_GSTTIME (demux->next_pts); - else - timestamp = GST_CLOCK_TIME_NONE; + 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); if (demux->current_scr != G_MAXUINT64) { GstClockTime cur_scr_time = MPEGTIME_TO_GSTTIME (demux->current_scr); @@ -403,27 +456,27 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, } /* OK, sent new segment now prepare the buffer for sending */ - /* caps */ - gst_buffer_set_caps (buf, GST_PAD_CAPS (stream->pad)); - GST_BUFFER_TIMESTAMP (buf) = timestamp; + GST_BUFFER_PTS (buf) = pts; + GST_BUFFER_DTS (buf) = dts; /* Set the buffer discont flag, and clear discont state on the stream */ if (stream->discont) { GST_DEBUG_OBJECT (demux, "discont buffer to pad %" GST_PTR_FORMAT - " with TS %" GST_TIME_FORMAT, stream->pad, GST_TIME_ARGS (timestamp)); - + " with PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT, + stream->pad, GST_TIME_ARGS (pts), GST_TIME_ARGS (dts)); GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); + stream->discont = FALSE; } - size = GST_BUFFER_SIZE (buf); + size = gst_buffer_get_size (buf); demux->next_pts = G_MAXUINT64; demux->next_dts = G_MAXUINT64; result = gst_pad_push (stream->pad, buf); - GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, time: %" + 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 (timestamp), + stream->id, stream->type, GST_TIME_ARGS (pts), size, gst_flow_get_name (result)); return result; @@ -437,7 +490,7 @@ no_stream: } } -static void +static inline void gst_flups_demux_mark_discont (GstFluPSDemux * demux) { gint id; @@ -453,111 +506,7 @@ gst_flups_demux_mark_discont (GstFluPSDemux * demux) } } -static void -gst_flups_demux_clear_times (GstFluPSDemux * demux) -{ - gint id; - - /* Clear the last ts for all streams */ - for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { - GstFluPSStream *stream = demux->streams[id]; - - if (stream) { - stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE; - } - } -} - -static void -gst_flups_demux_send_segment_updates (GstFluPSDemux * demux, - GstClockTime new_time) -{ - /* Advance all lagging streams by sending a segment update */ - gint id; - GstEvent *event = NULL; - - if (new_time > demux->src_segment.stop) - return; - - for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { - GstFluPSStream *stream = demux->streams[id]; - - if (stream) { - if (stream->last_ts == GST_CLOCK_TIME_NONE || - stream->last_ts < demux->src_segment.start) - stream->last_ts = demux->src_segment.start; - if (stream->last_ts + stream->segment_thresh < new_time) { -#if 0 - g_print ("Segment update to pad %s time %" GST_TIME_FORMAT " stop now %" - GST_TIME_FORMAT " last_stop %" GST_TIME_FORMAT "\n", - GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time), - GST_TIME_ARGS (demux->src_segment.stop), - GST_TIME_ARGS (demux->src_segment.last_stop)); -#endif - GST_DEBUG_OBJECT (demux, - "Segment update to pad %s time %" GST_TIME_FORMAT, - GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time)); - if (event == NULL) { - event = gst_event_new_new_segment_full (TRUE, - demux->src_segment.rate, demux->src_segment.applied_rate, - GST_FORMAT_TIME, new_time, - demux->src_segment.stop, - demux->src_segment.time + (new_time - demux->src_segment.start)); - } - gst_event_ref (event); - gst_pad_push_event (stream->pad, event); - stream->last_seg_start = stream->last_ts = new_time; - } - } - } - - if (event) - gst_event_unref (event); -} - -static void -gst_flups_demux_send_segment_close (GstFluPSDemux * demux) -{ - gint id; - GstEvent *event = NULL; - GstClockTime stop = demux->src_segment.stop; - - if (demux->src_segment.last_stop != -1 && demux->src_segment.last_stop > stop) - stop = demux->src_segment.last_stop; - - for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { - GstFluPSStream *stream = demux->streams[id]; - - if (stream) { - GstClockTime start = demux->src_segment.start; - - if (stream->last_seg_start != GST_CLOCK_TIME_NONE && - stream->last_seg_start > start) - start = stream->last_seg_start; - -#if 0 - g_print ("Segment close to pad %s start %" GST_TIME_FORMAT - " stop %" GST_TIME_FORMAT "\n", - GST_PAD_NAME (stream->pad), GST_TIME_ARGS (start), - GST_TIME_ARGS (stop)); -#endif - if (start > stop) { - g_print ("Problem on pad %s with start %" GST_TIME_FORMAT " > stop %" - GST_TIME_FORMAT "\n", - gst_object_get_name (GST_OBJECT (stream->pad)), - GST_TIME_ARGS (start), GST_TIME_ARGS (stop)); - } - event = gst_event_new_new_segment_full (TRUE, - demux->src_segment.rate, demux->src_segment.applied_rate, - GST_FORMAT_TIME, start, - stop, demux->src_segment.time + (start - demux->src_segment.start)); - if (event) - gst_pad_push_event (stream->pad, event); - } - } -} - -static gboolean +static inline gboolean gst_flups_demux_send_event (GstFluPSDemux * demux, GstEvent * event) { gint id; @@ -811,13 +760,124 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) return ret; } +static void +gst_flups_demux_flush (GstFluPSDemux * demux) +{ + GST_DEBUG_OBJECT (demux, "flushing demuxer"); + gst_segment_init (&demux->src_segment, GST_FORMAT_TIME); + gst_adapter_clear (demux->adapter); + gst_adapter_clear (demux->rev_adapter); + gst_pes_filter_drain (&demux->filter); + gst_flups_demux_clear_times (demux); + demux->adapter_offset = G_MAXUINT64; + demux->current_scr = G_MAXUINT64; + demux->bytes_since_scr = 0; + demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE); + demux->in_still = FALSE; +} + +static inline void +gst_flups_demux_clear_times (GstFluPSDemux * demux) +{ + gint id; + + /* Clear the last ts for all streams */ + for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { + GstFluPSStream *stream = demux->streams[id]; + + if (stream) { + stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE; + } + } +} + +static inline void +gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_time) +{ + gint id; + GstEvent *event = NULL; + + /* Advance all lagging streams by sending a segment update */ + if (new_time > demux->src_segment.stop) + return; + + for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { + GstFluPSStream *stream = demux->streams[id]; + + if (stream) { + if (stream->last_ts == GST_CLOCK_TIME_NONE || + stream->last_ts < demux->src_segment.start) + stream->last_ts = demux->src_segment.start; + if (stream->last_ts + stream->segment_thresh < new_time) { +#if 0 + g_print ("Gap event update to pad %s from time %" GST_TIME_FORMAT + " to %" GST_TIME_FORMAT "\n", GST_PAD_NAME (stream->pad), + GST_TIME_ARGS (stream->last_ts), GST_TIME_ARGS (new_time)); +#endif + GST_DEBUG_OBJECT (demux, + "Gap event update to pad %s from time %" GST_TIME_FORMAT " to %" + GST_TIME_FORMAT, GST_PAD_NAME (stream->pad), + GST_TIME_ARGS (stream->last_ts), GST_TIME_ARGS (new_time)); + event = gst_event_new_gap (stream->last_ts, new_time - stream->last_ts); + gst_pad_push_event (stream->pad, event); + stream->last_seg_start = stream->last_ts = new_time; + } + } + } +} + +static inline void +gst_flups_demux_close_segment (GstFluPSDemux * demux) +{ + gint id; + GstEvent *event = NULL; + GstClockTime stop = demux->src_segment.stop; + + if (demux->src_segment.position != -1 && demux->src_segment.position > stop) + stop = demux->src_segment.position; + + for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) { + GstFluPSStream *stream = demux->streams[id]; + + if (stream) { + GstClockTime start = demux->src_segment.start; + GstSegment segment; + + if (stream->last_seg_start != GST_CLOCK_TIME_NONE && + stream->last_seg_start > start) + start = stream->last_seg_start; + +#if 0 + g_print ("Segment close to pad %s start %" GST_TIME_FORMAT + " stop %" GST_TIME_FORMAT "\n", + GST_PAD_NAME (stream->pad), GST_TIME_ARGS (start), + GST_TIME_ARGS (stop)); +#endif + if (start > stop) { + GST_WARNING_OBJECT (demux, + "Problem on pad %s with start %" GST_TIME_FORMAT " > stop %" + GST_TIME_FORMAT "\n", + gst_object_get_name (GST_OBJECT (stream->pad)), + GST_TIME_ARGS (start), GST_TIME_ARGS (stop)); + } + gst_segment_init (&segment, GST_FORMAT_TIME); + segment.rate = demux->src_segment.rate; + segment.applied_rate = demux->src_segment.applied_rate; + segment.start = start; + segment.stop = stop; + segment.time = + demux->src_segment.time + (start - demux->src_segment.start); + event = gst_event_new_segment (&segment); + gst_pad_push_event (stream->pad, event); + } + } +} + static gboolean -gst_flups_demux_sink_event (GstPad * pad, GstEvent * event) +gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res = TRUE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: @@ -825,54 +885,45 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event) break; case GST_EVENT_FLUSH_STOP: gst_flups_demux_send_event (demux, event); - gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED); - gst_segment_init (&demux->src_segment, GST_FORMAT_TIME); - gst_adapter_clear (demux->adapter); - gst_adapter_clear (demux->rev_adapter); - demux->adapter_offset = G_MAXUINT64; - gst_pes_filter_drain (&demux->filter); - demux->current_scr = G_MAXUINT64; - demux->bytes_since_scr = 0; - demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE); - gst_flups_demux_clear_times (demux); + gst_flups_demux_flush (demux); break; - case GST_EVENT_NEWSEGMENT: + case GST_EVENT_SEGMENT: { - gboolean update; - gdouble rate; - GstFormat format; + const GstSegment *segment; + gint64 start, stop, time; - gint64 accum, dur; - gdouble arate; + gint64 base, dur; GstClockTimeDiff adjust; - gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format, - &start, &stop, &time); + /* Close current segment */ + gst_flups_demux_close_segment (demux); - if (format != GST_FORMAT_TIME) + gst_event_parse_segment (event, &segment); + + if (segment->format != GST_FORMAT_TIME) return FALSE; - dur = stop - start; + gst_segment_copy_into (segment, &demux->sink_segment); + + dur = segment->stop - segment->start; + + base = demux->sink_segment.base; + start = demux->sink_segment.start; + stop = demux->sink_segment.stop; + time = demux->sink_segment.time; demux->first_scr = GSTTIME_TO_MPEGTIME (start); demux->current_scr = demux->first_scr + demux->scr_adjust; demux->base_time = time; demux->bytes_since_scr = 0; - gst_segment_set_newsegment_full (&demux->sink_segment, update, rate, - arate, format, start, stop, time); - GST_DEBUG_OBJECT (demux, - "demux: got segment update %d start %" G_GINT64_FORMAT " stop %" - G_GINT64_FORMAT " time %" G_GINT64_FORMAT, update, start, stop, time); + "demux: received new segment start %" G_GINT64_FORMAT " stop %" + G_GINT64_FORMAT " time %" G_GINT64_FORMAT, start, stop, time); - accum = demux->sink_segment.accum; - start = demux->sink_segment.start; - stop = demux->sink_segment.stop; - - adjust = accum - start + SCR_MUNGE; - start = accum + SCR_MUNGE; + adjust = base - start + SCR_MUNGE; + start = base + SCR_MUNGE; if (adjust >= 0) demux->scr_adjust = GSTTIME_TO_MPEGTIME (adjust); @@ -881,32 +932,35 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event) if (stop != -1) { stop = start + dur; - if (demux->src_segment.last_stop != -1 - && demux->src_segment.last_stop > stop) - stop = demux->src_segment.last_stop; + if (demux->src_segment.position != -1 + && demux->src_segment.position > stop) + stop = demux->src_segment.position; } GST_DEBUG_OBJECT (demux, - "sending new segment: update %d rate %g format %d, start: %" + "sending new segment: rate %g format %d, start: %" G_GINT64_FORMAT ", stop: %" G_GINT64_FORMAT ", time: %" G_GINT64_FORMAT " scr_adjust: %" G_GINT64_FORMAT "(%" GST_TIME_FORMAT - ")", update, rate, format, start, stop, time, demux->scr_adjust, + ")", segment->rate, segment->format, start, stop, time, + demux->scr_adjust, GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->scr_adjust))); - gst_segment_set_newsegment_full (&demux->src_segment, update, - rate, arate, format, start, stop, time); + demux->src_segment.rate = segment->rate; + demux->src_segment.applied_rate = segment->applied_rate; + demux->src_segment.format = segment->format; + demux->src_segment.start = start; + demux->src_segment.stop = stop; + demux->src_segment.time = time; - gst_event_unref (event); - if (update) { - /* Segment closing, send it as per-pad updates to manage the accum - * properly */ - gst_flups_demux_send_segment_close (demux); - } else { - event = gst_event_new_new_segment_full (update, - rate, arate, GST_FORMAT_TIME, start, stop, time); - gst_flups_demux_send_event (demux, event); + if (demux->in_still && stop != -1) { + /* Generate gap buffers, due to closing segment from a still-frame */ + gst_flups_demux_send_gap_updates (demux, stop); } + gst_event_unref (event); + event = gst_event_new_segment (&demux->src_segment); + gst_flups_demux_send_event (demux, event); + break; } case GST_EVENT_EOS: @@ -921,8 +975,15 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event) case GST_EVENT_CUSTOM_DOWNSTREAM_OOB: { const GstStructure *structure = gst_event_get_structure (event); + gboolean in_still; - if (structure != NULL + if (gst_video_event_parse_still_frame (event, &in_still)) { + /* Remember the still-frame state, so we can generate a pre-roll + * GAP event when a segment event arrives */ + demux->in_still = in_still; + GST_INFO_OBJECT (demux, "still-state now %d", demux->in_still); + gst_flups_demux_send_event (demux, event); + } else if (structure != NULL && gst_structure_has_name (structure, "application/x-gst-dvd")) { res = gst_flups_demux_handle_dvd_event (demux, event); } else { @@ -930,23 +991,22 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event) } break; } + case GST_EVENT_CAPS: + gst_event_unref (event); + break; default: gst_flups_demux_send_event (demux, event); break; } - gst_object_unref (demux); - return res; } static gboolean -gst_flups_demux_src_event (GstPad * pad, GstEvent * event) +gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res = FALSE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: @@ -1011,13 +1071,10 @@ gst_flups_demux_src_event (GstPad * pad, GstEvent * event) break; } - gst_object_unref (demux); - return res; not_supported: { - gst_object_unref (demux); gst_event_unref (event); return FALSE; @@ -1025,12 +1082,10 @@ not_supported: } static gboolean -gst_flups_demux_src_query (GstPad * pad, GstQuery * query) +gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { gboolean res = FALSE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); GST_LOG_OBJECT (demux, "Have query of type %d on pad %" GST_PTR_FORMAT, GST_QUERY_TYPE (query), pad); @@ -1038,18 +1093,15 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query) switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION: { - GstPad *peer; + GstClockTime pos; GstFormat format; - gint64 position; - gst_query_parse_position (query, &format, NULL); + /* See if upstream can immediately answer */ + res = gst_pad_peer_query (demux->sinkpad, query); + if (res) + break; - if ((peer = gst_pad_get_peer (demux->sinkpad)) != NULL) { - res = gst_pad_query (peer, query); - gst_object_unref (peer); - if (res) - break; - } + gst_query_parse_position (query, &format, NULL); if (format != GST_FORMAT_TIME) { GST_DEBUG_OBJECT (demux, "position not supported for format %d", @@ -1057,17 +1109,17 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query) goto not_supported; } - position = demux->base_time; + pos = demux->base_time; if (demux->current_scr != G_MAXUINT64 && demux->first_scr != G_MAXUINT64) { - position += + pos += MPEGTIME_TO_GSTTIME (demux->current_scr - demux->scr_adjust - demux->first_scr); } GST_LOG_OBJECT (demux, "Position at GStreamer Time:%" GST_TIME_FORMAT, - GST_TIME_ARGS (position)); + GST_TIME_ARGS (pos)); - gst_query_set_position (query, format, position); + gst_query_set_position (query, format, pos); res = TRUE; break; } @@ -1075,76 +1127,79 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query) { GstFormat format; gint64 duration; - GstPad *peer; + GstQuery *byte_query; gst_query_parse_duration (query, &format, NULL); - if ((peer = gst_pad_get_peer (demux->sinkpad)) == NULL) { - GST_DEBUG_OBJECT (demux, "duration not possible, no peer"); - goto not_supported; + if (G_LIKELY (format == GST_FORMAT_TIME && + GST_CLOCK_TIME_IS_VALID (demux->src_segment.duration))) { + gst_query_set_duration (query, GST_FORMAT_TIME, + demux->src_segment.duration); + res = TRUE; + break; } /* For any format other than bytes, see if upstream knows first */ if (format == GST_FORMAT_BYTES) { GST_DEBUG_OBJECT (demux, "duration not supported for format %d", format); - gst_object_unref (peer); goto not_supported; } - if (gst_pad_query (peer, query)) { - gst_object_unref (peer); + if (gst_pad_peer_query (demux->sinkpad, query)) { res = TRUE; break; } - /* Upstream didn't know, so we can only answer TIME queries from + /* Upstream didn't know, so we can only answer TIME queries from * here on */ if (format != GST_FORMAT_TIME) { GST_DEBUG_OBJECT (demux, "duration not supported for format %d", format); - gst_object_unref (peer); goto not_supported; } if (demux->mux_rate == -1) { GST_DEBUG_OBJECT (demux, "duration not possible, no mux_rate"); - gst_object_unref (peer); goto not_supported; } - gst_query_set_duration (query, GST_FORMAT_BYTES, -1); + byte_query = gst_query_new_duration (GST_FORMAT_BYTES); - if (!gst_pad_query (peer, query)) { + if (!gst_pad_peer_query (demux->sinkpad, byte_query)) { GST_LOG_OBJECT (demux, "query on peer pad failed"); - gst_object_unref (peer); + gst_query_unref (byte_query); goto not_supported; } - gst_object_unref (peer); - gst_query_parse_duration (query, &format, &duration); + gst_query_parse_duration (byte_query, &format, &duration); + gst_query_unref (byte_query); + + GST_LOG_OBJECT (demux, + "query on peer pad reported bytes %" G_GUINT64_FORMAT, duration); - duration = BYTES_TO_GSTTIME (duration); + duration = BYTES_TO_GSTTIME ((guint64) duration); + + GST_LOG_OBJECT (demux, "converted to time %" GST_TIME_FORMAT, + GST_TIME_ARGS (duration)); gst_query_set_duration (query, GST_FORMAT_TIME, duration); res = TRUE; break; } + case GST_QUERY_SEEKING:{ + /* Just ask upstream */ + res = gst_pad_peer_query (demux->sinkpad, query); + break; + } default: - res = gst_pad_query_default (pad, query); + res = gst_pad_query_default (pad, parent, query); break; } - gst_object_unref (demux); - return res; - not_supported: - { - gst_object_unref (demux); - - return FALSE; - } + return FALSE; } static void @@ -1170,6 +1225,33 @@ gst_flups_demux_reset_psm (GstFluPSDemux * demux) #undef FILL_TYPE } +/* ISO/IEC 13818-1: + * pack_header() { + * pack_start_code 32 bslbf -+ + * '01' 2 bslbf | + * system_clock_reference_base [32..30] 3 bslbf | + * marker_bit 1 bslbf | + * system_clock_reference_base [29..15] 15 bslbf | + * marker_bit 1 bslbf | + * system_clock_reference_base [14..0] 15 bslbf | + * marker_bit 1 bslbf | 112 bits + * system_clock_reference_extension 9 ubslbf | + * marker_bit 1 bslbf | + * program_mux_rate 22 ubslbf | + * marker_bit 1 bslbf | + * marker_bit 1 bslbf | + * reserved 5 bslbf | + * pack_stuffing_length 3 ubslbf -+ + * + * for (i = 0; i < pack_stuffing_length; i++) { + * stuffing_byte '1111 1111' 8 bslbf + * } + * + * 112 bits = 14 bytes, as max value for pack_stuffing_length is 7, then + * in total it's needed 14 + 7 = 21 bytes. + */ +#define PACK_START_SIZE 21 + static GstFlowReturn gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) { @@ -1177,22 +1259,27 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) guint length; guint32 scr1, scr2; guint64 scr, scr_adjusted, new_rate; + guint64 scr_rate_n; + guint64 scr_rate_d; GstClockTime new_time; + guint avail = gst_adapter_available (demux->adapter); GST_DEBUG ("parsing pack start"); - /* fixed length to begin with, start code and two scr values */ - length = 8 + 4; - - if (!(data = gst_adapter_peek (demux->adapter, length))) + if (G_UNLIKELY (avail < PACK_START_SIZE)) goto need_more_data; + data = gst_adapter_map (demux->adapter, PACK_START_SIZE); + /* skip start code */ data += 4; scr1 = GST_READ_UINT32_BE (data); scr2 = GST_READ_UINT32_BE (data + 4); + /* fixed length to begin with, start code and two scr values */ + length = 8 + 4; + /* start parsing the stream */ if ((*data & 0xc0) == 0x40) { guint32 scr_ext; @@ -1204,13 +1291,11 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* mpeg2 has more data */ length += 2; - if (gst_adapter_available (demux->adapter) < length) - goto need_more_data; /* :2=01 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 */ /* check markers */ - if ((scr1 & 0xc4000400) != 0x44000400) + if (G_UNLIKELY ((scr1 & 0xc4000400) != 0x44000400)) goto lost_sync; scr = ((guint64) scr1 & 0x38000000) << 3; @@ -1219,14 +1304,15 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) scr |= ((guint64) scr2 & 0xf8000000) >> 27; /* marker:1==1 ! scr_ext:9 ! marker:1==1 */ - if ((scr2 & 0x04010000) != 0x04010000) + if (G_UNLIKELY ((scr2 & 0x04010000) != 0x04010000)) goto lost_sync; scr_ext = (scr2 & 0x03fe0000) >> 17; /* We keep the offset of this scr */ - demux->last_scr_offset = demux->adapter_offset + 12; + demux->cur_scr_offset = demux->adapter_offset + 12; - GST_DEBUG_OBJECT (demux, "SCR: 0x%08x SCRE: 0x%08x", (guint) scr, scr_ext); + GST_DEBUG_OBJECT (demux, "SCR: 0x%08" G_GINT64_MODIFIER "x SCRE: 0x%08x", + scr, scr_ext); if (scr_ext) { scr = (scr * 300 + scr_ext % 300) / 300; @@ -1236,7 +1322,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) data += 6; /* PMR:22 ! :2==11 ! reserved:5 ! stuffing_len:3 */ next32 = GST_READ_UINT32_BE (data); - if ((next32 & 0x00000300) != 0x00000300) + if (G_UNLIKELY ((next32 & 0x00000300) != 0x00000300)) goto lost_sync; new_rate = (next32 & 0xfffffc00) >> 10; @@ -1245,6 +1331,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) GST_DEBUG_OBJECT (demux, "stuffing bytes: %d", stuffing_bytes); data += 4; + length += stuffing_bytes; while (stuffing_bytes--) { if (*data++ != 0xff) goto lost_sync; @@ -1254,10 +1341,10 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) demux->is_mpeg2_pack = FALSE; /* check markers */ - if ((scr1 & 0xf1000100) != 0x21000100) + if (G_UNLIKELY ((scr1 & 0xf1000100) != 0x21000100)) goto lost_sync; - if ((scr2 & 0x01800001) != 0x01800001) + if (G_UNLIKELY ((scr2 & 0x01800001) != 0x01800001)) goto lost_sync; /* :4=0010 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 ! marker:1==1 */ @@ -1267,7 +1354,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) scr |= ((guint64) scr2 & 0xfe000000) >> 25; /* We keep the offset of this scr */ - demux->last_scr_offset = demux->adapter_offset + 8; + demux->cur_scr_offset = demux->adapter_offset + 8; /* marker:1==1 ! mux_rate:22 ! marker:1==1 */ new_rate = (scr2 & 0x007ffffe) >> 1; @@ -1279,10 +1366,16 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* scr adjusted is the new scr found + the colected adjustment */ scr_adjusted = scr + demux->scr_adjust; + GST_LOG_OBJECT (demux, + "SCR: %" G_GINT64_FORMAT " (%" G_GINT64_FORMAT "), mux_rate %" + G_GINT64_FORMAT ", GStreamer Time:%" GST_TIME_FORMAT, + scr, scr_adjusted, new_rate, + GST_TIME_ARGS (MPEGTIME_TO_GSTTIME ((guint64) scr))); + /* keep the first src in order to calculate delta time */ - if (demux->first_scr == G_MAXUINT64) { + if (G_UNLIKELY (demux->first_scr == G_MAXUINT64)) { demux->first_scr = scr; - demux->first_scr_offset = demux->last_scr_offset; + demux->first_scr_offset = demux->cur_scr_offset; if (demux->sink_segment.format == GST_FORMAT_TIME) { demux->base_time = demux->sink_segment.time; @@ -1290,12 +1383,15 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) demux->base_time = MPEGTIME_TO_GSTTIME (demux->first_scr); } /* at begin consider the new_rate as the scr rate, bytes/clock ticks */ - demux->scr_rate_n = new_rate; - demux->scr_rate_d = CLOCK_FREQ; - } else if (demux->first_scr_offset != demux->last_scr_offset) { + scr_rate_n = new_rate; + scr_rate_d = CLOCK_FREQ; + } else if (G_LIKELY (demux->first_scr_offset != demux->cur_scr_offset)) { /* estimate byte rate related to the SCR */ - demux->scr_rate_n = demux->last_scr_offset - demux->first_scr_offset; - demux->scr_rate_d = scr - demux->first_scr; + scr_rate_n = demux->cur_scr_offset - demux->first_scr_offset; + scr_rate_d = scr_adjusted - demux->first_scr; + } else { + scr_rate_n = demux->scr_rate_n; + scr_rate_d = demux->scr_rate_d; } GST_DEBUG_OBJECT (demux, @@ -1309,15 +1405,14 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) " at %" G_GUINT64_FORMAT ", scr rate: %" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT "(%f)", ((demux->sink_segment.rate >= 0.0) ? "forward" : "backward"), - scr, demux->last_scr_offset, + scr, demux->cur_scr_offset, demux->first_scr, demux->first_scr_offset, - demux->scr_rate_n, demux->scr_rate_d, - (float) demux->scr_rate_n / demux->scr_rate_d); + scr_rate_n, scr_rate_d, (float) scr_rate_n / scr_rate_d); /* adjustment of the SCR */ - if (demux->current_scr != G_MAXUINT64) { + if (G_LIKELY (demux->current_scr != G_MAXUINT64)) { gint64 diff; - guint64 old_scr, old_mux_rate, bss, adjust; + guint64 old_scr, old_mux_rate, bss, adjust = 0; /* keep SCR of the previous packet */ old_scr = demux->current_scr; @@ -1326,12 +1421,13 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* Bytes since SCR is the amount we placed in the adapter since then * (demux->bytes_since_scr) minus the amount remaining in the adapter, * clamped to >= 0 */ - bss = MAX (0, (gint) (demux->bytes_since_scr - - gst_adapter_available (demux->adapter))); + bss = MAX (0, (gint) (demux->bytes_since_scr - avail)); /* estimate the new SCR using the previous one according the notes on point 2.5.2.2 of the ISO/IEC 13818-1 document */ - adjust = (bss * CLOCK_FREQ) / old_mux_rate; + if (old_mux_rate != 0) + adjust = (bss * CLOCK_FREQ) / old_mux_rate; + if (demux->sink_segment.rate >= 0.0) demux->next_scr = old_scr + adjust; else @@ -1344,7 +1440,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* calculate the absolute deference between the last scr and the new one */ - if (old_scr > scr_adjusted) + if (G_UNLIKELY (old_scr > scr_adjusted)) diff = old_scr - scr_adjusted; else diff = scr_adjusted - old_scr; @@ -1369,18 +1465,21 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) /* update the current_scr and rate members */ demux->mux_rate = new_rate; demux->current_scr = scr_adjusted; + demux->scr_rate_n = scr_rate_n; + demux->scr_rate_d = scr_rate_d; new_time = MPEGTIME_TO_GSTTIME (scr_adjusted); if (new_time != GST_CLOCK_TIME_NONE) { // g_print ("SCR now %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (new_time)); - gst_segment_set_last_stop (&demux->src_segment, GST_FORMAT_TIME, new_time); - gst_flups_demux_send_segment_updates (demux, new_time); + gst_segment_set_position (&demux->src_segment, GST_FORMAT_TIME, new_time); + gst_flups_demux_send_gap_updates (demux, new_time); } /* Reset the bytes_since_scr value to count the data remaining in the * adapter */ - demux->bytes_since_scr = gst_adapter_available (demux->adapter); + demux->bytes_since_scr = avail; + gst_adapter_unmap (demux->adapter); gst_adapter_flush (demux->adapter, length); ADAPTER_OFFSET_FLUSH (length); return GST_FLOW_OK; @@ -1388,6 +1487,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux) lost_sync: { GST_DEBUG_OBJECT (demux, "lost sync"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_LOST_SYNC; } need_more_data: @@ -1397,6 +1497,32 @@ need_more_data: } } +/* ISO/IEC 13818-1: + * system_header () { + * system_header_start_code 32 bslbf -+ + * header_length 16 uimsbf | + * marker_bit 1 bslbf | + * rate_bound 22 uimsbf | + * marker_bit 1 bslbf | + * audio_bound 6 uimsbf | + * fixed_flag 1 bslbf | + * CSPS_flag 1 bslbf | 96 bits + * system_audio_lock_flag 1 bslbf | + * system_video_lock_flag 1 bslbf | + * marker_bit 1 bslbf | + * video_bound 5 uimsbf | + * packet_rate_restriction_flag 1 bslbf | + * reserved_bits 7 bslbf -+ + * while (nextbits () = = '1') { + * stream_id 8 uimsbf -+ + * '11' 2 bslbf | 24 bits + * P-STD_buffer_bound_scale 1 bslbf | + * P-STD_buffer_size_bound 13 uimsbf -+ + * } + * } + * 96 bits = 12 bytes, 24 bits = 3 bytes. + */ + static GstFlowReturn gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) { @@ -1404,10 +1530,12 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) const guint8 *data; gboolean csps; - /* start code + length */ - if (!(data = gst_adapter_peek (demux->adapter, 6))) + if (gst_adapter_available (demux->adapter) < 6) goto need_more_data; + /* start code + length */ + data = gst_adapter_map (demux->adapter, 6); + /* skip start code */ data += 4; @@ -1416,9 +1544,12 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) length += 6; - if (!(data = gst_adapter_peek (demux->adapter, length))) + gst_adapter_unmap (demux->adapter); + if (gst_adapter_available (demux->adapter) < length) goto need_more_data; + data = gst_adapter_map (demux->adapter, length); + /* skip start code and length */ data += 6; @@ -1533,6 +1664,7 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) } } + gst_adapter_unmap (demux->adapter); gst_adapter_flush (demux->adapter, length); ADAPTER_OFFSET_FLUSH (length); return GST_FLOW_OK; @@ -1541,22 +1673,26 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux) marker_expected: { GST_DEBUG_OBJECT (demux, "expecting marker"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_LOST_SYNC; } no_placeholder_bits: { GST_DEBUG_OBJECT (demux, "expecting placeholder bit values" " '11' after stream id"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_LOST_SYNC; } sys_len_error: { GST_DEBUG_OBJECT (demux, "error in system header length"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_LOST_SYNC; } need_more_data: { GST_DEBUG_OBJECT (demux, "need more data"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_NEED_MORE_DATA; } } @@ -1569,10 +1705,12 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux) const guint8 *data, *es_map_base; gboolean applicable; - /* start code + length */ - if (!(data = gst_adapter_peek (demux->adapter, 6))) + if (gst_adapter_available (demux->adapter) < 6) goto need_more_data; + /* start code + length */ + data = gst_adapter_map (demux->adapter, 6); + /* skip start code */ data += 4; @@ -1584,9 +1722,13 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux) length += 6; - if (!(data = gst_adapter_peek (demux->adapter, length))) + gst_adapter_unmap (demux->adapter); + + if (gst_adapter_available (demux->adapter) < length) goto need_more_data; + data = gst_adapter_map (demux->adapter, length); + /* skip start code and length */ data += 6; @@ -1636,10 +1778,19 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux) GST_DEBUG_OBJECT (demux, "Stream type %02X with id %02X and %u bytes info", stream_type, stream_id, stream_info_length); - demux->psm[stream_id] = stream_type; + if (G_LIKELY (stream_id != 0xbd)) + demux->psm[stream_id] = stream_type; + else { + /* Ignore stream type for private_stream_1 and discover it looking at + * the stream data. + * Fixes demuxing some clips with lpcm that was wrongly declared as + * mpeg audio */ + GST_DEBUG_OBJECT (demux, "stream type for private_stream_1 ignored"); + } es_map_base += stream_info_length; } + gst_adapter_unmap (demux->adapter); gst_adapter_flush (demux->adapter, length); ADAPTER_OFFSET_FLUSH (length); return GST_FLOW_OK; @@ -1647,6 +1798,7 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux) psm_len_error: { GST_DEBUG_OBJECT (demux, "error in PSM length"); + gst_adapter_unmap (demux->adapter); return GST_FLOW_LOST_SYNC; } need_more_data: @@ -1670,12 +1822,12 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, gint stream_type; guint32 start_code; guint8 id; - guint8 *data; - guint datalen; + GstMapInfo map; + gsize datalen; guint offset = 0; - data = GST_BUFFER_DATA (buffer); - datalen = GST_BUFFER_SIZE (buffer); + gst_buffer_map (buffer, &map, GST_MAP_READ); + datalen = map.size; start_code = filter->start_code; id = filter->id; @@ -1688,10 +1840,10 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, if (start_code == ID_PRIVATE_STREAM_1 && datalen >= 2) { guint8 nframes; - /* VDR writes A52 streams without any header bytes + /* VDR writes A52 streams without any header bytes * (see ftp://ftp.mplayerhq.hu/MPlayer/samples/MPEG-VOB/vdr-AC3) */ if (datalen >= 4) { - guint hdr = GST_READ_UINT32_BE (data); + guint hdr = GST_READ_UINT32_BE (map.data); if (G_UNLIKELY ((hdr & 0xffff0000) == AC3_SYNC_WORD)) { id = 0x80; @@ -1702,7 +1854,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, if (G_LIKELY (stream_type == -1)) { /* new id is in the first byte */ - id = data[offset++]; + id = map.data[offset++]; datalen--; /* and remap */ @@ -1713,7 +1865,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, * streams and our backwards compat convention is to strip it off */ if (stream_type != ST_PS_DVD_SUBPICTURE) { /* Number of audio frames in this packet */ - nframes = data[offset++]; + nframes = map.data[offset++]; datalen--; GST_DEBUG_OBJECT (demux, "private type 0x%02x, %d frames", id, nframes); @@ -1744,7 +1896,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, demux->current_stream = gst_flups_demux_get_stream (demux, id, stream_type); } - if (demux->current_stream == NULL) { + if (G_UNLIKELY (demux->current_stream == NULL)) { GST_DEBUG_OBJECT (demux, "Dropping buffer for unknown stream id 0x%02x", id); goto done; @@ -1768,7 +1920,8 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, } if (demux->current_stream->notlinked == FALSE) { - out_buf = gst_buffer_create_sub (buffer, offset, datalen); + out_buf = + gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offset, datalen); ret = gst_flups_demux_send_data (demux, demux->current_stream, out_buf); if (ret == GST_FLOW_NOT_LINKED) { @@ -1778,6 +1931,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first, } done: + gst_buffer_unmap (buffer, &map); gst_buffer_unref (buffer); return ret; @@ -1801,11 +1955,11 @@ gst_flups_demux_resync (GstFluPSDemux * demux, gboolean save) gboolean found; avail = gst_adapter_available (demux->adapter); - if (avail < 4) + if (G_UNLIKELY (avail < 4)) goto need_data; /* Common case, read 4 bytes an check it */ - data = gst_adapter_peek (demux->adapter, 4); + data = gst_adapter_map (demux->adapter, 4); /* read currect code */ code = GST_READ_UINT32_BE (data); @@ -1814,22 +1968,25 @@ gst_flups_demux_resync (GstFluPSDemux * demux, gboolean save) if (G_LIKELY ((code & 0xffffff00) == 0x100L)) { GST_LOG_OBJECT (demux, "Found resync code %08x after 0 bytes", code); demux->last_sync_code = code; + gst_adapter_unmap (demux->adapter); return TRUE; } - /* Otherwise, we are starting at byte 4 and we need to search + /* Otherwise, we are starting at byte 4 and we need to search the sync code in all available data in the adapter */ offset = 4; if (offset >= avail) goto need_data; /* Not enough data to find sync */ - data = gst_adapter_peek (demux->adapter, avail); + data = gst_adapter_map (demux->adapter, avail); do { code = (code << 8) | data[offset++]; found = (code & 0xffffff00) == 0x100L; } while (offset < avail && !found); + gst_adapter_unmap (demux->adapter); + if (!save || demux->sink_segment.rate >= 0.0) { GST_LOG_OBJECT (demux, "flushing %d bytes", offset - 4); /* forward playback, we can discard and flush the skipped bytes */ @@ -1875,10 +2032,79 @@ gst_flups_demux_is_pes_sync (guint32 sync) ((sync & 0xe0) == 0xc0) || ((sync & 0xf0) == 0xe0); } +/* If we can pull that's prefered */ +static gboolean +gst_flups_demux_sink_activate (GstPad * sinkpad, GstObject * parent) +{ + gboolean res = FALSE; + GstQuery *query = gst_query_new_scheduling (); + + if (gst_pad_peer_query (sinkpad, query)) { + if (gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE)) { + res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE); + } else { + res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE); + } + } else { + res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE); + } + + gst_query_unref (query); + + return res; +} + +/* This function gets called when we activate ourselves in push mode. */ +static gboolean +gst_flups_demux_sink_activate_push (GstPad * sinkpad, GstObject * parent, + gboolean active) +{ + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); + + demux->random_access = FALSE; + + return TRUE; +} + +#if 0 +/* this function gets called when we activate ourselves in pull mode. + * We can perform random access to the resource and we start a task + * to start reading */ +static gboolean +gst_flups_demux_sink_activate_pull (GstPad * sinkpad, GstObject * parent, + gboolean active) +{ + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); + + if (active) { + GST_DEBUG ("pull mode activated"); + demux->random_access = TRUE; + return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flups_demux_loop, + sinkpad, NULL); + } else { + demux->random_access = FALSE; + return gst_pad_stop_task (sinkpad); + } +} +#endif + +static gboolean +gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent, + GstPadMode mode, gboolean active) +{ + if (mode == GST_PAD_MODE_PUSH) { + return gst_flups_demux_sink_activate_push (pad, parent, active); + } else if (mode == GST_PAD_MODE_PULL) { +// return gst_flups_demux_sink_activate_pull (pad, parent, active); + } + return FALSE; +} + static GstFlowReturn -gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer) +gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - GstFluPSDemux *demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); GstFlowReturn ret = GST_FLOW_OK; guint32 avail; gboolean save, discont; @@ -1906,7 +2132,7 @@ gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer) demux->adapter_offset = GST_BUFFER_OFFSET (buffer); gst_adapter_push (demux->adapter, buffer); - demux->bytes_since_scr += GST_BUFFER_SIZE (buffer); + demux->bytes_since_scr += gst_buffer_get_size (buffer); avail = gst_adapter_available (demux->rev_adapter); if (avail > 0) { @@ -2006,8 +2232,6 @@ gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer) } } done: - gst_object_unref (demux); - return ret; } @@ -2050,6 +2274,7 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition) 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; @@ -2075,10 +2300,20 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition) return result; } +static void +gst_segment_set_position (GstSegment * segment, GstFormat format, + guint64 position) +{ + if (segment->format == GST_FORMAT_UNDEFINED) { + segment->format = format; + } + segment->position = position; +} + gboolean gst_flups_demux_plugin_init (GstPlugin * plugin) { - GST_DEBUG_CATEGORY_INIT (gstflupesfilter_debug, "rsnpesfilter", 0, + GST_DEBUG_CATEGORY_INIT (mpegpspesfilter_debug, "rsnpesfilter", 0, "MPEG program stream PES filter debug"); GST_DEBUG_CATEGORY_INIT (gstflupsdemux_debug, "rsndvddemux", 0, diff --git a/ext/resindvd/gstmpegdemux.h b/ext/resindvd/gstmpegdemux.h index f6291500..186a6412 100644 --- a/ext/resindvd/gstmpegdemux.h +++ b/ext/resindvd/gstmpegdemux.h @@ -1,4 +1,10 @@ -/* +/* + * This library is licensed under 2 different licenses and you + * can choose to use it under the terms of either one of them. The + * two licenses are the MPL 1.1 and the LGPL. + * + * MPL: + * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -9,6 +15,23 @@ * License for the specific language governing rights and limitations * under the License. * + * LGPL: + * + * 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. + * * The Original Code is Fluendo MPEG Demuxer plugin. * * The Initial Developer of the Original Code is Fluendo, S.L. @@ -72,6 +95,9 @@ struct _GstFluPSDemux { GstElement parent; GstPad * sinkpad; + gboolean random_access; /* If we operate in pull mode */ + gboolean flushing; + gboolean in_still; GstAdapter * adapter; GstAdapter * rev_adapter; @@ -90,7 +116,7 @@ struct _GstFluPSDemux { guint64 scr_rate_n; guint64 scr_rate_d; guint64 first_scr_offset; - guint64 last_scr_offset; + guint64 cur_scr_offset; gint16 psm[GST_FLUPS_DEMUX_MAX_PSM]; diff --git a/ext/resindvd/gstpesfilter.c b/ext/resindvd/gstpesfilter.c index f2ccc784..d58c7260 100644 --- a/ext/resindvd/gstpesfilter.c +++ b/ext/resindvd/gstpesfilter.c @@ -1,23 +1,45 @@ -/* - * The contents of this file are subject to the Mozilla Public License - * Version 1.1 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/. - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - * License for the specific language governing rights and limitations - * under the License. - * - * The Original Code is Fluendo MPEG Demuxer plugin. - * - * The Initial Developer of the Original Code is Fluendo, S.L. - * Portions created by Fluendo, S.L. are Copyright (C) 2005 - * Fluendo, S.L. All Rights Reserved. - * - * Contributor(s): Wim Taymans <wim@fluendo.com> - * Jan Schmidt <thaytan@noraisin.net> - */ + /* + * This library is licensed under 2 different licenses and you + * can choose to use it under the terms of either one of them. The + * two licenses are the MPL 1.1 and the LGPL. + * + * MPL: + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * LGPL: + * + * 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. + * + * The Original Code is Fluendo MPEG Demuxer plugin. + * + * The Initial Developer of the Original Code is Fluendo, S.L. + * Portions created by Fluendo, S.L. are Copyright (C) 2005 + * Fluendo, S.L. All Rights Reserved. + * + * Contributor(s): Wim Taymans <wim@fluendo.com> + */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -26,8 +48,8 @@ #include "gstmpegdefs.h" #include "gstpesfilter.h" -GST_DEBUG_CATEGORY (gstflupesfilter_debug); -#define GST_CAT_DEFAULT (gstflupesfilter_debug) +GST_DEBUG_CATEGORY (mpegpspesfilter_debug); +#define GST_CAT_DEFAULT (mpegpspesfilter_debug) static GstFlowReturn gst_pes_filter_data_push (GstPESFilter * filter, gboolean first, GstBuffer * buffer); @@ -75,17 +97,6 @@ gst_pes_filter_set_callbacks (GstPESFilter * filter, filter->user_data = user_data; } -/* sync:4 == 00xx ! pts:3 ! 1 ! pts:15 ! 1 | pts:15 ! 1 */ -#define READ_TS(data, target, lost_sync_label) \ - if ((*data & 0x01) != 0x01) goto lost_sync_label; \ - target = ((guint64) (*data++ & 0x0E)) << 29; \ - target |= ((guint64) (*data++ )) << 22; \ - if ((*data & 0x01) != 0x01) goto lost_sync_label; \ - target |= ((guint64) (*data++ & 0xFE)) << 14; \ - target |= ((guint64) (*data++ )) << 7; \ - if ((*data & 0x01) != 0x01) goto lost_sync_label; \ - target |= ((guint64) (*data++ & 0xFE)) >> 1; - static gboolean gst_pes_filter_is_sync (guint32 sync) { @@ -101,15 +112,21 @@ gst_pes_filter_parse (GstPESFilter * filter) GstFlowReturn ret; guint32 start_code; + gboolean STD_buffer_bound_scale G_GNUC_UNUSED; guint16 STD_buffer_size_bound; const guint8 *data; gint avail, datalen; gboolean have_size = FALSE; - /* read start code and length */ - if (!(data = gst_adapter_peek (filter->adapter, 6))) + avail = gst_adapter_available (filter->adapter); + + if (avail < 6) goto need_more_data; + data = gst_adapter_map (filter->adapter, 6); + + /* read start code and length */ + /* get start code */ start_code = GST_READ_UINT32_BE (data); if (!gst_pes_filter_is_sync (start_code)) @@ -124,9 +141,6 @@ gst_pes_filter_parse (GstPESFilter * filter) /* start parsing length */ filter->length = GST_READ_UINT16_BE (data); - /* see how much is available */ - avail = gst_adapter_available (filter->adapter); - GST_DEBUG ("id 0x%02x length %d, avail %d start code 0x%02x", filter->id, filter->length, avail, filter->start_code); @@ -139,6 +153,7 @@ gst_pes_filter_parse (GstPESFilter * filter) * to set the allow_unbounded flag if they want */ if (filter->length == 0 && ((filter->start_code & 0xFFFFFFF0) == PACKET_VIDEO_START_CODE || + filter->start_code == ID_EXTENDED_STREAM_ID || filter->allow_unbounded)) { GST_DEBUG ("id 0x%02x, unbounded length", filter->id); filter->unbounded_packet = TRUE; @@ -155,10 +170,14 @@ gst_pes_filter_parse (GstPESFilter * filter) avail = MIN (avail, filter->length + 6); } + if (avail < 6) + goto need_more_data; + + gst_adapter_unmap (filter->adapter); + /* read more data, either the whole packet if there is a length * or whatever we have available if this in an unbounded packet. */ - if (!(data = gst_adapter_peek (filter->adapter, avail))) - goto need_more_data; + data = gst_adapter_map (filter->adapter, avail); /* This will make us flag LOST_SYNC if we run out of data from here onward */ have_size = TRUE; @@ -177,7 +196,8 @@ gst_pes_filter_parse (GstPESFilter * filter) case ID_PROGRAM_STREAM_DIRECTORY: case ID_DSMCC_STREAM: case ID_ITU_TREC_H222_TYPE_E_STREAM: - goto skip; + /* Push directly out */ + goto push_out; case ID_PADDING_STREAM: GST_DEBUG ("skipping padding stream"); goto skip; @@ -185,9 +205,8 @@ gst_pes_filter_parse (GstPESFilter * filter) break; } - if (datalen < 1) + if (datalen == 0) goto need_more_data; - filter->pts = filter->dts = -1; /* stuffing bits, first two bits are '10' for mpeg2 pes so this code is @@ -212,7 +231,7 @@ gst_pes_filter_parse (GstPESFilter * filter) if (datalen < 3) goto need_more_data; - /* STD_buffer_bound_scale = *data & 0x20; */ + STD_buffer_bound_scale = *data & 0x20; STD_buffer_size_bound = ((guint16) (*data++ & 0x1F)) << 8; STD_buffer_size_bound |= *data++; @@ -264,7 +283,7 @@ gst_pes_filter_parse (GstPESFilter * filter) /* check PES scrambling control */ if ((flags & 0x30) != 0) - goto encrypted; + GST_DEBUG ("PES scrambling control: %x", (flags >> 4) & 0x3); /* 2: PTS_DTS_flags * 1: ESCR_flag @@ -376,9 +395,53 @@ gst_pes_filter_parse (GstPESFilter * filter) } /* PES_extension_flag */ if ((flags & 0x01)) { - GST_DEBUG ("%x PES_extension", filter->id); + flags = *data++; + header_data_length -= 1; + datalen -= 1; + GST_DEBUG ("%x PES_extension, flags 0x%02x", filter->id, flags); + /* PES_private_data_flag */ + if ((flags & 0x80)) { + GST_DEBUG ("%x PES_private_data_flag", filter->id); + data += 16; + header_data_length -= 16; + datalen -= 16; + } + /* pack_header_field_flag */ + if ((flags & 0x40)) { + guint8 pack_field_length = *data; + GST_DEBUG ("%x pack_header_field_flag, pack_field_length %d", + filter->id, pack_field_length); + data += pack_field_length + 1; + header_data_length -= pack_field_length + 1; + datalen -= pack_field_length + 1; + } + /* program_packet_sequence_counter_flag */ + if ((flags & 0x20)) { + GST_DEBUG ("%x program_packet_sequence_counter_flag", filter->id); + data += 2; + header_data_length -= 2; + datalen -= 2; + } + /* P-STD_buffer_flag */ + if ((flags & 0x10)) { + GST_DEBUG ("%x P-STD_buffer_flag", filter->id); + data += 2; + header_data_length -= 2; + datalen -= 2; + } + /* PES_extension_flag_2 */ + if ((flags & 0x01)) { + guint8 PES_extension_field_length = *data++; + GST_DEBUG ("%x PES_extension_flag_2, len %d", + filter->id, PES_extension_field_length & 0x7f); + if (PES_extension_field_length == 0x81) { + GST_DEBUG ("%x substream id 0x%02x", filter->id, *data); + } + data += PES_extension_field_length & 0x7f; + header_data_length -= (PES_extension_field_length & 0x7f) + 1; + datalen -= (PES_extension_field_length & 0x7f) + 1; + } } - /* calculate the amount of real data in this PES packet */ data += header_data_length; datalen -= header_data_length; @@ -392,6 +455,7 @@ gst_pes_filter_parse (GstPESFilter * filter) goto lost_sync; } +push_out: { GstBuffer *out; guint16 consumed; @@ -408,11 +472,8 @@ gst_pes_filter_parse (GstPESFilter * filter) } if (datalen > 0) { - out = gst_buffer_new (); - GST_BUFFER_DATA (out) = g_memdup (data, datalen); - GST_BUFFER_SIZE (out) = datalen; - GST_BUFFER_MALLOCDATA (out) = GST_BUFFER_DATA (out); - + out = gst_buffer_new_allocate (NULL, datalen, NULL); + gst_buffer_fill (out, 0, data, datalen); ret = gst_pes_filter_data_push (filter, TRUE, out); filter->first = FALSE; } else { @@ -425,6 +486,7 @@ gst_pes_filter_parse (GstPESFilter * filter) filter->state = STATE_DATA_PUSH; } + gst_adapter_unmap (filter->adapter); gst_adapter_flush (filter->adapter, avail); ADAPTER_OFFSET_FLUSH (avail); @@ -434,36 +496,27 @@ need_more_data: { if (filter->unbounded_packet == FALSE) { if (have_size == TRUE) { - GST_DEBUG ("bounded need more data %d, lost sync", + GST_DEBUG ("bounded need more data %" G_GSIZE_FORMAT " , lost sync", gst_adapter_available (filter->adapter)); ret = GST_FLOW_LOST_SYNC; } else { - GST_DEBUG ("bounded need more data %d, breaking for more", - gst_adapter_available (filter->adapter)); + GST_DEBUG ("bounded need more data %" G_GSIZE_FORMAT + ", breaking for more", gst_adapter_available (filter->adapter)); ret = GST_FLOW_NEED_MORE_DATA; } } else { - GST_DEBUG ("unbounded need more data %d", + GST_DEBUG ("unbounded need more data %" G_GSIZE_FORMAT, gst_adapter_available (filter->adapter)); ret = GST_FLOW_NEED_MORE_DATA; } - + gst_adapter_unmap (filter->adapter); return ret; } skip: { - GST_DEBUG ("skipping 0x%02x", filter->id); - gst_adapter_flush (filter->adapter, avail); - ADAPTER_OFFSET_FLUSH (avail); + gst_adapter_unmap (filter->adapter); - filter->length -= avail - 6; - if (filter->length > 0 || filter->unbounded_packet) - filter->state = STATE_DATA_SKIP; - return GST_FLOW_OK; - } -encrypted: - { - GST_DEBUG ("skipping encrypted 0x%02x", filter->id); + GST_DEBUG ("skipping 0x%02x", filter->id); gst_adapter_flush (filter->adapter, avail); ADAPTER_OFFSET_FLUSH (avail); @@ -474,6 +527,7 @@ encrypted: } lost_sync: { + gst_adapter_unmap (filter->adapter); GST_DEBUG ("lost sync"); gst_adapter_flush (filter->adapter, 4); ADAPTER_OFFSET_FLUSH (4); @@ -562,14 +616,8 @@ gst_pes_filter_process (GstPESFilter * filter) ret = GST_FLOW_OK; } else { GstBuffer *out; - guint8 *data; - - data = gst_adapter_take (filter->adapter, avail); - out = gst_buffer_new (); - GST_BUFFER_DATA (out) = data; - GST_BUFFER_SIZE (out) = avail; - GST_BUFFER_MALLOCDATA (out) = data; + out = gst_adapter_take_buffer (filter->adapter, avail); ret = gst_pes_filter_data_push (filter, filter->first, out); filter->first = FALSE; diff --git a/ext/resindvd/gstpesfilter.h b/ext/resindvd/gstpesfilter.h index 27c618c2..ccc8461d 100644 --- a/ext/resindvd/gstpesfilter.h +++ b/ext/resindvd/gstpesfilter.h @@ -1,4 +1,10 @@ -/* +/* + * This library is licensed under 2 different licenses and you + * can choose to use it under the terms of either one of them. The + * two licenses are the MPL 1.1 and the LGPL. + * + * MPL: + * * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -9,6 +15,23 @@ * License for the specific language governing rights and limitations * under the License. * + * LGPL: + * + * 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. + * * The Original Code is Fluendo MPEG Demuxer plugin. * * The Initial Developer of the Original Code is Fluendo, S.L. @@ -16,7 +39,6 @@ * Fluendo, S.L. All Rights Reserved. * * Contributor(s): Wim Taymans <wim@fluendo.com> - * Jan Schmidt <thaytan@noraisin.net> */ #ifndef __GST_PES_FILTER_H__ @@ -62,8 +84,6 @@ struct _GstPESFilter { gboolean unbounded_packet; guint16 length; - guint8 type; - gint64 pts; gint64 dts; }; diff --git a/ext/resindvd/plugin.c b/ext/resindvd/plugin.c index ea939eb6..3b2ac6b4 100644 --- a/ext/resindvd/plugin.c +++ b/ext/resindvd/plugin.c @@ -35,7 +35,7 @@ plugin_init (GstPlugin * plugin) { gboolean result = TRUE; - GST_DEBUG_CATEGORY_INIT (resindvd_debug, "resindvd elements", + GST_DEBUG_CATEGORY_INIT (resindvd_debug, "resindvd", 0, "DVD playback elements from resindvd"); #ifdef ENABLE_NLS diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c index a83656d1..d173cac9 100644 --- a/ext/resindvd/resindvdbin.c +++ b/ext/resindvd/resindvdbin.c @@ -26,16 +26,20 @@ #include <gst/gst.h> #include <gst/glib-compat-private.h> #include <gst/pbutils/missing-plugins.h> +#include <gst/video/video.h> +#include <gst/audio/audio.h> #include "resindvdbin.h" #include "resindvdsrc.h" -#include "rsnstreamselector.h" -#include "rsnaudiomunge.h" +#include "rsninputselector.h" +// #include "rsnaudiomunge.h" #include "rsndec.h" -#include "rsnparsetter.h" +// #include "rsnparsetter.h" #include "gstmpegdemux.h" +#define RSN_TYPE_INPUT_SELECTOR GST_TYPE_INPUT_SELECTOR + GST_DEBUG_CATEGORY_EXTERN (resindvd_debug); #define GST_CAT_DEFAULT resindvd_debug @@ -62,29 +66,29 @@ static GstStaticPadTemplate video_src_template = GST_STATIC_PAD_TEMPLATE ("video", GST_PAD_SRC, GST_PAD_SOMETIMES, - GST_STATIC_CAPS ("video/x-raw-yuv") + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL)) ); static GstStaticPadTemplate audio_src_template = - GST_STATIC_PAD_TEMPLATE ("audio", +GST_STATIC_PAD_TEMPLATE ("audio", GST_PAD_SRC, GST_PAD_SOMETIMES, - GST_STATIC_CAPS ("audio/x-raw-int; audio/x-raw-float") + GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL)) ); static GstStaticPadTemplate subpicture_src_template = GST_STATIC_PAD_TEMPLATE ("subpicture", GST_PAD_SRC, GST_PAD_SOMETIMES, - GST_STATIC_CAPS ("video/x-dvd-subpicture") + GST_STATIC_CAPS ("subpicture/x-dvd") ); -static void rsn_dvdbin_do_init (GType rsn_dvdbin_type); static void rsn_dvdbin_finalize (GObject * object); static void rsn_dvdbin_uri_handler_init (gpointer g_iface, gpointer iface_data); -GST_BOILERPLATE_FULL (RsnDvdBin, rsn_dvdbin, GstBin, - GST_TYPE_BIN, rsn_dvdbin_do_init); +#define rsn_dvdbin_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (RsnDvdBin, rsn_dvdbin, GST_TYPE_BIN, + G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, rsn_dvdbin_uri_handler_init)); static void demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin); @@ -95,32 +99,16 @@ static void rsn_dvdbin_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static GstStateChangeReturn rsn_dvdbin_change_state (GstElement * element, GstStateChange transition); - -static void -rsn_dvdbin_base_init (gpointer gclass) -{ - - GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&video_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&audio_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&subpicture_src_template)); - gst_element_class_set_details_simple (element_class, "rsndvdbin", - "Generic/Bin/Player", - "DVD playback element", "Jan Schmidt <thaytan@noraisin.net>"); - - element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state); -} +static void rsn_dvdbin_no_more_pads (RsnDvdBin * dvdbin); static void rsn_dvdbin_class_init (RsnDvdBinClass * klass) { GObjectClass *gobject_class; + GstElementClass *element_class; gobject_class = (GObjectClass *) klass; + element_class = (GstElementClass *) klass; gobject_class->finalize = rsn_dvdbin_finalize; gobject_class->set_property = rsn_dvdbin_set_property; @@ -129,23 +117,23 @@ rsn_dvdbin_class_init (RsnDvdBinClass * klass) g_object_class_install_property (gobject_class, ARG_DEVICE, g_param_spec_string ("device", "Device", "DVD device location", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -} -static void -rsn_dvdbin_do_init (GType rsn_dvdbin_type) -{ - static const GInterfaceInfo urihandler_info = { - rsn_dvdbin_uri_handler_init, - NULL, - NULL - }; - - g_type_add_interface_static (rsn_dvdbin_type, GST_TYPE_URI_HANDLER, - &urihandler_info); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&video_src_template)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&audio_src_template)); + gst_element_class_add_pad_template (element_class, + gst_static_pad_template_get (&subpicture_src_template)); + + element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state); + + gst_element_class_set_details_simple (element_class, "rsndvdbin", + "Generic/Bin/Player", + "DVD playback element", "Jan Schmidt <thaytan@noraisin.net>"); } static void -rsn_dvdbin_init (RsnDvdBin * dvdbin, RsnDvdBinClass * gclass) +rsn_dvdbin_init (RsnDvdBin * dvdbin) { dvdbin->dvd_lock = g_mutex_new (); dvdbin->preroll_lock = g_mutex_new (); @@ -166,20 +154,20 @@ rsn_dvdbin_finalize (GObject * object) /* URI interface */ static GstURIType -rsn_dvdbin_uri_get_type (void) +rsn_dvdbin_uri_get_type (GType type) { return GST_URI_SRC; } static const gchar *const * -rsn_dvdbin_uri_get_protocols (void) +rsn_dvdbin_uri_get_protocols (GType type) { static const gchar *protocols[] = { "dvd", NULL }; return protocols; } -static const gchar * +static gchar * rsn_dvdbin_uri_get_uri (GstURIHandler * handler) { RsnDvdBin *dvdbin = RESINDVDBIN (handler); @@ -192,11 +180,12 @@ rsn_dvdbin_uri_get_uri (GstURIHandler * handler) dvdbin->last_uri = g_strdup ("dvd://"); DVDBIN_UNLOCK (dvdbin); - return dvdbin->last_uri; + return g_strdup (dvdbin->last_uri); } static gboolean -rsn_dvdbin_uri_set_uri (GstURIHandler * handler, const gchar * uri) +rsn_dvdbin_uri_set_uri (GstURIHandler * handler, const gchar * uri, + GError ** error) { RsnDvdBin *dvdbin = RESINDVDBIN (handler); gboolean ret; @@ -284,6 +273,21 @@ rsn_dvdbin_uri_handler_init (gpointer g_iface, gpointer iface_data) iface->set_uri = rsn_dvdbin_uri_set_uri; } +static void +rsn_dvdbin_no_more_pads (RsnDvdBin * dvdbin) +{ + if (dvdbin->did_no_more_pads) + return; + dvdbin->did_no_more_pads = TRUE; + + GST_DEBUG_OBJECT (dvdbin, "Firing no more pads"); + /* Shrink subpicture queue to smaller size */ + g_object_set (dvdbin->pieces[DVD_ELEM_SPUQ], + "max-size-time", G_GUINT64_CONSTANT (0), "max-size-bytes", 0, + "max-size-buffers", 1, NULL); + gst_element_no_more_pads (GST_ELEMENT (dvdbin)); +} + static gboolean try_create_piece (RsnDvdBin * dvdbin, gint index, const gchar * factory, GType type, const gchar * name, const gchar * descr) @@ -335,10 +339,12 @@ typedef struct { RsnDvdBin *dvdbin; GstPad *pad; + gulong pad_block_id; } RsnDvdBinPadBlockCtx; -static void dvdbin_pad_blocked_cb (GstPad * pad, gboolean blocked, - RsnDvdBinPadBlockCtx * ctx); +static GstPadProbeReturn dvdbin_pad_blocked_cb (GstPad * pad, + GstPadProbeInfo * info, RsnDvdBinPadBlockCtx * ctx); + static void _pad_block_destroy_notify (RsnDvdBinPadBlockCtx * ctx) { @@ -348,6 +354,29 @@ _pad_block_destroy_notify (RsnDvdBinPadBlockCtx * ctx) } static gboolean +try_link_pieces (GstElement * e1, const gchar * pad1, GstElement * e2, + const gchar * pad2) +{ + GstPad *src = gst_element_get_static_pad (e1, pad1); + GstPad *sink = gst_element_get_static_pad (e2, pad2); + gboolean ret = FALSE; + + if (src == NULL || sink == NULL) + goto done; + + if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink))) + goto done; + + ret = TRUE; +done: + if (src) + gst_object_unref (src); + if (sink) + gst_object_unref (sink); + return ret; +} + +static gboolean create_elements (RsnDvdBin * dvdbin) { GstPadTemplate *src_templ = NULL; @@ -366,6 +395,7 @@ create_elements (RsnDvdBin * dvdbin) "device", dvdbin->device, NULL); } + /* FIXME: Import and use local copy of mpeg PS demuxer */ if (!try_create_piece (dvdbin, DVD_ELEM_DEMUX, NULL, GST_TYPE_FLUPS_DEMUX, "dvddemux", "DVD demuxer")) return FALSE; @@ -381,7 +411,7 @@ create_elements (RsnDvdBin * dvdbin) g_signal_connect (G_OBJECT (dvdbin->pieces[DVD_ELEM_DEMUX]), "no-more-pads", G_CALLBACK (demux_no_more_pads), dvdbin); - if (!try_create_piece (dvdbin, DVD_ELEM_MQUEUE, "multiqueue", 0, "mq", + if (!try_create_piece (dvdbin, DVD_ELEM_MQUEUE, "multiqueue", 0, "rsnmq", "multiqueue")) return FALSE; @@ -389,15 +419,24 @@ create_elements (RsnDvdBin * dvdbin) "max-size-time", (7 * GST_SECOND / 10), "max-size-bytes", 0, "max-size-buffers", 0, NULL); + if (!try_create_piece (dvdbin, DVD_ELEM_VIDPARSE, "mpegvideoparse", 0, + "rsnvidparse", "video parser")) + return FALSE; + /* Decodebin will throw a missing element message to find an MPEG decoder */ if (!try_create_piece (dvdbin, DVD_ELEM_VIDDEC, NULL, RSN_TYPE_VIDEODEC, - "viddec", "video decoder")) + "rsnviddec", "video decoder")) return FALSE; - if (!try_create_piece (dvdbin, DVD_ELEM_PARSET, NULL, RSN_TYPE_RSNPARSETTER, + /* FIXME: Replace identity */ + if (!try_create_piece (dvdbin, DVD_ELEM_PARSET, "identity", 0, //RSN_TYPE_RSNPARSETTER, "rsnparsetter", "Aspect ratio adjustment")) return FALSE; + if (!try_link_pieces (dvdbin->pieces[DVD_ELEM_VIDPARSE], "src", + dvdbin->pieces[DVD_ELEM_VIDDEC], "sink")) + goto failed_vidparse_connect; + src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDDEC], "src"); sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_PARSET], "sink"); if (src == NULL || sink == NULL) @@ -420,23 +459,29 @@ create_elements (RsnDvdBin * dvdbin) bctx = g_slice_new (RsnDvdBinPadBlockCtx); bctx->dvdbin = gst_object_ref (dvdbin); bctx->pad = gst_object_ref (dvdbin->video_pad); - gst_pad_set_blocked_async_full (src, TRUE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) + bctx->pad_block_id = + gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, + (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) _pad_block_destroy_notify); gst_object_unref (src); src = NULL; + /* FIXME: Merge stream-selection logic to core and switch back */ if (!try_create_piece (dvdbin, DVD_ELEM_SPU_SELECT, NULL, - RSN_TYPE_STREAM_SELECTOR, "subpselect", "Subpicture stream selector")) + RSN_TYPE_INPUT_SELECTOR, "subpselect", "Subpicture stream selector")) return FALSE; + g_object_set (G_OBJECT (dvdbin->pieces[DVD_ELEM_SPU_SELECT]), + "sync-streams", FALSE, NULL); + /* Add a single standalone queue to hold a single buffer of SPU data */ if (!try_create_piece (dvdbin, DVD_ELEM_SPUQ, "queue", 0, "spu_q", "subpicture decoder buffer")) return FALSE; + /* Allow a lot more while pre-rolling */ g_object_set (dvdbin->pieces[DVD_ELEM_SPUQ], "max-size-time", G_GUINT64_CONSTANT (0), "max-size-bytes", 0, - "max-size-buffers", 1, NULL); + "max-size-buffers", 100, NULL); src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_SPU_SELECT], "src"); sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_SPUQ], "sink"); @@ -461,37 +506,25 @@ create_elements (RsnDvdBin * dvdbin) bctx = g_slice_new (RsnDvdBinPadBlockCtx); bctx->dvdbin = gst_object_ref (dvdbin); bctx->pad = gst_object_ref (dvdbin->subpicture_pad); - gst_pad_set_blocked_async_full (src, TRUE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) + bctx->pad_block_id = + gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, + (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) _pad_block_destroy_notify); gst_object_unref (src); src = NULL; if (!try_create_piece (dvdbin, DVD_ELEM_AUD_SELECT, NULL, - RSN_TYPE_STREAM_SELECTOR, "audioselect", "Audio stream selector")) - return FALSE; - - if (!try_create_piece (dvdbin, DVD_ELEM_AUD_MUNGE, NULL, - RSN_TYPE_AUDIOMUNGE, "audioearlymunge", "Audio output filter")) + RSN_TYPE_INPUT_SELECTOR, "audioselect", "Audio stream selector")) return FALSE; + g_object_set (G_OBJECT (dvdbin->pieces[DVD_ELEM_AUD_SELECT]), + "sync-streams", FALSE, NULL); if (!try_create_piece (dvdbin, DVD_ELEM_AUDDEC, NULL, RSN_TYPE_AUDIODEC, "auddec", "audio decoder")) return FALSE; - src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], "src"); - sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUDDEC], "sink"); - if (src == NULL || sink == NULL) - goto failed_aud_connect; - if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink))) - goto failed_aud_connect; - gst_object_unref (sink); - gst_object_unref (src); - src = sink = NULL; - src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT], "src"); - sink = - gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], "sink"); + sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUDDEC], "sink"); if (src == NULL || sink == NULL) goto failed_aud_connect; if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink))) @@ -513,16 +546,16 @@ create_elements (RsnDvdBin * dvdbin) bctx = g_slice_new (RsnDvdBinPadBlockCtx); bctx->dvdbin = gst_object_ref (dvdbin); bctx->pad = gst_object_ref (dvdbin->audio_pad); - gst_pad_set_blocked_async_full (src, TRUE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) + bctx->pad_block_id = + gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, + (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify) _pad_block_destroy_notify); gst_object_unref (src); src = NULL; if (dvdbin->video_added && (dvdbin->audio_added || dvdbin->audio_broken) && dvdbin->subpicture_added) { - GST_DEBUG_OBJECT (dvdbin, "Firing no more pads"); - gst_element_no_more_pads (GST_ELEMENT (dvdbin)); + rsn_dvdbin_no_more_pads (dvdbin); } return TRUE; @@ -531,6 +564,10 @@ failed_connect: GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL), ("Could not connect DVD source and demuxer elements")); goto error_out; +failed_vidparse_connect: + GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL), + ("Could not connect DVD video parser and video decoder")); + goto error_out; failed_viddec_connect: GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL), ("Could not connect DVD video decoder and aspect ratio adjuster")); @@ -613,6 +650,7 @@ remove_elements (RsnDvdBin * dvdbin) dvdbin->video_added = dvdbin->audio_added = dvdbin->subpicture_added = FALSE; dvdbin->audio_broken = FALSE; dvdbin->video_pad = dvdbin->audio_pad = dvdbin->subpicture_pad = NULL; + dvdbin->did_no_more_pads = FALSE; } static GstPad * @@ -634,7 +672,7 @@ connect_thru_mq (RsnDvdBin * dvdbin, GstPad * pad) return FALSE; sinkname = gst_pad_get_name (mq_sink); - tmp = sinkname + 4; + tmp = sinkname + 5; srcname = g_strdup_printf ("src_%s", tmp); mq_src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_MQUEUE], @@ -653,9 +691,9 @@ can_sink_caps (GstElement * e, GstCaps * caps) GstPad *sink = gst_element_get_static_pad (e, "sink"); if (sink) { - GstCaps *sink_caps = gst_pad_get_caps (sink); + GstCaps *sink_caps = gst_pad_query_caps (sink, caps); if (sink_caps) { - res = gst_caps_can_intersect (sink_caps, caps); + res = !gst_caps_is_empty (sink_caps); gst_caps_unref (sink_caps); } gst_object_unref (sink); @@ -675,7 +713,7 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin) GST_DEBUG_OBJECT (dvdbin, "New pad: %" GST_PTR_FORMAT, pad); - caps = gst_pad_get_caps (pad); + caps = gst_pad_query_caps (pad, NULL); if (caps == NULL) { GST_WARNING_OBJECT (dvdbin, "NULL caps from pad %" GST_PTR_FORMAT, pad); return; @@ -693,15 +731,18 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin) s = gst_caps_get_structure (caps, 0); g_return_if_fail (s != NULL); - if (can_sink_caps (dvdbin->pieces[DVD_ELEM_VIDDEC], caps)) { + if (can_sink_caps (dvdbin->pieces[DVD_ELEM_VIDPARSE], caps)) { + GST_LOG_OBJECT (dvdbin, "Found video pad w/ caps %" GST_PTR_FORMAT, caps); dest_pad = - gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDDEC], "sink"); - } else if (g_str_equal (gst_structure_get_name (s), "video/x-dvd-subpicture")) { + gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDPARSE], "sink"); + } else if (g_str_equal (gst_structure_get_name (s), "subpicture/x-dvd")) { + GST_LOG_OBJECT (dvdbin, "Found subpicture pad w/ caps %" GST_PTR_FORMAT, + caps); dest_pad = gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_SPU_SELECT], "sink_%u"); skip_mq = TRUE; - } else if (can_sink_caps (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], caps)) { + } else if (can_sink_caps (dvdbin->pieces[DVD_ELEM_AUDDEC], caps)) { GST_LOG_OBJECT (dvdbin, "Found audio pad w/ caps %" GST_PTR_FORMAT, caps); dest_pad = gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT], @@ -720,7 +761,7 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin) ("No MPEG video decoder found")); } else { GST_ELEMENT_WARNING (dvdbin, STREAM, CODEC_NOT_FOUND, (NULL), - ("No MPEG audio decoder found")); + ("No audio decoder found")); } } @@ -763,6 +804,7 @@ demux_no_more_pads (GstElement * element, RsnDvdBin * dvdbin) gboolean no_more_pads = FALSE; guint n_audio_pads = 0; + GST_DEBUG_OBJECT (dvdbin, "Received no more pads from demuxer"); DVDBIN_PREROLL_LOCK (dvdbin); g_object_get (dvdbin->pieces[DVD_ELEM_AUD_SELECT], "n-pads", &n_audio_pads, @@ -777,25 +819,19 @@ demux_no_more_pads (GstElement * element, RsnDvdBin * dvdbin) if (no_more_pads) { GST_DEBUG_OBJECT (dvdbin, "Firing no more pads from demuxer no-more-pads cb"); - gst_element_no_more_pads (GST_ELEMENT (dvdbin)); + rsn_dvdbin_no_more_pads (dvdbin); } } -static void -dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked, - RsnDvdBinPadBlockCtx * ctx) +static GstPadProbeReturn +dvdbin_pad_blocked_cb (GstPad * opad, + GstPadProbeInfo * info, RsnDvdBinPadBlockCtx * ctx) { RsnDvdBin *dvdbin; GstPad *pad; gboolean added_last_pad = FALSE; gboolean added = FALSE; - /* If not blocked ctx is NULL! */ - if (!blocked) { - GST_DEBUG_OBJECT (opad, "Pad unblocked"); - return; - } - dvdbin = ctx->dvdbin; pad = ctx->pad; @@ -812,8 +848,8 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked, } DVDBIN_PREROLL_UNLOCK (dvdbin); - gst_pad_set_blocked_async (opad, FALSE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL); + if (ctx->pad_block_id) + gst_pad_remove_probe (opad, ctx->pad_block_id); } else if (pad == dvdbin->audio_pad) { GST_DEBUG_OBJECT (opad, "Pad block -> audio pad"); DVDBIN_PREROLL_LOCK (dvdbin); @@ -826,8 +862,8 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked, } DVDBIN_PREROLL_UNLOCK (dvdbin); - gst_pad_set_blocked_async (opad, FALSE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL); + if (ctx->pad_block_id) + gst_pad_remove_probe (opad, ctx->pad_block_id); } else if (pad == dvdbin->video_pad) { GST_DEBUG_OBJECT (opad, "Pad block -> video pad"); @@ -842,14 +878,16 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked, } DVDBIN_PREROLL_UNLOCK (dvdbin); - gst_pad_set_blocked_async (opad, FALSE, - (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL); + if (ctx->pad_block_id) + gst_pad_remove_probe (opad, ctx->pad_block_id); } if (added_last_pad) { GST_DEBUG_OBJECT (dvdbin, "Firing no more pads from pad-blocked cb"); - gst_element_no_more_pads (GST_ELEMENT (dvdbin)); + rsn_dvdbin_no_more_pads (dvdbin); } + + return GST_PAD_PROBE_OK; } static void diff --git a/ext/resindvd/resindvdbin.h b/ext/resindvd/resindvdbin.h index 29d51b80..f2e5d94d 100644 --- a/ext/resindvd/resindvdbin.h +++ b/ext/resindvd/resindvdbin.h @@ -43,14 +43,15 @@ typedef struct _RsnDvdBinClass RsnDvdBinClass; #define DVD_ELEM_DEMUX 1 #define DVD_ELEM_MQUEUE 2 #define DVD_ELEM_SPUQ 3 -#define DVD_ELEM_VIDDEC 4 -#define DVD_ELEM_PARSET 5 -#define DVD_ELEM_AUDDEC 6 -#define DVD_ELEM_VIDQ 7 -#define DVD_ELEM_SPU_SELECT 8 -#define DVD_ELEM_AUD_SELECT 9 -#define DVD_ELEM_AUD_MUNGE 10 -#define DVD_ELEM_LAST 11 +#define DVD_ELEM_VIDPARSE 4 +#define DVD_ELEM_VIDDEC 5 +#define DVD_ELEM_PARSET 6 +#define DVD_ELEM_AUDPARSE 7 +#define DVD_ELEM_AUDDEC 8 +#define DVD_ELEM_VIDQ 9 +#define DVD_ELEM_SPU_SELECT 10 +#define DVD_ELEM_AUD_SELECT 11 +#define DVD_ELEM_LAST 12 struct _RsnDvdBin { @@ -73,6 +74,8 @@ struct _RsnDvdBin gboolean audio_broken; gboolean subpicture_added; + gboolean did_no_more_pads; + GList *mq_req_pads; }; diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c index fff79b22..58d3c6fa 100644 --- a/ext/resindvd/resindvdsrc.c +++ b/ext/resindvd/resindvdsrc.c @@ -24,11 +24,12 @@ #include <stdio.h> #include <string.h> +#include <gmodule.h> #include <gst/gst.h> #include <gst/glib-compat-private.h> #include <gst/gst-i18n-plugin.h> -#include <gst/interfaces/navigation.h> #include <gst/video/video.h> +#include <gst/video/navigation.h> #include "resindvdsrc.h" @@ -89,6 +90,7 @@ typedef struct static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, + // GST_STATIC_CAPS ("video/mpeg,mpegversion=2,systemstream=true") GST_STATIC_CAPS ("application/x-resin-dvd") ); @@ -100,8 +102,9 @@ static GstFormat chapter_format; static void rsn_dvdsrc_register_extra (GType rsn_dvdsrc_type); -GST_BOILERPLATE_FULL (resinDvdSrc, rsn_dvdsrc, GstBaseSrc, - GST_TYPE_BASE_SRC, rsn_dvdsrc_register_extra); +#define rsn_dvdsrc_parent_class parent_class +G_DEFINE_TYPE_EXTENDED (resinDvdSrc, rsn_dvdsrc, GST_TYPE_BASE_SRC, + 0, rsn_dvdsrc_register_extra (g_define_type_id)); static gboolean read_vts_info (resinDvdSrc * src); @@ -118,11 +121,11 @@ static gboolean rsn_dvdsrc_unlock (GstBaseSrc * bsrc); static gboolean rsn_dvdsrc_unlock_stop (GstBaseSrc * bsrc); static gboolean rsn_dvdsrc_is_seekable (GstBaseSrc * bsrc); -static gboolean rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc, GstEvent * event, - GstSegment * segment); +static gboolean rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc, + GstEvent * event, GstSegment * segment); static gboolean rsn_dvdsrc_do_seek (GstBaseSrc * bsrc, GstSegment * segment); -static GstStateChangeReturn -rsn_dvdsrc_change_state (GstElement * element, GstStateChange transition); +static GstStateChangeReturn rsn_dvdsrc_change_state (GstElement * element, + GstStateChange transition); static void rsn_dvdsrc_prepare_spu_stream_event (resinDvdSrc * src, guint8 logical_stream, guint8 phys_stream, gboolean forced_only); @@ -142,7 +145,6 @@ static void rsn_dvdsrc_check_nav_blocks (resinDvdSrc * src); static void rsn_dvdsrc_schedule_nav_cb (resinDvdSrc * src, RsnDvdPendingNav * next_nav); -static gboolean rsn_dvdsrc_check_get_range (GstBaseSrc * src); static GstFlowReturn rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer ** buf); static gboolean rsn_dvdsrc_src_event (GstBaseSrc * basesrc, GstEvent * event); @@ -189,18 +191,6 @@ rsn_dvdsrc_register_extra (GType rsn_dvdsrc_type) } static void -rsn_dvdsrc_base_init (gpointer gclass) -{ - - GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&src_factory)); - gst_element_class_set_details_simple (element_class, "Resin DVD Src", - "Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>"); -} - -static void rsn_dvdsrc_class_init (resinDvdSrcClass * klass) { GObjectClass *gobject_class; @@ -228,8 +218,6 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass) GST_DEBUG_FUNCPTR (rsn_dvdsrc_prepare_seek); gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (rsn_dvdsrc_do_seek); - gstbasesrc_class->check_get_range = - GST_DEBUG_FUNCPTR (rsn_dvdsrc_check_get_range); gstbasesrc_class->create = GST_DEBUG_FUNCPTR (rsn_dvdsrc_create); g_object_class_install_property (gobject_class, ARG_DEVICE, @@ -240,10 +228,15 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass) g_param_spec_boolean ("fast-start", "Fast start", "Skip straight to the DVD menu on start", DEFAULT_FASTSTART, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&src_factory)); + gst_element_class_set_details_simple (gstelement_class, "Resin DVD Src", + "Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>"); } static void -rsn_dvdsrc_init (resinDvdSrc * rsndvdsrc, resinDvdSrcClass * gclass) +rsn_dvdsrc_init (resinDvdSrc * rsndvdsrc) { const gchar *envvar; @@ -637,11 +630,9 @@ rsn_dvdsrc_do_still (resinDvdSrc * src, int duration) * event, then sleep */ still_event = gst_video_event_new_still_frame (TRUE); - gst_segment_set_last_stop (segment, GST_FORMAT_TIME, src->cur_end_ts); + segment->stop = segment->position = src->cur_end_ts; - seg_event = gst_event_new_new_segment_full (TRUE, - segment->rate, segment->applied_rate, segment->format, - segment->start, segment->last_stop, segment->time); + seg_event = gst_event_new_segment (segment); /* Grab any pending highlight event to send too */ hl_event = src->highlight_event; @@ -757,9 +748,8 @@ rsn_dvdsrc_do_still (resinDvdSrc * src, int duration) still_event = gst_video_event_new_still_frame (FALSE); /* If the segment was too short in a timed still, it may need extending */ - if (segment->last_stop < segment->start + GST_SECOND * duration) - gst_segment_set_last_stop (segment, GST_FORMAT_TIME, - segment->start + (GST_SECOND * duration)); + if (segment->position < segment->start + GST_SECOND * duration) + segment->position = segment->start + (GST_SECOND * duration); g_mutex_unlock (src->dvd_lock); gst_pad_push_event (GST_BASE_SRC_PAD (src), still_event); @@ -875,9 +865,7 @@ update_title_info (resinDvdSrc * src, gboolean force) } } if (title_str) { - GstTagList *tags = gst_tag_list_new (); - gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE, - title_str, NULL); + GstTagList *tags = gst_tag_list_new (GST_TAG_TITLE, title_str, NULL); g_free (title_str); return tags; } @@ -910,19 +898,18 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) { GstFlowReturn ret = GST_FLOW_OK; dvdnav_status_t dvdnav_ret; - guint8 *data; gint event, len; + GstMapInfo mmap; /* Allocate an output buffer if there isn't a pending one */ - if (src->alloc_buf == NULL) { - src->alloc_buf = gst_buffer_new_and_alloc (DVD_VIDEO_LB_LEN); - gst_buffer_set_caps (src->alloc_buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src))); - } + if (src->alloc_buf == NULL) + src->alloc_buf = gst_buffer_new_allocate (NULL, DVD_VIDEO_LB_LEN, NULL); + + gst_buffer_map (src->alloc_buf, &mmap, GST_MAP_WRITE); - data = GST_BUFFER_DATA (src->alloc_buf); len = DVD_VIDEO_LB_LEN; - dvdnav_ret = dvdnav_get_next_block (src->dvdnav, data, &event, &len); + dvdnav_ret = dvdnav_get_next_block (src->dvdnav, mmap.data, &event, &len); if (dvdnav_ret != DVDNAV_STATUS_OK) goto read_error; g_mutex_lock (src->branch_lock); @@ -933,10 +920,12 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) switch (event) { case DVDNAV_BLOCK_OK: /* Data block that needs outputting */ + gst_buffer_unmap (src->alloc_buf, &mmap); src->next_buf = src->alloc_buf; + src->alloc_buf = NULL; + src->next_is_nav_block = FALSE; src->next_nav_ts = GST_CLOCK_TIME_NONE; - src->alloc_buf = NULL; src->in_still_state = FALSE; break; case DVDNAV_NAV_PACKET: @@ -988,6 +977,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) src->cur_vobu_base_ts = new_base_time; /* NAV packet is also a data block that needs sending */ + gst_buffer_unmap (src->alloc_buf, &mmap); src->next_buf = src->alloc_buf; src->alloc_buf = NULL; @@ -1011,11 +1001,11 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) case DVDNAV_STOP: /* End of the disc. EOS */ dvdnav_reset (src->dvdnav); - ret = GST_FLOW_UNEXPECTED; + ret = GST_FLOW_EOS; break; case DVDNAV_STILL_FRAME: { - dvdnav_still_event_t *info = (dvdnav_still_event_t *) data; + dvdnav_still_event_t *info = (dvdnav_still_event_t *) mmap.data; if (!have_dvd_lock) { /* At a still frame but can't block, handle it later */ @@ -1042,7 +1032,8 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) goto internal_error; break; case DVDNAV_CELL_CHANGE:{ - dvdnav_cell_change_event_t *event = (dvdnav_cell_change_event_t *) data; + dvdnav_cell_change_event_t *event = + (dvdnav_cell_change_event_t *) mmap.data; GstMessage *message; src->pgc_duration = MPEGTIME_TO_GSTTIME (event->pgc_length); @@ -1057,8 +1048,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) GST_TIME_FORMAT, GST_TIME_ARGS (src->pgc_duration), GST_TIME_ARGS (src->cur_position)); - message = gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_TIME, - src->pgc_duration); + message = gst_message_new_duration_changed (GST_OBJECT (src)); gst_element_post_message (GST_ELEMENT (src), message); rsn_dvdsrc_prepare_streamsinfo_event (src); @@ -1067,10 +1057,11 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) break; } case DVDNAV_SPU_CLUT_CHANGE: - rsn_dvdsrc_prepare_clut_change_event (src, (const guint32 *) data); + rsn_dvdsrc_prepare_clut_change_event (src, (const guint32 *) mmap.data); break; case DVDNAV_VTS_CHANGE:{ - dvdnav_vts_change_event_t *event = (dvdnav_vts_change_event_t *) data; + dvdnav_vts_change_event_t *event = + (dvdnav_vts_change_event_t *) mmap.data; if (dvdnav_is_domain_vmgm (src->dvdnav)) { src->vts_n = 0; @@ -1089,7 +1080,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) } case DVDNAV_AUDIO_STREAM_CHANGE:{ dvdnav_audio_stream_change_event_t *event = - (dvdnav_audio_stream_change_event_t *) data; + (dvdnav_audio_stream_change_event_t *) mmap.data; rsn_dvdsrc_prepare_audio_stream_event (src, event->logical, event->physical); @@ -1100,7 +1091,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) } case DVDNAV_SPU_STREAM_CHANGE:{ dvdnav_spu_stream_change_event_t *event = - (dvdnav_spu_stream_change_event_t *) data; + (dvdnav_spu_stream_change_event_t *) mmap.data; gint phys_track = event->physical_wide & 0x1f; gboolean forced_only = (event->physical_wide & 0x80) ? TRUE : FALSE; @@ -1117,7 +1108,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) } case DVDNAV_HIGHLIGHT:{ GST_DEBUG_OBJECT (src, "highlight change event, button %d", - ((dvdnav_highlight_event_t *) data)->buttonN); + ((dvdnav_highlight_event_t *) mmap.data)->buttonN); rsn_dvdsrc_update_highlight (src); break; } @@ -1131,6 +1122,9 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) GST_WARNING_OBJECT (src, "Unknown dvdnav event %d", event); break; } + if (src->alloc_buf) { + gst_buffer_unmap (src->alloc_buf, &mmap); + } if (src->highlight_event && have_dvd_lock && src->in_playing) { GstEvent *hl_event = src->highlight_event; @@ -1148,6 +1142,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock) /* ERRORS */ read_error: { + gst_buffer_unmap (src->alloc_buf, &mmap); if (!rsn_descrambler_available ()) { GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD. This may be because the DVD is encrypted " @@ -1163,6 +1158,7 @@ read_error: } internal_error: { + gst_buffer_unmap (src->alloc_buf, &mmap); GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")), ("Internal error processing DVD commands. Error: %s", dvdnav_err_to_string (src->dvdnav))); @@ -1171,6 +1167,7 @@ internal_error: branching: { g_mutex_unlock (src->branch_lock); + gst_buffer_unmap (src->alloc_buf, &mmap); return GST_FLOW_FLUSHING; } } @@ -1288,14 +1285,6 @@ rsn_dvdsrc_prepare_next_block (resinDvdSrc * src, gboolean have_dvd_lock) return ret; } -static gboolean -rsn_dvdsrc_check_get_range (GstBaseSrc * src) -{ - /* ResinDVD never operates in pull mode. There might be - * a reason to in the future though? */ - return FALSE; -} - static GstFlowReturn rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset, guint length, GstBuffer ** outbuf) @@ -1396,11 +1385,11 @@ rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset, } if (src->cur_end_ts != GST_CLOCK_TIME_NONE) - gst_segment_set_last_stop (segment, GST_FORMAT_TIME, src->cur_end_ts); + segment->position = src->cur_end_ts; if (tags) { - gst_element_found_tags_for_pad (GST_ELEMENT_CAST (src), - GST_BASE_SRC_PAD (src), tags); + GstEvent *tag_event = gst_event_new_tag (tags); + gst_pad_push_event (GST_BASE_SRC_PAD (src), tag_event); tags = NULL; } g_mutex_lock (src->dvd_lock); @@ -2254,7 +2243,15 @@ rsn_dvdsrc_activate_nav_block (resinDvdSrc * src, GstBuffer * nav_buf) { int32_t forced_button; - navRead_PCI (&src->cur_pci, GST_BUFFER_DATA (nav_buf) + 0x2d); + { + GstMapInfo mmap; + gst_buffer_map (nav_buf, &mmap, GST_MAP_READ); + + navRead_PCI (&src->cur_pci, mmap.data + 0x2d); + + gst_buffer_unmap (nav_buf, &mmap); + } + src->have_pci = TRUE; forced_button = src->cur_pci.hli.hl_gi.fosl_btnn & 0x3f; @@ -2374,7 +2371,8 @@ rsn_dvdsrc_schedule_nav_cb (resinDvdSrc * src, RsnDvdPendingNav * next_nav) GST_TIME_ARGS (next_nav->running_ts)); g_mutex_unlock (src->dvd_lock); - gst_clock_id_wait_async (src->nav_clock_id, rsn_dvdsrc_nav_clock_cb, src); + gst_clock_id_wait_async (src->nav_clock_id, rsn_dvdsrc_nav_clock_cb, src, + NULL); gst_object_unref (clock); g_mutex_lock (src->dvd_lock); } @@ -2615,6 +2613,16 @@ rsn_dvdsrc_src_query (GstBaseSrc * basesrc, GstQuery * query) res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); break; } + case GST_QUERY_SCHEDULING: + { + /* Make sure we operate in pull mode */ + gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEQUENTIAL, 1, -1, + 0); + gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH); + + res = TRUE; + break; + } default: res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query); break; @@ -2653,7 +2661,7 @@ rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc, GstEvent * event, /* Seeks in our internal formats are passed directly through to the do_seek * method. */ gst_segment_init (segment, seek_format); - gst_segment_set_seek (segment, rate, seek_format, flags, cur_type, cur, + gst_segment_do_seek (segment, rate, seek_format, flags, cur_type, cur, stop_type, stop, &update); return TRUE; @@ -2898,7 +2906,7 @@ rsn_dvdsrc_do_seek (GstBaseSrc * bsrc, GstSegment * segment) segment->format = GST_FORMAT_TIME; /* The first TS output: */ - segment->last_stop = segment->start = src->cur_start_ts; + segment->position = segment->start = src->cur_start_ts; /* time field = position is the 'logical' stream time here: */ segment->time = 0; diff --git a/ext/resindvd/rsnaudiomunge.c b/ext/resindvd/rsnaudiomunge.c deleted file mode 100644 index 2b78dfea..00000000 --- a/ext/resindvd/rsnaudiomunge.c +++ /dev/null @@ -1,364 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net> - * - * 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 <string.h> - -#include <gst/gst.h> -#include <gst/video/video.h> - -#include "rsnaudiomunge.h" - -GST_DEBUG_CATEGORY_STATIC (rsn_audiomunge_debug); -#define GST_CAT_DEFAULT rsn_audiomunge_debug - -#define AUDIO_FILL_THRESHOLD (GST_SECOND/5) - -/* Filter signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; - -enum -{ - PROP_0, - PROP_SILENT -}; - -/* the capabilities of the inputs and outputs. - * - * describe the real formats here. - */ -static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("ANY") - ); - -static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("ANY") - ); - -G_DEFINE_TYPE (RsnAudioMunge, rsn_audiomunge, GST_TYPE_ELEMENT); - -static void rsn_audiomunge_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void rsn_audiomunge_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean rsn_audiomunge_set_caps (GstPad * pad, GstCaps * caps); -static GstFlowReturn rsn_audiomunge_chain (GstPad * pad, GstBuffer * buf); -static gboolean rsn_audiomunge_sink_event (GstPad * pad, GstEvent * event); - -static GstStateChangeReturn -rsn_audiomunge_change_state (GstElement * element, GstStateChange transition); - -static void -rsn_audiomunge_class_init (RsnAudioMungeClass * klass) -{ - GObjectClass *gobject_class = (GObjectClass *) (klass); - GstElementClass *element_class = (GstElementClass *) (klass); - - GST_DEBUG_CATEGORY_INIT (rsn_audiomunge_debug, "rsnaudiomunge", - 0, "ResinDVD audio stream regulator"); - - gst_element_class_add_pad_template (element_class, - 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_details_simple (element_class, "RsnAudioMunge", - "Audio/Filter", - "Resin DVD audio stream regulator", "Jan Schmidt <thaytan@noraisin.net>"); - - gobject_class->set_property = rsn_audiomunge_set_property; - gobject_class->get_property = rsn_audiomunge_get_property; - - element_class->change_state = rsn_audiomunge_change_state; -} - -static void -rsn_audiomunge_init (RsnAudioMunge * munge) -{ - munge->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink"); - gst_pad_set_setcaps_function (munge->sinkpad, - GST_DEBUG_FUNCPTR (rsn_audiomunge_set_caps)); - gst_pad_set_getcaps_function (munge->sinkpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_chain_function (munge->sinkpad, - GST_DEBUG_FUNCPTR (rsn_audiomunge_chain)); - gst_pad_set_event_function (munge->sinkpad, - GST_DEBUG_FUNCPTR (rsn_audiomunge_sink_event)); - gst_element_add_pad (GST_ELEMENT (munge), munge->sinkpad); - - munge->srcpad = gst_pad_new_from_static_template (&src_template, "src"); - gst_pad_set_getcaps_function (munge->srcpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_element_add_pad (GST_ELEMENT (munge), munge->srcpad); -} - -static void -rsn_audiomunge_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //RsnAudioMunge *munge = RSN_AUDIOMUNGE (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -rsn_audiomunge_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //RsnAudioMunge *munge = RSN_AUDIOMUNGE (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static gboolean -rsn_audiomunge_set_caps (GstPad * pad, GstCaps * caps) -{ - RsnAudioMunge *munge = RSN_AUDIOMUNGE (gst_pad_get_parent (pad)); - GstPad *otherpad; - gboolean ret; - - g_return_val_if_fail (munge != NULL, FALSE); - - otherpad = (pad == munge->srcpad) ? munge->sinkpad : munge->srcpad; - - ret = gst_pad_set_caps (otherpad, caps); - gst_object_unref (munge); - return ret; -} - -static void -rsn_audiomunge_reset (RsnAudioMunge * munge) -{ - munge->have_audio = FALSE; - munge->in_still = FALSE; - gst_segment_init (&munge->sink_segment, GST_FORMAT_TIME); -} - -static GstFlowReturn -rsn_audiomunge_chain (GstPad * pad, GstBuffer * buf) -{ - RsnAudioMunge *munge = RSN_AUDIOMUNGE (GST_OBJECT_PARENT (pad)); - - if (!munge->have_audio) { - GST_INFO_OBJECT (munge, - "First audio after flush has TS %" GST_TIME_FORMAT, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); - } - - munge->have_audio = TRUE; - - /* just push out the incoming buffer without touching it */ - return gst_pad_push (munge->srcpad, buf); -} - -/* Create and send a silence buffer downstream */ -static GstFlowReturn -rsn_audiomunge_make_audio (RsnAudioMunge * munge, - GstClockTime start, GstClockTime fill_time) -{ - GstFlowReturn ret; - GstBuffer *audio_buf; - GstCaps *caps; - guint buf_size; - - /* Just generate a 48khz stereo buffer for now */ - /* FIXME: Adapt to the allowed formats, according to the currently - * plugged decoder, or at least add a source pad that accepts the - * caps we're outputting if the upstream decoder does not */ -#if 0 - caps = - gst_caps_from_string - ("audio/x-raw-int,rate=48000,channels=2,width=16,depth=16,signed=(boolean)true,endianness=4321"); - buf_size = 4 * (48000 * fill_time / GST_SECOND); -#else - caps = gst_caps_from_string ("audio/x-raw-float, endianness=(int)1234," - "width=(int)32, channels=(int)2, rate=(int)48000"); - buf_size = 2 * 4 * (48000 * fill_time / GST_SECOND); -#endif - - audio_buf = gst_buffer_new_and_alloc (buf_size); - - gst_buffer_set_caps (audio_buf, caps); - gst_caps_unref (caps); - - GST_BUFFER_TIMESTAMP (audio_buf) = start; - GST_BUFFER_DURATION (audio_buf) = fill_time; - GST_BUFFER_FLAG_SET (audio_buf, GST_BUFFER_FLAG_DISCONT); - - memset (GST_BUFFER_DATA (audio_buf), 0, buf_size); - - GST_LOG_OBJECT (munge, "Sending %u bytes (%" GST_TIME_FORMAT - ") of audio data with TS %" GST_TIME_FORMAT, - buf_size, GST_TIME_ARGS (fill_time), GST_TIME_ARGS (start)); - - ret = gst_pad_push (munge->srcpad, audio_buf); - - return ret; -} - -static gboolean -rsn_audiomunge_sink_event (GstPad * pad, GstEvent * event) -{ - gboolean ret = FALSE; - RsnAudioMunge *munge = RSN_AUDIOMUNGE (gst_pad_get_parent (pad)); - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_FLUSH_STOP: - rsn_audiomunge_reset (munge); - ret = gst_pad_push_event (munge->srcpad, event); - break; - case GST_EVENT_NEWSEGMENT: - { - GstSegment *segment; - gboolean update; - GstFormat format; - gdouble rate, arate; - gint64 start, stop, time; - - gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format, - &start, &stop, &time); - - /* we need TIME format */ - if (format != GST_FORMAT_TIME) - goto newseg_wrong_format; - - /* now configure the values */ - segment = &munge->sink_segment; - - gst_segment_set_newsegment_full (segment, update, - rate, arate, format, start, stop, time); - - /* - * FIXME: - * If this is a segment update and accum >= threshold, - * or we're in a still frame and there's been no audio received, - * then we need to generate some audio data. - * - * If caused by a segment start update (time advancing in a gap) adjust - * the new-segment and send the buffer. - * - * Otherwise, send the buffer before the newsegment, so that it appears - * in the closing segment. - */ - if (!update) { - GST_DEBUG_OBJECT (munge, - "Sending newsegment: update %d start %" GST_TIME_FORMAT " stop %" - GST_TIME_FORMAT " accum now %" GST_TIME_FORMAT, update, - GST_TIME_ARGS (start), GST_TIME_ARGS (stop), - GST_TIME_ARGS (segment->accum)); - - ret = gst_pad_push_event (munge->srcpad, event); - } - - if (!munge->have_audio) { - if ((update && segment->accum >= AUDIO_FILL_THRESHOLD) - || munge->in_still) { - GST_DEBUG_OBJECT (munge, - "Sending audio fill with ts %" GST_TIME_FORMAT ": accum = %" - GST_TIME_FORMAT " still-state=%d", GST_TIME_ARGS (segment->start), - GST_TIME_ARGS (segment->accum), munge->in_still); - - /* Just generate a 200ms silence buffer for now. FIXME: Fill the gap */ - if (rsn_audiomunge_make_audio (munge, segment->start, - GST_SECOND / 5) == GST_FLOW_OK) - munge->have_audio = TRUE; - } else { - GST_LOG_OBJECT (munge, "Not sending audio fill buffer: " - "Not segment update, or segment accum below thresh: accum = %" - GST_TIME_FORMAT, GST_TIME_ARGS (segment->accum)); - } - } - - if (update) { - GST_DEBUG_OBJECT (munge, - "Sending newsegment: update %d start %" GST_TIME_FORMAT " stop %" - GST_TIME_FORMAT " accum now %" GST_TIME_FORMAT, update, - GST_TIME_ARGS (start), GST_TIME_ARGS (stop), - GST_TIME_ARGS (segment->accum)); - - ret = gst_pad_push_event (munge->srcpad, event); - } - - break; - } - case GST_EVENT_CUSTOM_DOWNSTREAM: - { - gboolean in_still; - - if (gst_video_event_parse_still_frame (event, &in_still)) { - /* Remember the still-frame state, so we can generate a pre-roll - * buffer when a new-segment arrives */ - munge->in_still = in_still; - GST_INFO_OBJECT (munge, "AUDIO MUNGE: still-state now %d", - munge->in_still); - } - - ret = gst_pad_push_event (munge->srcpad, event); - break; - } - default: - ret = gst_pad_push_event (munge->srcpad, event); - break; - } - - gst_object_unref (munge); - return ret; - -newseg_wrong_format: - - GST_DEBUG_OBJECT (munge, "received non TIME newsegment"); - gst_event_unref (event); - gst_object_unref (munge); - return FALSE; -} - -static GstStateChangeReturn -rsn_audiomunge_change_state (GstElement * element, GstStateChange transition) -{ - RsnAudioMunge *munge = RSN_AUDIOMUNGE (element); - GstStateChangeReturn ret; - - if (transition == GST_STATE_CHANGE_READY_TO_PAUSED) - rsn_audiomunge_reset (munge); - - ret = - GST_ELEMENT_CLASS (rsn_audiomunge_parent_class)->change_state (element, - transition); - - return ret; -} diff --git a/ext/resindvd/rsnaudiomunge.h b/ext/resindvd/rsnaudiomunge.h deleted file mode 100644 index f5ada285..00000000 --- a/ext/resindvd/rsnaudiomunge.h +++ /dev/null @@ -1,61 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net> - * - * 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 __RSNAUDIOMUNGE_H__ -#define __RSNAUDIOMUNGE_H__ - -#include <gst/gst.h> - -G_BEGIN_DECLS - -/* #defines don't like whitespacey bits */ -#define RSN_TYPE_AUDIOMUNGE (rsn_audiomunge_get_type()) -#define RSN_AUDIOMUNGE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),RSN_TYPE_AUDIOMUNGE,RsnAudioMunge)) -#define RSN_AUDIOMUNGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),RSN_TYPE_AUDIOMUNGE,RsnAudioMungeClass)) -#define RSN_IS_AUDIOMUNGE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),RSN_TYPE_AUDIOMUNGE)) -#define RSN_IS_AUDIOMUNGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),RSN_TYPE_AUDIOMUNGE)) - -typedef struct _RsnAudioMunge RsnAudioMunge; -typedef struct _RsnAudioMungeClass RsnAudioMungeClass; - -struct _RsnAudioMunge -{ - GstElement element; - - GstPad *sinkpad, *srcpad; - - GstSegment sink_segment; - gboolean have_audio; - gboolean in_still; -}; - -struct _RsnAudioMungeClass -{ - GstElementClass parent_class; -}; - -GType rsn_audiomunge_get_type (void); - -G_END_DECLS - -#endif /* __RSNAUDIOMUNGE_H__ */ diff --git a/ext/resindvd/rsndec.c b/ext/resindvd/rsndec.c index 788857a3..2c999d5e 100644 --- a/ext/resindvd/rsndec.c +++ b/ext/resindvd/rsndec.c @@ -23,6 +23,8 @@ #endif #include <string.h> +#include <gst/video/video.h> +#include <gst/audio/audio.h> #include "rsndec.h" @@ -53,9 +55,9 @@ rsn_dec_class_init (RsnDecClass * klass) } static gboolean -rsn_dec_sink_event (GstPad * pad, GstEvent * event) +rsn_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - RsnDec *self = RSN_DEC (gst_pad_get_parent (pad)); + RsnDec *self = RSN_DEC (parent); gboolean ret = TRUE; const GstStructure *s = gst_event_get_structure (event); const gchar *name = (s ? gst_structure_get_name (s) : NULL); @@ -63,9 +65,7 @@ rsn_dec_sink_event (GstPad * pad, GstEvent * event) if (name && g_str_equal (name, "application/x-gst-dvd")) ret = gst_pad_push_event (GST_PAD_CAST (self->srcpad), event); else - ret = self->sink_event_func (pad, event); - - gst_object_unref (self); + ret = self->sink_event_func (pad, parent, event); return ret; } @@ -246,10 +246,13 @@ _get_decoder_factories (gpointer arg) RsnDecFactoryFilterCtx ctx = { NULL, }; GstCaps *raw; gboolean raw_audio; + GstRegistry *registry = gst_registry_get (); ctx.desired_caps = gst_pad_template_get_caps (templ); - raw = gst_caps_from_string ("audio/x-raw-float"); + raw = + gst_caps_from_string + ("audio/x-raw,format=(string){ F32LE, F32BE, F64LE, F64BE }"); raw_audio = gst_caps_can_intersect (raw, ctx.desired_caps); if (raw_audio) { GstCaps *sub = gst_caps_subtract (ctx.desired_caps, raw); @@ -263,7 +266,7 @@ _get_decoder_factories (gpointer arg) ctx.decoder_caps = gst_caps_new_empty (); GST_DEBUG ("Finding factories for caps: %" GST_PTR_FORMAT, ctx.desired_caps); - factories = gst_default_registry_feature_filter ( + factories = gst_registry_feature_filter (registry, (GstPluginFeatureFilter) rsndec_factory_filter, FALSE, &ctx); /* If these are audio caps, we add audioconvert, which is not a decoder, @@ -274,7 +277,7 @@ _get_decoder_factories (gpointer arg) GstPluginFeature *feature; GST_DEBUG ("These are audio caps, adding audioconvert"); feature = - gst_default_registry_find_feature ("audioconvert", + gst_registry_find_feature (registry, "audioconvert", GST_TYPE_ELEMENT_FACTORY); if (feature) { factories = g_list_append (factories, feature); @@ -372,23 +375,14 @@ static GstStaticPadTemplate audio_sink_template = GST_STATIC_CAPS ("audio/mpeg,mpegversion=(int)1;" "audio/x-private1-lpcm;" "audio/x-private1-ac3;" "audio/ac3;" "audio/x-ac3;" - "audio/x-private1-dts; audio/x-raw-float") + "audio/x-private1-dts; audio/x-raw,format=(string)" + GST_AUDIO_FORMATS_ALL) ); static GstStaticPadTemplate audio_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-float, " - "rate = (int) [ 1, MAX ], " - "channels = (int) [ 1, MAX ], " - "endianness = (int) BYTE_ORDER, " - "width = (int) { 32, 64 }; " - "audio/x-raw-int, " - "rate = (int) [ 1, MAX ], " - "channels = (int) [ 1, MAX ], " - "endianness = (int) { 1234, 4321 }," - "width = (int) [ 1, 32 ], " - "depth = (int) [ 1, 32 ], " "signed = (boolean) { false, true }") + GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL)) ); G_DEFINE_TYPE (RsnAudioDec, rsn_audiodec, RSN_TYPE_DEC); @@ -438,7 +432,7 @@ GST_STATIC_PAD_TEMPLATE ("sink", static GstStaticPadTemplate video_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw-yuv") + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL)) ); G_DEFINE_TYPE (RsnVideoDec, rsn_videodec, RSN_TYPE_DEC); diff --git a/ext/resindvd/rsninputselector.c b/ext/resindvd/rsninputselector.c new file mode 100644 index 00000000..88bcc05f --- /dev/null +++ b/ext/resindvd/rsninputselector.c @@ -0,0 +1,1784 @@ +/* GStreamer input selector + * Copyright (C) 2003 Julien Moutte <julien@moutte.net> + * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com> + * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.com> + * Copyright (C) 2007 Andy Wingo <wingo@pobox.com> + * Copyright (C) 2008 Nokia Corporation. (contact <stefan.kost@nokia.com>) + * Copyright (C) 2011 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 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-input-selector + * @see_also: #GstOutputSelector + * + * Direct one out of N input streams to the output pad. + * + * The input pads are from a GstPad subclass and have additional + * properties, which users may find useful, namely: + * + * <itemizedlist> + * <listitem> + * "running-time": Running time of stream on pad (#gint64) + * </listitem> + * <listitem> + * "tags": The currently active tags on the pad (#GstTagList, boxed type) + * </listitem> + * <listitem> + * "active": If the pad is currently active (#gboolean) + * </listitem> + * <listitem> + * "always-ok" : Make an inactive pads return #GST_FLOW_OK instead of + * #GST_FLOW_NOT_LINKED + * </listitem> + * </itemizedlist> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <string.h> + +#include "rsninputselector.h" + +#define DEBUG_CACHED_BUFFERS 0 + +GST_DEBUG_CATEGORY_STATIC (input_selector_debug); +#define GST_CAT_DEFAULT input_selector_debug + +#define GST_TYPE_INPUT_SELECTOR_SYNC_MODE (gst_input_selector_sync_mode_get_type()) +static GType +gst_input_selector_sync_mode_get_type (void) +{ + static GType type = 0; + static const GEnumValue data[] = { + {GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT, + "Sync using the current active segment", + "active-segment"}, + {GST_INPUT_SELECTOR_SYNC_MODE_CLOCK, "Sync using the clock", "clock"}, + {0, NULL, NULL}, + }; + + if (!type) { + type = g_enum_register_static ("RsnInputSelectorSyncMode", data); + } + return type; +} + +#define GST_INPUT_SELECTOR_GET_LOCK(sel) (&((RsnInputSelector*)(sel))->lock) +#define GST_INPUT_SELECTOR_GET_COND(sel) (&((RsnInputSelector*)(sel))->cond) +#define GST_INPUT_SELECTOR_LOCK(sel) (g_mutex_lock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_UNLOCK(sel) (g_mutex_unlock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_WAIT(sel) (g_cond_wait (GST_INPUT_SELECTOR_GET_COND(sel), \ + GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel))) + +static GstStaticPadTemplate gst_input_selector_sink_factory = +GST_STATIC_PAD_TEMPLATE ("sink_%u", + GST_PAD_SINK, + GST_PAD_REQUEST, + GST_STATIC_CAPS_ANY); + +static GstStaticPadTemplate gst_input_selector_src_factory = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + +enum +{ + PROP_0, + PROP_N_PADS, + PROP_ACTIVE_PAD, + PROP_SYNC_STREAMS, + PROP_SYNC_MODE, + PROP_CACHE_BUFFERS +}; + +#define DEFAULT_SYNC_STREAMS TRUE +#define DEFAULT_SYNC_MODE GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT +#define DEFAULT_CACHE_BUFFERS FALSE +#define DEFAULT_PAD_ALWAYS_OK TRUE + +enum +{ + PROP_PAD_0, + PROP_PAD_RUNNING_TIME, + PROP_PAD_TAGS, + PROP_PAD_ACTIVE, + PROP_PAD_ALWAYS_OK +}; + +enum +{ + /* methods */ + SIGNAL_BLOCK, + SIGNAL_SWITCH, + LAST_SIGNAL +}; +static guint gst_input_selector_signals[LAST_SIGNAL] = { 0 }; + +static void gst_input_selector_active_pad_changed (RsnInputSelector * sel, + GParamSpec * pspec, gpointer user_data); +static inline gboolean gst_input_selector_is_active_sinkpad (RsnInputSelector * + sel, GstPad * pad); +static GstPad *gst_input_selector_activate_sinkpad (RsnInputSelector * sel, + GstPad * pad); +static gboolean gst_input_selector_set_active_pad (RsnInputSelector * self, + GstPad * pad); +static GstPad *gst_input_selector_get_linked_pad (RsnInputSelector * sel, + GstPad * pad, gboolean strict); +static gboolean forward_sticky_events (GstPad * sinkpad, GstEvent ** event, + gpointer user_data); + +#define GST_TYPE_SELECTOR_PAD \ + (gst_selector_pad_get_type()) +#define GST_SELECTOR_PAD(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SELECTOR_PAD, RsnSelectorPad)) +#define GST_SELECTOR_PAD_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SELECTOR_PAD, RsnSelectorPadClass)) +#define GST_IS_SELECTOR_PAD(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SELECTOR_PAD)) +#define GST_IS_SELECTOR_PAD_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SELECTOR_PAD)) +#define GST_SELECTOR_PAD_CAST(obj) \ + ((RsnSelectorPad *)(obj)) + +typedef struct _RsnSelectorPad RsnSelectorPad; +typedef struct _RsnSelectorPadClass RsnSelectorPadClass; +typedef struct _RsnSelectorPadCachedBuffer RsnSelectorPadCachedBuffer; + +struct _RsnSelectorPad +{ + GstPad parent; + + gboolean active; /* when buffer have passed the pad */ + gboolean pushed; /* when buffer was pushed downstream since activation */ + gboolean eos; /* when EOS has been received */ + gboolean eos_sent; /* when EOS was sent downstream */ + gboolean discont; /* after switching we create a discont */ + gboolean flushing; /* set after flush-start and before flush-stop */ + gboolean always_ok; + GstTagList *tags; /* last tags received on the pad */ + + GstClockTime position; /* the current position in the segment */ + GstSegment segment; /* the current segment on the pad */ + guint32 segment_seqnum; /* sequence number of the current segment */ + + gboolean events_pending; /* TRUE if sticky events need to be updated */ + + gboolean sending_cached_buffers; + GQueue *cached_buffers; +}; + +struct _RsnSelectorPadCachedBuffer +{ + GstBuffer *buffer; + GstSegment segment; +}; + +struct _RsnSelectorPadClass +{ + GstPadClass parent; +}; + +GType gst_selector_pad_get_type (void); +static void gst_selector_pad_finalize (GObject * object); +static void gst_selector_pad_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_selector_pad_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec); + +static gint64 gst_selector_pad_get_running_time (RsnSelectorPad * pad); +static void gst_selector_pad_reset (RsnSelectorPad * pad); +static gboolean gst_selector_pad_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_selector_pad_query (GstPad * pad, GstObject * parent, + GstQuery * query); +static GstIterator *gst_selector_pad_iterate_linked_pads (GstPad * pad, + GstObject * parent); +static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstObject * parent, + GstBuffer * buf); +static void gst_selector_pad_cache_buffer (RsnSelectorPad * selpad, + GstBuffer * buffer); +static void gst_selector_pad_free_cached_buffers (RsnSelectorPad * selpad); + +G_DEFINE_TYPE (RsnSelectorPad, gst_selector_pad, GST_TYPE_PAD); + +static void +gst_selector_pad_class_init (RsnSelectorPadClass * klass) +{ + GObjectClass *gobject_class; + + gobject_class = (GObjectClass *) klass; + + gobject_class->finalize = gst_selector_pad_finalize; + + gobject_class->get_property = gst_selector_pad_get_property; + gobject_class->set_property = gst_selector_pad_set_property; + + g_object_class_install_property (gobject_class, PROP_PAD_RUNNING_TIME, + g_param_spec_int64 ("running-time", "Running time", + "Running time of stream on pad", 0, G_MAXINT64, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_PAD_TAGS, + g_param_spec_boxed ("tags", "Tags", + "The currently active tags on the pad", GST_TYPE_TAG_LIST, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_PAD_ACTIVE, + g_param_spec_boolean ("active", "Active", + "If the pad is currently active", FALSE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + /* FIXME: better property name? */ + g_object_class_install_property (gobject_class, PROP_PAD_ALWAYS_OK, + g_param_spec_boolean ("always-ok", "Always OK", + "Make an inactive pad return OK instead of NOT_LINKED", + DEFAULT_PAD_ALWAYS_OK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); +} + +static void +gst_selector_pad_init (RsnSelectorPad * pad) +{ + pad->always_ok = DEFAULT_PAD_ALWAYS_OK; + gst_selector_pad_reset (pad); +} + +static void +gst_selector_pad_finalize (GObject * object) +{ + RsnSelectorPad *pad; + + pad = GST_SELECTOR_PAD_CAST (object); + + if (pad->tags) + gst_tag_list_unref (pad->tags); + gst_selector_pad_free_cached_buffers (pad); + + G_OBJECT_CLASS (gst_selector_pad_parent_class)->finalize (object); +} + +static void +gst_selector_pad_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + RsnSelectorPad *spad = GST_SELECTOR_PAD_CAST (object); + + switch (prop_id) { + case PROP_PAD_ALWAYS_OK: + GST_OBJECT_LOCK (object); + spad->always_ok = g_value_get_boolean (value); + GST_OBJECT_UNLOCK (object); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_selector_pad_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + RsnSelectorPad *spad = GST_SELECTOR_PAD_CAST (object); + + switch (prop_id) { + case PROP_PAD_RUNNING_TIME: + g_value_set_int64 (value, gst_selector_pad_get_running_time (spad)); + break; + case PROP_PAD_TAGS: + GST_OBJECT_LOCK (object); + g_value_set_boxed (value, spad->tags); + GST_OBJECT_UNLOCK (object); + break; + case PROP_PAD_ACTIVE: + { + RsnInputSelector *sel; + + sel = GST_INPUT_SELECTOR (gst_pad_get_parent (spad)); + g_value_set_boolean (value, gst_input_selector_is_active_sinkpad (sel, + GST_PAD_CAST (spad))); + gst_object_unref (sel); + break; + } + case PROP_PAD_ALWAYS_OK: + GST_OBJECT_LOCK (object); + g_value_set_boolean (value, spad->always_ok); + GST_OBJECT_UNLOCK (object); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static gint64 +gst_selector_pad_get_running_time (RsnSelectorPad * pad) +{ + gint64 ret = 0; + + GST_OBJECT_LOCK (pad); + if (pad->active) { + guint64 position = pad->position; + GstFormat format = pad->segment.format; + + ret = gst_segment_to_running_time (&pad->segment, format, position); + } + GST_OBJECT_UNLOCK (pad); + + GST_DEBUG_OBJECT (pad, "running time: %" GST_TIME_FORMAT + " segment: %" GST_SEGMENT_FORMAT, GST_TIME_ARGS (ret), &pad->segment); + + return ret; +} + +/* must be called with the SELECTOR_LOCK */ +static void +gst_selector_pad_reset (RsnSelectorPad * pad) +{ + GST_OBJECT_LOCK (pad); + pad->active = FALSE; + pad->pushed = FALSE; + pad->eos = FALSE; + pad->eos_sent = FALSE; + pad->events_pending = FALSE; + pad->discont = FALSE; + pad->flushing = FALSE; + pad->position = GST_CLOCK_TIME_NONE; + gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); + pad->sending_cached_buffers = FALSE; + gst_selector_pad_free_cached_buffers (pad); + GST_OBJECT_UNLOCK (pad); +} + +static RsnSelectorPadCachedBuffer * +gst_selector_pad_new_cached_buffer (RsnSelectorPad * selpad, GstBuffer * buffer) +{ + RsnSelectorPadCachedBuffer *cached_buffer = + g_slice_new (RsnSelectorPadCachedBuffer); + cached_buffer->buffer = buffer; + cached_buffer->segment = selpad->segment; + return cached_buffer; +} + +static void +gst_selector_pad_free_cached_buffer (RsnSelectorPadCachedBuffer * cached_buffer) +{ + gst_buffer_unref (cached_buffer->buffer); + g_slice_free (RsnSelectorPadCachedBuffer, cached_buffer); +} + +/* must be called with the SELECTOR_LOCK */ +static void +gst_selector_pad_cache_buffer (RsnSelectorPad * selpad, GstBuffer * buffer) +{ + if (selpad->segment.format != GST_FORMAT_TIME) { + GST_DEBUG_OBJECT (selpad, "Buffer %p with segment not in time format, " + "not caching", buffer); + return; + } + + GST_DEBUG_OBJECT (selpad, "Caching buffer %p", buffer); + if (!selpad->cached_buffers) + selpad->cached_buffers = g_queue_new (); + g_queue_push_tail (selpad->cached_buffers, + gst_selector_pad_new_cached_buffer (selpad, buffer)); +} + +/* must be called with the SELECTOR_LOCK */ +static void +gst_selector_pad_free_cached_buffers (RsnSelectorPad * selpad) +{ + RsnSelectorPadCachedBuffer *cached_buffer; + + if (!selpad->cached_buffers) + return; + + GST_DEBUG_OBJECT (selpad, "Freeing cached buffers"); + while ((cached_buffer = g_queue_pop_head (selpad->cached_buffers))) + gst_selector_pad_free_cached_buffer (cached_buffer); + g_queue_free (selpad->cached_buffers); + selpad->cached_buffers = NULL; +} + +/* strictly get the linked pad from the sinkpad. If the pad is active we return + * the srcpad else we return NULL */ +static GstIterator * +gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent) +{ + RsnInputSelector *sel; + GstPad *otherpad; + GstIterator *it = NULL; + GValue val = { 0, }; + + sel = GST_INPUT_SELECTOR (parent); + + otherpad = gst_input_selector_get_linked_pad (sel, pad, TRUE); + if (otherpad) { + g_value_init (&val, GST_TYPE_PAD); + g_value_set_object (&val, otherpad); + it = gst_iterator_new_single (GST_TYPE_PAD, &val); + g_value_unset (&val); + gst_object_unref (otherpad); + } + + return it; +} + +static gboolean +gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + gboolean res = TRUE; + gboolean forward; + gboolean new_tags = FALSE; + RsnInputSelector *sel; + RsnSelectorPad *selpad; + GstPad *prev_active_sinkpad; + GstPad *active_sinkpad; + + sel = GST_INPUT_SELECTOR (parent); + selpad = GST_SELECTOR_PAD_CAST (pad); + GST_DEBUG_OBJECT (selpad, "received event %" GST_PTR_FORMAT, event); + + GST_INPUT_SELECTOR_LOCK (sel); + prev_active_sinkpad = sel->active_sinkpad; + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + GST_INPUT_SELECTOR_UNLOCK (sel); + + if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) { + g_object_notify (G_OBJECT (sel), "active-pad"); + } + + GST_INPUT_SELECTOR_LOCK (sel); + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + + /* only forward if we are dealing with the active sinkpad */ + forward = (pad == active_sinkpad); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_FLUSH_START: + /* Unblock the pad if it's waiting */ + selpad->flushing = TRUE; + GST_INPUT_SELECTOR_BROADCAST (sel); + break; + case GST_EVENT_FLUSH_STOP: + gst_selector_pad_reset (selpad); + break; + case GST_EVENT_SEGMENT: + { + gst_event_copy_segment (event, &selpad->segment); + selpad->segment_seqnum = gst_event_get_seqnum (event); + + /* Update the position */ + if (selpad->position == GST_CLOCK_TIME_NONE + || selpad->segment.position > selpad->position) { + selpad->position = selpad->segment.position; + } else if (selpad->position != GST_CLOCK_TIME_NONE + && selpad->position > selpad->segment.position) { + selpad->segment.position = selpad->position; + + if (forward) { + gst_event_unref (event); + event = gst_event_new_segment (&selpad->segment); + gst_event_set_seqnum (event, selpad->segment_seqnum); + } + } + GST_DEBUG_OBJECT (pad, "configured SEGMENT %" GST_SEGMENT_FORMAT, + &selpad->segment); + break; + } + case GST_EVENT_TAG: + { + GstTagList *tags, *oldtags, *newtags; + + gst_event_parse_tag (event, &tags); + + oldtags = selpad->tags; + + newtags = gst_tag_list_merge (oldtags, tags, GST_TAG_MERGE_REPLACE); + selpad->tags = newtags; + if (oldtags) + gst_tag_list_unref (oldtags); + GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, newtags); + + new_tags = TRUE; + break; + } + case GST_EVENT_EOS: + selpad->eos = TRUE; + + if (forward) { + selpad->eos_sent = TRUE; + } else { + RsnSelectorPad *active_selpad; + + /* If the active sinkpad is in EOS state but EOS + * was not sent downstream this means that the pad + * got EOS before it was set as active pad and that + * the previously active pad got EOS after it was + * active + */ + active_selpad = GST_SELECTOR_PAD (active_sinkpad); + forward = (active_selpad->eos && !active_selpad->eos_sent); + active_selpad->eos_sent = TRUE; + } + GST_DEBUG_OBJECT (pad, "received EOS"); + break; + case GST_EVENT_CUSTOM_DOWNSTREAM: + { + const GstStructure *structure = gst_event_get_structure (event); + if (structure != NULL && + gst_structure_has_name (structure, "application/x-gst-dvd")) { + const char *type = gst_structure_get_string (structure, "event"); + if (strcmp (type, "select-pad") == 0) { + gst_input_selector_set_active_pad (sel, pad); + forward = FALSE; + } + } + } + break; + + default: + break; + } + GST_INPUT_SELECTOR_UNLOCK (sel); + if (new_tags) + g_object_notify (G_OBJECT (selpad), "tags"); + if (forward) { + GST_DEBUG_OBJECT (pad, "forwarding event"); + res = gst_pad_push_event (sel->srcpad, event); + } else { + /* If we aren't forwarding the event because the pad is not the + * active_sinkpad, then set the flag on the pad + * that says a segment needs sending if/when that pad is activated. + * For all other cases, we send the event immediately, which makes + * sparse streams and other segment updates work correctly downstream. + */ + if (GST_EVENT_IS_STICKY (event)) + selpad->events_pending = TRUE; + gst_event_unref (event); + } + + return res; +} + +static gboolean +gst_selector_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) +{ + gboolean res = FALSE; + + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_ALLOCATION:{ + GstPad *active_sinkpad; + RsnInputSelector *sel = GST_INPUT_SELECTOR (parent); + + /* Only do the allocation query for the active sinkpad, + * after switching a reconfigure event is sent and upstream + * should reconfigure and do a new allocation query + */ + if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { + GST_INPUT_SELECTOR_LOCK (sel); + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + GST_INPUT_SELECTOR_UNLOCK (sel); + + if (pad != active_sinkpad) { + res = FALSE; + goto done; + } + } + } + /* fall through */ + default: + res = gst_pad_query_default (pad, parent, query); + break; + } + +done: + return res; +} + +/* must be called with the SELECTOR_LOCK, will block while the pad is blocked + * or return TRUE when flushing */ +static gboolean +gst_input_selector_wait (RsnInputSelector * self, RsnSelectorPad * pad) +{ + while (self->blocked && !self->flushing && !pad->flushing) { + /* we can be unlocked here when we are shutting down (flushing) or when we + * get unblocked */ + GST_INPUT_SELECTOR_WAIT (self); + } + return self->flushing; +} + +/* must be called without the SELECTOR_LOCK, will wait until the running time + * of the active pad is after this pad or return TRUE when flushing */ +static gboolean +gst_input_selector_wait_running_time (RsnInputSelector * sel, + RsnSelectorPad * selpad, GstBuffer * buf) +{ + GstSegment *seg; + + GST_DEBUG_OBJECT (selpad, "entering wait for buffer %p", buf); + + /* If we have no valid timestamp we can't sync this buffer */ + if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { + GST_DEBUG_OBJECT (selpad, "leaving wait for buffer with " + "invalid timestamp"); + return FALSE; + } + + seg = &selpad->segment; + + /* Wait until + * a) this is the active pad + * b) the pad or the selector is flushing + * c) the selector is not blocked + * d) the buffer running time is before the current running time + * (either active-seg or clock, depending on sync-mode) + */ + + GST_INPUT_SELECTOR_LOCK (sel); + while (TRUE) { + GstPad *active_sinkpad; + RsnSelectorPad *active_selpad; + GstClock *clock; + gint64 cur_running_time; + GstClockTime running_time; + + active_sinkpad = + gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad)); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + + if (seg->format != GST_FORMAT_TIME) { + GST_DEBUG_OBJECT (selpad, + "Not waiting because we don't have a TIME segment"); + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } + + running_time = GST_BUFFER_TIMESTAMP (buf); + /* If possible try to get the running time at the end of the buffer */ + if (GST_BUFFER_DURATION_IS_VALID (buf)) + running_time += GST_BUFFER_DURATION (buf); + /* Only use the segment to convert to running time if the segment is + * in TIME format, otherwise do our best to try to sync */ + if (GST_CLOCK_TIME_IS_VALID (seg->stop)) { + if (running_time > seg->stop) { + running_time = seg->stop; + } + } + running_time = + gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); + /* If this is outside the segment don't sync */ + if (running_time == -1) { + GST_DEBUG_OBJECT (selpad, + "Not waiting because buffer is outside segment"); + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } + + cur_running_time = GST_CLOCK_TIME_NONE; + if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) { + clock = gst_element_get_clock (GST_ELEMENT_CAST (sel)); + if (clock) { + GstClockTime base_time; + + cur_running_time = gst_clock_get_time (clock); + base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel)); + if (base_time <= cur_running_time) + cur_running_time -= base_time; + else + cur_running_time = 0; + } + } else { + GstSegment *active_seg; + + active_seg = &active_selpad->segment; + + /* If the active segment is configured but not to time format + * we can't do any syncing at all */ + if (active_seg->format != GST_FORMAT_TIME + && active_seg->format != GST_FORMAT_UNDEFINED) { + GST_DEBUG_OBJECT (selpad, + "Not waiting because active segment isn't in TIME format"); + GST_INPUT_SELECTOR_UNLOCK (sel); + return FALSE; + } + + /* Get active pad's running time, if no configured segment yet keep at -1 */ + if (active_seg->format == GST_FORMAT_TIME) + cur_running_time = gst_segment_to_running_time (active_seg, + GST_FORMAT_TIME, active_seg->position); + } + + if (selpad != active_selpad && !sel->flushing && !selpad->flushing && + (sel->blocked || cur_running_time == -1 + || running_time >= cur_running_time)) { + if (!sel->blocked) { + GST_DEBUG_OBJECT (selpad, + "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %" + GST_TIME_FORMAT, GST_TIME_ARGS (running_time), + GST_TIME_ARGS (cur_running_time)); + } else + GST_DEBUG_OBJECT (selpad, "Waiting for selector to unblock"); + + GST_INPUT_SELECTOR_WAIT (sel); + } else { + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + } + } + + /* Return TRUE if the selector or the pad is flushing */ + return (sel->flushing || selpad->flushing); +} + +static gboolean +forward_sticky_events (GstPad * sinkpad, GstEvent ** event, gpointer user_data) +{ + RsnInputSelector *sel = GST_INPUT_SELECTOR (user_data); + + if (GST_EVENT_TYPE (*event) == GST_EVENT_SEGMENT) { + GstSegment *seg = &GST_SELECTOR_PAD (sinkpad)->segment; + GstEvent *e; + + e = gst_event_new_segment (seg); + gst_event_set_seqnum (e, GST_SELECTOR_PAD_CAST (sinkpad)->segment_seqnum); + + gst_pad_push_event (sel->srcpad, e); + } else if (GST_EVENT_TYPE (*event) != GST_EVENT_STREAM_START) { + GST_WARNING ("Pushing event %" GST_PTR_FORMAT, *event); + gst_pad_push_event (sel->srcpad, gst_event_ref (*event)); + } + + return TRUE; +} + +#if DEBUG_CACHED_BUFFERS +static void +gst_input_selector_debug_cached_buffers (RsnInputSelector * sel) +{ + GList *walk; + + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + RsnSelectorPad *selpad; + GString *timestamps; + gchar *str; + int i; + + selpad = GST_SELECTOR_PAD_CAST (walk->data); + if (!selpad->cached_buffers) { + GST_DEBUG_OBJECT (selpad, "Cached buffers timestamps: <none>"); + continue; + } + + timestamps = g_string_new ("Cached buffers timestamps:"); + for (i = 0; i < selpad->cached_buffers->length; ++i) { + RsnSelectorPadCachedBuffer *cached_buffer; + + cached_buffer = g_queue_peek_nth (selpad->cached_buffers, i); + g_string_append_printf (timestamps, " %" GST_TIME_FORMAT, + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (cached_buffer->buffer))); + } + str = g_string_free (timestamps, FALSE); + GST_DEBUG_OBJECT (selpad, str); + g_free (str); + } +} +#endif + +/* must be called with the SELECTOR_LOCK */ +static void +gst_input_selector_cleanup_old_cached_buffers (RsnInputSelector * sel, + GstPad * pad) +{ + GstClock *clock; + gint64 cur_running_time; + GList *walk; + + cur_running_time = GST_CLOCK_TIME_NONE; + if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) { + clock = gst_element_get_clock (GST_ELEMENT_CAST (sel)); + if (clock) { + GstClockTime base_time; + + cur_running_time = gst_clock_get_time (clock); + base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel)); + if (base_time <= cur_running_time) + cur_running_time -= base_time; + else + cur_running_time = 0; + } + } else { + GstPad *active_sinkpad; + RsnSelectorPad *active_selpad; + GstSegment *active_seg; + + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad); + active_seg = &active_selpad->segment; + + /* Get active pad's running time, if no configured segment yet keep at -1 */ + if (active_seg->format == GST_FORMAT_TIME) + cur_running_time = gst_segment_to_running_time (active_seg, + GST_FORMAT_TIME, active_seg->position); + } + + if (!GST_CLOCK_TIME_IS_VALID (cur_running_time)) + return; + + GST_DEBUG_OBJECT (sel, "Cleaning up old cached buffers"); + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + RsnSelectorPad *selpad; + GstSegment *seg; + RsnSelectorPadCachedBuffer *cached_buffer; + GSList *maybe_remove; + guint queue_position; + + selpad = GST_SELECTOR_PAD_CAST (walk->data); + if (!selpad->cached_buffers) + continue; + + seg = &selpad->segment; + + maybe_remove = NULL; + queue_position = 0; + while ((cached_buffer = g_queue_peek_nth (selpad->cached_buffers, + queue_position))) { + GstBuffer *buffer = cached_buffer->buffer; + GstClockTime running_time; + GSList *l; + + /* If we have no valid timestamp we can't sync this buffer */ + if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) { + maybe_remove = g_slist_append (maybe_remove, cached_buffer); + queue_position = g_slist_length (maybe_remove); + continue; + } + + /* the buffer is still valid if its duration is valid and the + * timestamp + duration is >= time, or if its duration is invalid + * and the timestamp is >= time */ + running_time = GST_BUFFER_TIMESTAMP (buffer); + /* If possible try to get the running time at the end of the buffer */ + if (GST_BUFFER_DURATION_IS_VALID (buffer)) + running_time += GST_BUFFER_DURATION (buffer); + /* Only use the segment to convert to running time if the segment is + * in TIME format, otherwise do our best to try to sync */ + if (GST_CLOCK_TIME_IS_VALID (seg->stop)) { + if (running_time > seg->stop) { + running_time = seg->stop; + } + } + running_time = + gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time); + + GST_DEBUG_OBJECT (selpad, + "checking if buffer %p running time=%" GST_TIME_FORMAT + " >= stream time=%" GST_TIME_FORMAT, buffer, + GST_TIME_ARGS (running_time), GST_TIME_ARGS (cur_running_time)); + if (running_time >= cur_running_time) { + break; + } + + GST_DEBUG_OBJECT (selpad, "Removing old cached buffer %p", buffer); + g_queue_pop_nth (selpad->cached_buffers, queue_position); + gst_selector_pad_free_cached_buffer (cached_buffer); + + for (l = maybe_remove; l != NULL; l = g_slist_next (l)) { + /* A buffer after some invalid buffers was removed, it means the invalid buffers + * are old, lets also remove them */ + cached_buffer = l->data; + g_queue_remove (selpad->cached_buffers, cached_buffer); + gst_selector_pad_free_cached_buffer (cached_buffer); + } + + g_slist_free (maybe_remove); + maybe_remove = NULL; + queue_position = 0; + } + + g_slist_free (maybe_remove); + maybe_remove = NULL; + + if (g_queue_is_empty (selpad->cached_buffers)) { + g_queue_free (selpad->cached_buffers); + selpad->cached_buffers = NULL; + } + } + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif +} + +static GstFlowReturn +gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) +{ + RsnInputSelector *sel; + GstFlowReturn res; + GstPad *active_sinkpad; + GstPad *prev_active_sinkpad; + RsnSelectorPad *selpad; + GstClockTime start_time; + + sel = GST_INPUT_SELECTOR (parent); + selpad = GST_SELECTOR_PAD_CAST (pad); + + GST_DEBUG_OBJECT (selpad, + "entering chain for buf %p with timestamp %" GST_TIME_FORMAT, buf, + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); + + GST_INPUT_SELECTOR_LOCK (sel); + /* wait or check for flushing */ + if (gst_input_selector_wait (sel, selpad)) { + GST_INPUT_SELECTOR_UNLOCK (sel); + goto flushing; + } + + GST_LOG_OBJECT (pad, "getting active pad"); + + prev_active_sinkpad = sel->active_sinkpad; + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + + /* In sync mode wait until the active pad has advanced + * after the running time of the current buffer */ + if (sel->sync_streams) { + /* call chain for each cached buffer if we are not the active pad + * or if we are the active pad but didn't push anything yet. */ + if (active_sinkpad != pad || !selpad->pushed) { + /* no need to check for sel->cache_buffers as selpad->cached_buffers + * will only be valid if cache_buffers is TRUE */ + if (selpad->cached_buffers && !selpad->sending_cached_buffers) { + RsnSelectorPadCachedBuffer *cached_buffer; + GstSegment saved_segment; + + saved_segment = selpad->segment; + + selpad->sending_cached_buffers = TRUE; + while (!sel->flushing && !selpad->flushing && + (cached_buffer = g_queue_pop_head (selpad->cached_buffers))) { + GST_DEBUG_OBJECT (pad, "Cached buffers found, " + "invoking chain for cached buffer %p", cached_buffer->buffer); + + selpad->segment = cached_buffer->segment; + selpad->events_pending = TRUE; + GST_INPUT_SELECTOR_UNLOCK (sel); + gst_selector_pad_chain (pad, parent, cached_buffer->buffer); + GST_INPUT_SELECTOR_LOCK (sel); + + /* we may have cleaned up the queue in the meantime because of + * old buffers */ + if (!selpad->cached_buffers) { + break; + } + } + selpad->sending_cached_buffers = FALSE; + + /* all cached buffers sent, restore segment for current buffer */ + selpad->segment = saved_segment; + selpad->events_pending = TRUE; + + /* Might have changed while calling chain for cached buffers */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + } + } + + if (active_sinkpad != pad) { + GST_INPUT_SELECTOR_UNLOCK (sel); + if (gst_input_selector_wait_running_time (sel, selpad, buf)) + goto flushing; + GST_INPUT_SELECTOR_LOCK (sel); + } + + /* Might have changed while waiting */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + } + + /* update the segment on the srcpad */ + start_time = GST_BUFFER_TIMESTAMP (buf); + if (GST_CLOCK_TIME_IS_VALID (start_time)) { + GST_LOG_OBJECT (pad, "received start time %" GST_TIME_FORMAT, + GST_TIME_ARGS (start_time)); + if (GST_BUFFER_DURATION_IS_VALID (buf)) + GST_LOG_OBJECT (pad, "received end time %" GST_TIME_FORMAT, + GST_TIME_ARGS (start_time + GST_BUFFER_DURATION (buf))); + + GST_OBJECT_LOCK (pad); + selpad->position = start_time; + selpad->segment.position = start_time; + GST_OBJECT_UNLOCK (pad); + } + + /* Ignore buffers from pads except the selected one */ + if (pad != active_sinkpad) + goto ignore; + + /* Tell all non-active pads that we advanced the running time */ + if (sel->sync_streams) + GST_INPUT_SELECTOR_BROADCAST (sel); + + GST_INPUT_SELECTOR_UNLOCK (sel); + + if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) { + g_object_notify (G_OBJECT (sel), "active-pad"); + } + + /* if we have a pending events, push them now */ + if (G_UNLIKELY (prev_active_sinkpad != active_sinkpad + || selpad->events_pending)) { + gst_pad_sticky_events_foreach (GST_PAD_CAST (selpad), forward_sticky_events, + sel); + selpad->events_pending = FALSE; + } + + if (selpad->discont) { + buf = gst_buffer_make_writable (buf); + + GST_DEBUG_OBJECT (pad, "Marking discont buffer %p", buf); + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); + selpad->discont = FALSE; + } + + /* forward */ + GST_LOG_OBJECT (pad, "Forwarding buffer %p with timestamp %" GST_TIME_FORMAT, + buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); + + res = gst_pad_push (sel->srcpad, gst_buffer_ref (buf)); + GST_LOG_OBJECT (pad, "Buffer %p forwarded result=%d", buf, res); + + GST_INPUT_SELECTOR_LOCK (sel); + + if (sel->sync_streams && sel->cache_buffers) { + /* Might have changed while pushing */ + active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad); + /* only set pad to pushed if we are still the active pad */ + if (active_sinkpad == pad) + selpad->pushed = TRUE; + + /* cache buffer as we may need it again if we change pads */ + gst_selector_pad_cache_buffer (selpad, buf); + gst_input_selector_cleanup_old_cached_buffers (sel, pad); + } else { + selpad->pushed = TRUE; + gst_buffer_unref (buf); + } + GST_INPUT_SELECTOR_UNLOCK (sel); + +done: + return res; + + /* dropped buffers */ +ignore: + { + gboolean active_pad_pushed = GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed; + + GST_DEBUG_OBJECT (pad, "Pad not active, discard buffer %p", buf); + /* when we drop a buffer, we're creating a discont on this pad */ + selpad->discont = TRUE; + GST_INPUT_SELECTOR_UNLOCK (sel); + gst_buffer_unref (buf); + + /* figure out what to return upstream */ + GST_OBJECT_LOCK (selpad); + if (selpad->always_ok || !active_pad_pushed) + res = GST_FLOW_OK; + else + res = GST_FLOW_NOT_LINKED; + GST_OBJECT_UNLOCK (selpad); + + goto done; + } +flushing: + { + GST_DEBUG_OBJECT (pad, "We are flushing, discard buffer %p", buf); + gst_buffer_unref (buf); + res = GST_FLOW_FLUSHING; + goto done; + } +} + +static void gst_input_selector_dispose (GObject * object); +static void gst_input_selector_finalize (GObject * object); + +static void gst_input_selector_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec); +static void gst_input_selector_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec); + +static GstPad *gst_input_selector_request_new_pad (GstElement * element, + GstPadTemplate * templ, const gchar * unused, const GstCaps * caps); +static void gst_input_selector_release_pad (GstElement * element, GstPad * pad); + +static GstStateChangeReturn gst_input_selector_change_state (GstElement * + element, GstStateChange transition); + +static gboolean gst_input_selector_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_input_selector_query (GstPad * pad, GstObject * parent, + GstQuery * query); +static gint64 gst_input_selector_block (RsnInputSelector * self); + +#define _do_init \ + GST_DEBUG_CATEGORY_INIT (input_selector_debug, \ + "rsninputselector", 0, "An input stream selector element"); +#define gst_input_selector_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (RsnInputSelector, gst_input_selector, GST_TYPE_ELEMENT, + _do_init); + +static void +gst_input_selector_class_init (RsnInputSelectorClass * klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); + + gobject_class->dispose = gst_input_selector_dispose; + gobject_class->finalize = gst_input_selector_finalize; + + gobject_class->set_property = gst_input_selector_set_property; + gobject_class->get_property = gst_input_selector_get_property; + + g_object_class_install_property (gobject_class, PROP_N_PADS, + g_param_spec_uint ("n-pads", "Number of Pads", + "The number of sink pads", 0, G_MAXUINT, 0, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD, + g_param_spec_object ("active-pad", "Active pad", + "The currently active sink pad", GST_TYPE_PAD, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * RsnInputSelector:sync-streams + * + * If set to %TRUE all inactive streams will be synced to the + * running time of the active stream or to the current clock. + * + * To make sure no buffers are dropped by input-selector + * that might be needed when switching the active pad, + * sync-mode should be set to "clock" and cache-buffers to TRUE. + */ + g_object_class_install_property (gobject_class, PROP_SYNC_STREAMS, + g_param_spec_boolean ("sync-streams", "Sync Streams", + "Synchronize inactive streams to the running time of the active " + "stream or to the current clock", + DEFAULT_SYNC_STREAMS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /** + * RsnInputSelector:sync-mode + * + * Select how input-selector will sync buffers when in sync-streams mode. + * + * Note that when using the "active-segment" mode, the "active-segment" may + * be ahead of current clock time when switching the active pad, as the current + * active pad may have pushed more buffers than what was displayed/consumed, + * which may cause delays and some missing buffers. + */ + g_object_class_install_property (gobject_class, PROP_SYNC_MODE, + g_param_spec_enum ("sync-mode", "Sync mode", + "Behavior in sync-streams mode", GST_TYPE_INPUT_SELECTOR_SYNC_MODE, + DEFAULT_SYNC_MODE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /** + * RsnInputSelector:cache-buffers + * + * If set to %TRUE and RsnInputSelector:sync-streams is also set to %TRUE, + * the active pad will cache the buffers still considered valid (after current + * running time, see sync-mode) to avoid missing frames if/when the pad is + * reactivated. + * + * The active pad may push more buffers than what is currently displayed/consumed + * and when changing pads those buffers will be discarded and the only way to + * reactivate that pad without loosing the already consumed buffers is to enable cache. + */ + g_object_class_install_property (gobject_class, PROP_CACHE_BUFFERS, + g_param_spec_boolean ("cache-buffers", "Cache Buffers", + "Cache buffers for active-pad", + DEFAULT_CACHE_BUFFERS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /** + * RsnInputSelector::block: + * @inputselector: the #RsnInputSelector + * + * Block all sink pads in preparation for a switch. Returns the stop time of + * the current switch segment, as a running time, or 0 if there is no current + * active pad or the current active pad never received data. + */ + gst_input_selector_signals[SIGNAL_BLOCK] = + g_signal_new ("block", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (RsnInputSelectorClass, block), NULL, NULL, + g_cclosure_marshal_generic, G_TYPE_INT64, 0); + + gst_element_class_set_static_metadata (gstelement_class, "Input selector", + "Generic", "N-to-1 input stream selector", + "Julien Moutte <julien@moutte.net>, " + "Jan Schmidt <thaytan@mad.scientist.com>, " + "Wim Taymans <wim.taymans@gmail.com>"); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_input_selector_sink_factory)); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_input_selector_src_factory)); + + gstelement_class->request_new_pad = gst_input_selector_request_new_pad; + gstelement_class->release_pad = gst_input_selector_release_pad; + gstelement_class->change_state = gst_input_selector_change_state; + + klass->block = GST_DEBUG_FUNCPTR (gst_input_selector_block); +} + +static void +gst_input_selector_init (RsnInputSelector * sel) +{ + sel->srcpad = gst_pad_new ("src", GST_PAD_SRC); + gst_pad_set_iterate_internal_links_function (sel->srcpad, + GST_DEBUG_FUNCPTR (gst_selector_pad_iterate_linked_pads)); + gst_pad_set_query_function (sel->srcpad, + GST_DEBUG_FUNCPTR (gst_input_selector_query)); + gst_pad_set_event_function (sel->srcpad, + GST_DEBUG_FUNCPTR (gst_input_selector_event)); + GST_OBJECT_FLAG_SET (sel->srcpad, GST_PAD_FLAG_PROXY_CAPS); + gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad); + /* sinkpad management */ + sel->active_sinkpad = NULL; + sel->padcount = 0; + sel->sync_streams = DEFAULT_SYNC_STREAMS; + + g_mutex_init (&sel->lock); + g_cond_init (&sel->cond); + sel->blocked = FALSE; + + /* lets give a change for downstream to do something on + * active-pad change before we start pushing new buffers */ + g_signal_connect_data (sel, "notify::active-pad", + (GCallback) gst_input_selector_active_pad_changed, NULL, + NULL, G_CONNECT_AFTER); +} + +static void +gst_input_selector_dispose (GObject * object) +{ + RsnInputSelector *sel = GST_INPUT_SELECTOR (object); + + if (sel->active_sinkpad) { + gst_object_unref (sel->active_sinkpad); + sel->active_sinkpad = NULL; + } + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +gst_input_selector_finalize (GObject * object) +{ + RsnInputSelector *sel = GST_INPUT_SELECTOR (object); + + g_mutex_clear (&sel->lock); + g_cond_clear (&sel->cond); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/* this function must be called with the SELECTOR_LOCK. It returns TRUE when the + * active pad changed. */ +static gboolean +gst_input_selector_set_active_pad (RsnInputSelector * self, GstPad * pad) +{ + RsnSelectorPad *old, *new; + GstPad **active_pad_p; + + if (pad == self->active_sinkpad) + return FALSE; + + old = GST_SELECTOR_PAD_CAST (self->active_sinkpad); + new = GST_SELECTOR_PAD_CAST (pad); + + GST_DEBUG_OBJECT (self, "setting active pad to %s:%s", + GST_DEBUG_PAD_NAME (new)); + + if (old) + old->pushed = FALSE; + if (new) + new->pushed = FALSE; + + /* Send a new SEGMENT event on the new pad next */ + if (old != new && new) + new->events_pending = TRUE; + + active_pad_p = &self->active_sinkpad; + gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad)); + + if (old && old != new) + gst_pad_push_event (GST_PAD_CAST (old), gst_event_new_reconfigure ()); + if (new) + gst_pad_push_event (GST_PAD_CAST (new), gst_event_new_reconfigure ()); + + GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT, + self->active_sinkpad); + + return TRUE; +} + +static void +gst_input_selector_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + RsnInputSelector *sel = GST_INPUT_SELECTOR (object); + + switch (prop_id) { + case PROP_ACTIVE_PAD: + { + GstPad *pad; + + pad = g_value_get_object (value); + + GST_INPUT_SELECTOR_LOCK (sel); + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif + + gst_input_selector_set_active_pad (sel, pad); + +#if DEBUG_CACHED_BUFFERS + gst_input_selector_debug_cached_buffers (sel); +#endif + + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + } + case PROP_SYNC_STREAMS: + GST_INPUT_SELECTOR_LOCK (sel); + sel->sync_streams = g_value_get_boolean (value); + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + case PROP_SYNC_MODE: + GST_INPUT_SELECTOR_LOCK (sel); + sel->sync_mode = g_value_get_enum (value); + GST_INPUT_SELECTOR_UNLOCK (sel); + break; + case PROP_CACHE_BUFFERS: + GST_INPUT_SELECTOR_LOCK (object); + sel->cache_buffers = g_value_get_boolean (value); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_input_selector_active_pad_changed (RsnInputSelector * sel, + GParamSpec * pspec, gpointer user_data) +{ + /* Wake up all non-active pads in sync mode, they might be + * the active pad now */ + if (sel->sync_streams) + GST_INPUT_SELECTOR_BROADCAST (sel); +} + +static void +gst_input_selector_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + RsnInputSelector *sel = GST_INPUT_SELECTOR (object); + + switch (prop_id) { + case PROP_N_PADS: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_uint (value, sel->n_pads); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + case PROP_ACTIVE_PAD: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_object (value, sel->active_sinkpad); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + case PROP_SYNC_STREAMS: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_boolean (value, sel->sync_streams); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + case PROP_SYNC_MODE: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_enum (value, sel->sync_mode); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + case PROP_CACHE_BUFFERS: + GST_INPUT_SELECTOR_LOCK (object); + g_value_set_boolean (value, sel->cache_buffers); + GST_INPUT_SELECTOR_UNLOCK (object); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static GstPad * +gst_input_selector_get_linked_pad (RsnInputSelector * sel, GstPad * pad, + gboolean strict) +{ + GstPad *otherpad = NULL; + + GST_INPUT_SELECTOR_LOCK (sel); + if (pad == sel->srcpad) + otherpad = sel->active_sinkpad; + else if (pad == sel->active_sinkpad || !strict) + otherpad = sel->srcpad; + if (otherpad) + gst_object_ref (otherpad); + GST_INPUT_SELECTOR_UNLOCK (sel); + + return otherpad; +} + +static gboolean +gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + RsnInputSelector *sel; + gboolean result = FALSE; + GstIterator *iter; + gboolean done = FALSE; + GValue item = { 0, }; + GstPad *eventpad; + GList *pushed_pads = NULL; + + sel = GST_INPUT_SELECTOR (parent); + /* Send upstream events to all sinkpads */ + iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel)); + + /* This is now essentially a copy of gst_pad_event_default_dispatch + * with a different iterator */ + while (!done) { + switch (gst_iterator_next (iter, &item)) { + case GST_ITERATOR_OK: + eventpad = g_value_get_object (&item); + + /* if already pushed, skip */ + if (g_list_find (pushed_pads, eventpad)) { + g_value_reset (&item); + break; + } + + gst_event_ref (event); + result |= gst_pad_push_event (eventpad, event); + + g_value_reset (&item); + break; + case GST_ITERATOR_RESYNC: + /* We don't reset the result here because we don't push the event + * again on pads that got the event already and because we need + * to consider the result of the previous pushes */ + gst_iterator_resync (iter); + break; + case GST_ITERATOR_ERROR: + GST_ERROR_OBJECT (pad, "Could not iterate over sinkpads"); + done = TRUE; + break; + case GST_ITERATOR_DONE: + done = TRUE; + break; + } + } + g_value_unset (&item); + gst_iterator_free (iter); + + g_list_free (pushed_pads); + + gst_event_unref (event); + + return result; +} + +/* query on the srcpad. We override this function because by default it will + * only forward the query to one random sinkpad */ +static gboolean +gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query) +{ + gboolean res = FALSE; + RsnInputSelector *sel; + + sel = GST_INPUT_SELECTOR (parent); + + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_LATENCY: + { + GList *walk; + GstClockTime resmin, resmax; + gboolean reslive; + + resmin = 0; + resmax = -1; + reslive = FALSE; + + /* perform the query on all sinkpads and combine the results. We take the + * max of min and the min of max for the result latency. */ + GST_INPUT_SELECTOR_LOCK (sel); + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; + walk = g_list_next (walk)) { + GstPad *sinkpad = GST_PAD_CAST (walk->data); + + if (gst_pad_peer_query (sinkpad, query)) { + GstClockTime min, max; + gboolean live; + + /* one query succeeded, we succeed too */ + res = TRUE; + + gst_query_parse_latency (query, &live, &min, &max); + + GST_DEBUG_OBJECT (sinkpad, + "peer latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT + ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live); + + if (live) { + if (min > resmin) + resmin = min; + if (resmax == -1) + resmax = max; + else if (max < resmax) + resmax = max; + if (reslive == FALSE) + reslive = live; + } + } + } + GST_INPUT_SELECTOR_UNLOCK (sel); + if (res) { + gst_query_set_latency (query, reslive, resmin, resmax); + + GST_DEBUG_OBJECT (sel, + "total latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT + ", live %d", GST_TIME_ARGS (resmin), GST_TIME_ARGS (resmax), + reslive); + } + + break; + } + default: + res = gst_pad_query_default (pad, parent, query); + break; + } + + return res; +} + +/* check if the pad is the active sinkpad */ +static inline gboolean +gst_input_selector_is_active_sinkpad (RsnInputSelector * sel, GstPad * pad) +{ + gboolean res; + + GST_INPUT_SELECTOR_LOCK (sel); + res = (pad == sel->active_sinkpad); + GST_INPUT_SELECTOR_UNLOCK (sel); + + return res; +} + +/* Get or create the active sinkpad, must be called with SELECTOR_LOCK */ +static GstPad * +gst_input_selector_activate_sinkpad (RsnInputSelector * sel, GstPad * pad) +{ + GstPad *active_sinkpad; + RsnSelectorPad *selpad; + + selpad = GST_SELECTOR_PAD_CAST (pad); + + selpad->active = TRUE; + active_sinkpad = sel->active_sinkpad; + if (sel->active_sinkpad == NULL) { + GValue item = G_VALUE_INIT; + GstIterator *iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel)); + GstIteratorResult ires; + + while ((ires = gst_iterator_next (iter, &item)) == GST_ITERATOR_RESYNC) + gst_iterator_resync (iter); + if (ires == GST_ITERATOR_OK) { + /* If no pad is currently selected, we return the first usable pad to + * guarantee consistency */ + + active_sinkpad = sel->active_sinkpad = g_value_dup_object (&item); + g_value_reset (&item); + GST_DEBUG_OBJECT (sel, "Activating pad %s:%s", + GST_DEBUG_PAD_NAME (active_sinkpad)); + } else + GST_WARNING_OBJECT (sel, "Couldn't find a default sink pad"); + gst_iterator_free (iter); + } + + return active_sinkpad; +} + +static GstPad * +gst_input_selector_request_new_pad (GstElement * element, + GstPadTemplate * templ, const gchar * unused, const GstCaps * caps) +{ + RsnInputSelector *sel; + gchar *name = NULL; + GstPad *sinkpad = NULL; + + g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL); + + sel = GST_INPUT_SELECTOR (element); + + GST_INPUT_SELECTOR_LOCK (sel); + + GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount); + name = g_strdup_printf ("sink_%u", sel->padcount++); + sinkpad = g_object_new (GST_TYPE_SELECTOR_PAD, + "name", name, "direction", templ->direction, "template", templ, NULL); + g_free (name); + + sel->n_pads++; + + gst_pad_set_event_function (sinkpad, + GST_DEBUG_FUNCPTR (gst_selector_pad_event)); + gst_pad_set_query_function (sinkpad, + GST_DEBUG_FUNCPTR (gst_selector_pad_query)); + gst_pad_set_chain_function (sinkpad, + GST_DEBUG_FUNCPTR (gst_selector_pad_chain)); + gst_pad_set_iterate_internal_links_function (sinkpad, + GST_DEBUG_FUNCPTR (gst_selector_pad_iterate_linked_pads)); + + GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_CAPS); + GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_ALLOCATION); + gst_pad_set_active (sinkpad, TRUE); + gst_element_add_pad (GST_ELEMENT (sel), sinkpad); + GST_INPUT_SELECTOR_UNLOCK (sel); + + return sinkpad; +} + +static void +gst_input_selector_release_pad (GstElement * element, GstPad * pad) +{ + RsnInputSelector *sel; + + sel = GST_INPUT_SELECTOR (element); + GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + + GST_INPUT_SELECTOR_LOCK (sel); + /* if the pad was the active pad, makes us select a new one */ + if (sel->active_sinkpad == pad) { + GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad)); + gst_object_unref (sel->active_sinkpad); + sel->active_sinkpad = NULL; + } + sel->n_pads--; + + gst_pad_set_active (pad, FALSE); + gst_element_remove_pad (GST_ELEMENT (sel), pad); + GST_INPUT_SELECTOR_UNLOCK (sel); +} + +static void +gst_input_selector_reset (RsnInputSelector * sel) +{ + GList *walk; + + GST_INPUT_SELECTOR_LOCK (sel); + /* clear active pad */ + if (sel->active_sinkpad) { + gst_object_unref (sel->active_sinkpad); + sel->active_sinkpad = NULL; + } + /* reset each of our sinkpads state */ + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + RsnSelectorPad *selpad = GST_SELECTOR_PAD_CAST (walk->data); + + gst_selector_pad_reset (selpad); + + if (selpad->tags) { + gst_tag_list_unref (selpad->tags); + selpad->tags = NULL; + } + } + GST_INPUT_SELECTOR_UNLOCK (sel); +} + +static GstStateChangeReturn +gst_input_selector_change_state (GstElement * element, + GstStateChange transition) +{ + RsnInputSelector *self = GST_INPUT_SELECTOR (element); + GstStateChangeReturn result; + + switch (transition) { + case GST_STATE_CHANGE_READY_TO_PAUSED: + GST_INPUT_SELECTOR_LOCK (self); + self->blocked = FALSE; + self->flushing = FALSE; + GST_INPUT_SELECTOR_UNLOCK (self); + break; + case GST_STATE_CHANGE_PAUSED_TO_READY: + /* first unlock before we call the parent state change function, which + * tries to acquire the stream lock when going to ready. */ + GST_INPUT_SELECTOR_LOCK (self); + self->blocked = FALSE; + self->flushing = TRUE; + GST_INPUT_SELECTOR_BROADCAST (self); + GST_INPUT_SELECTOR_UNLOCK (self); + break; + default: + break; + } + + result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + gst_input_selector_reset (self); + break; + default: + break; + } + + return result; +} + +static gint64 +gst_input_selector_block (RsnInputSelector * self) +{ + gint64 ret = 0; + RsnSelectorPad *spad; + + GST_INPUT_SELECTOR_LOCK (self); + + if (self->blocked) + GST_WARNING_OBJECT (self, "switch already blocked"); + + self->blocked = TRUE; + spad = GST_SELECTOR_PAD_CAST (self->active_sinkpad); + + if (spad) + ret = gst_selector_pad_get_running_time (spad); + else + GST_DEBUG_OBJECT (self, "no active pad while blocking"); + + GST_INPUT_SELECTOR_UNLOCK (self); + + return ret; +} diff --git a/ext/resindvd/rsninputselector.h b/ext/resindvd/rsninputselector.h new file mode 100644 index 00000000..d7d2a8d3 --- /dev/null +++ b/ext/resindvd/rsninputselector.h @@ -0,0 +1,91 @@ +/* GStreamer + * Copyright (C) 2003 Julien Moutte <julien@moutte.net> + * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net> + * Copyright (C) 2008 Nokia Corporation. (contact <stefan.kost@nokia.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 __RSN_INPUT_SELECTOR_H__ +#define __RSN_INPUT_SELECTOR_H__ + +#include <gst/gst.h> + +G_BEGIN_DECLS + +#define GST_TYPE_INPUT_SELECTOR \ + (gst_input_selector_get_type()) +#define GST_INPUT_SELECTOR(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_INPUT_SELECTOR, RsnInputSelector)) +#define GST_INPUT_SELECTOR_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_INPUT_SELECTOR, RsnInputSelectorClass)) +#define GST_IS_INPUT_SELECTOR(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_INPUT_SELECTOR)) +#define GST_IS_INPUT_SELECTOR_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_INPUT_SELECTOR)) + +typedef struct _RsnInputSelector RsnInputSelector; +typedef struct _RsnInputSelectorClass RsnInputSelectorClass; + +#define GST_INPUT_SELECTOR_GET_LOCK(sel) (&((RsnInputSelector*)(sel))->lock) +#define GST_INPUT_SELECTOR_GET_COND(sel) (&((RsnInputSelector*)(sel))->cond) +#define GST_INPUT_SELECTOR_LOCK(sel) (g_mutex_lock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_UNLOCK(sel) (g_mutex_unlock (GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_WAIT(sel) (g_cond_wait (GST_INPUT_SELECTOR_GET_COND(sel), \ + GST_INPUT_SELECTOR_GET_LOCK(sel))) +#define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel))) + +/** + * RsnInputSelectorSyncMode: + * @GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT: Sync using the current active segment. + * @GST_INPUT_SELECTOR_SYNC_MODE_CLOCK: Sync using the clock. + * + * The different ways that input-selector can behave when in sync-streams mode. + */ +typedef enum { + GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT, + GST_INPUT_SELECTOR_SYNC_MODE_CLOCK +} RsnInputSelectorSyncMode; + +struct _RsnInputSelector { + GstElement element; + + GstPad *srcpad; + + GstPad *active_sinkpad; + guint n_pads; + guint padcount; + gboolean sync_streams; + RsnInputSelectorSyncMode sync_mode; + gboolean cache_buffers; + + GMutex lock; + GCond cond; + gboolean blocked; + gboolean flushing; +}; + +struct _RsnInputSelectorClass { + GstElementClass parent_class; + + gint64 (*block) (RsnInputSelector *self); +}; + +G_GNUC_INTERNAL GType gst_input_selector_get_type (void); + +G_END_DECLS + +#endif /* __GST_INPUT_SELECTOR_H__ */ diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c deleted file mode 100644 index f2f328c2..00000000 --- a/ext/resindvd/rsnparsetter.c +++ /dev/null @@ -1,402 +0,0 @@ -/* - * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net> - */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <gst/gst.h> -#include <gst/glib-compat-private.h> -#include <gst/video/video.h> -#include <string.h> - -#include "rsnparsetter.h" -#include "rsnwrappedbuffer.h" - -GST_DEBUG_CATEGORY_STATIC (rsn_parsetter_debug); -#define GST_CAT_DEFAULT rsn_parsetter_debug - -static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv") - ); - -static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv") - ); - -static void rsn_parsetter_register_extra (GType rsn_parsetter_type); - -GST_BOILERPLATE_FULL (RsnParSetter, rsn_parsetter, GstElement, - GST_TYPE_ELEMENT, rsn_parsetter_register_extra); - -static void rsn_parsetter_finalize (GObject * object); -static GstFlowReturn rsn_parsetter_chain (GstPad * pad, GstBuffer * buf); -static gboolean rsn_parsetter_sink_event (GstPad * pad, GstEvent * event); -static gboolean rsn_parsetter_sink_setcaps (GstPad * pad, GstCaps * caps); -static GstFlowReturn rsn_parsetter_sink_bufferalloc (GstPad * pad, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - -static GstCaps *rsn_parsetter_src_getcaps (GstPad * pad); -static GstCaps *rsn_parsetter_convert_caps (RsnParSetter * parset, - GstCaps * caps, gboolean widescreen); -static gboolean rsn_parsetter_check_caps (RsnParSetter * parset, - GstCaps * caps); - -static void -rsn_parsetter_register_extra (GType rsn_parsetter_type) -{ - GST_DEBUG_CATEGORY_INIT (rsn_parsetter_debug, "rsnparsetter", 0, - "Resin DVD aspect ratio adjuster"); -} - -static void -rsn_parsetter_base_init (gpointer gclass) -{ - - GstElementClass *element_class = GST_ELEMENT_CLASS (gclass); - - gst_element_class_add_pad_template (element_class, - 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_details_simple (element_class, - "Resin Aspect Ratio Setter", "Filter/Video", - "Overrides caps on video buffers to force a particular display ratio", - "Jan Schmidt <thaytan@noraisin.net>"); -} - -static void -rsn_parsetter_class_init (RsnParSetterClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - - gobject_class->finalize = rsn_parsetter_finalize; -} - -static void -rsn_parsetter_init (RsnParSetter * parset, RsnParSetterClass * gclass) -{ - parset->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); - gst_pad_set_getcaps_function (parset->sinkpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_chain_function (parset->sinkpad, - GST_DEBUG_FUNCPTR (rsn_parsetter_chain)); - gst_pad_set_event_function (parset->sinkpad, - GST_DEBUG_FUNCPTR (rsn_parsetter_sink_event)); - gst_pad_set_setcaps_function (parset->sinkpad, - GST_DEBUG_FUNCPTR (rsn_parsetter_sink_setcaps)); - gst_pad_set_bufferalloc_function (parset->sinkpad, - GST_DEBUG_FUNCPTR (rsn_parsetter_sink_bufferalloc)); - gst_element_add_pad (GST_ELEMENT (parset), parset->sinkpad); - - parset->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); - gst_pad_set_getcaps_function (parset->srcpad, - GST_DEBUG_FUNCPTR (rsn_parsetter_src_getcaps)); - gst_element_add_pad (GST_ELEMENT (parset), parset->srcpad); - - parset->caps_lock = g_mutex_new (); -} - -static void -rsn_parsetter_finalize (GObject * object) -{ - RsnParSetter *parset = RSN_PARSETTER (object); - - gst_caps_replace (&parset->outcaps, NULL); - gst_caps_replace (&parset->in_caps_last, NULL); - gst_caps_replace (&parset->in_caps_converted, NULL); - - g_mutex_free (parset->caps_lock); - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static GstFlowReturn -rsn_parsetter_chain (GstPad * pad, GstBuffer * buf) -{ - RsnParSetter *parset = RSN_PARSETTER (GST_OBJECT_PARENT (pad)); - RsnMetaWrapped *meta; - - meta = RSN_META_WRAPPED_GET (buf); - - /* If this is a buffer we wrapped up earlier, unwrap it now */ - if (meta != NULL) { - GstBuffer *wrap_buf = buf; - - if (meta->owner == GST_ELEMENT (parset)) { - buf = rsn_meta_wrapped_unwrap_and_unref (wrap_buf, meta); - GST_DEBUG_OBJECT (parset, "Unwrapping %p yields buffer %p with caps %" - GST_PTR_FORMAT, wrap_buf, buf, GST_BUFFER_CAPS (buf)); - } - } - - if (parset->outcaps != GST_BUFFER_CAPS (buf)) { - if (parset->override_outcaps == FALSE && - gst_caps_is_equal (parset->outcaps, GST_BUFFER_CAPS (buf))) { - /* Just update our output caps var */ - gst_caps_replace (&parset->outcaps, GST_BUFFER_CAPS (buf)); - goto out; - } - - /* Replace the caps on the output buffer */ - buf = gst_buffer_make_metadata_writable (buf); - gst_buffer_set_caps (buf, parset->outcaps); - - GST_DEBUG_OBJECT (parset, - "Replacing caps on buffer %p with caps %" GST_PTR_FORMAT, - buf, parset->outcaps); - } - -out: - return gst_pad_push (parset->srcpad, buf); -} - -static gboolean -rsn_parsetter_sink_event (GstPad * pad, GstEvent * event) -{ - RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad)); - const GstStructure *structure = gst_event_get_structure (event); - - if (structure != NULL && - gst_structure_has_name (structure, "application/x-gst-dvd")) { - const char *type = gst_structure_get_string (structure, "event"); - if (type == NULL) - goto out; - - if (strcmp (type, "dvd-video-format") == 0) { - gboolean is_widescreen; - - gst_structure_get_boolean (structure, "video-widescreen", &is_widescreen); - - GST_DEBUG_OBJECT (parset, "Video is %s", - parset->is_widescreen ? "16:9" : "4:3"); - - g_mutex_lock (parset->caps_lock); - if (parset->is_widescreen != is_widescreen) { - /* Force caps check */ - gst_caps_replace (&parset->in_caps_last, NULL); - gst_caps_replace (&parset->in_caps_converted, NULL); - } - parset->is_widescreen = is_widescreen; - - /* FIXME: Added for testing: */ - // parset->is_widescreen = FALSE; - - g_mutex_unlock (parset->caps_lock); - } - } - -out: - gst_object_unref (GST_OBJECT (parset)); - return gst_pad_event_default (pad, event); -} - -static GstCaps * -rsn_parsetter_src_getcaps (GstPad * pad) -{ - RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad)); - GstCaps *ret; - const GstCaps *templ_caps = gst_pad_get_pad_template_caps (pad); - - ret = gst_pad_peer_get_caps (parset->sinkpad); - if (ret == NULL) - ret = gst_caps_copy (templ_caps); - else { - GstCaps *temp; - temp = gst_caps_intersect (templ_caps, ret); - gst_caps_unref (ret); - ret = rsn_parsetter_convert_caps (parset, temp, parset->is_widescreen); - gst_caps_unref (temp); - } - - gst_object_unref (parset); - return ret; -} - -static gboolean -rsn_parsetter_check_caps (RsnParSetter * parset, GstCaps * caps) -{ - GstStructure *s; - gint width, height; - gint par_n, par_d; - guint dar_n, dar_d; - gboolean ret = FALSE; - - g_mutex_lock (parset->caps_lock); - - if (caps == parset->in_caps_last || - gst_caps_is_equal (caps, parset->in_caps_last)) { - ret = parset->in_caps_was_ok; - goto out; - } - - /* Calculate the DAR from the incoming caps, and return TRUE if it matches - * the required DAR, FALSE if not */ - s = gst_caps_get_structure (caps, 0); - if (s == NULL) - goto out; - - if (!gst_structure_get_int (s, "width", &width) || - !gst_structure_get_int (s, "height", &height)) - goto out; - - if (!gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n, &par_d)) - par_n = par_d = 1; - - if (!gst_video_calculate_display_ratio (&dar_n, &dar_d, width, height, - par_n, par_d, 1, 1)) - goto out; - - GST_DEBUG_OBJECT (parset, - "Incoming video caps now: w %d h %d PAR %d/%d = DAR %d/%d", - width, height, par_n, par_d, dar_n, dar_d); - - if (parset->is_widescreen) { - if (dar_n == 16 && dar_d == 9) - ret = TRUE; - } else { - if (dar_n == 4 && dar_d == 3) - ret = TRUE; - } - - gst_caps_replace (&parset->in_caps_last, caps); - gst_caps_replace (&parset->in_caps_converted, NULL); - parset->in_caps_was_ok = ret; - -out: - g_mutex_unlock (parset->caps_lock); - return ret; -} - -static GstCaps * -rsn_parsetter_convert_caps (RsnParSetter * parset, GstCaps * caps, - gboolean widescreen) -{ - /* Duplicate the given caps, with a PAR that provides the desired DAR */ - GstCaps *outcaps; - GstStructure *s; - gint width, height; - gint par_n, par_d; - guint dar_n, dar_d; - GValue par = { 0, }; - - g_mutex_lock (parset->caps_lock); - if (caps == parset->in_caps_last && parset->in_caps_converted) { - outcaps = gst_caps_ref (parset->in_caps_converted); - goto out; - } - - outcaps = gst_caps_copy (caps); - - /* Calculate the DAR from the incoming caps, and return TRUE if it matches - * the required DAR, FALSE if not */ - s = gst_caps_get_structure (outcaps, 0); - if (s == NULL) - goto out; - - if (!gst_structure_get_int (s, "width", &width) || - !gst_structure_get_int (s, "height", &height)) - goto out; - - if (widescreen) { - dar_n = 16; - dar_d = 9; - } else { - dar_n = 4; - dar_d = 3; - } - - par_n = dar_n * height; - par_d = dar_d * width; - - g_value_init (&par, GST_TYPE_FRACTION); - gst_value_set_fraction (&par, par_n, par_d); - gst_structure_set_value (s, "pixel-aspect-ratio", &par); - g_value_unset (&par); - - gst_caps_replace (&parset->in_caps_converted, outcaps); -out: - g_mutex_unlock (parset->caps_lock); - return outcaps; -} - -static gboolean -rsn_parsetter_sink_setcaps (GstPad * pad, GstCaps * caps) -{ - /* Check the new incoming caps against our current DAR, and mark - * whether the buffers will need adjusting */ - RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad)); - - if (rsn_parsetter_check_caps (parset, caps)) { - parset->override_outcaps = FALSE; - gst_caps_replace (&parset->outcaps, caps); - } else { - GstCaps *override_caps = rsn_parsetter_convert_caps (parset, caps, - parset->is_widescreen); - if (parset->outcaps) - gst_caps_unref (parset->outcaps); - parset->outcaps = override_caps; - - parset->override_outcaps = TRUE; - } - - GST_DEBUG_OBJECT (parset, "caps changed: need_override now = %d", - parset->override_outcaps); - - gst_object_unref (parset); - return TRUE; -} - -static GstFlowReturn -rsn_parsetter_sink_bufferalloc (GstPad * pad, guint64 offset, guint size, - GstCaps * caps, GstBuffer ** buf) -{ - RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad)); - GstFlowReturn ret; - - GST_LOG_OBJECT (parset, "Entering bufferalloc"); - - if (rsn_parsetter_check_caps (parset, caps)) { - ret = gst_pad_alloc_buffer (parset->srcpad, offset, size, caps, buf); - GST_LOG_OBJECT (parset, "Not wrapping buf %p", *buf); - } else { - /* Allocate and wrap a downstream buffer */ - GstBuffer *orig_buf; - GstBuffer *outbuf; - GstCaps *override_caps = rsn_parsetter_convert_caps (parset, caps, - parset->is_widescreen); - - ret = gst_pad_alloc_buffer (parset->srcpad, offset, size, - override_caps, &orig_buf); - gst_caps_unref (override_caps); - - if (ret != GST_FLOW_OK) - return ret; - - outbuf = rsn_wrapped_buffer_new (orig_buf, GST_ELEMENT_CAST (parset)); - if (!outbuf) { - /* FIXME: Throw error */ - return GST_FLOW_ERROR; - } - - gst_buffer_set_caps (outbuf, caps); - - GST_LOG_OBJECT (parset, - "Wrapped ds buf %p with caps %" GST_PTR_FORMAT - " into new buf %p with caps %" GST_PTR_FORMAT, - orig_buf, GST_BUFFER_CAPS (orig_buf), outbuf, GST_BUFFER_CAPS (outbuf)); - - *buf = outbuf; - } - - gst_object_unref (GST_OBJECT (parset)); - - return ret; -} diff --git a/ext/resindvd/rsnstreamselector.c b/ext/resindvd/rsnstreamselector.c deleted file mode 100644 index d6106770..00000000 --- a/ext/resindvd/rsnstreamselector.c +++ /dev/null @@ -1,769 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Julien Moutte <julien@moutte.net> - * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net> - * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com> - * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.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 <string.h> - -#include "rsnstreamselector.h" - -GST_DEBUG_CATEGORY_STATIC (stream_selector_debug); -#define GST_CAT_DEFAULT stream_selector_debug - -static GstStaticPadTemplate rsn_stream_selector_sink_factory = -GST_STATIC_PAD_TEMPLATE ("sink_%u", - GST_PAD_SINK, - GST_PAD_REQUEST, - GST_STATIC_CAPS_ANY); - -static GstStaticPadTemplate rsn_stream_selector_src_factory = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); - -enum -{ - PROP_0, - PROP_N_PADS, - PROP_ACTIVE_PAD, - PROP_LAST -}; - -static gboolean rsn_stream_selector_is_active_sinkpad (RsnStreamSelector * sel, - GstPad * pad); -static GstPad *rsn_stream_selector_get_active (RsnStreamSelector * sel, - GstPad * pad); -static void rsn_stream_selector_set_active (RsnStreamSelector * sel, - GstPad * pad); -static GstPad *rsn_stream_selector_get_linked_pad (GstPad * pad, - gboolean strict); - -#define RSN_TYPE_SELECTOR_PAD \ - (gst_selector_pad_get_type()) -#define GST_SELECTOR_PAD(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), RSN_TYPE_SELECTOR_PAD, RsnSelectorPad)) -#define GST_SELECTOR_PAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), RSN_TYPE_SELECTOR_PAD, RsnSelectorPadClass)) -#define RSN_IS_SELECTOR_PAD(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RSN_TYPE_SELECTOR_PAD)) -#define RSN_IS_SELECTOR_PAD_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), RSN_TYPE_SELECTOR_PAD)) -#define GST_SELECTOR_PAD_CAST(obj) \ - ((RsnSelectorPad *)(obj)) - -typedef struct _RsnSelectorPad RsnSelectorPad; -typedef struct _RsnSelectorPadClass RsnSelectorPadClass; - -struct _RsnSelectorPad -{ - GstPad parent; - - gboolean active; - gboolean eos; - GstSegment segment; - GstTagList *tags; -}; - -struct _RsnSelectorPadClass -{ - GstPadClass parent; -}; - -static void gst_selector_pad_class_init (RsnSelectorPadClass * klass); -static void gst_selector_pad_init (RsnSelectorPad * pad); -static void gst_selector_pad_finalize (GObject * object); - -static void gst_selector_pad_get_property (GObject * object, - guint prop_id, GValue * value, GParamSpec * pspec); - -static GstPadClass *selector_pad_parent_class = NULL; - -static void gst_selector_pad_reset (RsnSelectorPad * pad); -static gboolean gst_selector_pad_event (GstPad * pad, GstEvent * event); -static GstCaps *gst_selector_pad_getcaps (GstPad * pad); -static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstBuffer * buf); -static GstFlowReturn gst_selector_pad_bufferalloc (GstPad * pad, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); - -enum -{ - PROP_PAD_0, - PROP_PAD_TAGS, - PROP_PAD_ACTIVE, - PROP_PAD_LAST -}; - -static GType -gst_selector_pad_get_type (void) -{ - static GType selector_pad_type = 0; - - if (!selector_pad_type) { - static const GTypeInfo selector_pad_info = { - sizeof (RsnSelectorPadClass), - NULL, - NULL, - (GClassInitFunc) gst_selector_pad_class_init, - NULL, - NULL, - sizeof (RsnSelectorPad), - 0, - (GInstanceInitFunc) gst_selector_pad_init, - }; - - selector_pad_type = - g_type_register_static (GST_TYPE_PAD, "RsnSelectorPad", - &selector_pad_info, 0); - } - return selector_pad_type; -} - -static void -gst_selector_pad_class_init (RsnSelectorPadClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - - selector_pad_parent_class = g_type_class_peek_parent (klass); - - gobject_class->finalize = gst_selector_pad_finalize; - gobject_class->get_property = - GST_DEBUG_FUNCPTR (gst_selector_pad_get_property); - - g_object_class_install_property (gobject_class, PROP_PAD_TAGS, - g_param_spec_boxed ("tags", "Tags", - "The currently active tags on the pad", GST_TYPE_TAG_LIST, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - - g_object_class_install_property (gobject_class, PROP_PAD_ACTIVE, - g_param_spec_boolean ("active", "Active", - "If the pad is currently active", FALSE, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); -} - -static void -gst_selector_pad_init (RsnSelectorPad * pad) -{ - gst_selector_pad_reset (pad); -} - -static void -gst_selector_pad_finalize (GObject * object) -{ - RsnSelectorPad *pad; - - pad = GST_SELECTOR_PAD_CAST (object); - - if (pad->tags) - gst_tag_list_unref (pad->tags); - - G_OBJECT_CLASS (selector_pad_parent_class)->finalize (object); -} - -static void -gst_selector_pad_get_property (GObject * object, - guint prop_id, GValue * value, GParamSpec * pspec) -{ - RsnSelectorPad *pad; - - pad = GST_SELECTOR_PAD (object); - - switch (prop_id) { - case PROP_PAD_TAGS: - GST_OBJECT_LOCK (object); - g_value_set_boxed (value, pad->tags); - GST_OBJECT_UNLOCK (object); - break; - case PROP_PAD_ACTIVE: - { - RsnStreamSelector *sel; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - g_value_set_boolean (value, rsn_stream_selector_is_active_sinkpad (sel, - GST_PAD_CAST (pad))); - gst_object_unref (sel); - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_selector_pad_reset (RsnSelectorPad * pad) -{ - pad->active = FALSE; - pad->eos = FALSE; - gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); -} - -static gboolean -gst_selector_pad_event (GstPad * pad, GstEvent * event) -{ - gboolean res = TRUE; - gboolean forward = TRUE; - RsnStreamSelector *sel; - RsnSelectorPad *selpad; - GstPad *active_sinkpad; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - selpad = GST_SELECTOR_PAD_CAST (pad); - - /* only forward if we are dealing with the active sinkpad */ - active_sinkpad = rsn_stream_selector_get_active (sel, pad); - forward = (active_sinkpad == pad); - - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_FLUSH_STOP: - gst_selector_pad_reset (selpad); - break; - case GST_EVENT_NEWSEGMENT: - { - gboolean update; - GstFormat format; - gdouble rate, arate; - gint64 start, stop, time; - - gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format, - &start, &stop, &time); - - GST_DEBUG_OBJECT (selpad, - "configured NEWSEGMENT update %d, rate %lf, applied rate %lf, " - "format %d, " - "%" G_GINT64_FORMAT " -- %" G_GINT64_FORMAT ", time %" - G_GINT64_FORMAT, update, rate, arate, format, start, stop, time); - - gst_segment_set_newsegment_full (&selpad->segment, update, - rate, arate, format, start, stop, time); - break; - } - case GST_EVENT_TAG: - { - GstTagList *tags; - - GST_OBJECT_LOCK (selpad); - if (selpad->tags) - gst_tag_list_unref (selpad->tags); - gst_event_parse_tag (event, &tags); - if (tags) - tags = gst_tag_list_copy (tags); - selpad->tags = tags; - GST_DEBUG_OBJECT (sel, "received tags %" GST_PTR_FORMAT, selpad->tags); - GST_OBJECT_UNLOCK (selpad); - break; - } - case GST_EVENT_CUSTOM_DOWNSTREAM: - { - const GstStructure *structure = gst_event_get_structure (event); - if (structure != NULL && - gst_structure_has_name (structure, "application/x-gst-dvd")) { - const char *type = gst_structure_get_string (structure, "event"); - if (strcmp (type, "select-pad") == 0) { - rsn_stream_selector_set_active (sel, pad); - forward = FALSE; - } - } - } - case GST_EVENT_EOS: - selpad->eos = TRUE; - break; - default: - break; - } - if (forward) - res = gst_pad_push_event (sel->srcpad, event); - else - gst_event_unref (event); - - gst_object_unref (sel); - - return res; -} - -static GstCaps * -gst_selector_pad_getcaps (GstPad * pad) -{ - RsnStreamSelector *sel; - GstCaps *caps; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - - GST_DEBUG_OBJECT (sel, "Getting caps of srcpad peer"); - caps = gst_pad_peer_get_caps (sel->srcpad); - if (caps == NULL) - caps = gst_caps_new_any (); - - gst_object_unref (sel); - - return caps; -} - -static GstFlowReturn -gst_selector_pad_bufferalloc (GstPad * pad, guint64 offset, - guint size, GstCaps * caps, GstBuffer ** buf) -{ - RsnStreamSelector *sel; - GstFlowReturn result; - GstPad *active_sinkpad; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - - active_sinkpad = rsn_stream_selector_get_active (sel, pad); - - /* Fallback allocation for buffers from pads except the selected one */ - if (pad != active_sinkpad) { - GST_DEBUG_OBJECT (sel, - "Pad %s:%s is not selected. Performing fallback allocation", - GST_DEBUG_PAD_NAME (pad)); - - *buf = NULL; - result = GST_FLOW_OK; - } else { - result = gst_pad_alloc_buffer (sel->srcpad, offset, size, caps, buf); - - /* FIXME: HACK. If buffer alloc returns not-linked, perform a fallback - * allocation. This should NOT be necessary, because playbin should - * properly block the source pad from running until it's finished hooking - * everything up, but playbin needs refactoring first. */ - if (result == GST_FLOW_NOT_LINKED) { - GST_DEBUG_OBJECT (sel, - "No peer pad yet - performing fallback allocation for pad %s:%s", - GST_DEBUG_PAD_NAME (pad)); - - *buf = NULL; - result = GST_FLOW_OK; - } - } - - gst_object_unref (sel); - - return result; -} - -static GstFlowReturn -gst_selector_pad_chain (GstPad * pad, GstBuffer * buf) -{ - RsnStreamSelector *sel; - GstFlowReturn res; - GstPad *active_sinkpad; - RsnSelectorPad *selpad; - GstClockTime timestamp; - GstSegment *seg; - gboolean discont; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - selpad = GST_SELECTOR_PAD_CAST (pad); - seg = &selpad->segment; - - active_sinkpad = rsn_stream_selector_get_active (sel, pad); - - timestamp = GST_BUFFER_TIMESTAMP (buf); - if (GST_CLOCK_TIME_IS_VALID (timestamp)) { - GST_DEBUG_OBJECT (sel, "received timestamp %" GST_TIME_FORMAT, - GST_TIME_ARGS (timestamp)); - gst_segment_set_last_stop (seg, seg->format, timestamp); - } - - /* Ignore buffers from pads except the selected one */ - if (pad != active_sinkpad) - goto ignore; - - /* If we just switched pads, mark a discont buffer */ - GST_OBJECT_LOCK (sel); - discont = sel->mark_discont; - sel->mark_discont = FALSE; - GST_OBJECT_UNLOCK (sel); - - if (discont) { - GST_DEBUG_OBJECT (sel, "Marking buffer discont due to pad switch"); - buf = gst_buffer_make_metadata_writable (buf); - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); - } - - /* forward */ - GST_LOG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s", buf, - GST_DEBUG_PAD_NAME (pad)); - res = gst_pad_push (sel->srcpad, buf); -done: - gst_object_unref (sel); - return res; - /* dropped buffers */ -ignore: - { - GST_DEBUG_OBJECT (sel, "Ignoring buffer %p from pad %s:%s", - buf, GST_DEBUG_PAD_NAME (pad)); - gst_buffer_unref (buf); - res = GST_FLOW_NOT_LINKED; - goto done; - } -} - -static void rsn_stream_selector_dispose (GObject * object); - -static void rsn_stream_selector_init (RsnStreamSelector * sel); -static void rsn_stream_selector_base_init (RsnStreamSelectorClass * klass); -static void rsn_stream_selector_class_init (RsnStreamSelectorClass * klass); - -static void rsn_stream_selector_set_property (GObject * object, - guint prop_id, const GValue * value, GParamSpec * pspec); -static void rsn_stream_selector_get_property (GObject * object, - guint prop_id, GValue * value, GParamSpec * pspec); - -static GstPad *rsn_stream_selector_request_new_pad (GstElement * element, - GstPadTemplate * templ, const gchar * unused); -static void rsn_stream_selector_release_pad (GstElement * element, - GstPad * pad); -static GstIterator *rsn_stream_selector_iterate_linked_pads (GstPad * pad); -static GstCaps *rsn_stream_selector_getcaps (GstPad * pad); - -static GstElementClass *parent_class = NULL; - -GType -rsn_stream_selector_get_type (void) -{ - static GType stream_selector_type = 0; - - if (!stream_selector_type) { - static const GTypeInfo stream_selector_info = { - sizeof (RsnStreamSelectorClass), - (GBaseInitFunc) rsn_stream_selector_base_init, - NULL, - (GClassInitFunc) rsn_stream_selector_class_init, - NULL, - NULL, - sizeof (RsnStreamSelector), - 0, - (GInstanceInitFunc) rsn_stream_selector_init, - }; - stream_selector_type = - g_type_register_static (GST_TYPE_ELEMENT, - "RsnStreamSelector", &stream_selector_info, 0); - GST_DEBUG_CATEGORY_INIT (stream_selector_debug, - "streamselector", 0, "A stream-selector element"); - } - - return stream_selector_type; -} - -static void -rsn_stream_selector_base_init (RsnStreamSelectorClass * klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details_simple (element_class, "StreamSelector", - "Generic", "N-to-1 input stream_selectoring", - "Julien Moutte <julien@moutte.net>, " - "Ronald S. Bultje <rbultje@ronald.bitfreak.net>, " - "Jan Schmidt <thaytan@mad.scientist.com>, " - "Wim Taymans <wim.taymans@gmail.com>"); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&rsn_stream_selector_sink_factory)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&rsn_stream_selector_src_factory)); -} - -static void -rsn_stream_selector_class_init (RsnStreamSelectorClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); - - parent_class = g_type_class_peek_parent (klass); - - gobject_class->dispose = rsn_stream_selector_dispose; - - gobject_class->set_property = - GST_DEBUG_FUNCPTR (rsn_stream_selector_set_property); - gobject_class->get_property = - GST_DEBUG_FUNCPTR (rsn_stream_selector_get_property); - - g_object_class_install_property (gobject_class, PROP_N_PADS, - g_param_spec_uint ("n-pads", "Number of Pads", - "The number of sink pads", 0, G_MAXUINT, 0, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD, - g_param_spec_object ("active-pad", "Active Pad", - "The currently active sink pad", GST_TYPE_PAD, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - - gstelement_class->request_new_pad = rsn_stream_selector_request_new_pad; - gstelement_class->release_pad = rsn_stream_selector_release_pad; -} - -static void -rsn_stream_selector_init (RsnStreamSelector * sel) -{ - sel->srcpad = gst_pad_new ("src", GST_PAD_SRC); - gst_pad_set_iterate_internal_links_function (sel->srcpad, - GST_DEBUG_FUNCPTR (rsn_stream_selector_iterate_linked_pads)); - gst_pad_set_getcaps_function (sel->srcpad, - GST_DEBUG_FUNCPTR (rsn_stream_selector_getcaps)); - gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad); - /* sinkpad management */ - sel->padcount = 0; - sel->active_sinkpad = NULL; - gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED); -} - -static void -rsn_stream_selector_dispose (GObject * object) -{ - RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object); - - if (sel->active_sinkpad) { - gst_object_unref (sel->active_sinkpad); - sel->active_sinkpad = NULL; - } - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -rsn_stream_selector_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object); - - switch (prop_id) { - case PROP_ACTIVE_PAD: - { - GstPad *pad = NULL; - - pad = g_value_get_object (value); - rsn_stream_selector_set_active (sel, pad); - - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -rsn_stream_selector_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object); - - switch (prop_id) { - case PROP_N_PADS: - GST_OBJECT_LOCK (object); - g_value_set_uint (value, sel->n_pads); - GST_OBJECT_UNLOCK (object); - break; - case PROP_ACTIVE_PAD:{ - GST_OBJECT_LOCK (object); - g_value_set_object (value, sel->active_sinkpad); - GST_OBJECT_UNLOCK (object); - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static GstPad * -rsn_stream_selector_get_linked_pad (GstPad * pad, gboolean strict) -{ - RsnStreamSelector *sel; - GstPad *otherpad = NULL; - - sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - - GST_OBJECT_LOCK (sel); - if (pad == sel->srcpad) - otherpad = sel->active_sinkpad; - else if (pad == sel->active_sinkpad || !strict) - otherpad = sel->srcpad; - if (otherpad) - gst_object_ref (otherpad); - GST_OBJECT_UNLOCK (sel); - gst_object_unref (sel); - return otherpad; -} - -static GstCaps * -rsn_stream_selector_getcaps (GstPad * pad) -{ - GstPad *otherpad; - GstObject *parent; - GstCaps *caps; - - otherpad = rsn_stream_selector_get_linked_pad (pad, FALSE); - parent = gst_object_get_parent (GST_OBJECT (pad)); - if (!otherpad) { - GST_DEBUG_OBJECT (parent, - "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad)); - caps = gst_caps_new_any (); - } else { - GST_DEBUG_OBJECT (parent, - "Pad %s:%s is linked (to %s:%s), returning peer caps", - GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad)); - /* if the peer has caps, use those. If the pad is not linked, this function - * returns NULL and we return ANY */ - if (!(caps = gst_pad_peer_get_caps (otherpad))) - caps = gst_caps_new_any (); - gst_object_unref (otherpad); - } - - gst_object_unref (parent); - return caps; -} - -/* check if the pad is the active sinkpad */ -static gboolean -rsn_stream_selector_is_active_sinkpad (RsnStreamSelector * sel, GstPad * pad) -{ - gboolean res; - - GST_OBJECT_LOCK (sel); - res = (pad == sel->active_sinkpad); - GST_OBJECT_UNLOCK (sel); - - return res; -} - -/* Get or create the active sinkpad */ -static GstPad * -rsn_stream_selector_get_active (RsnStreamSelector * sel, GstPad * pad) -{ - GstPad *active_sinkpad; - RsnSelectorPad *selpad; - - selpad = GST_SELECTOR_PAD_CAST (pad); - - GST_OBJECT_LOCK (sel); - selpad->active = TRUE; - active_sinkpad = sel->active_sinkpad; - if (active_sinkpad == NULL) { - /* first pad we get an alloc on becomes the activated pad by default */ - active_sinkpad = sel->active_sinkpad = gst_object_ref (pad); - GST_DEBUG_OBJECT (sel, "Activating pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - } - GST_OBJECT_UNLOCK (sel); - - return active_sinkpad; -} - -static void -rsn_stream_selector_set_active (RsnStreamSelector * sel, GstPad * pad) -{ - GstPad **active_pad_p; - - GST_OBJECT_LOCK (GST_OBJECT_CAST (sel)); - if (pad != sel->active_sinkpad) { - RsnSelectorPad *selpad; - - selpad = GST_SELECTOR_PAD_CAST (pad); - /* we can only activate pads that have data received */ - if (selpad && !selpad->active) { - GST_DEBUG_OBJECT (sel, "No data received on pad %" GST_PTR_FORMAT, pad); - } else { - active_pad_p = &sel->active_sinkpad; - gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad)); - GST_DEBUG_OBJECT (sel, "New active pad is %" GST_PTR_FORMAT, - sel->active_sinkpad); - } - /* Mark the next buffer as discontinuous */ - sel->mark_discont = TRUE; - } - GST_OBJECT_UNLOCK (GST_OBJECT_CAST (sel)); -} - -static GstIterator * -rsn_stream_selector_iterate_linked_pads (GstPad * pad) -{ - RsnStreamSelector *sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad)); - GstPad *otherpad = rsn_stream_selector_get_linked_pad (pad, TRUE); - GstIterator *it = gst_iterator_new_single (GST_TYPE_PAD, otherpad, - (GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref); - - if (otherpad) - gst_object_unref (otherpad); - gst_object_unref (sel); - - return it; -} - -static GstPad * -rsn_stream_selector_request_new_pad (GstElement * element, - GstPadTemplate * templ, const gchar * unused) -{ - RsnStreamSelector *sel; - gchar *name = NULL; - GstPad *sinkpad = NULL; - - sel = RSN_STREAM_SELECTOR (element); - g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL); - GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount); - GST_OBJECT_LOCK (sel); - name = g_strdup_printf ("sink_%u", sel->padcount++); - sinkpad = g_object_new (RSN_TYPE_SELECTOR_PAD, - "name", name, "direction", templ->direction, "template", templ, NULL); - g_free (name); - sel->n_pads++; - GST_OBJECT_UNLOCK (sel); - - gst_pad_set_event_function (sinkpad, - GST_DEBUG_FUNCPTR (gst_selector_pad_event)); - gst_pad_set_getcaps_function (sinkpad, - GST_DEBUG_FUNCPTR (gst_selector_pad_getcaps)); - gst_pad_set_chain_function (sinkpad, - GST_DEBUG_FUNCPTR (gst_selector_pad_chain)); - gst_pad_set_iterate_internal_links_function (sinkpad, - GST_DEBUG_FUNCPTR (rsn_stream_selector_iterate_linked_pads)); - gst_pad_set_bufferalloc_function (sinkpad, - GST_DEBUG_FUNCPTR (gst_selector_pad_bufferalloc)); - - gst_pad_set_active (sinkpad, TRUE); - gst_element_add_pad (GST_ELEMENT (sel), sinkpad); - return sinkpad; -} - -static void -rsn_stream_selector_release_pad (GstElement * element, GstPad * pad) -{ - RsnStreamSelector *sel; - - sel = RSN_STREAM_SELECTOR (element); - GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - - GST_OBJECT_LOCK (sel); - /* if the pad was the active pad, makes us select a new one */ - if (sel->active_sinkpad == pad) { - GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - sel->active_sinkpad = NULL; - } - sel->n_pads--; - GST_OBJECT_UNLOCK (sel); - - gst_pad_set_active (pad, FALSE); - gst_element_remove_pad (GST_ELEMENT (sel), pad); -} diff --git a/ext/resindvd/rsnstreamselector.h b/ext/resindvd/rsnstreamselector.h deleted file mode 100644 index a8ff1af5..00000000 --- a/ext/resindvd/rsnstreamselector.h +++ /dev/null @@ -1,63 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Julien Moutte <julien@moutte.net> - * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net> - * - * 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 __RSN_STREAM_SELECTOR_H__ -#define __RSN_STREAM_SELECTOR_H__ - -#include <gst/gst.h> - -G_BEGIN_DECLS - -#define RSN_TYPE_STREAM_SELECTOR \ - (rsn_stream_selector_get_type()) -#define RSN_STREAM_SELECTOR(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), RSN_TYPE_STREAM_SELECTOR, RsnStreamSelector)) -#define RSN_STREAM_SELECTOR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), RSN_TYPE_STREAM_SELECTOR, RsnStreamSelectorClass)) -#define RSN_IS_STREAM_SELECTOR(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RSN_TYPE_STREAM_SELECTOR)) -#define RSN_IS_STREAM_SELECTOR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), RSN_TYPE_STREAM_SELECTOR)) - -typedef struct _RsnStreamSelector RsnStreamSelector; -typedef struct _RsnStreamSelectorClass RsnStreamSelectorClass; - -struct _RsnStreamSelector { - GstElement element; - - GstPad *srcpad; - - GstPad *active_sinkpad; - guint n_pads; - guint padcount; - - GstSegment segment; - gboolean mark_discont; -}; - -struct _RsnStreamSelectorClass { - GstElementClass parent_class; -}; - -GType rsn_stream_selector_get_type (void); - -G_END_DECLS - -#endif /* __RSN_STREAM_SELECTOR_H__ */ diff --git a/ext/resindvd/rsnwrappedbuffer.c b/ext/resindvd/rsnwrappedbuffer.c deleted file mode 100644 index a5f4c0fd..00000000 --- a/ext/resindvd/rsnwrappedbuffer.c +++ /dev/null @@ -1,121 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net> - * - * 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 <string.h> - -#include <gst/gst.h> - -#include "rsnwrappedbuffer.h" - -GstBuffer * -rsn_wrapped_buffer_new (GstBuffer * buf_to_wrap, GstElement * owner) -{ - GstBuffer *buf; - RsnMetaWrapped *meta; - - g_return_val_if_fail (buf_to_wrap, NULL); - - buf = gst_buffer_new (); - meta = RSN_META_WRAPPED_ADD (buf); - - meta->wrapped_buffer = buf_to_wrap; - meta->owner = gst_object_ref (owner); - - GST_BUFFER_DATA (buf) = GST_BUFFER_DATA (buf_to_wrap); - GST_BUFFER_SIZE (buf) = GST_BUFFER_SIZE (buf_to_wrap); - gst_buffer_copy_metadata (GST_BUFFER (buf), buf_to_wrap, GST_BUFFER_COPY_ALL); - - /* If the wrapped buffer isn't writable, make sure this one isn't either */ - if (!gst_buffer_is_writable (buf_to_wrap)) - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_READONLY); - - return buf; -} - -void -rsn_meta_wrapped_set_owner (RsnMetaWrapped * meta, GstElement * owner) -{ - g_return_if_fail (meta != NULL); - - if (meta->owner) - gst_object_unref (meta->owner); - - if (owner) - gst_object_ref (owner); - - meta->owner = owner; -} - -GstBuffer * -rsn_meta_wrapped_unwrap_and_unref (GstBuffer * wrap_buf, RsnMetaWrapped * meta) -{ - GstBuffer *buf; - gboolean is_readonly; - - g_return_val_if_fail (wrap_buf != NULL, NULL); - g_return_val_if_fail (meta->wrapped_buffer != NULL, NULL); - - buf = gst_buffer_ref (meta->wrapped_buffer); - buf = gst_buffer_make_metadata_writable (buf); - - /* Copy changed metadata back to the wrapped buffer from the wrapper, - * except the the read-only flag and the caps. */ - is_readonly = GST_BUFFER_FLAG_IS_SET (wrap_buf, GST_BUFFER_FLAG_READONLY); - gst_buffer_copy_metadata (buf, GST_BUFFER (wrap_buf), - GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS); - if (!is_readonly) - GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_READONLY); - - gst_buffer_unref (wrap_buf); - - return buf; -} - -static void -rsn_meta_wrapped_init (RsnMetaWrapped * meta, GstBuffer * buffer) -{ - meta->owner = NULL; -} - -static void -rsn_meta_wrapped_free (RsnMetaWrapped * meta, GstBuffer * buffer) -{ - gst_buffer_unref (meta->wrapped_buffer); - if (meta->owner) - gst_object_unref (meta->owner); -} - -const GstMetaInfo * -rsn_meta_wrapped_get_info (void) -{ - static const GstMetaInfo *meta_info = NULL; - - if (meta_info == NULL) { - meta_info = gst_meta_register ("RsnMetaWrapped", "RsnMetaWrapped", - sizeof (RsnMetaWrapped), - (GstMetaInitFunction) rsn_meta_wrapped_init, - (GstMetaFreeFunction) rsn_meta_wrapped_free, - (GstMetaTransformFunction) NULL, - (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL); - } - return meta_info; -} diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in index 9e528f29..664368f6 100644 --- a/ext/rsvg/Makefile.in +++ b/ext/rsvg/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in index 2e6aab66..bd4bb8b1 100644 --- a/ext/rtmp/Makefile.in +++ b/ext/rtmp/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in index b3d0136a..1b3f460a 100644 --- a/ext/schroedinger/Makefile.in +++ b/ext/schroedinger/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c index 9121a5f8..c89ca256 100644 --- a/ext/schroedinger/gstschrodec.c +++ b/ext/schroedinger/gstschrodec.c @@ -264,6 +264,8 @@ parse_sequence_header (GstSchroDec * schro_dec, guint8 * data, int size) GST_DEBUG ("Pixel aspect ratio is %d/%d", state->info.par_n, state->info.par_d); + gst_video_decoder_negotiate (GST_VIDEO_DECODER (schro_dec)); + beach: if (state) gst_video_codec_state_unref (state); diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c index 3b9118c1..8b5c6fc6 100644 --- a/ext/schroedinger/gstschroenc.c +++ b/ext/schroedinger/gstschroenc.c @@ -138,9 +138,12 @@ register_enum_list (const SchroEncoderSetting * setting) enumtypes = g_malloc0 ((n + 1) * sizeof (GEnumValue)); for (i = 0; i < n; i++) { + gchar *nick; + enumtypes[i].value = i; - enumtypes[i].value_name = setting->enum_list[i]; - enumtypes[i].value_nick = setting->enum_list[i]; + nick = g_strdelimit (g_strdup (setting->enum_list[i]), "_", '-'); + enumtypes[i].value_name = g_intern_static_string (nick); + enumtypes[i].value_nick = enumtypes[i].value_name; } typename = g_strdup_printf ("SchroEncoderSettingEnum_%s", setting->name); @@ -171,6 +174,17 @@ gst_schro_enc_class_init (GstSchroEncClass * klass) setting = schro_encoder_get_setting_info (i); + /* we do this by checking downstream caps, and the profile/level selected + * should be read from the output caps and not from properties */ + if (strcmp (setting->name, "force_profile") == 0 + || strcmp (setting->name, "profile") == 0 + || strcmp (setting->name, "level") == 0) + continue; + + /* we configure this based on the input caps */ + if (strcmp (setting->name, "interlaced_coding") == 0) + continue; + switch (setting->type) { case SCHRO_ENCODER_SETTING_TYPE_BOOLEAN: g_object_class_install_property (gobject_class, i + 1, @@ -253,6 +267,89 @@ gst_schro_enc_finalize (GObject * object) G_OBJECT_CLASS (parent_class)->finalize (object); } +static const gchar * +get_profile_name (int profile) +{ + switch (profile) { + case 0: + return "vc2-low-delay"; + case 1: + return "vc2-simple"; + case 2: + return "vc2-main"; + case 8: + return "main"; + default: + break; + } + return "unknown"; +} + +static const gchar * +get_level_name (int level) +{ + switch (level) { + case 0: + return "0"; + case 1: + return "1"; + case 128: + return "128"; + default: + break; + } + /* need to add it to template caps, so return 0 for now */ + GST_WARNING ("unhandled dirac level %u", level); + return "0"; +} + +static void +gst_schro_enc_negotiate_profile (GstSchroEnc * enc) +{ + GstStructure *s; + const gchar *profile; + const gchar *level; + GstCaps *allowed_caps; + + allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (enc)); + + GST_DEBUG_OBJECT (enc, "allowed caps: %" GST_PTR_FORMAT, allowed_caps); + + if (allowed_caps == NULL) + return; + + if (gst_caps_is_empty (allowed_caps) || gst_caps_is_any (allowed_caps)) + goto out; + + allowed_caps = gst_caps_make_writable (allowed_caps); + allowed_caps = gst_caps_fixate (allowed_caps); + s = gst_caps_get_structure (allowed_caps, 0); + + profile = gst_structure_get_string (s, "profile"); + if (profile) { + if (!strcmp (profile, "vc2-low-delay")) { + schro_encoder_setting_set_double (enc->encoder, "force_profile", 1); + } else if (!strcmp (profile, "vc2-simple")) { + schro_encoder_setting_set_double (enc->encoder, "force_profile", 2); + } else if (!strcmp (profile, "vc2-main")) { + schro_encoder_setting_set_double (enc->encoder, "force_profile", 3); + } else if (!strcmp (profile, "main")) { + schro_encoder_setting_set_double (enc->encoder, "force_profile", 4); + } else { + GST_WARNING_OBJECT (enc, "ignoring unknown profile '%s'", profile); + } + } + + level = gst_structure_get_string (s, "level"); + if (level != NULL && strcmp (level, "0") != 0) { + GST_FIXME_OBJECT (enc, "level setting not implemented"); + } + +out: + + gst_caps_unref (allowed_caps); +} + static gboolean gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder, GstVideoCodecState * state) @@ -262,6 +359,8 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder, GstVideoInfo *info = &state->info; GstVideoCodecState *output_state; GstClockTime latency; + GstCaps *out_caps; + int level, profile; GST_DEBUG ("set_output_caps"); @@ -340,6 +439,13 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder, #endif } + if (GST_VIDEO_INFO_IS_INTERLACED (&state->info)) { + schro_enc->video_format->interlaced_coding = 1; + } + + /* See if downstream caps specify profile/level */ + gst_schro_enc_negotiate_profile (schro_enc); + /* Finally set latency */ latency = gst_util_uint64_scale (GST_SECOND, GST_VIDEO_INFO_FPS_D (info) * @@ -359,9 +465,15 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder, schro_enc->granule_offset = ~0; + profile = schro_encoder_setting_get_double (schro_enc->encoder, "profile"); + level = schro_encoder_setting_get_double (schro_enc->encoder, "level"); + + out_caps = gst_caps_new_simple ("video/x-dirac", + "profile", G_TYPE_STRING, get_profile_name (profile), + "level", G_TYPE_STRING, get_level_name (level), NULL); + output_state = - gst_video_encoder_set_output_state (base_video_encoder, - gst_caps_new_empty_simple ("video/x-dirac"), state); + gst_video_encoder_set_output_state (base_video_encoder, out_caps, state); GST_BUFFER_FLAG_SET (seq_header_buffer, GST_BUFFER_FLAG_HEADER); { @@ -424,10 +536,9 @@ gst_schro_enc_set_property (GObject * object, guint prop_id, { GstSchroEnc *src; - g_return_if_fail (GST_IS_SCHRO_ENC (object)); src = GST_SCHRO_ENC (object); - GST_DEBUG ("gst_schro_enc_set_property"); + GST_DEBUG ("%s", pspec->name); if (prop_id >= 1) { const SchroEncoderSetting *setting; @@ -459,7 +570,6 @@ gst_schro_enc_get_property (GObject * object, guint prop_id, GValue * value, { GstSchroEnc *src; - g_return_if_fail (GST_IS_SCHRO_ENC (object)); src = GST_SCHRO_ENC (object); if (prop_id >= 1) { diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in index bedfcb5e..db146803 100644 --- a/ext/sdl/Makefile.in +++ b/ext/sdl/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in index 6cb61a2a..5656784e 100644 --- a/ext/sndfile/Makefile.in +++ b/ext/sndfile/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in index 4bdcd359..71525a4c 100644 --- a/ext/sndio/Makefile.in +++ b/ext/sndio/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in index 567bb97c..ed70938f 100644 --- a/ext/soundtouch/Makefile.in +++ b/ext/soundtouch/Makefile.in @@ -360,6 +360,8 @@ 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@ @@ -367,6 +369,8 @@ 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@ @@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -409,6 +412,10 @@ 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@ @@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc index 0cba53a4..ed76cd27 100644 --- a/ext/soundtouch/gstpitch.cc +++ b/ext/soundtouch/gstpitch.cc @@ -180,7 +180,7 @@ gst_pitch_init (GstPitch * pitch) pitch->out_seg_rate = 1.0; pitch->seg_arate = 1.0; pitch->pitch = 1.0; - pitch->next_buffer_time = 0; + pitch->next_buffer_time = GST_CLOCK_TIME_NONE; pitch->next_buffer_offset = 0; pitch->priv->st->setRate (pitch->rate); @@ -211,7 +211,7 @@ gst_pitch_update_duration (GstPitch * pitch) { GstMessage *m; - m = gst_message_new_duration (GST_OBJECT (pitch), GST_FORMAT_TIME, -1); + m = gst_message_new_duration_changed (GST_OBJECT (pitch)); gst_element_post_message (GST_ELEMENT (pitch), m); } @@ -665,8 +665,6 @@ gst_pitch_src_query (GstPad * pad, GstObject * parent, GstQuery * query) static gboolean gst_pitch_process_segment (GstPitch * pitch, GstEvent ** event) { - GstFormat conv_format; - gint64 next_offset = 0, next_time = 0; gdouble out_seg_rate, our_arate; gfloat stream_time_ratio; GstSegment seg; @@ -715,28 +713,10 @@ gst_pitch_process_segment (GstPitch * pitch, GstEvent ** event) GST_OBJECT_UNLOCK (pitch); seg.start = (gint64) (seg.start / stream_time_ratio); - if (seg.stop != (guint64) -1) + if (seg.stop != (guint64) - 1) seg.stop = (gint64) (seg.stop / stream_time_ratio); seg.time = (gint64) (seg.time / stream_time_ratio); - conv_format = GST_FORMAT_TIME; - if (!gst_pitch_convert (pitch, seg.format, seg.start, &conv_format, &next_time)) { - GST_LOG_OBJECT (pitch->sinkpad, - "could not convert segment start value to time"); - return FALSE; - } - - conv_format = GST_FORMAT_DEFAULT; - if (!gst_pitch_convert (pitch, seg.format, seg.start, &conv_format, - &next_offset)) { - GST_LOG_OBJECT (pitch->sinkpad, - "could not convert segment start value to offset"); - return FALSE; - } - - pitch->next_buffer_time = next_time; - pitch->next_buffer_offset = next_offset; - gst_event_unref (*event); *event = gst_event_new_segment (&seg); @@ -758,7 +738,7 @@ gst_pitch_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_pitch_flush_buffer (pitch, FALSE); pitch->priv->st->clear (); pitch->next_buffer_offset = 0; - pitch->next_buffer_time = 0; + pitch->next_buffer_time = GST_CLOCK_TIME_NONE; pitch->min_latency = pitch->max_latency = 0; break; case GST_EVENT_EOS: @@ -837,13 +817,22 @@ gst_pitch_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) pitch = GST_PITCH (parent); priv = GST_PITCH_GET_PRIVATE (pitch); - gst_object_sync_values (GST_OBJECT (pitch), pitch->next_buffer_time); - timestamp = GST_BUFFER_TIMESTAMP (buffer); + // Remember the first time and corresponding offset + if (!GST_CLOCK_TIME_IS_VALID (pitch->next_buffer_time)) { + GstFormat out_format = GST_FORMAT_DEFAULT; + pitch->next_buffer_time = timestamp; + gst_pitch_convert (pitch, GST_FORMAT_TIME, timestamp, &out_format, + &pitch->next_buffer_offset); + } + + gst_object_sync_values (GST_OBJECT (pitch), pitch->next_buffer_time); + /* push the received samples on the soundtouch buffer */ - GST_LOG_OBJECT (pitch, "incoming buffer (%d samples)", - (gint) (gst_buffer_get_size (buffer) / pitch->sample_size)); + GST_LOG_OBJECT (pitch, "incoming buffer (%d samples) %" GST_TIME_FORMAT, + (gint) (gst_buffer_get_size (buffer) / pitch->sample_size), + GST_TIME_ARGS (timestamp)); if (GST_PITCH_GET_PRIVATE (pitch)->pending_segment) { GstEvent *event = diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in index 3aab3211..d994328e 100644 --- a/ext/spandsp/Makefile.in +++ b/ext/spandsp/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/spandsp/gstspanplc.c b/ext/spandsp/gstspanplc.c index 58edce9f..73a2465b 100644 --- a/ext/spandsp/gstspanplc.c +++ b/ext/spandsp/gstspanplc.c @@ -34,7 +34,9 @@ #include "gstspanplc.h" -GST_BOILERPLATE (GstSpanPlc, gst_span_plc, GstElement, GST_TYPE_ELEMENT); +#include <gst/audio/audio.h> + +G_DEFINE_TYPE (GstSpanPlc, gst_span_plc, GST_TYPE_ELEMENT); GST_DEBUG_CATEGORY_STATIC (gst_span_plc_debug); #define GST_CAT_DEFAULT gst_span_plc_debug @@ -43,51 +45,43 @@ GST_DEBUG_CATEGORY_STATIC (gst_span_plc_debug); static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) BYTE_ORDER, signed = (bool) TRUE, " - "width = (int) 16, depth = (int) 16, " - "rate = (int) [ 1, MAX ], channels = (int) 1") + GST_STATIC_CAPS ("audio/x-raw, format=\"" GST_AUDIO_NE (S16) "\", " + "rate = " GST_AUDIO_RATE_RANGE " , channels = (int) 1") ); static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) BYTE_ORDER, signed = (bool) TRUE, " - "width = (int) 16, depth = (int) 16, " - "rate = (int) [ 1, MAX ], channels = (int) 1") + GST_STATIC_CAPS ("audio/x-raw, format=\"" GST_AUDIO_NE (S16) "\", " + "rate = " GST_AUDIO_RATE_RANGE " , channels = (int) 1") ); static void gst_span_plc_dispose (GObject * object); static GstStateChangeReturn gst_span_plc_change_state (GstElement * element, GstStateChange transition); -static gboolean gst_span_plc_setcaps_sink (GstPad * pad, GstCaps * caps); -static GstFlowReturn gst_span_plc_chain (GstPad * pad, GstBuffer * buf); -static gboolean gst_span_plc_event_sink (GstPad * pad, GstEvent * event); +static void gst_span_plc_setcaps_sink (GstSpanPlc * plc, GstCaps * caps); +static GstFlowReturn gst_span_plc_chain (GstPad * pad, GstObject * parent, + GstBuffer * buf); +static gboolean gst_span_plc_event_sink (GstPad * pad, GstObject * parent, + GstEvent * event); +/* initialize the plugin's class */ static void -gst_span_plc_base_init (gpointer gclass) +gst_span_plc_class_init (GstSpanPlcClass * klass) { - GstElementClass *element_class = (GstElementClass *) gclass; + GObjectClass *gobject_class = (GObjectClass *) klass; + GstElementClass *gstelement_class = (GstElementClass *) klass; - gst_element_class_add_pad_template (element_class, + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); - gst_element_class_add_pad_template (element_class, + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory)); - gst_element_class_set_details_simple (element_class, "SpanDSP PLC", + gst_element_class_set_details_simple (gstelement_class, "SpanDSP PLC", "Filter/Effect/Audio", "Adds packet loss concealment to audio", "Youness Alaoui <youness.alaoui@collabora.co.uk>"); -} - -/* initialize the plugin's class */ -static void -gst_span_plc_class_init (GstSpanPlcClass * klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - GstElementClass *gstelement_class = (GstElementClass *) klass; gobject_class->dispose = gst_span_plc_dispose; @@ -96,27 +90,19 @@ gst_span_plc_class_init (GstSpanPlcClass * klass) GST_DEBUG_CATEGORY_INIT (gst_span_plc_debug, "spanplc", 0, "spanDSP's packet loss concealment"); + } static void -gst_span_plc_init (GstSpanPlc * plc, GstSpanPlcClass * gclass) +gst_span_plc_init (GstSpanPlc * plc) { GST_DEBUG_OBJECT (plc, "init"); plc->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); plc->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); - gst_pad_set_setcaps_function (plc->sinkpad, - GST_DEBUG_FUNCPTR (gst_span_plc_setcaps_sink)); - - gst_pad_set_getcaps_function (plc->srcpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_getcaps_function (plc->sinkpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_chain_function (plc->sinkpad, GST_DEBUG_FUNCPTR (gst_span_plc_chain)); - gst_pad_set_event_function (plc->sinkpad, GST_DEBUG_FUNCPTR (gst_span_plc_event_sink)); @@ -124,7 +110,6 @@ gst_span_plc_init (GstSpanPlc * plc, GstSpanPlcClass * gclass) gst_element_add_pad (GST_ELEMENT (plc), plc->sinkpad); plc->plc_state = NULL; - plc->last_stop = GST_CLOCK_TIME_NONE; GST_DEBUG_OBJECT (plc, "init complete"); } @@ -138,7 +123,7 @@ gst_span_plc_dispose (GObject * object) plc_free (plc->plc_state); plc->plc_state = NULL; - G_OBJECT_CLASS (parent_class)->dispose (object); + G_OBJECT_CLASS (gst_span_plc_parent_class)->dispose (object); } static void @@ -150,7 +135,6 @@ gst_span_plc_flush (GstSpanPlc * plc, gboolean renew) plc->plc_state = plc_init (NULL); else plc->plc_state = NULL; - plc->last_stop = GST_CLOCK_TIME_NONE; } static GstStateChangeReturn @@ -167,7 +151,8 @@ gst_span_plc_change_state (GstElement * element, GstStateChange transition) break; } - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + ret = GST_ELEMENT_CLASS (gst_span_plc_parent_class)->change_state (element, + transition); switch (transition) { case GST_STATE_CHANGE_READY_TO_NULL: @@ -179,122 +164,91 @@ gst_span_plc_change_state (GstElement * element, GstStateChange transition) return ret; } -static gboolean -gst_span_plc_setcaps_sink (GstPad * pad, GstCaps * caps) +static void +gst_span_plc_setcaps_sink (GstSpanPlc * plc, GstCaps * caps) { - GstSpanPlc *plc = GST_SPAN_PLC (gst_pad_get_parent (pad)); GstStructure *s = NULL; - gboolean ret = FALSE; + gint sample_rate; - ret = gst_pad_set_caps (plc->srcpad, caps); s = gst_caps_get_structure (caps, 0); - if (s) { - gst_structure_get_int (s, "rate", &plc->sample_rate); - GST_DEBUG_OBJECT (plc, "setcaps: got sample rate : %d", plc->sample_rate); + if (!s) + return; + + gst_structure_get_int (s, "rate", &sample_rate); + if (sample_rate != plc->sample_rate) { + GST_DEBUG_OBJECT (plc, "setcaps: got sample rate : %d", sample_rate); + plc->sample_rate = sample_rate; + gst_span_plc_flush (plc, TRUE); } - - gst_span_plc_flush (plc, TRUE); - gst_object_unref (plc); - - return ret; } static GstFlowReturn -gst_span_plc_chain (GstPad * pad, GstBuffer * buffer) +gst_span_plc_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - GstSpanPlc *plc = GST_SPAN_PLC (GST_PAD_PARENT (pad)); - GstClockTime buffer_duration; - - if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) - plc->last_stop = GST_BUFFER_TIMESTAMP (buffer); - else - GST_WARNING_OBJECT (plc, "Buffer has no timestamp!"); - - if (GST_BUFFER_DURATION_IS_VALID (buffer)) { - buffer_duration = GST_BUFFER_DURATION (buffer); - } else { - GST_WARNING_OBJECT (plc, "Buffer has no duration!"); - buffer_duration = (GST_BUFFER_SIZE (buffer) / - (plc->sample_rate * sizeof (guint16))) * GST_SECOND; - GST_DEBUG_OBJECT (plc, "Buffer duration : %" GST_TIME_FORMAT, - GST_TIME_ARGS (buffer_duration)); - } - - plc->last_stop += buffer_duration; + GstSpanPlc *plc = GST_SPAN_PLC (parent); + GstMapInfo map; if (plc->plc_state->missing_samples != 0) buffer = gst_buffer_make_writable (buffer); - plc_rx (plc->plc_state, (int16_t *) GST_BUFFER_DATA (buffer), - GST_BUFFER_SIZE (buffer) / 2); + gst_buffer_map (buffer, &map, GST_MAP_READWRITE); + plc_rx (plc->plc_state, (int16_t *) map.data, map.size / 2); + gst_buffer_unmap (buffer, &map); return gst_pad_push (plc->srcpad, buffer); } static void -gst_span_plc_send_fillin (GstSpanPlc * plc, GstClockTime duration) +gst_span_plc_send_fillin (GstSpanPlc * plc, GstClockTime timestamp, + GstClockTime duration) { guint buf_size; GstBuffer *buffer = NULL; + GstMapInfo map; buf_size = ((float) duration / GST_SECOND) * plc->sample_rate; buf_size *= sizeof (guint16); buffer = gst_buffer_new_and_alloc (buf_size); GST_DEBUG_OBJECT (plc, "Missing packet of %" GST_TIME_FORMAT " == %d bytes", GST_TIME_ARGS (duration), buf_size); - plc_fillin (plc->plc_state, (int16_t *) GST_BUFFER_DATA (buffer), - GST_BUFFER_SIZE (buffer) / 2); - GST_BUFFER_TIMESTAMP (buffer) = plc->last_stop; + gst_buffer_map (buffer, &map, GST_MAP_READWRITE); + plc_fillin (plc->plc_state, (int16_t *) map.data, map.size / 2); + gst_buffer_unmap (buffer, &map); + GST_BUFFER_PTS (buffer) = timestamp; GST_BUFFER_DURATION (buffer) = duration; - gst_buffer_set_caps (buffer, GST_PAD_CAPS (plc->srcpad)); gst_pad_push (plc->srcpad, buffer); } static gboolean -gst_span_plc_event_sink (GstPad * pad, GstEvent * event) +gst_span_plc_event_sink (GstPad * pad, GstObject * parent, GstEvent * event) { - gboolean ret = FALSE; - GstSpanPlc *plc = GST_SPAN_PLC (gst_pad_get_parent (pad)); + GstSpanPlc *plc = GST_SPAN_PLC (parent); GST_DEBUG_OBJECT (plc, "received event %s", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_NEWSEGMENT: + case GST_EVENT_CAPS: { - GstFormat format; - gdouble rate; - gint64 start, stop, time; - gboolean update; - - gst_event_parse_new_segment (event, &update, &rate, &format, &start, - &stop, &time); - - if (format != GST_FORMAT_TIME) - goto newseg_wrong_format; - - if (update) { - /* time progressed without data, see if we can fill the gap with - * some concealment data */ - if (plc->last_stop < start) - gst_span_plc_send_fillin (plc, start - plc->last_stop); - } - plc->last_stop = start; + GstCaps *caps; + gst_event_parse_caps (event, &caps); + gst_span_plc_setcaps_sink (plc, caps); break; } - case GST_EVENT_FLUSH_START: + case GST_EVENT_GAP: + { + GstClockTime timestamp; + GstClockTime duration; + + gst_event_parse_gap (event, ×tamp, &duration); + gst_span_plc_send_fillin (plc, timestamp, duration); + gst_event_unref (event); + return TRUE; + } + case GST_EVENT_FLUSH_STOP: gst_span_plc_flush (plc, TRUE); break; default: break; } - ret = gst_pad_push_event (plc->srcpad, event); - - gst_object_unref (plc); - return ret; -newseg_wrong_format: - { - GST_DEBUG_OBJECT (plc, "received non TIME newsegment"); - gst_object_unref (plc); - return FALSE; - } + return gst_pad_push_event (plc->srcpad, event); } diff --git a/ext/spandsp/gstspanplc.h b/ext/spandsp/gstspanplc.h index 86c10ac2..f2c60787 100644 --- a/ext/spandsp/gstspanplc.h +++ b/ext/spandsp/gstspanplc.h @@ -44,7 +44,6 @@ struct _GstSpanPlc /* <private> */ plc_state_t *plc_state; - GstClockTime last_stop; gint sample_rate; }; diff --git a/ext/spc/Makefile.am b/ext/spc/Makefile.am index 067ea669..5fe861c0 100644 --- a/ext/spc/Makefile.am +++ b/ext/spc/Makefile.am @@ -2,7 +2,7 @@ plugin_LTLIBRARIES = libgstspc.la libgstspc_la_SOURCES = gstspc.c tag.c -libgstspc_la_CFLAGS = $(GST_CFLAGS) $(SPC_CFLAGS) +libgstspc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(SPC_CFLAGS) libgstspc_la_LIBADD = $(GST_LIBS) $(SPC_LIBS) libgstspc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstspc_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in index eaeae70b..8ddfd9a4 100644 --- a/ext/spc/Makefile.in +++ b/ext/spc/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -604,7 +612,7 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstspc.la libgstspc_la_SOURCES = gstspc.c tag.c -libgstspc_la_CFLAGS = $(GST_CFLAGS) $(SPC_CFLAGS) +libgstspc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(SPC_CFLAGS) libgstspc_la_LIBADD = $(GST_LIBS) $(SPC_LIBS) libgstspc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstspc_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/ext/spc/gstspc.c b/ext/spc/gstspc.c index 2ea4ad80..8d470a48 100644 --- a/ext/spc/gstspc.c +++ b/ext/spc/gstspc.c @@ -23,6 +23,7 @@ #endif #include "gstspc.h" +#include <gst/audio/audio.h> #include <string.h> #include <glib/gprintf.h> @@ -34,18 +35,23 @@ GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) BYTE_ORDER, " - "signed = (boolean) TRUE, " - "width = (int) 16, " - "depth = (int) 16, " "rate = (int) 32000, " "channels = (int) 2")); - -GST_BOILERPLATE (GstSpcDec, gst_spc_dec, GstElement, GST_TYPE_ELEMENT); - -static GstFlowReturn gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer); -static gboolean gst_spc_dec_sink_event (GstPad * pad, GstEvent * event); -static gboolean gst_spc_dec_src_event (GstPad * pad, GstEvent * event); -static gboolean gst_spc_dec_src_query (GstPad * pad, GstQuery * query); + GST_STATIC_CAPS ("audio/x-raw, " + "format = (string) " GST_AUDIO_NE (S16) ", " + "layout = (string) interleaved, " + "rate = (int) 32000, " "channels = (int) 2")); + + +#define gst_spc_dec_parent_class parent_class +G_DEFINE_TYPE (GstSpcDec, gst_spc_dec, GST_TYPE_ELEMENT); + +static GstFlowReturn gst_spc_dec_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); +static gboolean gst_spc_dec_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_spc_dec_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_spc_dec_src_query (GstPad * pad, GstObject * parent, + GstQuery * query); static GstStateChangeReturn gst_spc_dec_change_state (GstElement * element, GstStateChange transition); static void spc_play (GstPad * pad); @@ -55,53 +61,20 @@ static gboolean spc_setup (GstSpcDec * spc); static gboolean spc_negotiate (GstSpcDec * spc) { - GstCaps *allowed, *caps; - GstStructure *structure; - gint width = 16, depth = 16; - gboolean sign; - int rate = 32000; - int channels = 2; - - allowed = gst_pad_get_allowed_caps (spc->srcpad); - if (!allowed) { - GST_DEBUG_OBJECT (spc, "couldn't get allowed caps"); - return FALSE; - } - - GST_DEBUG_OBJECT (spc, "allowed caps: %" GST_PTR_FORMAT, allowed); + GstCaps *caps; - structure = gst_caps_get_structure (allowed, 0); - gst_structure_get_int (structure, "width", &width); - gst_structure_get_int (structure, "depth", &depth); - - if (width && depth && width != depth) { - GST_DEBUG_OBJECT (spc, "width %d and depth %d are different", width, depth); - gst_caps_unref (allowed); - return FALSE; - } - - gst_structure_get_boolean (structure, "signed", &sign); - gst_structure_get_int (structure, "rate", &rate); - gst_structure_get_int (structure, "channels", &channels); - - caps = gst_caps_new_simple ("audio/x-raw-int", - "endianness", G_TYPE_INT, G_BYTE_ORDER, - "signed", G_TYPE_BOOLEAN, TRUE, - "width", G_TYPE_INT, width, - "depth", G_TYPE_INT, depth, - "rate", G_TYPE_INT, rate, "channels", G_TYPE_INT, channels, NULL); + caps = gst_pad_get_pad_template_caps (spc->srcpad); gst_pad_set_caps (spc->srcpad, caps); - gst_caps_unref (caps); - gst_caps_unref (allowed); return TRUE; } static void -gst_spc_dec_base_init (gpointer g_class) +gst_spc_dec_class_init (GstSpcDecClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstElementClass *element_class = (GstElementClass *) klass; + GObjectClass *gobject_class = (GObjectClass *) klass; gst_element_class_set_details_simple (element_class, "OpenSPC SPC decoder", "Codec/Audio/Decoder", @@ -112,33 +85,13 @@ gst_spc_dec_base_init (gpointer g_class) gst_static_pad_template_get (&sink_factory)); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&src_factory)); -} - -static void -gst_spc_dec_class_init (GstSpcDecClass * klass) -{ - GstElementClass *element_class = (GstElementClass *) klass; - GObjectClass *gobject_class = (GObjectClass *) klass; element_class->change_state = GST_DEBUG_FUNCPTR (gst_spc_dec_change_state); gobject_class->dispose = gst_spc_dec_dispose; } -static const GstQueryType * -gst_spc_dec_src_query_type (GstPad * pad) -{ - static const GstQueryType query_types[] = { - GST_QUERY_DURATION, - GST_QUERY_POSITION, - (GstQueryType) 0 - }; - - return query_types; -} - - static void -gst_spc_dec_init (GstSpcDec * spc, GstSpcDecClass * klass) +gst_spc_dec_init (GstSpcDec * spc) { spc->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink"); /* gst_pad_set_query_function (spc->sinkpad, NULL); */ @@ -149,7 +102,6 @@ gst_spc_dec_init (GstSpcDec * spc, GstSpcDecClass * klass) spc->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); gst_pad_set_event_function (spc->srcpad, gst_spc_dec_src_event); gst_pad_set_query_function (spc->srcpad, gst_spc_dec_src_query); - gst_pad_set_query_type_function (spc->srcpad, gst_spc_dec_src_query_type); gst_pad_use_fixed_caps (spc->srcpad); gst_element_add_pad (GST_ELEMENT (spc), spc->srcpad); @@ -174,9 +126,9 @@ gst_spc_dec_dispose (GObject * object) } static GstFlowReturn -gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer) +gst_spc_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad)); + GstSpcDec *spc = GST_SPC_DEC (parent); if (spc->buf) { spc->buf = gst_buffer_append (spc->buf, buffer); @@ -184,15 +136,13 @@ gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer) spc->buf = buffer; } - gst_object_unref (spc); - return GST_FLOW_OK; } static gboolean -gst_spc_dec_sink_event (GstPad * pad, GstEvent * event) +gst_spc_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad)); + GstSpcDec *spc = GST_SPC_DEC (parent); gboolean result = TRUE; gboolean forward = FALSE; @@ -215,8 +165,6 @@ gst_spc_dec_sink_event (GstPad * pad, GstEvent * event) else gst_event_unref (event); - gst_object_unref (spc); - return result; } @@ -253,9 +201,9 @@ gst_spc_fadeout (GstSpcDec * spc) static gboolean -gst_spc_dec_src_event (GstPad * pad, GstEvent * event) +gst_spc_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad)); + GstSpcDec *spc = GST_SPC_DEC (parent); gboolean result = FALSE; switch (GST_EVENT_TYPE (event)) { @@ -285,6 +233,7 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event) stop = GST_CLOCK_TIME_NONE; if (start_type == GST_SEEK_TYPE_SET) { + GstSegment seg; guint64 cur = gst_util_uint64_scale (spc->byte_pos, GST_SECOND, 32000 * 2 * 2); guint64 dest = (guint64) start; @@ -310,14 +259,18 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event) } if (flush) { - gst_pad_push_event (spc->srcpad, gst_event_new_flush_stop ()); + gst_pad_push_event (spc->srcpad, gst_event_new_flush_stop (TRUE)); } if (stop == GST_CLOCK_TIME_NONE) stop = (guint64) (gst_spc_duration (spc) + gst_spc_fadeout (spc)); - gst_pad_push_event (spc->srcpad, gst_event_new_new_segment (FALSE, rate, - GST_FORMAT_TIME, dest, stop, dest)); + gst_segment_init (&seg, GST_FORMAT_TIME); + seg.rate = rate; + seg.start = dest; + seg.stop = stop; + seg.time = dest; + gst_pad_push_event (spc->srcpad, gst_event_new_segment (&seg)); /* spc->byte_pos += OSPC_Run(-1, NULL, (unsigned int) (gst_util_uint64_scale(dest - cur, 32000*2*2, GST_SECOND))); */ spc->seekpoint = @@ -336,16 +289,13 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event) break; } - gst_event_unref (event); - gst_object_unref (spc); - return result; } static gboolean -gst_spc_dec_src_query (GstPad * pad, GstQuery * query) +gst_spc_dec_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { - GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad)); + GstSpcDec *spc = GST_SPC_DEC (parent); gboolean result = TRUE; switch (GST_QUERY_TYPE (query)) { @@ -377,12 +327,10 @@ gst_spc_dec_src_query (GstPad * pad, GstQuery * query) break; } default: - result = gst_pad_query_default (pad, query); + result = gst_pad_query_default (pad, parent, query); break; } - gst_object_unref (spc); - return result; } @@ -394,17 +342,21 @@ spc_play (GstPad * pad) GstBuffer *out; gboolean seeking = spc->seeking; gint64 duration, fade, end, position; + GstMapInfo map; if (!seeking) { out = gst_buffer_new_and_alloc (1600 * 4); - gst_buffer_set_caps (out, GST_PAD_CAPS (pad)); GST_BUFFER_TIMESTAMP (out) = (gint64) gst_util_uint64_scale ((guint64) spc->byte_pos, GST_SECOND, 32000 * 2 * 2); - spc->byte_pos += OSPC_Run (-1, (short *) GST_BUFFER_DATA (out), 1600 * 4); + gst_buffer_map (out, &map, GST_MAP_WRITE); + spc->byte_pos += OSPC_Run (-1, (short *) map.data, 1600 * 4); + gst_buffer_unmap (out, &map); } else { if (spc->seekpoint < spc->byte_pos) { - OSPC_Init (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf)); + gst_buffer_map (spc->buf, &map, GST_MAP_WRITE); + OSPC_Init (map.data, map.size); + gst_buffer_unmap (spc->buf, &map); spc->byte_pos = 0; } spc->byte_pos += OSPC_Run (-1, NULL, 1600 * 4); @@ -412,7 +364,6 @@ spc_play (GstPad * pad) spc->seeking = FALSE; } out = gst_buffer_new (); - gst_buffer_set_caps (out, GST_PAD_CAPS (pad)); } duration = gst_spc_duration (spc); @@ -423,11 +374,15 @@ spc_play (GstPad * pad) 32000 * 2 * 2); if (position >= duration) { - gint16 *data = (gint16 *) GST_BUFFER_DATA (out); - guint32 size = GST_BUFFER_SIZE (out) / sizeof (gint16); + gint16 *data; + guint32 size; unsigned int i; + gint64 num; - gint64 num = (fade - (position - duration)); + gst_buffer_map (out, &map, GST_MAP_WRITE); + data = (gint16 *) map.data; + size = map.size / sizeof (gint16); + num = (fade - (position - duration)); for (i = 0; i < size; i++) { /* Apply a parabolic volume envelope */ @@ -441,8 +396,7 @@ spc_play (GstPad * pad) gst_pad_pause_task (pad); - if (flow_return <= GST_FLOW_UNEXPECTED - || flow_return == GST_FLOW_NOT_LINKED) { + if (flow_return <= GST_FLOW_EOS || flow_return == GST_FLOW_NOT_LINKED) { gst_pad_push_event (pad, gst_event_new_eos ()); } } @@ -463,6 +417,8 @@ spc_setup (GstSpcDec * spc) spc_tag_info *info; GstTagList *taglist; guint64 total_duration; + GstSegment seg; + GstMapInfo map; if (!spc->buf || !spc_negotiate (spc)) { return FALSE; @@ -470,10 +426,10 @@ spc_setup (GstSpcDec * spc) info = &(spc->tag_info); - spc_tag_get_info (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf), - info); + gst_buffer_map (spc->buf, &map, GST_MAP_READ); + spc_tag_get_info (map.data, map.size, info); - taglist = gst_tag_list_new (); + taglist = gst_tag_list_new_empty (); if (info->title) gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE, @@ -523,17 +479,19 @@ spc_setup (GstSpcDec * spc) GST_TAG_DURATION, total_duration, GST_TAG_GENRE, "Game", GST_TAG_CODEC, "SPC700", NULL); - gst_element_found_tags_for_pad (GST_ELEMENT (spc), spc->srcpad, taglist); + gst_pad_push_event (spc->srcpad, gst_event_new_tag (taglist)); /* spc_tag_info_free(&info); */ - if (OSPC_Init (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf)) != 0) { + if (OSPC_Init (map.data, map.size) != 0) { + gst_buffer_unmap (spc->buf, &map); return FALSE; } + gst_buffer_unmap (spc->buf, &map); - gst_pad_push_event (spc->srcpad, gst_event_new_new_segment (FALSE, 1.0, - GST_FORMAT_TIME, 0, -1, 0)); + gst_segment_init (&seg, GST_FORMAT_TIME); + gst_pad_push_event (spc->srcpad, gst_event_new_segment (&seg)); gst_pad_start_task (spc->srcpad, (GstTaskFunction) spc_play, spc->srcpad, NULL); @@ -565,7 +523,9 @@ gst_spc_dec_change_state (GstElement * element, GstStateChange transition) break; } - result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + result = + GST_ELEMENT_CLASS (gst_spc_dec_parent_class)->change_state (element, + transition); if (result == GST_STATE_CHANGE_FAILURE) return result; diff --git a/ext/spc/tag.c b/ext/spc/tag.c index 41ce812f..48c19d34 100644 --- a/ext/spc/tag.c +++ b/ext/spc/tag.c @@ -16,16 +16,10 @@ * Boston, MA 02111-1307, USA. */ -#include <glib/gstring.h> -#include <glib/gtypes.h> -#include <glib/gmem.h> -#include <glib/gprintf.h> - #include <tag.h> #include <string.h> #include <stdlib.h> - #define EXTENDED_OFFSET 0x10200 #define EXTENDED_MAGIC ((guint32) ('x' << 0 | 'i' << 8 | 'd' << 16 | '6' << 24)) diff --git a/ext/spc/tag.h b/ext/spc/tag.h index 5b795893..def76453 100644 --- a/ext/spc/tag.h +++ b/ext/spc/tag.h @@ -16,7 +16,6 @@ * Boston, MA 02111-1307, USA. */ -#include <glib/gtypes.h> #include <glib.h> typedef struct diff --git a/ext/swfdec/Makefile.in b/ext/swfdec/Makefile.in index ce09ac7c..a92281b3 100644 --- a/ext/swfdec/Makefile.in +++ b/ext/swfdec/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in index 25c0dc72..bd10cd33 100644 --- a/ext/teletextdec/Makefile.in +++ b/ext/teletextdec/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in index 00c2b0b1..6628213e 100644 --- a/ext/timidity/Makefile.in +++ b/ext/timidity/Makefile.in @@ -360,6 +360,8 @@ 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@ @@ -367,6 +369,8 @@ 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@ @@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -409,6 +412,10 @@ 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@ @@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in index c83b90bf..885b838f 100644 --- a/ext/voaacenc/Makefile.in +++ b/ext/voaacenc/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in index 5d19c68d..3b2908b2 100644 --- a/ext/voamrwbenc/Makefile.in +++ b/ext/voamrwbenc/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/vp8/Makefile.am b/ext/vp8/Makefile.am index 09b8d5c0..3b32713a 100644 --- a/ext/vp8/Makefile.am +++ b/ext/vp8/Makefile.am @@ -11,6 +11,7 @@ libgstvp8_la_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) \ + $(VPX_CFLAGS) \ -DGST_USE_UNSTABLE_API libgstvp8_la_LIBADD = \ $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \ diff --git a/ext/vp8/Makefile.in b/ext/vp8/Makefile.in index e2770d78..0323df39 100644 --- a/ext/vp8/Makefile.in +++ b/ext/vp8/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -620,6 +628,7 @@ libgstvp8_la_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) \ $(GST_CFLAGS) \ + $(VPX_CFLAGS) \ -DGST_USE_UNSTABLE_API libgstvp8_la_LIBADD = \ diff --git a/ext/vp8/gstvp8dec.c b/ext/vp8/gstvp8dec.c index 9eb1ca36..98ef61cf 100644 --- a/ext/vp8/gstvp8dec.c +++ b/ext/vp8/gstvp8dec.c @@ -54,10 +54,15 @@ GST_DEBUG_CATEGORY_STATIC (gst_vp8dec_debug); #define GST_CAT_DEFAULT gst_vp8dec_debug +#ifndef HAVE_VP8_MFQE +#define VP8_MFQE (1<<10) +#endif + #define DEFAULT_POST_PROCESSING FALSE -#define DEFAULT_POST_PROCESSING_FLAGS (VP8_DEBLOCK | VP8_DEMACROBLOCK) +#define DEFAULT_POST_PROCESSING_FLAGS (VP8_DEBLOCK | VP8_DEMACROBLOCK | VP8_MFQE) #define DEFAULT_DEBLOCKING_LEVEL 4 #define DEFAULT_NOISE_LEVEL 0 +#define DEFAULT_THREADS 1 enum { @@ -65,7 +70,8 @@ enum PROP_POST_PROCESSING, PROP_POST_PROCESSING_FLAGS, PROP_DEBLOCKING_LEVEL, - PROP_NOISE_LEVEL + PROP_NOISE_LEVEL, + PROP_THREADS }; #define C_FLAGS(v) ((guint) v) @@ -77,6 +83,7 @@ gst_vp8_dec_post_processing_flags_get_type (void) {C_FLAGS (VP8_DEBLOCK), "Deblock", "deblock"}, {C_FLAGS (VP8_DEMACROBLOCK), "Demacroblock", "demacroblock"}, {C_FLAGS (VP8_ADDNOISE), "Add noise", "addnoise"}, + {C_FLAGS (VP8_MFQE), "Multi-frame quality enhancement", "mfqe"}, {0, NULL, NULL} }; static volatile GType id = 0; @@ -163,6 +170,11 @@ gst_vp8_dec_class_init (GstVP8DecClass * klass) 0, 16, DEFAULT_NOISE_LEVEL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_THREADS, + g_param_spec_uint ("threads", "Max Threads", + "Maximum number of decoding threads", + 1, 16, DEFAULT_THREADS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_vp8_dec_src_template)); gst_element_class_add_pad_template (element_class, @@ -221,6 +233,9 @@ gst_vp8_dec_set_property (GObject * object, guint prop_id, case PROP_NOISE_LEVEL: dec->noise_level = g_value_get_uint (value); break; + case PROP_THREADS: + dec->threads = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -249,6 +264,9 @@ gst_vp8_dec_get_property (GObject * object, guint prop_id, GValue * value, case PROP_NOISE_LEVEL: g_value_set_uint (value, dec->noise_level); break; + case PROP_THREADS: + g_value_set_uint (value, dec->threads); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -369,11 +387,13 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame) int flags = 0; vpx_codec_stream_info_t stream_info; vpx_codec_caps_t caps; + vpx_codec_dec_cfg_t cfg; GstVideoCodecState *state = dec->input_state; vpx_codec_err_t status; GstMapInfo minfo; memset (&stream_info, 0, sizeof (stream_info)); + memset (&cfg, 0, sizeof (cfg)); stream_info.sz = sizeof (stream_info); if (!gst_buffer_map (frame->input_buffer, &minfo, GST_MAP_READ)) { @@ -396,8 +416,13 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame) dec->output_state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (dec), GST_VIDEO_FORMAT_I420, stream_info.w, stream_info.h, state); + gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec)); gst_vp8_dec_send_tags (dec); + cfg.w = stream_info.w; + cfg.h = stream_info.h; + cfg.threads = dec->threads; + caps = vpx_codec_get_caps (&vpx_codec_vp8_dx_algo); if (dec->post_processing) { @@ -409,7 +434,7 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame) } status = - vpx_codec_dec_init (&dec->decoder, &vpx_codec_vp8_dx_algo, NULL, flags); + vpx_codec_dec_init (&dec->decoder, &vpx_codec_vp8_dx_algo, &cfg, flags); if (status != VPX_CODEC_OK) { GST_ELEMENT_ERROR (dec, LIBRARY, INIT, ("Failed to initialize VP8 decoder"), ("%s", @@ -420,7 +445,11 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame) if ((caps & VPX_CODEC_CAP_POSTPROC) && dec->post_processing) { vp8_postproc_cfg_t pp_cfg = { 0, }; +#ifndef HAVE_VP8_MFQE + pp_cfg.post_proc_flag = (dec->post_processing_flags & (~VP8_MFQE)); +#else pp_cfg.post_proc_flag = dec->post_processing_flags; +#endif pp_cfg.deblocking_level = dec->deblocking_level; pp_cfg.noise_level = dec->noise_level; diff --git a/ext/vp8/gstvp8dec.h b/ext/vp8/gstvp8dec.h index 09842675..c2aaebc8 100644 --- a/ext/vp8/gstvp8dec.h +++ b/ext/vp8/gstvp8dec.h @@ -66,6 +66,7 @@ struct _GstVP8Dec enum vp8_postproc_level post_processing_flags; gint deblocking_level; gint noise_level; + gint threads; GstVideoCodecState *input_state; GstVideoCodecState *output_state; diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c index 78f97bf3..f1549ca8 100644 --- a/ext/vp8/gstvp8enc.c +++ b/ext/vp8/gstvp8enc.c @@ -1050,6 +1050,10 @@ gst_vp8_enc_buffer_to_image (GstVP8Enc * enc, GstVideoFrame * frame) image->planes[VPX_PLANE_U] = GST_VIDEO_FRAME_COMP_DATA (frame, 1); image->planes[VPX_PLANE_V] = GST_VIDEO_FRAME_COMP_DATA (frame, 2); + image->stride[VPX_PLANE_Y] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0); + image->stride[VPX_PLANE_U] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1); + image->stride[VPX_PLANE_V] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2); + return image; } diff --git a/ext/wayland/Makefile.am b/ext/wayland/Makefile.am index e346b4c6..dfdcf210 100644 --- a/ext/wayland/Makefile.am +++ b/ext/wayland/Makefile.am @@ -1,6 +1,6 @@ plugin_LTLIBRARIES = libgstwaylandsink.la -libgstwaylandsink_la_SOURCES = gstwaylandsink.c +libgstwaylandsink_la_SOURCES = gstwaylandsink.c waylandpool.c libgstwaylandsink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \ $(WAYLAND_CFLAGS) libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ @@ -9,4 +9,4 @@ libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstwaylandsink_la_LIBTOOLFLAGS = --tag=disable-static -noinst_HEADERS = gstwaylandsink.h +noinst_HEADERS = gstwaylandsink.h waylandpool.h diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in index cfa348c9..19e5e342 100644 --- a/ext/wayland/Makefile.in +++ b/ext/wayland/Makefile.in @@ -130,7 +130,8 @@ am__DEPENDENCIES_1 = libgstwaylandsink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_libgstwaylandsink_la_OBJECTS = \ - libgstwaylandsink_la-gstwaylandsink.lo + libgstwaylandsink_la-gstwaylandsink.lo \ + libgstwaylandsink_la-waylandpool.lo libgstwaylandsink_la_OBJECTS = $(am_libgstwaylandsink_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -342,6 +343,8 @@ 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@ @@ -349,6 +352,8 @@ 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@ @@ -363,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +395,10 @@ 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@ @@ -517,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -604,7 +613,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstwaylandsink.la -libgstwaylandsink_la_SOURCES = gstwaylandsink.c +libgstwaylandsink_la_SOURCES = gstwaylandsink.c waylandpool.c libgstwaylandsink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \ $(WAYLAND_CFLAGS) @@ -614,7 +623,7 @@ libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstwaylandsink_la_LIBTOOLFLAGS = --tag=disable-static -noinst_HEADERS = gstwaylandsink.h +noinst_HEADERS = gstwaylandsink.h waylandpool.h all: all-am .SUFFIXES: @@ -691,6 +700,7 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstwaylandsink_la-gstwaylandsink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstwaylandsink_la-waylandpool.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -720,6 +730,13 @@ libgstwaylandsink_la-gstwaylandsink.lo: gstwaylandsink.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -c -o libgstwaylandsink_la-gstwaylandsink.lo `test -f 'gstwaylandsink.c' || echo '$(srcdir)/'`gstwaylandsink.c +libgstwaylandsink_la-waylandpool.lo: waylandpool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -MT libgstwaylandsink_la-waylandpool.lo -MD -MP -MF $(DEPDIR)/libgstwaylandsink_la-waylandpool.Tpo -c -o libgstwaylandsink_la-waylandpool.lo `test -f 'waylandpool.c' || echo '$(srcdir)/'`waylandpool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstwaylandsink_la-waylandpool.Tpo $(DEPDIR)/libgstwaylandsink_la-waylandpool.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='waylandpool.c' object='libgstwaylandsink_la-waylandpool.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 $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -c -o libgstwaylandsink_la-waylandpool.lo `test -f 'waylandpool.c' || echo '$(srcdir)/'`waylandpool.c + mostlyclean-libtool: -rm -f *.lo diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c index bfe68026..32b695d7 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c @@ -1,5 +1,4 @@ -/* - * GStreamer Wayland video sink +/* GStreamer Wayland video sink * * Copyright (C) 2011 Intel Corporation * Copyright (C) 2011 Sreerenj Balachandran <sreerenj.balachandran@intel.com> @@ -17,7 +16,8 @@ * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. */ /** @@ -46,7 +46,6 @@ enum { SIGNAL_0, - SIGNAL_FRAME_READY, LAST_SIGNAL }; @@ -72,44 +71,6 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", #define gst_wayland_sink_parent_class parent_class G_DEFINE_TYPE (GstWaylandSink, gst_wayland_sink, GST_TYPE_VIDEO_SINK); -/* wl metadata */ -GType -gst_wl_meta_api_get_type (void) -{ - static volatile GType type; - static const gchar *tags[] = - { "memory", "size", "colorspace", "orientation", NULL }; - - if (g_once_init_enter (&type)) { - GType _type = gst_meta_api_type_register ("GstWlMetaAPI", tags); - g_once_init_leave (&type, _type); - } - return type; -} - -static void -gst_wl_meta_free (GstWlMeta * meta, GstBuffer * buffer) -{ - gst_object_unref (meta->sink); - munmap (meta->data, meta->size); - wl_buffer_destroy (meta->wbuffer); -} - -const GstMetaInfo * -gst_wl_meta_get_info (void) -{ - static const GstMetaInfo *wl_meta_info = NULL; - - if (wl_meta_info == NULL) { - wl_meta_info = - gst_meta_register (GST_WL_META_API_TYPE, "GstWlMeta", - sizeof (GstWlMeta), (GstMetaInitFunction) NULL, - (GstMetaFreeFunction) gst_wl_meta_free, - (GstMetaTransformFunction) NULL); - } - return wl_meta_info; -} - static void gst_wayland_sink_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void gst_wayland_sink_set_property (GObject * object, @@ -122,6 +83,8 @@ static gboolean gst_wayland_sink_start (GstBaseSink * bsink); static gboolean gst_wayland_sink_stop (GstBaseSink * bsink); static gboolean gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer); +static gboolean +gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query); static gboolean gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer); @@ -129,9 +92,11 @@ 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 redraw (void *data, struct wl_callback *callback, uint32_t time); +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); static void gst_wayland_sink_class_init (GstWaylandSinkClass * klass) @@ -161,6 +126,8 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_wayland_sink_start); gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_wayland_sink_stop); gstbasesink_class->preroll = GST_DEBUG_FUNCPTR (gst_wayland_sink_preroll); + gstbasesink_class->propose_allocation = + GST_DEBUG_FUNCPTR (gst_wayland_sink_propose_allocation); gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_wayland_sink_render); g_object_class_install_property (gobject_class, PROP_WAYLAND_DISPLAY, @@ -172,9 +139,10 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) static void gst_wayland_sink_init (GstWaylandSink * sink) { - sink->render_busy = FALSE; sink->display = NULL; sink->window = NULL; + sink->shm_pool = NULL; + sink->pool = NULL; g_mutex_init (&sink->wayland_lock); } @@ -224,21 +192,37 @@ destroy_display (struct display *display) wl_compositor_destroy (display->compositor); wl_display_flush (display->display); - wl_display_destroy (display->display); + wl_display_disconnect (display->display); free (display); } static void destroy_window (struct window *window) { + if (window->callback) + wl_callback_destroy (window->callback); + + if (window->buffer) + wl_buffer_destroy (window->buffer); + if (window->shell_surface) wl_shell_surface_destroy (window->shell_surface); + if (window->surface) wl_surface_destroy (window->surface); + free (window); } static void +shm_pool_destroy (struct shm_pool *pool) +{ + munmap (pool->data, pool->size); + wl_shm_pool_destroy (pool->pool); + free (pool); +} + +static void gst_wayland_sink_finalize (GObject * object) { GstWaylandSink *sink = GST_WAYLAND_SINK (object); @@ -249,6 +233,8 @@ gst_wayland_sink_finalize (GObject * object) destroy_window (sink->window); if (sink->display) destroy_display (sink->display); + if (sink->shm_pool) + shm_pool_destroy (sink->shm_pool); g_mutex_clear (&sink->wayland_lock); @@ -258,7 +244,21 @@ gst_wayland_sink_finalize (GObject * object) static GstCaps * gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) { - return gst_static_pad_template_get_caps (&sink_template); + GstWaylandSink *sink; + GstCaps *caps; + + sink = GST_WAYLAND_SINK (bsink); + + caps = gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (sink)); + if (filter) { + GstCaps *intersection; + + intersection = + gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST); + gst_caps_unref (caps); + caps = intersection; + } + return caps; } static int @@ -307,7 +307,11 @@ create_display (void) display = malloc (sizeof *display); display->display = wl_display_connect (NULL); - assert (display->display); + + if (display->display == NULL) { + free (display); + return NULL; + } wl_display_add_global_listener (display->display, display_handle_global, display); @@ -325,93 +329,85 @@ create_display (void) return display; } -static GstBuffer * -wayland_buffer_create (GstWaylandSink * sink) +static gboolean +gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) { - char filename[1024]; - int fd, size, stride; - static void *data; - static int init = 0; - GstBuffer *buffer; - GstWlMeta *wmeta; + GstWaylandSink *sink = GST_WAYLAND_SINK (bsink); + GstBufferPool *newpool, *oldpool; + GstVideoInfo info; + GstStructure *structure; + static GstAllocationParams params = { 0, 0, 0, 15, }; + guint size; - GST_DEBUG_OBJECT (sink, "Creating wayland-shm buffers"); + sink = GST_WAYLAND_SINK (bsink); - snprintf (filename, 256, "%s-%d-%s", "/tmp/wayland-shm", init++, "XXXXXX"); + GST_LOG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps); - fd = mkstemp (filename); - if (fd < 0) { - GST_ERROR_OBJECT (sink, "open %s failed:", filename); - return NULL; - } + if (!gst_video_info_from_caps (&info, caps)) + goto invalid_format; - stride = sink->video_width * 4; - size = stride * sink->video_height; + sink->video_width = info.width; + sink->video_height = info.height; + size = info.size; - if (ftruncate (fd, size) < 0) { - GST_ERROR_OBJECT (sink, "ftruncate failed:"); - close (fd); - return NULL; - } + /* create a new pool for the new configuration */ + newpool = gst_wayland_buffer_pool_new (sink); - data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); - unlink (filename); - if (data == MAP_FAILED) { - GST_ELEMENT_ERROR (sink, LIBRARY, SHUTDOWN, (NULL), - ("mmap() failed: %s", strerror (errno))); - close (fd); - return NULL; + if (!newpool) { + GST_DEBUG_OBJECT (sink, "Failed to create new pool"); + return FALSE; } - buffer = gst_buffer_new (); - - wmeta = (GstWlMeta *) gst_buffer_add_meta (buffer, GST_WL_META_INFO, NULL); - wmeta->sink = gst_object_ref (sink); - wmeta->wbuffer = wl_shm_create_buffer (sink->display->shm, fd, - sink->video_width, sink->video_height, stride, WL_SHM_FORMAT_XRGB8888); - wmeta->data = data; - wmeta->size = size; + structure = gst_buffer_pool_get_config (newpool); + gst_buffer_pool_config_set_params (structure, caps, size, 2, 0); + gst_buffer_pool_config_set_allocator (structure, NULL, ¶ms); + if (!gst_buffer_pool_set_config (newpool, structure)) + goto config_failed; - close (fd); + oldpool = sink->pool; + sink->pool = newpool; + if (oldpool) + gst_object_unref (oldpool); - gst_buffer_append_memory (buffer, - gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data, - size, 0, size, NULL, NULL)); + return TRUE; - return buffer; +invalid_format: + { + GST_DEBUG_OBJECT (sink, + "Could not locate image format from caps %" GST_PTR_FORMAT, caps); + return FALSE; + } +config_failed: + { + GST_DEBUG_OBJECT (bsink, "failed setting config"); + return FALSE; + } } -static gboolean -gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) +static void +handle_ping (void *data, struct wl_shell_surface *shell_surface, + uint32_t serial) { - GstWaylandSink *sink = GST_WAYLAND_SINK (bsink); - const GstStructure *structure; - gboolean ret = TRUE; - - GST_LOG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps); - - structure = gst_caps_get_structure (caps, 0); - - ret &= gst_structure_get_int (structure, "width", &sink->video_width); - ret &= gst_structure_get_int (structure, "height", &sink->video_height); - - if (!ret) - return FALSE; - - return TRUE; + wl_shell_surface_pong (shell_surface, serial); } -static const struct wl_callback_listener frame_listener; - static void -redraw (void *data, struct wl_callback *callback, uint32_t time) +handle_configure (void *data, struct wl_shell_surface *shell_surface, + uint32_t edges, int32_t width, int32_t height) { +} - GstWaylandSink *sink = (GstWaylandSink *) data; - - sink->render_busy = FALSE; +static void +handle_popup_done (void *data, struct wl_shell_surface *shell_surface) +{ } +static const struct wl_shell_surface_listener shell_surface_listener = { + handle_ping, + handle_configure, + handle_popup_done +}; + static void create_window (GstWaylandSink * sink, struct display *display, int width, int height) @@ -427,15 +423,21 @@ create_window (GstWaylandSink * sink, struct display *display, int width, window->display = display; window->width = width; window->height = height; + window->redraw_pending = FALSE; + window->surface = wl_compositor_create_surface (display->compositor); window->shell_surface = wl_shell_get_shell_surface (display->shell, window->surface); - /* wl_shell_surface_set_toplevel (window->shell_surface); */ -#ifdef WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT + + g_return_if_fail (window->shell_surface); + + wl_shell_surface_add_listener (window->shell_surface, + &shell_surface_listener, window); + + wl_shell_surface_set_toplevel (window->shell_surface); wl_shell_surface_set_fullscreen (window->shell_surface, - WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, NULL); -#endif + WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE, 0, NULL); sink->window = window; @@ -453,6 +455,13 @@ gst_wayland_sink_start (GstBaseSink * bsink) if (!sink->display) sink->display = create_display (); + if (sink->display == NULL) { + GST_ELEMENT_ERROR (bsink, RESOURCE, OPEN_READ_WRITE, + ("Could not initialise Wayland output"), + ("Could not create Wayland display")); + return FALSE; + } + return result; } @@ -466,6 +475,84 @@ gst_wayland_sink_stop (GstBaseSink * bsink) return TRUE; } +static gboolean +gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query) +{ + GstWaylandSink *sink = GST_WAYLAND_SINK (bsink); + GstBufferPool *pool; + GstStructure *config; + GstCaps *caps; + guint size; + gboolean need_pool; + + gst_query_parse_allocation (query, &caps, &need_pool); + + if (caps == NULL) + goto no_caps; + + g_mutex_lock (&sink->wayland_lock); + if ((pool = sink->pool)) + gst_object_ref (pool); + g_mutex_unlock (&sink->wayland_lock); + + if (pool != NULL) { + GstCaps *pcaps; + + /* we had a pool, check caps */ + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL); + + if (!gst_caps_is_equal (caps, pcaps)) { + /* different caps, we can't use this pool */ + gst_object_unref (pool); + pool = NULL; + } + gst_structure_free (config); + } + + if (pool == NULL && need_pool) { + GstVideoInfo info; + + if (!gst_video_info_from_caps (&info, caps)) + goto invalid_caps; + + GST_DEBUG_OBJECT (sink, "create new pool"); + pool = gst_wayland_buffer_pool_new (sink); + + /* the normal size of a frame */ + size = info.size; + + config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_set_params (config, caps, size, 2, 0); + if (!gst_buffer_pool_set_config (pool, config)) + goto config_failed; + } + if (pool) { + gst_query_add_allocation_pool (query, pool, size, 2, 0); + gst_object_unref (pool); + } + + return TRUE; + + /* ERRORS */ +no_caps: + { + GST_DEBUG_OBJECT (bsink, "no caps specified"); + return FALSE; + } +invalid_caps: + { + GST_DEBUG_OBJECT (bsink, "invalid caps specified"); + return FALSE; + } +config_failed: + { + GST_DEBUG_OBJECT (bsink, "failed setting config"); + gst_object_unref (pool); + return FALSE; + } +} + static GstFlowReturn gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer) { @@ -473,6 +560,18 @@ gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer) return gst_wayland_sink_render (bsink, buffer); } +static void +frame_redraw_callback (void *data, struct wl_callback *callback, uint32_t time) +{ + struct window *window = (struct window *) data; + window->redraw_pending = FALSE; + wl_callback_destroy (callback); +} + +static const struct wl_callback_listener frame_callback_listener = { + frame_redraw_callback +}; + static GstFlowReturn gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) { @@ -480,14 +579,21 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) GstVideoRectangle src, dst, res; GstBuffer *to_render; GstWlMeta *meta; + GstFlowReturn ret; + struct window *window; + struct display *display; GST_LOG_OBJECT (sink, "render buffer %p", buffer); - if (!sink->window) create_window (sink, sink->display, sink->video_width, sink->video_height); - if (sink->render_busy) - goto was_busy; + window = sink->window; + display = sink->display; + + /* Wait for the previous frame to complete redraw */ + if (window->redraw_pending) { + wl_display_iterate (display->display, WL_DISPLAY_READABLE); + } meta = gst_buffer_get_wl_meta (buffer); @@ -496,10 +602,17 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) to_render = buffer; } else { GstMapInfo src; - GST_LOG_OBJECT (sink, "buffer %p not from our pool, copying", buffer); - to_render = wayland_buffer_create (sink); + if (!sink->pool) + goto no_pool; + + if (!gst_buffer_pool_set_active (sink->pool, TRUE)) + goto activate_failed; + + ret = gst_buffer_pool_acquire_buffer (sink->pool, &to_render, NULL); + if (ret != GST_FLOW_OK) + goto no_buffer; gst_buffer_map (buffer, &src, GST_MAP_READ); gst_buffer_fill (to_render, 0, src.data, src.size); @@ -515,36 +628,37 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer) gst_video_sink_center_rect (src, dst, &res, FALSE); - sink->render_busy = TRUE; - - wl_buffer_damage (meta->wbuffer, 0, 0, res.w, res.h); wl_surface_attach (sink->window->surface, meta->wbuffer, 0, 0); wl_surface_damage (sink->window->surface, 0, 0, res.w, res.h); - - if (sink->callback) - wl_callback_destroy (sink->callback); - - sink->callback = wl_surface_frame (sink->window->surface); - wl_callback_add_listener (sink->callback, &frame_listener, sink); - wl_display_iterate (sink->display->display, sink->display->mask); + 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); if (buffer != to_render) gst_buffer_unref (to_render); - return GST_FLOW_OK; -was_busy: +no_buffer: + { + GST_WARNING_OBJECT (sink, "could not create image"); + return ret; + } +no_pool: { - GST_LOG_OBJECT (sink, - "Waiting to get the signal from compositor to render the next frame.."); - return GST_FLOW_OK; + GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, + ("Internal error: can't allocate images"), + ("We don't have a bufferpool negotiated")); + return GST_FLOW_ERROR; + } +activate_failed: + { + GST_ERROR_OBJECT (sink, "failed to activate bufferpool."); + ret = GST_FLOW_ERROR; + return ret; } } -static const struct wl_callback_listener frame_listener = { - redraw -}; - static gboolean plugin_init (GstPlugin * plugin) { diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h index 22a4ede6..1a278e91 100644 --- a/ext/wayland/gstwaylandsink.h +++ b/ext/wayland/gstwaylandsink.h @@ -15,7 +15,8 @@ * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. */ #ifndef __GST_WAYLAND_VIDEO_SINK_H__ @@ -37,6 +38,7 @@ #include <gst/gst.h> #include <gst/video/video.h> #include <gst/video/gstvideosink.h> +#include <gst/video/gstvideometa.h> #include <wayland-client.h> @@ -69,29 +71,23 @@ struct window int width, height; struct wl_surface *surface; struct wl_shell_surface *shell_surface; + struct wl_buffer *buffer; + struct wl_callback *callback; + guint redraw_pending :1; + +}; + +struct shm_pool { + struct wl_shm_pool *pool; + size_t size; + size_t used; + void *data; }; typedef struct _GstWaylandSink GstWaylandSink; typedef struct _GstWaylandSinkClass GstWaylandSinkClass; -typedef struct _GstWlMeta GstWlMeta; - -GType gst_wl_meta_api_get_type (void); -#define GST_WL_META_API_TYPE (gst_wl_meta_api_get_type()) -const GstMetaInfo * gst_wl_meta_get_info (void); -#define GST_WL_META_INFO (gst_wl_meta_get_info()) - -#define gst_buffer_get_wl_meta(b) ((GstWlMeta*)gst_buffer_get_meta((b),GST_WL_META_API_TYPE)) - -struct _GstWlMeta { - GstMeta meta; - - GstWaylandSink *sink; - - struct wl_buffer *wbuffer; - void *data; - size_t size; -}; +#include "waylandpool.h" struct _GstWaylandSink { @@ -99,15 +95,14 @@ struct _GstWaylandSink struct display *display; struct window *window; - struct wl_callback *callback; + struct shm_pool *shm_pool; + + GstBufferPool *pool; GMutex wayland_lock; gint video_width; gint video_height; - guint bpp; - - gboolean render_busy; }; struct _GstWaylandSinkClass diff --git a/ext/wayland/waylandpool.c b/ext/wayland/waylandpool.c new file mode 100644 index 00000000..dd12d100 --- /dev/null +++ b/ext/wayland/waylandpool.c @@ -0,0 +1,311 @@ +/* GStreamer + * Copyright (C) 2012 Intel Corporation + * Copyright (C) 2012 Sreerenj Balachandran <sreerenj.balachandran@intel.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 + +/* Object header */ +#include "gstwaylandsink.h" + +/* Debugging category */ +#include <gst/gstinfo.h> + +/* Helper functions */ +#include <gst/video/video.h> +#include <gst/video/gstvideometa.h> +#include <gst/video/gstvideopool.h> + +/* wl metadata */ +GType +gst_wl_meta_api_get_type (void) +{ + static volatile GType type; + static const gchar *tags[] = + { "memory", "size", "colorspace", "orientation", NULL }; + + if (g_once_init_enter (&type)) { + GType _type = gst_meta_api_type_register ("GstWlMetaAPI", tags); + g_once_init_leave (&type, _type); + } + return type; +} + +static void +gst_wl_meta_free (GstWlMeta * meta, GstBuffer * buffer) +{ + gst_object_unref (meta->sink); + munmap (meta->data, meta->size); + wl_buffer_destroy (meta->wbuffer); +} + +const GstMetaInfo * +gst_wl_meta_get_info (void) +{ + static const GstMetaInfo *wl_meta_info = NULL; + + if (wl_meta_info == NULL) { + wl_meta_info = + gst_meta_register (GST_WL_META_API_TYPE, "GstWlMeta", + sizeof (GstWlMeta), (GstMetaInitFunction) NULL, + (GstMetaFreeFunction) gst_wl_meta_free, + (GstMetaTransformFunction) NULL); + } + return wl_meta_info; +} + +/* bufferpool */ +static void gst_wayland_buffer_pool_finalize (GObject * object); + +#define gst_wayland_buffer_pool_parent_class parent_class +G_DEFINE_TYPE (GstWaylandBufferPool, gst_wayland_buffer_pool, + GST_TYPE_BUFFER_POOL); + +static gboolean +wayland_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config) +{ + GstWaylandBufferPool *wpool = GST_WAYLAND_BUFFER_POOL_CAST (pool); + GstVideoInfo info; + GstCaps *caps; + + if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL)) + goto wrong_config; + + if (caps == NULL) + goto no_caps; + + /* now parse the caps from the config */ + if (!gst_video_info_from_caps (&info, caps)) + goto wrong_caps; + + GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height, + caps); + + /*Fixme: Enable metadata checking handling based on the config of pool */ + + wpool->caps = gst_caps_ref (caps); + wpool->info = info; + wpool->width = info.width; + wpool->height = info.height; + + return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); + /* ERRORS */ +wrong_config: + { + GST_WARNING_OBJECT (pool, "invalid config"); + return FALSE; + } +no_caps: + { + GST_WARNING_OBJECT (pool, "no caps in config"); + return FALSE; + } +wrong_caps: + { + GST_WARNING_OBJECT (pool, + "failed getting geometry from caps %" GST_PTR_FORMAT, caps); + return FALSE; + } +} + +static struct wl_shm_pool * +make_shm_pool (struct display *display, int size, void **data) +{ + struct wl_shm_pool *pool; + int fd; + char filename[1024]; + static int init = 0; + + snprintf (filename, 256, "%s-%d-%s", "/tmp/wayland-shm", init++, "XXXXXX"); + + fd = mkstemp (filename); + if (fd < 0) { + GST_ERROR ("open %s failed:", filename); + return NULL; + } + if (ftruncate (fd, size) < 0) { + GST_ERROR ("ftruncate failed:..!"); + close (fd); + return NULL; + } + + *data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (*data == MAP_FAILED) { + GST_ERROR ("mmap failed: "); + close (fd); + return NULL; + } + + pool = wl_shm_create_pool (display->shm, fd, size); + + close (fd); + + return pool; +} + +static struct shm_pool * +shm_pool_create (struct display *display, size_t size) +{ + struct shm_pool *pool = malloc (sizeof *pool); + + if (!pool) + return NULL; + + pool->pool = make_shm_pool (display, size, &pool->data); + if (!pool->pool) { + free (pool); + return NULL; + } + + pool->size = size; + pool->used = 0; + + return pool; +} + +static void * +shm_pool_allocate (struct shm_pool *pool, size_t size, int *offset) +{ + if (pool->used + size > pool->size) + return NULL; + + *offset = pool->used; + pool->used += size; + + return (char *) pool->data + *offset; +} + +/* Start allocating from the beginning of the pool again */ +static void +shm_pool_reset (struct shm_pool *pool) +{ + pool->used = 0; +} + +static GstWlMeta * +gst_buffer_add_wayland_meta (GstBuffer * buffer, GstWaylandBufferPool * wpool) +{ + GstWlMeta *wmeta; + GstWaylandSink *sink; + void *data; + gint offset; + guint stride = 0; + guint size = 0; + + sink = wpool->sink; + stride = wpool->width * 4; + size = stride * wpool->height; + + wmeta = (GstWlMeta *) gst_buffer_add_meta (buffer, GST_WL_META_INFO, NULL); + wmeta->sink = gst_object_ref (sink); + + /*Fixme: size calculation should be more grcefull, have to consider the padding */ + if (!sink->shm_pool) { + sink->shm_pool = shm_pool_create (sink->display, size * 15); + shm_pool_reset (sink->shm_pool); + } + + if (!sink->shm_pool) { + GST_ERROR ("Failed to create shm_pool"); + return NULL; + } + + data = shm_pool_allocate (sink->shm_pool, size, &offset); + if (!data) + return NULL; + + wmeta->wbuffer = wl_shm_pool_create_buffer (sink->shm_pool->pool, offset, + sink->video_width, sink->video_height, stride, WL_SHM_FORMAT_XRGB8888); + + wmeta->data = data; + wmeta->size = size; + + gst_buffer_append_memory (buffer, + gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data, + size, 0, size, NULL, NULL)); + + + return wmeta; +} + +static GstFlowReturn +wayland_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer, + GstBufferPoolAcquireParams * params) +{ + GstWaylandBufferPool *w_pool = GST_WAYLAND_BUFFER_POOL_CAST (pool); + GstBuffer *w_buffer; + GstWlMeta *meta; + + w_buffer = gst_buffer_new (); + meta = gst_buffer_add_wayland_meta (w_buffer, w_pool); + if (meta == NULL) { + gst_buffer_unref (w_buffer); + goto no_buffer; + } + *buffer = w_buffer; + + return GST_FLOW_OK; + + /* ERROR */ +no_buffer: + { + GST_WARNING_OBJECT (pool, "can't create buffer"); + return GST_FLOW_ERROR; + } +} + +GstBufferPool * +gst_wayland_buffer_pool_new (GstWaylandSink * waylandsink) +{ + GstWaylandBufferPool *pool; + + g_return_val_if_fail (GST_IS_WAYLAND_SINK (waylandsink), NULL); + pool = g_object_new (GST_TYPE_WAYLAND_BUFFER_POOL, NULL); + pool->sink = gst_object_ref (waylandsink); + + return GST_BUFFER_POOL_CAST (pool); +} + +static void +gst_wayland_buffer_pool_class_init (GstWaylandBufferPoolClass * klass) +{ + GObjectClass *gobject_class = (GObjectClass *) klass; + GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass; + + gobject_class->finalize = gst_wayland_buffer_pool_finalize; + + gstbufferpool_class->set_config = wayland_buffer_pool_set_config; + gstbufferpool_class->alloc_buffer = wayland_buffer_pool_alloc; +} + +static void +gst_wayland_buffer_pool_init (GstWaylandBufferPool * pool) +{ +} + +static void +gst_wayland_buffer_pool_finalize (GObject * object) +{ + GstWaylandBufferPool *pool = GST_WAYLAND_BUFFER_POOL_CAST (object); + + gst_object_unref (pool->sink); + + G_OBJECT_CLASS (gst_wayland_buffer_pool_parent_class)->finalize (object); +} diff --git a/ext/wayland/waylandpool.h b/ext/wayland/waylandpool.h new file mode 100644 index 00000000..c1821d0a --- /dev/null +++ b/ext/wayland/waylandpool.h @@ -0,0 +1,79 @@ +/* GStreamer Wayland buffer pool + * Copyright (C) 2012 Intel Corporation + * Copyright (C) 2012 Sreerenj Balachandran <sreerenj.balachandran@intel.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 __GST_WAYLAND_BUFFER_POOL_H__ +#define __GST_WAYLAND_BUFFER_POOL_H__ + +G_BEGIN_DECLS + +#include "gstwaylandsink.h" +typedef struct _GstWlMeta GstWlMeta; + +typedef struct _GstWaylandBufferPool GstWaylandBufferPool; +typedef struct _GstWaylandBufferPoolClass GstWaylandBufferPoolClass; + +GType gst_wl_meta_api_get_type (void); +#define GST_WL_META_API_TYPE (gst_wl_meta_api_get_type()) +const GstMetaInfo * gst_wl_meta_get_info (void); +#define GST_WL_META_INFO (gst_wl_meta_get_info()) + +#define gst_buffer_get_wl_meta(b) ((GstWlMeta*)gst_buffer_get_meta((b),GST_WL_META_API_TYPE)) + +struct _GstWlMeta { + GstMeta meta; + + GstWaylandSink *sink; + + struct wl_buffer *wbuffer; + void *data; + size_t size; +}; + +/* buffer pool functions */ +#define GST_TYPE_WAYLAND_BUFFER_POOL (gst_wayland_buffer_pool_get_type()) +#define GST_IS_WAYLAND_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_WAYLAND_BUFFER_POOL)) +#define GST_WAYLAND_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_WAYLAND_BUFFER_POOL, GstWaylandBufferPool)) +#define GST_WAYLAND_BUFFER_POOL_CAST(obj) ((GstWaylandBufferPool*)(obj)) + +struct _GstWaylandBufferPool +{ + GstBufferPool bufferpool; + + GstWaylandSink *sink; + + /*Fixme: keep all these in GstWaylandBufferPoolPrivate*/ + GstCaps *caps; + GstVideoInfo info; + guint width; + guint height; +}; + +struct _GstWaylandBufferPoolClass +{ + GstBufferPoolClass parent_class; +}; + +GType gst_wayland_buffer_pool_get_type (void); + +GstBufferPool *gst_wayland_buffer_pool_new (GstWaylandSink * waylandsink); + +G_END_DECLS + +#endif /*__GST_WAYLAND_BUFFER_POOL_H__*/ diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in index 477795e4..7fa53c6d 100644 --- a/ext/xvid/Makefile.in +++ b/ext/xvid/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in index bf8e45d1..c572ccfd 100644 --- a/ext/zbar/Makefile.in +++ b/ext/zbar/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in index 76946e7c..fb2ed635 100644 --- a/gst-libs/Makefile.in +++ b/gst-libs/Makefile.in @@ -314,6 +314,8 @@ 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@ @@ -321,6 +323,8 @@ 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@ @@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -363,6 +366,10 @@ 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@ @@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in index 405a8dc1..8130030a 100644 --- a/gst-libs/gst/Makefile.in +++ b/gst-libs/gst/Makefile.in @@ -316,6 +316,8 @@ 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@ @@ -323,6 +325,8 @@ 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@ @@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -365,6 +368,10 @@ 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@ @@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in index 4482c71f..3472bc23 100644 --- a/gst-libs/gst/basecamerabinsrc/Makefile.in +++ b/gst-libs/gst/basecamerabinsrc/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in index bee19cae..f2ffbc82 100644 --- a/gst-libs/gst/codecparsers/Makefile.in +++ b/gst-libs/gst/codecparsers/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/codecparsers/gsth264parser.c b/gst-libs/gst/codecparsers/gsth264parser.c index 2866e8ec..1b0a2120 100644 --- a/gst-libs/gst/codecparsers/gsth264parser.c +++ b/gst-libs/gst/codecparsers/gsth264parser.c @@ -136,6 +136,32 @@ static const guint8 zigzag_4x4[16] = { 7, 11, 14, 15, }; +typedef struct +{ + guint par_n, par_d; +} PAR; + +/* Table E-1 - Meaning of sample aspect ratio indicator (1..16) */ +static PAR aspect_ratios[17] = { + {0, 0}, + {1, 1}, + {12, 11}, + {10, 11}, + {16, 11}, + {40, 33}, + {24, 11}, + {20, 11}, + {32, 11}, + {80, 33}, + {18, 11}, + {15, 11}, + {64, 33}, + {160, 99}, + {4, 3}, + {3, 2}, + {2, 1} +}; + /* Compute Ceil(Log2(v)) */ /* Derived from branchless code for integer log2(v) from: <http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog> */ @@ -552,6 +578,8 @@ gst_h264_parse_vui_parameters (GstH264SPS * sps, NalReader * nr) vui->chroma_sample_loc_type_top_field = 0; vui->chroma_sample_loc_type_bottom_field = 0; vui->low_delay_hrd_flag = 0; + vui->par_n = 0; + vui->par_d = 0; READ_UINT8 (nr, vui->aspect_ratio_info_present_flag, 1); if (vui->aspect_ratio_info_present_flag) { @@ -559,6 +587,11 @@ gst_h264_parse_vui_parameters (GstH264SPS * sps, NalReader * nr) if (vui->aspect_ratio_idc == EXTENDED_SAR) { READ_UINT16 (nr, vui->sar_width, 16); READ_UINT16 (nr, vui->sar_height, 16); + vui->par_n = vui->sar_width; + vui->par_d = vui->sar_height; + } else if (vui->aspect_ratio_idc <= 16) { + vui->par_n = aspect_ratios[vui->aspect_ratio_idc].par_n; + vui->par_d = aspect_ratios[vui->aspect_ratio_idc].par_d; } } @@ -1943,10 +1976,11 @@ gst_h264_parser_parse_sei (GstH264NalParser * nalparser, GstH264NalUnit * nalu, if (sei->payloadType == GST_H264_SEI_BUF_PERIOD) { /* size not set; might depend on emulation_prevention_three_byte */ res = gst_h264_parser_parse_buffering_period (nalparser, - &sei->buffering_period, &nr); + &sei->payload.buffering_period, &nr); } else if (sei->payloadType == GST_H264_SEI_PIC_TIMING) { /* size not set; might depend on emulation_prevention_three_byte */ - res = gst_h264_parser_parse_pic_timing (nalparser, &sei->pic_timing, &nr); + res = gst_h264_parser_parse_pic_timing (nalparser, + &sei->payload.pic_timing, &nr); } else res = GST_H264_PARSER_OK; diff --git a/gst-libs/gst/codecparsers/gsth264parser.h b/gst-libs/gst/codecparsers/gsth264parser.h index 2e570c8a..6698922e 100644 --- a/gst-libs/gst/codecparsers/gsth264parser.h +++ b/gst-libs/gst/codecparsers/gsth264parser.h @@ -362,6 +362,10 @@ struct _GstH264VUIParams guint32 log2_max_mv_length_vertical; guint32 num_reorder_frames; guint32 max_dec_frame_buffering; + + /* calculated values */ + guint par_n; + guint par_d; }; /** @@ -660,7 +664,7 @@ struct _GstH264SEIMessage GstH264BufferingPeriod buffering_period; GstH264PicTiming pic_timing; /* ... could implement more */ - }; + } payload; }; /** diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.c b/gst-libs/gst/codecparsers/gstmpegvideoparser.c index fbe37ef5..31333901 100644 --- a/gst-libs/gst/codecparsers/gstmpegvideoparser.c +++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.c @@ -107,32 +107,32 @@ failed: return FALSE; } -/* Set the Pixel Aspect Ratio in our hdr from a DAR code in the data */ +/* Set the Pixel Aspect Ratio in our hdr from a ASR code in the data */ static void -set_par_from_dar (GstMpegVideoSequenceHdr * seqhdr, guint8 asr_code) +set_par_from_asr_mpeg1 (GstMpegVideoSequenceHdr * seqhdr, guint8 asr_code) { - /* Pixel_width = DAR_width * display_vertical_size */ - /* Pixel_height = DAR_height * display_horizontal_size */ - switch (asr_code) { - case 0x02: /* 3:4 DAR = 4:3 pixels */ - seqhdr->par_w = 4 * seqhdr->height; - seqhdr->par_h = 3 * seqhdr->width; - break; - case 0x03: /* 9:16 DAR */ - seqhdr->par_w = 16 * seqhdr->height; - seqhdr->par_h = 9 * seqhdr->width; - break; - case 0x04: /* 1:2.21 DAR */ - seqhdr->par_w = 221 * seqhdr->height; - seqhdr->par_h = 100 * seqhdr->width; - break; - case 0x01: /* Square pixels */ - seqhdr->par_w = seqhdr->par_h = 1; - break; - default: - GST_DEBUG ("unknown/invalid aspect_ratio_information %d", asr_code); - break; - } + int ratios[16][2] = { + {0, 0}, /* 0, Invalid */ + {1, 1}, /* 1, 1.0 */ + {10000, 6735}, /* 2, 0.6735 */ + {64, 45}, /* 3, 0.7031 16:9 625 line */ + {10000, 7615}, /* 4, 0.7615 */ + {10000, 8055}, /* 5, 0.8055 */ + {32, 27}, /* 6, 0.8437 */ + {10000, 8935}, /* 7, 0.8935 */ + {10000, 9375}, /* 8, 0.9375 */ + {10000, 9815}, /* 9, 0.9815 */ + {10000, 10255}, /* 10, 1.0255 */ + {10000, 10695}, /* 11, 1.0695 */ + {8, 9}, /* 12, 1.125 */ + {10000, 11575}, /* 13, 1.1575 */ + {10000, 12015}, /* 14, 1.2015 */ + {0, 0}, /* 15, invalid */ + }; + asr_code &= 0xf; + + seqhdr->par_w = ratios[asr_code][0]; + seqhdr->par_h = ratios[asr_code][1]; } static void @@ -156,79 +156,6 @@ set_fps_from_code (GstMpegVideoSequenceHdr * seqhdr, guint8 fps_code) } } -static gboolean -gst_mpeg_video_parse_sequence (GstMpegVideoSequenceHdr * seqhdr, - GstBitReader * br) -{ - guint8 bits; - guint8 load_intra_flag, load_non_intra_flag; - - /* Setting the height/width codes */ - READ_UINT16 (br, seqhdr->width, 12); - READ_UINT16 (br, seqhdr->height, 12); - - READ_UINT8 (br, seqhdr->aspect_ratio_info, 4); - set_par_from_dar (seqhdr, seqhdr->aspect_ratio_info); - - READ_UINT8 (br, seqhdr->frame_rate_code, 4); - set_fps_from_code (seqhdr, seqhdr->frame_rate_code); - - READ_UINT32 (br, seqhdr->bitrate_value, 18); - if (seqhdr->bitrate_value == 0x3ffff) { - /* VBR stream */ - seqhdr->bitrate = 0; - } else { - /* Value in header is in units of 400 bps */ - seqhdr->bitrate *= 400; - } - - READ_UINT8 (br, bits, 1); - if (bits != MARKER_BIT) - goto failed; - - /* VBV buffer size */ - READ_UINT16 (br, seqhdr->vbv_buffer_size_value, 10); - - /* constrained_parameters_flag */ - READ_UINT8 (br, seqhdr->constrained_parameters_flag, 1); - - /* load_intra_quantiser_matrix */ - READ_UINT8 (br, load_intra_flag, 1); - if (load_intra_flag) { - gint i; - for (i = 0; i < 64; i++) - READ_UINT8 (br, seqhdr->intra_quantizer_matrix[mpeg_zigzag_8x8[i]], 8); - } else - memcpy (seqhdr->intra_quantizer_matrix, default_intra_quantizer_matrix, 64); - - /* non intra quantizer matrix */ - READ_UINT8 (br, load_non_intra_flag, 1); - if (load_non_intra_flag) { - gint i; - for (i = 0; i < 64; i++) - READ_UINT8 (br, seqhdr->non_intra_quantizer_matrix[mpeg_zigzag_8x8[i]], - 8); - } else - memset (seqhdr->non_intra_quantizer_matrix, 16, 64); - - /* dump some info */ - GST_LOG ("width x height: %d x %d", seqhdr->width, seqhdr->height); - GST_LOG ("fps: %d/%d", seqhdr->fps_n, seqhdr->fps_d); - GST_LOG ("par: %d/%d", seqhdr->par_w, seqhdr->par_h); - GST_LOG ("bitrate: %d", seqhdr->bitrate); - - return TRUE; - - /* ERRORS */ -failed: - { - GST_WARNING ("Failed to parse sequence header"); - /* clear out stuff */ - memset (seqhdr, 0, sizeof (*seqhdr)); - return FALSE; - } -} - /* @size and @offset are wrt current reader position */ static inline guint scan_for_start_codes (const GstByteReader * reader, guint offset, guint size) @@ -347,6 +274,8 @@ gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * seqhdr, const guint8 * data, gsize size, guint offset) { GstBitReader br; + guint8 bits; + guint8 load_intra_flag, load_non_intra_flag; g_return_val_if_fail (seqhdr != NULL, FALSE); @@ -357,7 +286,72 @@ gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * seqhdr, gst_bit_reader_init (&br, &data[offset], size); - return gst_mpeg_video_parse_sequence (seqhdr, &br); + /* Setting the height/width codes */ + READ_UINT16 (&br, seqhdr->width, 12); + READ_UINT16 (&br, seqhdr->height, 12); + + READ_UINT8 (&br, seqhdr->aspect_ratio_info, 4); + /* Interpret PAR according to MPEG-1. Needs to be reinterpreted + * later, if a sequence_display extension is seen */ + set_par_from_asr_mpeg1 (seqhdr, seqhdr->aspect_ratio_info); + + READ_UINT8 (&br, seqhdr->frame_rate_code, 4); + set_fps_from_code (seqhdr, seqhdr->frame_rate_code); + + READ_UINT32 (&br, seqhdr->bitrate_value, 18); + if (seqhdr->bitrate_value == 0x3ffff) { + /* VBR stream */ + seqhdr->bitrate = 0; + } else { + /* Value in header is in units of 400 bps */ + seqhdr->bitrate *= 400; + } + + READ_UINT8 (&br, bits, 1); + if (bits != MARKER_BIT) + goto failed; + + /* VBV buffer size */ + READ_UINT16 (&br, seqhdr->vbv_buffer_size_value, 10); + + /* constrained_parameters_flag */ + READ_UINT8 (&br, seqhdr->constrained_parameters_flag, 1); + + /* load_intra_quantiser_matrix */ + READ_UINT8 (&br, load_intra_flag, 1); + if (load_intra_flag) { + gint i; + for (i = 0; i < 64; i++) + READ_UINT8 (&br, seqhdr->intra_quantizer_matrix[mpeg_zigzag_8x8[i]], 8); + } else + memcpy (seqhdr->intra_quantizer_matrix, default_intra_quantizer_matrix, 64); + + /* non intra quantizer matrix */ + READ_UINT8 (&br, load_non_intra_flag, 1); + if (load_non_intra_flag) { + gint i; + for (i = 0; i < 64; i++) + READ_UINT8 (&br, seqhdr->non_intra_quantizer_matrix[mpeg_zigzag_8x8[i]], + 8); + } else + memset (seqhdr->non_intra_quantizer_matrix, 16, 64); + + /* dump some info */ + GST_LOG ("width x height: %d x %d", seqhdr->width, seqhdr->height); + GST_LOG ("fps: %d/%d", seqhdr->fps_n, seqhdr->fps_d); + GST_LOG ("par: %d/%d", seqhdr->par_w, seqhdr->par_h); + GST_LOG ("bitrate: %d", seqhdr->bitrate); + + return TRUE; + + /* ERRORS */ +failed: + { + GST_WARNING ("Failed to parse sequence header"); + /* clear out stuff */ + memset (seqhdr, 0, sizeof (*seqhdr)); + return FALSE; + } } /** @@ -426,6 +420,110 @@ gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext, return TRUE; } +gboolean +gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt + * seqdisplayext, const guint8 * data, gsize size, guint offset) +{ + GstBitReader br; + + g_return_val_if_fail (seqdisplayext != NULL, FALSE); + if (offset > size) + return FALSE; + + size -= offset; + if (size < 5) { + GST_DEBUG ("not enough bytes to parse the extension"); + return FALSE; + } + + gst_bit_reader_init (&br, &data[offset], size); + + if (gst_bit_reader_get_bits_uint8_unchecked (&br, 4) != + GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY) { + GST_DEBUG ("Not parsing a sequence display extension"); + return FALSE; + } + + seqdisplayext->video_format = + gst_bit_reader_get_bits_uint8_unchecked (&br, 3); + seqdisplayext->colour_description_flag = + gst_bit_reader_get_bits_uint8_unchecked (&br, 1); + + if (seqdisplayext->colour_description_flag) { + seqdisplayext->colour_primaries = + gst_bit_reader_get_bits_uint8_unchecked (&br, 8); + seqdisplayext->transfer_characteristics = + gst_bit_reader_get_bits_uint8_unchecked (&br, 8); + seqdisplayext->matrix_coefficients = + gst_bit_reader_get_bits_uint8_unchecked (&br, 8); + } + + if (gst_bit_reader_get_remaining (&br) < 29) { + GST_DEBUG ("Not enough remaining bytes to parse the extension"); + return FALSE; + } + + seqdisplayext->display_horizontal_size = + gst_bit_reader_get_bits_uint16_unchecked (&br, 14); + /* skip marker bit */ + gst_bit_reader_skip_unchecked (&br, 1); + seqdisplayext->display_vertical_size = + gst_bit_reader_get_bits_uint16_unchecked (&br, 14); + + return TRUE; +} + +gboolean +gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr * seqhdr, + GstMpegVideoSequenceExt * seqext, + GstMpegVideoSequenceDisplayExt * displayext) +{ + guint32 w; + guint32 h; + + if (seqext) { + seqhdr->fps_n = seqhdr->fps_n * (seqext->fps_n_ext + 1); + seqhdr->fps_d = seqhdr->fps_d * (seqext->fps_d_ext + 1); + /* Extend width and height to 14 bits by adding the extension bits */ + seqhdr->width |= (seqext->horiz_size_ext << 12); + seqhdr->height |= (seqext->vert_size_ext << 12); + } + + w = seqhdr->width; + h = seqhdr->height; + if (displayext) { + /* Use the display size for calculating PAR when display ext present */ + w = displayext->display_horizontal_size; + h = displayext->display_vertical_size; + } + + /* Pixel_width = DAR_width * display_vertical_size */ + /* Pixel_height = DAR_height * display_horizontal_size */ + switch (seqhdr->aspect_ratio_info) { + case 0x01: /* Square pixels */ + seqhdr->par_w = seqhdr->par_h = 1; + break; + case 0x02: /* 3:4 DAR = 4:3 pixels */ + seqhdr->par_w = 4 * h; + seqhdr->par_h = 3 * w; + break; + case 0x03: /* 9:16 DAR */ + seqhdr->par_w = 16 * h; + seqhdr->par_h = 9 * w; + break; + case 0x04: /* 1:2.21 DAR */ + seqhdr->par_w = 221 * h; + seqhdr->par_h = 100 * w; + break; + default: + GST_DEBUG ("unknown/invalid aspect_ratio_information %d", + seqhdr->aspect_ratio_info); + break; + } + + return TRUE; +} + /** * gst_mpeg_video_parse_quant_matrix_extension: * @quant: (out): The #GstMpegVideoQuantMatrixExt structure to fill diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.h b/gst-libs/gst/codecparsers/gstmpegvideoparser.h index d0a16bce..2b13a064 100644 --- a/gst-libs/gst/codecparsers/gstmpegvideoparser.h +++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.h @@ -175,6 +175,7 @@ typedef enum { typedef struct _GstMpegVideoSequenceHdr GstMpegVideoSequenceHdr; typedef struct _GstMpegVideoSequenceExt GstMpegVideoSequenceExt; +typedef struct _GstMpegVideoSequenceDisplayExt GstMpegVideoSequenceDisplayExt; typedef struct _GstMpegVideoPictureHdr GstMpegVideoPictureHdr; typedef struct _GstMpegVideoGop GstMpegVideoGop; typedef struct _GstMpegVideoPictureExt GstMpegVideoPictureExt; @@ -218,16 +219,16 @@ struct _GstMpegVideoSequenceHdr /** * GstMpegVideoSequenceExt: - * @profile: mpeg2 decoder profil + * @profile: mpeg2 decoder profile * @level: mpeg2 decoder level - * @progressive: %TRUE if the frames are progressive %FALSE otherwize + * @progressive: %TRUE if the frames are progressive %FALSE otherwise * @chroma_format: indicates the chrominance format * @horiz_size_ext: Horizontal size * @vert_size_ext: Vertical size * @bitrate_ext: The bitrate - * @vbv_buffer_size_extension: Vbv vuffer size + * @vbv_buffer_size_extension: VBV vuffer size * @low_delay: %TRUE if the sequence doesn't contain any B-pictures, %FALSE - * otherwize + * otherwise * @fps_n_ext: Framerate nominator code * @fps_d_ext: Framerate denominator code * @@ -253,6 +254,25 @@ struct _GstMpegVideoSequenceExt }; /** + * GstMpegVideoSequenceDisplayExt: + * @profile: mpeg2 decoder profil + + */ +struct _GstMpegVideoSequenceDisplayExt +{ + guint8 video_format; + guint8 colour_description_flag; + + /* if colour_description_flag: */ + guint8 colour_primaries; + guint8 transfer_characteristics; + guint8 matrix_coefficients; + + guint16 display_horizontal_size; + guint16 display_vertical_size; +}; + +/** * GstMpegVideoQuantMatrixExt: * @load_intra_quantiser_matrix: * @intra_quantiser_matrix: @@ -384,6 +404,10 @@ gboolean gst_mpeg_video_parse (GstMpegVideoPacket * pack gboolean gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * params, const guint8 * data, gsize size, guint offset); +/* seqext and displayext may be NULL if not received */ +gboolean gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr *hdr, + GstMpegVideoSequenceExt *seqext, GstMpegVideoSequenceDisplayExt *displayext); + gboolean gst_mpeg_video_parse_picture_header (GstMpegVideoPictureHdr* hdr, const guint8 * data, gsize size, guint offset); @@ -396,6 +420,9 @@ gboolean gst_mpeg_video_parse_gop (GstMpegVideoGop * gop, gboolean gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext, const guint8 * data, gsize size, guint offset); +gboolean gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt * seqdisplayext, + const guint8 * data, gsize size, guint offset); + gboolean gst_mpeg_video_parse_quant_matrix_extension (GstMpegVideoQuantMatrixExt * quant, const guint8 * data, gsize size, guint offset); diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c index a82e46e1..bc94823c 100644 --- a/gst-libs/gst/codecparsers/gstvc1parser.c +++ b/gst-libs/gst/codecparsers/gstvc1parser.c @@ -837,10 +837,13 @@ parse_sequence_header_advanced (GstVC1SeqHdr * seqhdr, GstBitReader * br) READ_UINT8 (br, advanced->aspect_ratio, 4); if (advanced->aspect_ratio == 15) { + /* Aspect Width (6.1.14.3.2) and Aspect Height (6.1.14.3.3) + * syntax elements hold a binary encoding of sizes ranging + * from 1 to 256 */ READ_UINT8 (br, advanced->aspect_horiz_size, 8); READ_UINT8 (br, advanced->aspect_vert_size, 8); - advanced->par_n = advanced->aspect_horiz_size; - advanced->par_d = advanced->aspect_vert_size; + advanced->par_n = 1 + advanced->aspect_horiz_size; + advanced->par_d = 1 + advanced->aspect_vert_size; } else { advanced->par_n = aspect_ratios[advanced->aspect_ratio].par_n; advanced->par_d = aspect_ratios[advanced->aspect_ratio].par_d; diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in index 6cdcb16c..a4680da5 100644 --- a/gst-libs/gst/interfaces/Makefile.in +++ b/gst-libs/gst/interfaces/Makefile.in @@ -361,6 +361,8 @@ 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@ @@ -368,6 +370,8 @@ 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@ @@ -382,7 +386,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -410,6 +413,10 @@ 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@ @@ -536,6 +543,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/signalprocessor/Makefile.in b/gst-libs/gst/signalprocessor/Makefile.in index 258ea420..340a1cbf 100644 --- a/gst-libs/gst/signalprocessor/Makefile.in +++ b/gst-libs/gst/signalprocessor/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in index 694324fc..a4a976f2 100644 --- a/gst-libs/gst/video/Makefile.in +++ b/gst-libs/gst/video/Makefile.in @@ -348,6 +348,8 @@ 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@ @@ -355,6 +357,8 @@ 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@ @@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +400,10 @@ 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@ @@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap index bec1fd1f..1fc4c37e 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>0.11.94</revision> + <branch>0.11</branch> + <name>Old Friends</name> + <created>2012-09-14</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-0.11.94.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>0.11.93</revision> <branch>0.11</branch> <name>Infralove</name> diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec index aab4d131..5c22b8db 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-bad011 -Version: 0.11.93 +Version: 0.11.94 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 bcaae154..1d411ef8 100644 --- a/gst/Makefile.in +++ b/gst/Makefile.in @@ -319,6 +319,8 @@ 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@ @@ -326,6 +328,8 @@ 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@ @@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -368,6 +371,10 @@ 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@ @@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in index 07e0d4a9..e3a0818e 100644 --- a/gst/adpcmdec/Makefile.in +++ b/gst/adpcmdec/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in index f1c39254..b9abfe2b 100644 --- a/gst/adpcmenc/Makefile.in +++ b/gst/adpcmenc/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in index 90abac09..e8d9968f 100644 --- a/gst/aiff/Makefile.in +++ b/gst/aiff/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in index 9c01220a..7af485ff 100644 --- a/gst/asfmux/Makefile.in +++ b/gst/asfmux/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c index 8219c6f6..128ead26 100644 --- a/gst/asfmux/gstasfmux.c +++ b/gst/asfmux/gstasfmux.c @@ -2288,7 +2288,7 @@ gst_asf_mux_request_new_pad (GstElement * element, collect_size = sizeof (GstAsfVideoPad); } collect_pad = (GstAsfPad *) - gst_collect_pads_add_pad_full (asfmux->collect, newpad, collect_size, + gst_collect_pads_add_pad (asfmux->collect, newpad, collect_size, (GstCollectDataDestroyNotify) (gst_asf_mux_pad_reset), TRUE); /* set up pad */ diff --git a/gst/asfmux/gstasfparse.c b/gst/asfmux/gstasfparse.c index 0cf2671e..25dd3e76 100644 --- a/gst/asfmux/gstasfparse.c +++ b/gst/asfmux/gstasfparse.c @@ -74,7 +74,8 @@ gst_asf_parse_sink_activate (GstPad * sinkpad, GstObject * parent) goto activate_push; } - pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL); + pull_mode = gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE); gst_query_unref (query); if (!pull_mode) diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in index b4454161..094b546a 100644 --- a/gst/audiovisualizers/Makefile.in +++ b/gst/audiovisualizers/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/audiovisualizers/README b/gst/audiovisualizers/README index 264bc4be..5fba0d81 100644 --- a/gst/audiovisualizers/README +++ b/gst/audiovisualizers/README @@ -24,11 +24,15 @@ afterwards. - would be nice to use a generic 3x3 matrix operation, we don't run inplace anyway - this way we could also blur the background + - we need to handle visualizer that don't draw with alpha: + - add API to set can_mix and if so enable shaders + - ev. do mixing ourself (needs extra buffer) = Elements to port = -gst-plugin-ugly/gst/synaestesia -> synaescope -gst-plugin-bad/gst/smoothwave -> wavescope -gst-plugin-good/gst/monoscope -> blend into what we have in wavescope +gst-plugins-ugly/gst/synaestesia -> synaescope +gst-plugins-bad/gst/smoothwave -> wavescope +gst-plugins-good/gst/monoscope -> blend into what we have in wavescope +gst-plugins-base/ext/libvisual - done = Elements to add = spectrascope - done diff --git a/gst/audiovisualizers/gstaudiovisualizer.c b/gst/audiovisualizers/gstaudiovisualizer.c index ac56a9f3..2150ecde 100644 --- a/gst/audiovisualizers/gstaudiovisualizer.c +++ b/gst/audiovisualizers/gstaudiovisualizer.c @@ -39,6 +39,10 @@ #include <string.h> +#include <gst/video/video.h> +#include <gst/video/gstvideometa.h> +#include <gst/video/gstvideopool.h> + #include "gstaudiovisualizer.h" GST_DEBUG_CATEGORY_STATIC (audio_visualizer_debug); @@ -129,232 +133,315 @@ gst_audio_visualizer_shader_get_type (void) /* we're only supporting GST_VIDEO_FORMAT_xRGB right now) */ #if G_BYTE_ORDER == G_LITTLE_ENDIAN -#define SHADE1(_d, _s, _i, _r, _g, _b) \ -G_STMT_START { \ - _d[_i] = (_s[_i] > _b) ? _s[_i] - _b : 0; \ - _i++; \ - _d[_i] = (_s[_i] > _g) ? _s[_i] - _g : 0; \ - _i++; \ - _d[_i] = (_s[_i] > _r) ? _s[_i] - _r : 0; \ - _i++; \ - _d[_i++] = 0; \ -} G_STMT_END - -#define SHADE2(_d, _s, _j, _i, _r, _g, _b) \ -G_STMT_START { \ - _d[_j++] = (_s[_i] > _b) ? _s[_i] - _b : 0; \ - _i++; \ - _d[_j++] = (_s[_i] > _g) ? _s[_i] - _g : 0; \ - _i++; \ - _d[_j++] = (_s[_i] > _r) ? _s[_i] - _r : 0; \ - _i++; \ - _d[_j++] = 0; \ - _i++; \ +#define SHADE(_d, _s, _i, _r, _g, _b) \ +G_STMT_START { \ + _d[_i * 4 + 0] = (_s[_i * 4 + 0] > _b) ? _s[_i * 4 + 0] - _b : 0; \ + _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _g) ? _s[_i * 4 + 1] - _g : 0; \ + _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _r) ? _s[_i * 4 + 2] - _r : 0; \ + _d[_i * 4 + 3] = 0; \ } G_STMT_END -#else - -#define SHADE1(_d, _s, _i, _r, _g, _b) \ -G_STMT_START { \ - _d[_i++] = 0; \ - _d[_i] = (_s[_i] > _r) ? _s[_i] - _r : 0; \ - _i++; \ - _d[_i] = (_s[_i] > _g) ? _s[_i] - _g : 0; \ - _i++; \ - _d[_i] = (_s[_i] > _b) ? _s[_i] - _b : 0; \ - _i++; \ -} G_STMT_END +#else /* G_BYTE_ORDER == G_LITTLE_ENDIAN */ -#define SHADE2(_d, _s, _j, _i, _r, _g, _b) \ -G_STMT_START { \ - _d[_j++] = 0; \ - _i++; \ - _d[_j++] = (_s[_i] > _r) ? _s[_i] - _r : 0; \ - _i++; \ - _d[_j++] = (_s[_i] > _g) ? _s[_i] - _g : 0; \ - _i++; \ - _d[_j++] = (_s[_i] > _b) ? _s[_i] - _b : 0; \ - _i++; \ +#define SHADE(_d, _s, _i, _r, _g, _b) \ +G_STMT_START { \ + _d[_i * 4 + 0] = 0; \ + _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _r) ? _s[_i * 4 + 1] - _r : 0; \ + _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _g) ? _s[_i * 4 + 2] - _g : 0; \ + _d[_i * 4 + 3] = (_s[_i * 4 + 3] > _b) ? _s[_i * 4 + 3] - _b : 0; \ } G_STMT_END #endif static void -shader_fade (GstAudioVisualizer * scope, const guint8 * s, guint8 * d) +shader_fade (GstAudioVisualizer * scope, const GstVideoFrame * sframe, + GstVideoFrame * dframe) { - guint i, bpf = scope->bpf; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; - for (i = 0; i < bpf;) { - SHADE1 (d, s, i, r, g, b); + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + for (j = 0; j < height; j++) { + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + s += ss; + d += ds; } } static void -shader_fade_and_move_up (GstAudioVisualizer * scope, const guint8 * s, - guint8 * d) +shader_fade_and_move_up (GstAudioVisualizer * scope, + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, bpf = scope->bpf; - guint bpl = 4 * scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; - for (j = 0, i = bpl; i < bpf;) { - SHADE2 (d, s, j, i, r, g, b); + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + for (j = 1; j < height; j++) { + s += ss; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + d += ds; } } static void -shader_fade_and_move_down (GstAudioVisualizer * scope, const guint8 * s, - guint8 * d) +shader_fade_and_move_down (GstAudioVisualizer * scope, + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, bpf = scope->bpf; - guint bpl = 4 * scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; - for (j = bpl, i = 0; j < bpf;) { - SHADE2 (d, s, j, i, r, g, b); + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + for (j = 1; j < height; j++) { + d += ds; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + s += ss; } } static void shader_fade_and_move_left (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, k, bpf = scope->bpf; - guint w = scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; + + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + width -= 1; + s += 4; /* move to the left */ - for (j = 0, i = 4; i < bpf;) { - for (k = 0; k < w - 1; k++) { - SHADE2 (d, s, j, i, r, g, b); + for (j = 0; j < height; j++) { + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); } - i += 4; - j += 4; + d += ds; + s += ss; } } static void shader_fade_and_move_right (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, k, bpf = scope->bpf; - guint w = scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; - /* move to the left */ - for (j = 4, i = 0; i < bpf;) { - for (k = 0; k < w - 1; k++) { - SHADE2 (d, s, j, i, r, g, b); + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + width -= 1; + d += 4; + + /* move to the right */ + for (j = 0; j < height; j++) { + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); } - i += 4; - j += 4; + d += ds; + s += ss; } } static void shader_fade_and_move_horiz_out (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, bpf = scope->bpf / 2; - guint bpl = 4 * scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; + + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); /* move upper half up */ - for (j = 0, i = bpl; i < bpf;) { - SHADE2 (d, s, j, i, r, g, b); + for (j = 0; j < height / 2; j++) { + s += ss; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + d += ds; } /* move lower half down */ - for (j = bpf + bpl, i = bpf; j < bpf + bpf;) { - SHADE2 (d, s, j, i, r, g, b); + for (j = 0; j < height / 2; j++) { + d += ds; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + s += ss; } } static void shader_fade_and_move_horiz_in (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, bpf = scope->bpf / 2; - guint bpl = 4 * scope->width; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; + guint8 *s, *d; + gint ss, ds, width, height; + + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); /* move upper half down */ - for (i = 0, j = bpl; i < bpf;) { - SHADE2 (d, s, j, i, r, g, b); + for (j = 0; j < height / 2; j++) { + d += ds; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + s += ss; } /* move lower half up */ - for (i = bpf + bpl, j = bpf; i < bpf + bpf;) { - SHADE2 (d, s, j, i, r, g, b); + for (j = 0; j < height / 2; j++) { + s += ss; + for (i = 0; i < width; i++) { + SHADE (d, s, i, r, g, b); + } + d += ds; } } static void shader_fade_and_move_vert_out (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, k, bpf = scope->bpf; - guint m = scope->width / 2; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; - - /* move left half to the left */ - for (j = 0, i = 4; i < bpf;) { - for (k = 0; k < m; k++) { - SHADE2 (d, s, j, i, r, g, b); + guint8 *s, *s1, *d, *d1; + gint ss, ds, width, height; + + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + for (j = 0; j < height; j++) { + /* move left half to the left */ + s1 = s + 1; + for (i = 0; i < width / 2; i++) { + SHADE (d, s1, i, r, g, b); } - j += 4 * m; - i += 4 * m; - } - /* move right half to the right */ - for (j = 4 * (m + 1), i = 4 * m; j < bpf;) { - for (k = 0; k < m; k++) { - SHADE2 (d, s, j, i, r, g, b); + /* move right half to the right */ + d1 = d + 1; + for (; i < width - 1; i++) { + SHADE (d1, s, i, r, g, b); } - j += 4 * m; - i += 4 * m; + s += ss; + d += ds; } } static void shader_fade_and_move_vert_in (GstAudioVisualizer * scope, - const guint8 * s, guint8 * d) + const GstVideoFrame * sframe, GstVideoFrame * dframe) { - guint i, j, k, bpf = scope->bpf; - guint m = scope->width / 2; + guint i, j; guint r = (scope->shade_amount >> 16) & 0xff; guint g = (scope->shade_amount >> 8) & 0xff; guint b = (scope->shade_amount >> 0) & 0xff; - - /* move left half to the right */ - for (j = 4, i = 0; j < bpf;) { - for (k = 0; k < m; k++) { - SHADE2 (d, s, j, i, r, g, b); + guint8 *s, *s1, *d, *d1; + gint ss, ds, width, height; + + s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0); + ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0); + d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0); + ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0); + + width = GST_VIDEO_FRAME_WIDTH (sframe); + height = GST_VIDEO_FRAME_HEIGHT (sframe); + + for (j = 0; j < height; j++) { + /* move left half to the right */ + d1 = d + 1; + for (i = 0; i < width / 2; i++) { + SHADE (d1, s, i, r, g, b); } - j += 4 * m; - i += 4 * m; - } - /* move right half to the left */ - for (j = 4 * m, i = 4 * (m + 1); i < bpf;) { - for (k = 0; k < m; k++) { - SHADE2 (d, s, j, i, r, g, b); + /* move right half to the left */ + s1 = s + 1; + for (; i < width - 1; i++) { + SHADE (d, s1, i, r, g, b); } - j += 4 * m; - i += 4 * m; + s += ss; + d += ds; } } @@ -497,10 +584,7 @@ gst_audio_visualizer_init (GstAudioVisualizer * scope, scope->shade_amount = DEFAULT_SHADE_AMOUNT; /* reset the initial video state */ - scope->width = 320; - scope->height = 200; - scope->fps_n = 25; /* desired frame rate */ - scope->fps_d = 1; + gst_video_info_init (&scope->vinfo); scope->frame_duration = GST_CLOCK_TIME_NONE; /* reset the initial state */ @@ -562,9 +646,10 @@ gst_audio_visualizer_dispose (GObject * object) gst_buffer_unref (scope->inbuf); scope->inbuf = NULL; } - if (scope->pixelbuf) { - g_free (scope->pixelbuf); - scope->pixelbuf = NULL; + if (scope->tempbuf) { + gst_video_frame_unmap (&scope->tempframe); + gst_buffer_unref (scope->tempbuf); + scope->tempbuf = NULL; } if (scope->config_lock.p) { g_mutex_clear (&scope->config_lock); @@ -616,41 +701,36 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps) { GstVideoInfo info; GstAudioVisualizerClass *klass; - GstStructure *structure; gboolean res; if (!gst_video_info_from_caps (&info, caps)) goto wrong_caps; - structure = gst_caps_get_structure (caps, 0); - if (!gst_structure_get_int (structure, "width", &scope->width) || - !gst_structure_get_int (structure, "height", &scope->height) || - !gst_structure_get_fraction (structure, "framerate", &scope->fps_n, - &scope->fps_d)) - goto wrong_caps; - klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); scope->vinfo = info; - scope->video_format = info.finfo->format; scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND, - scope->fps_d, scope->fps_n); + GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); scope->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo), - scope->fps_d, scope->fps_n); + GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info)); scope->req_spf = scope->spf; - scope->bpf = scope->width * scope->height * 4; - - if (scope->pixelbuf) - g_free (scope->pixelbuf); - scope->pixelbuf = g_malloc0 (scope->bpf); + if (scope->tempbuf) { + gst_video_frame_unmap (&scope->tempframe); + gst_buffer_unref (scope->tempbuf); + } + scope->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size), + scope->vinfo.size); + gst_video_frame_map (&scope->tempframe, &scope->vinfo, scope->tempbuf, + GST_MAP_READWRITE); if (klass->setup) res = klass->setup (scope); GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d", - scope->width, scope->height, scope->fps_n, scope->fps_d); + GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info), + GST_VIDEO_INFO_FPS_N (&info), GST_VIDEO_INFO_FPS_D (&info)); GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u", scope->spf, scope->req_spf); @@ -698,10 +778,10 @@ gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope) target = gst_caps_make_writable (target); structure = gst_caps_get_structure (target, 0); - gst_structure_fixate_field_nearest_int (structure, "width", scope->width); - gst_structure_fixate_field_nearest_int (structure, "height", scope->height); - gst_structure_fixate_field_nearest_fraction (structure, "framerate", - scope->fps_n, scope->fps_d); + gst_structure_fixate_field_nearest_int (structure, "width", 320); + gst_structure_fixate_field_nearest_int (structure, "height", 200); + gst_structure_fixate_field_nearest_fraction (structure, "framerate", 25, 1); + target = gst_caps_fixate (target); GST_DEBUG_OBJECT (scope, "final caps are %" GST_PTR_FORMAT, target); @@ -722,16 +802,17 @@ gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope) gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max); } else { pool = NULL; - size = scope->bpf; + size = 0; min = max = 0; } if (pool == NULL) { /* we did not get a pool, make one ourselves then */ - pool = gst_buffer_pool_new (); + pool = gst_video_buffer_pool_new (); } config = gst_buffer_pool_get_config (pool); + gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META); gst_buffer_pool_config_set_params (config, target, size, min, max); gst_buffer_pool_set_config (pool, config); @@ -782,15 +863,11 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, guint64 dist, ts; guint avail, sbpf; gpointer adata; - gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, - GstBuffer * video); gint bps, channels, rate; scope = GST_AUDIO_VISUALIZER (parent); klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); - render = klass->render; - GST_LOG_OBJECT (scope, "chainfunc called"); /* resync on DISCONT */ @@ -829,7 +906,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf); while (avail >= sbpf) { GstBuffer *outbuf; - GstMapInfo map; + GstVideoFrame outframe; /* get timestamp of the current adapter content */ ts = gst_adapter_prev_timestamp (scope->adapter, &dist); @@ -871,40 +948,41 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent, break; /* sync controlled properties */ - gst_object_sync_values (GST_OBJECT (scope), ts); + if (GST_CLOCK_TIME_IS_VALID (ts)) + gst_object_sync_values (GST_OBJECT (scope), ts); GST_BUFFER_TIMESTAMP (outbuf) = ts; GST_BUFFER_DURATION (outbuf) = scope->frame_duration; - gst_buffer_map (outbuf, &map, GST_MAP_WRITE); - if (scope->shader) { - memcpy (map.data, scope->pixelbuf, scope->bpf); - } else { - memset (map.data, 0, scope->bpf); - } - /* this can fail as the data size we need could have changed */ if (!(adata = (gpointer) gst_adapter_map (scope->adapter, sbpf))) break; + gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE); + + if (scope->shader) { + gst_video_frame_copy (&outframe, &scope->tempframe); + } else { + /* gst_video_frame_clear() or is output frame already cleared */ + memset (outframe.data, 0, scope->vinfo.size); + } + gst_buffer_replace_all_memory (inbuf, gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, adata, sbpf, 0, sbpf, NULL, NULL)); /* call class->render() vmethod */ - if (render) { - if (!render (scope, inbuf, outbuf)) { + if (klass->render) { + if (!klass->render (scope, inbuf, &outframe)) { ret = GST_FLOW_ERROR; } else { /* run various post processing (shading and geometri transformation */ if (scope->shader) { - scope->shader (scope, map.data, scope->pixelbuf); + scope->shader (scope, &outframe, &scope->tempframe); } } } - - gst_buffer_unmap (outbuf, &map); - gst_buffer_resize (outbuf, 0, scope->bpf); + gst_video_frame_unmap (&outframe); g_mutex_unlock (&scope->config_lock); ret = gst_pad_push (scope->srcpad, outbuf); diff --git a/gst/audiovisualizers/gstaudiovisualizer.h b/gst/audiovisualizers/gstaudiovisualizer.h index efe3a8cc..e8500079 100644 --- a/gst/audiovisualizers/gstaudiovisualizer.h +++ b/gst/audiovisualizers/gstaudiovisualizer.h @@ -37,7 +37,7 @@ G_BEGIN_DECLS typedef struct _GstAudioVisualizer GstAudioVisualizer; typedef struct _GstAudioVisualizerClass GstAudioVisualizerClass; -typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const guint8 *s, guint8 *d); +typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const GstVideoFrame *s, GstVideoFrame *d); /** * GstAudioVisualizerShader: @@ -77,7 +77,8 @@ struct _GstAudioVisualizer GstBufferPool *pool; GstAdapter *adapter; GstBuffer *inbuf; - guint8 *pixelbuf; + GstBuffer *tempbuf; + GstVideoFrame tempframe; GstAudioVisualizerShader shader_type; GstAudioVisualizerShaderFunc shader; @@ -88,23 +89,18 @@ struct _GstAudioVisualizer /* video state */ GstVideoInfo vinfo; - GstVideoFormat video_format; - gint fps_n, fps_d; - gint width; - gint height; guint64 frame_duration; - guint bpf; /* bytes per frame */ /* audio state */ GstAudioInfo ainfo; /* configuration mutex */ GMutex config_lock; - + /* QoS stuff *//* with LOCK */ gdouble proportion; GstClockTime earliest_time; - + GstSegment segment; }; @@ -116,7 +112,7 @@ struct _GstAudioVisualizerClass gboolean (*setup) (GstAudioVisualizer * scope); /* virtual function for rendering a frame */ - gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstBuffer * video); + gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstVideoFrame * video); }; GType gst_audio_visualizer_get_type (void); diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c index 7bbfa5d3..f9b2a13c 100644 --- a/gst/audiovisualizers/gstspacescope.c +++ b/gst/audiovisualizers/gstspacescope.c @@ -114,7 +114,7 @@ static void render_color_lines (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata, guint num_samples); static gboolean gst_space_scope_render (GstAudioVisualizer * scope, - GstBuffer * audio, GstBuffer * video); + GstBuffer * audio, GstVideoFrame * video); G_DEFINE_TYPE (GstSpaceScope, gst_space_scope, GST_TYPE_AUDIO_VISUALIZER); @@ -207,8 +207,8 @@ render_dots (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata, { guint i, s, x, y, ox, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo); /* draw dots 1st channel x, 2nd channel y */ dx = w / 65536.0; @@ -229,8 +229,8 @@ render_lines (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata, { guint i, s, x, y, ox, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo); gint x2, y2; /* draw lines 1st channel x, 2nd channel y */ @@ -280,8 +280,8 @@ render_color_dots (GstAudioVisualizer * base, guint32 * vdata, guint i, s; gint x, y, ox, oy; gfloat dx, dy; - gint w = base->width, w1 = w - 2; - gint h = base->height, h1 = h - 2; + gint w = GST_VIDEO_INFO_WIDTH (&base->vinfo), w1 = w - 2; + gint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2; gdouble il, ir; gdouble f1l_l = scope->f1l_l, f1l_m = scope->f1l_m, f1l_h = scope->f1l_h; gdouble f1r_l = scope->f1r_l, f1r_m = scope->f1r_m, f1r_h = scope->f1r_h; @@ -341,8 +341,8 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata, guint i, s; gint x, y, ox, oy; gfloat dx, dy; - gint w = base->width, w1 = w - 2; - gint h = base->height, h1 = h - 2; + gint w = GST_VIDEO_INFO_WIDTH (&base->vinfo), w1 = w - 2; + gint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2; gdouble il, ir; gdouble f1l_l = scope->f1l_l, f1l_m = scope->f1l_m, f1l_h = scope->f1l_h; gdouble f1r_l = scope->f1r_l, f1r_m = scope->f1r_m, f1r_h = scope->f1r_h; @@ -425,20 +425,18 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata, static gboolean gst_space_scope_render (GstAudioVisualizer * base, GstBuffer * audio, - GstBuffer * video) + GstVideoFrame * video) { GstSpaceScope *scope = GST_SPACE_SCOPE (base); - GstMapInfo vmap, amap; + GstMapInfo amap; guint num_samples; gst_buffer_map (audio, &amap, GST_MAP_READ); - gst_buffer_map (video, &vmap, GST_MAP_WRITE); num_samples = amap.size / (GST_AUDIO_INFO_CHANNELS (&base->ainfo) * sizeof (gint16)); - scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data, - num_samples); - gst_buffer_unmap (video, &vmap); + scope->process (base, (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0), + (gint16 *) amap.data, num_samples); gst_buffer_unmap (audio, &amap); return TRUE; } diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c index 430cd9e3..b96cb1a0 100644 --- a/gst/audiovisualizers/gstspectrascope.c +++ b/gst/audiovisualizers/gstspectrascope.c @@ -68,7 +68,7 @@ static void gst_spectra_scope_finalize (GObject * object); static gboolean gst_spectra_scope_setup (GstAudioVisualizer * scope); static gboolean gst_spectra_scope_render (GstAudioVisualizer * scope, - GstBuffer * audio, GstBuffer * video); + GstBuffer * audio, GstVideoFrame * video); G_DEFINE_TYPE (GstSpectraScope, gst_spectra_scope, GST_TYPE_AUDIO_VISUALIZER); @@ -122,7 +122,7 @@ static gboolean gst_spectra_scope_setup (GstAudioVisualizer * bscope) { GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope); - guint num_freq = bscope->width + 1; + guint num_freq = GST_VIDEO_INFO_WIDTH (&bscope->vinfo) + 1; if (scope->fft_ctx) gst_fft_s16_free (scope->fft_ctx); @@ -162,22 +162,21 @@ add_pixel (guint32 * _p, guint32 _c) static gboolean gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, - GstBuffer * video) + GstVideoFrame * video) { GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope); gint16 *mono_adata; GstFFTS16Complex *fdata = scope->freq_data; - guint x, y, off; - guint l, h = bscope->height - 1; + guint x, y, off, l; + guint w = GST_VIDEO_INFO_WIDTH (&bscope->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo) - 1; gfloat fr, fi; - guint w = bscope->width; - GstMapInfo amap, vmap; + GstMapInfo amap; guint32 *vdata; gint channels; gst_buffer_map (audio, &amap, GST_MAP_READ); - gst_buffer_map (video, &vmap, GST_MAP_WRITE); - vdata = (guint32 *) vmap.data; + vdata = (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0); channels = GST_AUDIO_INFO_CHANNELS (&bscope->ainfo); @@ -204,7 +203,7 @@ gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, g_free (mono_adata); /* draw lines */ - for (x = 0; x < bscope->width; x++) { + for (x = 0; x < w; x++) { /* figure out the range so that we don't need to clip, * or even better do a log mapping? */ fr = (gfloat) fdata[1 + x].r / 512.0; @@ -222,7 +221,6 @@ gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, /* ensure bottom line is full bright (especially in move-up mode) */ add_pixel (&vdata[off], 0x007F7F7F); } - gst_buffer_unmap (video, &vmap); gst_buffer_unmap (audio, &amap); return TRUE; } diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c index 9308c573..97ac8816 100644 --- a/gst/audiovisualizers/gstsynaescope.c +++ b/gst/audiovisualizers/gstsynaescope.c @@ -67,7 +67,7 @@ static void gst_synae_scope_finalize (GObject * object); static gboolean gst_synae_scope_setup (GstAudioVisualizer * scope); static gboolean gst_synae_scope_render (GstAudioVisualizer * scope, - GstBuffer * audio, GstBuffer * video); + GstBuffer * audio, GstVideoFrame * video); G_DEFINE_TYPE (GstSynaeScope, gst_synae_scope, GST_TYPE_AUDIO_VISUALIZER); @@ -152,7 +152,7 @@ static gboolean gst_synae_scope_setup (GstAudioVisualizer * bscope) { GstSynaeScope *scope = GST_SYNAE_SCOPE (bscope); - guint num_freq = bscope->height + 1; + guint num_freq = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo) + 1; if (scope->fft_ctx) gst_fft_s16_free (scope->fft_ctx); @@ -201,10 +201,10 @@ add_pixel (guint32 * _p, guint32 _c) static gboolean gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, - GstBuffer * video) + GstVideoFrame * video) { GstSynaeScope *scope = GST_SYNAE_SCOPE (bscope); - GstMapInfo amap, vmap; + GstMapInfo amap; guint32 *vdata; gint16 *adata; gint16 *adata_l = scope->adata_l; @@ -213,8 +213,8 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, GstFFTS16Complex *fdata_r = scope->freq_data_r; gint x, y; guint off; - guint w = bscope->width; - guint h = bscope->height; + guint w = GST_VIDEO_INFO_WIDTH (&bscope->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo); guint32 *colors = scope->colors, c; guint *shade = scope->shade; //guint w2 = w /2; @@ -227,10 +227,9 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, gdouble frl, fil, frr, fir; const guint sl = 30; - gst_buffer_map (video, &vmap, GST_MAP_WRITE); gst_buffer_map (audio, &amap, GST_MAP_READ); - vdata = (guint32 *) vmap.data; + vdata = (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0); adata = (gint16 *) amap.data; num_samples = amap.size / (ch * sizeof (gint16)); @@ -303,7 +302,6 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio, } } } - gst_buffer_unmap (video, &vmap); gst_buffer_unmap (audio, &amap); return TRUE; diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c index 72a0814e..e37d9285 100644 --- a/gst/audiovisualizers/gstwavescope.c +++ b/gst/audiovisualizers/gstwavescope.c @@ -116,7 +116,7 @@ static void render_color_lines (GstAudioVisualizer * base, guint32 * vdata, static gboolean gst_wave_scope_setup (GstAudioVisualizer * scope); static gboolean gst_wave_scope_render (GstAudioVisualizer * base, - GstBuffer * audio, GstBuffer * video); + GstBuffer * audio, GstVideoFrame * video); #define gst_wave_scope_parent_class parent_class G_DEFINE_TYPE (GstWaveScope, gst_wave_scope, GST_TYPE_AUDIO_VISUALIZER); @@ -240,8 +240,8 @@ render_dots (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata, gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo); guint i, c, s, x, y, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo); /* draw dots */ dx = (gfloat) w / (gfloat) num_samples; @@ -265,8 +265,8 @@ render_lines (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata, gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo); guint i, c, s, x, y, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo); gint x2, y2; /* draw lines */ @@ -310,8 +310,8 @@ render_color_dots (GstAudioVisualizer * base, guint32 * vdata, gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo); guint i, c, s, x, y, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height, h1 = h - 2; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2; gdouble *flt = scope->flt; /* draw dots */ @@ -350,8 +350,8 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata, gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo); guint i, c, s, x, y, oy; gfloat dx, dy; - guint w = base->width; - guint h = base->height, h1 = h - 2; + guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo); + guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2; gdouble *flt = scope->flt; gint x2, y2, y3, y4; @@ -403,21 +403,19 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata, static gboolean gst_wave_scope_render (GstAudioVisualizer * base, GstBuffer * audio, - GstBuffer * video) + GstVideoFrame * video) { GstWaveScope *scope = GST_WAVE_SCOPE (base); - GstMapInfo amap, vmap; + GstMapInfo amap; guint num_samples; gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo); gst_buffer_map (audio, &amap, GST_MAP_READ); - gst_buffer_map (video, &vmap, GST_MAP_WRITE); num_samples = amap.size / (channels * sizeof (gint16)); - scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data, - num_samples); + scope->process (base, (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0), + (gint16 *) amap.data, num_samples); - gst_buffer_unmap (video, &vmap); gst_buffer_unmap (audio, &amap); return TRUE; diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in index ba751d3b..2c9555c2 100644 --- a/gst/autoconvert/Makefile.in +++ b/gst/autoconvert/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c index 9669e820..5b11042a 100644 --- a/gst/autoconvert/gstautoconvert.c +++ b/gst/autoconvert/gstautoconvert.c @@ -1039,28 +1039,37 @@ gst_auto_convert_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) gst_object_unref (sub_sinkpad); gst_object_unref (subelement); - } else { - if (GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) { - GstCaps *caps; - GstCaps *accept_caps; - - gst_query_parse_accept_caps (query, &accept_caps); - caps = gst_auto_convert_getcaps (autoconvert, accept_caps, GST_PAD_SINK); - gst_query_set_accept_caps_result (query, - gst_caps_can_intersect (caps, accept_caps)); - gst_caps_unref (caps); + if (ret && GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) { + gboolean res; + gst_query_parse_accept_caps_result (query, &res); - return TRUE; + if (!res) + goto ignore_acceptcaps_failure; } + return ret; + } + +ignore_acceptcaps_failure: + + if (GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) { + GstCaps *caps; + GstCaps *accept_caps; + + gst_query_parse_accept_caps (query, &accept_caps); + + caps = gst_auto_convert_getcaps (autoconvert, accept_caps, GST_PAD_SINK); + gst_query_set_accept_caps_result (query, + gst_caps_can_intersect (caps, accept_caps)); + gst_caps_unref (caps); - GST_WARNING_OBJECT (autoconvert, "Got query %s while no element was" - " selected, letting through", - gst_query_type_get_name (GST_QUERY_TYPE (query))); - ret = gst_pad_peer_query (autoconvert->srcpad, query); + return TRUE; } - return ret; + GST_WARNING_OBJECT (autoconvert, "Got query %s while no element was" + " selected, letting through", + gst_query_type_get_name (GST_QUERY_TYPE (query))); + return gst_pad_peer_query (autoconvert->srcpad, query); } /** @@ -1297,12 +1306,13 @@ gst_auto_convert_internal_src_event (GstPad * pad, GstObject * parent, gboolean drop = FALSE; GST_AUTOCONVERT_LOCK (autoconvert); - if (autoconvert->current_internal_sinkpad != pad) { + if (autoconvert->current_internal_srcpad != pad) { drop = TRUE; } GST_AUTOCONVERT_UNLOCK (autoconvert); if (drop) { + GST_DEBUG_OBJECT (autoconvert, "Dropping event %" GST_PTR_FORMAT, event); gst_event_unref (event); return TRUE; } @@ -1318,5 +1328,15 @@ gst_auto_convert_internal_src_query (GstPad * pad, GstObject * parent, GST_AUTO_CONVERT (g_object_get_qdata (G_OBJECT (pad), parent_quark)); + if (GST_QUERY_TYPE (query) == GST_QUERY_CAPS) { + GstCaps *caps; + + caps = gst_caps_new_any (); + gst_query_set_caps_result (query, caps); + gst_caps_unref (caps); + + return TRUE; + } + return gst_pad_peer_query (autoconvert->sinkpad, query); } diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in index bdcef31f..2a310c87 100644 --- a/gst/bayer/Makefile.in +++ b/gst/bayer/Makefile.in @@ -367,6 +367,8 @@ 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@ @@ -374,6 +376,8 @@ 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@ @@ -388,7 +392,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -416,6 +419,10 @@ 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@ @@ -542,6 +549,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in index 11713827..48771a3c 100644 --- a/gst/camerabin2/Makefile.in +++ b/gst/camerabin2/Makefile.in @@ -348,6 +348,8 @@ 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@ @@ -355,6 +357,8 @@ 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@ @@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +400,10 @@ 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@ @@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 27c00c04..f7c893b6 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -390,20 +390,7 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin) if (camerabin->location) location = g_strdup_printf (camerabin->location, capture_index); - if (camerabin->mode == MODE_VIDEO) { - if (camerabin->audio_src) { - GstClock *clock = gst_pipeline_get_clock (GST_PIPELINE_CAST (camerabin)); - - gst_element_set_state (camerabin->audio_src, GST_STATE_PAUSED); - - gst_element_set_base_time (camerabin->audio_src, - gst_element_get_base_time (GST_ELEMENT_CAST (camerabin))); - if (clock) { - gst_element_set_clock (camerabin->audio_src, clock); - gst_object_unref (clock); - } - } - } else { + if (camerabin->mode == MODE_IMAGE) { /* store the next capture buffer filename */ g_mutex_lock (&camerabin->image_capture_mutex); camerabin->image_location_list = @@ -1191,13 +1178,11 @@ encodebin_element_added (GstElement * encodebin, GstElement * new_element, } } - /* TODO porting - if (gst_element_implements_interface (new_element, GST_TYPE_TAG_SETTER)) { - GstTagSetter *tagsetter = GST_TAG_SETTER (new_element); + if (GST_IS_TAG_SETTER (new_element)) { + GstTagSetter *tagsetter = GST_TAG_SETTER (new_element); - gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE); - } - */ + gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE); + } } #define VIDEO_PAD 1 @@ -1261,7 +1246,12 @@ encodebin_find_pad (GstCameraBin2 * camera, GstElement * encodebin, klass = GST_ELEMENT_GET_CLASS (encodebin); tmpl = gst_element_class_get_pad_template (klass, pad_type == VIDEO_PAD ? - "video_%d" : "audio_%d"); + "video_%u" : "audio_%u"); + + if (!tmpl) { + GST_DEBUG_OBJECT (camera, "No templates found, can't request pad"); + return NULL; + } pad = gst_element_request_pad (encodebin, tmpl, NULL, NULL); GST_DEBUG_OBJECT (camera, "Got pad: %s", pad ? GST_PAD_NAME (pad) : "null"); @@ -1444,9 +1434,9 @@ gst_camera_bin_audio_src_data_probe (GstPad * pad, GstPadProbeInfo * info, GstCameraBin2 *camera = data; gboolean ret = GST_PAD_PROBE_OK; - if (GST_IS_BUFFER (data)) { + if (GST_IS_BUFFER (info->data)) { if (G_UNLIKELY (camera->audio_send_newseg)) { - GstBuffer *buf = GST_BUFFER_CAST (data); + GstBuffer *buf = GST_BUFFER_CAST (info->data); GstClockTime ts = GST_BUFFER_TIMESTAMP (buf); GstPad *peer; GstSegment segment; diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index c263296b..042a23e1 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -280,9 +280,20 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstPadProbeInfo * info, ret = GST_PAD_PROBE_OK; } else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_FINISHING) { + GstPad *peer; + /* send eos */ GST_DEBUG_OBJECT (self, "Finishing video recording, pushing eos"); - gst_pad_push_event (pad, gst_event_new_eos ()); + + peer = gst_pad_get_peer (self->vidsrc); + + if (peer) { + /* send to the peer as we don't want our pads with eos flag */ + gst_pad_send_event (peer, gst_event_new_eos ()); + gst_object_unref (peer); + } else { + GST_WARNING_OBJECT (camerasrc, "No peer pad for vidsrc"); + } self->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE; gst_base_camera_src_finish_capture (camerasrc); } else { @@ -1055,10 +1066,6 @@ gst_wrapper_camera_bin_src_start_capture (GstBaseCameraSrc * camerasrc) g_mutex_lock (&camerasrc->capturing_mutex); gst_caps_unref (caps); gst_caps_unref (anycaps); - - /* We caught this event in the src pad event handler and now we want to - * actually push it upstream */ - gst_pad_send_event (src->outsel_vidpad, gst_event_new_reconfigure ()); } if (src->video_rec_status == GST_VIDEO_RECORDING_STATUS_DONE) { src->video_rec_status = GST_VIDEO_RECORDING_STATUS_STARTING; diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in index 4e3d614e..b73028a7 100644 --- a/gst/cdxaparse/Makefile.in +++ b/gst/cdxaparse/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in index 3558124c..e46c71bd 100644 --- a/gst/coloreffects/Makefile.in +++ b/gst/coloreffects/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in index 5d1f5447..19b7b8e6 100644 --- a/gst/dataurisrc/Makefile.in +++ b/gst/dataurisrc/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in index f838cfff..ce933a2e 100644 --- a/gst/dccp/Makefile.in +++ b/gst/dccp/Makefile.in @@ -348,6 +348,8 @@ 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@ @@ -355,6 +357,8 @@ 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@ @@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +400,10 @@ 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@ @@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in index a8f1a762..4439f1ed 100644 --- a/gst/debugutils/Makefile.in +++ b/gst/debugutils/Makefile.in @@ -361,6 +361,8 @@ 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@ @@ -368,6 +370,8 @@ 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@ @@ -382,7 +386,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -410,6 +413,10 @@ 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@ @@ -536,6 +543,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/debugutils/gstcompare.c b/gst/debugutils/gstcompare.c index f0a1b884..65a19351 100644 --- a/gst/debugutils/gstcompare.c +++ b/gst/debugutils/gstcompare.c @@ -198,9 +198,9 @@ gst_compare_init (GstCompare * comp) gst_pad_set_query_function (comp->checkpad, gst_compare_query); gst_element_add_pad (GST_ELEMENT (comp), comp->checkpad); - gst_collect_pads_add_pad_full (comp->cpads, comp->sinkpad, + gst_collect_pads_add_pad (comp->cpads, comp->sinkpad, sizeof (GstCollectData), NULL, TRUE); - gst_collect_pads_add_pad_full (comp->cpads, comp->checkpad, + gst_collect_pads_add_pad (comp->cpads, comp->checkpad, sizeof (GstCollectData), NULL, TRUE); comp->srcpad = gst_pad_new_from_static_template (&src_factory, "src"); diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in index 4d680dfe..4d070e24 100644 --- a/gst/dtmf/Makefile.in +++ b/gst/dtmf/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c index 811cc03f..2b3310e6 100644 --- a/gst/dtmf/gstdtmfsrc.c +++ b/gst/dtmf/gstdtmfsrc.c @@ -562,7 +562,7 @@ gst_dtmf_src_generate_tone (GstDTMFSrcEvent * event, DTMF_KEY key, double i = 0; double amplitude, f1, f2; double volume_factor; - static GstAllocationParams params = { 0, 0, 0, 1, }; + static GstAllocationParams params = { 0, 1, 0, 0, }; /* Create a buffer for the tone */ tone_size = ((duration / 1000) * sample_rate * SAMPLE_SIZE * CHANNELS) / 8; diff --git a/gst/dtmf/gstrtpdtmfdepay.c b/gst/dtmf/gstrtpdtmfdepay.c index 1bea4655..63494853 100644 --- a/gst/dtmf/gstrtpdtmfdepay.c +++ b/gst/dtmf/gstrtpdtmfdepay.c @@ -342,7 +342,7 @@ gst_dtmf_src_generate_tone (GstRtpDTMFDepay * rtpdtmfdepay, guint32 clock_rate = 8000 /* default */ ; GstRTPBaseDepayload *depayload = GST_RTP_BASE_DEPAYLOAD (rtpdtmfdepay); gint volume; - static GstAllocationParams params = { 0, 0, 0, 1, }; + static GstAllocationParams params = { 0, 1, 0, 0, }; clock_rate = depayload->clock_rate; diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in index 3ae4f9f8..8b5f4cab 100644 --- a/gst/dvbsuboverlay/Makefile.in +++ b/gst/dvbsuboverlay/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c index 70da0ec2..5a63a7a9 100644 --- a/gst/dvbsuboverlay/gstdvbsuboverlay.c +++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c @@ -99,7 +99,8 @@ static GstStateChangeReturn gst_dvbsub_overlay_change_state (GstElement * #define gst_dvbsub_overlay_parent_class parent_class G_DEFINE_TYPE (GstDVBSubOverlay, gst_dvbsub_overlay, GST_TYPE_ELEMENT); -static GstCaps *gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter); +static GstCaps *gst_dvbsub_overlay_getcaps (GstDVBSubOverlay * render, + GstPad * pad, GstCaps * filter); static GstFlowReturn gst_dvbsub_overlay_chain_video (GstPad * pad, GstObject * parent, GstBuffer * buf); @@ -368,14 +369,14 @@ gst_dvbsub_overlay_query_src (GstPad * pad, GstObject * parent, GstCaps *filter, *caps; gst_query_parse_caps (query, &filter); - caps = gst_dvbsub_overlay_getcaps (pad, filter); + caps = gst_dvbsub_overlay_getcaps (render, pad, filter); gst_query_set_caps_result (query, caps); gst_caps_unref (caps); ret = TRUE; break; } default: - ret = gst_pad_peer_query (render->video_sinkpad, query); + ret = gst_pad_query_default (pad, parent, query); break; } @@ -424,9 +425,9 @@ gst_dvbsub_overlay_event_src (GstPad * pad, GstObject * parent, } static GstCaps * -gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter) +gst_dvbsub_overlay_getcaps (GstDVBSubOverlay * render, GstPad * pad, + GstCaps * filter) { - GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad)); GstPad *otherpad; GstCaps *caps, *templ; @@ -453,8 +454,6 @@ gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter) caps = templ; } - gst_object_unref (render); - return caps; } @@ -725,25 +724,9 @@ gst_dvbsub_overlay_subs_to_comp (GstDVBSubOverlay * overlay, for (k = 0; k < h; k++) { for (l = 0; l < w; l++) { guint32 ayuv; - gint a, y, u, v, r, g, b; - /* convert ayuv to argb */ ayuv = palette[*in_data]; - a = ayuv >> 24; - y = (ayuv >> 16) & 0xff; - u = (ayuv >> 8) & 0xff; - v = (ayuv & 0xff); - - r = (298 * y + 459 * v - 63514) >> 8; - g = (298 * y - 55 * u - 136 * v + 19681) >> 8; - b = (298 * y + 541 * u - 73988) >> 8; - - r = CLAMP (r, 0, 255); - g = CLAMP (g, 0, 255); - b = CLAMP (b, 0, 255); - - *data = ((a << 24) | (r << 16) | (g << 8) | b); - + GST_WRITE_UINT32_BE (data, ayuv); in_data++; data++; } @@ -764,8 +747,8 @@ gst_dvbsub_overlay_subs_to_comp (GstDVBSubOverlay * overlay, rw, rh, rx, ry); gst_buffer_add_video_meta (buf, GST_VIDEO_FRAME_FLAG_NONE, - GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, w, h); - rect = gst_video_overlay_rectangle_new_argb (buf, rx, ry, rw, rh, 0); + GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV, w, h); + rect = gst_video_overlay_rectangle_new_raw (buf, rx, ry, rw, rh, 0); g_assert (rect); if (comp) { gst_video_overlay_composition_add_rectangle (comp, rect); @@ -937,6 +920,7 @@ static gboolean gst_dvbsub_overlay_query_video (GstPad * pad, GstObject * parent, GstQuery * query) { + GstDVBSubOverlay *render = (GstDVBSubOverlay *) parent; gboolean ret; switch (GST_QUERY_TYPE (query)) { @@ -945,7 +929,7 @@ gst_dvbsub_overlay_query_video (GstPad * pad, GstObject * parent, GstCaps *filter, *caps; gst_query_parse_caps (query, &filter); - caps = gst_dvbsub_overlay_getcaps (pad, filter); + caps = gst_dvbsub_overlay_getcaps (render, pad, filter); gst_query_set_caps_result (query, caps); gst_caps_unref (caps); ret = TRUE; diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in index 4b35be0a..4fbaece1 100644 --- a/gst/dvdspu/Makefile.in +++ b/gst/dvdspu/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c index 2b253d3d..41d6169c 100644 --- a/gst/dvdspu/gstdvdspu.c +++ b/gst/dvdspu/gstdvdspu.c @@ -78,7 +78,7 @@ static GstStaticPadTemplate subpic_sink_factory = GST_STATIC_PAD_TEMPLATE ("subpicture", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/x-dvd-subpicture; subpicture/x-pgs") + GST_STATIC_CAPS ("subpicture/x-dvd; subpicture/x-pgs") ); static const guint32 default_clut[16] = { @@ -380,6 +380,27 @@ gst_dvd_spu_video_proxy_getcaps (GstPad * pad, GstCaps * filter) return caps; } +/* With SPU lock held */ +static void +update_video_to_position (GstDVDSpu * dvdspu, GstClockTime new_pos) +{ + SpuState *state = &dvdspu->spu_state; +#if 0 + g_print ("Segment update for video. Advancing from %" GST_TIME_FORMAT + " to %" GST_TIME_FORMAT "\n", + GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (start)); +#endif + while (dvdspu->video_seg.position < new_pos && + !(state->flags & SPU_STATE_STILL_FRAME)) { + DVD_SPU_UNLOCK (dvdspu); + if (dvdspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) { + DVD_SPU_LOCK (dvdspu); + break; + } + DVD_SPU_LOCK (dvdspu); + } +} + static gboolean gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event) { @@ -456,20 +477,7 @@ gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event) DVD_SPU_LOCK (dvdspu); if (seg.start > dvdspu->video_seg.position) { -#if 0 - g_print ("Segment update for video. Advancing from %" GST_TIME_FORMAT - " to %" GST_TIME_FORMAT "\n", - GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (start)); -#endif - while (dvdspu->video_seg.position < seg.start && - !(state->flags & SPU_STATE_STILL_FRAME)) { - DVD_SPU_UNLOCK (dvdspu); - if (dvdspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) { - DVD_SPU_LOCK (dvdspu); - break; - } - DVD_SPU_LOCK (dvdspu); - } + update_video_to_position (dvdspu, seg.start); } dvdspu->video_seg = seg; @@ -478,6 +486,22 @@ gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event) res = gst_pad_event_default (pad, parent, event); break; } + case GST_EVENT_GAP: + { + GstClockTime timestamp, duration; + gst_event_parse_gap (event, ×tamp, &duration); + if (GST_CLOCK_TIME_IS_VALID (duration)) + timestamp += duration; + + DVD_SPU_LOCK (dvdspu); + GST_LOG_OBJECT (dvdspu, "Received GAP. Advancing to %" GST_TIME_FORMAT, + GST_TIME_ARGS (timestamp)); + update_video_to_position (dvdspu, timestamp); + DVD_SPU_UNLOCK (dvdspu); + + gst_event_unref (event); + break; + } case GST_EVENT_FLUSH_START: res = gst_pad_event_default (pad, parent, event); goto done; @@ -1117,6 +1141,22 @@ gst_dvd_spu_subpic_event (GstPad * pad, GstObject * parent, GstEvent * event) gst_event_unref (event); break; } + case GST_EVENT_GAP: + { + GstClockTime timestamp, duration; + gst_event_parse_gap (event, ×tamp, &duration); + if (GST_CLOCK_TIME_IS_VALID (duration)) + timestamp += duration; + + DVD_SPU_LOCK (dvdspu); + dvdspu->subp_seg.position = timestamp; + GST_LOG_OBJECT (dvdspu, "Received GAP. Segment now: %" GST_SEGMENT_FORMAT, + &dvdspu->subp_seg); + DVD_SPU_UNLOCK (dvdspu); + + gst_event_unref (event); + break; + } case GST_EVENT_FLUSH_START: gst_event_unref (event); goto done; @@ -1156,7 +1196,7 @@ gst_dvd_spu_subpic_set_caps (GstPad * pad, GstCaps * caps) s = gst_caps_get_structure (caps, 0); - if (gst_structure_has_name (s, "video/x-dvd-subpicture")) { + if (gst_structure_has_name (s, "subpicture/x-dvd")) { input_type = SPU_INPUT_TYPE_VOBSUB; } else if (gst_structure_has_name (s, "subpicture/x-pgs")) { input_type = SPU_INPUT_TYPE_PGS; diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in index 55f122cd..1551b906 100644 --- a/gst/faceoverlay/Makefile.in +++ b/gst/faceoverlay/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in index d3a5efd3..f7a65abe 100644 --- a/gst/festival/Makefile.in +++ b/gst/festival/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c index 08adf8c3..baf3da75 100644 --- a/gst/festival/gstfestival.c +++ b/gst/festival/gstfestival.c @@ -123,7 +123,7 @@ static GstStaticPadTemplate sink_template_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("text/plain") + GST_STATIC_CAPS ("text/x-raw, format=(string)utf8") ); static GstStaticPadTemplate src_template_factory = diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in index 0019258b..6fccdb13 100644 --- a/gst/fieldanalysis/Makefile.in +++ b/gst/fieldanalysis/Makefile.in @@ -369,6 +369,8 @@ 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@ @@ -376,6 +378,8 @@ 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@ @@ -390,7 +394,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -418,6 +421,10 @@ 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@ @@ -544,6 +551,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in index 8cbfd38c..5d274682 100644 --- a/gst/freeverb/Makefile.in +++ b/gst/freeverb/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/freeze/Makefile.in b/gst/freeze/Makefile.in index ca35249f..a862468c 100644 --- a/gst/freeze/Makefile.in +++ b/gst/freeze/Makefile.in @@ -340,6 +340,8 @@ 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@ @@ -347,6 +349,8 @@ 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@ @@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -389,6 +392,10 @@ 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@ @@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/freeze/gstfreeze.c b/gst/freeze/gstfreeze.c index f4022b86..432a0277 100644 --- a/gst/freeze/gstfreeze.c +++ b/gst/freeze/gstfreeze.c @@ -33,8 +33,6 @@ #include "config.h" #endif -#include <gst/gst.h> - #include "gstfreeze.h" GST_DEBUG_CATEGORY_STATIC (freeze_debug); @@ -63,24 +61,26 @@ static void gst_freeze_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_freeze_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static GstFlowReturn gst_freeze_chain (GstPad * pad, GstBuffer * buffer); +static GstFlowReturn gst_freeze_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); static GstStateChangeReturn gst_freeze_change_state (GstElement * element, GstStateChange transition); -static GstFlowReturn gst_freeze_play (GstPad * pad, GstBuffer * buff); -static void gst_freeze_loop (GstPad * pad); -static gboolean gst_freeze_sink_activate (GstPad * sinkpad); -static gboolean gst_freeze_sink_activate_pull (GstPad * sinkpad, - gboolean active); -static gboolean gst_freeze_sink_event (GstPad * pad, GstEvent * event); +static GstFlowReturn gst_freeze_play (GstFreeze * freeze, GstBuffer * buff); +static void gst_freeze_loop (GstFreeze * freeze); +static gboolean gst_freeze_sink_activate (GstPad * sinkpad, GstObject * parent); +static gboolean gst_freeze_sink_activate_mode (GstPad * sinkpad, + GstObject * parent, GstPadMode mode, gboolean active); +static gboolean gst_freeze_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); static void gst_freeze_clear_buffer (GstFreeze * freeze); -static void gst_freeze_buffer_free (gpointer data, gpointer user_data); -GST_BOILERPLATE (GstFreeze, gst_freeze, GstElement, GST_TYPE_ELEMENT); +G_DEFINE_TYPE (GstFreeze, gst_freeze, GST_TYPE_ELEMENT); static void -gst_freeze_base_init (gpointer klass) +gst_freeze_class_init (GstFreezeClass * klass) { + GObjectClass *object_class = G_OBJECT_CLASS (klass); GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_set_details_simple (element_class, "Stream freezer", @@ -94,14 +94,6 @@ gst_freeze_base_init (gpointer klass) gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_freeze_src_template)); -} - -static void -gst_freeze_class_init (GstFreezeClass * klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - element_class->change_state = gst_freeze_change_state; object_class->set_property = gst_freeze_set_property; object_class->get_property = gst_freeze_get_property; @@ -118,29 +110,32 @@ gst_freeze_class_init (GstFreezeClass * klass) } static void -gst_freeze_init (GstFreeze * freeze, GstFreezeClass * klass) +gst_freeze_init (GstFreeze * freeze) { freeze->sinkpad = gst_pad_new_from_static_template (&gst_freeze_sink_template, "sink"); - gst_element_add_pad (GST_ELEMENT (freeze), freeze->sinkpad); gst_pad_set_activate_function (freeze->sinkpad, gst_freeze_sink_activate); - gst_pad_set_activatepull_function (freeze->sinkpad, - gst_freeze_sink_activate_pull); + gst_pad_set_activatemode_function (freeze->sinkpad, + gst_freeze_sink_activate_mode); gst_pad_set_chain_function (freeze->sinkpad, gst_freeze_chain); - gst_pad_set_getcaps_function (freeze->sinkpad, gst_pad_proxy_getcaps); + GST_PAD_SET_PROXY_CAPS (freeze->sinkpad); + GST_PAD_SET_PROXY_ALLOCATION (freeze->sinkpad); gst_pad_set_event_function (freeze->sinkpad, gst_freeze_sink_event); + gst_element_add_pad (GST_ELEMENT (freeze), freeze->sinkpad); freeze->srcpad = gst_pad_new_from_static_template (&gst_freeze_src_template, "src"); + GST_PAD_SET_PROXY_CAPS (freeze->srcpad); + GST_PAD_SET_PROXY_ALLOCATION (freeze->srcpad); + GST_PAD_SET_PROXY_SCHEDULING (freeze->srcpad); gst_element_add_pad (GST_ELEMENT (freeze), freeze->srcpad); - gst_pad_set_getcaps_function (freeze->srcpad, gst_pad_proxy_getcaps); freeze->timestamp_offset = 0; freeze->running_time = 0; - freeze->current = NULL; + freeze->current = 0; freeze->max_buffers = 1; - freeze->on_flush = FALSE; - freeze->buffers = g_queue_new (); + freeze->buffers = g_ptr_array_new_with_free_func ( + (GDestroyNotify) gst_buffer_unref); } static void @@ -149,10 +144,9 @@ gst_freeze_dispose (GObject * object) GstFreeze *freeze = GST_FREEZE (object); gst_freeze_clear_buffer (freeze); + g_ptr_array_free (freeze->buffers, TRUE); - g_queue_free (freeze->buffers); - - G_OBJECT_CLASS (parent_class)->dispose (object); + G_OBJECT_CLASS (gst_freeze_parent_class)->dispose (object); } static void @@ -188,9 +182,11 @@ gst_freeze_get_property (GObject * object, guint prop_id, } static GstFlowReturn -gst_freeze_chain (GstPad * pad, GstBuffer * buffer) +gst_freeze_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - return gst_freeze_play (pad, buffer); + GstFreeze *freeze = GST_FREEZE (parent); + + return gst_freeze_play (freeze, buffer); } @@ -198,125 +194,105 @@ static GstStateChangeReturn gst_freeze_change_state (GstElement * element, GstStateChange transition) { GstFreeze *freeze = GST_FREEZE (element); - GstStateChangeReturn return_val = GST_STATE_CHANGE_SUCCESS; switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: - break; - case GST_STATE_CHANGE_NULL_TO_READY: - case GST_STATE_CHANGE_PAUSED_TO_PLAYING: - freeze->timestamp_offset = freeze->running_time = 0; - break; - default: - break; - } - - if (GST_ELEMENT_CLASS (parent_class)->change_state) - return_val = - GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - - switch (transition) { - case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - case GST_STATE_CHANGE_READY_TO_NULL: - break; - case GST_STATE_CHANGE_PAUSED_TO_READY: freeze->timestamp_offset = freeze->running_time = 0; break; default: break; } - return return_val; + return GST_ELEMENT_CLASS (gst_freeze_parent_class)->change_state (element, + transition); } static GstFlowReturn -gst_freeze_play (GstPad * pad, GstBuffer * buff) +gst_freeze_play (GstFreeze * freeze, GstBuffer * buf) { - GstFreeze *freeze; GstFlowReturn ret = GST_FLOW_OK; + GstBuffer *outbuf; - freeze = GST_FREEZE (gst_pad_get_parent (pad)); - - if (freeze->on_flush) { - g_object_unref (freeze); - return GST_FLOW_FLUSHING; - } - - /* If it is working in push mode this function will be called by "_chain" - and buff will never be NULL. In pull mode this function will be called - by _loop and buff will be NULL */ - if (!buff) { - ret = - gst_pad_pull_range (GST_PAD (freeze->sinkpad), freeze->offset, 4096, - &buff); - if (ret != GST_FLOW_OK) { - gst_object_unref (freeze); - return ret; - } + if (freeze->buffers->len == 0) + freeze->timestamp_offset = GST_BUFFER_TIMESTAMP (buf); - freeze->offset += GST_BUFFER_SIZE (buff); - - } - - if (g_queue_get_length (freeze->buffers) < freeze->max_buffers || - freeze->max_buffers == 0) { - g_queue_push_tail (freeze->buffers, buff); - GST_DEBUG_OBJECT (freeze, "accepted buffer %u", - g_queue_get_length (freeze->buffers) - 1); + if (freeze->buffers->len < freeze->max_buffers || freeze->max_buffers == 0) { + g_ptr_array_add (freeze->buffers, buf); + GST_DEBUG_OBJECT (freeze, "accepted buffer %u", freeze->buffers->len - 1); } else { - gst_buffer_unref (buff); + gst_buffer_unref (buf); } + outbuf = + gst_buffer_copy (g_ptr_array_index (freeze->buffers, freeze->current)); + freeze->current++; + freeze->current %= freeze->buffers->len; - if (freeze->current != NULL) { - GST_DEBUG_OBJECT (freeze, "switching to next buffer"); - freeze->current = g_queue_peek_nth (freeze->buffers, - g_queue_index (freeze->buffers, (gpointer) freeze->current) + 1); - } - - if (freeze->current == NULL) { - if (freeze->max_buffers > 1) - GST_DEBUG_OBJECT (freeze, "restarting the loop"); - freeze->current = g_queue_peek_head (freeze->buffers); - } - - GST_BUFFER_TIMESTAMP (freeze->current) = freeze->timestamp_offset + + GST_BUFFER_TIMESTAMP (outbuf) = freeze->timestamp_offset + freeze->running_time; - freeze->running_time += GST_BUFFER_DURATION (freeze->current); + freeze->running_time += GST_BUFFER_DURATION (outbuf); - gst_buffer_ref (freeze->current); - ret = gst_pad_push (freeze->srcpad, freeze->current); + ret = gst_pad_push (freeze->srcpad, outbuf); - gst_object_unref (freeze); return ret; } static void -gst_freeze_loop (GstPad * pad) +gst_freeze_loop (GstFreeze * freeze) { - gst_freeze_play (pad, NULL); + GstBuffer *buf; + GstFlowReturn ret; + + ret = gst_pad_pull_range (freeze->sinkpad, freeze->offset, 4096, &buf); + if (ret != GST_FLOW_OK) + return; + + freeze->offset += gst_buffer_get_size (buf); + + gst_freeze_play (freeze, buf); } static gboolean -gst_freeze_sink_activate (GstPad * sinkpad) +gst_freeze_sink_activate (GstPad * sinkpad, GstObject * parent) { - if (gst_pad_check_pull_range (sinkpad)) { - return gst_pad_activate_pull (sinkpad, TRUE); - } else { - return gst_pad_activate_push (sinkpad, TRUE); - } + GstQuery *query; + GstPadMode mode; + + query = gst_query_new_scheduling (); + + if (!gst_pad_peer_query (sinkpad, query)) + goto no_valid_mode; + + if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL)) + mode = GST_PAD_MODE_PULL; + else if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PUSH)) + mode = GST_PAD_MODE_PUSH; + else + goto no_valid_mode; + + gst_query_unref (query); + + return gst_pad_activate_mode (sinkpad, mode, TRUE); + +no_valid_mode: + return FALSE; } static gboolean -gst_freeze_sink_activate_pull (GstPad * sinkpad, gboolean active) +gst_freeze_sink_activate_mode (GstPad * sinkpad, GstObject * parent, + GstPadMode mode, gboolean active) { + GstFreeze *freeze = GST_FREEZE (parent); gboolean result; + if (mode != GST_PAD_MODE_PULL) + return TRUE; + if (active) { /* if we have a scheduler we can start the task */ result = gst_pad_start_task (sinkpad, - (GstTaskFunction) gst_freeze_loop, sinkpad, NULL); + (GstTaskFunction) gst_freeze_loop, freeze, NULL); } else { result = gst_pad_stop_task (sinkpad); } @@ -325,27 +301,18 @@ gst_freeze_sink_activate_pull (GstPad * sinkpad, gboolean active) } static void -gst_freeze_buffer_free (gpointer data, gpointer user_data) -{ - gst_buffer_unref (GST_BUFFER (data)); -} - -static void gst_freeze_clear_buffer (GstFreeze * freeze) { - if (freeze->buffers != NULL) { - g_queue_foreach (freeze->buffers, gst_freeze_buffer_free, NULL); - } - freeze->current = NULL; + g_ptr_array_set_size (freeze->buffers, 0); + freeze->current = 0; freeze->running_time = 0; } static gboolean -gst_freeze_sink_event (GstPad * pad, GstEvent * event) +gst_freeze_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { + GstFreeze *freeze = GST_FREEZE (parent); gboolean ret = TRUE; - GstFreeze *freeze = GST_FREEZE (gst_pad_get_parent (pad)); - switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: @@ -353,17 +320,15 @@ gst_freeze_sink_event (GstPad * pad, GstEvent * event) gst_pad_get_name (GST_PAD (freeze->sinkpad))); gst_event_unref (event); break; - case GST_EVENT_NEWSEGMENT: - /* FALL TROUGH */ + case GST_EVENT_STREAM_START: case GST_EVENT_FLUSH_STOP: gst_freeze_clear_buffer (freeze); /* FALL TROUGH */ default: - ret = gst_pad_event_default (GST_PAD (freeze->sinkpad), event); + ret = gst_pad_event_default (GST_PAD (freeze->sinkpad), parent, event); break; } - gst_object_unref (freeze); return ret; } @@ -382,12 +347,3 @@ GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, freeze, "Stream freezer", plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); - -/* - * Local variables: - * mode: c - * file-style: k&r - * c-basic-offset: 2 - * arch-tag: fb0ee62b-cf74-46c0-8e62-93b58bacc0ed - * End: - */ diff --git a/gst/freeze/gstfreeze.h b/gst/freeze/gstfreeze.h index 47cead72..6b496995 100644 --- a/gst/freeze/gstfreeze.h +++ b/gst/freeze/gstfreeze.h @@ -39,8 +39,8 @@ struct _GstFreeze GstPad *sinkpad, *srcpad; - GQueue *buffers; - GstBuffer *current; + GPtrArray *buffers; + guint current; guint max_buffers; @@ -59,11 +59,3 @@ GType gst_freeze_get_type (void); G_END_DECLS #endif -/* - * Local variables: - * mode: c - * file-style: k&r - * c-basic-offset: 2 - * arch-tag: 559a2214-86a1-4c2f-b497-bdcc5f82acf1 - * End: - */ diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in index de9f6060..3a7362b3 100644 --- a/gst/frei0r/Makefile.in +++ b/gst/frei0r/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/frei0r/gstfrei0rmixer.c b/gst/frei0r/gstfrei0rmixer.c index f9b5681e..d7c38993 100644 --- a/gst/frei0r/gstfrei0rmixer.c +++ b/gst/frei0r/gstfrei0rmixer.c @@ -735,7 +735,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass) gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink0, - sizeof (GstCollectData)); + sizeof (GstCollectData), NULL, TRUE); self->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (self->sink0); gst_pad_set_event_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink0_event)); @@ -751,7 +751,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass) gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink1, - sizeof (GstCollectData)); + sizeof (GstCollectData), NULL, TRUE); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink1); if (klass->info->plugin_type == F0R_PLUGIN_TYPE_MIXER3) { @@ -765,7 +765,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass) gst_pad_set_query_function (self->sink0, GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query)); gst_collect_pads_add_pad (self->collect, self->sink2, - sizeof (GstCollectData)); + sizeof (GstCollectData), NULL, TRUE); gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink2); } diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in index d5b47bd5..29d9fb0f 100644 --- a/gst/gaudieffects/Makefile.in +++ b/gst/gaudieffects/Makefile.in @@ -375,6 +375,8 @@ 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@ @@ -382,6 +384,8 @@ 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@ @@ -396,7 +400,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -424,6 +427,10 @@ 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@ @@ -550,6 +557,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/gdp/Makefile.am b/gst/gdp/Makefile.am new file mode 100644 index 00000000..990f967d --- /dev/null +++ b/gst/gdp/Makefile.am @@ -0,0 +1,32 @@ +plugin_LTLIBRARIES = libgstgdp.la + +libgstgdp_la_SOURCES = \ + dataprotocol.c \ + gstgdp.c \ + gstgdppay.c \ + gstgdpdepay.c + +libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) +libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) +libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static + +noinst_HEADERS = \ + dataprotocol.h \ + dp-private.h \ + gstgdppay.h \ + gstgdpdepay.h + +Android.mk: Makefile.am $(BUILT_SOURCES) + androgenizer \ + -:PROJECT libgstgdp -:SHARED libgstgdp \ + -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libgstgdp_la_SOURCES) \ + -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \ + -:LDFLAGS $(libgstgdp_la_LDFLAGS) \ + $(libgstgdp_la_LIBADD) \ + -ldl \ + -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ + LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ + > $@ diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in new file mode 100644 index 00000000..f9eafbb2 --- /dev/null +++ b/gst/gdp/Makefile.in @@ -0,0 +1,990 @@ +# 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 = gst/gdp +DIST_COMMON = README $(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 = +libgstgdp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +am_libgstgdp_la_OBJECTS = libgstgdp_la-dataprotocol.lo \ + libgstgdp_la-gstgdp.lo libgstgdp_la-gstgdppay.lo \ + libgstgdp_la-gstgdpdepay.lo +libgstgdp_la_OBJECTS = $(am_libgstgdp_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libgstgdp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(libgstgdp_la_CFLAGS) $(CFLAGS) \ + $(libgstgdp_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 = $(libgstgdp_la_SOURCES) +DIST_SOURCES = $(libgstgdp_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@ +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@ +VPX_CFLAGS = @VPX_CFLAGS@ +VPX_LIBS = @VPX_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 = libgstgdp.la +libgstgdp_la_SOURCES = \ + dataprotocol.c \ + gstgdp.c \ + gstgdppay.c \ + gstgdpdepay.c + +libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) +libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) +libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static +noinst_HEADERS = \ + dataprotocol.h \ + dp-private.h \ + gstgdppay.h \ + gstgdpdepay.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 gst/gdp/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gst/gdp/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 +libgstgdp.la: $(libgstgdp_la_OBJECTS) $(libgstgdp_la_DEPENDENCIES) $(EXTRA_libgstgdp_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstgdp_la_LINK) -rpath $(plugindir) $(libgstgdp_la_OBJECTS) $(libgstgdp_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-dataprotocol.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdppay.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 $@ $< + +libgstgdp_la-dataprotocol.lo: dataprotocol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-dataprotocol.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-dataprotocol.Tpo -c -o libgstgdp_la-dataprotocol.lo `test -f 'dataprotocol.c' || echo '$(srcdir)/'`dataprotocol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-dataprotocol.Tpo $(DEPDIR)/libgstgdp_la-dataprotocol.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dataprotocol.c' object='libgstgdp_la-dataprotocol.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-dataprotocol.lo `test -f 'dataprotocol.c' || echo '$(srcdir)/'`dataprotocol.c + +libgstgdp_la-gstgdp.lo: gstgdp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdp.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdp.Tpo -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdp.Tpo $(DEPDIR)/libgstgdp_la-gstgdp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdp.c' object='libgstgdp_la-gstgdp.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c + +libgstgdp_la-gstgdppay.lo: gstgdppay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdppay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo $(DEPDIR)/libgstgdp_la-gstgdppay.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdppay.c' object='libgstgdp_la-gstgdppay.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c + +libgstgdp_la-gstgdpdepay.lo: gstgdpdepay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdpdepay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo $(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdpdepay.c' object='libgstgdp_la-gstgdpdepay.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.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 libgstgdp -:SHARED libgstgdp \ + -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libgstgdp_la_SOURCES) \ + -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \ + -:LDFLAGS $(libgstgdp_la_LDFLAGS) \ + $(libgstgdp_la_LIBADD) \ + -ldl \ + -:PASSTHROUGH LOCAL_ARM_MODE:=arm \ + LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \ + > $@ + +# 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/gst/gdp/README b/gst/gdp/README new file mode 100644 index 00000000..6b84afc4 --- /dev/null +++ b/gst/gdp/README @@ -0,0 +1,22 @@ +Sample pipelines: +- replacing tcpserversink protocol=gdp with gdppay ! tcpserversink: + - raw audio: + - server: + gst-launch -v audiotestsrc ! gdppay version=0.2 ! tcpserversink + - client: + gst-launch -v tcpclientsrc protocol=gdp ! alsasink sync=FALSE + + - vorbis packets: + - server: + gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! gdppay version=0.2 ! tcpserversink + - client: + gst-launch -v tcpclientsrc protocol=gdp ! vorbisdec ! audioconvert ! alsasink sync=FALSE + + - ogg packets: + - server: + gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! oggmux ! gdppay version=0.2 ! tcpserversink + - client: + gst-launch -v tcpclientsrc protocol=gdp ! oggdemux ! vorbisdec ! audioconvert ! alsasink sync=FALSE + + In all the client pipelines, tcpclientsrc protocol=gdp can be replaced with + tcpclientsrc ! gdpdepay diff --git a/gst/gdp/dataprotocol.c b/gst/gdp/dataprotocol.c new file mode 100644 index 00000000..160c7916 --- /dev/null +++ b/gst/gdp/dataprotocol.c @@ -0,0 +1,742 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> + * Copyright (C) 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org> + * + * dataprotocol.c: Functions implementing the GStreamer Data Protocol + * + * 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:gstdataprotocol + * @short_description: Serialization of caps, buffers and events. + * @see_also: #GstCaps, #GstEvent, #GstBuffer + * + * This helper library provides serialization of GstBuffer, GstCaps and + * GstEvent structures. + * + * This serialization is useful when GStreamer needs to interface with + * the outside world to transport data between distinct GStreamer pipelines. + * The connections with the outside world generally don't have mechanisms + * to transport properties of these structures. + * + * For example, transporting buffers across named pipes or network connections + * doesn't maintain the buffer size and separation. + * + * This data protocol assumes a reliable connection-oriented transport, such as + * TCP, a pipe, or a file. The protocol does not serialize the caps for + * each buffer; instead, it transport the caps only when they change in the + * stream. This implies that there will always be a caps packet before any + * buffer packets. + * + * The versioning of the protocol is independent of GStreamer's version. + * The major number gets incremented, and the minor reset, for incompatible + * changes. The minor number gets incremented for compatible changes that + * allow clients who do not completely understand the newer protocol version + * to still decode what they do understand. + * + * Version 0.2 serializes only a small subset of all events, with a custom + * payload for each type. Also, all GDP streams start with the initial caps + * packet. + * + * Version 1.0 serializes all events by taking the string representation of + * the event as the payload. In addition, GDP streams can now start with + * events as well, as required by the new data stream model in GStreamer 0.10. + * + * Converting buffers, caps and events to GDP buffers is done using a + * #GstDPPacketizer object and invoking its packetizer functions. + * For backwards-compatibility reasons, the old 0.2 methods are still + * available but deprecated. + * + * For reference, this image shows the byte layout of the GDP header: + * + * <inlinegraphic format="PNG" fileref="gdp-header.png"></inlinegraphic> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gst/gst.h> +#include "dataprotocol.h" +#include <glib/gprintf.h> /* g_sprintf */ +#include <string.h> /* strlen */ +#include "dp-private.h" + +/* debug category */ +GST_DEBUG_CATEGORY_STATIC (data_protocol_debug); + +/* helper macros */ + +/* write first 6 bytes of header */ +#define GST_DP_INIT_HEADER(h, version, flags, type) \ +G_STMT_START { \ + gint maj = 0, min = 0; \ + switch (version) { \ + case GST_DP_VERSION_0_2: maj = 0; min = 2; break; \ + case GST_DP_VERSION_1_0: maj = 1; min = 0; break; \ + } \ + h[0] = (guint8) maj; \ + h[1] = (guint8) min; \ + h[2] = (guint8) flags; \ + h[3] = 0; /* padding byte */ \ + GST_WRITE_UINT16_BE (h + 4, type); \ +} G_STMT_END + +#define GST_DP_SET_CRC(h, flags, payload, length); \ +G_STMT_START { \ + guint16 crc = 0; \ + if (flags & GST_DP_HEADER_FLAG_CRC_HEADER) \ + /* we don't crc the last four bytes since they are crc's */ \ + crc = gst_dp_crc (h, 58); \ + GST_WRITE_UINT16_BE (h + 58, crc); \ + \ + crc = 0; \ + if (length && (flags & GST_DP_HEADER_FLAG_CRC_PAYLOAD)) \ + crc = gst_dp_crc (payload, length); \ + GST_WRITE_UINT16_BE (h + 60, crc); \ +} G_STMT_END + +/* calculate a CCITT 16 bit CRC check value for a given byte array */ +/* + * this code snippet is adapted from a web page I found + * it is identical except for cleanups, and a final XOR with 0xffff + * as outlined in the uecp spec + * + * XMODEM x^16 + x^12 + x^5 + 1 + */ + +#define POLY 0x1021 +#define CRC_INIT 0xFFFF + +/*** HELPER FUNCTIONS ***/ + +static gboolean +gst_dp_header_from_buffer_any (const GstBuffer * buffer, GstDPHeaderFlag flags, + guint * length, guint8 ** header, GstDPVersion version) +{ + guint8 *h; + guint16 flags_mask; + GstMapInfo map; + + g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); + g_return_val_if_fail (length, FALSE); + g_return_val_if_fail (header, FALSE); + + *length = GST_DP_HEADER_LENGTH; + h = g_malloc0 (GST_DP_HEADER_LENGTH); + + /* version, flags, type */ + GST_DP_INIT_HEADER (h, version, flags, GST_DP_PAYLOAD_BUFFER); + + gst_buffer_map ((GstBuffer *) buffer, &map, GST_MAP_READ); + + /* buffer properties */ + GST_WRITE_UINT32_BE (h + 6, map.size); + GST_WRITE_UINT64_BE (h + 10, GST_BUFFER_TIMESTAMP (buffer)); + GST_WRITE_UINT64_BE (h + 18, GST_BUFFER_DURATION (buffer)); + GST_WRITE_UINT64_BE (h + 26, GST_BUFFER_OFFSET (buffer)); + GST_WRITE_UINT64_BE (h + 34, GST_BUFFER_OFFSET_END (buffer)); + + /* data flags; eats two bytes from the ABI area */ + /* we copy everything but the read-only flags */ + flags_mask = GST_BUFFER_FLAG_LIVE | GST_BUFFER_FLAG_DISCONT | + GST_BUFFER_FLAG_HEADER | GST_BUFFER_FLAG_GAP | GST_BUFFER_FLAG_DELTA_UNIT; + + GST_WRITE_UINT16_BE (h + 42, GST_BUFFER_FLAGS (buffer) & flags_mask); + + GST_DP_SET_CRC (h, flags, map.data, map.size); + + gst_buffer_unmap ((GstBuffer *) buffer, &map); + + GST_MEMDUMP ("created header from buffer", h, GST_DP_HEADER_LENGTH); + *header = h; + return TRUE; +} + +static gboolean +gst_dp_packet_from_caps_any (const GstCaps * caps, GstDPHeaderFlag flags, + guint * length, guint8 ** header, guint8 ** payload, GstDPVersion version) +{ + guint8 *h; + guchar *string; + guint payload_length; + + g_return_val_if_fail (GST_IS_CAPS (caps), FALSE); + g_return_val_if_fail (length, FALSE); + g_return_val_if_fail (header, FALSE); + g_return_val_if_fail (payload, FALSE); + + *length = GST_DP_HEADER_LENGTH; + h = g_malloc0 (GST_DP_HEADER_LENGTH); + + string = (guchar *) gst_caps_to_string (caps); + payload_length = strlen ((gchar *) string) + 1; /* include trailing 0 */ + + /* version, flags, type */ + GST_DP_INIT_HEADER (h, version, flags, GST_DP_PAYLOAD_CAPS); + + /* buffer properties */ + GST_WRITE_UINT32_BE (h + 6, payload_length); + GST_WRITE_UINT64_BE (h + 10, (guint64) 0); + GST_WRITE_UINT64_BE (h + 18, (guint64) 0); + GST_WRITE_UINT64_BE (h + 26, (guint64) 0); + GST_WRITE_UINT64_BE (h + 34, (guint64) 0); + + GST_DP_SET_CRC (h, flags, string, payload_length); + + GST_MEMDUMP ("created header from caps", h, GST_DP_HEADER_LENGTH); + *header = h; + *payload = string; + return TRUE; +} + + +/*** PUBLIC FUNCTIONS ***/ + +static const guint16 gst_dp_crc_table[256] = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +}; + +/** + * gst_dp_crc: + * @buffer: array of bytes + * @length: the length of @buffer + * + * Calculate a CRC for the given buffer over the given number of bytes. + * This is only provided for verification purposes; typical GDP users + * will not need this function. + * + * Returns: a two-byte CRC checksum. + */ +guint16 +gst_dp_crc (const guint8 * buffer, guint length) +{ + guint16 crc_register = CRC_INIT; + + g_return_val_if_fail (buffer != NULL || length == 0, 0); + + /* calc CRC */ + for (; length--;) { + crc_register = (guint16) ((crc_register << 8) ^ + gst_dp_crc_table[((crc_register >> 8) & 0x00ff) ^ *buffer++]); + } + return (0xffff ^ crc_register); +} + +GType +gst_dp_version_get_type (void) +{ + static gsize gst_dp_version_type = 0; + static const GEnumValue gst_dp_version[] = { + {GST_DP_VERSION_0_2, "GST_DP_VERSION_0_2", "0.2"}, + {GST_DP_VERSION_1_0, "GST_DP_VERSION_1_0", "1.0"}, + {0, NULL, NULL}, + }; + + if (g_once_init_enter (&gst_dp_version_type)) { + GType tmp = g_enum_register_static ("GstDPVersion", gst_dp_version); + g_once_init_leave (&gst_dp_version_type, tmp); + } + + return (GType) gst_dp_version_type; +}; + +/** + * gst_dp_init: + * + * Initialize GStreamer Data Protocol library. + * + * Should be called before using these functions from source linking + * to this source file. + */ +void +gst_dp_init (void) +{ + static gboolean _gst_dp_initialized = FALSE; + + if (_gst_dp_initialized) + return; + + _gst_dp_initialized = TRUE; + + g_type_class_ref (gst_dp_version_get_type ()); + + GST_DEBUG_CATEGORY_INIT (data_protocol_debug, "gdp", 0, + "GStreamer Data Protocol"); +} + +/** + * gst_dp_header_payload_length: + * @header: the byte header of the packet array + * + * Get the length of the payload described by @header. + * + * Returns: the length of the payload this header describes. + */ +guint32 +gst_dp_header_payload_length (const guint8 * header) +{ + g_return_val_if_fail (header != NULL, 0); + + return GST_DP_HEADER_PAYLOAD_LENGTH (header); +} + +/** + * gst_dp_header_payload_type: + * @header: the byte header of the packet array + * + * Get the type of the payload described by @header. + * + * Returns: the #GstDPPayloadType the payload this header describes. + */ +GstDPPayloadType +gst_dp_header_payload_type (const guint8 * header) +{ + g_return_val_if_fail (header != NULL, GST_DP_PAYLOAD_NONE); + + return GST_DP_HEADER_PAYLOAD_TYPE (header); +} + +/*** PACKETIZER FUNCTIONS ***/ + +static gboolean +gst_dp_header_from_buffer_1_0 (const GstBuffer * buffer, GstDPHeaderFlag flags, + guint * length, guint8 ** header) +{ + return gst_dp_header_from_buffer_any (buffer, flags, length, header, + GST_DP_VERSION_1_0); +} + +static gboolean +gst_dp_packet_from_caps_1_0 (const GstCaps * caps, GstDPHeaderFlag flags, + guint * length, guint8 ** header, guint8 ** payload) +{ + return gst_dp_packet_from_caps_any (caps, flags, length, header, payload, + GST_DP_VERSION_1_0); +} + +static gboolean +gst_dp_packet_from_event_1_0 (const GstEvent * event, GstDPHeaderFlag flags, + guint * length, guint8 ** header, guint8 ** payload) +{ + guint8 *h; + guint32 pl_length; /* length of payload */ + guchar *string = NULL; + const GstStructure *structure; + + g_return_val_if_fail (GST_IS_EVENT (event), FALSE); + g_return_val_if_fail (length, FALSE); + g_return_val_if_fail (header, FALSE); + g_return_val_if_fail (payload, FALSE); + + *length = GST_DP_HEADER_LENGTH; + h = g_malloc0 (GST_DP_HEADER_LENGTH); + + structure = gst_event_get_structure ((GstEvent *) event); + if (structure) { + string = (guchar *) gst_structure_to_string (structure); + GST_LOG ("event %p has structure, string %s", event, string); + pl_length = strlen ((gchar *) string) + 1; /* include trailing 0 */ + } else { + GST_LOG ("event %p has no structure", event); + pl_length = 0; + } + + /* version, flags, type */ + GST_DP_INIT_HEADER (h, GST_DP_VERSION_1_0, flags, + GST_DP_PAYLOAD_EVENT_NONE + GST_EVENT_TYPE (event)); + + /* length */ + GST_WRITE_UINT32_BE (h + 6, pl_length); + /* timestamp */ + GST_WRITE_UINT64_BE (h + 10, GST_EVENT_TIMESTAMP (event)); + + GST_DP_SET_CRC (h, flags, string, pl_length); + + GST_MEMDUMP ("created header from event", h, GST_DP_HEADER_LENGTH); + *header = h; + *payload = string; + return TRUE; +} + +/*** DEPACKETIZING FUNCTIONS ***/ + +/** + * gst_dp_buffer_from_header: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * + * Creates a newly allocated #GstBuffer from the given header. + * The buffer data needs to be copied into it before validating. + * + * Use this function if you want to pre-allocate a buffer based on the + * packet header to read the packet payload in to. + * + * This function does not check the header passed to it, use + * gst_dp_validate_header() first if the header data is unchecked. + * + * Returns: A #GstBuffer if the buffer was successfully created, or NULL. + */ +GstBuffer * +gst_dp_buffer_from_header (guint header_length, const guint8 * header) +{ + GstBuffer *buffer; + + g_return_val_if_fail (header != NULL, NULL); + g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL); + g_return_val_if_fail (GST_DP_HEADER_PAYLOAD_TYPE (header) == + GST_DP_PAYLOAD_BUFFER, NULL); + + buffer = + gst_buffer_new_allocate (NULL, + (guint) GST_DP_HEADER_PAYLOAD_LENGTH (header), NULL); + + GST_BUFFER_TIMESTAMP (buffer) = GST_DP_HEADER_TIMESTAMP (header); + GST_BUFFER_DURATION (buffer) = GST_DP_HEADER_DURATION (header); + GST_BUFFER_OFFSET (buffer) = GST_DP_HEADER_OFFSET (header); + GST_BUFFER_OFFSET_END (buffer) = GST_DP_HEADER_OFFSET_END (header); + GST_BUFFER_FLAGS (buffer) = GST_DP_HEADER_BUFFER_FLAGS (header); + + return buffer; +} + +/** + * gst_dp_caps_from_packet: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * @payload: the byte array of the packet payload + * + * Creates a newly allocated #GstCaps from the given packet. + * + * This function does not check the arguments passed to it, use + * gst_dp_validate_packet() first if the header and payload data are + * unchecked. + * + * Returns: A #GstCaps containing the caps represented in the packet, + * or NULL if the packet could not be converted. + */ +GstCaps * +gst_dp_caps_from_packet (guint header_length, const guint8 * header, + const guint8 * payload) +{ + GstCaps *caps; + gchar *string; + + g_return_val_if_fail (header, NULL); + g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL); + g_return_val_if_fail (GST_DP_HEADER_PAYLOAD_TYPE (header) == + GST_DP_PAYLOAD_CAPS, NULL); + g_return_val_if_fail (payload, NULL); + + /* 0 sized payload length will work create NULL string */ + string = g_strndup ((gchar *) payload, GST_DP_HEADER_PAYLOAD_LENGTH (header)); + caps = gst_caps_from_string (string); + g_free (string); + + return caps; +} + +static GstEvent * +gst_dp_event_from_packet_0_2 (guint header_length, const guint8 * header, + const guint8 * payload) +{ + GstEvent *event = NULL; + GstEventType type; + + type = GST_DP_HEADER_PAYLOAD_TYPE (header) - GST_DP_PAYLOAD_EVENT_NONE; + switch (type) { + case GST_EVENT_UNKNOWN: + GST_WARNING ("Unknown event, ignoring"); + return NULL; + case GST_EVENT_EOS: + case GST_EVENT_FLUSH_START: + case GST_EVENT_FLUSH_STOP: + case GST_EVENT_SEGMENT: + event = gst_event_new_custom (type, NULL); + GST_EVENT_TIMESTAMP (event) = GST_DP_HEADER_TIMESTAMP (header); + break; + case GST_EVENT_SEEK: + { + gdouble rate; + GstFormat format; + GstSeekFlags flags; + GstSeekType start_type, stop_type; + gint64 start, stop; + + g_return_val_if_fail (payload != NULL, NULL); + + /* FIXME, read rate */ + rate = 1.0; + format = (GstFormat) GST_READ_UINT32_BE (payload); + flags = (GstSeekFlags) GST_READ_UINT32_BE (payload + 4); + start_type = (GstSeekType) GST_READ_UINT32_BE (payload + 8); + start = (gint64) GST_READ_UINT64_BE (payload + 12); + stop_type = (GstSeekType) GST_READ_UINT32_BE (payload + 20); + stop = (gint64) GST_READ_UINT64_BE (payload + 24); + + event = gst_event_new_seek (rate, format, flags, start_type, start, + stop_type, stop); + GST_EVENT_TIMESTAMP (event) = GST_DP_HEADER_TIMESTAMP (header); + break; + } + case GST_EVENT_QOS: + case GST_EVENT_NAVIGATION: + case GST_EVENT_TAG: + GST_WARNING ("Unhandled event type %d, ignoring", type); + return NULL; + default: + GST_WARNING ("Unknown event type %d, ignoring", type); + return NULL; + } + + return event; +} + +static GstEvent * +gst_dp_event_from_packet_1_0 (guint header_length, const guint8 * header, + const guint8 * payload) +{ + GstEvent *event = NULL; + GstEventType type; + gchar *string = NULL; + GstStructure *s = NULL; + + type = GST_DP_HEADER_PAYLOAD_TYPE (header) - GST_DP_PAYLOAD_EVENT_NONE; + if (payload) { + string = + g_strndup ((gchar *) payload, GST_DP_HEADER_PAYLOAD_LENGTH (header)); + s = gst_structure_from_string (string, NULL); + g_free (string); + } + GST_LOG ("Creating event of type 0x%x with structure '%" GST_PTR_FORMAT "'", + type, s); + event = gst_event_new_custom (type, s); + return event; +} + + +/** + * gst_dp_event_from_packet: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * @payload: the byte array of the packet payload + * + * Creates a newly allocated #GstEvent from the given packet. + * + * This function does not check the arguments passed to it, use + * gst_dp_validate_packet() first if the header and payload data are + * unchecked. + * + * Returns: A #GstEvent if the event was successfully created, + * or NULL if an event could not be read from the payload. + */ +GstEvent * +gst_dp_event_from_packet (guint header_length, const guint8 * header, + const guint8 * payload) +{ + guint8 major, minor; + + g_return_val_if_fail (header, NULL); + g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL); + + major = GST_DP_HEADER_MAJOR_VERSION (header); + minor = GST_DP_HEADER_MINOR_VERSION (header); + + if (major == 0 && minor == 2) + return gst_dp_event_from_packet_0_2 (header_length, header, payload); + else if (major == 1 && minor == 0) + return gst_dp_event_from_packet_1_0 (header_length, header, payload); + else { + GST_ERROR ("Unknown GDP version %d.%d", major, minor); + return NULL; + } +} + +/** + * gst_dp_validate_header: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * + * Validates the given packet header by checking the CRC checksum. + * + * Returns: %TRUE if the CRC matches, or no CRC checksum is present. + */ +gboolean +gst_dp_validate_header (guint header_length, const guint8 * header) +{ + guint16 crc_read, crc_calculated; + + g_return_val_if_fail (header != NULL, FALSE); + g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, FALSE); + + if (!(GST_DP_HEADER_FLAGS (header) & GST_DP_HEADER_FLAG_CRC_HEADER)) + return TRUE; + + crc_read = GST_DP_HEADER_CRC_HEADER (header); + + /* don't include the last two crc fields for the crc check */ + crc_calculated = gst_dp_crc (header, header_length - 4); + if (crc_read != crc_calculated) + goto crc_error; + + GST_LOG ("header crc validation: %02x", crc_read); + return TRUE; + + /* ERRORS */ +crc_error: + { + GST_WARNING ("header crc mismatch: read %02x, calculated %02x", crc_read, + crc_calculated); + return FALSE; + } +} + +/** + * gst_dp_validate_payload: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * @payload: the byte array of the packet payload + * + * Validates the given packet payload using the given packet header + * by checking the CRC checksum. + * + * Returns: %TRUE if the CRC matches, or no CRC checksum is present. + */ +gboolean +gst_dp_validate_payload (guint header_length, const guint8 * header, + const guint8 * payload) +{ + guint16 crc_read, crc_calculated; + + g_return_val_if_fail (header != NULL, FALSE); + g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, FALSE); + + if (!(GST_DP_HEADER_FLAGS (header) & GST_DP_HEADER_FLAG_CRC_PAYLOAD)) + return TRUE; + + crc_read = GST_DP_HEADER_CRC_PAYLOAD (header); + crc_calculated = gst_dp_crc (payload, GST_DP_HEADER_PAYLOAD_LENGTH (header)); + if (crc_read != crc_calculated) + goto crc_error; + + GST_LOG ("payload crc validation: %02x", crc_read); + return TRUE; + + /* ERRORS */ +crc_error: + { + GST_WARNING ("payload crc mismatch: read %02x, calculated %02x", crc_read, + crc_calculated); + return FALSE; + } +} + +/** + * gst_dp_validate_packet: + * @header_length: the length of the packet header + * @header: the byte array of the packet header + * @payload: the byte array of the packet payload + * + * Validates the given packet by checking version information and checksums. + * + * Returns: %TRUE if the packet validates. + */ +gboolean +gst_dp_validate_packet (guint header_length, const guint8 * header, + const guint8 * payload) +{ + if (!gst_dp_validate_header (header_length, header)) + return FALSE; + if (!gst_dp_validate_payload (header_length, header, payload)) + return FALSE; + + return TRUE; +} + +/** + * gst_dp_packetizer_new: + * @version: the #GstDPVersion of the protocol to packetize for. + * + * Creates a new packetizer. + * + * Returns: a newly allocated #GstDPPacketizer + */ +GstDPPacketizer * +gst_dp_packetizer_new (GstDPVersion version) +{ + GstDPPacketizer *ret; + + ret = g_malloc0 (sizeof (GstDPPacketizer)); + ret->version = version; + + switch (version) { + case GST_DP_VERSION_1_0: + ret->header_from_buffer = gst_dp_header_from_buffer_1_0; + ret->packet_from_caps = gst_dp_packet_from_caps_1_0; + ret->packet_from_event = gst_dp_packet_from_event_1_0; + break; + default: + g_free (ret); + ret = NULL; + break; + } + + return ret; +} + +/** + * gst_dp_packetizer_free: + * @packetizer: the #GstDPPacketizer to free. + * + * Free the given packetizer. + */ +void +gst_dp_packetizer_free (GstDPPacketizer * packetizer) +{ + g_free (packetizer); +} diff --git a/gst/gdp/dataprotocol.h b/gst/gdp/dataprotocol.h new file mode 100644 index 00000000..7ed834c6 --- /dev/null +++ b/gst/gdp/dataprotocol.h @@ -0,0 +1,174 @@ +/* GStreamer + * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu> + * Copyright (C) 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org> + * + * dataprotocol.h: Functions implementing the GStreamer Data Protocol + * + * 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_DATA_PROTOCOL_H__ +#define __GST_DATA_PROTOCOL_H__ + +#include <gst/gstbuffer.h> +#include <gst/gstevent.h> +#include <gst/gstcaps.h> + +G_BEGIN_DECLS + +/** + * GstDPVersion: + * @GST_DP_VERSION_0_2: protocol version 0.2 + * @GST_DP_VERSION_1_0: protocol version 1.0 + * + * The version of the GDP protocol being used. + */ +typedef enum { + GST_DP_VERSION_0_2 = 1, + GST_DP_VERSION_1_0, +} GstDPVersion; + +GType gst_dp_version_get_type (void); +#define GST_TYPE_DP_VERSION (gst_dp_version_get_type ()) + +/** + * GST_DP_VERSION_MAJOR: + * + * The major version number of the GStreamer Data Protocol. + */ +#define GST_DP_VERSION_MAJOR 0 +/** + * GST_DP_VERSION_MINOR: + * + * The minor version number of the GStreamer Data Protocol. + */ +#define GST_DP_VERSION_MINOR 2 + +/** + * GST_DP_HEADER_LENGTH: + * + * The header size in bytes. + */ +#define GST_DP_HEADER_LENGTH 62 + +/** + * GstDPHeaderFlag: + * @GST_DP_HEADER_FLAG_NONE: No flag present. + * @GST_DP_HEADER_FLAG_CRC_HEADER: a header CRC field is present. + * @GST_DP_HEADER_FLAG_CRC_PAYLOAD: a payload CRC field is present. + * @GST_DP_HEADER_FLAG_CRC: a CRC for header and payload is present. + * + * header flags for the dataprotocol. + */ +typedef enum { + GST_DP_HEADER_FLAG_NONE = 0, + GST_DP_HEADER_FLAG_CRC_HEADER = (1 << 0), + GST_DP_HEADER_FLAG_CRC_PAYLOAD = (1 << 1), + GST_DP_HEADER_FLAG_CRC = (1 << 1) | (1 << 0), +} GstDPHeaderFlag; + +/** + * GstDPPayloadType: + * @GST_DP_PAYLOAD_NONE: Invalid payload type. + * @GST_DP_PAYLOAD_BUFFER: #GstBuffer payload packet. + * @GST_DP_PAYLOAD_CAPS: #GstCaps payload packet. + * @GST_DP_PAYLOAD_EVENT_NONE: First value of #GstEvent payload packets. + * + * The GDP payload types. a #GstEvent payload type is encoded with the + * event type number starting from @GST_DP_PAYLOAD_EVENT_NONE. + */ +typedef enum { + GST_DP_PAYLOAD_NONE = 0, + GST_DP_PAYLOAD_BUFFER, + GST_DP_PAYLOAD_CAPS, + GST_DP_PAYLOAD_EVENT_NONE = 64, +} GstDPPayloadType; + +typedef gboolean (*GstDPHeaderFromBufferFunction) (const GstBuffer * buffer, + GstDPHeaderFlag flags, + guint * length, + guint8 ** header); +typedef gboolean (*GstDPPacketFromCapsFunction) (const GstCaps * caps, + GstDPHeaderFlag flags, + guint * length, + guint8 ** header, + guint8 ** payload); +typedef gboolean (*GstDPPacketFromEventFunction) (const GstEvent * event, + GstDPHeaderFlag flags, + guint * length, + guint8 ** header, + guint8 ** payload); + +/** + * GstDPPacketizer: + * @version: the #GstDPVersion of the protocol to be used + * @header_from_buffer: buffer serializer function + * @packet_from_caps: caps serializer function + * @packet_from_event: event serializer function + * + * Data protocol packetizer handle. + */ +typedef struct { + GstDPVersion version; + + GstDPHeaderFromBufferFunction header_from_buffer; + GstDPPacketFromCapsFunction packet_from_caps; + GstDPPacketFromEventFunction packet_from_event; + + /*< private >*/ + gpointer _gst_reserved[GST_PADDING]; +} GstDPPacketizer; + + +void gst_dp_init (void); + +/* packetizer */ +GstDPPacketizer * + gst_dp_packetizer_new (GstDPVersion version); +void gst_dp_packetizer_free (GstDPPacketizer *packetizer); + +/* crc checksum */ +guint16 gst_dp_crc (const guint8 * buffer, + guint length); + +/* payload information from header */ +guint32 gst_dp_header_payload_length (const guint8 * header); +GstDPPayloadType + gst_dp_header_payload_type (const guint8 * header); + +/* converting to GstBuffer/GstEvent/GstCaps */ +GstBuffer * gst_dp_buffer_from_header (guint header_length, + const guint8 * header); +GstCaps * gst_dp_caps_from_packet (guint header_length, + const guint8 * header, + const guint8 * payload); +GstEvent * gst_dp_event_from_packet (guint header_length, + const guint8 * header, + const guint8 * payload); + +/* validation */ +gboolean gst_dp_validate_header (guint header_length, + const guint8 * header); +gboolean gst_dp_validate_payload (guint header_length, + const guint8 * header, + const guint8 * payload); +gboolean gst_dp_validate_packet (guint header_length, + const guint8 * header, + const guint8 * payload); + +G_END_DECLS + +#endif /* __GST_DATA_PROTOCOL_H__ */ diff --git a/gst/gdp/dp-private.h b/gst/gdp/dp-private.h new file mode 100644 index 00000000..8b5214e0 --- /dev/null +++ b/gst/gdp/dp-private.h @@ -0,0 +1,53 @@ +/* GStreamer + * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> + * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org> + * + * dp-private.h: private defines/macros for dataprotocol implementation + * + * 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_DP_PRIVATE_H__ +#define __GST_DP_PRIVATE_H__ + +#include <gst/gstbuffer.h> +#include <gst/gstevent.h> +#include <gst/gstcaps.h> + +G_BEGIN_DECLS + +/* FIXME: please make the dataprotocol format typefindable in new versions */ + +/* accessor defines */ +#define GST_DP_HEADER_MAJOR_VERSION(x) ((x)[0]) +#define GST_DP_HEADER_MINOR_VERSION(x) ((x)[1]) +#define GST_DP_HEADER_FLAGS(x) ((x)[2]) +/* free byte here to align */ +#define GST_DP_HEADER_PAYLOAD_TYPE(x) GST_READ_UINT16_BE (x + 4) +#define GST_DP_HEADER_PAYLOAD_LENGTH(x) GST_READ_UINT32_BE (x + 6) +#define GST_DP_HEADER_TIMESTAMP(x) GST_READ_UINT64_BE (x + 10) +#define GST_DP_HEADER_DURATION(x) GST_READ_UINT64_BE (x + 18) +#define GST_DP_HEADER_OFFSET(x) GST_READ_UINT64_BE (x + 26) +#define GST_DP_HEADER_OFFSET_END(x) GST_READ_UINT64_BE (x + 34) +#define GST_DP_HEADER_BUFFER_FLAGS(x) GST_READ_UINT16_BE (x + 42) +#define GST_DP_HEADER_CRC_HEADER(x) GST_READ_UINT16_BE (x + 58) +#define GST_DP_HEADER_CRC_PAYLOAD(x) GST_READ_UINT16_BE (x + 60) + +void gst_dp_dump_byte_array (guint8 *array, guint length); + +G_END_DECLS + +#endif /* __GST_DP_PRIVATE_H__ */ diff --git a/gst/gdp/gstgdp.c b/gst/gdp/gstgdp.c new file mode 100644 index 00000000..a05b0bfc --- /dev/null +++ b/gst/gdp/gstgdp.c @@ -0,0 +1,46 @@ +/* GStreamer + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "dataprotocol.h" + +#include "gstgdppay.h" +#include "gstgdpdepay.h" + +static gboolean +plugin_init (GstPlugin * plugin) +{ + gst_dp_init (); + + if (!gst_gdp_depay_plugin_init (plugin)) + return FALSE; + + if (!gst_gdp_pay_plugin_init (plugin)) + return FALSE; + + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, + gdp, + "Payload/depayload GDP packets", plugin_init, + VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); diff --git a/gst/gdp/gstgdpdepay.c b/gst/gdp/gstgdpdepay.c new file mode 100644 index 00000000..4d03082e --- /dev/null +++ b/gst/gdp/gstgdpdepay.c @@ -0,0 +1,479 @@ +/* GStreamer + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +/** + * SECTION:element-gdpdepay + * @see_also: gdppay + * + * This element depayloads GStreamer Data Protocol buffers back to deserialized + * buffers and events. + * + * <refsect2> + * |[ + * gst-launch -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink + * ]| This pipeline plays back a serialized video stream as created in the + * example for gdppay. + * </refsect2> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <string.h> + +#include "dataprotocol.h" + +#include "gstgdpdepay.h" + +enum +{ + PROP_0, +}; + +static GstStaticPadTemplate gdp_depay_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gdp")); + +static GstStaticPadTemplate gdp_depay_src_template = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + +GST_DEBUG_CATEGORY_STATIC (gst_gdp_depay_debug); +#define GST_CAT_DEFAULT gst_gdp_depay_debug + +#define _do_init \ + GST_DEBUG_CATEGORY_INIT (gst_gdp_depay_debug, "gdpdepay", 0, \ + "GDP depayloader"); +#define gst_gdp_depay_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (GstGDPDepay, gst_gdp_depay, + GST_TYPE_ELEMENT, _do_init); + +static gboolean gst_gdp_depay_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_gdp_depay_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); + +static GstFlowReturn gst_gdp_depay_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); + +static GstStateChangeReturn gst_gdp_depay_change_state (GstElement * + element, GstStateChange transition); + +static void gst_gdp_depay_finalize (GObject * object); + +static void +gst_gdp_depay_class_init (GstGDPDepayClass * klass) +{ + GObjectClass *gobject_class; + GstElementClass *gstelement_class; + + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + + gst_element_class_set_static_metadata (gstelement_class, + "GDP Depayloader", "GDP/Depayloader", + "Depayloads GStreamer Data Protocol buffers", + "Thomas Vander Stichele <thomas at apestaart dot org>"); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gdp_depay_sink_template)); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gdp_depay_src_template)); + + gstelement_class->change_state = + GST_DEBUG_FUNCPTR (gst_gdp_depay_change_state); + gobject_class->finalize = gst_gdp_depay_finalize; +} + +static void +gst_gdp_depay_init (GstGDPDepay * gdpdepay) +{ + gdpdepay->sinkpad = + gst_pad_new_from_static_template (&gdp_depay_sink_template, "sink"); + gst_pad_set_chain_function (gdpdepay->sinkpad, + GST_DEBUG_FUNCPTR (gst_gdp_depay_chain)); + gst_pad_set_event_function (gdpdepay->sinkpad, + GST_DEBUG_FUNCPTR (gst_gdp_depay_sink_event)); + gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->sinkpad); + + gdpdepay->srcpad = + gst_pad_new_from_static_template (&gdp_depay_src_template, "src"); + gst_pad_set_event_function (gdpdepay->srcpad, + GST_DEBUG_FUNCPTR (gst_gdp_depay_src_event)); + /* our caps will always be decided by the incoming GDP caps buffers */ + gst_pad_use_fixed_caps (gdpdepay->srcpad); + gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->srcpad); + + gdpdepay->adapter = gst_adapter_new (); +} + +static void +gst_gdp_depay_finalize (GObject * gobject) +{ + GstGDPDepay *this; + + this = GST_GDP_DEPAY (gobject); + if (this->caps) + gst_caps_unref (this->caps); + g_free (this->header); + gst_adapter_clear (this->adapter); + g_object_unref (this->adapter); + + GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject)); +} + +static gboolean +gst_gdp_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstGDPDepay *this; + gboolean res = TRUE; + + this = GST_GDP_DEPAY (parent); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_FLUSH_START: + /* forward flush start */ + res = gst_pad_push_event (this->srcpad, event); + break; + case GST_EVENT_FLUSH_STOP: + /* clear adapter on flush */ + gst_adapter_clear (this->adapter); + /* forward flush stop */ + res = gst_pad_push_event (this->srcpad, event); + break; + case GST_EVENT_EOS: + /* after EOS, we don't expect to output anything anymore */ + res = gst_pad_push_event (this->srcpad, event); + break; + case GST_EVENT_SEGMENT: + case GST_EVENT_TAG: + case GST_EVENT_BUFFERSIZE: + default: + /* we unref most events as we take them from the datastream */ + gst_event_unref (event); + break; + } + + return res; +} + +static gboolean +gst_gdp_depay_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstGDPDepay *this; + gboolean res = TRUE; + + this = GST_GDP_DEPAY (parent); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEEK: + /* we refuse seek for now. */ + gst_event_unref (event); + res = FALSE; + break; + case GST_EVENT_QOS: + case GST_EVENT_NAVIGATION: + default: + /* everything else is passed */ + res = gst_pad_push_event (this->sinkpad, event); + break; + } + + return res; +} + +static GstFlowReturn +gst_gdp_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) +{ + GstGDPDepay *this; + GstFlowReturn ret = GST_FLOW_OK; + GstCaps *caps; + GstBuffer *buf; + GstEvent *event; + guint available; + + this = GST_GDP_DEPAY (parent); + + /* On DISCONT, get rid of accumulated data. We assume a buffer after the + * DISCONT contains (part of) a new valid header, if not we error because we + * lost sync */ + if (GST_BUFFER_IS_DISCONT (buffer)) { + gst_adapter_clear (this->adapter); + this->state = GST_GDP_DEPAY_STATE_HEADER; + } + gst_adapter_push (this->adapter, buffer); + + while (TRUE) { + switch (this->state) { + case GST_GDP_DEPAY_STATE_HEADER: + { + guint8 *header; + + /* collect a complete header, validate and store the header. Figure out + * the payload length and switch to the PAYLOAD state */ + available = gst_adapter_available (this->adapter); + if (available < GST_DP_HEADER_LENGTH) + goto done; + + GST_LOG_OBJECT (this, "reading GDP header from adapter"); + header = gst_adapter_take (this->adapter, GST_DP_HEADER_LENGTH); + if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header)) { + g_free (header); + goto header_validate_error; + } + + /* store types and payload length. Also store the header, which we need + * to make the payload. */ + this->payload_length = gst_dp_header_payload_length (header); + this->payload_type = gst_dp_header_payload_type (header); + /* free previous header and store new one. */ + g_free (this->header); + this->header = header; + + GST_LOG_OBJECT (this, + "read GDP header, payload size %d, payload type %d, switching to state PAYLOAD", + this->payload_length, this->payload_type); + this->state = GST_GDP_DEPAY_STATE_PAYLOAD; + break; + } + case GST_GDP_DEPAY_STATE_PAYLOAD: + { + /* in this state we wait for all the payload data to be available in the + * adapter. Then we switch to the state where we actually process the + * payload. */ + available = gst_adapter_available (this->adapter); + if (available < this->payload_length) + goto done; + + /* change state based on type */ + if (this->payload_type == GST_DP_PAYLOAD_BUFFER) { + GST_LOG_OBJECT (this, "switching to state BUFFER"); + this->state = GST_GDP_DEPAY_STATE_BUFFER; + } else if (this->payload_type == GST_DP_PAYLOAD_CAPS) { + GST_LOG_OBJECT (this, "switching to state CAPS"); + this->state = GST_GDP_DEPAY_STATE_CAPS; + } else if (this->payload_type >= GST_DP_PAYLOAD_EVENT_NONE) { + GST_LOG_OBJECT (this, "switching to state EVENT"); + this->state = GST_GDP_DEPAY_STATE_EVENT; + } else { + goto wrong_type; + } + + if (this->payload_length) { + const guint8 *data; + gboolean res; + + data = gst_adapter_map (this->adapter, this->payload_length); + res = gst_dp_validate_payload (GST_DP_HEADER_LENGTH, this->header, + data); + gst_adapter_unmap (this->adapter); + + if (!res) + goto payload_validate_error; + } + + break; + } + case GST_GDP_DEPAY_STATE_BUFFER: + { + /* if we receive a buffer without caps first, we error out */ + if (!this->caps) + goto no_caps; + + GST_LOG_OBJECT (this, "reading GDP buffer from adapter"); + buf = gst_dp_buffer_from_header (GST_DP_HEADER_LENGTH, this->header); + if (!buf) + goto buffer_failed; + + /* now take the payload if there is any */ + if (this->payload_length > 0) { + GstMapInfo map; + + gst_buffer_map (buf, &map, GST_MAP_WRITE); + gst_adapter_copy (this->adapter, map.data, 0, this->payload_length); + gst_buffer_unmap (buf, &map); + + gst_adapter_flush (this->adapter, this->payload_length); + } + + /* set caps and push */ + GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %" + GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT + ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT + ", size %" G_GSIZE_FORMAT ", flags 0x%x", + buf, + GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), + GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), + GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), + gst_buffer_get_size (buf), GST_BUFFER_FLAGS (buf)); + ret = gst_pad_push (this->srcpad, buf); + if (ret != GST_FLOW_OK) + goto push_error; + + GST_LOG_OBJECT (this, "switching to state HEADER"); + this->state = GST_GDP_DEPAY_STATE_HEADER; + break; + } + case GST_GDP_DEPAY_STATE_CAPS: + { + guint8 *payload; + + /* take the payload of the caps */ + GST_LOG_OBJECT (this, "reading GDP caps from adapter"); + payload = gst_adapter_take (this->adapter, this->payload_length); + caps = gst_dp_caps_from_packet (GST_DP_HEADER_LENGTH, this->header, + payload); + g_free (payload); + if (!caps) + goto caps_failed; + + GST_DEBUG_OBJECT (this, "deserialized caps %" GST_PTR_FORMAT, caps); + gst_caps_replace (&(this->caps), caps); + gst_pad_set_caps (this->srcpad, caps); + /* drop the creation ref we still have */ + gst_caps_unref (caps); + + GST_LOG_OBJECT (this, "switching to state HEADER"); + this->state = GST_GDP_DEPAY_STATE_HEADER; + break; + } + case GST_GDP_DEPAY_STATE_EVENT: + { + guint8 *payload; + + GST_LOG_OBJECT (this, "reading GDP event from adapter"); + + /* adapter doesn't like 0 length payload */ + if (this->payload_length > 0) + payload = gst_adapter_take (this->adapter, this->payload_length); + else + payload = NULL; + event = gst_dp_event_from_packet (GST_DP_HEADER_LENGTH, this->header, + payload); + g_free (payload); + if (!event) + goto event_failed; + + GST_DEBUG_OBJECT (this, "deserialized event %p of type %s, pushing", + event, gst_event_type_get_name (event->type)); + gst_pad_push_event (this->srcpad, event); + + GST_LOG_OBJECT (this, "switching to state HEADER"); + this->state = GST_GDP_DEPAY_STATE_HEADER; + break; + } + } + } + +done: + return ret; + + /* ERRORS */ +header_validate_error: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("GDP packet header does not validate")); + ret = GST_FLOW_ERROR; + goto done; + } +payload_validate_error: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("GDP packet payload does not validate")); + ret = GST_FLOW_ERROR; + goto done; + } +wrong_type: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("GDP packet header is of wrong type")); + ret = GST_FLOW_ERROR; + goto done; + } +no_caps: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("Received a buffer without first receiving caps")); + ret = GST_FLOW_NOT_NEGOTIATED; + goto done; + } +buffer_failed: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("could not create buffer from GDP packet")); + ret = GST_FLOW_ERROR; + goto done; + } +push_error: + { + GST_WARNING_OBJECT (this, "pushing depayloaded buffer returned %d", ret); + goto done; + } +caps_failed: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("could not create caps from GDP packet")); + ret = GST_FLOW_ERROR; + goto done; + } +event_failed: + { + GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL), + ("could not create event from GDP packet")); + ret = GST_FLOW_ERROR; + goto done; + } +} + +static GstStateChangeReturn +gst_gdp_depay_change_state (GstElement * element, GstStateChange transition) +{ + GstStateChangeReturn ret; + GstGDPDepay *this = GST_GDP_DEPAY (element); + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + if (this->caps) { + gst_caps_unref (this->caps); + this->caps = NULL; + } + gst_adapter_clear (this->adapter); + break; + default: + break; + } + return ret; +} + +gboolean +gst_gdp_depay_plugin_init (GstPlugin * plugin) +{ + if (!gst_element_register (plugin, "gdpdepay", GST_RANK_NONE, + GST_TYPE_GDP_DEPAY)) + return FALSE; + + return TRUE; +} diff --git a/gst/gdp/gstgdpdepay.h b/gst/gdp/gstgdpdepay.h new file mode 100644 index 00000000..64b7db24 --- /dev/null +++ b/gst/gdp/gstgdpdepay.h @@ -0,0 +1,82 @@ +/* GStreamer + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +#ifndef __GST_GDP_DEPAY_H__ +#define __GST_GDP_DEPAY_H__ + +#include <gst/gst.h> +#include <gst/base/gstadapter.h> + +G_BEGIN_DECLS + +#define GST_TYPE_GDP_DEPAY \ + (gst_gdp_depay_get_type()) +#define GST_GDP_DEPAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_DEPAY,GstGDPDepay)) +#define GST_GDP_DEPAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_DEPAY,GstGDPDepayClass)) +#define GST_IS_GDP_DEPAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_DEPAY)) +#define GST_IS_GDP_DEPAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_DEPAY)) + +typedef enum { + GST_GDP_DEPAY_STATE_HEADER = 0, + GST_GDP_DEPAY_STATE_PAYLOAD, + GST_GDP_DEPAY_STATE_BUFFER, + GST_GDP_DEPAY_STATE_CAPS, + GST_GDP_DEPAY_STATE_EVENT, +} GstGDPDepayState; + + +typedef struct _GstGDPDepay GstGDPDepay; +typedef struct _GstGDPDepayClass GstGDPDepayClass; + +/** + * GstGDPDepay: + * + * Private gdpdepay element structure. + */ +struct _GstGDPDepay +{ + GstElement element; + GstPad *sinkpad; + GstPad *srcpad; + + GstAdapter *adapter; + GstGDPDepayState state; + GstCaps *caps; + + guint8 *header; + guint32 payload_length; + GstDPPayloadType payload_type; +}; + +struct _GstGDPDepayClass +{ + GstElementClass parent_class; +}; + +gboolean gst_gdp_depay_plugin_init (GstPlugin * plugin); + +GType gst_gdp_depay_get_type (void); + +G_END_DECLS + +#endif /* __GST_GDP_DEPAY_H__ */ diff --git a/gst/gdp/gstgdppay.c b/gst/gdp/gstgdppay.c new file mode 100644 index 00000000..d26c0a3c --- /dev/null +++ b/gst/gdp/gstgdppay.c @@ -0,0 +1,864 @@ +/* GStreamer + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +/** + * SECTION:element-gdppay + * @see_also: gdpdepay + * + * This element payloads GStreamer buffers and events using the + * GStreamer Data Protocol. + * + * <refsect2> + * |[ + * gst-launch -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp + * ]| This pipeline creates a serialized video stream that can be played back + * with the example shown in gdpdepay. + * </refsect2> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "dataprotocol.h" + +#include "gstgdppay.h" + +static GstStaticPadTemplate gdp_pay_sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + +static GstStaticPadTemplate gdp_pay_src_template = +GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gdp")); + +GST_DEBUG_CATEGORY_STATIC (gst_gdp_pay_debug); +#define GST_CAT_DEFAULT gst_gdp_pay_debug + +#define DEFAULT_CRC_HEADER TRUE +#define DEFAULT_CRC_PAYLOAD FALSE +#define DEFAULT_VERSION GST_DP_VERSION_1_0 + +enum +{ + PROP_0, + PROP_CRC_HEADER, + PROP_CRC_PAYLOAD, + PROP_VERSION, +}; + +#define _do_init \ + GST_DEBUG_CATEGORY_INIT (gst_gdp_pay_debug, "gdppay", 0, \ + "GDP payloader"); +#define gst_gdp_pay_parent_class parent_class +G_DEFINE_TYPE_WITH_CODE (GstGDPPay, gst_gdp_pay, GST_TYPE_ELEMENT, _do_init); + +static void gst_gdp_pay_reset (GstGDPPay * this); + +static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); +static gboolean gst_gdp_pay_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean gst_gdp_pay_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); + +static GstStateChangeReturn gst_gdp_pay_change_state (GstElement * + element, GstStateChange transition); + +static void gst_gdp_pay_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec); +static void gst_gdp_pay_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec); + +static void gst_gdp_pay_finalize (GObject * gobject); + +static void +gst_gdp_pay_class_init (GstGDPPayClass * klass) +{ + GObjectClass *gobject_class; + GstElementClass *gstelement_class; + + gobject_class = (GObjectClass *) klass; + gstelement_class = (GstElementClass *) klass; + + gobject_class->set_property = gst_gdp_pay_set_property; + gobject_class->get_property = gst_gdp_pay_get_property; + gobject_class->finalize = gst_gdp_pay_finalize; + + g_object_class_install_property (gobject_class, PROP_CRC_HEADER, + g_param_spec_boolean ("crc-header", "CRC Header", + "Calculate and store a CRC checksum on the header", + DEFAULT_CRC_HEADER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_CRC_PAYLOAD, + g_param_spec_boolean ("crc-payload", "CRC Payload", + "Calculate and store a CRC checksum on the payload", + DEFAULT_CRC_PAYLOAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_VERSION, + g_param_spec_enum ("version", "Version", + "Version of the GStreamer Data Protocol", + GST_TYPE_DP_VERSION, DEFAULT_VERSION, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + gst_element_class_set_static_metadata (gstelement_class, + "GDP Payloader", "GDP/Payloader", + "Payloads GStreamer Data Protocol buffers", + "Thomas Vander Stichele <thomas at apestaart dot org>"); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gdp_pay_sink_template)); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gdp_pay_src_template)); + + gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_gdp_pay_change_state); +} + +static void +gst_gdp_pay_init (GstGDPPay * gdppay) +{ + gdppay->sinkpad = + gst_pad_new_from_static_template (&gdp_pay_sink_template, "sink"); + gst_pad_set_chain_function (gdppay->sinkpad, + GST_DEBUG_FUNCPTR (gst_gdp_pay_chain)); + gst_pad_set_event_function (gdppay->sinkpad, + GST_DEBUG_FUNCPTR (gst_gdp_pay_sink_event)); + gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->sinkpad); + + gdppay->srcpad = + gst_pad_new_from_static_template (&gdp_pay_src_template, "src"); + gst_pad_set_event_function (gdppay->srcpad, + GST_DEBUG_FUNCPTR (gst_gdp_pay_src_event)); + gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->srcpad); + + gdppay->crc_header = DEFAULT_CRC_HEADER; + gdppay->crc_payload = DEFAULT_CRC_PAYLOAD; + gdppay->header_flag = gdppay->crc_header | gdppay->crc_payload; + gdppay->version = DEFAULT_VERSION; + gdppay->offset = 0; + + gdppay->packetizer = gst_dp_packetizer_new (gdppay->version); +} + +static void +gst_gdp_pay_finalize (GObject * gobject) +{ + GstGDPPay *this = GST_GDP_PAY (gobject); + + gst_gdp_pay_reset (this); + gst_dp_packetizer_free (this->packetizer); + + GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject)); +} + +static void +gst_gdp_pay_reset (GstGDPPay * this) +{ + GST_DEBUG_OBJECT (this, "Resetting GDP object"); + /* clear the queued buffers */ + while (this->queue) { + GstBuffer *buffer; + + buffer = GST_BUFFER_CAST (this->queue->data); + + /* delete buffer from queue now */ + this->queue = g_list_delete_link (this->queue, this->queue); + + gst_buffer_unref (buffer); + } + if (this->caps) { + gst_caps_unref (this->caps); + this->caps = NULL; + } + if (this->caps_buf) { + gst_buffer_unref (this->caps_buf); + this->caps_buf = NULL; + } + if (this->tag_buf) { + gst_buffer_unref (this->tag_buf); + this->tag_buf = NULL; + } + if (this->new_segment_buf) { + gst_buffer_unref (this->new_segment_buf); + this->new_segment_buf = NULL; + } + this->sent_streamheader = FALSE; + this->offset = 0; +} + +/* set OFFSET and OFFSET_END with running count */ +static void +gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer) +{ + GST_BUFFER_OFFSET (buffer) = this->offset; + GST_BUFFER_OFFSET_END (buffer) = this->offset + gst_buffer_get_size (buffer); + this->offset = GST_BUFFER_OFFSET_END (buffer); +} + +static GstBuffer * +gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps) +{ + GstBuffer *headerbuf; + GstBuffer *payloadbuf; + guint8 *header, *payload; + guint len, plen; + + if (!this->packetizer->packet_from_caps (caps, this->header_flag, &len, + &header, &payload)) + goto packet_failed; + + GST_LOG_OBJECT (this, "creating GDP header and payload buffer from caps"); + headerbuf = gst_buffer_new_wrapped (header, len); + + plen = gst_dp_header_payload_length (header); + payloadbuf = gst_buffer_new_wrapped (payload, plen); + + return gst_buffer_append (headerbuf, payloadbuf); + + /* ERRORS */ +packet_failed: + { + GST_WARNING_OBJECT (this, "could not create GDP header from caps"); + return NULL; + } +} + +static GstBuffer * +gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer) +{ + GstBuffer *headerbuf; + guint8 *header; + guint len; + + if (!this->packetizer->header_from_buffer (buffer, this->header_flag, &len, + &header)) + goto no_buffer; + + GST_LOG_OBJECT (this, "creating GDP header and payload buffer from buffer"); + headerbuf = gst_buffer_new_wrapped (header, len); + + /* we do not want to lose the ref on the incoming buffer */ + gst_buffer_ref (buffer); + + return gst_buffer_append (headerbuf, buffer); + + /* ERRORS */ +no_buffer: + { + GST_WARNING_OBJECT (this, "could not create GDP header from buffer"); + return NULL; + } +} + +static GstBuffer * +gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event) +{ + GstBuffer *headerbuf; + GstBuffer *payloadbuf; + guint8 *header, *payload; + guint len, plen; + gboolean ret; + + ret = + this->packetizer->packet_from_event (event, this->header_flag, &len, + &header, &payload); + if (!ret) + goto no_event; + + GST_LOG_OBJECT (this, "creating GDP header and payload buffer from event"); + headerbuf = gst_buffer_new_wrapped (header, len); + + payloadbuf = gst_buffer_new (); + plen = gst_dp_header_payload_length (header); + if (plen && payload != NULL) { + gst_buffer_append_memory (payloadbuf, + gst_memory_new_wrapped (0, payload, plen, 0, plen, payload, g_free)); + } + + return gst_buffer_append (headerbuf, payloadbuf); + + /* ERRORS */ +no_event: + { + GST_WARNING_OBJECT (this, "could not create GDP header from event %s (%d)", + gst_event_type_get_name (event->type), event->type); + return NULL; + } +} + + +/* set our caps with streamheader, based on the latest newsegment and caps, + * and (possibly) GDP-serialized buffers of the streamheaders on the src pad */ +static GstFlowReturn +gst_gdp_pay_reset_streamheader (GstGDPPay * this) +{ + GstCaps *caps; + /* We use copies of these to avoid circular refcounts */ + GstBuffer *new_segment_buf, *caps_buf, *tag_buf; + GstStructure *structure; + GstFlowReturn r = GST_FLOW_OK; + gboolean version_one_zero = TRUE; + + GValue array = { 0 }; + GValue value = { 0 }; + + GST_DEBUG_OBJECT (this, "start"); + /* In version 0.2, we didn't need or send new segment or tags */ + if (this->version == GST_DP_VERSION_0_2) + version_one_zero = FALSE; + + if (version_one_zero) { + if (!this->new_segment_buf || !this->caps_buf) { + GST_DEBUG_OBJECT (this, "1.0, missing new_segment or caps, returning"); + return GST_FLOW_OK; + } + } else { + if (!this->caps_buf) { + GST_DEBUG_OBJECT (this, "0.2, missing caps, returning"); + return GST_FLOW_OK; + } + } + + /* put copies of the buffers in a fixed list + * Stamp the buffers with offset and offset_end as well. + * We do this here so the offsets match the order the buffers go out in */ + g_value_init (&array, GST_TYPE_ARRAY); + + if (version_one_zero) { + gst_gdp_stamp_buffer (this, this->new_segment_buf); + GST_DEBUG_OBJECT (this, "1.0, appending copy of new segment buffer %p", + this->new_segment_buf); + new_segment_buf = gst_buffer_copy (this->new_segment_buf); + g_value_init (&value, GST_TYPE_BUFFER); + gst_value_set_buffer (&value, new_segment_buf); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_buffer_unref (new_segment_buf); + + if (this->tag_buf) { + gst_gdp_stamp_buffer (this, this->tag_buf); + GST_DEBUG_OBJECT (this, "1.0, appending current tags buffer %p", + this->tag_buf); + tag_buf = this->tag_buf; + this->tag_buf = NULL; + + g_value_init (&value, GST_TYPE_BUFFER); + gst_value_set_buffer (&value, tag_buf); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_buffer_unref (tag_buf); + } + } + + gst_gdp_stamp_buffer (this, this->caps_buf); + GST_DEBUG_OBJECT (this, "appending copy of caps buffer %p", this->caps_buf); + caps_buf = gst_buffer_copy (this->caps_buf); + g_value_init (&value, GST_TYPE_BUFFER); + gst_value_set_buffer (&value, caps_buf); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_buffer_unref (caps_buf); + + /* we also need to add GDP serializations of the streamheaders of the + * incoming caps */ + structure = gst_caps_get_structure (this->caps, 0); + if (gst_structure_has_field (structure, "streamheader")) { + const GValue *sh; + + GArray *buffers; + + GstBuffer *buffer; + + int i; + + sh = gst_structure_get_value (structure, "streamheader"); + buffers = g_value_peek_pointer (sh); + GST_DEBUG_OBJECT (this, + "Need to serialize %d incoming streamheader buffers on ours", + buffers->len); + for (i = 0; i < buffers->len; ++i) { + GValue *bufval; + + GstBuffer *outbuffer; + + bufval = &g_array_index (buffers, GValue, i); + buffer = g_value_peek_pointer (bufval); + /* this buffer is deserialized by gdpdepay as a regular buffer, + it needs HEADER, because it's a streamheader - otherwise it + is mixed with regular data buffers */ + GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_HEADER); + GST_BUFFER_OFFSET (buffer) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_TIMESTAMP (buffer) = GST_CLOCK_TIME_NONE; + + outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer); + if (!outbuffer) { + g_value_unset (&array); + goto no_buffer; + } + + /* Setting HEADER as other GDP event buffers */ + GST_DEBUG_OBJECT (this, + "Setting HEADER flag on outgoing buffer %" GST_PTR_FORMAT, outbuffer); + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + GST_BUFFER_OFFSET (outbuffer) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_OFFSET_END (outbuffer) = GST_BUFFER_OFFSET_NONE; + GST_BUFFER_TIMESTAMP (outbuffer) = GST_CLOCK_TIME_NONE; + + g_value_init (&value, GST_TYPE_BUFFER); + gst_value_set_buffer (&value, outbuffer); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + + gst_buffer_unref (outbuffer); + } + } else { + GST_DEBUG_OBJECT (this, "no streamheader to serialize"); + } + + GST_DEBUG_OBJECT (this, "%d serialized buffers on streamheaders", + gst_value_array_get_size (&array)); + caps = gst_caps_from_string ("application/x-gdp"); + structure = gst_caps_get_structure (caps, 0); + + gst_structure_set_value (structure, "streamheader", &array); + g_value_unset (&array); + + GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps); + gst_pad_set_caps (this->srcpad, caps); + + /* if these are our first ever buffers, send out new_segment first */ + if (!this->sent_streamheader) { + GstEvent *event; + GstSegment segment; + + gst_segment_init (&segment, GST_FORMAT_BYTES); + event = gst_event_new_segment (&segment); + + GST_DEBUG_OBJECT (this, "Sending out new_segment event %p", event); + if (!gst_pad_push_event (this->srcpad, event)) { + GST_WARNING_OBJECT (this, "pushing new segment failed"); + r = GST_FLOW_ERROR; + goto done; + } + } + + /* push out these streamheader buffers, then flush our internal queue */ + GST_DEBUG_OBJECT (this, "Pushing GDP new_segment buffer %p with offset %" + G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, this->new_segment_buf, + GST_BUFFER_OFFSET (this->new_segment_buf), + GST_BUFFER_OFFSET_END (this->new_segment_buf)); + /* we stored these bufs with refcount 1, so make sure we keep a ref */ + r = gst_pad_push (this->srcpad, gst_buffer_ref (this->new_segment_buf)); + if (r != GST_FLOW_OK) { + GST_WARNING_OBJECT (this, "pushing GDP newsegment buffer returned %d", r); + goto done; + } + if (this->tag_buf) { + GST_DEBUG_OBJECT (this, "Pushing GDP tag buffer %p", this->tag_buf); + /* we stored these bufs with refcount 1, so make sure we keep a ref */ + r = gst_pad_push (this->srcpad, gst_buffer_ref (this->tag_buf)); + if (r != GST_FLOW_OK) { + GST_WARNING_OBJECT (this, "pushing GDP tag buffer returned %d", r); + goto done; + } + } + GST_DEBUG_OBJECT (this, "Pushing GDP caps buffer %p", this->caps_buf); + r = gst_pad_push (this->srcpad, gst_buffer_ref (this->caps_buf)); + if (r != GST_FLOW_OK) { + GST_WARNING_OBJECT (this, "pushing GDP caps buffer returned %d", r); + goto done; + } + this->sent_streamheader = TRUE; + GST_DEBUG_OBJECT (this, "need to push %d queued buffers", + g_list_length (this->queue)); + while (this->queue) { + GstBuffer *buffer; + + buffer = GST_BUFFER_CAST (this->queue->data); + GST_DEBUG_OBJECT (this, "Pushing queued GDP buffer %p", buffer); + + /* delete buffer from queue now */ + this->queue = g_list_delete_link (this->queue, this->queue); + + /* set caps and push */ + r = gst_pad_push (this->srcpad, buffer); + if (r != GST_FLOW_OK) { + GST_WARNING_OBJECT (this, "pushing queued GDP buffer returned %d", r); + goto done; + } + } + +done: + gst_caps_unref (caps); + GST_DEBUG_OBJECT (this, "stop"); + return r; + + /* ERRORS */ +no_buffer: + { + GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL), + ("failed to create GDP buffer from streamheader")); + return GST_FLOW_ERROR; + } +} + +/* queue a buffer internally if we haven't sent streamheader buffers yet; + * otherwise, just push on, this takes ownership of the buffer. */ +static GstFlowReturn +gst_gdp_queue_buffer (GstGDPPay * this, GstBuffer * buffer) +{ + if (this->sent_streamheader) { + GST_LOG_OBJECT (this, "Pushing GDP buffer %p, caps %" GST_PTR_FORMAT, + buffer, this->caps); + return gst_pad_push (this->srcpad, buffer); + } + + /* store it on an internal queue. buffer remains reffed. */ + this->queue = g_list_append (this->queue, buffer); + GST_DEBUG_OBJECT (this, "streamheader not sent yet, " + "queued buffer %p, now %d buffers queued", + buffer, g_list_length (this->queue)); + + gst_gdp_pay_reset_streamheader (this); + + return GST_FLOW_OK; +} + +static GstFlowReturn +gst_gdp_pay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) +{ + GstGDPPay *this; +#if 0 + GstCaps *caps; +#endif + GstBuffer *outbuffer; + GstFlowReturn ret; + + this = GST_GDP_PAY (parent); + + /* we should have received a new_segment before, otherwise it's a bug. + * fake one in that case */ + if (!this->new_segment_buf) { + GstEvent *event; + GstSegment segment; + + GST_WARNING_OBJECT (this, + "did not receive new-segment before first buffer"); + gst_segment_init (&segment, GST_FORMAT_BYTES); + event = gst_event_new_segment (&segment); + outbuffer = gst_gdp_buffer_from_event (this, event); + gst_event_unref (event); + + /* GDP 0.2 doesn't know about new-segment, so this is not fatal */ + if (!outbuffer) { + GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL), + ("Could not create GDP buffer from new segment event")); + } else { + GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer); + GST_BUFFER_DURATION (outbuffer) = 0; + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + GST_DEBUG_OBJECT (this, "Storing buffer %p as new_segment_buf", + outbuffer); + this->new_segment_buf = outbuffer; + } + } + /* make sure we've received caps before */ + if (!this->caps) + goto no_caps; + + /* create a GDP header packet, + * then create a GST buffer of the header packet and the buffer contents */ + outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer); + if (!outbuffer) + goto no_buffer; + + /* If the incoming buffer is HEADER, that means we have it on the caps + * as streamheader, and we have serialized a GDP version of it and put it + * on our caps */ + if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_HEADER)) { + GST_DEBUG_OBJECT (this, "Setting HEADER flag on outgoing buffer %p", + outbuffer); + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + } + + gst_gdp_stamp_buffer (this, outbuffer); + GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer); + GST_BUFFER_DURATION (outbuffer) = GST_BUFFER_DURATION (buffer); + + ret = gst_gdp_queue_buffer (this, outbuffer); + +done: + gst_buffer_unref (buffer); + + return ret; + + /* ERRORS */ +no_caps: + { + /* when returning a fatal error as a GstFlowReturn we must post an error + * message */ + GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL), + ("first received buffer does not have caps set")); + ret = GST_FLOW_NOT_NEGOTIATED; + goto done; + } +#if 0 +no_caps_buffer: + { + GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL), + ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps)); + gst_caps_unref (caps); + ret = GST_FLOW_ERROR; + goto done; + } +#endif +no_buffer: + { + GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL), + ("Could not create GDP buffer from buffer")); + ret = GST_FLOW_ERROR; + goto done; + } +} + +static gboolean +gst_gdp_pay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstBuffer *outbuffer; + GstGDPPay *this = GST_GDP_PAY (parent); + GstFlowReturn flowret; + GstCaps *caps; + gboolean ret = TRUE; + + GST_DEBUG_OBJECT (this, "received event %p of type %s (%d)", + event, gst_event_type_get_name (event->type), event->type); + + /* now turn the event into a buffer */ + outbuffer = gst_gdp_buffer_from_event (this, event); + if (!outbuffer) + goto no_outbuffer; + + GST_BUFFER_TIMESTAMP (outbuffer) = GST_EVENT_TIMESTAMP (event); + GST_BUFFER_DURATION (outbuffer) = 0; + + /* if we got a new segment or tag event, we should put it on our streamheader, + * and not send it on */ + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEGMENT: + GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as new_segment_buf", + outbuffer); + + if (this->new_segment_buf) + gst_buffer_unref (this->new_segment_buf); + this->new_segment_buf = outbuffer; + + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + gst_gdp_pay_reset_streamheader (this); + break; + case GST_EVENT_CAPS:{ + gst_event_parse_caps (event, &caps); + if (this->caps == NULL || !gst_caps_is_equal (this->caps, caps)) { + GST_INFO_OBJECT (pad, "caps changed to %" GST_PTR_FORMAT, caps); + gst_buffer_replace (&outbuffer, NULL); + gst_caps_replace (&this->caps, caps); + outbuffer = gst_gdp_buffer_from_caps (this, caps); + if (outbuffer == NULL) + goto no_buffer_from_caps; + + GST_BUFFER_DURATION (outbuffer) = 0; + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + if (this->caps_buf) + gst_buffer_unref (this->caps_buf); + this->caps_buf = outbuffer; + gst_gdp_pay_reset_streamheader (this); + } + break; + } + case GST_EVENT_TAG: + GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as tag_buf", + outbuffer); + + if (this->tag_buf) + gst_buffer_unref (this->tag_buf); + this->tag_buf = outbuffer; + + GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER); + gst_gdp_pay_reset_streamheader (this); + break; + default: + GST_DEBUG_OBJECT (this, "queuing GDP buffer %p of event %p", outbuffer, + event); + flowret = gst_gdp_queue_buffer (this, outbuffer); + if (flowret != GST_FLOW_OK) + goto push_error; + break; + } + + /* if we have EOS, we should send on EOS ourselves */ + if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) { + GST_DEBUG_OBJECT (this, "Sending on EOS event %p", event); + /* ref, we unref later again */ + ret = gst_pad_push_event (this->srcpad, gst_event_ref (event)); + } + +done: + gst_event_unref (event); + + return ret; + + /* ERRORS */ +no_outbuffer: + { + GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL), + ("Could not create GDP buffer from received event (type %s)", + gst_event_type_get_name (event->type))); + ret = FALSE; + goto done; + } +no_buffer_from_caps: + { + GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL), + ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps)); + ret = FALSE; + goto done; + } +push_error: + { + GST_WARNING_OBJECT (this, "queueing GDP event buffer returned %d", flowret); + ret = FALSE; + goto done; + } +} + +static gboolean +gst_gdp_pay_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstGDPPay *this; + gboolean res = TRUE; + + this = GST_GDP_PAY (parent); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_SEEK: + /* we refuse seek for now. */ + gst_event_unref (event); + res = FALSE; + break; + case GST_EVENT_QOS: + case GST_EVENT_NAVIGATION: + default: + /* everything else is passed */ + res = gst_pad_push_event (this->sinkpad, event); + break; + } + + return res; +} + +static void +gst_gdp_pay_set_property (GObject * object, guint prop_id, + const GValue * value, GParamSpec * pspec) +{ + GstGDPPay *this; + + g_return_if_fail (GST_IS_GDP_PAY (object)); + this = GST_GDP_PAY (object); + + switch (prop_id) { + case PROP_CRC_HEADER: + this->crc_header = + g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_HEADER : 0; + this->header_flag = this->crc_header | this->crc_payload; + break; + case PROP_CRC_PAYLOAD: + this->crc_payload = + g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_PAYLOAD : 0; + this->header_flag = this->crc_header | this->crc_payload; + break; + case PROP_VERSION: + this->version = g_value_get_enum (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gst_gdp_pay_get_property (GObject * object, guint prop_id, + GValue * value, GParamSpec * pspec) +{ + GstGDPPay *this; + + g_return_if_fail (GST_IS_GDP_PAY (object)); + this = GST_GDP_PAY (object); + + switch (prop_id) { + case PROP_CRC_HEADER: + g_value_set_boolean (value, this->crc_header); + break; + case PROP_CRC_PAYLOAD: + g_value_set_boolean (value, this->crc_payload); + break; + case PROP_VERSION: + g_value_set_enum (value, this->version); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static GstStateChangeReturn +gst_gdp_pay_change_state (GstElement * element, GstStateChange transition) +{ + GstStateChangeReturn ret; + GstGDPPay *this = GST_GDP_PAY (element); + + switch (transition) { + case GST_STATE_CHANGE_READY_TO_PAUSED: + break; + default: + break; + } + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + gst_gdp_pay_reset (this); + break; + default: + break; + } + + return ret; +} + +gboolean +gst_gdp_pay_plugin_init (GstPlugin * plugin) +{ + if (!gst_element_register (plugin, "gdppay", GST_RANK_NONE, GST_TYPE_GDP_PAY)) + return FALSE; + + return TRUE; +} diff --git a/gst/gdp/gstgdppay.h b/gst/gdp/gstgdppay.h new file mode 100644 index 00000000..3e280b56 --- /dev/null +++ b/gst/gdp/gstgdppay.h @@ -0,0 +1,81 @@ +/* GStreamer + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +#ifndef __GST_GDP_PAY_H__ +#define __GST_GDP_PAY_H__ + +#include <gst/gst.h> + +G_BEGIN_DECLS + +#define GST_TYPE_GDP_PAY \ + (gst_gdp_pay_get_type()) +#define GST_GDP_PAY(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_PAY,GstGDPPay)) +#define GST_GDP_PAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_PAY,GstGDPPayClass)) +#define GST_IS_GDP_PAY(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_PAY)) +#define GST_IS_GDP_PAY_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_PAY)) + +typedef struct _GstGDPPay GstGDPPay; +typedef struct _GstGDPPayClass GstGDPPayClass; + +/** + * GstGDPPay: + * + * Private gdppay element structure. + */ +struct _GstGDPPay +{ + GstElement element; + + GstPad *sinkpad; + GstPad *srcpad; + + GstCaps *caps; /* incoming caps */ + + GstBuffer *caps_buf; + GstBuffer *new_segment_buf; + GstBuffer *tag_buf; + + gboolean sent_streamheader; /* TRUE after the first streamheaders are sent */ + GList *queue; /* list of queued buffers before streamheaders are sent */ + guint64 offset; + + gboolean crc_header; + gboolean crc_payload; + GstDPHeaderFlag header_flag; + GstDPVersion version; + GstDPPacketizer *packetizer; +}; + +struct _GstGDPPayClass +{ + GstElementClass parent_class; +}; + +gboolean gst_gdp_pay_plugin_init (GstPlugin * plugin); + +GType gst_gdp_pay_get_type (void); + +G_END_DECLS + +#endif /* __GST_GDP_PAY_H__ */ diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in index 1d43b1e8..3b1a3d6c 100644 --- a/gst/geometrictransform/Makefile.in +++ b/gst/geometrictransform/Makefile.in @@ -363,6 +363,8 @@ 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@ @@ -370,6 +372,8 @@ 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@ @@ -384,7 +388,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -412,6 +415,10 @@ 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@ @@ -538,6 +545,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in index e00625a3..49c06bb9 100644 --- a/gst/hdvparse/Makefile.in +++ b/gst/hdvparse/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/hls/Makefile.am b/gst/hls/Makefile.am index 05f0ac89..e5161174 100644 --- a/gst/hls/Makefile.am +++ b/gst/hls/Makefile.am @@ -1,6 +1,9 @@ plugin_LTLIBRARIES = libgstfragmented.la +# FIXME: hlssink +# gsthlssink.c +# gstm3u8playlist.c libgstfragmented_la_SOURCES = \ m3u8.c \ gsthlsdemux.c \ @@ -8,17 +11,21 @@ libgstfragmented_la_SOURCES = \ gsturidownloader.c \ gstfragmentedplugin.c -libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) -libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) +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_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static # headers we need but don't want installed +# +# gstm3u8playlist.h +# gsthlssink.h noinst_HEADERS = \ - gstfragmented.h \ - gstfragment.h \ + gstfragmented.h \ + gstfragment.h \ gsthlsdemux.h \ - gsturidownloader.h \ + gsturidownloader.h \ m3u8.h Android.mk: Makefile.am $(BUILT_SOURCES) diff --git a/gst/hls/Makefile.in b/gst/hls/Makefile.in index 7e150f13..1974a1f2 100644 --- a/gst/hls/Makefile.in +++ b/gst/hls/Makefile.in @@ -128,7 +128,7 @@ 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_libgstfragmented_la_OBJECTS = libgstfragmented_la-m3u8.lo \ libgstfragmented_la-gsthlsdemux.lo \ libgstfragmented_la-gstfragment.lo \ @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -607,6 +615,10 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstfragmented.la + +# FIXME: hlssink +# gsthlssink.c +# gstm3u8playlist.c libgstfragmented_la_SOURCES = \ m3u8.c \ gsthlsdemux.c \ @@ -614,17 +626,21 @@ libgstfragmented_la_SOURCES = \ gsturidownloader.c \ gstfragmentedplugin.c -libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) -libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) +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_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static # headers we need but don't want installed +# +# gstm3u8playlist.h +# gsthlssink.h noinst_HEADERS = \ - gstfragmented.h \ - gstfragment.h \ + gstfragmented.h \ + gstfragment.h \ gsthlsdemux.h \ - gsturidownloader.h \ + gsturidownloader.h \ m3u8.h all: all-am diff --git a/gst/hls/gstfragmentedplugin.c b/gst/hls/gstfragmentedplugin.c index a067a9e5..f5650293 100644 --- a/gst/hls/gstfragmentedplugin.c +++ b/gst/hls/gstfragmentedplugin.c @@ -6,6 +6,9 @@ #include "gstfragmented.h" #include "gsthlsdemux.h" +#if 0 +#include "gsthlssink.h" +#endif GST_DEBUG_CATEGORY (fragmented_debug); @@ -17,6 +20,12 @@ fragmented_init (GstPlugin * plugin) if (!gst_element_register (plugin, "hlsdemux", GST_RANK_PRIMARY, GST_TYPE_HLS_DEMUX) || FALSE) return FALSE; + +#if 0 + if (!gst_hls_sink_plugin_init (plugin)) + return FALSE; +#endif + return TRUE; } diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c index ba9c4d9d..51d4d68a 100644 --- a/gst/hls/gsthlsdemux.c +++ b/gst/hls/gsthlsdemux.c @@ -902,8 +902,7 @@ gst_hls_demux_cache_fragments (GstHLSDemux * demux) GST_TIME_ARGS (duration)); if (duration != GST_CLOCK_TIME_NONE) gst_element_post_message (GST_ELEMENT (demux), - gst_message_new_duration (GST_OBJECT (demux), - GST_FORMAT_TIME, duration)); + gst_message_new_duration_changed (GST_OBJECT (demux))); } /* Cache the first fragments */ diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in index f3886126..2406ed2a 100644 --- a/gst/id3tag/Makefile.in +++ b/gst/id3tag/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c index 59bd8a00..de6d8066 100644 --- a/gst/id3tag/gstid3mux.c +++ b/gst/id3tag/gstid3mux.c @@ -1,7 +1,7 @@ /* GStreamer ID3 v1 and v2 muxer * * Copyright (C) 2006 Christophe Fergeau <teuf@gnome.org> - * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net> + * Copyright (C) 2006-2012 Tim-Philipp Müller <tim centricular net> * Copyright (C) 2009 Pioneers of the Inevitable <songbird@songbirdnest.com> * * This library is free software; you can redistribute it and/or @@ -81,7 +81,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_ALWAYS, GST_STATIC_CAPS ("application/x-id3")); -GST_BOILERPLATE (GstId3Mux, gst_id3_mux, GstTagMux, GST_TYPE_TAG_MUX); +G_DEFINE_TYPE (GstId3Mux, gst_id3_mux, GST_TYPE_TAG_MUX); static GstBuffer *gst_id3_mux_render_v2_tag (GstTagMux * mux, const GstTagList * taglist); @@ -94,26 +94,9 @@ static void gst_id3_mux_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static void -gst_id3_mux_base_init (gpointer g_class) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - - 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_details_simple (element_class, - "ID3 v1 and v2 Muxer", "Formatter/Metadata", - "Adds an ID3v2 header and ID3v1 footer to a file", - "Michael Smith <msmith@songbirdnest.com>, " - "Tim-Philipp Müller <tim centricular net>"); -} - -static void gst_id3_mux_class_init (GstId3MuxClass * klass) { + GstElementClass *element_class = (GstElementClass *) klass; GObjectClass *gobject_class = (GObjectClass *) klass; gobject_class->set_property = gst_id3_mux_set_property; @@ -139,10 +122,22 @@ gst_id3_mux_class_init (GstId3MuxClass * klass) GST_DEBUG_FUNCPTR (gst_id3_mux_render_v2_tag); GST_TAG_MUX_CLASS (klass)->render_end_tag = GST_DEBUG_FUNCPTR (gst_id3_mux_render_v1_tag); + + gst_element_class_set_details_simple (element_class, + "ID3 v1 and v2 Muxer", "Formatter/Metadata", + "Adds an ID3v2 header and ID3v1 footer to a file", + "Michael Smith <msmith@songbirdnest.com>, " + "Tim-Philipp Müller <tim centricular net>"); + + 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)); } static void -gst_id3_mux_init (GstId3Mux * id3mux, GstId3MuxClass * id3mux_class) +gst_id3_mux_init (GstId3Mux * id3mux) { id3mux->write_v1 = DEFAULT_WRITE_V1; id3mux->write_v2 = DEFAULT_WRITE_V2; diff --git a/gst/id3tag/id3tag.c b/gst/id3tag/id3tag.c index fc69a49c..d6c2f1ba 100644 --- a/gst/id3tag/id3tag.c +++ b/gst/id3tag/id3tag.c @@ -192,6 +192,7 @@ static GstBuffer * id3v2_tag_to_buffer (GstId3v2Tag * tag) { GstByteWriter *w; + GstMapInfo info; GstBuffer *buf; guint8 *dest; guint i, size, offset, size_frames = 0; @@ -217,8 +218,9 @@ id3v2_tag_to_buffer (GstId3v2Tag * tag) gst_byte_writer_write_uint8 (w, 0); /* flags */ gst_byte_writer_write_uint32_syncsafe (w, size - 10); - buf = gst_buffer_new_and_alloc (size); - dest = GST_BUFFER_DATA (buf); + buf = gst_buffer_new_allocate (NULL, size, NULL); + gst_buffer_map (buf, &info, GST_MAP_WRITE); + dest = info.data; gst_byte_writer_copy_bytes (w, dest, 0, 10); offset = 10; @@ -233,6 +235,7 @@ id3v2_tag_to_buffer (GstId3v2Tag * tag) memset (dest + offset, 0, size - offset); gst_byte_writer_free (w); + gst_buffer_unmap (buf, &info); return buf; } @@ -472,6 +475,7 @@ add_text_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, g_free (strings); } +/* FIXME: id3v2-private frames need to be extracted as samples */ static void add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, const gchar * tag, guint num_tags, const gchar * unused) @@ -479,42 +483,57 @@ add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, guint i; for (i = 0; i < num_tags; ++i) { - const GValue *val; + GstSample *sample; GstBuffer *buf; + GstCaps *caps; - val = gst_tag_list_get_value_index (list, tag, i); - buf = gst_value_get_buffer (val); + if (!gst_tag_list_get_sample_index (list, tag, i, &sample)) + continue; - if (buf && GST_BUFFER_CAPS (buf)) { + buf = gst_sample_get_buffer (sample); + + /* FIXME: should use auxiliary sample struct instead of caps for this */ + caps = gst_sample_get_caps (sample); + + if (buf && caps) { GstStructure *s; gint version = 0; - s = gst_caps_get_structure (GST_BUFFER_CAPS (buf), 0); + s = gst_caps_get_structure (caps, 0); /* We can only add it if this private buffer is for the same ID3 version, because we don't understand the contents at all. */ if (s && gst_structure_get_int (s, "version", &version) && version == id3v2tag->major_version) { GstId3v2Frame frame; + GstMapInfo mapinfo; gchar frame_id[5]; guint16 flags; - guint8 *data = GST_BUFFER_DATA (buf); - gint size = GST_BUFFER_SIZE (buf); - - if (size < 10) /* header size */ - return; - - /* We only reach here if the frame version matches the muxer. Since the - muxer only does v2.3 or v2.4, the frame must be one of those - and - so the frame header is the same format */ - memcpy (frame_id, data, 4); - frame_id[4] = 0; - flags = GST_READ_UINT16_BE (data + 8); - - id3v2_frame_init (&frame, frame_id, flags); - id3v2_frame_write_bytes (&frame, data + 10, size - 10); - - g_array_append_val (id3v2tag->frames, frame); - GST_DEBUG ("Added unparsed tag with %d bytes", size); + guint8 *data; + gint size; + + if (!gst_buffer_map (buf, &mapinfo, GST_MAP_READ)) + continue; + + size = mapinfo.size; + data = mapinfo.data; + + if (size >= 10) { /* header size */ + /* We only get here if the frame version matches the muxer. Since the + * muxer only does v2.3 or v2.4, the frame must be one of those - and + * so the frame header is the same format */ + memcpy (frame_id, data, 4); + frame_id[4] = 0; + flags = GST_READ_UINT16_BE (data + 8); + + id3v2_frame_init (&frame, frame_id, flags); + id3v2_frame_write_bytes (&frame, data + 10, size - 10); + + g_array_append_val (id3v2tag->frames, frame); + GST_DEBUG ("Added unparsed tag with %d bytes", size); + gst_buffer_unmap (buf, &mapinfo); + } else { + GST_WARNING ("Short ID3v2 frame"); + } } else { GST_WARNING ("Discarding unrecognised ID3 tag for different ID3 " "version"); @@ -687,25 +706,29 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, guint n; for (n = 0; n < num_tags; ++n) { - const GValue *val; + GstSample *sample; GstBuffer *image; + GstCaps *caps; GST_DEBUG ("image %u/%u", n + 1, num_tags); - val = gst_tag_list_get_value_index (list, tag, n); - image = gst_value_get_buffer (val); + if (!gst_tag_list_get_sample_index (list, tag, n, &sample)) + continue; + + image = gst_sample_get_buffer (sample); + caps = gst_sample_get_caps (sample); - if (GST_IS_BUFFER (image) && GST_BUFFER_SIZE (image) > 0 && - GST_BUFFER_CAPS (image) != NULL && - !gst_caps_is_empty (GST_BUFFER_CAPS (image))) { + if (image != NULL && gst_buffer_get_size (image) > 0 && + caps != NULL && !gst_caps_is_empty (caps)) { const gchar *mime_type; GstStructure *s; - s = gst_caps_get_structure (GST_BUFFER_CAPS (image), 0); + s = gst_caps_get_structure (caps, 0); mime_type = gst_structure_get_name (s); if (mime_type != NULL) { const gchar *desc; GstId3v2Frame frame; + GstMapInfo mapinfo; int encoding; /* APIC frame specifies "-->" if we're providing a URL to the image @@ -713,8 +736,8 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, if (strcmp (mime_type, "text/uri-list") == 0) mime_type = "-->"; - GST_DEBUG ("Attaching picture of %u bytes and mime type %s", - GST_BUFFER_SIZE (image), mime_type); + GST_DEBUG ("Attaching picture of %" G_GSIZE_FORMAT " bytes and " + "mime type %s", gst_buffer_get_size (image), mime_type); id3v2_frame_init (&frame, "APIC", 0); @@ -734,14 +757,17 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, id3v2_frame_write_string (&frame, encoding, desc, TRUE); - id3v2_frame_write_bytes (&frame, GST_BUFFER_DATA (image), - GST_BUFFER_SIZE (image)); - - g_array_append_val (id3v2tag->frames, frame); + if (gst_buffer_map (image, &mapinfo, GST_MAP_READ)) { + id3v2_frame_write_bytes (&frame, mapinfo.data, mapinfo.size); + g_array_append_val (id3v2tag->frames, frame); + gst_buffer_unmap (image, &mapinfo); + } else { + GST_WARNING ("Couldn't map image tag buffer"); + id3v2_frame_unset (&frame); + } } } else { - GST_WARNING ("NULL image or no caps on image buffer (%p, caps=%" - GST_PTR_FORMAT ")", image, (image) ? GST_BUFFER_CAPS (image) : NULL); + GST_WARNING ("no image or caps: %p, caps=%" GST_PTR_FORMAT, image, caps); } } } @@ -839,28 +865,32 @@ add_date_tag (GstId3v2Tag * id3v2tag, const GstTagList * list, else frame_id = "TDRC"; - GST_LOG ("Adding date frame"); + GST_LOG ("Adding date time frame"); strings = g_new0 (gchar *, num_tags + 1); for (n = 0; n < num_tags; ++n) { - GDate *date = NULL; + GstDateTime *dt = NULL; + guint year; + gchar *s; - if (gst_tag_list_get_date_index (list, tag, n, &date) && date != NULL) { - GDateYear year; - gchar *s; + if (!gst_tag_list_get_date_time_index (list, tag, n, &dt) || dt == NULL) + continue; - year = g_date_get_year (date); - if (year > 500 && year < 2100) { - s = g_strdup_printf ("%u", year); - GST_LOG ("%s[%u] = '%s'", tag, n, s); - strings[i] = s; - i++; - } else { - GST_WARNING ("invalid year %u, skipping", year); - } + year = gst_date_time_get_year (dt); + if (year > 500 && year < 2100) { + s = g_strdup_printf ("%u", year); + GST_LOG ("%s[%u] = '%s'", tag, n, s); + strings[i] = s; + i++; + } else { + GST_WARNING ("invalid year %u, skipping", year); + } - g_date_free (date); + if (gst_date_time_has_month (dt)) { + if (id3v2tag->major_version == 3) + GST_FIXME ("write TDAT and possibly also TIME frame"); } + gst_date_time_unref (dt); } if (strings[0] != NULL) { @@ -1089,7 +1119,7 @@ static const struct /* Up to here, all the frame ids and contents have been the same between versions 2.3 and 2.4. The rest of them differ... */ /* Date (in ID3v2.3, this is a TYER tag. In v2.4, it's a TDRC tag */ - GST_TAG_DATE, add_date_tag, NULL}, { + GST_TAG_DATE_TIME, add_date_tag, NULL}, { /* Replaygain data (not really supported in 2.3, we use an experimental tag there) */ @@ -1159,7 +1189,7 @@ id3_mux_render_v2_tag (GstTagMux * mux, const GstTagList * taglist, int version) /* Create buffer with tag */ buf = id3v2_tag_to_buffer (&tag); - GST_LOG_OBJECT (mux, "tag size = %d bytes", GST_BUFFER_SIZE (buf)); + GST_LOG_OBJECT (mux, "tag size = %d bytes", (int) gst_buffer_get_size (buf)); id3v2_tag_unset (&tag); @@ -1202,11 +1232,11 @@ static void date_v1_convert (const GstTagList * list, const gchar * tag, guint8 * dst, int maxlen, gboolean * wrote_tag) { - GDate *date; + GstDateTime *dt; /* Only one date supported */ - if (gst_tag_list_get_date_index (list, tag, 0, &date) && date != NULL) { - GDateYear year = g_date_get_year (date); + if (gst_tag_list_get_date_time_index (list, tag, 0, &dt)) { + guint year = gst_date_time_get_year (dt); /* Check for plausible year */ if (year > 500 && year < 2100) { gchar str[5]; @@ -1217,7 +1247,7 @@ date_v1_convert (const GstTagList * list, const gchar * tag, GST_WARNING ("invalid year %u, skipping", year); } - g_date_free (date); + gst_date_time_unref (dt); } } @@ -1265,6 +1295,7 @@ track_number_convert (const GstTagList * list, const gchar * tag, } } +/* FIXME: get rid of silly table */ static const struct { const gchar *gst_tag; @@ -1276,7 +1307,7 @@ static const struct GST_TAG_TITLE, 3, 30, latin1_convert}, { GST_TAG_ARTIST, 33, 30, latin1_convert}, { GST_TAG_ALBUM, 63, 30, latin1_convert}, { - GST_TAG_DATE, 93, 4, date_v1_convert}, { + GST_TAG_DATE_TIME, 93, 4, date_v1_convert}, { GST_TAG_COMMENT, 97, 28, latin1_convert}, { /* Note: one-byte gap here */ GST_TAG_TRACK_NUMBER, 126, 1, track_number_convert}, { @@ -1286,11 +1317,15 @@ static const struct GstBuffer * id3_mux_render_v1_tag (GstTagMux * mux, const GstTagList * taglist) { - GstBuffer *buf = gst_buffer_new_and_alloc (ID3_V1_TAG_SIZE); - guint8 *data = GST_BUFFER_DATA (buf); + GstMapInfo info; + GstBuffer *buf; + guint8 *data; gboolean wrote_tag = FALSE; int i; + buf = gst_buffer_new_allocate (NULL, ID3_V1_TAG_SIZE, NULL); + gst_buffer_map (buf, &info, GST_MAP_WRITE); + data = info.data; memset (data, 0, ID3_V1_TAG_SIZE); data[0] = 'T'; @@ -1305,6 +1340,8 @@ id3_mux_render_v1_tag (GstTagMux * mux, const GstTagList * taglist) v1_funcs[i].length, &wrote_tag); } + gst_buffer_unmap (buf, &info); + if (!wrote_tag) { GST_WARNING_OBJECT (mux, "no ID3v1 tag written (no suitable tags found)"); gst_buffer_unref (buf); diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in index 58899ebb..61c3361f 100644 --- a/gst/inter/Makefile.in +++ b/gst/inter/Makefile.in @@ -358,6 +358,8 @@ 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@ @@ -365,6 +367,8 @@ 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@ @@ -379,7 +383,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -407,6 +410,10 @@ 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@ @@ -533,6 +540,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c index 11ce1bfd..b67c6fc1 100644 --- a/gst/inter/gstinteraudiosink.c +++ b/gst/inter/gstinteraudiosink.c @@ -57,30 +57,14 @@ static void gst_inter_audio_sink_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_audio_sink_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_audio_sink_dispose (GObject * object); static void gst_inter_audio_sink_finalize (GObject * object); -static GstCaps *gst_inter_audio_sink_get_caps (GstBaseSink * sink); -static gboolean gst_inter_audio_sink_set_caps (GstBaseSink * sink, - GstCaps * caps); -static GstFlowReturn gst_inter_audio_sink_buffer_alloc (GstBaseSink * sink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); static void gst_inter_audio_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); static gboolean gst_inter_audio_sink_start (GstBaseSink * sink); static gboolean gst_inter_audio_sink_stop (GstBaseSink * sink); -static gboolean gst_inter_audio_sink_unlock (GstBaseSink * sink); -static gboolean gst_inter_audio_sink_event (GstBaseSink * sink, - GstEvent * event); -static GstFlowReturn gst_inter_audio_sink_preroll (GstBaseSink * sink, - GstBuffer * buffer); static GstFlowReturn gst_inter_audio_sink_render (GstBaseSink * sink, GstBuffer * buffer); -static GstStateChangeReturn gst_inter_audio_sink_async_play (GstBaseSink * - sink); -static gboolean gst_inter_audio_sink_activate_pull (GstBaseSink * sink, - gboolean active); -static gboolean gst_inter_audio_sink_unlock_stop (GstBaseSink * sink); enum { @@ -94,28 +78,25 @@ static GstStaticPadTemplate gst_inter_audio_sink_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) BYTE_ORDER, " - "signed = (boolean) true, " - "width = (int) 16, " - "depth = (int) 16, " "rate = (int) 48000, " "channels = (int) 2") + GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", " + "rate = (int) 48000, channels = (int) 2") ); /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_audio_sink_debug_category, "interaudiosink", 0, \ - "debug category for interaudiosink element"); -GST_BOILERPLATE_FULL (GstInterAudioSink, gst_inter_audio_sink, GstBaseSink, - GST_TYPE_BASE_SINK, DEBUG_INIT); +G_DEFINE_TYPE (GstInterAudioSink, gst_inter_audio_sink, GST_TYPE_BASE_SINK); static void -gst_inter_audio_sink_base_init (gpointer g_class) +gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); + GST_DEBUG_CATEGORY_INIT (gst_inter_audio_sink_debug_category, + "interaudiosink", 0, "debug category for interaudiosink element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_audio_sink_sink_template)); @@ -124,41 +105,15 @@ gst_inter_audio_sink_base_init (gpointer g_class) "Sink/Audio", "Virtual audio sink for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); gobject_class->set_property = gst_inter_audio_sink_set_property; gobject_class->get_property = gst_inter_audio_sink_get_property; - gobject_class->dispose = gst_inter_audio_sink_dispose; gobject_class->finalize = gst_inter_audio_sink_finalize; - base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_get_caps); - base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_set_caps); - if (0) - base_sink_class->buffer_alloc = - GST_DEBUG_FUNCPTR (gst_inter_audio_sink_buffer_alloc); base_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_get_times); base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_start); base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_stop); - base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_unlock); - if (0) - base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_event); - //if (0) - base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_preroll); base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_render); - if (0) - base_sink_class->async_play = - GST_DEBUG_FUNCPTR (gst_inter_audio_sink_async_play); - if (0) - base_sink_class->activate_pull = - GST_DEBUG_FUNCPTR (gst_inter_audio_sink_activate_pull); - base_sink_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_audio_sink_unlock_stop); g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", @@ -167,8 +122,7 @@ gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass) } static void -gst_inter_audio_sink_init (GstInterAudioSink * interaudiosink, - GstInterAudioSinkClass * interaudiosink_class) +gst_inter_audio_sink_init (GstInterAudioSink * interaudiosink) { interaudiosink->channel = g_strdup ("default"); } @@ -207,49 +161,17 @@ gst_inter_audio_sink_get_property (GObject * object, guint property_id, } void -gst_inter_audio_sink_dispose (GObject * object) -{ - /* GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void gst_inter_audio_sink_finalize (GObject * object) { - /* GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object); */ + GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object); /* clean up object here */ + g_free (interaudiosink->channel); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (gst_inter_audio_sink_parent_class)->finalize (object); } - -static GstCaps * -gst_inter_audio_sink_get_caps (GstBaseSink * sink) -{ - - return NULL; -} - -static gboolean -gst_inter_audio_sink_set_caps (GstBaseSink * sink, GstCaps * caps) -{ - - return TRUE; -} - -static GstFlowReturn -gst_inter_audio_sink_buffer_alloc (GstBaseSink * sink, guint64 offset, - guint size, GstCaps * caps, GstBuffer ** buf) -{ - - return GST_FLOW_ERROR; -} - static void gst_inter_audio_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end) @@ -301,39 +223,18 @@ gst_inter_audio_sink_stop (GstBaseSink * sink) return TRUE; } -static gboolean -gst_inter_audio_sink_unlock (GstBaseSink * sink) -{ - - return TRUE; -} - -static gboolean -gst_inter_audio_sink_event (GstBaseSink * sink, GstEvent * event) -{ - - return TRUE; -} - -static GstFlowReturn -gst_inter_audio_sink_preroll (GstBaseSink * sink, GstBuffer * buffer) -{ - - return GST_FLOW_OK; -} - static GstFlowReturn gst_inter_audio_sink_render (GstBaseSink * sink, GstBuffer * buffer) { GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (sink); int n; - GST_DEBUG ("render %d", GST_BUFFER_SIZE (buffer)); + GST_DEBUG ("render %d", gst_buffer_get_size (buffer)); g_mutex_lock (interaudiosink->surface->mutex); n = gst_adapter_available (interaudiosink->surface->audio_adapter) / 4; #define SIZE 1600 - if (n > (1600 * 3)) { + if (n > (SIZE * 3)) { GST_WARNING ("flushing 800 samples"); gst_adapter_flush (interaudiosink->surface->audio_adapter, (SIZE / 2) * 4); n -= (SIZE / 2); @@ -344,24 +245,3 @@ gst_inter_audio_sink_render (GstBaseSink * sink, GstBuffer * buffer) return GST_FLOW_OK; } - -static GstStateChangeReturn -gst_inter_audio_sink_async_play (GstBaseSink * sink) -{ - - return GST_STATE_CHANGE_SUCCESS; -} - -static gboolean -gst_inter_audio_sink_activate_pull (GstBaseSink * sink, gboolean active) -{ - - return TRUE; -} - -static gboolean -gst_inter_audio_sink_unlock_stop (GstBaseSink * sink) -{ - - return TRUE; -} diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c index 3e64eefc..d15d7aa0 100644 --- a/gst/inter/gstinteraudiosrc.c +++ b/gst/inter/gstinteraudiosrc.c @@ -39,9 +39,12 @@ #include "config.h" #endif +#include "gstinteraudiosrc.h" + #include <gst/gst.h> #include <gst/base/gstbasesrc.h> -#include "gstinteraudiosrc.h" +#include <gst/audio/audio.h> + #include <string.h> GST_DEBUG_CATEGORY_STATIC (gst_inter_audio_src_debug_category); @@ -54,33 +57,19 @@ static void gst_inter_audio_src_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_audio_src_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_audio_src_dispose (GObject * object); static void gst_inter_audio_src_finalize (GObject * object); -static GstCaps *gst_inter_audio_src_get_caps (GstBaseSrc * src); static gboolean gst_inter_audio_src_set_caps (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_audio_src_negotiate (GstBaseSrc * src); -static gboolean gst_inter_audio_src_newsegment (GstBaseSrc * src); static gboolean gst_inter_audio_src_start (GstBaseSrc * src); static gboolean gst_inter_audio_src_stop (GstBaseSrc * src); static void gst_inter_audio_src_get_times (GstBaseSrc * src, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); -static gboolean gst_inter_audio_src_is_seekable (GstBaseSrc * src); -static gboolean gst_inter_audio_src_unlock (GstBaseSrc * src); -static gboolean gst_inter_audio_src_event (GstBaseSrc * src, GstEvent * event); static GstFlowReturn gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size, GstBuffer ** buf); -static gboolean gst_inter_audio_src_do_seek (GstBaseSrc * src, - GstSegment * segment); static gboolean gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query); -static gboolean gst_inter_audio_src_check_get_range (GstBaseSrc * src); -static void gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_audio_src_unlock_stop (GstBaseSrc * src); -static gboolean -gst_inter_audio_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment); +static GstCaps *gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps); enum { @@ -94,27 +83,24 @@ static GstStaticPadTemplate gst_inter_audio_src_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "endianness = (int) BYTE_ORDER, " - "signed = (boolean) true, " - "width = (int) 16, " - "depth = (int) 16, " "rate = (int) 48000, " "channels = (int) 2") + GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", " + "rate = (int) 48000, channels = (int) 2") ); /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_audio_src_debug_category, "interaudiosrc", 0, \ - "debug category for interaudiosrc element"); - -GST_BOILERPLATE_FULL (GstInterAudioSrc, gst_inter_audio_src, GstBaseSrc, - GST_TYPE_BASE_SRC, DEBUG_INIT); +G_DEFINE_TYPE (GstInterAudioSrc, gst_inter_audio_src, GST_TYPE_BASE_SRC); static void -gst_inter_audio_src_base_init (gpointer g_class) +gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (gst_inter_audio_src_debug_category, "interaudiosrc", + 0, "debug category for interaudiosrc element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_audio_src_src_template)); @@ -124,59 +110,26 @@ gst_inter_audio_src_base_init (gpointer g_class) "Source/Audio", "Virtual audio source for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_inter_audio_src_set_property; gobject_class->get_property = gst_inter_audio_src_get_property; - gobject_class->dispose = gst_inter_audio_src_dispose; gobject_class->finalize = gst_inter_audio_src_finalize; - base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_src_get_caps); base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_src_set_caps); - if (0) - base_src_class->negotiate = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_negotiate); - base_src_class->newsegment = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_newsegment); base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_audio_src_start); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_audio_src_stop); base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_audio_src_get_times); - if (0) - base_src_class->is_seekable = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_is_seekable); - base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_audio_src_unlock); - base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_audio_src_event); base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_audio_src_create); - if (0) - base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_audio_src_do_seek); base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_audio_src_query); - if (0) - base_src_class->check_get_range = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_check_get_range); base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_audio_src_fixate); - if (0) - base_src_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_unlock_stop); - if (0) - base_src_class->prepare_seek_segment = - GST_DEBUG_FUNCPTR (gst_inter_audio_src_prepare_seek_segment); - -#if 0 + g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", "Channel name to match inter src and sink elements", "default", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -#endif } static void -gst_inter_audio_src_init (GstInterAudioSrc * interaudiosrc, - GstInterAudioSrcClass * interaudiosrc_class) +gst_inter_audio_src_init (GstInterAudioSrc * interaudiosrc) { gst_base_src_set_format (GST_BASE_SRC (interaudiosrc), GST_FORMAT_TIME); gst_base_src_set_live (GST_BASE_SRC (interaudiosrc), TRUE); @@ -219,34 +172,14 @@ gst_inter_audio_src_get_property (GObject * object, guint property_id, } void -gst_inter_audio_src_dispose (GObject * object) -{ - /* GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void gst_inter_audio_src_finalize (GObject * object) { - /* GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object); */ + GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object); /* clean up object here */ + g_free (interaudiosrc->channel); - G_OBJECT_CLASS (parent_class)->finalize (object); -} - - -static GstCaps * -gst_inter_audio_src_get_caps (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "get_caps"); - - return NULL; + G_OBJECT_CLASS (gst_inter_audio_src_parent_class)->finalize (object); } static gboolean @@ -264,30 +197,13 @@ gst_inter_audio_src_set_caps (GstBaseSrc * src, GstCaps * caps) ret = gst_structure_get_int (structure, "rate", &sample_rate); if (ret) { interaudiosrc->sample_rate = sample_rate; + + ret = gst_pad_set_caps (src->srcpad, caps); } return ret; } -static gboolean -gst_inter_audio_src_negotiate (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "negotiate"); - - return TRUE; -} - -static gboolean -gst_inter_audio_src_newsegment (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "newsegment"); - - return TRUE; -} static gboolean gst_inter_audio_src_start (GstBaseSrc * src) @@ -341,41 +257,6 @@ gst_inter_audio_src_get_times (GstBaseSrc * src, GstBuffer * buffer, } } -static gboolean -gst_inter_audio_src_is_seekable (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "is_seekable"); - - return FALSE; -} - -static gboolean -gst_inter_audio_src_unlock (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "unlock"); - - return TRUE; -} - -static gboolean -gst_inter_audio_src_event (GstBaseSrc * src, GstEvent * event) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - gboolean ret; - - GST_DEBUG_OBJECT (interaudiosrc, "event"); - - switch (GST_EVENT_TYPE (event)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event); - } - - return ret; -} #define SIZE 1600 @@ -407,14 +288,12 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size, g_mutex_unlock (interaudiosrc->surface->mutex); if (n < SIZE) { - GstBuffer *newbuf = gst_buffer_new_and_alloc (SIZE * 4); + GstBuffer *newbuf = gst_buffer_new_and_alloc ((SIZE - n) * 4); GST_WARNING ("creating %d samples of silence", SIZE - n); - memset (GST_BUFFER_DATA (newbuf) + n * 4, 0, SIZE * 4 - n * 4); - if (buffer) { - memcpy (GST_BUFFER_DATA (newbuf), GST_BUFFER_DATA (buffer), n * 4); - gst_buffer_unref (buffer); - } + + if (buffer) + newbuf = gst_buffer_append (newbuf, buffer); buffer = newbuf; } n = SIZE; @@ -435,7 +314,6 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size, if (interaudiosrc->n_samples == 0) { GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT); } - gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (interaudiosrc))); interaudiosrc->n_samples += n; *buf = buffer; @@ -443,15 +321,6 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size, return GST_FLOW_OK; } -static gboolean -gst_inter_audio_src_do_seek (GstBaseSrc * src, GstSegment * segment) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "do_seek"); - - return FALSE; -} static gboolean gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query) @@ -480,29 +349,22 @@ gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query) break; } default: - ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query); + ret = GST_BASE_SRC_CLASS (gst_inter_audio_src_parent_class)->query (src, + query); break; } return ret; } -static gboolean -gst_inter_audio_src_check_get_range (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "get_range"); - - return FALSE; -} - -static void +static GstCaps * gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps) { GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); GstStructure *structure; + caps = gst_caps_make_writable (caps); + structure = gst_caps_get_structure (caps, 0); GST_DEBUG_OBJECT (interaudiosrc, "fixate"); @@ -510,25 +372,5 @@ gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps) gst_structure_fixate_field_nearest_int (structure, "channels", 2); gst_structure_fixate_field_nearest_int (structure, "rate", 48000); -} - -static gboolean -gst_inter_audio_src_unlock_stop (GstBaseSrc * src) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "stop"); - - return TRUE; -} - -static gboolean -gst_inter_audio_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment) -{ - GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src); - - GST_DEBUG_OBJECT (interaudiosrc, "seek_segment"); - - return FALSE; + return caps; } diff --git a/gst/inter/gstintersubsink.c b/gst/inter/gstintersubsink.c index a42b3e57..3f8ef0dd 100644 --- a/gst/inter/gstintersubsink.c +++ b/gst/inter/gstintersubsink.c @@ -53,28 +53,13 @@ static void gst_inter_sub_sink_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_sub_sink_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_sub_sink_dispose (GObject * object); -static void gst_inter_sub_sink_finalize (GObject * object); - -static GstCaps *gst_inter_sub_sink_get_caps (GstBaseSink * sink); -static gboolean gst_inter_sub_sink_set_caps (GstBaseSink * sink, - GstCaps * caps); -static GstFlowReturn gst_inter_sub_sink_buffer_alloc (GstBaseSink * sink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); + static void gst_inter_sub_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); static gboolean gst_inter_sub_sink_start (GstBaseSink * sink); static gboolean gst_inter_sub_sink_stop (GstBaseSink * sink); -static gboolean gst_inter_sub_sink_unlock (GstBaseSink * sink); -static gboolean gst_inter_sub_sink_event (GstBaseSink * sink, GstEvent * event); -static GstFlowReturn -gst_inter_sub_sink_preroll (GstBaseSink * sink, GstBuffer * buffer); static GstFlowReturn gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer); -static GstStateChangeReturn gst_inter_sub_sink_async_play (GstBaseSink * sink); -static gboolean gst_inter_sub_sink_activate_pull (GstBaseSink * sink, - gboolean active); -static gboolean gst_inter_sub_sink_unlock_stop (GstBaseSink * sink); enum { @@ -94,17 +79,17 @@ GST_STATIC_PAD_TEMPLATE ("sink", /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_sub_sink_debug_category, "intersubsink", 0, \ - "debug category for intersubsink element"); - -GST_BOILERPLATE_FULL (GstInterSubSink, gst_inter_sub_sink, GstBaseSink, - GST_TYPE_BASE_SINK, DEBUG_INIT); +G_DEFINE_TYPE (GstInterSubSink, gst_inter_sub_sink, GST_TYPE_BASE_SINK); static void -gst_inter_sub_sink_base_init (gpointer g_class) +gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (gst_inter_sub_sink_debug_category, "intersubsink", 0, + "debug category for intersubsink element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_sub_sink_sink_template)); @@ -114,39 +99,13 @@ gst_inter_sub_sink_base_init (gpointer g_class) "Sink/Subtitle", "Virtual subtitle sink for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); gobject_class->set_property = gst_inter_sub_sink_set_property; gobject_class->get_property = gst_inter_sub_sink_get_property; - gobject_class->dispose = gst_inter_sub_sink_dispose; - gobject_class->finalize = gst_inter_sub_sink_finalize; - base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_get_caps); - base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_set_caps); - if (0) - base_sink_class->buffer_alloc = - GST_DEBUG_FUNCPTR (gst_inter_sub_sink_buffer_alloc); base_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_get_times); base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_start); base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_stop); - base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_unlock); - if (0) - base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_event); - base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_preroll); base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_render); - if (0) - base_sink_class->async_play = - GST_DEBUG_FUNCPTR (gst_inter_sub_sink_async_play); - if (0) - base_sink_class->activate_pull = - GST_DEBUG_FUNCPTR (gst_inter_sub_sink_activate_pull); - base_sink_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_sub_sink_unlock_stop); g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", @@ -156,8 +115,7 @@ gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass) } static void -gst_inter_sub_sink_init (GstInterSubSink * intersubsink, - GstInterSubSinkClass * intersubsink_class) +gst_inter_sub_sink_init (GstInterSubSink * intersubsink) { intersubsink->channel = g_strdup ("default"); @@ -199,50 +157,6 @@ gst_inter_sub_sink_get_property (GObject * object, guint property_id, } } -void -gst_inter_sub_sink_dispose (GObject * object) -{ - /* GstInterSubSink *intersubsink = GST_INTER_SUB_SINK (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void -gst_inter_sub_sink_finalize (GObject * object) -{ - /* GstInterSubSink *intersubsink = GST_INTER_SUB_SINK (object); */ - - /* clean up object here */ - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - - - -static GstCaps * -gst_inter_sub_sink_get_caps (GstBaseSink * sink) -{ - - return NULL; -} - -static gboolean -gst_inter_sub_sink_set_caps (GstBaseSink * sink, GstCaps * caps) -{ - - return FALSE; -} - -static GstFlowReturn -gst_inter_sub_sink_buffer_alloc (GstBaseSink * sink, guint64 offset, guint size, - GstCaps * caps, GstBuffer ** buf) -{ - - return GST_FLOW_ERROR; -} - static void gst_inter_sub_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end) @@ -293,27 +207,6 @@ gst_inter_sub_sink_stop (GstBaseSink * sink) return TRUE; } -static gboolean -gst_inter_sub_sink_unlock (GstBaseSink * sink) -{ - - return TRUE; -} - -static gboolean -gst_inter_sub_sink_event (GstBaseSink * sink, GstEvent * event) -{ - - return TRUE; -} - -static GstFlowReturn -gst_inter_sub_sink_preroll (GstBaseSink * sink, GstBuffer * buffer) -{ - - return GST_FLOW_OK; -} - static GstFlowReturn gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer) { @@ -329,24 +222,3 @@ gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer) return GST_FLOW_OK; } - -static GstStateChangeReturn -gst_inter_sub_sink_async_play (GstBaseSink * sink) -{ - - return GST_STATE_CHANGE_SUCCESS; -} - -static gboolean -gst_inter_sub_sink_activate_pull (GstBaseSink * sink, gboolean active) -{ - - return TRUE; -} - -static gboolean -gst_inter_sub_sink_unlock_stop (GstBaseSink * sink) -{ - - return TRUE; -} diff --git a/gst/inter/gstintersubsrc.c b/gst/inter/gstintersubsrc.c index 437a3e1e..0001d10d 100644 --- a/gst/inter/gstintersubsrc.c +++ b/gst/inter/gstintersubsrc.c @@ -54,33 +54,15 @@ static void gst_inter_sub_src_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_sub_src_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_sub_src_dispose (GObject * object); -static void gst_inter_sub_src_finalize (GObject * object); -static GstCaps *gst_inter_sub_src_get_caps (GstBaseSrc * src); -static gboolean gst_inter_sub_src_set_caps (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_sub_src_negotiate (GstBaseSrc * src); -static gboolean gst_inter_sub_src_newsegment (GstBaseSrc * src); static gboolean gst_inter_sub_src_start (GstBaseSrc * src); static gboolean gst_inter_sub_src_stop (GstBaseSrc * src); static void gst_inter_sub_src_get_times (GstBaseSrc * src, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); -static gboolean gst_inter_sub_src_is_seekable (GstBaseSrc * src); -static gboolean gst_inter_sub_src_unlock (GstBaseSrc * src); -static gboolean gst_inter_sub_src_event (GstBaseSrc * src, GstEvent * event); static GstFlowReturn gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size, GstBuffer ** buf); -static gboolean gst_inter_sub_src_do_seek (GstBaseSrc * src, - GstSegment * segment); -static gboolean gst_inter_sub_src_query (GstBaseSrc * src, GstQuery * query); -static gboolean gst_inter_sub_src_check_get_range (GstBaseSrc * src); -static void gst_inter_sub_src_fixate (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_sub_src_unlock_stop (GstBaseSrc * src); -static gboolean -gst_inter_sub_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment); enum { @@ -100,17 +82,17 @@ GST_STATIC_PAD_TEMPLATE ("src", /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_sub_src_debug_category, "intersubsrc", 0, \ - "debug category for intersubsrc element"); - -GST_BOILERPLATE_FULL (GstInterSubSrc, gst_inter_sub_src, GstBaseSrc, - GST_TYPE_BASE_SRC, DEBUG_INIT); +G_DEFINE_TYPE (GstInterSubSrc, gst_inter_sub_src, GST_TYPE_BASE_SRC); static void -gst_inter_sub_src_base_init (gpointer g_class) +gst_inter_sub_src_class_init (GstInterSubSrcClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (gst_inter_sub_src_debug_category, "intersubsrc", 0, + "debug category for intersubsrc element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_sub_src_src_template)); @@ -120,48 +102,13 @@ gst_inter_sub_src_base_init (gpointer g_class) "Source/Subtitle", "Virtual subtitle source for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_sub_src_class_init (GstInterSubSrcClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_inter_sub_src_set_property; gobject_class->get_property = gst_inter_sub_src_get_property; - gobject_class->dispose = gst_inter_sub_src_dispose; - gobject_class->finalize = gst_inter_sub_src_finalize; - if (0) - base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_src_get_caps); - base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_src_set_caps); - if (0) - base_src_class->negotiate = GST_DEBUG_FUNCPTR (gst_inter_sub_src_negotiate); - if (0) - base_src_class->newsegment = - GST_DEBUG_FUNCPTR (gst_inter_sub_src_newsegment); base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_sub_src_start); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_sub_src_stop); base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_sub_src_get_times); - if (0) - base_src_class->is_seekable = - GST_DEBUG_FUNCPTR (gst_inter_sub_src_is_seekable); - base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_sub_src_unlock); - base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_sub_src_event); base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_sub_src_create); - if (0) - base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_sub_src_do_seek); - base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_sub_src_query); - if (0) - base_src_class->check_get_range = - GST_DEBUG_FUNCPTR (gst_inter_sub_src_check_get_range); - base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_sub_src_fixate); - if (0) - base_src_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_sub_src_unlock_stop); - if (0) - base_src_class->prepare_seek_segment = - GST_DEBUG_FUNCPTR (gst_inter_sub_src_prepare_seek_segment); g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", @@ -170,8 +117,7 @@ gst_inter_sub_src_class_init (GstInterSubSrcClass * klass) } static void -gst_inter_sub_src_init (GstInterSubSrc * intersubsrc, - GstInterSubSrcClass * intersubsrc_class) +gst_inter_sub_src_init (GstInterSubSrc * intersubsrc) { intersubsrc->srcpad = @@ -216,66 +162,6 @@ gst_inter_sub_src_get_property (GObject * object, guint property_id, } } -void -gst_inter_sub_src_dispose (GObject * object) -{ - /* GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void -gst_inter_sub_src_finalize (GObject * object) -{ - /* GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (object); */ - - /* clean up object here */ - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - - -static GstCaps * -gst_inter_sub_src_get_caps (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "get_caps"); - - return NULL; -} - -static gboolean -gst_inter_sub_src_set_caps (GstBaseSrc * src, GstCaps * caps) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "set_caps"); - - return TRUE; -} - -static gboolean -gst_inter_sub_src_negotiate (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "negotiate"); - - return TRUE; -} - -static gboolean -gst_inter_sub_src_newsegment (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "newsegment"); - - return TRUE; -} static gboolean gst_inter_sub_src_start (GstBaseSrc * src) @@ -329,41 +215,6 @@ gst_inter_sub_src_get_times (GstBaseSrc * src, GstBuffer * buffer, } } -static gboolean -gst_inter_sub_src_is_seekable (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "is_seekable"); - - return FALSE; -} - -static gboolean -gst_inter_sub_src_unlock (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "unlock"); - - return TRUE; -} - -static gboolean -gst_inter_sub_src_event (GstBaseSrc * src, GstEvent * event) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - gboolean ret; - - GST_DEBUG_OBJECT (intersubsrc, "event"); - - switch (GST_EVENT_TYPE (event)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event); - } - - return ret; -} static GstFlowReturn gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size, @@ -388,15 +239,16 @@ gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size, g_mutex_unlock (intersubsrc->surface->mutex); if (buffer == NULL) { - guint8 *data; + GstMapInfo map; buffer = gst_buffer_new_and_alloc (1); - data = GST_BUFFER_DATA (buffer); - data[0] = 0; + gst_buffer_map (buffer, &map, GST_MAP_WRITE); + map.data[0] = 0; + gst_buffer_unmap (buffer, &map); } - buffer = gst_buffer_make_metadata_writable (buffer); + buffer = gst_buffer_make_writable (buffer); GST_BUFFER_TIMESTAMP (buffer) = gst_util_uint64_scale_int (GST_SECOND, intersubsrc->n_frames, @@ -412,75 +264,9 @@ gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size, if (intersubsrc->n_frames == 0) { GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT); } - gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (intersubsrc))); intersubsrc->n_frames++; *buf = buffer; return GST_FLOW_OK; } - -static gboolean -gst_inter_sub_src_do_seek (GstBaseSrc * src, GstSegment * segment) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "do_seek"); - - return FALSE; -} - -static gboolean -gst_inter_sub_src_query (GstBaseSrc * src, GstQuery * query) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - gboolean ret; - - GST_DEBUG_OBJECT (intersubsrc, "query"); - - switch (GST_QUERY_TYPE (query)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query); - } - - return ret; -} - -static gboolean -gst_inter_sub_src_check_get_range (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "get_range"); - - return FALSE; -} - -static void -gst_inter_sub_src_fixate (GstBaseSrc * src, GstCaps * caps) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "fixate"); -} - -static gboolean -gst_inter_sub_src_unlock_stop (GstBaseSrc * src) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "stop"); - - return TRUE; -} - -static gboolean -gst_inter_sub_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment) -{ - GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src); - - GST_DEBUG_OBJECT (intersubsrc, "seek_segment"); - - return FALSE; -} diff --git a/gst/inter/gstintertest.c b/gst/inter/gstintertest.c index 269d6427..077024ea 100644 --- a/gst/inter/gstintertest.c +++ b/gst/inter/gstintertest.c @@ -190,7 +190,7 @@ gst_inter_test_create_pipeline_vts (GstInterTest * intertest) g_string_append (pipe_desc, "videotestsrc name=source num-buffers=100 ! "); g_string_append (pipe_desc, - "video/x-raw-yuv,format=(fourcc)I420,width=320,height=240 ! "); + "video/x-raw,format=(string)I420,width=320,height=240 ! "); g_string_append (pipe_desc, "timeoverlay ! "); g_string_append (pipe_desc, "intervideosink name=sink sync=true "); g_string_append (pipe_desc, @@ -454,7 +454,6 @@ gst_inter_test_handle_message (GstBus * bus, GstMessage * message, case GST_MESSAGE_ELEMENT: case GST_MESSAGE_SEGMENT_START: case GST_MESSAGE_SEGMENT_DONE: - case GST_MESSAGE_DURATION: case GST_MESSAGE_LATENCY: case GST_MESSAGE_ASYNC_START: case GST_MESSAGE_ASYNC_DONE: diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c index d80047e0..6c25590f 100644 --- a/gst/inter/gstintervideosink.c +++ b/gst/inter/gstintervideosink.c @@ -55,30 +55,14 @@ static void gst_inter_video_sink_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_video_sink_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_video_sink_dispose (GObject * object); static void gst_inter_video_sink_finalize (GObject * object); -static GstCaps *gst_inter_video_sink_get_caps (GstBaseSink * sink); -static gboolean gst_inter_video_sink_set_caps (GstBaseSink * sink, - GstCaps * caps); -static GstFlowReturn gst_inter_video_sink_buffer_alloc (GstBaseSink * sink, - guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf); static void gst_inter_video_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); static gboolean gst_inter_video_sink_start (GstBaseSink * sink); static gboolean gst_inter_video_sink_stop (GstBaseSink * sink); -static gboolean gst_inter_video_sink_unlock (GstBaseSink * sink); -static gboolean gst_inter_video_sink_event (GstBaseSink * sink, - GstEvent * event); -static GstFlowReturn gst_inter_video_sink_preroll (GstBaseSink * sink, - GstBuffer * buffer); static GstFlowReturn gst_inter_video_sink_render (GstBaseSink * sink, GstBuffer * buffer); -static GstStateChangeReturn gst_inter_video_sink_async_play (GstBaseSink * - sink); -static gboolean gst_inter_video_sink_activate_pull (GstBaseSink * sink, - gboolean active); -static gboolean gst_inter_video_sink_unlock_stop (GstBaseSink * sink); enum { @@ -92,23 +76,23 @@ static GstStaticPadTemplate gst_inter_video_sink_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420")) + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420")) ); /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_video_sink_debug_category, "intervideosink", 0, \ - "debug category for intervideosink element"); - -GST_BOILERPLATE_FULL (GstInterVideoSink, gst_inter_video_sink, GstBaseSink, - GST_TYPE_BASE_SINK, DEBUG_INIT); +G_DEFINE_TYPE (GstInterVideoSink, gst_inter_video_sink, GST_TYPE_BASE_SINK); static void -gst_inter_video_sink_base_init (gpointer g_class) +gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (gst_inter_video_sink_debug_category, + "intervideosink", 0, "debug category for intervideosink element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_video_sink_sink_template)); @@ -118,41 +102,15 @@ gst_inter_video_sink_base_init (gpointer g_class) "Sink/Video", "Virtual video sink for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass); gobject_class->set_property = gst_inter_video_sink_set_property; gobject_class->get_property = gst_inter_video_sink_get_property; - gobject_class->dispose = gst_inter_video_sink_dispose; gobject_class->finalize = gst_inter_video_sink_finalize; - base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_video_sink_get_caps); - base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_video_sink_set_caps); - if (0) - base_sink_class->buffer_alloc = - GST_DEBUG_FUNCPTR (gst_inter_video_sink_buffer_alloc); base_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_video_sink_get_times); base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_video_sink_start); base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_video_sink_stop); - base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_video_sink_unlock); - if (0) - base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_video_sink_event); - //if (0) - base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_video_sink_preroll); base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_video_sink_render); - if (0) - base_sink_class->async_play = - GST_DEBUG_FUNCPTR (gst_inter_video_sink_async_play); - if (0) - base_sink_class->activate_pull = - GST_DEBUG_FUNCPTR (gst_inter_video_sink_activate_pull); - base_sink_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_video_sink_unlock_stop); g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", @@ -161,8 +119,7 @@ gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass) } static void -gst_inter_video_sink_init (GstInterVideoSink * intervideosink, - GstInterVideoSinkClass * intervideosink_class) +gst_inter_video_sink_init (GstInterVideoSink * intervideosink) { intervideosink->channel = g_strdup ("default"); } @@ -201,16 +158,6 @@ gst_inter_video_sink_get_property (GObject * object, guint property_id, } void -gst_inter_video_sink_dispose (GObject * object) -{ - /* GstInterVideoSink *intervideosink = GST_INTER_VIDEO_SINK (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void gst_inter_video_sink_finalize (GObject * object) { GstInterVideoSink *intervideosink = GST_INTER_VIDEO_SINK (object); @@ -218,33 +165,10 @@ gst_inter_video_sink_finalize (GObject * object) /* clean up object here */ g_free (intervideosink->channel); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (gst_inter_video_sink_parent_class)->finalize (object); } - -static GstCaps * -gst_inter_video_sink_get_caps (GstBaseSink * sink) -{ - - return NULL; -} - -static gboolean -gst_inter_video_sink_set_caps (GstBaseSink * sink, GstCaps * caps) -{ - - return TRUE; -} - -static GstFlowReturn -gst_inter_video_sink_buffer_alloc (GstBaseSink * sink, guint64 offset, - guint size, GstCaps * caps, GstBuffer ** buf) -{ - - return GST_FLOW_ERROR; -} - static void gst_inter_video_sink_get_times (GstBaseSink * sink, GstBuffer * buffer, GstClockTime * start, GstClockTime * end) @@ -295,28 +219,6 @@ gst_inter_video_sink_stop (GstBaseSink * sink) return TRUE; } -static gboolean -gst_inter_video_sink_unlock (GstBaseSink * sink) -{ - - return TRUE; -} - -static gboolean -gst_inter_video_sink_event (GstBaseSink * sink, GstEvent * event) -{ - - return TRUE; -} - -static GstFlowReturn -gst_inter_video_sink_preroll (GstBaseSink * sink, GstBuffer * buffer) -{ - //return gst_inter_video_sink_render (sink, buffer); - - return GST_FLOW_OK; -} - static GstFlowReturn gst_inter_video_sink_render (GstBaseSink * sink, GstBuffer * buffer) { @@ -332,24 +234,3 @@ gst_inter_video_sink_render (GstBaseSink * sink, GstBuffer * buffer) return GST_FLOW_OK; } - -static GstStateChangeReturn -gst_inter_video_sink_async_play (GstBaseSink * sink) -{ - - return GST_STATE_CHANGE_SUCCESS; -} - -static gboolean -gst_inter_video_sink_activate_pull (GstBaseSink * sink, gboolean active) -{ - - return TRUE; -} - -static gboolean -gst_inter_video_sink_unlock_stop (GstBaseSink * sink) -{ - - return TRUE; -} diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c index ec323e37..54c76d32 100644 --- a/gst/inter/gstintervideosrc.c +++ b/gst/inter/gstintervideosrc.c @@ -54,33 +54,18 @@ static void gst_inter_video_src_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec); static void gst_inter_video_src_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec); -static void gst_inter_video_src_dispose (GObject * object); static void gst_inter_video_src_finalize (GObject * object); -static GstCaps *gst_inter_video_src_get_caps (GstBaseSrc * src); static gboolean gst_inter_video_src_set_caps (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_video_src_negotiate (GstBaseSrc * src); -static gboolean gst_inter_video_src_newsegment (GstBaseSrc * src); static gboolean gst_inter_video_src_start (GstBaseSrc * src); static gboolean gst_inter_video_src_stop (GstBaseSrc * src); static void gst_inter_video_src_get_times (GstBaseSrc * src, GstBuffer * buffer, GstClockTime * start, GstClockTime * end); -static gboolean gst_inter_video_src_is_seekable (GstBaseSrc * src); -static gboolean gst_inter_video_src_unlock (GstBaseSrc * src); -static gboolean gst_inter_video_src_event (GstBaseSrc * src, GstEvent * event); static GstFlowReturn gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, GstBuffer ** buf); -static gboolean gst_inter_video_src_do_seek (GstBaseSrc * src, - GstSegment * segment); -static gboolean gst_inter_video_src_query (GstBaseSrc * src, GstQuery * query); -static gboolean gst_inter_video_src_check_get_range (GstBaseSrc * src); -static void gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps); -static gboolean gst_inter_video_src_unlock_stop (GstBaseSrc * src); -static gboolean -gst_inter_video_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment); +static GstCaps *gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps); enum { @@ -94,23 +79,23 @@ static GstStaticPadTemplate gst_inter_video_src_src_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420")) + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420")) ); /* class initialization */ -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_inter_video_src_debug_category, "intervideosrc", 0, \ - "debug category for intervideosrc element"); - -GST_BOILERPLATE_FULL (GstInterVideoSrc, gst_inter_video_src, GstBaseSrc, - GST_TYPE_BASE_SRC, DEBUG_INIT); +G_DEFINE_TYPE (GstInterVideoSrc, gst_inter_video_src, GST_TYPE_BASE_SRC); static void -gst_inter_video_src_base_init (gpointer g_class) +gst_inter_video_src_class_init (GstInterVideoSrcClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (gst_inter_video_src_debug_category, "intervideosrc", + 0, "debug category for intervideosrc element"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_inter_video_src_src_template)); @@ -120,49 +105,16 @@ gst_inter_video_src_base_init (gpointer g_class) "Source/Video", "Virtual video source for internal process communication", "David Schleef <ds@schleef.org>"); -} - -static void -gst_inter_video_src_class_init (GstInterVideoSrcClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass); gobject_class->set_property = gst_inter_video_src_set_property; gobject_class->get_property = gst_inter_video_src_get_property; - gobject_class->dispose = gst_inter_video_src_dispose; gobject_class->finalize = gst_inter_video_src_finalize; - if (0) - base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_video_src_get_caps); base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_video_src_set_caps); - if (0) - base_src_class->negotiate = - GST_DEBUG_FUNCPTR (gst_inter_video_src_negotiate); - if (0) - base_src_class->newsegment = - GST_DEBUG_FUNCPTR (gst_inter_video_src_newsegment); base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_video_src_start); base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_video_src_stop); base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_video_src_get_times); - if (0) - base_src_class->is_seekable = - GST_DEBUG_FUNCPTR (gst_inter_video_src_is_seekable); - base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_video_src_unlock); - base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_video_src_event); base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_video_src_create); - if (0) - base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_video_src_do_seek); - base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_video_src_query); - if (0) - base_src_class->check_get_range = - GST_DEBUG_FUNCPTR (gst_inter_video_src_check_get_range); base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_video_src_fixate); - if (0) - base_src_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_inter_video_src_unlock_stop); - if (0) - base_src_class->prepare_seek_segment = - GST_DEBUG_FUNCPTR (gst_inter_video_src_prepare_seek_segment); g_object_class_install_property (gobject_class, PROP_CHANNEL, g_param_spec_string ("channel", "Channel", @@ -172,8 +124,7 @@ gst_inter_video_src_class_init (GstInterVideoSrcClass * klass) } static void -gst_inter_video_src_init (GstInterVideoSrc * intervideosrc, - GstInterVideoSrcClass * intervideosrc_class) +gst_inter_video_src_init (GstInterVideoSrc * intervideosrc) { gst_base_src_set_format (GST_BASE_SRC (intervideosrc), GST_FORMAT_TIME); gst_base_src_set_live (GST_BASE_SRC (intervideosrc), TRUE); @@ -215,16 +166,6 @@ gst_inter_video_src_get_property (GObject * object, guint property_id, } void -gst_inter_video_src_dispose (GObject * object) -{ - /* GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (object); */ - - /* clean up as possible. may be called multiple times */ - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -void gst_inter_video_src_finalize (GObject * object) { GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (object); @@ -232,65 +173,24 @@ gst_inter_video_src_finalize (GObject * object) /* clean up object here */ g_free (intervideosrc->channel); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (gst_inter_video_src_parent_class)->finalize (object); } -static GstCaps * -gst_inter_video_src_get_caps (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "get_caps"); - - return NULL; -} static gboolean gst_inter_video_src_set_caps (GstBaseSrc * src, GstCaps * caps) { GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - gboolean ret; - GstVideoFormat format; - int width, height; - int fps_n, fps_d; GST_DEBUG_OBJECT (intervideosrc, "set_caps"); - ret = gst_video_format_parse_caps (caps, &format, &width, &height); - ret &= gst_video_parse_caps_framerate (caps, &fps_n, &fps_d); - - if (ret) { - intervideosrc->format = format; - intervideosrc->width = width; - intervideosrc->height = height; - intervideosrc->fps_n = fps_n; - intervideosrc->fps_d = fps_d; - GST_DEBUG ("fps %d/%d", fps_n, fps_d); - } - - return ret; -} + if (!gst_video_info_from_caps (&intervideosrc->info, caps)) + return FALSE; -static gboolean -gst_inter_video_src_negotiate (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "negotiate"); - - return TRUE; + return gst_pad_set_caps (src->srcpad, caps); } -static gboolean -gst_inter_video_src_newsegment (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "newsegment"); - - return TRUE; -} static gboolean gst_inter_video_src_start (GstBaseSrc * src) @@ -344,41 +244,6 @@ gst_inter_video_src_get_times (GstBaseSrc * src, GstBuffer * buffer, } } -static gboolean -gst_inter_video_src_is_seekable (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "is_seekable"); - - return FALSE; -} - -static gboolean -gst_inter_video_src_unlock (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "unlock"); - - return TRUE; -} - -static gboolean -gst_inter_video_src_event (GstBaseSrc * src, GstEvent * event) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - gboolean ret; - - GST_DEBUG_OBJECT (intervideosrc, "event"); - - switch (GST_EVENT_TYPE (event)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event); - } - - return ret; -} static GstFlowReturn gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, @@ -386,7 +251,6 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, { GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); GstBuffer *buffer; - guint8 *data; GST_DEBUG_OBJECT (intervideosrc, "create"); @@ -404,44 +268,41 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, g_mutex_unlock (intervideosrc->surface->mutex); if (buffer == NULL) { + GstMapInfo map; + buffer = - gst_buffer_new_and_alloc (gst_video_format_get_size - (intervideosrc->format, intervideosrc->width, intervideosrc->height)); - - data = GST_BUFFER_DATA (buffer); - memset (data, 16, - gst_video_format_get_row_stride (intervideosrc->format, 0, - intervideosrc->width) * - gst_video_format_get_component_height (intervideosrc->format, 0, - intervideosrc->height)); - - memset (data + gst_video_format_get_component_offset (intervideosrc->format, - 1, intervideosrc->width, intervideosrc->height), + gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&intervideosrc->info)); + + gst_buffer_map (buffer, &map, GST_MAP_WRITE); + memset (map.data, 16, GST_VIDEO_INFO_COMP_STRIDE (&intervideosrc->info, 0) * + GST_VIDEO_INFO_COMP_HEIGHT (&intervideosrc->info, 0)); + + memset (map.data + GST_VIDEO_INFO_COMP_OFFSET (&intervideosrc->info, 1), 128, - 2 * gst_video_format_get_row_stride (intervideosrc->format, 1, - intervideosrc->width) * - gst_video_format_get_component_height (intervideosrc->format, 1, - intervideosrc->height)); + 2 * GST_VIDEO_INFO_COMP_STRIDE (&intervideosrc->info, 1) * + GST_VIDEO_INFO_COMP_HEIGHT (&intervideosrc->info, 1)); + gst_buffer_unmap (buffer, &map); } - buffer = gst_buffer_make_metadata_writable (buffer); + buffer = gst_buffer_make_writable (buffer); GST_BUFFER_TIMESTAMP (buffer) = gst_util_uint64_scale_int (GST_SECOND * intervideosrc->n_frames, - intervideosrc->fps_d, intervideosrc->fps_n); + GST_VIDEO_INFO_FPS_D (&intervideosrc->info), + GST_VIDEO_INFO_FPS_N (&intervideosrc->info)); GST_DEBUG_OBJECT (intervideosrc, "create ts %" GST_TIME_FORMAT, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer))); GST_BUFFER_DURATION (buffer) = gst_util_uint64_scale_int (GST_SECOND * (intervideosrc->n_frames + 1), - intervideosrc->fps_d, - intervideosrc->fps_n) - GST_BUFFER_TIMESTAMP (buffer); + GST_VIDEO_INFO_FPS_D (&intervideosrc->info), + GST_VIDEO_INFO_FPS_N (&intervideosrc->info)) - + GST_BUFFER_TIMESTAMP (buffer); GST_BUFFER_OFFSET (buffer) = intervideosrc->n_frames; GST_BUFFER_OFFSET_END (buffer) = -1; GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT); if (intervideosrc->n_frames == 0) { GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT); } - gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (intervideosrc))); intervideosrc->n_frames++; *buf = buffer; @@ -449,43 +310,7 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size, return GST_FLOW_OK; } -static gboolean -gst_inter_video_src_do_seek (GstBaseSrc * src, GstSegment * segment) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "do_seek"); - - return FALSE; -} - -static gboolean -gst_inter_video_src_query (GstBaseSrc * src, GstQuery * query) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - gboolean ret; - - GST_DEBUG_OBJECT (intervideosrc, "query"); - - switch (GST_QUERY_TYPE (query)) { - default: - ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query); - } - - return ret; -} - -static gboolean -gst_inter_video_src_check_get_range (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "get_range"); - - return FALSE; -} - -static void +static GstCaps * gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps) { GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); @@ -493,6 +318,8 @@ gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps) GST_DEBUG_OBJECT (intervideosrc, "fixate"); + caps = gst_caps_make_writable (caps); + structure = gst_caps_get_structure (caps, 0); gst_structure_fixate_field_nearest_int (structure, "width", 320); @@ -509,25 +336,5 @@ gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps) if (gst_structure_has_field (structure, "interlaced")) gst_structure_fixate_field_boolean (structure, "interlaced", FALSE); -} - -static gboolean -gst_inter_video_src_unlock_stop (GstBaseSrc * src) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "stop"); - - return TRUE; -} - -static gboolean -gst_inter_video_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek, - GstSegment * segment) -{ - GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src); - - GST_DEBUG_OBJECT (intervideosrc, "seek_segment"); - - return FALSE; + return caps; } diff --git a/gst/inter/gstintervideosrc.h b/gst/inter/gstintervideosrc.h index 100c2148..b2b1036e 100644 --- a/gst/inter/gstintervideosrc.h +++ b/gst/inter/gstintervideosrc.h @@ -43,12 +43,8 @@ struct _GstInterVideoSrc char *channel; - GstVideoFormat format; - int fps_n; - int fps_d; + GstVideoInfo info; int n_frames; - int width; - int height; }; struct _GstInterVideoSrcClass diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in index c2028d34..978c6739 100644 --- a/gst/interlace/Makefile.in +++ b/gst/interlace/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in index cc51a5d9..9dce911c 100644 --- a/gst/ivfparse/Makefile.in +++ b/gst/ivfparse/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in index 65d58ff4..16963246 100644 --- a/gst/jp2kdecimator/Makefile.in +++ b/gst/jp2kdecimator/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/jpegformat/Makefile.am b/gst/jpegformat/Makefile.am index 0fe07a88..03125b57 100644 --- a/gst/jpegformat/Makefile.am +++ b/gst/jpegformat/Makefile.am @@ -1,12 +1,10 @@ plugin_LTLIBRARIES = libgstjpegformat.la libgstjpegformat_la_SOURCES = gstjpegformat.c gstjpegparse.c gstjifmux.c -libgstjpegformat_la_CFLAGS = \ - $(GST_PLUGINS_BASE_CFLAGS) \ - $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) +libgstjpegformat_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstjpegformat_la_LIBADD = \ - $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-@GST_API_VERSION@ \ - -lgsttag-@GST_API_VERSION@ $(GST_LIBS) $(GST_BASE_LIBS) + $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS) libgstjpegformat_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstjpegformat_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in index 0f8bafed..89285822 100644 --- a/gst/jpegformat/Makefile.in +++ b/gst/jpegformat/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -606,13 +614,11 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstjpegformat.la libgstjpegformat_la_SOURCES = gstjpegformat.c gstjpegparse.c gstjifmux.c -libgstjpegformat_la_CFLAGS = \ - $(GST_PLUGINS_BASE_CFLAGS) \ - $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) +libgstjpegformat_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) libgstjpegformat_la_LIBADD = \ - $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-@GST_API_VERSION@ \ - -lgsttag-@GST_API_VERSION@ $(GST_LIBS) $(GST_BASE_LIBS) + $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS) libgstjpegformat_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstjpegformat_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c index 9329f28f..4a59388a 100644 --- a/gst/jpegformat/gstjifmux.c +++ b/gst/jpegformat/gstjifmux.c @@ -108,9 +108,11 @@ struct _GstJifMuxPrivate static void gst_jif_mux_finalize (GObject * object); static void gst_jif_mux_reset (GstJifMux * self); -static gboolean gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps); -static gboolean gst_jif_mux_sink_event (GstPad * pad, GstEvent * event); -static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstBuffer * buffer); +static gboolean gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps); +static gboolean gst_jif_mux_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); static GstStateChangeReturn gst_jif_mux_change_state (GstElement * element, GstStateChange transition); @@ -180,15 +182,14 @@ gst_jif_mux_finalize (GObject * object) } static gboolean -gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps) +gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps) { - GstJifMux *self = GST_JIF_MUX_CAST (GST_PAD_PARENT (pad)); GstStructure *s = gst_caps_get_structure (caps, 0); const gchar *variant; /* should be {combined (default), EXIF, JFIF} */ if ((variant = gst_structure_get_string (s, "variant")) != NULL) { - GST_INFO_OBJECT (pad, "muxing to '%s'", variant); + GST_INFO_OBJECT (self, "muxing to '%s'", variant); /* FIXME: do we want to switch it like this or use a gobject property ? */ } @@ -196,9 +197,9 @@ gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps) } static gboolean -gst_jif_mux_sink_event (GstPad * pad, GstEvent * event) +gst_jif_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad)); + GstJifMux *self = GST_JIF_MUX (parent); gboolean ret; switch (GST_EVENT_TYPE (event)) { @@ -207,7 +208,7 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event) GstCaps *caps; gst_event_parse_caps (event, &caps); - ret = gst_jif_mux_sink_setcaps (pad, caps); + ret = gst_jif_mux_sink_setcaps (self, caps); gst_event_unref (event); break; } @@ -220,11 +221,11 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event) gst_tag_setter_merge_tags (setter, list, mode); - ret = gst_pad_event_default (pad, event); + ret = gst_pad_event_default (pad, parent, event); break; } default: - ret = gst_pad_event_default (pad, event); + ret = gst_pad_event_default (pad, parent, event); break; } return ret; @@ -275,13 +276,12 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf) guint8 marker = 0; guint16 size = 0; const guint8 *data = NULL; - guint8 *bdata; - gsize bsize; + GstMapInfo map; - bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ); - gst_byte_reader_init (&reader, bdata, bsize); + gst_buffer_map (buf, &map, GST_MAP_READ); + gst_byte_reader_init (&reader, map.data, map.size); - GST_LOG_OBJECT (self, "Received buffer of size: %u", bsize); + GST_LOG_OBJECT (self, "Received buffer of size: %u", map.size); if (!gst_byte_reader_peek_uint8 (&reader, &marker)) goto error; @@ -329,23 +329,19 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf) if (marker == SOS) { gint eoi_pos = -1; gint i; - guint8 *mdata; - gsize msize; /* search the last 5 bytes for the EOI marker */ - mdata = gst_buffer_map (buf, &msize, NULL, GST_MAP_READ); - g_assert (msize >= 5); + g_assert (map.size >= 5); for (i = 5; i >= 2; i--) { - if (mdata[msize - i] == 0xFF && mdata[msize - i + 1] == EOI) { - eoi_pos = msize - i; + if (map.data[map.size - i] == 0xFF && map.data[map.size - i + 1] == EOI) { + eoi_pos = map.size - i; break; } } if (eoi_pos == -1) { GST_WARNING_OBJECT (self, "Couldn't find an EOI marker"); - eoi_pos = msize; + eoi_pos = map.size; } - gst_buffer_unmap (buf, mdata, msize); /* remaining size except EOI is scan data */ self->priv->scan_size = eoi_pos - gst_byte_reader_get_pos (&reader); @@ -360,11 +356,11 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf) goto error; } GST_INFO_OBJECT (self, "done parsing at 0x%x / 0x%x", - gst_byte_reader_get_pos (&reader), bsize); + gst_byte_reader_get_pos (&reader), map.size); done: self->priv->markers = g_list_reverse (self->priv->markers); - gst_buffer_unmap (buf, bdata, bsize); + gst_buffer_unmap (buf, &map); return TRUE; @@ -374,7 +370,7 @@ error: GST_WARNING_OBJECT (self, "Error parsing image header (need more that %u bytes available)", gst_byte_reader_get_remaining (&reader)); - gst_buffer_unmap (buf, bdata, bsize); + gst_buffer_unmap (buf, &map); return FALSE; } } @@ -523,7 +519,7 @@ gst_jif_mux_mangle_markers (GstJifMux * self) cleanup_tags = FALSE; } if (!tags) { - tags = gst_tag_list_new (); + tags = gst_tag_list_new_empty (); cleanup_tags = TRUE; } @@ -652,8 +648,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, GList *node; guint size = self->priv->scan_size; gboolean writer_status = TRUE; - guint8 *bdata; - gsize bsize; + GstMapInfo map; /* iterate list and collect size */ for (node = self->priv->markers; node; node = g_list_next (node)) { @@ -677,8 +672,8 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1); /* memcopy markers */ - bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_WRITE); - writer = gst_byte_writer_new_with_data (bdata, bsize, TRUE); + gst_buffer_map (buf, &map, GST_MAP_WRITE); + writer = gst_byte_writer_new_with_data (map.data, map.size, TRUE); for (node = self->priv->markers; node && writer_status; node = g_list_next (node)) { @@ -701,7 +696,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, self->priv->scan_size); } } - gst_buffer_unmap (buf, bdata, bsize); + gst_buffer_unmap (buf, &map); gst_byte_writer_free (writer); if (!writer_status) { @@ -715,9 +710,9 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, } static GstFlowReturn -gst_jif_mux_chain (GstPad * pad, GstBuffer * buf) +gst_jif_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { - GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad)); + GstJifMux *self = GST_JIF_MUX (parent); GstFlowReturn fret = GST_FLOW_OK; #if 0 diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c index 5d47e7c0..b4af9ed9 100644 --- a/gst/jpegformat/gstjpegparse.c +++ b/gst/jpegformat/gstjpegparse.c @@ -121,10 +121,12 @@ struct _GstJpegParsePrivate static void gst_jpeg_parse_dispose (GObject * object); -static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buffer); -static gboolean gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps); -static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event); -static GstCaps *gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter); +static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstObject * parent, + GstBuffer * buffer); +static gboolean gst_jpeg_parse_sink_setcaps (GstJpegParse * parse, + GstCaps * caps); +static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); static GstStateChangeReturn gst_jpeg_parse_change_state (GstElement * element, GstStateChange transition); @@ -180,8 +182,7 @@ gst_jpeg_parse_init (GstJpegParse * parse) parse->priv->srcpad = gst_pad_new_from_static_template (&gst_jpeg_parse_src_pad_template, "src"); - gst_pad_set_getcaps_function (parse->priv->srcpad, - GST_DEBUG_FUNCPTR (gst_jpeg_parse_src_getcaps)); + gst_pad_use_fixed_caps (parse->priv->srcpad); gst_element_add_pad (GST_ELEMENT (parse), parse->priv->srcpad); parse->priv->next_ts = GST_CLOCK_TIME_NONE; @@ -204,9 +205,8 @@ gst_jpeg_parse_dispose (GObject * object) static gboolean -gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps) +gst_jpeg_parse_sink_setcaps (GstJpegParse * parse, GstCaps * caps) { - GstJpegParse *parse = GST_JPEG_PARSE (GST_OBJECT_PARENT (pad)); GstStructure *s = gst_caps_get_structure (caps, 0); const GValue *framerate; @@ -225,19 +225,6 @@ gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps) return TRUE; } -static GstCaps * -gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter) -{ - GstCaps *result; - - if ((result = gst_pad_get_current_caps (pad))) { - GST_DEBUG_OBJECT (pad, "using pad caps %" GST_PTR_FORMAT, result); - } else { - result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad))); - GST_DEBUG_OBJECT (pad, "using pad template caps %" GST_PTR_FORMAT, result); - } - return result; -} /* * gst_jpeg_parse_skip_to_jpeg_header: @@ -508,8 +495,7 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse, { guint16 size = 0; guint pos = gst_byte_reader_get_pos (reader); - guint8 *data; - gsize bsize; + GstMapInfo map; if (!gst_byte_reader_peek_uint16_be (reader, &size)) return FALSE; @@ -518,9 +504,10 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse, GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes", marker, size); - data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READWRITE); - memmove (&data[pos], &data[pos + size], bsize - (pos + size)); - gst_buffer_unmap (buffer, data, bsize - size); + gst_buffer_map (buffer, &map, GST_MAP_READWRITE); + memmove (&map.data[pos], &map.data[pos + size], map.size - (pos + size)); + gst_buffer_unmap (buffer, &map); + if (!gst_byte_reader_set_pos (reader, pos - size)) return FALSE; @@ -537,7 +524,7 @@ gst_jpeg_parse_skip_marker (GstJpegParse * parse, if (!gst_byte_reader_get_uint16_be (reader, &size)) return FALSE; -#ifndef GST_DISABLE_DEBUG +#ifndef GST_DISABLE_GST_DEBUG /* We'd pry the id of the skipped application segment */ if (marker >= APP0 && marker <= APP15) { const gchar *id_str = NULL; @@ -553,7 +540,7 @@ gst_jpeg_parse_skip_marker (GstJpegParse * parse, #else GST_DEBUG_OBJECT (parse, "unhandled marker %x skiping %u bytes", marker, size); -#endif // GST_DISABLE_DEBUG +#endif // GST_DISABLE_GST_DEBUG if (!gst_byte_reader_skip (reader, size - 2)) return FALSE; @@ -565,7 +552,7 @@ static inline GstTagList * get_tag_list (GstJpegParse * parse) { if (!parse->priv->tags) - parse->priv->tags = gst_tag_list_new (); + parse->priv->tags = gst_tag_list_new_empty (); return parse->priv->tags; } @@ -576,7 +563,8 @@ extract_and_queue_tags (GstJpegParse * parse, guint size, guint8 * data, GstTagList *tags; GstBuffer *buf; - buf = gst_buffer_new_wrapped_full (data, NULL, 0, size); + buf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, data, size, 0, + size, NULL, NULL); tags = tag_func (buf); gst_buffer_unref (buf); @@ -695,11 +683,10 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer) GstByteReader reader; guint8 marker = 0; gboolean foundSOF = FALSE; - guint8 *data; - gsize size; + GstMapInfo map; - data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ); - gst_byte_reader_init (&reader, data, size); + gst_buffer_map (buffer, &map, GST_MAP_READ); + gst_byte_reader_init (&reader, map.data, map.size); if (!gst_byte_reader_peek_uint8 (&reader, &marker)) goto error; @@ -769,7 +756,7 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer) goto error; } done: - gst_buffer_unmap (buffer, data, size); + gst_buffer_unmap (buffer, &map); return foundSOF; @@ -779,7 +766,7 @@ error: GST_WARNING_OBJECT (parse, "Error parsing image header (need more than %u bytes available)", gst_byte_reader_get_remaining (&reader)); - gst_buffer_unmap (buffer, data, size); + gst_buffer_unmap (buffer, &map); return FALSE; } unhandled: @@ -787,7 +774,7 @@ unhandled: GST_WARNING_OBJECT (parse, "unhandled marker %x, leaving", marker); /* Not SOF or SOI. Must not be a JPEG file (or file pointer * is placed wrong). In either case, it's an error. */ - gst_buffer_unmap (buffer, data, size); + gst_buffer_unmap (buffer, &map); return FALSE; } } @@ -876,8 +863,8 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len) if (parse->priv->tags) { GST_DEBUG_OBJECT (parse, "Pushing tags: %" GST_PTR_FORMAT, parse->priv->tags); - gst_element_found_tags_for_pad (GST_ELEMENT_CAST (parse), - parse->priv->srcpad, parse->priv->tags); + gst_pad_push_event (parse->priv->srcpad, + gst_event_new_tag (parse->priv->tags)); parse->priv->tags = NULL; } @@ -910,16 +897,14 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len) } static GstFlowReturn -gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf) +gst_jpeg_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { - GstJpegParse *parse; + GstJpegParse *parse = GST_JPEG_PARSE (parent); gint len; GstClockTime timestamp, duration; GstFlowReturn ret = GST_FLOW_OK; - parse = GST_JPEG_PARSE (GST_PAD_PARENT (pad)); - - timestamp = GST_BUFFER_TIMESTAMP (buf); + timestamp = GST_BUFFER_PTS (buf); duration = GST_BUFFER_DURATION (buf); gst_adapter_push (parse->priv->adapter, buf); @@ -951,9 +936,9 @@ gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf) } static gboolean -gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event) +gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstJpegParse *parse; + GstJpegParse *parse = GST_JPEG_PARSE (parent); gboolean res = TRUE; parse = GST_JPEG_PARSE (gst_pad_get_parent (pad)); @@ -966,7 +951,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event) GstCaps *caps; gst_event_parse_caps (event, &caps); - res = gst_jpeg_parse_sink_setcaps (pad, caps); + res = gst_jpeg_parse_sink_setcaps (parse, caps); gst_event_unref (event); break; } @@ -995,7 +980,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event) break; case GST_EVENT_TAG:{ if (!parse->priv->new_segment) - res = gst_pad_event_default (pad, event); + res = gst_pad_event_default (pad, parent, event); else { GstTagList *taglist = NULL; @@ -1009,7 +994,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event) break; } default: - res = gst_pad_event_default (pad, event); + res = gst_pad_event_default (pad, parent, event); break; } diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in index 678c3373..eb335187 100644 --- a/gst/librfb/Makefile.in +++ b/gst/librfb/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/liveadder/Makefile.in b/gst/liveadder/Makefile.in index 3963ac0c..6b212b4b 100644 --- a/gst/liveadder/Makefile.in +++ b/gst/liveadder/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c index 5cdced4d..fc6d54ba 100644 --- a/gst/liveadder/liveadder.c +++ b/gst/liveadder/liveadder.c @@ -1,7 +1,7 @@ /* - * Farsight Voice+Video library + * GStreamer * - * Copyright 2008 Collabora Ltd + * Copyright 2012 Collabora Ltd * Copyright 2008 Nokia Corporation * @author: Olivier Crete <olivier.crete@collabora.co.uk> * @@ -55,19 +55,23 @@ GST_DEBUG_CATEGORY_STATIC (live_adder_debug); #define GST_CAT_DEFAULT (live_adder_debug) static GstStaticPadTemplate gst_live_adder_sink_template = - GST_STATIC_PAD_TEMPLATE ("sink_%u", +GST_STATIC_PAD_TEMPLATE ("sink_%u", GST_PAD_SINK, GST_PAD_REQUEST, - GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " - GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS) + GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, " + GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) "," + GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) "," + GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}")) ); static GstStaticPadTemplate gst_live_adder_src_template = - GST_STATIC_PAD_TEMPLATE ("src", +GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " - GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS) + GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, " + GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) "," + GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) "," + GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}")) ); /* Valve signals and args */ @@ -92,12 +96,7 @@ typedef struct _GstLiveAdderPadPrivate } GstLiveAdderPadPrivate; -#define _do_init(bla) \ - GST_DEBUG_CATEGORY_INIT (live_adder_debug, "liveadder", 0, "Live Adder"); - -GST_BOILERPLATE_FULL (GstLiveAdder, gst_live_adder, GstElement, - GST_TYPE_ELEMENT, _do_init); - +G_DEFINE_TYPE (GstLiveAdder, gst_live_adder, GST_TYPE_ELEMENT); static void gst_live_adder_finalize (GObject * object); static void @@ -108,20 +107,27 @@ gst_live_adder_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static GstPad *gst_live_adder_request_new_pad (GstElement * element, - GstPadTemplate * templ, const gchar * unused); + GstPadTemplate * templ, const gchar * name, const GstCaps * caps); static void gst_live_adder_release_pad (GstElement * element, GstPad * pad); static GstStateChangeReturn gst_live_adder_change_state (GstElement * element, GstStateChange transition); -static gboolean gst_live_adder_setcaps (GstPad * pad, GstCaps * caps); -static GstCaps *gst_live_adder_sink_getcaps (GstPad * pad); -static gboolean -gst_live_adder_src_activate_push (GstPad * pad, gboolean active); -static gboolean gst_live_adder_src_event (GstPad * pad, GstEvent * event); +static gboolean gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad, + GstCaps * caps); +static GstCaps *gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad, + GstCaps * filter); +static gboolean gst_live_adder_src_activate_mode (GstPad * pad, + GstObject * parent, GstPadMode mode, gboolean active); +static gboolean gst_live_adder_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); static void gst_live_adder_loop (gpointer data); -static gboolean gst_live_adder_query (GstPad * pad, GstQuery * query); -static gboolean gst_live_adder_sink_event (GstPad * pad, GstEvent * event); +static gboolean gst_live_adder_src_query (GstPad * pad, GstObject * parent, + GstQuery * query); +static gboolean gst_live_adder_sink_query (GstPad * pad, GstObject * parent, + GstQuery * query); +static gboolean gst_live_adder_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); static void reset_pad_private (GstPad * pad); @@ -155,10 +161,13 @@ MAKE_FUNC_NC (add_float32, gfloat, gfloat) static void -gst_live_adder_base_init (gpointer klass) +gst_live_adder_class_init (GstLiveAdderClass * klass) { + GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *gstelement_class = (GstElementClass *) klass; + GST_DEBUG_CATEGORY_INIT (live_adder_debug, "liveadder", 0, "Live Adder"); + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_live_adder_src_template)); gst_element_class_add_pad_template (gstelement_class, @@ -167,13 +176,6 @@ gst_live_adder_base_init (gpointer klass) "Generic/Audio", "Mixes live/discontinuous audio streams", "Olivier Crete <olivier.crete@collabora.co.uk>"); -} - -static void -gst_live_adder_class_init (GstLiveAdderClass * klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - GstElementClass *gstelement_class = (GstElementClass *) klass; gobject_class->finalize = gst_live_adder_finalize; gobject_class->set_property = gst_live_adder_set_property; @@ -190,23 +192,18 @@ gst_live_adder_class_init (GstLiveAdderClass * klass) } static void -gst_live_adder_init (GstLiveAdder * adder, GstLiveAdderClass * klass) +gst_live_adder_init (GstLiveAdder * adder) { adder->srcpad = gst_pad_new_from_static_template (&gst_live_adder_src_template, "src"); - gst_pad_set_getcaps_function (adder->srcpad, - GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps)); - gst_pad_set_setcaps_function (adder->srcpad, - GST_DEBUG_FUNCPTR (gst_live_adder_setcaps)); gst_pad_set_query_function (adder->srcpad, - GST_DEBUG_FUNCPTR (gst_live_adder_query)); + GST_DEBUG_FUNCPTR (gst_live_adder_src_query)); gst_pad_set_event_function (adder->srcpad, GST_DEBUG_FUNCPTR (gst_live_adder_src_event)); - gst_pad_set_activatepush_function (adder->srcpad, - GST_DEBUG_FUNCPTR (gst_live_adder_src_activate_push)); + gst_pad_set_activatemode_function (adder->srcpad, + GST_DEBUG_FUNCPTR (gst_live_adder_src_activate_mode)); gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad); - adder->format = GST_LIVE_ADDER_FORMAT_UNSET; adder->padcount = 0; adder->func = NULL; adder->not_empty_cond = g_cond_new (); @@ -233,7 +230,7 @@ gst_live_adder_finalize (GObject * object) g_list_free (adder->sinkpads); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (gst_live_adder_parent_class)->finalize (object); } @@ -294,24 +291,24 @@ gst_live_adder_get_property (GObject * object, /* we can only accept caps that we and downstream can handle. */ static GstCaps * -gst_live_adder_sink_getcaps (GstPad * pad) +gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad, + GstCaps * filter) { - GstLiveAdder *adder; GstCaps *result, *peercaps, *sinkcaps; - adder = GST_LIVE_ADDER (GST_PAD_PARENT (pad)); - /* get the downstream possible caps */ - peercaps = gst_pad_peer_get_caps (adder->srcpad); + peercaps = gst_pad_peer_query_caps (adder->srcpad, filter); /* get the allowed caps on this sinkpad, we use the fixed caps function so * that it does not call recursively in this function. */ - sinkcaps = gst_pad_get_fixed_caps_func (pad); + sinkcaps = gst_pad_get_current_caps (pad); + if (!sinkcaps) + sinkcaps = gst_pad_get_pad_template_caps (pad); if (peercaps) { /* if the peer has caps, intersect */ GST_DEBUG_OBJECT (adder, "intersecting peer and template caps"); result = gst_caps_intersect (peercaps, sinkcaps); - gst_caps_unref (peercaps); gst_caps_unref (sinkcaps); + gst_caps_unref (peercaps); } else { /* the peer has no caps (or there is no peer), just use the allowed caps * of this sinkpad. */ @@ -322,73 +319,111 @@ gst_live_adder_sink_getcaps (GstPad * pad) return result; } +struct SetCapsIterCtx +{ + GstPad *pad; + GstCaps *caps; + gboolean all_valid; +}; + +static void +check_other_caps (const GValue * item, gpointer user_data) +{ + GstPad *otherpad = GST_PAD (g_value_get_object (item)); + struct SetCapsIterCtx *ctx = user_data; + + if (otherpad == ctx->pad) + return; + + if (!gst_pad_peer_query_accept_caps (otherpad, ctx->caps)) + ctx->all_valid = FALSE; +} + +static void +set_other_caps (const GValue * item, gpointer user_data) +{ + GstPad *otherpad = GST_PAD (g_value_get_object (item)); + struct SetCapsIterCtx *ctx = user_data; + + if (otherpad == ctx->pad) + return; + + if (!gst_pad_set_caps (otherpad, ctx->caps)) + ctx->all_valid = FALSE; +} + /* the first caps we receive on any of the sinkpads will define the caps for all * the other sinkpads because we can only mix streams with the same caps. * */ static gboolean -gst_live_adder_setcaps (GstPad * pad, GstCaps * caps) +gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad, GstCaps * caps) { - GstLiveAdder *adder; - GList *pads; - GstStructure *structure; - const char *media_type; - - adder = GST_LIVE_ADDER (GST_PAD_PARENT (pad)); + GstIterator *iter; + struct SetCapsIterCtx ctx; GST_LOG_OBJECT (adder, "setting caps on pad %p,%s to %" GST_PTR_FORMAT, pad, GST_PAD_NAME (pad), caps); /* FIXME, see if the other pads can accept the format. Also lock the * format on the other pads to this new format. */ - GST_OBJECT_LOCK (adder); - pads = GST_ELEMENT (adder)->pads; - while (pads) { - GstPad *otherpad = GST_PAD (pads->data); + iter = gst_element_iterate_sink_pads (GST_ELEMENT (adder)); + ctx.pad = pad; + ctx.caps = caps; + ctx.all_valid = TRUE; + while (gst_iterator_foreach (iter, check_other_caps, &ctx) == + GST_ITERATOR_RESYNC) { + ctx.all_valid = TRUE; + gst_iterator_resync (iter); + } + if (!ctx.all_valid) { + GST_WARNING_OBJECT (adder, "Caps are not acceptable by other sinkpads"); + gst_iterator_free (iter); + return FALSE; + } - if (otherpad != pad) - gst_caps_replace (&GST_PAD_CAPS (otherpad), caps); + while (gst_iterator_foreach (iter, set_other_caps, &ctx) == + GST_ITERATOR_RESYNC) { + ctx.all_valid = TRUE; + gst_iterator_resync (iter); + } + gst_iterator_free (iter); + + if (!ctx.all_valid) { + GST_WARNING_OBJECT (adder, "Could not set caps on the other sink pads"); + return FALSE; + } - pads = g_list_next (pads); + if (!gst_pad_set_caps (adder->srcpad, caps)) { + GST_WARNING_OBJECT (adder, "Could not set caps downstream"); + return FALSE; } + GST_OBJECT_LOCK (adder); /* parse caps now */ - structure = gst_caps_get_structure (caps, 0); - media_type = gst_structure_get_name (structure); - if (strcmp (media_type, "audio/x-raw-int") == 0) { - GST_DEBUG_OBJECT (adder, "parse_caps sets adder to format int"); - adder->format = GST_LIVE_ADDER_FORMAT_INT; - gst_structure_get_int (structure, "width", &adder->width); - gst_structure_get_int (structure, "depth", &adder->depth); - gst_structure_get_int (structure, "endianness", &adder->endianness); - gst_structure_get_boolean (structure, "signed", &adder->is_signed); - - if (adder->endianness != G_BYTE_ORDER) - goto not_supported; - - switch (adder->width) { + if (!gst_audio_info_from_caps (&adder->info, caps)) + goto not_supported; + + if (GST_AUDIO_INFO_IS_INTEGER (&adder->info)) { + switch (GST_AUDIO_INFO_WIDTH (&adder->info)) { case 8: - adder->func = (adder->is_signed ? - (GstLiveAdderFunction) add_int8 : (GstLiveAdderFunction) add_uint8); + adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ? + (GstLiveAdderFunction) add_int8 : (GstLiveAdderFunction) add_uint8; break; case 16: - adder->func = (adder->is_signed ? + adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ? (GstLiveAdderFunction) add_int16 : (GstLiveAdderFunction) - add_uint16); + add_uint16; break; case 32: - adder->func = (adder->is_signed ? + adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ? (GstLiveAdderFunction) add_int32 : (GstLiveAdderFunction) - add_uint32); + add_uint32; break; default: goto not_supported; } - } else if (strcmp (media_type, "audio/x-raw-float") == 0) { - GST_DEBUG_OBJECT (adder, "parse_caps sets adder to format float"); - adder->format = GST_LIVE_ADDER_FORMAT_FLOAT; - gst_structure_get_int (structure, "width", &adder->width); - - switch (adder->width) { + } else if (GST_AUDIO_INFO_IS_FLOAT (&adder->info)) { + switch (GST_AUDIO_INFO_WIDTH (&adder->info)) { case 32: adder->func = (GstLiveAdderFunction) add_float32; break; @@ -402,11 +437,6 @@ gst_live_adder_setcaps (GstPad * pad, GstCaps * caps) goto not_supported; } - gst_structure_get_int (structure, "channels", &adder->channels); - gst_structure_get_int (structure, "rate", &adder->rate); - /* precalc bps */ - adder->bps = (adder->width / 8) * adder->channels; - GST_OBJECT_UNLOCK (adder); return TRUE; @@ -442,12 +472,14 @@ gst_live_adder_flush_start (GstLiveAdder * adder) } static gboolean -gst_live_adder_src_activate_push (GstPad * pad, gboolean active) +gst_live_adder_src_activate_mode (GstPad * pad, GstObject * parent, + GstPadMode mode, gboolean active) { + GstLiveAdder *adder = GST_LIVE_ADDER (parent); gboolean result = TRUE; - GstLiveAdder *adder = NULL; - adder = GST_LIVE_ADDER (gst_pad_get_parent (pad)); + if (mode == GST_PAD_MODE_PULL) + return FALSE; if (active) { /* Mark as non flushing */ @@ -469,19 +501,15 @@ gst_live_adder_src_activate_push (GstPad * pad, gboolean active) result = gst_pad_stop_task (pad); } - gst_object_unref (adder); - return result; } static gboolean -gst_live_adder_sink_event (GstPad * pad, GstEvent * event) +gst_live_adder_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - gboolean ret = TRUE; - GstLiveAdder *adder = NULL; + GstLiveAdder *adder = GST_LIVE_ADDER (parent); GstLiveAdderPadPrivate *padprivate = NULL; - - adder = GST_LIVE_ADDER (gst_pad_get_parent (pad)); + gboolean ret = TRUE; padprivate = gst_pad_get_element_private (pad); @@ -491,34 +519,35 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event) GST_LOG_OBJECT (adder, "received %s", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_NEWSEGMENT: + case GST_EVENT_CAPS: { - GstFormat format; - gdouble rate, arate; - gint64 start, stop, time; - gboolean update; - - gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format, - &start, &stop, &time); + GstCaps *caps; + gst_event_parse_caps (event, &caps); + ret = gst_live_adder_setcaps (adder, pad, caps); gst_event_unref (event); + break; + } + case GST_EVENT_SEGMENT: + { + const GstSegment *segment; + GstSegment livesegment; + + gst_event_parse_segment (event, &segment); /* we need time for now */ - if (format != GST_FORMAT_TIME) + if (segment->format != GST_FORMAT_TIME) goto newseg_wrong_format; - GST_DEBUG_OBJECT (adder, - "newsegment: update %d, rate %g, arate %g, start %" GST_TIME_FORMAT - ", stop %" GST_TIME_FORMAT ", time %" GST_TIME_FORMAT, - update, rate, arate, GST_TIME_ARGS (start), GST_TIME_ARGS (stop), - GST_TIME_ARGS (time)); - /* now configure the values, we need these to time the release of the * buffers on the srcpad. */ GST_OBJECT_LOCK (adder); - gst_segment_set_newsegment_full (&padprivate->segment, update, - rate, arate, format, start, stop, time); + gst_segment_copy_into (segment, &padprivate->segment); GST_OBJECT_UNLOCK (adder); + gst_event_unref (event); + + gst_segment_init (&livesegment, GST_FORMAT_TIME); + gst_pad_push_event (adder->srcpad, gst_event_new_segment (&livesegment)); break; } case GST_EVENT_FLUSH_START: @@ -527,13 +556,12 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event) break; case GST_EVENT_FLUSH_STOP: GST_OBJECT_LOCK (adder); - adder->segment_pending = TRUE; adder->next_timestamp = GST_CLOCK_TIME_NONE; reset_pad_private (pad); - adder->segment_pending = TRUE; GST_OBJECT_UNLOCK (adder); ret = gst_pad_push_event (adder->srcpad, event); - ret = gst_live_adder_src_activate_push (adder->srcpad, TRUE); + ret = gst_live_adder_src_activate_mode (adder->srcpad, GST_OBJECT (adder), + GST_PAD_MODE_PUSH, TRUE); break; case GST_EVENT_EOS: { @@ -562,21 +590,20 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event) } done: - gst_object_unref (adder); return ret; /* ERRORS */ newseg_wrong_format: { - GST_DEBUG_OBJECT (adder, "received non TIME newsegment"); + GST_DEBUG_OBJECT (adder, "received non TIME segment"); ret = FALSE; goto done; } } static gboolean -gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat, +gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat format, gboolean position, gint64 * outvalue) { gint64 max = G_MININT64; @@ -588,8 +615,7 @@ gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat, it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); while (!done) { GstIteratorResult ires; - gpointer item; - GstFormat format = informat; + GValue item = { 0 }; ires = gst_iterator_next (it, &item); switch (ires) { @@ -598,21 +624,21 @@ gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat, break; case GST_ITERATOR_OK: { - GstPad *pad = GST_PAD_CAST (item); + GstPad *pad = GST_PAD_CAST (g_value_get_object (&item)); gint64 value; gboolean curres; /* ask sink peer for duration */ if (position) - curres = gst_pad_query_peer_position (pad, &format, &value); + curres = gst_pad_peer_query_position (pad, format, &value); else - curres = gst_pad_query_peer_duration (pad, &format, &value); + curres = gst_pad_peer_query_duration (pad, format, &value); /* take max from all valid return values */ /* Only if the format is the one we requested, otherwise ignore it ? */ - if (curres && format == informat) { + if (curres) { res &= curres; /* valid unknown length, stop searching */ @@ -694,20 +720,18 @@ gst_live_adder_query_position (GstLiveAdder * adder, GstQuery * query) static gboolean -gst_live_adder_query (GstPad * pad, GstQuery * query) +gst_live_adder_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { - GstLiveAdder *adder; + GstLiveAdder *adder = GST_LIVE_ADDER (parent); gboolean res = FALSE; - adder = GST_LIVE_ADDER (gst_pad_get_parent (pad)); - switch (GST_QUERY_TYPE (query)) { case GST_QUERY_LATENCY: { /* We need to send the query upstream and add the returned latency to our * own */ GstClockTime min_latency = 0, max_latency = G_MAXUINT64; - gpointer item; + GValue item = { 0 }; GstIterator *iter = NULL; gboolean done = FALSE; @@ -717,7 +741,7 @@ gst_live_adder_query (GstPad * pad, GstQuery * query) switch (gst_iterator_next (iter, &item)) { case GST_ITERATOR_OK: { - GstPad *sinkpad = item; + GstPad *sinkpad = GST_PAD (g_value_get_object (&item)); GstClockTime pad_min_latency, pad_max_latency; gboolean pad_us_live; @@ -736,7 +760,6 @@ gst_live_adder_query (GstPad * pad, GstQuery * query) min_latency = MAX (pad_min_latency, min_latency); max_latency = MIN (pad_max_latency, max_latency); } - gst_object_unref (item); } break; case GST_ITERATOR_RESYNC: @@ -782,18 +805,45 @@ gst_live_adder_query (GstPad * pad, GstQuery * query) res = gst_live_adder_query_position (adder, query); break; default: - res = gst_pad_query_default (pad, query); + res = gst_pad_query_default (pad, parent, query); break; } - gst_object_unref (adder); + return res; +} + +static gboolean +gst_live_adder_sink_query (GstPad * pad, GstObject * parent, GstQuery * query) +{ + GstLiveAdder *adder = GST_LIVE_ADDER (parent); + gboolean res; + + switch (GST_QUERY_TYPE (query)) { + case GST_QUERY_CAPS: + { + GstCaps *filter; + GstCaps *result; + + gst_query_parse_caps (query, &filter); + result = gst_live_adder_sink_getcaps (adder, pad, filter); + gst_query_set_caps_result (query, result); + res = TRUE; + break; + } + default: + res = gst_pad_query_default (pad, parent, query); + break; + } return res; } static gboolean -forward_event_func (GstPad * pad, GValue * ret, GstEvent * event) +forward_event_func (const GValue * item, GValue * ret, gpointer user_data) { + GstPad *pad = GST_PAD (g_value_get_object (item)); + GstEvent *event = user_data; + gst_event_ref (event); GST_LOG_OBJECT (pad, "About to send event %s", GST_EVENT_TYPE_NAME (event)); if (!gst_pad_push_event (pad, event)) { @@ -804,11 +854,6 @@ forward_event_func (GstPad * pad, GValue * ret, GstEvent * event) GST_LOG_OBJECT (pad, "Sent event %p (%s).", event, GST_EVENT_TYPE_NAME (event)); } - - /* unref the pad because of a FIXME in gst_iterator_unfold - * it does a gst_iterator_next which refs the pad, but it never unrefs it - */ - gst_object_unref (pad); return TRUE; } @@ -833,8 +878,7 @@ forward_event (GstLiveAdder * adder, GstEvent * event) g_value_init (&vret, G_TYPE_BOOLEAN); g_value_set_boolean (&vret, TRUE); it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); - gst_iterator_fold (it, (GstIteratorFoldFunction) forward_event_func, &vret, - event); + gst_iterator_fold (it, forward_event_func, &vret, event); gst_iterator_free (it); ret = g_value_get_boolean (&vret); @@ -844,13 +888,11 @@ forward_event (GstLiveAdder * adder, GstEvent * event) static gboolean -gst_live_adder_src_event (GstPad * pad, GstEvent * event) +gst_live_adder_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstLiveAdder *adder; + GstLiveAdder *adder = GST_LIVE_ADDER (parent); gboolean result; - adder = GST_LIVE_ADDER (gst_pad_get_parent (pad)); - switch (GST_EVENT_TYPE (event)) { case GST_EVENT_QOS: /* TODO : QoS might be tricky */ @@ -867,7 +909,6 @@ gst_live_adder_src_event (GstPad * pad, GstEvent * event) } gst_event_unref (event); - gst_object_unref (adder); return result; } @@ -876,15 +917,16 @@ static guint gst_live_adder_length_from_duration (GstLiveAdder * adder, GstClockTime duration) { - guint64 ret = (duration * adder->rate / GST_SECOND) * adder->bps; + guint64 ret = GST_AUDIO_INFO_BPF (&adder->info) * + (duration * GST_AUDIO_INFO_RATE (&adder->info) / GST_SECOND); return (guint) ret; } static GstFlowReturn -gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) +gst_live_live_adder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - GstLiveAdder *adder = GST_LIVE_ADDER (gst_pad_get_parent_element (pad)); + GstLiveAdder *adder = GST_LIVE_ADDER (parent); GstLiveAdderPadPrivate *padprivate = NULL; GstFlowReturn ret = GST_FLOW_OK; GList *item = NULL; @@ -916,7 +958,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) if (padprivate->eos) { GST_DEBUG_OBJECT (adder, "Received buffer after EOS"); - ret = GST_FLOW_UNEXPECTED; + ret = GST_FLOW_EOS; gst_buffer_unref (buffer); goto out; } @@ -928,14 +970,9 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) GST_WARNING_OBJECT (adder, "No new-segment received," " initializing segment with time 0..-1"); gst_segment_init (&padprivate->segment, GST_FORMAT_TIME); - gst_segment_set_newsegment (&padprivate->segment, - FALSE, 1.0, GST_FORMAT_TIME, 0, -1, 0); } - if (padprivate->segment.format != GST_FORMAT_TIME) - goto invalid_segment; - - buffer = gst_buffer_make_metadata_writable (buffer); + buffer = gst_buffer_make_writable (buffer); drift = GST_BUFFER_TIMESTAMP (buffer) - padprivate->expected_timestamp; @@ -960,8 +997,9 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) /* If there is no duration, lets set one */ if (!GST_BUFFER_DURATION_IS_VALID (buffer)) { - GST_BUFFER_DURATION (buffer) = - gst_audio_duration_from_pad_buffer (pad, buffer); + GST_BUFFER_DURATION (buffer) = (gst_buffer_get_size (buffer) * GST_SECOND) / + (GST_AUDIO_INFO_BPF (&adder->info) * + GST_AUDIO_INFO_RATE (&adder->info)); padprivate->expected_timestamp = GST_CLOCK_TIME_NONE; } else { padprivate->expected_timestamp = GST_BUFFER_TIMESTAMP (buffer) + @@ -976,8 +1014,8 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) * durations afterwards */ - buffer = gst_audio_buffer_clip (buffer, &padprivate->segment, adder->rate, - adder->bps); + buffer = gst_audio_buffer_clip (buffer, &padprivate->segment, + GST_AUDIO_INFO_RATE (&adder->info), GST_AUDIO_INFO_BPF (&adder->info)); /* buffer can be NULL if it's completely outside of the segment */ if (!buffer) { @@ -1026,6 +1064,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) GstClockTime mix_duration = 0; GstClockTime mix_start = 0; GstClockTime mix_end = 0; + GstMapInfo oldmap, map; /* We haven't reached our place yet */ if (GST_BUFFER_TIMESTAMP (buffer) + skip >= @@ -1045,7 +1084,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) GstClockTime subbuffer_duration = GST_BUFFER_TIMESTAMP (oldbuffer) - (GST_BUFFER_TIMESTAMP (buffer) + skip); - subbuffer = gst_buffer_create_sub (buffer, + subbuffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, gst_live_adder_length_from_duration (adder, skip), gst_live_adder_length_from_duration (adder, subbuffer_duration)); @@ -1075,12 +1114,15 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) mix_duration = mix_end - mix_start; - adder->func (GST_BUFFER_DATA (oldbuffer) + + gst_buffer_map (oldbuffer, &oldmap, GST_MAP_WRITE); + gst_buffer_map (buffer, &map, GST_MAP_READ); + adder->func (oldmap.data + gst_live_adder_length_from_duration (adder, old_skip), - GST_BUFFER_DATA (buffer) + + map.data + gst_live_adder_length_from_duration (adder, skip), gst_live_adder_length_from_duration (adder, mix_duration)); - + gst_buffer_unmap (oldbuffer, &oldmap); + gst_buffer_unmap (buffer, &map); skip += mix_duration; } @@ -1092,12 +1134,13 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) if (skip) { GstClockTime subbuffer_duration = GST_BUFFER_DURATION (buffer) - skip; GstClockTime subbuffer_ts = GST_BUFFER_TIMESTAMP (buffer) + skip; - GstBuffer *new_buffer = gst_buffer_create_sub (buffer, + GstBuffer *new_buffer = gst_buffer_copy_region (buffer, + GST_BUFFER_COPY_ALL, gst_live_adder_length_from_duration (adder, skip), gst_live_adder_length_from_duration (adder, subbuffer_duration)); gst_buffer_unref (buffer); buffer = new_buffer; - GST_BUFFER_TIMESTAMP (buffer) = subbuffer_ts; + GST_BUFFER_PTS (buffer) = subbuffer_ts; GST_BUFFER_DURATION (buffer) = subbuffer_duration; } @@ -1110,7 +1153,6 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer) out: GST_OBJECT_UNLOCK (adder); - gst_object_unref (adder); return ret; @@ -1123,19 +1165,6 @@ invalid_timestamp: ("Invalid timestamp received on buffer")); return GST_FLOW_ERROR; - -invalid_segment: - { - const gchar *format = gst_format_get_name (padprivate->segment.format); - GST_OBJECT_UNLOCK (adder); - gst_buffer_unref (buffer); - GST_ELEMENT_ERROR (adder, STREAM, FAILED, - ("This element only supports TIME segments, received other type"), - ("Received a segment of type %s, only support time segment", format)); - - return GST_FLOW_ERROR; - } - } /* @@ -1257,7 +1286,7 @@ push_buffer: if (diff < 0) diff = -diff; - if (diff < GST_SECOND / adder->rate) { + if (diff < GST_SECOND / GST_AUDIO_INFO_RATE (&adder->info)) { GST_BUFFER_TIMESTAMP (buffer) = adder->next_timestamp; GST_DEBUG_OBJECT (adder, "Correcting slight skew"); GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT); @@ -1280,17 +1309,6 @@ push_buffer: GST_BUFFER_DURATION (buffer); else adder->next_timestamp = GST_CLOCK_TIME_NONE; - - if (adder->segment_pending) { - /* - * We set the start at 0, because we re-timestamps to the running time - */ - newseg_event = gst_event_new_new_segment_full (FALSE, 1.0, 1.0, - GST_FORMAT_TIME, 0, -1, 0); - - adder->segment_pending = FALSE; - } - GST_OBJECT_UNLOCK (adder); if (newseg_event) @@ -1355,7 +1373,7 @@ eos: { /* store result, we are flushing now */ GST_DEBUG_OBJECT (adder, "We are EOS, pushing EOS downstream"); - adder->srcresult = GST_FLOW_UNEXPECTED; + adder->srcresult = GST_FLOW_EOS; gst_pad_pause_task (adder->srcpad); GST_OBJECT_UNLOCK (adder); gst_pad_push_event (adder->srcpad, gst_event_new_eos ()); @@ -1365,7 +1383,7 @@ eos: static GstPad * gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ, - const gchar * unused) + const gchar * ignored_name, const GstCaps * caps) { gchar *name; GstLiveAdder *adder; @@ -1390,12 +1408,10 @@ gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ, GST_DEBUG_OBJECT (adder, "request new pad %s", name); g_free (name); - gst_pad_set_getcaps_function (newpad, - GST_DEBUG_FUNCPTR (gst_live_adder_sink_getcaps)); - gst_pad_set_setcaps_function (newpad, - GST_DEBUG_FUNCPTR (gst_live_adder_setcaps)); gst_pad_set_event_function (newpad, GST_DEBUG_FUNCPTR (gst_live_adder_sink_event)); + gst_pad_set_query_function (newpad, + GST_DEBUG_FUNCPTR (gst_live_adder_sink_query)); padprivate = g_new0 (GstLiveAdderPadPrivate, 1); @@ -1506,7 +1522,8 @@ gst_live_adder_change_state (GstElement * element, GstStateChange transition) break; } - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + ret = GST_ELEMENT_CLASS (gst_live_adder_parent_class)->change_state (element, + transition); switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_PLAYING: diff --git a/gst/liveadder/liveadder.h b/gst/liveadder/liveadder.h index 7448601f..136ac3ec 100644 --- a/gst/liveadder/liveadder.h +++ b/gst/liveadder/liveadder.h @@ -1,5 +1,5 @@ /* - * Farsight Voice+Video library + * GStreamer * * Copyright 2008 Collabora Ltd * Copyright 2008 Nokia Corporation @@ -28,6 +28,7 @@ #define __GST_LIVE_ADDER_H__ #include <gst/gst.h> +#include <gst/audio/audio.h> G_BEGIN_DECLS #define GST_TYPE_LIVE_ADDER (gst_live_adder_get_type()) @@ -39,13 +40,6 @@ G_BEGIN_DECLS typedef struct _GstLiveAdder GstLiveAdder; typedef struct _GstLiveAdderClass GstLiveAdderClass; -typedef enum -{ - GST_LIVE_ADDER_FORMAT_UNSET, - GST_LIVE_ADDER_FORMAT_INT, - GST_LIVE_ADDER_FORMAT_FLOAT -} GstLiveAdderFormat; - typedef void (*GstLiveAdderFunction) (gpointer out, gpointer in, guint size); /** @@ -73,18 +67,7 @@ struct _GstLiveAdder GstClockTime next_timestamp; /* the next are valid for both int and float */ - GstLiveAdderFormat format; - gint rate; - gint channels; - gint width; - gint endianness; - - /* the next are valid only for format == GST_LIVE_ADDER_FORMAT_INT */ - gint depth; - gboolean is_signed; - - /* number of bytes per sample, actually width/8 * channels */ - gint bps; + GstAudioInfo info; /* function to add samples */ GstLiveAdderFunction func; diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in index c6e9a6fa..37bec60d 100644 --- a/gst/mpegdemux/Makefile.in +++ b/gst/mpegdemux/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mpegdemux/gstmpegdemux.c b/gst/mpegdemux/gstmpegdemux.c index ee78c00a..66d05eec 100644 --- a/gst/mpegdemux/gstmpegdemux.c +++ b/gst/mpegdemux/gstmpegdemux.c @@ -128,7 +128,7 @@ static GstStaticPadTemplate subpicture_template = GST_STATIC_PAD_TEMPLATE ("subpicture_%02x", GST_PAD_SRC, GST_PAD_SOMETIMES, - GST_STATIC_CAPS ("video/x-dvd-subpicture") + GST_STATIC_CAPS ("subpicture/x-dvd") ); static GstStaticPadTemplate private_template = @@ -400,7 +400,7 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) case ST_PS_DVD_SUBPICTURE: template = klass->subpicture_template; name = g_strdup_printf ("subpicture_%02x", id); - caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture"); + caps = gst_caps_new_empty_simple ("subpicture/x-dvd"); break; case ST_GST_AUDIO_RAWA52: template = klass->audio_template; @@ -412,8 +412,7 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type) } if (name == NULL || template == NULL || caps == NULL) { - if (name) - g_free (name); + g_free (name); if (caps) gst_caps_unref (caps); return FALSE; @@ -476,7 +475,7 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, GstBuffer * buf) { GstFlowReturn result; - guint64 timestamp; + GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE; guint size; if (stream == NULL) @@ -484,9 +483,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, /* timestamps */ if (G_UNLIKELY (demux->next_pts != G_MAXUINT64)) - timestamp = MPEGTIME_TO_GSTTIME (demux->next_pts); - else - timestamp = GST_CLOCK_TIME_NONE; + 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)) { @@ -494,9 +493,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, GstSegment segment; GstEvent *newsegment; - GST_DEBUG ("timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT + GST_DEBUG ("PTS timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT " src_segment.start:%" GST_TIME_FORMAT " .stop:%" GST_TIME_FORMAT, - GST_TIME_ARGS (timestamp), GST_TIME_ARGS (demux->base_time), + GST_TIME_ARGS (pts), GST_TIME_ARGS (demux->base_time), GST_TIME_ARGS (demux->src_segment.start), GST_TIME_ARGS (demux->src_segment.stop)); @@ -512,13 +511,13 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, else stop = -1; - if (timestamp != GST_CLOCK_TIME_NONE) { + if (pts != GST_CLOCK_TIME_NONE) { if (demux->src_segment.rate > 0) { - if (GST_CLOCK_DIFF (start, timestamp) > GST_SECOND) - start = timestamp; + if (GST_CLOCK_DIFF (start, pts) > GST_SECOND) + start = pts; } else { - if (GST_CLOCK_DIFF (stop, timestamp) > GST_SECOND) - stop = timestamp; + if (GST_CLOCK_DIFF (stop, pts) > GST_SECOND) + stop = pts; } } if (GST_CLOCK_TIME_IS_VALID (demux->base_time) && start > demux->base_time) @@ -547,7 +546,8 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, } /* OK, sent new segment now prepare the buffer for sending */ - GST_BUFFER_TIMESTAMP (buf) = timestamp; + GST_BUFFER_PTS (buf) = pts; + GST_BUFFER_DTS (buf) = dts; /* update position in the segment */ gst_segment_set_position (&demux->src_segment, GST_FORMAT_TIME, @@ -574,7 +574,8 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, /* Set the buffer discont flag, and clear discont state on the stream */ if (stream->discont) { - GST_DEBUG_OBJECT (demux, "marking discont buffer"); + GST_DEBUG_OBJECT (demux, "discont buffer to pad %" GST_PTR_FORMAT + " with TS %" GST_TIME_FORMAT, stream->pad, GST_TIME_ARGS (dts)); GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); stream->discont = FALSE; @@ -585,9 +586,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream, demux->next_dts = G_MAXUINT64; result = gst_pad_push (stream->pad, buf); - GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, time: %" + 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 (timestamp), + stream->id, stream->type, GST_TIME_ARGS (pts), size, gst_flow_get_name (result)); return result; @@ -678,7 +679,7 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event) g_snprintf (cur_stream_name, 32, "audio-%d-format", i); if (!gst_structure_get_int (structure, cur_stream_name, &stream_format)) - break; + continue; switch (stream_format) { case 0x0: @@ -899,9 +900,7 @@ static gboolean gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res = TRUE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_FLUSH_START: @@ -967,13 +966,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) } break; } + case GST_EVENT_CAPS: + gst_event_unref (event); + break; default: gst_flups_demux_send_event (demux, event); break; } - gst_object_unref (demux); - return res; } @@ -1276,9 +1276,7 @@ static gboolean gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean res = FALSE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK: @@ -1293,8 +1291,6 @@ gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event) break; } - gst_object_unref (demux); - return res; } @@ -1302,9 +1298,7 @@ static gboolean gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { gboolean res = FALSE; - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); GST_LOG_OBJECT (demux, "Have query of type %d on pad %" GST_PTR_FORMAT, GST_QUERY_TYPE (query), pad); @@ -1315,6 +1309,11 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) GstClockTime pos; GstFormat format; + /* See if upstream can immediately answer */ + res = gst_pad_peer_query (demux->sinkpad, query); + if (res) + break; + gst_query_parse_position (query, &format, NULL); if (format != GST_FORMAT_TIME) { @@ -1325,6 +1324,7 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) pos = demux->src_segment.position - demux->src_segment.start; GST_LOG_OBJECT (demux, "Position %" GST_TIME_FORMAT, GST_TIME_ARGS (pos)); + gst_query_set_position (query, format, pos); res = TRUE; break; @@ -1333,7 +1333,6 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { GstFormat format; gint64 duration; - GstPad *peer; GstQuery *byte_query; gst_query_parse_duration (query, &format, NULL); @@ -1346,21 +1345,14 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) break; } - if ((peer = gst_pad_get_peer (demux->sinkpad)) == NULL) { - GST_DEBUG_OBJECT (demux, "duration not possible, no peer"); - goto not_supported; - } - /* For any format other than bytes, see if upstream knows first */ if (format == GST_FORMAT_BYTES) { GST_DEBUG_OBJECT (demux, "duration not supported for format %d", format); - gst_object_unref (peer); goto not_supported; } - if (gst_pad_query (peer, query)) { - gst_object_unref (peer); + if (gst_pad_peer_query (demux->sinkpad, query)) { res = TRUE; break; } @@ -1370,25 +1362,21 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) if (format != GST_FORMAT_TIME) { GST_DEBUG_OBJECT (demux, "duration not supported for format %d", format); - gst_object_unref (peer); goto not_supported; } if (demux->mux_rate == -1) { GST_DEBUG_OBJECT (demux, "duration not possible, no mux_rate"); - gst_object_unref (peer); goto not_supported; } byte_query = gst_query_new_duration (GST_FORMAT_BYTES); - if (!gst_pad_query (peer, byte_query)) { + if (!gst_pad_peer_query (demux->sinkpad, byte_query)) { GST_LOG_OBJECT (demux, "query on peer pad failed"); gst_query_unref (byte_query); - gst_object_unref (peer); goto not_supported; } - gst_object_unref (peer); gst_query_parse_duration (byte_query, &format, &duration); gst_query_unref (byte_query); @@ -1465,16 +1453,9 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query) } beach: - gst_object_unref (demux); - return res; - not_supported: - { - gst_object_unref (demux); - - return FALSE; - } + return FALSE; } static void @@ -2881,7 +2862,8 @@ gst_flups_demux_sink_activate (GstPad * sinkpad, GstObject * parent) GstQuery *query = gst_query_new_scheduling (); if (gst_pad_peer_query (sinkpad, query)) { - if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL)) { + if (gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE)) { res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE); } else { res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE); @@ -2900,9 +2882,7 @@ static gboolean gst_flups_demux_sink_activate_push (GstPad * sinkpad, GstObject * parent, gboolean active) { - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (parent); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); demux->random_access = FALSE; @@ -2916,19 +2896,15 @@ static gboolean gst_flups_demux_sink_activate_pull (GstPad * sinkpad, GstObject * parent, gboolean active) { - GstFluPSDemux *demux; - - demux = GST_FLUPS_DEMUX (gst_pad_get_parent (sinkpad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); if (active) { GST_DEBUG ("pull mode activated"); demux->random_access = TRUE; - gst_object_unref (demux); return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flups_demux_loop, sinkpad, NULL); } else { demux->random_access = FALSE; - gst_object_unref (demux); return gst_pad_stop_task (sinkpad); } } @@ -2941,15 +2917,14 @@ gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent, return gst_flups_demux_sink_activate_push (pad, parent, active); } else if (mode == GST_PAD_MODE_PULL) { return gst_flups_demux_sink_activate_pull (pad, parent, active); - } else { - return FALSE; } + return FALSE; } static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) { - GstFluPSDemux *demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad)); + GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent); GstFlowReturn ret = GST_FLOW_OK; guint32 avail; gboolean save, discont; @@ -3081,8 +3056,6 @@ gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer) } } done: - gst_object_unref (demux); - return ret; } diff --git a/gst/mpegdemux/gstmpegdemux.h b/gst/mpegdemux/gstmpegdemux.h index bea4dc44..10f11800 100644 --- a/gst/mpegdemux/gstmpegdemux.h +++ b/gst/mpegdemux/gstmpegdemux.h @@ -39,6 +39,7 @@ * Fluendo, S.L. All Rights Reserved. * * Contributor(s): Wim Taymans <wim@fluendo.com> + * Jan Schmidt <thaytan@noraisin.net> */ #ifndef __GST_FLUPS_DEMUX_H__ @@ -50,12 +51,14 @@ #include "gstpesfilter.h" G_BEGIN_DECLS + #define GST_TYPE_FLUPS_DEMUX (gst_flups_demux_get_type()) #define GST_FLUPS_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FLUPS_DEMUX,GstFluPSDemux)) #define GST_FLUPS_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FLUPS_DEMUX,GstFluPSDemuxClass)) #define GST_FLUPS_DEMUX_GET_CLASS(klass) (G_TYPE_INSTANCE_GET_CLASS((klass),GST_TYPE_FLUPS_DEMUX,GstFluPSDemuxClass)) #define GST_IS_FLUPS_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FLUPS_DEMUX)) #define GST_IS_FLUPS_DEMUX_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FLUPS_DEMUX)) + typedef struct _GstFluPSStream GstFluPSStream; typedef struct _GstFluPSDemux GstFluPSDemux; typedef struct _GstFluPSDemuxClass GstFluPSDemuxClass; diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in index 4bcbb215..c6a029bd 100644 --- a/gst/mpegpsmux/Makefile.in +++ b/gst/mpegpsmux/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c index da31df28..92f0eebf 100644 --- a/gst/mpegpsmux/mpegpsmux.c +++ b/gst/mpegpsmux/mpegpsmux.c @@ -598,7 +598,7 @@ mpegpsmux_request_new_pad (GstElement * element, pad = gst_pad_new_from_template (templ, name); pad_data = (MpegPsPadData *) gst_collect_pads_add_pad (mux->collect, pad, - sizeof (MpegPsPadData)); + sizeof (MpegPsPadData), NULL, TRUE); if (pad_data == NULL) goto pad_failure; diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in index 5205b2af..0abc584b 100644 --- a/gst/mpegtsdemux/Makefile.in +++ b/gst/mpegtsdemux/Makefile.in @@ -347,6 +347,8 @@ 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@ @@ -354,6 +356,8 @@ 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@ @@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -396,6 +399,10 @@ 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@ @@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mpegtsdemux/gstmpegdesc.h b/gst/mpegtsdemux/gstmpegdesc.h index 2e98a877..ef4412ab 100644 --- a/gst/mpegtsdemux/gstmpegdesc.h +++ b/gst/mpegtsdemux/gstmpegdesc.h @@ -348,13 +348,13 @@ typedef struct guint8 *data; } GstMPEGDescriptor; -void gst_mpegtsdesc_init_debug (void); -gboolean gst_mpeg_descriptor_parse (GstMPEGDescriptor *result, guint8 * data, guint size); +G_GNUC_INTERNAL void gst_mpegtsdesc_init_debug (void); +G_GNUC_INTERNAL gboolean gst_mpeg_descriptor_parse (GstMPEGDescriptor *result, guint8 * data, guint size); -guint gst_mpeg_descriptor_n_desc (GstMPEGDescriptor * desc); -guint8 *gst_mpeg_descriptor_find (GstMPEGDescriptor * desc, gint tag); -GArray *gst_mpeg_descriptor_find_all (GstMPEGDescriptor * desc, gint tag); +G_GNUC_INTERNAL guint gst_mpeg_descriptor_n_desc (GstMPEGDescriptor * desc); +G_GNUC_INTERNAL guint8 *gst_mpeg_descriptor_find (GstMPEGDescriptor * desc, gint tag); +G_GNUC_INTERNAL GArray *gst_mpeg_descriptor_find_all (GstMPEGDescriptor * desc, gint tag); -guint8 *gst_mpeg_descriptor_nth (GstMPEGDescriptor * desc, guint i); +G_GNUC_INTERNAL guint8 *gst_mpeg_descriptor_nth (GstMPEGDescriptor * desc, guint i); #endif /* __GST_MPEG_DESC_H__ */ diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index ad2bccef..07db3989 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -1409,14 +1409,20 @@ mpegts_base_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) MpegTSPacketizerPacketReturn pret; MpegTSPacketizer2 *packetizer; MpegTSPacketizerPacket packet; + MpegTSBaseClass *klass; base = GST_MPEGTS_BASE (parent); + klass = GST_MPEGTS_BASE_GET_CLASS (base); + packetizer = base->packetizer; if (G_UNLIKELY (base->queried_latency == FALSE)) { query_upstream_latency (base); } + if (klass->input_done) + gst_buffer_ref (buf); + mpegts_packetizer_push (base->packetizer, buf); while (res == GST_FLOW_OK) { @@ -1465,6 +1471,13 @@ mpegts_base_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) mpegts_packetizer_clear_packet (base->packetizer, &packet); } + if (klass->input_done) { + if (res == GST_FLOW_OK) + res = klass->input_done (base, buf); + else + gst_buffer_unref (buf); + } + return res; } @@ -1739,7 +1752,8 @@ mpegts_base_sink_activate (GstPad * sinkpad, GstObject * parent) goto activate_push; } - pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL); + pull_mode = gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE); gst_query_unref (query); if (!pull_mode) @@ -1792,6 +1806,15 @@ mpegts_base_change_state (GstElement * element, GstStateChange transition) GstStateChangeReturn ret; base = GST_MPEGTS_BASE (element); + + switch (transition) { + case GST_STATE_CHANGE_READY_TO_PAUSED: + mpegts_base_reset (base); + break; + default: + break; + } + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { diff --git a/gst/mpegtsdemux/mpegtsbase.h b/gst/mpegtsdemux/mpegtsbase.h index 98de1d95..7cc853d8 100644 --- a/gst/mpegtsdemux/mpegtsbase.h +++ b/gst/mpegtsdemux/mpegtsbase.h @@ -168,6 +168,9 @@ struct _MpegTSBaseClass { /* flush all streams */ void (*flush) (MpegTSBase * base); + /* Notifies subclasses input buffer has been handled */ + GstFlowReturn (*input_done) (MpegTSBase *base, GstBuffer *buffer); + /* signals */ void (*pat_info) (GstStructure *pat); void (*pmt_info) (GstStructure *pmt); @@ -180,24 +183,24 @@ struct _MpegTSBaseClass { #define MPEGTS_BIT_UNSET(field, offs) ((field)[(offs) >> 3] &= ~(1 << ((offs) & 0x7))) #define MPEGTS_BIT_IS_SET(field, offs) ((field)[(offs) >> 3] & (1 << ((offs) & 0x7))) -GType mpegts_base_get_type(void); +G_GNUC_INTERNAL GType mpegts_base_get_type(void); -MpegTSBaseProgram *mpegts_base_get_program (MpegTSBase * base, gint program_number); -MpegTSBaseProgram *mpegts_base_add_program (MpegTSBase * base, gint program_number, guint16 pmt_pid); +G_GNUC_INTERNAL MpegTSBaseProgram *mpegts_base_get_program (MpegTSBase * base, gint program_number); +G_GNUC_INTERNAL MpegTSBaseProgram *mpegts_base_add_program (MpegTSBase * base, gint program_number, guint16 pmt_pid); -guint8 *mpegts_get_descriptor_from_stream (MpegTSBaseStream * stream, guint8 tag); -guint8 *mpegts_get_descriptor_from_program (MpegTSBaseProgram * program, guint8 tag); +G_GNUC_INTERNAL guint8 *mpegts_get_descriptor_from_stream (MpegTSBaseStream * stream, guint8 tag); +G_GNUC_INTERNAL guint8 *mpegts_get_descriptor_from_program (MpegTSBaseProgram * program, guint8 tag); -gboolean +G_GNUC_INTERNAL gboolean mpegts_base_handle_seek_event(MpegTSBase * base, GstPad * pad, GstEvent * event); -gboolean gst_mpegtsbase_plugin_init (GstPlugin * plugin); +G_GNUC_INTERNAL gboolean gst_mpegtsbase_plugin_init (GstPlugin * plugin); -gboolean mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section); +G_GNUC_INTERNAL gboolean mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section); -void mpegts_base_program_remove_stream (MpegTSBase * base, MpegTSBaseProgram * program, guint16 pid); +G_GNUC_INTERNAL void mpegts_base_program_remove_stream (MpegTSBase * base, MpegTSBaseProgram * program, guint16 pid); -void mpegts_base_remove_program(MpegTSBase *base, gint program_number); +G_GNUC_INTERNAL void mpegts_base_remove_program(MpegTSBase *base, gint program_number); G_END_DECLS #endif /* GST_MPEG_TS_BASE_H */ diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index 45c9fcfa..a5716c58 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -64,6 +64,23 @@ static GQuark QUARK_ACTUAL_NETWORK; static GQuark QUARK_NETWORK_NAME; static GQuark QUARK_ORIGINAL_NETWORK_ID; static GQuark QUARK_TRANSPORTS; +static GQuark QUARK_TERRESTRIAL; +static GQuark QUARK_CABLE; +static GQuark QUARK_FREQUENCY; +static GQuark QUARK_MODULATION; +static GQuark QUARK_BANDWIDTH; +static GQuark QUARK_CONSTELLATION; +static GQuark QUARK_HIERARCHY; +static GQuark QUARK_CODE_RATE_HP; +static GQuark QUARK_CODE_RATE_LP; +static GQuark QUARK_GUARD_INTERVAL; +static GQuark QUARK_TRANSMISSION_MODE; +static GQuark QUARK_OTHER_FREQUENCY; +static GQuark QUARK_SYMBOL_RATE; +static GQuark QUARK_INNER_FEC; +static GQuark QUARK_DELIVERY; +static GQuark QUARK_CHANNELS; +static GQuark QUARK_LOGICAL_CHANNEL_NUMBER; static GQuark QUARK_SDT; static GQuark QUARK_ACTUAL_TRANSPORT_STREAM; @@ -75,7 +92,77 @@ static GQuark QUARK_PRESENT_FOLLOWING; static GQuark QUARK_SEGMENT_LAST_SECTION_NUMBER; static GQuark QUARK_LAST_TABLE_ID; static GQuark QUARK_EVENTS; - +static GQuark QUARK_NAME; +static GQuark QUARK_DESCRIPTION; +static GQuark QUARK_EXTENDED_ITEM; +static GQuark QUARK_EXTENDED_ITEMS; +static GQuark QUARK_TEXT; +static GQuark QUARK_EXTENDED_TEXT; +static GQuark QUARK_EVENT_ID; +static GQuark QUARK_YEAR; +static GQuark QUARK_MONTH; +static GQuark QUARK_DAY; +static GQuark QUARK_HOUR; +static GQuark QUARK_MINUTE; +static GQuark QUARK_SECOND; +static GQuark QUARK_DURATION; +static GQuark QUARK_RUNNING_STATUS; +static GQuark QUARK_FREE_CA_MODE; + +#define MAX_KNOWN_ICONV 25 +/* All these conversions will be to UTF8 */ +typedef enum +{ + _ICONV_UNKNOWN = -1, + _ICONV_ISO8859_1, + _ICONV_ISO8859_2, + _ICONV_ISO8859_3, + _ICONV_ISO8859_4, + _ICONV_ISO8859_5, + _ICONV_ISO8859_6, + _ICONV_ISO8859_7, + _ICONV_ISO8859_8, + _ICONV_ISO8859_9, + _ICONV_ISO8859_10, + _ICONV_ISO8859_11, + _ICONV_ISO8859_12, + _ICONV_ISO8859_13, + _ICONV_ISO8859_14, + _ICONV_ISO8859_15, + _ICONV_ISO10646_UC2, + _ICONV_EUC_KR, + _ICONV_GB2312, + _ICONV_UTF_16BE, + _ICONV_ISO10646_UTF8, + _ICONV_ISO6937, + /* Insert more here if needed */ + _ICONV_MAX +} LocalIconvCode; + +static const gchar *iconvtablename[] = { + "iso-8859-1", + "iso-8859-2", + "iso-8859-3", + "iso-8859-4", + "iso-8859-5", + "iso-8859-6", + "iso-8859-7", + "iso-8859-8", + "iso-8859-9", + "iso-8859-10", + "iso-8859-11", + "iso-8859-12", + "iso-8859-13", + "iso-8859-14", + "iso-8859-15", + "ISO-10646/UCS2", + "EUC-KR", + "GB2312", + "UTF-16BE", + "ISO-10646/UTF8", + "iso6937" + /* Insert more here if needed */ +}; #define MPEGTS_PACKETIZER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_MPEGTS_PACKETIZER, MpegTSPacketizerPrivate)) @@ -84,19 +171,31 @@ static void _init_local (void); G_DEFINE_TYPE_EXTENDED (MpegTSPacketizer2, mpegts_packetizer, G_TYPE_OBJECT, 0, _init_local ()); -typedef struct -{ - guint64 offset; /* offset in upstream */ - guint64 pcr; /* pcr (wraparound not fixed) */ -} MpegTSPacketizerOffset; +/* Maximum number of MpegTSPcr + * 256 should be sufficient for most multiplexes */ +#define MAX_PCR_OBS_CHANNELS 256 -struct _MpegTSPacketizerPrivate +typedef struct _MpegTSPCR { - /* Shortcuts for adapter usage */ - guint available; - guint8 *mapped; - guint offset; - guint mapped_size; + guint16 pid; + + /* Following variables are only active/used when + * calculate_skew is TRUE */ + GstClockTime base_time; + GstClockTime base_pcrtime; + GstClockTime prev_out_time; + GstClockTime prev_in_time; + GstClockTime last_pcrtime; + gint64 window[MAX_WINDOW]; + guint window_pos; + guint window_size; + gboolean window_filling; + gint64 window_min; + gint64 skew; + gint64 prev_send_diff; + + /* Offset to apply to PCR to handle wraparounds */ + guint64 pcroffset; /* Used for bitrate calculation */ /* FIXME : Replace this later on with a balanced tree or sequence */ @@ -107,6 +206,16 @@ struct _MpegTSPacketizerPrivate guint64 last_pcr; GstClockTime last_pcr_ts; +} MpegTSPCR; + +struct _MpegTSPacketizerPrivate +{ + /* Shortcuts for adapter usage */ + guint available; + guint8 *mapped; + guint offset; + guint mapped_size; + /* Reference offset */ guint64 refoffset; @@ -114,20 +223,24 @@ struct _MpegTSPacketizerPrivate /* Last inputted timestamp */ GstClockTime last_in_time; + + /* offset to observations table */ + guint8 pcrtablelut[0x2000]; + MpegTSPCR *observations[MAX_PCR_OBS_CHANNELS]; + guint8 lastobsid; + + /* Conversion tables */ + GIConv iconvs[_ICONV_MAX]; }; static void mpegts_packetizer_dispose (GObject * object); static void mpegts_packetizer_finalize (GObject * object); -static gchar *convert_to_utf8 (const gchar * text, gint length, guint start, - const gchar * encoding, gboolean is_multibyte, GError ** error); -static gchar *get_encoding (const gchar * text, guint * start_text, - gboolean * is_multibyte); -static gchar *get_encoding_and_convert (const gchar * text, guint length); -static GstClockTime calculate_skew (MpegTSPacketizer2 * packetizer, - guint64 pcrtime, GstClockTime time); -static void record_pcr (MpegTSPacketizer2 * packetizer, guint64 pcr, - guint64 offset); -static void mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer); +static gchar *get_encoding_and_convert (MpegTSPacketizer2 * packetizer, + const gchar * text, guint length); +static GstClockTime calculate_skew (MpegTSPCR * pcr, guint64 pcrtime, + GstClockTime time); +static void record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, + guint64 pcr, guint64 offset); #define CONTINUITY_UNSET 255 #define MAX_CONTINUITY 15 @@ -135,6 +248,47 @@ static void mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer); #define TABLE_ID_UNSET 0xFF #define PACKET_SYNC_BYTE 0x47 +static MpegTSPCR * +get_pcr_table (MpegTSPacketizer2 * packetizer, guint16 pid) +{ + MpegTSPacketizerPrivate *priv = packetizer->priv; + MpegTSPCR *res; + + res = priv->observations[priv->pcrtablelut[pid]]; + + if (G_UNLIKELY (res == NULL)) { + /* If we don't have a PCR table for the requested PID, create one .. */ + res = g_new0 (MpegTSPCR, 1); + /* Add it to the last table position */ + priv->observations[priv->lastobsid] = res; + /* Update the pcrtablelut */ + priv->pcrtablelut[pid] = priv->lastobsid; + /* And increment the last know slot */ + priv->lastobsid++; + + /* Finally set the default values */ + res->pid = pid; + res->first_offset = -1; + res->first_pcr = -1; + res->first_pcr_ts = GST_CLOCK_TIME_NONE; + res->last_offset = -1; + res->last_pcr = -1; + res->last_pcr_ts = GST_CLOCK_TIME_NONE; + res->base_time = GST_CLOCK_TIME_NONE; + res->base_pcrtime = GST_CLOCK_TIME_NONE; + res->last_pcrtime = GST_CLOCK_TIME_NONE; + res->window_pos = 0; + res->window_filling = TRUE; + res->window_min = 0; + res->skew = 0; + res->prev_send_diff = GST_CLOCK_TIME_NONE; + res->prev_out_time = GST_CLOCK_TIME_NONE; + res->pcroffset = 0; + } + + return res; +} + static gint mpegts_packetizer_stream_subtable_compare (gconstpointer a, gconstpointer b) { @@ -211,7 +365,10 @@ mpegts_packetizer_class_init (MpegTSPacketizer2Class * klass) static void mpegts_packetizer_init (MpegTSPacketizer2 * packetizer) { - packetizer->priv = MPEGTS_PACKETIZER_GET_PRIVATE (packetizer); + MpegTSPacketizerPrivate *priv; + guint i; + + priv = packetizer->priv = MPEGTS_PACKETIZER_GET_PRIVATE (packetizer); packetizer->adapter = gst_adapter_new (); packetizer->offset = 0; packetizer->empty = TRUE; @@ -219,28 +376,29 @@ mpegts_packetizer_init (MpegTSPacketizer2 * packetizer) packetizer->know_packet_size = FALSE; packetizer->calculate_skew = FALSE; packetizer->calculate_offset = FALSE; - mpegts_packetizer_reset_skew (packetizer); - packetizer->priv->available = 0; - packetizer->priv->mapped = NULL; - packetizer->priv->mapped_size = 0; - packetizer->priv->offset = 0; + priv->available = 0; + priv->mapped = NULL; + priv->mapped_size = 0; + priv->offset = 0; - packetizer->priv->first_offset = -1; - packetizer->priv->first_pcr = -1; - packetizer->priv->first_pcr_ts = GST_CLOCK_TIME_NONE; - packetizer->priv->last_offset = -1; - packetizer->priv->last_pcr = -1; - packetizer->priv->last_pcr_ts = GST_CLOCK_TIME_NONE; - packetizer->priv->nb_seen_offsets = 0; - packetizer->priv->refoffset = -1; - packetizer->priv->last_in_time = GST_CLOCK_TIME_NONE; + memset (priv->pcrtablelut, 0xff, 0x200); + memset (priv->observations, 0x0, sizeof (priv->observations)); + for (i = 0; i < _ICONV_MAX; i++) + priv->iconvs[i] = (GIConv) - 1; + + priv->lastobsid = 0; + + priv->nb_seen_offsets = 0; + priv->refoffset = -1; + priv->last_in_time = GST_CLOCK_TIME_NONE; } static void mpegts_packetizer_dispose (GObject * object) { MpegTSPacketizer2 *packetizer = GST_MPEGTS_PACKETIZER (object); + guint i; if (!packetizer->disposed) { if (packetizer->know_packet_size && packetizer->caps != NULL) { @@ -262,6 +420,11 @@ mpegts_packetizer_dispose (GObject * object) packetizer->disposed = TRUE; packetizer->offset = 0; packetizer->empty = TRUE; + + for (i = 0; i < _ICONV_MAX; i++) + if (packetizer->priv->iconvs[i] != (GIConv) - 1) + g_iconv_close (packetizer->priv->iconvs[i]); + } if (G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose) @@ -331,15 +494,22 @@ mpegts_packetizer_parse_adaptation_field_control (MpegTSPacketizer2 * /* PCR */ if (afcflags & MPEGTS_AFC_PCR_FLAG) { + MpegTSPCR *pcrtable = NULL; packet->pcr = mpegts_packetizer_compute_pcr (data); - *data += 6; - GST_DEBUG ("pcr %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT ")", - packet->pcr, GST_TIME_ARGS (PCRTIME_TO_GSTTIME (packet->pcr))); - - if (GST_CLOCK_TIME_IS_VALID (packet->origts) && packetizer->calculate_skew) - packet->origts = calculate_skew (packetizer, packet->pcr, packet->origts); - if (packetizer->calculate_offset) - record_pcr (packetizer, packet->pcr, packet->offset); + data += 6; + GST_DEBUG ("pcr 0x%04x %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT + ") offset:%" G_GUINT64_FORMAT, packet->pid, packet->pcr, + GST_TIME_ARGS (PCRTIME_TO_GSTTIME (packet->pcr)), packet->offset); + + if (GST_CLOCK_TIME_IS_VALID (packet->origts) && packetizer->calculate_skew) { + pcrtable = get_pcr_table (packetizer, packet->pid); + packet->origts = calculate_skew (pcrtable, packet->pcr, packet->origts); + } + if (packetizer->calculate_offset) { + if (!pcrtable) + pcrtable = get_pcr_table (packetizer, packet->pid); + record_pcr (packetizer, pcrtable, packet->pcr, packet->offset); + } } /* OPCR */ @@ -641,8 +811,7 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer, g_value_unset (&value); } - gst_structure_id_set_value (pat_info, QUARK_PROGRAMS, &entries); - g_value_unset (&entries); + gst_structure_id_take_value (pat_info, QUARK_PROGRAMS, &entries); if (data != end - 4) { /* FIXME: check the CRC before parsing the packet */ @@ -849,8 +1018,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer, g_value_unset (&stream_value); } - gst_structure_id_set_value (pmt, QUARK_STREAMS, &programs); - g_value_unset (&programs); + gst_structure_id_take_value (pmt, QUARK_STREAMS, &programs); g_assert (data == end - 4); @@ -935,7 +1103,8 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, (gchar *) DESC_DVB_NETWORK_NAME_text (networkname_descriptor); networkname_tmp = - get_encoding_and_convert (networkname, networkname_length); + get_encoding_and_convert (packetizer, networkname, + networkname_length); gst_structure_id_set (nit, QUARK_NETWORK_NAME, G_TYPE_STRING, networkname_tmp, NULL); g_free (networkname_tmp); @@ -1109,7 +1278,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, "polarization", G_TYPE_STRING, polarization_str, "symbol-rate", G_TYPE_UINT, symbol_rate, "inner-fec", G_TYPE_STRING, fec_inner_str, NULL); - gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE, + gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE, delivery_structure, NULL); } else if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor, DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM))) { @@ -1227,17 +1396,17 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, default: transmission_mode_str = "reserved"; } - delivery_structure = gst_structure_new ("terrestrial", - "frequency", G_TYPE_UINT, frequency, - "bandwidth", G_TYPE_UINT, bandwidth, - "constellation", G_TYPE_STRING, constellation_str, - "hierarchy", G_TYPE_UINT, hierarchy, - "code-rate-hp", G_TYPE_STRING, code_rate_hp_str, - "code-rate-lp", G_TYPE_STRING, code_rate_lp_str, - "guard-interval", G_TYPE_UINT, guard_interval, - "transmission-mode", G_TYPE_STRING, transmission_mode_str, - "other-frequency", G_TYPE_BOOLEAN, other_frequency, NULL); - gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE, + delivery_structure = gst_structure_new_id (QUARK_TERRESTRIAL, + QUARK_FREQUENCY, G_TYPE_UINT, frequency, + QUARK_BANDWIDTH, G_TYPE_UINT, bandwidth, + QUARK_CONSTELLATION, G_TYPE_STRING, constellation_str, + QUARK_HIERARCHY, G_TYPE_UINT, hierarchy, + QUARK_CODE_RATE_HP, G_TYPE_STRING, code_rate_hp_str, + QUARK_CODE_RATE_LP, G_TYPE_STRING, code_rate_lp_str, + QUARK_GUARD_INTERVAL, G_TYPE_UINT, guard_interval, + QUARK_TRANSMISSION_MODE, G_TYPE_STRING, transmission_mode_str, + QUARK_OTHER_FREQUENCY, G_TYPE_BOOLEAN, other_frequency, NULL); + gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE, delivery_structure, NULL); } else if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor, DESC_DVB_CABLE_DELIVERY_SYSTEM))) { @@ -1321,12 +1490,12 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, default: modulation_str = "reserved"; } - delivery_structure = gst_structure_new ("cable", - "modulation", G_TYPE_STRING, modulation_str, - "frequency", G_TYPE_UINT, frequency, - "symbol-rate", G_TYPE_UINT, symbol_rate, - "inner-fec", G_TYPE_STRING, fec_inner_str, NULL); - gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE, + delivery_structure = gst_structure_new_id (QUARK_CABLE, + QUARK_MODULATION, G_TYPE_STRING, modulation_str, + QUARK_FREQUENCY, G_TYPE_UINT, frequency, + QUARK_SYMBOL_RATE, G_TYPE_UINT, symbol_rate, + QUARK_INNER_FEC, G_TYPE_STRING, fec_inner_str, NULL); + gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE, delivery_structure, NULL); } /* free the temporary delivery structure */ @@ -1348,9 +1517,9 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, current_pos += 2; logical_channel_number = GST_READ_UINT16_BE (current_pos) & 0x03ff; - channel = - gst_structure_new ("channels", "service-id", G_TYPE_UINT, - service_id, "logical-channel-number", G_TYPE_UINT, + channel = gst_structure_new_id (QUARK_CHANNELS, + QUARK_SERVICE_ID, G_TYPE_UINT, + service_id, QUARK_LOGICAL_CHANNEL_NUMBER, G_TYPE_UINT, logical_channel_number, NULL); g_value_init (&channel_value, GST_TYPE_STRUCTURE); g_value_take_boxed (&channel_value, channel); @@ -1358,8 +1527,8 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, g_value_unset (&channel_value); current_pos += 2; } - gst_structure_set_value (transport, "channels", &channel_numbers); - g_value_unset (&channel_numbers); + gst_structure_id_take_value (transport, QUARK_CHANNELS, + &channel_numbers); } if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor, DESC_DVB_FREQUENCY_LIST))) { @@ -1428,8 +1597,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, break; } - gst_structure_set_value (transport, fieldname, &frequencies); - g_value_unset (&frequencies); + gst_structure_take_value (transport, fieldname, &frequencies); } } @@ -1460,8 +1628,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer, goto error; } - gst_structure_id_set_value (nit, QUARK_TRANSPORTS, &transports); - g_value_unset (&transports); + gst_structure_id_take_value (nit, QUARK_TRANSPORTS, &transports); GST_DEBUG ("NIT %" GST_PTR_FORMAT, nit); @@ -1612,9 +1779,10 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer, running_status_tmp = "reserved"; } servicename_tmp = - get_encoding_and_convert (servicename, servicename_length); + get_encoding_and_convert (packetizer, servicename, + servicename_length); serviceprovider_name_tmp = - get_encoding_and_convert (serviceprovider_name, + get_encoding_and_convert (packetizer, serviceprovider_name, serviceprovider_name_length); gst_structure_set (service, @@ -1656,8 +1824,7 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer, goto error; } - gst_structure_id_set_value (sdt, QUARK_SERVICES, &services); - g_value_unset (&services); + gst_structure_id_take_value (sdt, QUARK_SERVICES, &services); return sdt; @@ -1787,18 +1954,19 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, /* TODO: send tag event down relevant pad saying what is currently playing */ event_name = g_strdup_printf ("event-%d", event_id); - event = gst_structure_new (event_name, - "event-id", G_TYPE_UINT, event_id, - "year", G_TYPE_UINT, year, - "month", G_TYPE_UINT, month, - "day", G_TYPE_UINT, day, - "hour", G_TYPE_UINT, hour, - "minute", G_TYPE_UINT, minute, - "second", G_TYPE_UINT, second, - "duration", G_TYPE_UINT, duration, - "running-status", G_TYPE_UINT, running_status, - "free-ca-mode", G_TYPE_BOOLEAN, free_ca_mode, NULL); + event = gst_structure_new_empty (event_name); g_free (event_name); + gst_structure_id_set (event, + QUARK_EVENT_ID, G_TYPE_UINT, event_id, + QUARK_YEAR, G_TYPE_UINT, year, + QUARK_MONTH, G_TYPE_UINT, month, + QUARK_DAY, G_TYPE_UINT, day, + QUARK_HOUR, G_TYPE_UINT, hour, + QUARK_MINUTE, G_TYPE_UINT, minute, + QUARK_SECOND, G_TYPE_UINT, second, + QUARK_DURATION, G_TYPE_UINT, duration, + QUARK_RUNNING_STATUS, G_TYPE_UINT, running_status, + QUARK_FREE_CA_MODE, G_TYPE_BOOLEAN, free_ca_mode, NULL); if (descriptors_loop_length) { guint8 *event_descriptor; @@ -1830,17 +1998,19 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, DESC_LENGTH (event_descriptor)) { eventname_tmp = - get_encoding_and_convert (eventname, eventname_length); + get_encoding_and_convert (packetizer, eventname, + eventname_length); eventdescription_tmp = - get_encoding_and_convert (eventdescription, + get_encoding_and_convert (packetizer, eventdescription, eventdescription_length); - gst_structure_set (event, "name", G_TYPE_STRING, eventname_tmp, - "description", G_TYPE_STRING, eventdescription_tmp, NULL); + gst_structure_id_set (event, QUARK_NAME, G_TYPE_STRING, eventname_tmp, + QUARK_DESCRIPTION, G_TYPE_STRING, eventdescription_tmp, NULL); g_free (eventname_tmp); g_free (eventdescription_tmp); } } + extended_event_descriptors = gst_mpeg_descriptor_find_all (&mpegdescriptor, DESC_DVB_EXTENDED_EVENT); @@ -1870,18 +2040,21 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, length_aux = *items_aux; ++items_aux; description = - get_encoding_and_convert ((gchar *) items_aux, length_aux); + get_encoding_and_convert (packetizer, (gchar *) items_aux, + length_aux); items_aux += length_aux; /* Item text */ length_aux = *items_aux; ++items_aux; - text = get_encoding_and_convert ((gchar *) items_aux, length_aux); + text = + get_encoding_and_convert (packetizer, (gchar *) items_aux, + length_aux); items_aux += length_aux; - extended_item = gst_structure_new ("extended_item", - "description", G_TYPE_STRING, description, - "text", G_TYPE_STRING, text, NULL); + extended_item = gst_structure_new_id (QUARK_EXTENDED_ITEM, + QUARK_DESCRIPTION, G_TYPE_STRING, description, + QUARK_TEXT, G_TYPE_STRING, text, NULL); g_value_init (&extended_item_value, GST_TYPE_STRUCTURE); g_value_take_boxed (&extended_item_value, extended_item); @@ -1889,29 +2062,30 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, &extended_item_value); g_value_unset (&extended_item_value); } + if (extended_text) { gchar *tmp; gchar *old_extended_text = extended_text; - tmp = get_encoding_and_convert ((gchar *) + tmp = get_encoding_and_convert (packetizer, (gchar *) DESC_DVB_EXTENDED_EVENT_text (extended_descriptor), DESC_DVB_EXTENDED_EVENT_text_length (extended_descriptor)); extended_text = g_strdup_printf ("%s%s", extended_text, tmp); g_free (old_extended_text); g_free (tmp); } else { - extended_text = get_encoding_and_convert ((gchar *) + extended_text = get_encoding_and_convert (packetizer, (gchar *) DESC_DVB_EXTENDED_EVENT_text (extended_descriptor), DESC_DVB_EXTENDED_EVENT_text_length (extended_descriptor)); } } } if (extended_text) { - gst_structure_set (event, "extended-text", G_TYPE_STRING, + gst_structure_id_set (event, QUARK_EXTENDED_TEXT, G_TYPE_STRING, extended_text, NULL); g_free (extended_text); } - gst_structure_set_value (event, "extented-items", &extended_items); - g_value_unset (&extended_items); + gst_structure_id_take_value (event, QUARK_EXTENDED_ITEMS, + &extended_items); g_array_free (extended_event_descriptors, TRUE); } @@ -2113,8 +2287,7 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, component = NULL; } } - gst_structure_set_value (event, "components", &components); - g_value_unset (&components); + gst_structure_take_value (event, "components", &components); g_array_free (component_descriptors, TRUE); } @@ -2142,8 +2315,7 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer, goto error; } - gst_structure_id_set_value (eit, QUARK_EVENTS, &events); - g_value_unset (&events); + gst_structure_id_take_value (eit, QUARK_EVENTS, &events); GST_DEBUG ("EIT %" GST_PTR_FORMAT, eit); @@ -2287,6 +2459,8 @@ mpegts_packetizer_clear (MpegTSPacketizer2 * packetizer) void mpegts_packetizer_flush (MpegTSPacketizer2 * packetizer) { + GST_DEBUG ("Flushing"); + if (packetizer->streams) { int i; for (i = 0; i < 8192; i++) { @@ -2434,6 +2608,7 @@ MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer, MpegTSPacketizerPacket * packet) { + MpegTSPacketizerPrivate *priv = packetizer->priv; guint avail; int i; @@ -2442,20 +2617,15 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer, return PACKET_NEED_MORE; } - while ((avail = packetizer->priv->available) >= packetizer->packet_size) { - GST_DEBUG ("mapped:%p, mapped_size:%d, offset:%d", - packetizer->priv->mapped, - packetizer->priv->mapped_size, packetizer->priv->offset); - if (packetizer->priv->mapped == NULL) { - packetizer->priv->mapped_size = - packetizer->priv->available - - (packetizer->priv->available % packetizer->packet_size); - packetizer->priv->mapped = - (guint8 *) gst_adapter_map (packetizer->adapter, - packetizer->priv->mapped_size); - packetizer->priv->offset = 0; + while ((avail = priv->available) >= packetizer->packet_size) { + if (priv->mapped == NULL) { + priv->mapped_size = + priv->available - (priv->available % packetizer->packet_size); + priv->mapped = + (guint8 *) gst_adapter_map (packetizer->adapter, priv->mapped_size); + priv->offset = 0; } - packet->data_start = packetizer->priv->mapped + packetizer->priv->offset; + packet->data_start = priv->mapped + priv->offset; /* M2TS packets don't start with the sync byte, all other variants do */ if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) @@ -2466,10 +2636,10 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer, * the data */ packet->data_end = packet->data_start + 188; packet->offset = packetizer->offset; - GST_DEBUG ("offset %" G_GUINT64_FORMAT, packet->offset); + GST_LOG ("offset %" G_GUINT64_FORMAT, packet->offset); packetizer->offset += packetizer->packet_size; GST_MEMDUMP ("data_start", packet->data_start, 16); - packet->origts = packetizer->priv->last_in_time; + packet->origts = priv->last_in_time; /* Check sync byte */ if (G_LIKELY (packet->data_start[0] == 0x47)) @@ -2489,13 +2659,15 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer, i += 188; } - gst_adapter_flush (packetizer->adapter, i); + GST_DEBUG ("Flushing %d bytes out", i); + /* gst_adapter_flush (packetizer->adapter, i); */ /* Pop out the remaining data... */ - packetizer->priv->offset += i; - packetizer->priv->available -= i; - if (G_UNLIKELY (packetizer->priv->available < packetizer->packet_size)) { - gst_adapter_flush (packetizer->adapter, packetizer->priv->offset); - packetizer->priv->mapped = NULL; + priv->offset += i; + priv->available -= i; + if (G_UNLIKELY (priv->available < packetizer->packet_size)) { + GST_DEBUG ("Flushing %d bytes out", priv->offset); + gst_adapter_flush (packetizer->adapter, priv->offset); + priv->mapped = NULL; } continue; } @@ -2528,12 +2700,14 @@ void mpegts_packetizer_clear_packet (MpegTSPacketizer2 * packetizer, MpegTSPacketizerPacket * packet) { - memset (packet, 0, sizeof (MpegTSPacketizerPacket)); - packetizer->priv->offset += packetizer->packet_size; - packetizer->priv->available -= packetizer->packet_size; - if (G_UNLIKELY (packetizer->priv->available < packetizer->packet_size)) { - gst_adapter_flush (packetizer->adapter, packetizer->priv->offset); - packetizer->priv->mapped = NULL; + MpegTSPacketizerPrivate *priv = packetizer->priv; + + priv->offset += packetizer->packet_size; + priv->available -= packetizer->packet_size; + + if (G_UNLIKELY (priv->mapped && priv->available < packetizer->packet_size)) { + gst_adapter_flush (packetizer->adapter, priv->offset); + priv->mapped = NULL; } } @@ -2719,6 +2893,23 @@ _init_local (void) QUARK_NETWORK_NAME = g_quark_from_string ("network-name"); QUARK_ORIGINAL_NETWORK_ID = g_quark_from_string ("original-network-id"); QUARK_TRANSPORTS = g_quark_from_string ("transports"); + QUARK_TERRESTRIAL = g_quark_from_string ("terrestrial"); + QUARK_CABLE = g_quark_from_string ("cable"); + QUARK_FREQUENCY = g_quark_from_string ("frequency"); + QUARK_MODULATION = g_quark_from_string ("modulation"); + QUARK_BANDWIDTH = g_quark_from_string ("bandwidth"); + QUARK_CONSTELLATION = g_quark_from_string ("constellation"); + QUARK_HIERARCHY = g_quark_from_string ("hierarchy"); + QUARK_CODE_RATE_HP = g_quark_from_string ("code-rate-hp"); + QUARK_CODE_RATE_LP = g_quark_from_string ("code-rate-lp"); + QUARK_GUARD_INTERVAL = g_quark_from_string ("guard-interval"); + QUARK_TRANSMISSION_MODE = g_quark_from_string ("transmission-mode"); + QUARK_OTHER_FREQUENCY = g_quark_from_string ("other-frequency"); + QUARK_SYMBOL_RATE = g_quark_from_string ("symbol-rate"); + QUARK_INNER_FEC = g_quark_from_string ("inner-fec"); + QUARK_DELIVERY = g_quark_from_string ("delivery"); + QUARK_CHANNELS = g_quark_from_string ("channels"); + QUARK_LOGICAL_CHANNEL_NUMBER = g_quark_from_string ("logical-channel-number"); QUARK_SDT = g_quark_from_string ("sdt"); QUARK_ACTUAL_TRANSPORT_STREAM = @@ -2732,6 +2923,22 @@ _init_local (void) g_quark_from_string ("segment-last-section-number"); QUARK_LAST_TABLE_ID = g_quark_from_string ("last-table-id"); QUARK_EVENTS = g_quark_from_string ("events"); + QUARK_NAME = g_quark_from_string ("name"); + QUARK_DESCRIPTION = g_quark_from_string ("description"); + QUARK_EXTENDED_ITEM = g_quark_from_string ("extended_item"); + QUARK_EXTENDED_ITEMS = g_quark_from_string ("extended-items"); + QUARK_TEXT = g_quark_from_string ("text"); + QUARK_EXTENDED_TEXT = g_quark_from_string ("extended-text"); + QUARK_EVENT_ID = g_quark_from_string ("event-id"); + QUARK_YEAR = g_quark_from_string ("year"); + QUARK_MONTH = g_quark_from_string ("month"); + QUARK_DAY = g_quark_from_string ("day"); + QUARK_HOUR = g_quark_from_string ("hour"); + QUARK_MINUTE = g_quark_from_string ("minute"); + QUARK_SECOND = g_quark_from_string ("second"); + QUARK_DURATION = g_quark_from_string ("duration"); + QUARK_RUNNING_STATUS = g_quark_from_string ("running-status"); + QUARK_FREE_CA_MODE = g_quark_from_string ("free-ca-mode"); } /** @@ -2739,70 +2946,98 @@ _init_local (void) * @start_text: Location where the beginning of the actual text is stored * @is_multibyte: Location where information whether it's a multibyte encoding * or not is stored - * @returns: Name of encoding or NULL of encoding could not be detected. - * - * The returned string should be freed with g_free () when no longer needed. + * @returns: GIconv for conversion or NULL */ -static gchar * -get_encoding (const gchar * text, guint * start_text, gboolean * is_multibyte) +static LocalIconvCode +get_encoding (MpegTSPacketizer2 * packetizer, const gchar * text, + guint * start_text, gboolean * is_multibyte) { - gchar *encoding; + LocalIconvCode encoding; guint8 firstbyte; - g_return_val_if_fail (text != NULL, NULL); + *is_multibyte = FALSE; + *start_text = 0; firstbyte = (guint8) text[0]; - /* ETSI EN 300 468, "Selection of character table" */ + /* A wrong value */ + g_return_val_if_fail (firstbyte != 0x00, _ICONV_UNKNOWN); + if (firstbyte <= 0x0B) { - encoding = g_strdup_printf ("iso8859-%u", firstbyte + 4); - *start_text = 1; - *is_multibyte = FALSE; - } else if (firstbyte >= 0x20) { - encoding = g_strdup ("iso6937"); - *start_text = 0; - *is_multibyte = FALSE; - } else if (firstbyte == 0x10) { - guint16 table; - gchar table_str[6]; - - text++; - table = GST_READ_UINT16_BE (text); - g_snprintf (table_str, 6, "%d", table); - - encoding = g_strconcat ("iso8859-", table_str, NULL); - *start_text = 3; - *is_multibyte = FALSE; - } else if (firstbyte == 0x11) { - encoding = g_strdup ("ISO-10646/UCS2"); - *start_text = 1; - *is_multibyte = TRUE; - } else if (firstbyte == 0x12) { - /* EUC-KR implements KSX1001 */ - encoding = g_strdup ("EUC-KR"); + /* 0x01 => iso 8859-5 */ + encoding = firstbyte + _ICONV_ISO8859_4; *start_text = 1; - *is_multibyte = TRUE; - } else if (firstbyte == 0x13) { - encoding = g_strdup ("GB2312"); - *start_text = 1; - *is_multibyte = FALSE; - } else if (firstbyte == 0x14) { - encoding = g_strdup ("UTF-16BE"); - *start_text = 1; - *is_multibyte = TRUE; - } else if (firstbyte == 0x15) { - encoding = g_strdup ("ISO-10646/UTF8"); - *start_text = 1; - *is_multibyte = FALSE; - } else { - /* reserved */ - encoding = NULL; - *start_text = 0; - *is_multibyte = FALSE; + goto beach; } + /* ETSI EN 300 468, "Selection of character table" */ + switch (firstbyte) { + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + /* RESERVED */ + encoding = _ICONV_UNKNOWN; + break; + case 0x10: + { + guint16 table; + + table = GST_READ_UINT16_BE (text + 1); + + if (table < 17) + encoding = _ICONV_UNKNOWN + table; + else + encoding = _ICONV_UNKNOWN;; + *start_text = 3; + break; + } + case 0x11: + encoding = _ICONV_ISO10646_UC2; + *start_text = 1; + *is_multibyte = TRUE; + break; + case 0x12: + /* EUC-KR implements KSX1001 */ + encoding = _ICONV_EUC_KR; + *start_text = 1; + *is_multibyte = TRUE; + break; + case 0x13: + encoding = _ICONV_GB2312; + *start_text = 1; + break; + case 0x14: + encoding = _ICONV_UTF_16BE; + *start_text = 1; + *is_multibyte = TRUE; + break; + case 0x15: + /* TODO : Where does this come from ?? */ + encoding = _ICONV_ISO10646_UTF8; + *start_text = 1; + break; + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + /* RESERVED */ + encoding = _ICONV_UNKNOWN; + break; + default: + encoding = _ICONV_ISO6937; + break; + } + +beach: GST_DEBUG - ("Found encoding %s, first byte is 0x%02x, start_text: %u, is_multibyte: %d", + ("Found encoding %d, first byte is 0x%02x, start_text: %u, is_multibyte: %d", encoding, firstbyte, *start_text, *is_multibyte); return encoding; @@ -2821,15 +3056,12 @@ get_encoding (const gchar * text, guint * start_text, gboolean * is_multibyte) */ static gchar * convert_to_utf8 (const gchar * text, gint length, guint start, - const gchar * encoding, gboolean is_multibyte, GError ** error) + GIConv iconv, gboolean is_multibyte, GError ** error) { gchar *new_text; gchar *tmp, *pos; gint i; - g_return_val_if_fail (text != NULL, NULL); - g_return_val_if_fail (encoding != NULL, NULL); - text += start; pos = tmp = g_malloc (length * 2); @@ -2932,8 +3164,9 @@ convert_to_utf8 (const gchar * text, gint length, guint start, if (pos > tmp) { gsize bread = 0; + new_text = - g_convert (tmp, pos - tmp, "utf-8", encoding, &bread, NULL, error); + g_convert_with_iconv (tmp, pos - tmp, iconv, &bread, NULL, error); GST_DEBUG ("Converted to : %s", new_text); } else { new_text = g_strdup (""); @@ -2945,105 +3178,110 @@ convert_to_utf8 (const gchar * text, gint length, guint start, } static gchar * -get_encoding_and_convert (const gchar * text, guint length) +get_encoding_and_convert (MpegTSPacketizer2 * packetizer, const gchar * text, + guint length) { GError *error = NULL; gchar *converted_str; - gchar *encoding; guint start_text = 0; gboolean is_multibyte; + LocalIconvCode encoding; + GIConv iconv = (GIConv) - 1; g_return_val_if_fail (text != NULL, NULL); - if (length == 0) + if (text == NULL || length == 0) return g_strdup (""); - encoding = get_encoding (text, &start_text, &is_multibyte); + encoding = get_encoding (packetizer, text, &start_text, &is_multibyte); + + if (encoding > _ICONV_UNKNOWN && encoding < _ICONV_MAX) { + GST_DEBUG ("Encoding %s", iconvtablename[encoding]); + if (packetizer->priv->iconvs[encoding] == (GIConv) - 1) + packetizer->priv->iconvs[encoding] = + g_iconv_open ("utf-8", iconvtablename[encoding]); + iconv = packetizer->priv->iconvs[encoding]; + } - if (encoding == NULL) { + if (iconv == (GIConv) - 1) { GST_WARNING ("Could not detect encoding"); converted_str = g_strndup (text, length); - } else { - converted_str = convert_to_utf8 (text, length - start_text, start_text, - encoding, is_multibyte, &error); - if (error != NULL) { - GST_WARNING ("Could not convert string, encoding is %s: %s", - encoding, error->message); - g_error_free (error); - error = NULL; + goto beach; + } + + converted_str = convert_to_utf8 (text, length - start_text, start_text, + iconv, is_multibyte, &error); + if (error != NULL) { + GST_WARNING ("Could not convert string: %s", error->message); + g_error_free (error); + error = NULL; + + if (encoding >= _ICONV_ISO8859_2 && encoding <= _ICONV_ISO8859_15) { + /* Sometimes using the standard 8859-1 set fixes issues */ + GST_DEBUG ("Encoding %s", iconvtablename[_ICONV_ISO8859_1]); + if (packetizer->priv->iconvs[_ICONV_ISO8859_1] == (GIConv) - 1) + packetizer->priv->iconvs[_ICONV_ISO8859_1] = + g_iconv_open ("utf-8", iconvtablename[_ICONV_ISO8859_1]); + iconv = packetizer->priv->iconvs[_ICONV_ISO8859_1]; + + GST_INFO ("Trying encoding ISO 8859-1"); + converted_str = convert_to_utf8 (text, length, 1, iconv, FALSE, &error); + if (error != NULL) { + GST_WARNING + ("Could not convert string while assuming encoding ISO 8859-1: %s", + error->message); + g_error_free (error); + goto failed; + } + } else if (encoding == _ICONV_ISO6937) { /* The first part of ISO 6937 is identical to ISO 8859-9, but * they differ in the second part. Some channels don't * provide the first byte that indicates ISO 8859-9 encoding. * If decoding from ISO 6937 failed, we try ISO 8859-9 here. */ - if (strcmp (encoding, "iso6937") == 0) { - GST_INFO ("Trying encoding ISO 8859-9"); - converted_str = convert_to_utf8 (text, length, 0, - "iso8859-9", FALSE, &error); - if (error != NULL) { - GST_WARNING - ("Could not convert string while assuming encoding ISO 8859-9: %s", - error->message); - g_error_free (error); - goto failed; - } - } else { + if (packetizer->priv->iconvs[_ICONV_ISO8859_9] == (GIConv) - 1) + packetizer->priv->iconvs[_ICONV_ISO8859_9] = + g_iconv_open ("utf-8", iconvtablename[_ICONV_ISO8859_9]); + iconv = packetizer->priv->iconvs[_ICONV_ISO8859_9]; + + GST_INFO ("Trying encoding ISO 8859-9"); + converted_str = convert_to_utf8 (text, length, 0, iconv, FALSE, &error); + if (error != NULL) { + GST_WARNING + ("Could not convert string while assuming encoding ISO 8859-9: %s", + error->message); + g_error_free (error); goto failed; } - } - - g_free (encoding); + } else + goto failed; } +beach: return converted_str; failed: { - g_free (encoding); text += start_text; return g_strndup (text, length - start_text); } } -/** - * mpegts_packetizer_reset_skew: - * @packetizer: an #MpegTSPacketizer2 - * - * Reset the skew calculations in @packetizer. - */ static void -mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer) -{ - /* FIXME : These variables should be *per* PCR PID */ - packetizer->base_time = GST_CLOCK_TIME_NONE; - packetizer->base_pcrtime = GST_CLOCK_TIME_NONE; - packetizer->last_pcrtime = GST_CLOCK_TIME_NONE; - packetizer->window_pos = 0; - packetizer->window_filling = TRUE; - packetizer->window_min = 0; - packetizer->skew = 0; - packetizer->prev_send_diff = GST_CLOCK_TIME_NONE; - packetizer->prev_out_time = GST_CLOCK_TIME_NONE; - packetizer->wrap_count = 0; - GST_DEBUG ("reset skew correction"); -} - -static void -mpegts_packetizer_resync (MpegTSPacketizer2 * packetizer, GstClockTime time, +mpegts_packetizer_resync (MpegTSPCR * pcr, GstClockTime time, GstClockTime gstpcrtime, gboolean reset_skew) { - /* FIXME : These variables should be *per* PCR PID */ - packetizer->base_time = time; - packetizer->base_pcrtime = gstpcrtime; - packetizer->prev_out_time = GST_CLOCK_TIME_NONE; - packetizer->prev_send_diff = GST_CLOCK_TIME_NONE; + pcr->base_time = time; + pcr->base_pcrtime = gstpcrtime; + pcr->prev_out_time = GST_CLOCK_TIME_NONE; + pcr->prev_send_diff = GST_CLOCK_TIME_NONE; if (reset_skew) { - packetizer->window_filling = TRUE; - packetizer->window_pos = 0; - packetizer->window_min = 0; - packetizer->window_size = 0; - packetizer->skew = 0; + pcr->window_filling = TRUE; + pcr->window_pos = 0; + pcr->window_min = 0; + pcr->window_size = 0; + pcr->skew = 0; } } @@ -3113,8 +3351,7 @@ mpegts_packetizer_resync (MpegTSPacketizer2 * packetizer, GstClockTime time, * Returns: @time adjusted with the clock skew. */ static GstClockTime -calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime, - GstClockTime time) +calculate_skew (MpegTSPCR * pcr, guint64 pcrtime, GstClockTime time) { guint64 send_diff, recv_diff; gint64 delta; @@ -3123,61 +3360,88 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime, GstClockTime gstpcrtime, out_time; guint64 slope; - gstpcrtime = - PCRTIME_TO_GSTTIME (pcrtime) + packetizer->wrap_count * PCR_GST_MAX_VALUE; + gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset; /* first time, lock on to time and gstpcrtime */ - if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (packetizer->base_time))) { - packetizer->base_time = time; - packetizer->prev_out_time = GST_CLOCK_TIME_NONE; + if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (pcr->base_time))) { + pcr->base_time = time; + pcr->prev_out_time = GST_CLOCK_TIME_NONE; GST_DEBUG ("Taking new base time %" GST_TIME_FORMAT, GST_TIME_ARGS (time)); } - if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (packetizer->base_pcrtime))) { - packetizer->base_pcrtime = gstpcrtime; - packetizer->prev_send_diff = -1; + if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (pcr->base_pcrtime))) { + pcr->base_pcrtime = gstpcrtime; + pcr->prev_send_diff = -1; GST_DEBUG ("Taking new base pcrtime %" GST_TIME_FORMAT, GST_TIME_ARGS (gstpcrtime)); } - if (G_LIKELY (gstpcrtime >= packetizer->base_pcrtime)) - send_diff = gstpcrtime - packetizer->base_pcrtime; - else if (GST_CLOCK_TIME_IS_VALID (time) - && (packetizer->last_pcrtime - gstpcrtime > PCR_GST_MAX_VALUE / 2)) { - /* Detect wraparounds */ - GST_DEBUG ("PCR wrap"); - packetizer->wrap_count++; - gstpcrtime = - PCRTIME_TO_GSTTIME (pcrtime) + - packetizer->wrap_count * PCR_GST_MAX_VALUE; - send_diff = gstpcrtime - packetizer->base_pcrtime; - } else { - GST_WARNING ("backward timestamps at server but no timestamps"); - send_diff = 0; - /* at least try to get a new timestamp.. */ - packetizer->base_time = GST_CLOCK_TIME_NONE; - } + /* Handle PCR wraparound and resets */ + if (GST_CLOCK_TIME_IS_VALID (pcr->last_pcrtime) && + gstpcrtime < pcr->last_pcrtime) { + if (pcr->last_pcrtime - gstpcrtime > PCR_GST_MAX_VALUE / 2) { + /* PCR wraparound */ + GST_DEBUG ("PCR wrap"); + pcr->pcroffset += PCR_GST_MAX_VALUE; + gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset; + send_diff = gstpcrtime - pcr->base_pcrtime; + } else if (GST_CLOCK_TIME_IS_VALID (time) + && pcr->last_pcrtime - gstpcrtime > 15 * GST_SECOND) { + /* Assume a reset */ + GST_DEBUG ("PCR reset"); + /* Calculate PCR we would have expected for the given input time, + * essentially applying the reverse correction process + * + * We want to find the PCR offset to apply + * pcroffset = (corrected) gstpcrtime - (received) gstpcrtime + * + * send_diff = (corrected) gstpcrtime - pcr->base_pcrtime + * recv_diff = time - pcr->base_time + * out_time = pcr->base_time + send_diff + * + * We are assuming that send_diff == recv_diff + * (corrected) gstpcrtime - pcr->base_pcrtime = time - pcr->base_time + * Giving us: + * (corrected) gstpcrtime = time - pcr->base_time + pcr->base_pcrtime + * + * And therefore: + * pcroffset = time - pcr->base_time + pcr->base_pcrtime - (received) gstpcrtime + **/ + pcr->pcroffset += time - pcr->base_time + pcr->base_pcrtime - gstpcrtime; + gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset; + send_diff = gstpcrtime - pcr->base_pcrtime; + GST_DEBUG ("Introduced offset is now %" GST_TIME_FORMAT + " corrected pcr time %" GST_TIME_FORMAT, + GST_TIME_ARGS (pcr->pcroffset), GST_TIME_ARGS (gstpcrtime)); + } else { + GST_WARNING ("backward timestamps at server but no timestamps"); + send_diff = 0; + /* at least try to get a new timestamp.. */ + pcr->base_time = GST_CLOCK_TIME_NONE; + } + } else + send_diff = gstpcrtime - pcr->base_pcrtime; GST_DEBUG ("gstpcr %" GST_TIME_FORMAT ", buftime %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT, GST_TIME_ARGS (gstpcrtime), GST_TIME_ARGS (time), - GST_TIME_ARGS (packetizer->base_pcrtime), GST_TIME_ARGS (send_diff)); + GST_TIME_ARGS (pcr->base_pcrtime), GST_TIME_ARGS (send_diff)); /* keep track of the last extended pcrtime */ - packetizer->last_pcrtime = gstpcrtime; + pcr->last_pcrtime = gstpcrtime; /* we don't have an arrival timestamp so we can't do skew detection. we * should still apply a timestamp based on RTP timestamp and base_time */ if (!GST_CLOCK_TIME_IS_VALID (time) - || !GST_CLOCK_TIME_IS_VALID (packetizer->base_time)) + || !GST_CLOCK_TIME_IS_VALID (pcr->base_time)) goto no_skew; /* elapsed time at receiver, includes the jitter */ - recv_diff = time - packetizer->base_time; + recv_diff = time - pcr->base_time; /* Ignore packets received at 100% the same time (i.e. from the same input buffer) */ - if (G_UNLIKELY (time == packetizer->prev_in_time - && GST_CLOCK_TIME_IS_VALID (packetizer->prev_in_time))) + if (G_UNLIKELY (time == pcr->prev_in_time + && GST_CLOCK_TIME_IS_VALID (pcr->prev_in_time))) goto no_skew; /* measure the diff */ @@ -3190,38 +3454,38 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime, GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %" GST_TIME_FORMAT ", slope %" G_GUINT64_FORMAT, GST_TIME_ARGS (time), - GST_TIME_ARGS (packetizer->base_time), GST_TIME_ARGS (recv_diff), slope); + GST_TIME_ARGS (pcr->base_time), GST_TIME_ARGS (recv_diff), slope); /* if the difference between the sender timeline and the receiver timeline * changed too quickly we have to resync because the server likely restarted * its timestamps. */ - if (ABS (delta - packetizer->skew) > GST_SECOND) { + if (ABS (delta - pcr->skew) > GST_SECOND) { GST_WARNING ("delta - skew: %" GST_TIME_FORMAT " too big, reset skew", - GST_TIME_ARGS (delta - packetizer->skew)); - mpegts_packetizer_resync (packetizer, time, gstpcrtime, TRUE); + GST_TIME_ARGS (delta - pcr->skew)); + mpegts_packetizer_resync (pcr, time, gstpcrtime, TRUE); send_diff = 0; delta = 0; } - pos = packetizer->window_pos; + pos = pcr->window_pos; - if (G_UNLIKELY (packetizer->window_filling)) { + if (G_UNLIKELY (pcr->window_filling)) { /* we are filling the window */ GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta); - packetizer->window[pos++] = delta; + pcr->window[pos++] = delta; /* calc the min delta we observed */ - if (G_UNLIKELY (pos == 1 || delta < packetizer->window_min)) - packetizer->window_min = delta; + if (G_UNLIKELY (pos == 1 || delta < pcr->window_min)) + pcr->window_min = delta; if (G_UNLIKELY (send_diff >= MAX_TIME || pos >= MAX_WINDOW)) { - packetizer->window_size = pos; + pcr->window_size = pos; /* window filled */ - GST_DEBUG ("min %" G_GINT64_FORMAT, packetizer->window_min); + GST_DEBUG ("min %" G_GINT64_FORMAT, pcr->window_min); /* the skew is now the min */ - packetizer->skew = packetizer->window_min; - packetizer->window_filling = FALSE; + pcr->skew = pcr->window_min; + pcr->window_filling = FALSE; } else { gint perc_time, perc_window, perc; @@ -3237,73 +3501,70 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime, /* quickly go to the min value when we are filling up, slowly when we are * just starting because we're not sure it's a good value yet. */ - packetizer->skew = - (perc * packetizer->window_min + ((10000 - - perc) * packetizer->skew)) / 10000; - packetizer->window_size = pos + 1; + pcr->skew = + (perc * pcr->window_min + ((10000 - perc) * pcr->skew)) / 10000; + pcr->window_size = pos + 1; } } else { /* pick old value and store new value. We keep the previous value in order * to quickly check if the min of the window changed */ - old = packetizer->window[pos]; - packetizer->window[pos++] = delta; + old = pcr->window[pos]; + pcr->window[pos++] = delta; - if (G_UNLIKELY (delta <= packetizer->window_min)) { + if (G_UNLIKELY (delta <= pcr->window_min)) { /* if the new value we inserted is smaller or equal to the current min, * it becomes the new min */ - packetizer->window_min = delta; - } else if (G_UNLIKELY (old == packetizer->window_min)) { + pcr->window_min = delta; + } else if (G_UNLIKELY (old == pcr->window_min)) { gint64 min = G_MAXINT64; /* if we removed the old min, we have to find a new min */ - for (i = 0; i < packetizer->window_size; i++) { + for (i = 0; i < pcr->window_size; i++) { /* we found another value equal to the old min, we can stop searching now */ - if (packetizer->window[i] == old) { + if (pcr->window[i] == old) { min = old; break; } - if (packetizer->window[i] < min) - min = packetizer->window[i]; + if (pcr->window[i] < min) + min = pcr->window[i]; } - packetizer->window_min = min; + pcr->window_min = min; } /* average the min values */ - packetizer->skew = - (packetizer->window_min + (124 * packetizer->skew)) / 125; + pcr->skew = (pcr->window_min + (124 * pcr->skew)) / 125; GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT, delta, - packetizer->window_min); + pcr->window_min); } /* wrap around in the window */ - if (G_UNLIKELY (pos >= packetizer->window_size)) + if (G_UNLIKELY (pos >= pcr->window_size)) pos = 0; - packetizer->window_pos = pos; + pcr->window_pos = pos; no_skew: /* the output time is defined as the base timestamp plus the PCR time * adjusted for the clock skew .*/ - if (packetizer->base_time != -1) { - out_time = packetizer->base_time + send_diff; + if (pcr->base_time != -1) { + out_time = pcr->base_time + send_diff; /* skew can be negative and we don't want to make invalid timestamps */ - if (packetizer->skew < 0 && out_time < -packetizer->skew) { + if (pcr->skew < 0 && out_time < -pcr->skew) { out_time = 0; } else { - out_time += packetizer->skew; + out_time += pcr->skew; } /* check if timestamps are not going backwards, we can only check this if we * have a previous out time and a previous send_diff */ - if (G_LIKELY (packetizer->prev_out_time != -1 - && packetizer->prev_send_diff != -1)) { + if (G_LIKELY (pcr->prev_out_time != -1 && pcr->prev_send_diff != -1)) { /* now check for backwards timestamps */ if (G_UNLIKELY ( /* if the server timestamps went up and the out_time backwards */ - (send_diff > packetizer->prev_send_diff - && out_time < packetizer->prev_out_time) || + (send_diff > pcr->prev_send_diff + && out_time < pcr->prev_out_time) || /* if the server timestamps went backwards and the out_time forwards */ - (send_diff < packetizer->prev_send_diff - && out_time > packetizer->prev_out_time) || + (send_diff < pcr->prev_send_diff + && out_time > pcr->prev_out_time) || /* if the server timestamps did not change */ - send_diff == packetizer->prev_send_diff)) { + send_diff == pcr->prev_send_diff)) { GST_DEBUG ("backwards timestamps, using previous time"); out_time = GSTTIME_TO_MPEGTIME (out_time); } @@ -3313,41 +3574,42 @@ no_skew: out_time = time; } - packetizer->prev_out_time = out_time; - packetizer->prev_in_time = time; - packetizer->prev_send_diff = send_diff; + pcr->prev_out_time = out_time; + pcr->prev_in_time = time; + pcr->prev_send_diff = send_diff; GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT, - packetizer->skew, GST_TIME_ARGS (out_time)); + pcr->skew, GST_TIME_ARGS (out_time)); return out_time; } static void -record_pcr (MpegTSPacketizer2 * packetizer, guint64 pcr, guint64 offset) +record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, guint64 pcr, + guint64 offset) { MpegTSPacketizerPrivate *priv = packetizer->priv; /* Check against first PCR */ - if (priv->first_pcr == -1 || priv->first_offset > offset) { + if (pcrtable->first_pcr == -1 || pcrtable->first_offset > offset) { GST_DEBUG ("Recording first value. PCR:%" G_GUINT64_FORMAT " offset:%" - G_GUINT64_FORMAT, pcr, offset); - priv->first_pcr = pcr; - priv->first_pcr_ts = PCRTIME_TO_GSTTIME (pcr); - priv->first_offset = offset; + G_GUINT64_FORMAT " pcr_pid:0x%04x", pcr, offset, pcrtable->pid); + pcrtable->first_pcr = pcr; + pcrtable->first_pcr_ts = PCRTIME_TO_GSTTIME (pcr); + pcrtable->first_offset = offset; priv->nb_seen_offsets++; } else /* If we didn't update the first PCR, let's check against last PCR */ - if (priv->last_pcr == -1 || priv->last_offset < offset) { + if (pcrtable->last_pcr == -1 || pcrtable->last_offset < offset) { GST_DEBUG ("Recording last value. PCR:%" G_GUINT64_FORMAT " offset:%" - G_GUINT64_FORMAT, pcr, offset); - if (G_UNLIKELY (priv->first_pcr != -1 && pcr < priv->first_pcr)) { + G_GUINT64_FORMAT " pcr_pid:0x%04x", pcr, offset, pcrtable->pid); + if (G_UNLIKELY (pcrtable->first_pcr != -1 && pcr < pcrtable->first_pcr)) { GST_DEBUG ("rollover detected"); pcr += PCR_MAX_VALUE; } - priv->last_pcr = pcr; - priv->last_pcr_ts = PCRTIME_TO_GSTTIME (pcr); - priv->last_offset = offset; + pcrtable->last_pcr = pcr; + pcrtable->last_pcr_ts = PCRTIME_TO_GSTTIME (pcr); + pcrtable->last_offset = offset; priv->nb_seen_offsets++; } } @@ -3359,9 +3621,11 @@ mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 * packetizer) } GstClockTime -mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset) +mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset, + guint16 pid) { MpegTSPacketizerPrivate *priv = packetizer->priv; + MpegTSPCR *pcrtable; GstClockTime res; if (G_UNLIKELY (!packetizer->calculate_offset)) @@ -3373,10 +3637,12 @@ mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset) if (G_UNLIKELY (offset < priv->refoffset)) return GST_CLOCK_TIME_NONE; + pcrtable = get_pcr_table (packetizer, pid); + /* Convert byte difference into time difference */ res = PCRTIME_TO_GSTTIME (gst_util_uint64_scale (offset - priv->refoffset, - priv->last_pcr - priv->first_pcr, - priv->last_offset - priv->first_offset)); + pcrtable->last_pcr - pcrtable->first_pcr, + pcrtable->last_offset - pcrtable->first_offset)); GST_DEBUG ("Returning timestamp %" GST_TIME_FORMAT " for offset %" G_GUINT64_FORMAT, GST_TIME_ARGS (res), offset); @@ -3384,48 +3650,59 @@ mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset) } GstClockTime -mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, GstClockTime pts) +mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, GstClockTime pts, + guint16 pcr_pid) { GstClockTime res = GST_CLOCK_TIME_NONE; + MpegTSPCR *pcrtable = get_pcr_table (packetizer, pcr_pid); /* Use clock skew if present */ if (packetizer->calculate_skew - && GST_CLOCK_TIME_IS_VALID (packetizer->base_time)) { + && GST_CLOCK_TIME_IS_VALID (pcrtable->base_time)) { GST_DEBUG ("pts %" G_GUINT64_FORMAT " base_pcrtime:%" G_GUINT64_FORMAT - " base_time:%" GST_TIME_FORMAT, pts, packetizer->base_pcrtime, - GST_TIME_ARGS (packetizer->base_time)); - res = pts - packetizer->base_pcrtime + packetizer->base_time + - packetizer->skew; + " base_time:%" GST_TIME_FORMAT, pts, pcrtable->base_pcrtime, + GST_TIME_ARGS (pcrtable->base_time)); + res = + pts + pcrtable->pcroffset - pcrtable->base_pcrtime + + pcrtable->base_time + pcrtable->skew; } else /* If not, use pcr observations */ - if (packetizer->calculate_offset && packetizer->priv->first_pcr != -1) { + if (packetizer->calculate_offset && pcrtable->first_pcr != -1) { /* Rollover */ - if (G_UNLIKELY (pts < packetizer->priv->first_pcr_ts)) + if (G_UNLIKELY (pts < pcrtable->first_pcr_ts)) pts += MPEGTIME_TO_GSTTIME (PTS_DTS_MAX_VALUE); - res = pts - packetizer->priv->first_pcr_ts; + res = pts - pcrtable->first_pcr_ts; } GST_DEBUG ("Returning timestamp %" GST_TIME_FORMAT " for pts %" - GST_TIME_FORMAT, GST_TIME_ARGS (res), GST_TIME_ARGS (pts)); + GST_TIME_FORMAT " pcr_pid:0x%04x", GST_TIME_ARGS (res), + GST_TIME_ARGS (pts), pcr_pid); return res; } guint64 -mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer, GstClockTime ts) +mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer, GstClockTime ts, + guint16 pcr_pid) { MpegTSPacketizerPrivate *priv = packetizer->priv; + MpegTSPCR *pcrtable; guint64 res; - if (!packetizer->calculate_offset || packetizer->priv->first_pcr == -1) + if (!packetizer->calculate_offset) + return -1; + + pcrtable = get_pcr_table (packetizer, pcr_pid); + if (pcrtable->first_pcr == -1) return -1; GST_DEBUG ("ts(pcr) %" G_GUINT64_FORMAT " first_pcr:%" G_GUINT64_FORMAT, - GSTTIME_TO_MPEGTIME (ts), priv->first_pcr); + GSTTIME_TO_MPEGTIME (ts), pcrtable->first_pcr); /* Convert ts to PCRTIME */ res = gst_util_uint64_scale (GSTTIME_TO_PCRTIME (ts), - priv->last_offset - priv->first_offset, priv->last_pcr - priv->first_pcr); - res += priv->first_offset + priv->refoffset; + pcrtable->last_offset - pcrtable->first_offset, + pcrtable->last_pcr - pcrtable->first_pcr); + res += pcrtable->first_offset + priv->refoffset; GST_DEBUG ("Returning offset %" G_GUINT64_FORMAT " for ts %" GST_TIME_FORMAT, res, GST_TIME_ARGS (ts)); diff --git a/gst/mpegtsdemux/mpegtspacketizer.h b/gst/mpegtsdemux/mpegtspacketizer.h index 5d80d360..b82d69cf 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.h +++ b/gst/mpegtsdemux/mpegtspacketizer.h @@ -100,23 +100,6 @@ struct _MpegTSPacketizer2 { /* clock skew calculation */ gboolean calculate_skew; - /* Following variables are only active/used when - * calculate_skew is TRUE */ - /* FIXME : These variables should be *per* PCR PID */ - GstClockTime base_time; - GstClockTime base_pcrtime; - GstClockTime prev_out_time; - GstClockTime prev_in_time; - GstClockTime last_pcrtime; - gint64 window[MAX_WINDOW]; - guint window_pos; - guint window_size; - gboolean window_filling; - gint64 window_min; - gint64 skew; - gint64 prev_send_diff; - gint wrap_count; - /* offset/bitrate calculator */ gboolean calculate_offset; @@ -180,54 +163,54 @@ typedef enum { PACKET_NEED_MORE } MpegTSPacketizerPacketReturn; -GType mpegts_packetizer_get_type(void); +G_GNUC_INTERNAL GType mpegts_packetizer_get_type(void); -MpegTSPacketizer2 *mpegts_packetizer_new (void); -void mpegts_packetizer_clear (MpegTSPacketizer2 *packetizer); -void mpegts_packetizer_flush (MpegTSPacketizer2 *packetizer); -void mpegts_packetizer_push (MpegTSPacketizer2 *packetizer, GstBuffer *buffer); -gboolean mpegts_packetizer_has_packets (MpegTSPacketizer2 *packetizer); -MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL MpegTSPacketizer2 *mpegts_packetizer_new (void); +G_GNUC_INTERNAL void mpegts_packetizer_clear (MpegTSPacketizer2 *packetizer); +G_GNUC_INTERNAL void mpegts_packetizer_flush (MpegTSPacketizer2 *packetizer); +G_GNUC_INTERNAL void mpegts_packetizer_push (MpegTSPacketizer2 *packetizer, GstBuffer *buffer); +G_GNUC_INTERNAL gboolean mpegts_packetizer_has_packets (MpegTSPacketizer2 *packetizer); +G_GNUC_INTERNAL MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 *packetizer, MpegTSPacketizerPacket *packet); -MpegTSPacketizerPacketReturn +G_GNUC_INTERNAL MpegTSPacketizerPacketReturn mpegts_packetizer_process_next_packet(MpegTSPacketizer2 * packetizer); -void mpegts_packetizer_clear_packet (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL void mpegts_packetizer_clear_packet (MpegTSPacketizer2 *packetizer, MpegTSPacketizerPacket *packet); -void mpegts_packetizer_remove_stream(MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL void mpegts_packetizer_remove_stream(MpegTSPacketizer2 *packetizer, gint16 pid); -gboolean mpegts_packetizer_push_section (MpegTSPacketizer2 *packetzer, +G_GNUC_INTERNAL gboolean mpegts_packetizer_push_section (MpegTSPacketizer2 *packetzer, MpegTSPacketizerPacket *packet, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_cat (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_cat (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_pat (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_pat (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_pmt (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_pmt (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_nit (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_nit (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_sdt (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_sdt (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_eit (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_eit (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_tdt (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_tdt (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); -GstStructure *mpegts_packetizer_parse_tot (MpegTSPacketizer2 *packetizer, +G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_tot (MpegTSPacketizer2 *packetizer, MpegTSPacketizerSection *section); /* Only valid if calculate_offset is TRUE */ -guint mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 *packetizer); +G_GNUC_INTERNAL guint mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 *packetizer); -GstClockTime +G_GNUC_INTERNAL GstClockTime mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, - guint64 offset); -guint64 + guint64 offset, guint16 pcr_pid); +G_GNUC_INTERNAL guint64 mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer, - GstClockTime ts); -GstClockTime + GstClockTime ts, guint16 pcr_pid); +G_GNUC_INTERNAL GstClockTime mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, - GstClockTime pts); -void + GstClockTime pts, guint16 pcr_pid); +G_GNUC_INTERNAL void mpegts_packetizer_set_reference_offset (MpegTSPacketizer2 * packetizer, guint64 refoffset); G_END_DECLS diff --git a/gst/mpegtsdemux/mpegtsparse.c b/gst/mpegtsdemux/mpegtsparse.c index 33391154..701de53f 100644 --- a/gst/mpegtsdemux/mpegtsparse.c +++ b/gst/mpegtsdemux/mpegtsparse.c @@ -109,6 +109,8 @@ static gboolean push_event (MpegTSBase * base, GstEvent * event); #define mpegts_parse_parent_class parent_class G_DEFINE_TYPE (MpegTSParse2, mpegts_parse, GST_TYPE_MPEGTS_BASE); static void mpegts_parse_reset (MpegTSBase * base); +static GstFlowReturn mpegts_parse_input_done (MpegTSBase * base, + GstBuffer * buffer); static void mpegts_parse_class_init (MpegTSParse2Class * klass) @@ -138,6 +140,7 @@ mpegts_parse_class_init (MpegTSParse2Class * klass) ts_class->program_started = GST_DEBUG_FUNCPTR (mpegts_parse_program_started); ts_class->program_stopped = GST_DEBUG_FUNCPTR (mpegts_parse_program_stopped); ts_class->reset = GST_DEBUG_FUNCPTR (mpegts_parse_reset); + ts_class->input_done = GST_DEBUG_FUNCPTR (mpegts_parse_input_done); } static void @@ -463,6 +466,14 @@ mpegts_parse_push (MpegTSBase * base, MpegTSPacketizerPacket * packet, return ret; } +static GstFlowReturn +mpegts_parse_input_done (MpegTSBase * base, GstBuffer * buffer) +{ + MpegTSParse2 *parse = GST_MPEGTS_PARSE (base); + + return gst_pad_push (parse->srcpad, buffer); +} + static MpegTSParsePad * find_pad_for_program (MpegTSParse2 * parse, guint program_number) { diff --git a/gst/mpegtsdemux/mpegtsparse.h b/gst/mpegtsdemux/mpegtsparse.h index c7d1c5e4..ade1b007 100644 --- a/gst/mpegtsdemux/mpegtsparse.h +++ b/gst/mpegtsdemux/mpegtsparse.h @@ -58,9 +58,9 @@ struct _MpegTSParse2Class { MpegTSBaseClass parent_class; }; -GType mpegts_parse_get_type(void); +G_GNUC_INTERNAL GType mpegts_parse_get_type(void); -gboolean gst_mpegtsparse_plugin_init (GstPlugin * plugin); +G_GNUC_INTERNAL gboolean gst_mpegtsparse_plugin_init (GstPlugin * plugin); G_END_DECLS diff --git a/gst/mpegtsdemux/pesparse.h b/gst/mpegtsdemux/pesparse.h index c5d295e3..d15e835e 100644 --- a/gst/mpegtsdemux/pesparse.h +++ b/gst/mpegtsdemux/pesparse.h @@ -105,8 +105,9 @@ typedef struct { const guint8* stream_id_extension_data; } PESHeader; -PESParsingResult mpegts_parse_pes_header (const guint8* data, gsize size, +G_GNUC_INTERNAL PESParsingResult mpegts_parse_pes_header (const guint8* data, gsize size, PESHeader *res, gint *offset); -void init_pes_parser (void); +G_GNUC_INTERNAL void init_pes_parser (void); + G_END_DECLS #endif /* __PES_PARSE_H__ */ diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index c420f0db..17c1ef0f 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -187,7 +187,7 @@ struct _TSDemuxStream /* Can also use the subpicture pads for text subtitles? */ #define SUBPICTURE_CAPS \ - GST_STATIC_CAPS ("subpicture/x-pgs; video/x-dvd-subpicture") + GST_STATIC_CAPS ("subpicture/x-pgs; subpicture/x-dvd") static GstStaticPadTemplate video_template = GST_STATIC_PAD_TEMPLATE ("video_%04x", GST_PAD_SRC, @@ -405,7 +405,8 @@ gst_ts_demux_srcpad_query (GstPad * pad, GstObject * parent, GstQuery * query) res = FALSE; else { GstClockTime dur = - mpegts_packetizer_offset_to_ts (base->packetizer, val); + mpegts_packetizer_offset_to_ts (base->packetizer, val, + demux->program->pcr_pid); if (GST_CLOCK_TIME_IS_VALID (dur)) gst_query_set_duration (query, GST_FORMAT_TIME, dur); else @@ -523,7 +524,7 @@ gst_ts_demux_do_seek (MpegTSBase * base, GstEvent * event) /* Convert start/stop to offset */ start_offset = mpegts_packetizer_ts_to_offset (base->packetizer, MAX (0, - start - SEEK_TIMESTAMP_OFFSET)); + start - SEEK_TIMESTAMP_OFFSET), demux->program->pcr_pid); if (G_UNLIKELY (start_offset == -1)) { GST_WARNING ("Couldn't convert start position to an offset"); @@ -946,7 +947,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream, case ST_PS_DVD_SUBPICTURE: template = gst_static_pad_template_get (&subpicture_template); name = g_strdup_printf ("subpicture_%04x", bstream->pid); - caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture"); + caps = gst_caps_new_empty_simple ("subpicture/x-dvd"); break; case ST_BD_PGS_SUBPICTURE: template = gst_static_pad_template_get (&subpicture_template); @@ -1131,53 +1132,6 @@ gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program) -static inline void -gst_ts_demux_record_pcr (GstTSDemux * demux, TSDemuxStream * stream, - guint64 pcr, guint64 offset) -{ - MpegTSBaseStream *bs = (MpegTSBaseStream *) stream; - - GST_LOG ("pid 0x%04x pcr:%" GST_TIME_FORMAT " at offset %" - G_GUINT64_FORMAT, bs->pid, - GST_TIME_ARGS (PCRTIME_TO_GSTTIME (pcr)), offset); - - /* FIXME : packetizer should record this */ - - if (G_UNLIKELY (demux->emit_statistics)) { - GstStructure *st; - st = gst_structure_new_id_empty (QUARK_TSDEMUX); - gst_structure_id_set (st, - QUARK_PID, G_TYPE_UINT, bs->pid, - QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_PCR, G_TYPE_UINT64, pcr, - NULL); - gst_element_post_message (GST_ELEMENT_CAST (demux), - gst_message_new_element (GST_OBJECT (demux), st)); - } -} - -static inline void -gst_ts_demux_record_opcr (GstTSDemux * demux, TSDemuxStream * stream, - guint64 opcr, guint64 offset) -{ - MpegTSBaseStream *bs = (MpegTSBaseStream *) stream; - - GST_LOG ("pid 0x%04x opcr:%" GST_TIME_FORMAT " at offset %" - G_GUINT64_FORMAT, bs->pid, - GST_TIME_ARGS (PCRTIME_TO_GSTTIME (opcr)), offset); - - /* FIXME : packetizer should record this */ - - if (G_UNLIKELY (demux->emit_statistics)) { - GstStructure *st; - st = gst_structure_new_id_empty (QUARK_TSDEMUX); - gst_structure_id_set (st, - QUARK_PID, G_TYPE_UINT, bs->pid, - QUARK_OFFSET, G_TYPE_UINT64, offset, - QUARK_OPCR, G_TYPE_UINT64, opcr, NULL); - gst_element_post_message (GST_ELEMENT_CAST (demux), - gst_message_new_element (GST_OBJECT (demux), st)); - } -} static inline void gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream, @@ -1185,6 +1139,11 @@ gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream, { MpegTSBaseStream *bs = (MpegTSBaseStream *) stream; + if (pts == -1) { + stream->pts = GST_CLOCK_TIME_NONE; + return; + } + GST_LOG ("pid 0x%04x pts:%" G_GUINT64_FORMAT " at offset %" G_GUINT64_FORMAT, bs->pid, pts, offset); @@ -1231,6 +1190,11 @@ gst_ts_demux_record_dts (GstTSDemux * demux, TSDemuxStream * stream, { MpegTSBaseStream *bs = (MpegTSBaseStream *) stream; + if (dts == -1) { + stream->dts = GST_CLOCK_TIME_NONE; + return; + } + GST_LOG ("pid 0x%04x dts:%" G_GUINT64_FORMAT " at offset %" G_GUINT64_FORMAT, bs->pid, dts, offset); @@ -1290,18 +1254,12 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream, goto discont; } - if (header.DTS != -1) - gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset); + gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset); + gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset); - if (header.PTS != -1) { - gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset); - - GST_DEBUG_OBJECT (base, - "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT, - GST_TIME_ARGS (stream->pts), - GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (header.DTS))); - - } + GST_DEBUG_OBJECT (base, + "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT, + GST_TIME_ARGS (stream->pts), GST_TIME_ARGS (stream->dts)); /* Remove PES headers */ GST_DEBUG ("Moving data forward by %d bytes (packet_size:%d, have:%d)", @@ -1434,7 +1392,9 @@ calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream) } } if (GST_CLOCK_TIME_IS_VALID (lowest_pts)) - firstts = mpegts_packetizer_pts_to_ts (base->packetizer, lowest_pts); + firstts = + mpegts_packetizer_pts_to_ts (base->packetizer, lowest_pts, + demux->program->pcr_pid); GST_DEBUG ("lowest_pts %" G_GUINT64_FORMAT " => clocktime %" GST_TIME_FORMAT, lowest_pts, GST_TIME_ARGS (firstts)); @@ -1536,14 +1496,17 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream) GST_TIME_ARGS (stream->pts)); if (GST_CLOCK_TIME_IS_VALID (stream->pts)) GST_BUFFER_PTS (buffer) = - mpegts_packetizer_pts_to_ts (packetizer, stream->pts); + mpegts_packetizer_pts_to_ts (packetizer, stream->pts, + demux->program->pcr_pid); if (GST_CLOCK_TIME_IS_VALID (stream->dts)) GST_BUFFER_DTS (buffer) = - mpegts_packetizer_pts_to_ts (packetizer, stream->dts); + mpegts_packetizer_pts_to_ts (packetizer, stream->dts, + demux->program->pcr_pid); GST_DEBUG_OBJECT (stream->pad, - "Pushing buffer with timestamp: %" GST_TIME_FORMAT, - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer))); + "Pushing buffer with PTS: %" GST_TIME_FORMAT " , DTS: %" GST_TIME_FORMAT, + GST_TIME_ARGS (GST_BUFFER_PTS (buffer)), + GST_TIME_ARGS (GST_BUFFER_DTS (buffer))); res = gst_pad_push (stream->pad, buffer); GST_DEBUG_OBJECT (stream->pad, "Returned %s", gst_flow_get_name (res)); @@ -1583,13 +1546,6 @@ gst_ts_demux_handle_packet (GstTSDemux * demux, TSDemuxStream * stream, /* Flush previous data */ res = gst_ts_demux_push_pending_data (demux, stream); - if (packet->adaptation_field_control & 0x2) { - if (packet->afc_flags & MPEGTS_AFC_PCR_FLAG) - gst_ts_demux_record_pcr (demux, stream, packet->pcr, packet->offset); - if (packet->afc_flags & MPEGTS_AFC_OPCR_FLAG) - gst_ts_demux_record_opcr (demux, stream, packet->opcr, packet->offset); - } - if (packet->payload && (res == GST_FLOW_OK || res == GST_FLOW_NOT_LINKED) && stream->pad) { gst_ts_demux_queue_data (demux, stream, packet); diff --git a/gst/mpegtsdemux/tsdemux.h b/gst/mpegtsdemux/tsdemux.h index d23e9d2e..df19df83 100644 --- a/gst/mpegtsdemux/tsdemux.h +++ b/gst/mpegtsdemux/tsdemux.h @@ -80,9 +80,9 @@ struct _GstTSDemuxClass MpegTSBaseClass parent_class; }; -GType gst_ts_demux_get_type (void); +G_GNUC_INTERNAL GType gst_ts_demux_get_type (void); -gboolean gst_ts_demux_plugin_init (GstPlugin * plugin); +G_GNUC_INTERNAL gboolean gst_ts_demux_plugin_init (GstPlugin * plugin); G_END_DECLS #endif /* GST_TS_DEMUX_H */ diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in index fa7914b7..c1244686 100644 --- a/gst/mpegtsmux/Makefile.in +++ b/gst/mpegtsmux/Makefile.in @@ -383,6 +383,8 @@ 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@ @@ -390,6 +392,8 @@ 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@ @@ -404,7 +408,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -432,6 +435,10 @@ 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@ @@ -558,6 +565,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c index 957e2975..3b897b2f 100644 --- a/gst/mpegtsmux/mpegtsmux.c +++ b/gst/mpegtsmux/mpegtsmux.c @@ -1218,7 +1218,7 @@ mpegtsmux_request_new_pad (GstElement * element, GstPadTemplate * templ, g_free (pad_name); pad_data = (MpegTsPadData *) - gst_collect_pads_add_pad_full (mux->collect, pad, sizeof (MpegTsPadData), + gst_collect_pads_add_pad (mux->collect, pad, sizeof (MpegTsPadData), (GstCollectDataDestroyNotify) (mpegtsmux_pad_reset), TRUE); if (pad_data == NULL) goto pad_failure; diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in index 4b8e74a5..37672f9b 100644 --- a/gst/mpegtsmux/tsmux/Makefile.in +++ b/gst/mpegtsmux/tsmux/Makefile.in @@ -312,6 +312,8 @@ 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@ @@ -319,6 +321,8 @@ 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@ @@ -333,7 +337,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -361,6 +364,10 @@ 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@ @@ -487,6 +494,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in index dc8127af..8f3e0b69 100644 --- a/gst/mve/Makefile.in +++ b/gst/mve/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in index b7143332..fa553c1e 100644 --- a/gst/mxf/Makefile.in +++ b/gst/mxf/Makefile.in @@ -349,6 +349,8 @@ 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@ @@ -356,6 +358,8 @@ 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@ @@ -370,7 +374,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -398,6 +401,10 @@ 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@ @@ -524,6 +531,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c index 7d215676..260c8850 100644 --- a/gst/mxf/mxfmux.c +++ b/gst/mxf/mxfmux.c @@ -338,13 +338,13 @@ gst_mxf_mux_setcaps (GstPad * pad, GstCaps * caps) for (i = 0; i < mux->preface->content_storage->n_packages; i++) { MXFMetadataSourcePackage *package; - if (!MXF_IS_METADATA_SOURCE_PACKAGE (mux->preface-> - content_storage->packages[i])) + if (!MXF_IS_METADATA_SOURCE_PACKAGE (mux->preface->content_storage-> + packages[i])) continue; package = - MXF_METADATA_SOURCE_PACKAGE (mux->preface-> - content_storage->packages[i]); + MXF_METADATA_SOURCE_PACKAGE (mux->preface->content_storage-> + packages[i]); if (!package->descriptor) continue; @@ -420,7 +420,8 @@ gst_mxf_mux_request_new_pad (GstElement * element, pad = gst_pad_new_from_template (templ, name); g_free (name); cpad = (GstMXFMuxPad *) - gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstMXFMuxPad)); + gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstMXFMuxPad), NULL, + TRUE); cpad->last_timestamp = 0; cpad->adapter = gst_adapter_new (); cpad->writer = writer; @@ -706,8 +707,8 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux) if (p->parent.n_tracks == 1) { p->descriptor = (MXFMetadataGenericDescriptor *) cpad->descriptor; } else { - MXF_METADATA_MULTIPLE_DESCRIPTOR (p-> - descriptor)->sub_descriptors[n] = + MXF_METADATA_MULTIPLE_DESCRIPTOR (p->descriptor)-> + sub_descriptors[n] = (MXFMetadataGenericDescriptor *) cpad->descriptor; } @@ -929,8 +930,8 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux) g_new0 (MXFMetadataEssenceContainerData *, 1); cstorage->essence_container_data[0] = (MXFMetadataEssenceContainerData *) g_object_new (MXF_TYPE_METADATA_ESSENCE_CONTAINER_DATA, NULL); - mxf_uuid_init (&MXF_METADATA_BASE (cstorage->essence_container_data[0])-> - instance_uid, mux->metadata); + mxf_uuid_init (&MXF_METADATA_BASE (cstorage-> + essence_container_data[0])->instance_uid, mux->metadata); g_hash_table_insert (mux->metadata, &MXF_METADATA_BASE (cstorage->essence_container_data[0])->instance_uid, cstorage->essence_container_data[0]); @@ -1246,23 +1247,22 @@ gst_mxf_mux_handle_eos (GstMXFMux * mux) /* Update durations */ cpad->source_track->parent.sequence->duration = cpad->pos; - MXF_METADATA_SOURCE_CLIP (cpad->source_track->parent. - sequence->structural_components[0])->parent.duration = cpad->pos; + MXF_METADATA_SOURCE_CLIP (cpad->source_track->parent.sequence-> + structural_components[0])->parent.duration = cpad->pos; for (i = 0; i < mux->preface->content_storage->packages[0]->n_tracks; i++) { MXFMetadataTimelineTrack *track; - if (!MXF_IS_METADATA_TIMELINE_TRACK (mux->preface-> - content_storage->packages[0]->tracks[i]) - || !MXF_IS_METADATA_SOURCE_CLIP (mux->preface-> - content_storage->packages[0]->tracks[i]->sequence-> - structural_components[0])) + if (!MXF_IS_METADATA_TIMELINE_TRACK (mux->preface->content_storage-> + packages[0]->tracks[i]) + || !MXF_IS_METADATA_SOURCE_CLIP (mux->preface->content_storage-> + packages[0]->tracks[i]->sequence->structural_components[0])) continue; track = - MXF_METADATA_TIMELINE_TRACK (mux->preface-> - content_storage->packages[0]->tracks[i]); - if (MXF_METADATA_SOURCE_CLIP (track->parent. - sequence->structural_components[0])->source_track_id == + MXF_METADATA_TIMELINE_TRACK (mux->preface->content_storage-> + packages[0]->tracks[i]); + if (MXF_METADATA_SOURCE_CLIP (track->parent.sequence-> + structural_components[0])->source_track_id == cpad->source_track->parent.track_id) { track->parent.sequence->structural_components[0]->duration = cpad->pos; track->parent.sequence->duration = cpad->pos; @@ -1273,8 +1273,8 @@ gst_mxf_mux_handle_eos (GstMXFMux * mux) /* Update timecode track duration */ { MXFMetadataTimelineTrack *track = - MXF_METADATA_TIMELINE_TRACK (mux->preface-> - content_storage->packages[0]->tracks[0]); + MXF_METADATA_TIMELINE_TRACK (mux->preface->content_storage-> + packages[0]->tracks[0]); MXFMetadataSequence *sequence = track->parent.sequence; MXFMetadataTimecodeComponent *component = MXF_METADATA_TIMECODE_COMPONENT (sequence->structural_components[0]); diff --git a/gst/nsf/Makefile.in b/gst/nsf/Makefile.in index 6eb78ca3..88c3c05a 100644 --- a/gst/nsf/Makefile.in +++ b/gst/nsf/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in index 92a27644..16cc8ee3 100644 --- a/gst/nuvdemux/Makefile.in +++ b/gst/nuvdemux/Makefile.in @@ -340,6 +340,8 @@ 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@ @@ -347,6 +349,8 @@ 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@ @@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -389,6 +392,10 @@ 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@ @@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in index 453fe712..edc45308 100644 --- a/gst/patchdetect/Makefile.in +++ b/gst/patchdetect/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in index d092c5c1..2a286bb9 100644 --- a/gst/pcapparse/Makefile.in +++ b/gst/pcapparse/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in index 7f136363..0eff310d 100644 --- a/gst/pnm/Makefile.in +++ b/gst/pnm/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c index 394e86d1..56dcb8e3 100644 --- a/gst/pnm/gstpnmdec.c +++ b/gst/pnm/gstpnmdec.c @@ -30,6 +30,10 @@ * </refsect2> */ +/* + * FIXME: Port to GstVideoDecoder + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -44,16 +48,14 @@ static GstStaticPadTemplate gst_pnmdec_src_pad_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; " - "video/x-raw-gray, width =" GST_VIDEO_SIZE_RANGE ", " - "height =" GST_VIDEO_SIZE_RANGE ", framerate =" GST_VIDEO_FPS_RANGE ", " - "bpp= (int) 8, depth= (int) 8")); + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB") "; " + GST_VIDEO_CAPS_MAKE ("GRAY8"))); static GstStaticPadTemplate gst_pnmdec_sink_pad_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (MIME_ALL)); -GST_BOILERPLATE (GstPnmdec, gst_pnmdec, GstElement, GST_TYPE_ELEMENT); +G_DEFINE_TYPE (GstPnmdec, gst_pnmdec, GST_TYPE_ELEMENT); static GstFlowReturn gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf) @@ -64,6 +66,7 @@ gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf) guint o_rowstride; GstBuffer *obuf; guint i; + GstMapInfo imap, omap; if (s->mngr.info.type == GST_PNM_TYPE_PIXMAP) { i_rowstride = 3 * s->mngr.info.width; @@ -75,12 +78,15 @@ gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf) obuf = gst_buffer_new_and_alloc (o_rowstride * s->mngr.info.height); - gst_buffer_copy_metadata (obuf, buf, GST_BUFFER_COPY_ALL); + gst_buffer_copy_into (obuf, buf, GST_BUFFER_COPY_METADATA, 0, 0); + gst_buffer_map (obuf, &omap, GST_MAP_WRITE); + gst_buffer_map (buf, &imap, GST_MAP_READ); for (i = 0; i < s->mngr.info.height; i++) - memcpy (GST_BUFFER_DATA (obuf) + i * o_rowstride, - GST_BUFFER_DATA (buf) + i * i_rowstride, i_rowstride); - + memcpy (omap.data + i * o_rowstride, imap.data + i * i_rowstride, + i_rowstride); + gst_buffer_unmap (buf, &imap); + gst_buffer_unmap (obuf, &omap); gst_buffer_unref (buf); return gst_pad_push (src, obuf); } else { @@ -95,10 +101,9 @@ gst_pnmdec_chain_raw (GstPnmdec * s, GstPad * src, GstBuffer * buf) GstBuffer *out; /* If we got the whole image, just push the buffer. */ - if (GST_BUFFER_SIZE (buf) == s->size) { + if (gst_buffer_get_size (buf) == s->size) { memset (&s->mngr, 0, sizeof (GstPnmInfoMngr)); s->size = 0; - gst_buffer_set_caps (buf, GST_PAD_CAPS (src)); return gst_pnmdec_push (s, src, buf); } @@ -106,18 +111,14 @@ gst_pnmdec_chain_raw (GstPnmdec * s, GstPad * src, GstBuffer * buf) if (!s->buf) { s->buf = buf; } else { - out = gst_buffer_span (s->buf, 0, buf, - GST_BUFFER_SIZE (s->buf) + GST_BUFFER_SIZE (buf)); - gst_buffer_unref (buf); - gst_buffer_unref (s->buf); + out = gst_buffer_append (s->buf, buf); s->buf = out; } if (!s->buf) return GST_FLOW_ERROR; /* Do we now have the full image? If yes, push. */ - if (GST_BUFFER_SIZE (s->buf) == s->size) { - gst_buffer_set_caps (s->buf, GST_PAD_CAPS (src)); + if (gst_buffer_get_size (s->buf) == s->size) { r = gst_pnmdec_push (s, src, s->buf); s->buf = NULL; memset (&s->mngr, 0, sizeof (GstPnmInfoMngr)); @@ -133,35 +134,40 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf) GScanner *scanner; GstBuffer *out; guint i = 0; - gchar *b = (gchar *) GST_BUFFER_DATA (buf); - guint bs = GST_BUFFER_SIZE (buf); - guint target = s->size - (s->buf ? GST_BUFFER_SIZE (s->buf) : 0); + gchar *b; + guint bs; + guint target; + GstMapInfo map; + GstMapInfo outmap; - if (!bs) { - gst_buffer_unref (buf); - return GST_FLOW_OK; - } + gst_buffer_map (buf, &map, GST_MAP_READ); + b = (gchar *) map.data; + bs = map.size; + target = s->size - (s->buf ? map.size : 0); + + if (!bs) + goto drop_ok; if (s->last_byte) { while (*b >= '0' && *b <= '9') { s->last_byte = 10 * s->last_byte + *b - '0'; b++; if (!--bs) { - gst_buffer_unref (buf); - return GST_FLOW_OK; + goto drop_error; } } if (s->last_byte > 255) { - gst_buffer_unref (buf); GST_DEBUG_OBJECT (s, "Corrupt ASCII encoded PNM file."); - return GST_FLOW_ERROR; + goto drop_error; } } out = gst_buffer_new_and_alloc (target); + gst_buffer_map (out, &outmap, GST_MAP_READWRITE); + if (s->last_byte) { - GST_BUFFER_DATA (out)[i++] = s->last_byte; + outmap.data[i++] = s->last_byte; s->last_byte = 0; } @@ -172,11 +178,11 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf) case G_TOKEN_INT: if (i == target) { GST_DEBUG_OBJECT (s, "PNM file contains too much data."); - gst_buffer_unref (buf); + gst_buffer_unmap (out, &outmap); gst_buffer_unref (out); - return GST_FLOW_ERROR; + goto drop_error; } - GST_BUFFER_DATA (out)[i++] = scanner->value.v_int; + outmap.data[i++] = scanner->value.v_int; break; default: /* Should we care? */ ; @@ -186,30 +192,47 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf) /* If we didn't get the whole image, handle the last byte with care. */ if (i && i < target && b[bs - 1] > '0' && b[bs - 1] <= '9') - s->last_byte = GST_BUFFER_DATA (out)[--i]; + s->last_byte = outmap.data[--i]; + gst_buffer_unmap (buf, &map); gst_buffer_unref (buf); if (!i) { gst_buffer_unref (out); return GST_FLOW_OK; } - GST_BUFFER_SIZE (out) = i; + gst_buffer_set_size (out, i); return gst_pnmdec_chain_raw (s, src, out); + +drop_ok: + gst_buffer_unmap (buf, &map); + gst_buffer_unref (buf); + return GST_FLOW_OK; + +drop_error: + gst_buffer_unmap (buf, &map); + gst_buffer_unref (buf); + return GST_FLOW_ERROR; } static GstFlowReturn -gst_pnmdec_chain (GstPad * pad, GstBuffer * data) +gst_pnmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * data) { - GstPnmdec *s = GST_PNMDEC (gst_pad_get_parent (pad)); + GstPnmdec *s = GST_PNMDEC (parent); GstPad *src = gst_element_get_static_pad (GST_ELEMENT (s), "src"); GstCaps *caps = NULL; GstFlowReturn r = GST_FLOW_OK; guint offset = 0; if (s->mngr.info.fields != GST_PNM_INFO_FIELDS_ALL) { - switch (gst_pnm_info_mngr_scan (&s->mngr, GST_BUFFER_DATA (data), - GST_BUFFER_SIZE (data))) { + GstMapInfo map; + GstPnmInfoMngrResult res; + + gst_buffer_map (data, &map, GST_MAP_READ); + res = gst_pnm_info_mngr_scan (&s->mngr, map.data, map.size); + gst_buffer_unmap (data, &map); + + switch (res) { case GST_PNM_INFO_MNGR_RESULT_FAILED: gst_buffer_unref (data); r = GST_FLOW_ERROR; @@ -251,15 +274,15 @@ gst_pnmdec_chain (GstPad * pad, GstBuffer * data) } } - if (offset == GST_BUFFER_SIZE (data)) { + if (offset == gst_buffer_get_size (data)) { gst_buffer_unref (data); r = GST_FLOW_OK; goto out; } if (offset) { - GstBuffer *buf = gst_buffer_create_sub (data, offset, - GST_BUFFER_SIZE (data) - offset); + GstBuffer *buf = gst_buffer_copy_region (data, GST_BUFFER_COPY_ALL, offset, + gst_buffer_get_size (data) - offset); gst_buffer_unref (data); data = buf; } @@ -271,7 +294,6 @@ gst_pnmdec_chain (GstPad * pad, GstBuffer * data) out: gst_object_unref (src); - gst_object_unref (s); return r; } @@ -286,11 +308,11 @@ gst_pnmdec_finalize (GObject * object) dec->buf = NULL; } - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (gst_pnmdec_parent_class)->finalize (object); } static void -gst_pnmdec_init (GstPnmdec * s, GstPnmdecClass * klass) +gst_pnmdec_init (GstPnmdec * s) { GstPad *pad; @@ -304,9 +326,10 @@ gst_pnmdec_init (GstPnmdec * s, GstPnmdecClass * klass) } static void -gst_pnmdec_base_init (gpointer g_class) +gst_pnmdec_class_init (GstPnmdecClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = (GObjectClass *) klass; + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&gst_pnmdec_sink_pad_template)); @@ -316,14 +339,6 @@ gst_pnmdec_base_init (gpointer g_class) "Codec/Decoder/Image", "Decodes images in portable pixmap/graymap/bitmap/anymamp (PNM) format", "Lutz Mueller <lutz@users.sourceforge.net>"); -} - -static void -gst_pnmdec_class_init (GstPnmdecClass * klass) -{ - GObjectClass *gobject_class = (GObjectClass *) klass; - - parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = gst_pnmdec_finalize; } diff --git a/gst/pnm/gstpnmdec.h b/gst/pnm/gstpnmdec.h index edcb11e3..5f173740 100644 --- a/gst/pnm/gstpnmdec.h +++ b/gst/pnm/gstpnmdec.h @@ -20,7 +20,7 @@ #ifndef __GST_PNMDEC_H__ #define __GST_PNMDEC_H__ -#include <gst/gstelement.h> +#include <gst/gst.h> #include "gstpnmutils.h" diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c index 53bd4a3f..02490c20 100644 --- a/gst/pnm/gstpnmenc.c +++ b/gst/pnm/gstpnmenc.c @@ -32,6 +32,10 @@ * </refsect2> */ +/* + * FIXME: Port to GstVideoEncoder + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -53,16 +57,15 @@ enum static GstStaticPadTemplate sink_pad_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; " - "video/x-raw-gray, width =" GST_VIDEO_SIZE_RANGE ", " - "height =" GST_VIDEO_SIZE_RANGE ", framerate =" GST_VIDEO_FPS_RANGE ", " - "bpp= (int) 8, depth= (int) 8")); + GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB") "; " + GST_VIDEO_CAPS_MAKE ("GRAY8"))); + static GstStaticPadTemplate src_pad_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (MIME_ALL)); -GST_BOILERPLATE (GstPnmenc, gst_pnmenc, GstElement, GST_TYPE_ELEMENT); +G_DEFINE_TYPE (GstPnmenc, gst_pnmenc, GST_TYPE_ELEMENT); static void gst_pnmenc_set_property (GObject * object, guint prop_id, const GValue * value, @@ -101,9 +104,9 @@ gst_pnmenc_get_property (GObject * object, guint prop_id, GValue * value, } static GstFlowReturn -gst_pnmenc_chain (GstPad * pad, GstBuffer * buf) +gst_pnmenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) { - GstPnmenc *s = GST_PNMENC (gst_pad_get_parent (pad)); + GstPnmenc *s = GST_PNMENC (parent); GstFlowReturn r; gchar *header; GstBuffer *out; @@ -112,9 +115,7 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf) header = g_strdup_printf ("P%i\n%i %i\n%i\n", s->info.type + 3 * (1 - s->info.encoding), s->info.width, s->info.height, s->info.max); - out = gst_buffer_new (); - gst_buffer_set_data (out, (guchar *) header, strlen (header)); - gst_buffer_set_caps (out, GST_PAD_CAPS (s->src)); + out = gst_buffer_new_wrapped (header, strlen (header)); if ((r = gst_pad_push (s->src, out)) != GST_FLOW_OK) goto out; @@ -124,6 +125,7 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf) guint o_rowstride; GstBuffer *obuf; guint i; + GstMapInfo imap, omap; if (s->info.type == GST_PNM_TYPE_PIXMAP) { o_rowstride = 3 * s->info.width; @@ -134,91 +136,114 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf) } obuf = gst_buffer_new_and_alloc (o_rowstride * s->info.height); + gst_buffer_map (obuf, &omap, GST_MAP_WRITE); + gst_buffer_map (buf, &imap, GST_MAP_READ); for (i = 0; i < s->info.height; i++) - memcpy (GST_BUFFER_DATA (obuf) + o_rowstride * i, - GST_BUFFER_DATA (buf) + i_rowstride * i, o_rowstride); + memcpy (omap.data + o_rowstride * i, imap.data + i_rowstride * i, + o_rowstride); + gst_buffer_unmap (buf, &imap); + gst_buffer_unmap (obuf, &omap); gst_buffer_unref (buf); buf = obuf; } else { /* Pass through the data. */ - buf = gst_buffer_make_metadata_writable (buf); + buf = gst_buffer_make_writable (buf); } /* We might need to convert to ASCII... */ if (s->info.encoding == GST_PNM_ENCODING_ASCII) { GstBuffer *obuf; guint i, o; + GstMapInfo imap, omap; - obuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (buf) * (4 + 1 / 20.)); - for (i = o = 0; i < GST_BUFFER_SIZE (buf); i++) { - g_snprintf ((char *) GST_BUFFER_DATA (obuf) + o, 4, "%3i", - GST_BUFFER_DATA (buf)[i]); + gst_buffer_map (buf, &imap, GST_MAP_READ); + obuf = gst_buffer_new_and_alloc (imap.size * (4 + 1 / 20.)); + gst_buffer_map (obuf, &omap, GST_MAP_WRITE); + for (i = o = 0; i < imap.size; i++) { + g_snprintf ((char *) omap.data + o, 4, "%3i", imap.data[i]); o += 3; - GST_BUFFER_DATA (obuf)[o++] = ' '; + omap.data[o++] = ' '; if (!((i + 1) % 20)) - GST_BUFFER_DATA (obuf)[o++] = '\n'; + omap.data[o++] = '\n'; } + gst_buffer_unmap (buf, &imap); + gst_buffer_unmap (obuf, &omap); gst_buffer_unref (buf); buf = obuf; } - gst_buffer_set_caps (buf, GST_PAD_CAPS (s->src)); r = gst_pad_push (s->src, buf); out: - gst_object_unref (s); return r; } static gboolean -gst_pnmenc_setcaps_func_sink (GstPad * pad, GstCaps * caps) +gst_pnmenc_setcaps (GstPnmenc * s, GstCaps * caps) { - GstPnmenc *s = GST_PNMENC (gst_pad_get_parent (pad)); - GstStructure *structure = gst_caps_get_structure (caps, 0); - const gchar *mime = gst_structure_get_name (structure); - gboolean r = TRUE; + gboolean r; GstCaps *srccaps; s->info.max = 255; s->info.fields = GST_PNM_INFO_FIELDS_MAX; - /* Set caps on the source. */ - if (!strcmp (mime, "video/x-raw-rgb")) { + if (!gst_video_info_from_caps (&s->vinfo, caps)) + return FALSE; + + if (GST_VIDEO_INFO_IS_RGB (&s->vinfo)) { s->info.type = GST_PNM_TYPE_PIXMAP; srccaps = gst_caps_from_string (MIME_PM); - } else if (!strcmp (mime, "video/x-raw-gray")) { + } else if (GST_VIDEO_INFO_IS_GRAY (&s->vinfo)) { s->info.type = GST_PNM_TYPE_GRAYMAP; srccaps = gst_caps_from_string (MIME_GM); } else { - r = FALSE; - goto out; + return FALSE; } - gst_pad_set_caps (s->src, srccaps); + r = gst_pad_set_caps (s->src, srccaps); gst_caps_unref (srccaps); s->info.fields |= GST_PNM_INFO_FIELDS_TYPE; /* Remember width and height of the input data. */ - if (!gst_structure_get_int (structure, "width", (int *) &s->info.width) || - !gst_structure_get_int (structure, "height", (int *) &s->info.height)) { - r = FALSE; - goto out; - } + s->info.width = GST_VIDEO_INFO_WIDTH (&s->vinfo); + s->info.height = GST_VIDEO_INFO_HEIGHT (&s->vinfo); s->info.fields |= GST_PNM_INFO_FIELDS_WIDTH | GST_PNM_INFO_FIELDS_HEIGHT; -out: - gst_object_unref (s); + return r; +} + +static gboolean +gst_pnmenc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) +{ + GstPnmenc *s = GST_PNMENC (parent); + gboolean r = FALSE; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_CAPS: + { + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + r = gst_pnmenc_setcaps (s, caps); + gst_event_unref (event); + break; + } + default: + r = gst_pad_event_default (pad, parent, event); + break; + } + return r; } static void -gst_pnmenc_init (GstPnmenc * s, GstPnmencClass * klass) +gst_pnmenc_init (GstPnmenc * s) { GstPad *pad; pad = gst_pad_new_from_static_template (&sink_pad_template, "sink"); - gst_pad_set_setcaps_function (pad, gst_pnmenc_setcaps_func_sink); gst_pad_set_chain_function (pad, gst_pnmenc_chain); + gst_pad_set_event_function (pad, gst_pnmenc_sink_event); gst_pad_use_fixed_caps (pad); gst_element_add_pad (GST_ELEMENT (s), pad); @@ -227,9 +252,10 @@ gst_pnmenc_init (GstPnmenc * s, GstPnmencClass * klass) } static void -gst_pnmenc_base_init (gpointer g_class) +gst_pnmenc_class_init (GstPnmencClass * klass) { - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GstElementClass *element_class = GST_ELEMENT_CLASS (klass); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&sink_pad_template)); @@ -239,12 +265,6 @@ gst_pnmenc_base_init (gpointer g_class) "Codec/Encoder/Image", "Encodes images into portable pixmap or graymap (PNM) format", "Lutz Mueller <lutz@users.sourceforge.net>"); -} - -static void -gst_pnmenc_class_init (GstPnmencClass * klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->set_property = gst_pnmenc_set_property; gobject_class->get_property = gst_pnmenc_get_property; diff --git a/gst/pnm/gstpnmenc.h b/gst/pnm/gstpnmenc.h index e3748601..aa8b1018 100644 --- a/gst/pnm/gstpnmenc.h +++ b/gst/pnm/gstpnmenc.h @@ -20,7 +20,8 @@ #ifndef __GST_PNMENC_H__ #define __GST_PNMENC_H__ -#include <gst/gstelement.h> +#include <gst/gst.h> +#include <gst/video/video.h> #include "gstpnmutils.h" @@ -39,6 +40,7 @@ struct _GstPnmenc { GstElement element; + GstVideoInfo vinfo; GstPnmInfo info; GstPad *src; diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in index 333db57b..1af84f05 100644 --- a/gst/rawparse/Makefile.in +++ b/gst/rawparse/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c index 2e3765cb..f315d5ed 100644 --- a/gst/rawparse/gstrawparse.c +++ b/gst/rawparse/gstrawparse.c @@ -461,7 +461,8 @@ gst_raw_parse_sink_activate (GstPad * sinkpad, GstObject * parent) query = gst_query_new_scheduling (); if (gst_pad_peer_query (sinkpad, query)) - pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL); + pull_mode = gst_query_has_scheduling_mode_with_flags (query, + GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE); gst_query_unref (query); diff --git a/gst/real/Makefile.in b/gst/real/Makefile.in index c89593a8..1818a93b 100644 --- a/gst/real/Makefile.in +++ b/gst/real/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in index 509766a3..167514af 100644 --- a/gst/removesilence/Makefile.in +++ b/gst/removesilence/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/rtpmux/Makefile.in b/gst/rtpmux/Makefile.in index 2d2e5217..c39488f1 100644 --- a/gst/rtpmux/Makefile.in +++ b/gst/rtpmux/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c index 7f69957d..c68fe522 100644 --- a/gst/rtpmux/gstrtpmux.c +++ b/gst/rtpmux/gstrtpmux.c @@ -452,7 +452,14 @@ resend_events (GstPad * pad, GstEvent ** event, gpointer user_data) { GstRTPMux *rtp_mux = user_data; - gst_pad_push_event (rtp_mux->srcpad, gst_event_ref (*event)); + if (GST_EVENT_TYPE (*event) == GST_EVENT_CAPS) { + GstCaps *caps; + + gst_event_parse_caps (*event, &caps); + gst_rtp_mux_setcaps (pad, rtp_mux, caps); + } else { + gst_pad_push_event (rtp_mux->srcpad, gst_event_ref (*event)); + } return TRUE; } @@ -836,23 +843,30 @@ static GstStateChangeReturn gst_rtp_mux_change_state (GstElement * element, GstStateChange transition) { GstRTPMux *rtp_mux; + GstStateChangeReturn ret; rtp_mux = GST_RTP_MUX (element); switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: - break; case GST_STATE_CHANGE_READY_TO_PAUSED: gst_rtp_mux_ready_to_paused (rtp_mux); break; + default: + break; + } + + ret = GST_ELEMENT_CLASS (gst_rtp_mux_parent_class)->change_state (element, + transition); + + switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: + g_clear_object (&rtp_mux->last_pad); break; default: break; } - return GST_ELEMENT_CLASS (gst_rtp_mux_parent_class)->change_state (element, - transition); + return ret; } gboolean diff --git a/gst/rtpvp8/Makefile.in b/gst/rtpvp8/Makefile.in index f8c9e346..377445d7 100644 --- a/gst/rtpvp8/Makefile.in +++ b/gst/rtpvp8/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/scaletempo/Makefile.in b/gst/scaletempo/Makefile.in index a459982e..3b4c141e 100644 --- a/gst/scaletempo/Makefile.in +++ b/gst/scaletempo/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in index 611df7fc..4fa90273 100644 --- a/gst/sdi/Makefile.in +++ b/gst/sdi/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in index 0b6f1f08..7b0135f3 100644 --- a/gst/sdp/Makefile.in +++ b/gst/sdp/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in index 95f4560f..a978913f 100644 --- a/gst/segmentclip/Makefile.in +++ b/gst/segmentclip/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/segmentclip/gstsegmentclip.c b/gst/segmentclip/gstsegmentclip.c index c09a7229..5e09152b 100644 --- a/gst/segmentclip/gstsegmentclip.c +++ b/gst/segmentclip/gstsegmentclip.c @@ -104,8 +104,6 @@ gst_segment_clip_init (GstSegmentClip * self, GstSegmentClipClass * g_class) GST_PAD_SET_PROXY_ALLOCATION (self->sinkpad); gst_element_add_pad (GST_ELEMENT (self), self->sinkpad); - gst_object_unref (templ); - templ = gst_element_class_get_pad_template (element_class, "src"); g_assert (templ); diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in index 867df94a..c7f05fec 100644 --- a/gst/siren/Makefile.in +++ b/gst/siren/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c index 9dd12c35..113b0f64 100644 --- a/gst/siren/gstsirendec.c +++ b/gst/siren/gstsirendec.c @@ -50,25 +50,9 @@ static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "width = (int) 16, " - "depth = (int) 16, " - "endianness = (int) 1234, " - "signed = (boolean) true, " + GST_STATIC_CAPS ("audio/x-raw, format = (string) \"S16LE\", " "rate = (int) 16000, " "channels = (int) 1")); -/* signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; - -enum -{ - ARG_0, -}; - static gboolean gst_siren_dec_start (GstAudioDecoder * dec); static gboolean gst_siren_dec_stop (GstAudioDecoder * dec); static gboolean gst_siren_dec_set_format (GstAudioDecoder * dec, @@ -78,19 +62,16 @@ static gboolean gst_siren_dec_parse (GstAudioDecoder * dec, static GstFlowReturn gst_siren_dec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer); -static void -_do_init (GType type) -{ - GST_DEBUG_CATEGORY_INIT (sirendec_debug, "sirendec", 0, "sirendec"); -} -GST_BOILERPLATE_FULL (GstSirenDec, gst_siren_dec, GstAudioDecoder, - GST_TYPE_AUDIO_DECODER, _do_init); +G_DEFINE_TYPE (GstSirenDec, gst_siren_dec, GST_TYPE_AUDIO_DECODER); static void -gst_siren_dec_base_init (gpointer klass) +gst_siren_dec_class_init (GstSirenDecClass * klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (sirendec_debug, "sirendec", 0, "sirendec"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); @@ -101,14 +82,6 @@ gst_siren_dec_base_init (gpointer klass) "Codec/Decoder/Audio ", "Decode streams encoded with the Siren7 codec into 16bit PCM", "Youness Alaoui <kakaroto@kakaroto.homelinux.net>"); -} - -static void -gst_siren_dec_class_init (GstSirenDecClass * klass) -{ - GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass); - - GST_DEBUG ("Initializing Class"); base_class->start = GST_DEBUG_FUNCPTR (gst_siren_dec_start); base_class->stop = GST_DEBUG_FUNCPTR (gst_siren_dec_stop); @@ -120,7 +93,7 @@ gst_siren_dec_class_init (GstSirenDecClass * klass) } static void -gst_siren_dec_init (GstSirenDec * dec, GstSirenDecClass * klass) +gst_siren_dec_init (GstSirenDec * dec) { } @@ -152,26 +125,13 @@ gst_siren_dec_stop (GstAudioDecoder * dec) } static gboolean -gst_siren_dec_negotiate (GstSirenDec * dec) -{ - gboolean res; - GstCaps *outcaps; - - outcaps = gst_static_pad_template_get_caps (&srctemplate); - res = gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec), outcaps); - gst_caps_unref (outcaps); - - return res; -} - -static gboolean gst_siren_dec_set_format (GstAudioDecoder * bdec, GstCaps * caps) { - GstSirenDec *dec; - - dec = GST_SIREN_DEC (bdec); + GstAudioInfo info; - return gst_siren_dec_negotiate (dec); + gst_audio_info_init (&info); + gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S16LE, 16000, 1, NULL); + return gst_audio_decoder_set_output_format (bdec, &info); } static GstFlowReturn @@ -190,7 +150,7 @@ gst_siren_dec_parse (GstAudioDecoder * dec, GstAdapter * adapter, *offset = 0; *length = size - (size % 40); } else { - ret = GST_FLOW_UNEXPECTED; + ret = GST_FLOW_EOS; } return ret; @@ -206,10 +166,11 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf) guint i, size, num_frames; gint out_size, in_size; gint decode_ret; + GstMapInfo inmap, outmap; dec = GST_SIREN_DEC (bdec); - size = GST_BUFFER_SIZE (buf); + size = gst_buffer_get_size (buf); GST_LOG_OBJECT (dec, "Received buffer of size %u", size); @@ -226,20 +187,16 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf) GST_LOG_OBJECT (dec, "we have %u frames, %u in, %u out", num_frames, in_size, out_size); - /* allow and handle un-negotiated input */ - if (G_UNLIKELY (GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (dec)) == NULL)) { - gst_siren_dec_negotiate (dec); - } - - /* get a buffer */ - ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec), -1, - out_size, GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (dec)), &out_buf); - if (ret != GST_FLOW_OK) + out_buf = gst_audio_decoder_allocate_output_buffer (bdec, out_size); + if (out_buf == NULL) goto alloc_failed; /* get the input data for all the frames */ - in_data = GST_BUFFER_DATA (buf); - out_data = GST_BUFFER_DATA (out_buf); + gst_buffer_map (buf, &inmap, GST_MAP_READ); + gst_buffer_map (out_buf, &outmap, GST_MAP_WRITE); + + in_data = inmap.data; + out_data = outmap.data; for (i = 0; i < num_frames; i++) { GST_LOG_OBJECT (dec, "Decoding frame %u/%u", i, num_frames); @@ -254,6 +211,9 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf) in_data += 40; } + gst_buffer_unmap (buf, &inmap); + gst_buffer_unmap (out_buf, &outmap); + GST_LOG_OBJECT (dec, "Finished decoding"); /* might really be multiple frames, diff --git a/gst/siren/gstsirenenc.c b/gst/siren/gstsirenenc.c index 6bcf2056..c3cb3e7d 100644 --- a/gst/siren/gstsirenenc.c +++ b/gst/siren/gstsirenenc.c @@ -50,25 +50,9 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("audio/x-raw-int, " - "width = (int) 16, " - "depth = (int) 16, " - "endianness = (int) 1234, " - "signed = (boolean) true, " + GST_STATIC_CAPS ("audio/x-raw, format = (string) \"S16LE\", " "rate = (int) 16000, " "channels = (int) 1")); -/* signals and args */ -enum -{ - /* FILL ME */ - LAST_SIGNAL -}; - -enum -{ - ARG_0, -}; - static gboolean gst_siren_enc_start (GstAudioEncoder * enc); static gboolean gst_siren_enc_stop (GstAudioEncoder * enc); static gboolean gst_siren_enc_set_format (GstAudioEncoder * enc, @@ -76,19 +60,16 @@ static gboolean gst_siren_enc_set_format (GstAudioEncoder * enc, static GstFlowReturn gst_siren_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * in_buf); -static void -_do_init (GType type) -{ - GST_DEBUG_CATEGORY_INIT (sirenenc_debug, "sirenenc", 0, "sirenenc"); -} +G_DEFINE_TYPE (GstSirenEnc, gst_siren_enc, GST_TYPE_AUDIO_ENCODER); -GST_BOILERPLATE_FULL (GstSirenEnc, gst_siren_enc, GstAudioEncoder, - GST_TYPE_AUDIO_ENCODER, _do_init); static void -gst_siren_enc_base_init (gpointer klass) +gst_siren_enc_class_init (GstSirenEncClass * klass) { GstElementClass *element_class = GST_ELEMENT_CLASS (klass); + GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass); + + GST_DEBUG_CATEGORY_INIT (sirenenc_debug, "sirenenc", 0, "sirenenc"); gst_element_class_add_pad_template (element_class, gst_static_pad_template_get (&srctemplate)); @@ -99,14 +80,6 @@ gst_siren_enc_base_init (gpointer klass) "Codec/Encoder/Audio ", "Encode 16bit PCM streams into the Siren7 codec", "Youness Alaoui <kakaroto@kakaroto.homelinux.net>"); -} - -static void -gst_siren_enc_class_init (GstSirenEncClass * klass) -{ - GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass); - - GST_DEBUG ("Initializing Class"); base_class->start = GST_DEBUG_FUNCPTR (gst_siren_enc_start); base_class->stop = GST_DEBUG_FUNCPTR (gst_siren_enc_stop); @@ -117,7 +90,7 @@ gst_siren_enc_class_init (GstSirenEncClass * klass) } static void -gst_siren_enc_init (GstSirenEnc * enc, GstSirenEncClass * klass) +gst_siren_enc_init (GstSirenEnc * enc) { } @@ -148,14 +121,11 @@ gst_siren_enc_stop (GstAudioEncoder * enc) static gboolean gst_siren_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info) { - GstSirenEnc *enc; gboolean res; GstCaps *outcaps; - enc = GST_SIREN_ENC (benc); - outcaps = gst_static_pad_template_get_caps (&srctemplate); - res = gst_pad_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc), outcaps); + res = gst_audio_encoder_set_output_format (benc, outcaps); gst_caps_unref (outcaps); /* report needs to base class */ @@ -178,14 +148,15 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf) guint i, size, num_frames; gint out_size, in_size; gint encode_ret; + GstMapInfo inmap, outmap; g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR); enc = GST_SIREN_ENC (benc); - size = GST_BUFFER_SIZE (buf); + size = gst_buffer_get_size (buf); - GST_LOG_OBJECT (enc, "Received buffer of size %d", GST_BUFFER_SIZE (buf)); + GST_LOG_OBJECT (enc, "Received buffer of size %d", size); g_return_val_if_fail (size > 0, GST_FLOW_ERROR); g_return_val_if_fail (size % 640 == 0, GST_FLOW_ERROR); @@ -202,14 +173,15 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf) out_size); /* get a buffer */ - ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (benc), - -1, out_size, GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (benc)), &out_buf); - if (ret != GST_FLOW_OK) + out_buf = gst_audio_encoder_allocate_output_buffer (benc, out_size); + if (out_buf == NULL) goto alloc_failed; /* get the input data for all the frames */ - in_data = GST_BUFFER_DATA (buf); - out_data = GST_BUFFER_DATA (out_buf); + gst_buffer_map (buf, &inmap, GST_MAP_READ); + gst_buffer_map (out_buf, &outmap, GST_MAP_READ); + in_data = inmap.data; + out_data = outmap.data; for (i = 0; i < num_frames; i++) { GST_LOG_OBJECT (enc, "Encoding frame %u/%u", i, num_frames); @@ -224,6 +196,9 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf) in_data += 640; } + gst_buffer_unmap (buf, &inmap); + gst_buffer_unmap (out_buf, &outmap); + GST_LOG_OBJECT (enc, "Finished encoding"); /* we encode all we get, pass it along */ diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in index 482f5385..f226b7b0 100644 --- a/gst/smooth/Makefile.in +++ b/gst/smooth/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/speed/Makefile.am b/gst/speed/Makefile.am index 903fa011..7c12d9e4 100644 --- a/gst/speed/Makefile.am +++ b/gst/speed/Makefile.am @@ -3,7 +3,7 @@ plugin_LTLIBRARIES = libgstspeed.la libgstspeed_la_SOURCES = gstspeed.c libgstspeed_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) +libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) -lgstaudio-$(GST_API_VERSION) libgstspeed_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstspeed_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in index 35322f25..f4ccfdb3 100644 --- a/gst/speed/Makefile.in +++ b/gst/speed/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -605,7 +613,7 @@ top_srcdir = @top_srcdir@ plugin_LTLIBRARIES = libgstspeed.la libgstspeed_la_SOURCES = gstspeed.c libgstspeed_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) -libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) +libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) -lgstaudio-$(GST_API_VERSION) libgstspeed_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstspeed_la_LIBTOOLFLAGS = --tag=disable-static noinst_HEADERS = gstspeed.h diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c index 5ab49602..3863bb53 100644 --- a/gst/speed/gstspeed.c +++ b/gst/speed/gstspeed.c @@ -60,19 +60,10 @@ enum /* assumption here: sizeof (gfloat) = 4 */ #define GST_SPEED_AUDIO_CAPS \ - "audio/x-raw-float, " \ + "audio/x-raw, " \ + "format = {" GST_AUDIO_NE (F32) ", " GST_AUDIO_NE (S16) "}, " \ "rate = (int) [ 1, MAX ], " \ - "channels = (int) [ 1, MAX ], " \ - "endianness = (int) BYTE_ORDER, " \ - "width = (int) 32; " \ - \ - "audio/x-raw-int, " \ - "rate = (int) [ 1, MAX ], " \ - "channels = (int) [ 1, MAX ], " \ - "endianness = (int) BYTE_ORDER, " \ - "width = (int) 16, " \ - "depth = (int) 16, " \ - "signed = (boolean) true" + "channels = (int) [ 1, MAX ]" static GstStaticPadTemplate gst_speed_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", @@ -88,10 +79,6 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_STATIC_CAPS (GST_SPEED_AUDIO_CAPS) ); -static void speed_base_init (gpointer g_class); -static void speed_class_init (GstSpeedClass * klass); -static void speed_init (GstSpeed * filter); - static void speed_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void speed_get_property (GObject * object, guint prop_id, GValue * value, @@ -99,118 +86,53 @@ static void speed_get_property (GObject * object, guint prop_id, GValue * value, static gboolean speed_parse_caps (GstSpeed * filter, const GstCaps * caps); -static GstFlowReturn speed_chain (GstPad * pad, GstBuffer * buf); +static GstFlowReturn speed_chain (GstPad * pad, GstObject * parent, + GstBuffer * buf); static GstStateChangeReturn speed_change_state (GstElement * element, GstStateChange transition); -static gboolean speed_sink_event (GstPad * pad, GstEvent * event); -static gboolean speed_src_event (GstPad * pad, GstEvent * event); +static gboolean speed_sink_event (GstPad * pad, GstObject * parent, + GstEvent * event); +static gboolean speed_src_event (GstPad * pad, GstObject * parent, + GstEvent * event); -static GstElementClass *parent_class; /* NULL */ +G_DEFINE_TYPE (GstSpeed, gst_speed, GST_TYPE_ELEMENT); static gboolean speed_setcaps (GstPad * pad, GstCaps * caps) { GstSpeed *filter; - GstPad *otherpad; gboolean ret; filter = GST_SPEED (gst_pad_get_parent (pad)); - otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad; - - if ((ret = speed_parse_caps (filter, caps))) - ret = gst_pad_set_caps (otherpad, caps); + ret = speed_parse_caps (filter, caps); gst_object_unref (filter); return ret; - } static gboolean speed_parse_caps (GstSpeed * filter, const GstCaps * caps) { - - GstStructure *structure; - gint rate, chans, width; - g_return_val_if_fail (filter != NULL, FALSE); g_return_val_if_fail (caps != NULL, FALSE); - structure = gst_caps_get_structure (caps, 0); - - - if (gst_structure_has_name (structure, "audio/x-raw-float")) - filter->format = GST_SPEED_FORMAT_FLOAT; - else if (gst_structure_has_name (structure, "audio/x-raw-int")) - filter->format = GST_SPEED_FORMAT_INT; - else - return FALSE; - - if (!gst_structure_get_int (structure, "rate", &rate) - || !gst_structure_get_int (structure, "width", &width) - || !gst_structure_get_int (structure, "channels", &chans)) { + if (!gst_audio_info_from_caps (&filter->info, caps)) return FALSE; - } - - filter->rate = rate; - filter->width = width; - filter->channels = chans; - if (filter->format == GST_SPEED_FORMAT_FLOAT) { - filter->sample_size = filter->channels * filter->width / 8; - } else { - /* our caps only allow width == depth for now */ - filter->sample_size = filter->channels * filter->width / 8; - } return TRUE; } -GType -gst_speed_get_type (void) -{ - static GType speed_type = 0; - - if (!speed_type) { - static const GTypeInfo speed_info = { - sizeof (GstSpeedClass), - speed_base_init, - NULL, - (GClassInitFunc) speed_class_init, - NULL, - NULL, - sizeof (GstSpeed), - 0, - (GInstanceInitFunc) speed_init, - }; - - speed_type = - g_type_register_static (GST_TYPE_ELEMENT, "GstSpeed", &speed_info, 0); - } - return speed_type; -} - -static const GstQueryType * -speed_get_query_types (GstPad * pad) -{ - static const GstQueryType src_query_types[] = { - GST_QUERY_POSITION, - GST_QUERY_DURATION, - 0 - }; - - return src_query_types; -} - static gboolean -speed_src_event (GstPad * pad, GstEvent * event) +speed_src_event (GstPad * pad, GstObject * parent, GstEvent * event) { GstSpeed *filter; gboolean ret = FALSE; - filter = GST_SPEED (gst_pad_get_parent (pad)); + filter = GST_SPEED (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_SEEK:{ @@ -240,49 +162,47 @@ speed_src_event (GstPad * pad, GstEvent * event) event = gst_event_new_seek (rate, format, flags, start_type, start, stop_type, stop); - GST_LOG ("sending seek event: %" GST_PTR_FORMAT, event->structure); + GST_LOG ("sending seek event: %" GST_PTR_FORMAT, + gst_event_get_structure (event)); ret = gst_pad_send_event (GST_PAD_PEER (filter->sinkpad), event); break; } default: - ret = gst_pad_event_default (pad, event); + ret = gst_pad_event_default (pad, parent, event); break; } - gst_object_unref (filter); return ret; - } static gboolean -gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value, +gst_speed_convert (GstSpeed * filter, GstFormat src_format, gint64 src_value, GstFormat * dest_format, gint64 * dest_value) { gboolean ret = TRUE; guint scale = 1; - GstSpeed *filter; if (src_format == *dest_format) { *dest_value = src_value; return TRUE; } - filter = GST_SPEED (GST_PAD_PARENT (pad)); - switch (src_format) { case GST_FORMAT_BYTES: switch (*dest_format) { case GST_FORMAT_DEFAULT: - if (filter->sample_size == 0) { + if (GST_AUDIO_INFO_BPF (&filter->info) == 0) { ret = FALSE; break; } - *dest_value = src_value / filter->sample_size; + *dest_value = src_value / GST_AUDIO_INFO_BPF (&filter->info); break; case GST_FORMAT_TIME: { - gint byterate = filter->sample_size * filter->rate; + gint byterate = + GST_AUDIO_INFO_BPF (&filter->info) * + GST_AUDIO_INFO_RATE (&filter->info); if (byterate == 0) { ret = FALSE; @@ -298,14 +218,15 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value, case GST_FORMAT_DEFAULT: switch (*dest_format) { case GST_FORMAT_BYTES: - *dest_value = src_value * filter->sample_size; + *dest_value = src_value * GST_AUDIO_INFO_BPF (&filter->info); break; case GST_FORMAT_TIME: - if (filter->rate == 0) { + if (GST_AUDIO_INFO_RATE (&filter->info) == 0) { ret = FALSE; break; } - *dest_value = src_value * GST_SECOND / filter->rate; + *dest_value = + src_value * GST_SECOND / GST_AUDIO_INFO_RATE (&filter->info); break; default: ret = FALSE; @@ -314,10 +235,12 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value, case GST_FORMAT_TIME: switch (*dest_format) { case GST_FORMAT_BYTES: - scale = filter->sample_size; + scale = GST_AUDIO_INFO_BPF (&filter->info); /* fallthrough */ case GST_FORMAT_DEFAULT: - *dest_value = src_value * scale * filter->rate / GST_SECOND; + *dest_value = + src_value * scale * GST_AUDIO_INFO_RATE (&filter->info) / + GST_SECOND; break; default: ret = FALSE; @@ -332,12 +255,12 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value, } static gboolean -speed_src_query (GstPad * pad, GstQuery * query) +speed_src_query (GstPad * pad, GstObject * parent, GstQuery * query) { gboolean ret = TRUE; GstSpeed *filter; - filter = GST_SPEED (gst_pad_get_parent (pad)); + filter = GST_SPEED (parent); switch (GST_QUERY_TYPE (query)) { case GST_QUERY_POSITION: @@ -353,7 +276,7 @@ speed_src_query (GstPad * pad, GstQuery * query) /* query peer for current position in time */ gst_query_set_position (query, GST_FORMAT_TIME, -1); - if (!gst_pad_query_peer_position (filter->sinkpad, &rformat, &cur)) { + if (!gst_pad_peer_query_position (filter->sinkpad, rformat, &cur)) { GST_LOG_OBJECT (filter, "query on peer pad failed"); goto error; } @@ -366,7 +289,7 @@ speed_src_query (GstPad * pad, GstQuery * query) cur); /* convert to time format */ - if (!gst_speed_convert (pad, rformat, cur, &conv_format, &cur)) { + if (!gst_speed_convert (filter, rformat, cur, &conv_format, &cur)) { ret = FALSE; break; } @@ -375,7 +298,7 @@ speed_src_query (GstPad * pad, GstQuery * query) cur /= filter->speed; /* convert to time format */ - if (!gst_speed_convert (pad, conv_format, cur, &format, &cur)) { + if (!gst_speed_convert (filter, conv_format, cur, &format, &cur)) { ret = FALSE; break; } @@ -400,7 +323,7 @@ speed_src_query (GstPad * pad, GstQuery * query) /* query peer for total length in time */ gst_query_set_duration (query, GST_FORMAT_TIME, -1); - if (!gst_pad_query_peer_duration (filter->sinkpad, &rformat, &end)) { + if (!gst_pad_peer_query_duration (filter->sinkpad, rformat, &end)) { GST_LOG_OBJECT (filter, "query on peer pad failed"); goto error; } @@ -413,7 +336,7 @@ speed_src_query (GstPad * pad, GstQuery * query) end); /* convert to time format */ - if (!gst_speed_convert (pad, rformat, end, &conv_format, &end)) { + if (!gst_speed_convert (filter, rformat, end, &conv_format, &end)) { ret = FALSE; break; } @@ -422,7 +345,7 @@ speed_src_query (GstPad * pad, GstQuery * query) end /= filter->speed; /* convert to time format */ - if (!gst_speed_convert (pad, conv_format, end, &format, &end)) { + if (!gst_speed_convert (filter, conv_format, end, &format, &end)) { ret = FALSE; break; } @@ -440,7 +363,6 @@ speed_src_query (GstPad * pad, GstQuery * query) break; } - gst_object_unref (filter); return ret; error: @@ -451,24 +373,7 @@ error: } static void -speed_base_init (gpointer g_class) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - - gst_element_class_set_details_simple (element_class, "Speed", - "Filter/Effect/Audio", - "Set speed/pitch on audio/raw streams (resampler)", - "Andy Wingo <apwingo@eos.ncsu.edu>, " - "Tim-Philipp Müller <tim@centricular.net>"); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_speed_src_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_speed_sink_template)); -} - -static void -speed_class_init (GstSpeedClass * klass) +gst_speed_class_init (GstSpeedClass * klass) { GObjectClass *gobject_class = (GObjectClass *) klass; GstElementClass *gstelement_class = (GstElementClass *) klass; @@ -477,37 +382,42 @@ speed_class_init (GstSpeedClass * klass) gobject_class->get_property = speed_get_property; gstelement_class->change_state = speed_change_state; - parent_class = g_type_class_peek_parent (klass); - g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SPEED, g_param_spec_float ("speed", "speed", "speed", 0.1, 40.0, 1.0, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + + gst_element_class_set_details_simple (gstelement_class, "Speed", + "Filter/Effect/Audio", + "Set speed/pitch on audio/raw streams (resampler)", + "Andy Wingo <apwingo@eos.ncsu.edu>, " + "Tim-Philipp Müller <tim@centricular.net>"); + + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_speed_src_template)); + gst_element_class_add_pad_template (gstelement_class, + gst_static_pad_template_get (&gst_speed_sink_template)); } static void -speed_init (GstSpeed * filter) +gst_speed_init (GstSpeed * filter) { filter->sinkpad = gst_pad_new_from_static_template (&gst_speed_sink_template, "sink"); - gst_pad_set_setcaps_function (filter->sinkpad, speed_setcaps); gst_pad_set_chain_function (filter->sinkpad, speed_chain); gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); gst_pad_set_event_function (filter->sinkpad, speed_sink_event); + GST_PAD_SET_PROXY_CAPS (filter->sinkpad); filter->srcpad = gst_pad_new_from_static_template (&gst_speed_src_template, "src"); - gst_pad_set_setcaps_function (filter->srcpad, speed_setcaps); - gst_pad_set_query_type_function (filter->srcpad, speed_get_query_types); gst_pad_set_query_function (filter->srcpad, speed_src_query); gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); - gst_pad_set_event_function (filter->srcpad, speed_src_event); + GST_PAD_SET_PROXY_CAPS (filter->srcpad); filter->offset = 0; filter->timestamp = 0; - filter->sample_size = 0; - } static inline guint @@ -517,9 +427,13 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf, gint16 *in_data, *out_data; gfloat interp, lower, i_float; guint i, j; + GstMapInfo in_info, out_info; + + gst_buffer_map (in_buf, &in_info, GST_MAP_READ); + gst_buffer_map (out_buf, &out_info, GST_MAP_WRITE); - in_data = ((gint16 *) GST_BUFFER_DATA (in_buf)) + c; - out_data = ((gint16 *) GST_BUFFER_DATA (out_buf)) + c; + in_data = (gint16 *) in_info.data + c; + out_data = (gint16 *) out_info.data + c; lower = in_data[0]; i_float = 0.5 * (filter->speed - 1.0); @@ -529,10 +443,11 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf, while (i < in_samples) { interp = i_float - floor (i_float); - out_data[j * filter->channels] = - lower * (1 - interp) + in_data[i * filter->channels] * interp; + out_data[j * GST_AUDIO_INFO_CHANNELS (&filter->info)] = + lower * (1 - interp) + + in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)] * interp; - lower = in_data[i * filter->channels]; + lower = in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)]; i_float += filter->speed; i = (guint) ceil (i_float); @@ -540,6 +455,8 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf, ++j; } + gst_buffer_unmap (in_buf, &in_info); + gst_buffer_unmap (out_buf, &out_info); return j; } @@ -550,9 +467,13 @@ speed_chain_float32 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf, gfloat *in_data, *out_data; gfloat interp, lower, i_float; guint i, j; + GstMapInfo in_info, out_info; + + gst_buffer_map (in_buf, &in_info, GST_MAP_WRITE); + gst_buffer_map (out_buf, &out_info, GST_MAP_WRITE); - in_data = ((gfloat *) GST_BUFFER_DATA (in_buf)) + c; - out_data = ((gfloat *) GST_BUFFER_DATA (out_buf)) + c; + in_data = (gfloat *) in_info.data + c; + out_data = (gfloat *) out_info.data + c; lower = in_data[0]; i_float = 0.5 * (filter->speed - 1.0); @@ -562,38 +483,45 @@ speed_chain_float32 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf, while (i < in_samples) { interp = i_float - floor (i_float); - out_data[j * filter->channels] = - lower * (1 - interp) + in_data[i * filter->channels] * interp; + out_data[j * GST_AUDIO_INFO_CHANNELS (&filter->info)] = + lower * (1 - interp) + + in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)] * interp; - lower = in_data[i * filter->channels]; + lower = in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)]; i_float += filter->speed; i = (guint) ceil (i_float); ++j; } - + gst_buffer_unmap (in_buf, &in_info); + gst_buffer_unmap (out_buf, &out_info); return j; } static gboolean -speed_sink_event (GstPad * pad, GstEvent * event) +speed_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { - GstSpeed *filter; + GstSpeed *filter = GST_SPEED (parent); gboolean ret = FALSE; - filter = GST_SPEED (gst_pad_get_parent (pad)); - switch (GST_EVENT_TYPE (event)) { - case GST_EVENT_NEWSEGMENT:{ + case GST_EVENT_SEGMENT:{ gdouble rate; - gboolean update = FALSE; GstFormat format; gint64 start_value, stop_value, base; + const GstSegment *segment; + GstSegment seg; + + gst_event_parse_segment (event, &segment); + + rate = segment->rate; + format = segment->format; + start_value = segment->start; + stop_value = segment->stop; + base = segment->base; - gst_event_parse_new_segment (event, &update, &rate, &format, &start_value, - &stop_value, &base); gst_event_unref (event); if (format != GST_FORMAT_TIME) { @@ -616,86 +544,83 @@ speed_sink_event (GstPad * pad, GstEvent * event) * the samplerate */ filter->offset = GST_BUFFER_OFFSET_NONE; - ret = - gst_pad_event_default (pad, gst_event_new_new_segment (update, rate, - format, start_value, stop_value, base)); + gst_segment_init (&seg, GST_FORMAT_TIME); + seg.rate = rate; + seg.start = start_value; + seg.stop = stop_value; + seg.time = segment->time; + ret = gst_pad_push_event (filter->srcpad, gst_event_new_segment (&seg)); + break; } + case GST_EVENT_CAPS: + { + GstCaps *caps; + + gst_event_parse_caps (event, &caps); + ret = speed_setcaps (pad, caps); + if (!ret) { + gst_event_unref (event); + return ret; + } + } + default: - ret = gst_pad_event_default (pad, event); + ret = gst_pad_event_default (pad, parent, event); break; } - - - gst_object_unref (filter); - return ret; - - } static GstFlowReturn -speed_chain (GstPad * pad, GstBuffer * in_buf) +speed_chain (GstPad * pad, GstObject * parent, GstBuffer * in_buf) { GstBuffer *out_buf; - GstSpeed *filter; + GstSpeed *filter = GST_SPEED (parent); guint c, in_samples, out_samples, out_size; GstFlowReturn flow; - - filter = GST_SPEED (GST_PAD_PARENT (pad)); - - if (G_UNLIKELY (filter->sample_size == 0 || filter->rate == 0)) { - flow = GST_FLOW_NOT_NEGOTIATED; - goto done; - } + gsize size; if (G_UNLIKELY (filter->offset == GST_BUFFER_OFFSET_NONE)) { - filter->offset = - gst_util_uint64_scale_int (filter->timestamp, filter->rate, GST_SECOND); + filter->offset = gst_util_uint64_scale_int (filter->timestamp, + GST_AUDIO_INFO_RATE (&filter->info), GST_SECOND); } - /* buffersize has to be aligned by samplesize */ - out_size = ceil ((gfloat) GST_BUFFER_SIZE (in_buf) / filter->speed); - out_size = ((out_size + filter->sample_size - 1) / filter->sample_size) * - filter->sample_size; + /* buffersize has to be aligned to a frame */ + out_size = ceil ((gfloat) gst_buffer_get_size (in_buf) / filter->speed); + out_size = ((out_size + GST_AUDIO_INFO_BPF (&filter->info) - 1) / + GST_AUDIO_INFO_BPF (&filter->info)) * GST_AUDIO_INFO_BPF (&filter->info); - flow = - gst_pad_alloc_buffer_and_set_caps (filter->srcpad, -1, out_size, - GST_PAD_CAPS (filter->srcpad), &out_buf); + out_buf = gst_buffer_new_and_alloc (out_size); - if (flow != GST_FLOW_OK) - goto done; - - in_samples = GST_BUFFER_SIZE (in_buf) / filter->sample_size; + in_samples = gst_buffer_get_size (in_buf) / + GST_AUDIO_INFO_BPS (&filter->info); out_samples = 0; - for (c = 0; c < filter->channels; ++c) { - if (filter->format == GST_SPEED_FORMAT_INT) { + for (c = 0; c < GST_AUDIO_INFO_CHANNELS (&filter->info); ++c) { + if (GST_AUDIO_INFO_IS_INTEGER (&filter->info)) out_samples = speed_chain_int16 (filter, in_buf, out_buf, c, in_samples); - } else { + else out_samples = speed_chain_float32 (filter, in_buf, out_buf, c, in_samples); - } } - GST_BUFFER_SIZE (out_buf) = out_samples * filter->sample_size; + size = out_samples * GST_AUDIO_INFO_BPS (&filter->info); + gst_buffer_set_size (out_buf, size); GST_BUFFER_OFFSET (out_buf) = filter->offset; GST_BUFFER_TIMESTAMP (out_buf) = filter->timestamp; - filter->offset += GST_BUFFER_SIZE (out_buf) / filter->sample_size; - filter->timestamp = - gst_util_uint64_scale_int (filter->offset, GST_SECOND, filter->rate); + filter->offset += size / GST_AUDIO_INFO_BPS (&filter->info); + filter->timestamp = gst_util_uint64_scale_int (filter->offset, GST_SECOND, + GST_AUDIO_INFO_RATE (&filter->info)); /* make sure it's at least nominally a perfect stream */ GST_BUFFER_DURATION (out_buf) = filter->timestamp - GST_BUFFER_TIMESTAMP (out_buf); - flow = gst_pad_push (filter->srcpad, out_buf); -done: - if (G_UNLIKELY (flow != GST_FLOW_OK)) GST_DEBUG_OBJECT (filter, "flow: %s", gst_flow_get_name (flow)); @@ -746,15 +671,14 @@ speed_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_READY_TO_PAUSED: speed->offset = GST_BUFFER_OFFSET_NONE; speed->timestamp = 0; + gst_audio_info_init (&speed->info); break; default: break; } - if (GST_ELEMENT_CLASS (parent_class)->change_state) - return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - - return GST_STATE_CHANGE_SUCCESS; + return GST_ELEMENT_CLASS (gst_speed_parent_class)->change_state (element, + transition); } static gboolean diff --git a/gst/speed/gstspeed.h b/gst/speed/gstspeed.h index 19b5c36c..2dd80ebe 100644 --- a/gst/speed/gstspeed.h +++ b/gst/speed/gstspeed.h @@ -40,11 +40,6 @@ G_BEGIN_DECLS typedef struct _GstSpeed GstSpeed; typedef struct _GstSpeedClass GstSpeedClass; -enum _GstSpeedFormat { - GST_SPEED_FORMAT_INT, - GST_SPEED_FORMAT_FLOAT -}; - typedef enum _GstSpeedFormat GstSpeedFormat; struct _GstSpeed { @@ -58,12 +53,7 @@ struct _GstSpeed { gint64 offset; gint64 timestamp; - guint rate; - guint channels; - guint width; - - guint sample_size; - GstSpeedFormat format; + GstAudioInfo info; }; struct _GstSpeedClass { diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in index 7ff3a4ee..24587adb 100644 --- a/gst/stereo/Makefile.in +++ b/gst/stereo/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in index b5a3d539..0c6365e5 100644 --- a/gst/subenc/Makefile.in +++ b/gst/subenc/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in index 5d103c1c..6296f27c 100644 --- a/gst/tta/Makefile.in +++ b/gst/tta/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/tta/filters.h b/gst/tta/filters.h index 3c0694a2..2162b204 100644 --- a/gst/tta/filters.h +++ b/gst/tta/filters.h @@ -22,7 +22,7 @@ * * You should have received a copy of the GNU General Public License * aint with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Please see the file COPYING in this directory for full copyright * information. diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in index e6a28ec6..2b041344 100644 --- a/gst/videofilters/Makefile.in +++ b/gst/videofilters/Makefile.in @@ -347,6 +347,8 @@ 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@ @@ -354,6 +356,8 @@ 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@ @@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -396,6 +399,10 @@ 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@ @@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in index 87df987e..599cbbd5 100644 --- a/gst/videomeasure/Makefile.in +++ b/gst/videomeasure/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c index 948787a1..69533c1b 100644 --- a/gst/videomeasure/gstvideomeasure_ssim.c +++ b/gst/videomeasure/gstvideomeasure_ssim.c @@ -1158,7 +1158,8 @@ gst_ssim_request_new_pad (GstElement * element, GstPadTemplate * templ, gst_pad_set_getcaps_function (newpad, GST_DEBUG_FUNCPTR (gst_ssim_sink_getcaps)); gst_pad_set_setcaps_function (newpad, GST_DEBUG_FUNCPTR (gst_ssim_setcaps)); - gst_collect_pads_add_pad (ssim->collect, newpad, sizeof (GstCollectData)); + gst_collect_pads_add_pad (ssim->collect, newpad, sizeof (GstCollectData), + NULL, TRUE); /* FIXME: hacked way to override/extend the event function of * GstCollectPads; because it sets its own event function giving the diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in index 1e153805..160cc505 100644 --- a/gst/videoparsers/Makefile.in +++ b/gst/videoparsers/Makefile.in @@ -351,6 +351,8 @@ 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@ @@ -358,6 +360,8 @@ 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@ @@ -372,7 +376,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -400,6 +403,10 @@ 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@ @@ -526,6 +533,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c index 0d7518bd..8699381c 100644 --- a/gst/videoparsers/gstdiracparse.c +++ b/gst/videoparsers/gstdiracparse.c @@ -86,8 +86,9 @@ GST_STATIC_PAD_TEMPLATE ("src", "width=(int)[1,MAX], height=(int)[1,MAX], " "framerate=(fraction)[0/1,MAX], " "pixel-aspect-ratio=(fraction)[0/1,MAX], " - "interlaced=(boolean){TRUE,FALSE}, " - "profile=(int)[0,MAX], level=(int)[0,MAX]") + "interlace-mode=(string) { progressive, interleaved }, " + "profile=(string){ vc2-low-delay, vc2-simple, vc2-main, main }, " + "level=(string) { 0, 1, 128}") ); /* class initialization */ @@ -134,6 +135,7 @@ static void gst_dirac_parse_init (GstDiracParse * diracparse) { gst_base_parse_set_min_frame_size (GST_BASE_PARSE (diracparse), 13); + gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (diracparse), FALSE); } void @@ -204,6 +206,42 @@ gst_dirac_parse_set_sink_caps (GstBaseParse * parse, GstCaps * caps) return TRUE; } +static const gchar * +get_profile_name (int profile) +{ + switch (profile) { + case 0: + return "vc2-low-delay"; + case 1: + return "vc2-simple"; + case 2: + return "vc2-main"; + case 8: + return "main"; + default: + break; + } + return "unknown"; +} + +static const gchar * +get_level_name (int level) +{ + switch (level) { + case 0: + return "0"; + case 1: + return "1"; + case 128: + return "128"; + default: + break; + } + /* need to add it to template caps, so return 0 for now */ + GST_WARNING ("unhandled dirac level %u", level); + return "0"; +} + static GstFlowReturn gst_dirac_parse_handle_frame (GstBaseParse * parse, GstBaseParseFrame * frame, gint * skipsize) @@ -309,9 +347,10 @@ gst_dirac_parse_handle_frame (GstBaseParse * parse, "pixel-aspect-ratio", GST_TYPE_FRACTION, sequence_header.aspect_ratio_numerator, sequence_header.aspect_ratio_denominator, - "interlaced", G_TYPE_BOOLEAN, sequence_header.interlaced, - "profile", G_TYPE_INT, sequence_header.profile, - "level", G_TYPE_INT, sequence_header.level, NULL); + "interlace-mode", G_TYPE_STRING, + sequence_header.interlaced ? "interleaved" : "progressive", + "profile", G_TYPE_STRING, get_profile_name (sequence_header.profile), + "level", G_TYPE_STRING, get_level_name (sequence_header.level), NULL); gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps); gst_caps_unref (caps); diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c index b14ea9c8..4dca51c9 100644 --- a/gst/videoparsers/gsth264parse.c +++ b/gst/videoparsers/gsth264parse.c @@ -145,6 +145,7 @@ static void gst_h264_parse_init (GstH264Parse * h264parse) { h264parse->frame_out = gst_adapter_new (); + gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (h264parse), FALSE); } @@ -375,7 +376,7 @@ gst_h264_parse_wrap_nal (GstH264Parse * h264parse, guint format, guint8 * data, GST_DEBUG_OBJECT (h264parse, "nal length %d", size); - buf = gst_buffer_new_allocate (NULL, nl + size, NULL); + buf = gst_buffer_new_allocate (NULL, 4 + size, NULL); if (format == GST_H264_PARSE_FORMAT_AVC) { tmp = GUINT32_TO_BE (size << (32 - 8 * nl)); } else { @@ -388,6 +389,7 @@ gst_h264_parse_wrap_nal (GstH264Parse * h264parse, guint format, guint8 * data, gst_buffer_fill (buf, 0, &tmp, sizeof (guint32)); gst_buffer_fill (buf, nl, data, size); + gst_buffer_set_size (buf, size + nl); return buf; } @@ -491,10 +493,11 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu) switch (sei.payloadType) { case GST_H264_SEI_PIC_TIMING: h264parse->sei_pic_struct_pres_flag = - sei.pic_timing.pic_struct_present_flag; - h264parse->sei_cpb_removal_delay = sei.pic_timing.cpb_removal_delay; + sei.payload.pic_timing.pic_struct_present_flag; + h264parse->sei_cpb_removal_delay = + sei.payload.pic_timing.cpb_removal_delay; if (h264parse->sei_pic_struct_pres_flag) - h264parse->sei_pic_struct = sei.pic_timing.pic_struct; + h264parse->sei_pic_struct = sei.payload.pic_timing.pic_struct; break; case GST_H264_SEI_BUF_PERIOD: if (h264parse->ts_trn_nb == GST_CLOCK_TIME_NONE || diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c index 29caec7f..fdbe628a 100644 --- a/gst/videoparsers/gstmpeg4videoparse.c +++ b/gst/videoparsers/gstmpeg4videoparse.c @@ -180,6 +180,8 @@ gst_mpeg4vparse_init (GstMpeg4VParse * parse) { parse->interval = DEFAULT_CONFIG_INTERVAL; parse->last_report = GST_CLOCK_TIME_NONE; + + gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (parse), FALSE); } static void @@ -276,6 +278,44 @@ gst_mpeg4vparse_process_config (GstMpeg4VParse * mp4vparse, return TRUE; } +static gboolean +gst_mpeg4vparse_get_vop_coded (GstMpeg4VParse * mp4vparse, const guint8 * data, + gint vop_offset, gsize size, gsize frame_size) +{ + if (frame_size > 9) { /* assuming bigger frame will always have vop_coded (saves some parsing) */ + return TRUE; + } else if (size > vop_offset + 3) { + GstBitReader reader; + guint8 value; + + gst_bit_reader_init (&reader, data + vop_offset + 1, size - vop_offset); + gst_bit_reader_skip (&reader, 2); /* VOP_coding_type */ + + /* modulo_time_base (ends with 0) */ + while (gst_bit_reader_get_bits_uint8 (&reader, &value, 1) && value); + + /* marker_bit */ + g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1) + && value, TRUE); + + /* VOP_time_increment */ + gst_bit_reader_skip (&reader, mp4vparse->vol.vop_time_increment_bits); + + /* marker_bit */ + g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1) + && value, TRUE); + + /* VOP_coded */ + if (!gst_bit_reader_get_bits_uint8 (&reader, &value, 1)) { + return FALSE; + } + + return value; + } + + return FALSE; +} + /* caller guarantees at least start code in @buf at @off */ static gboolean gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet, @@ -295,8 +335,12 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet, GST_WARNING_OBJECT (mp4vparse, "no data following VOP startcode"); mp4vparse->intra_frame = FALSE; } - GST_LOG_OBJECT (mp4vparse, "ending frame of size %d, is intra %d", - packet->offset - 3, mp4vparse->intra_frame); + mp4vparse->vop_coded = + gst_mpeg4vparse_get_vop_coded (mp4vparse, packet->data, + mp4vparse->vop_offset, size, packet->offset - 3); + GST_LOG_OBJECT (mp4vparse, + "ending frame of size %d, is intra %d, vop_coded %d", + packet->offset - 3, mp4vparse->intra_frame, mp4vparse->vop_coded); return TRUE; } @@ -491,6 +535,7 @@ static void gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse) { GstCaps *caps = NULL; + GstStructure *s = NULL; GST_LOG_OBJECT (mp4vparse, "Updating caps"); @@ -505,6 +550,7 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse) GstCaps *tmp = gst_caps_copy (caps); gst_caps_unref (caps); caps = tmp; + s = gst_caps_get_structure (caps, 0); } else { caps = gst_caps_new_simple ("video/mpeg", "mpegversion", G_TYPE_INT, 4, NULL); @@ -528,8 +574,9 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse) "height", G_TYPE_INT, mp4vparse->vol.height, NULL); } - /* perhaps we have a framerate */ - if (mp4vparse->vol.fixed_vop_time_increment != 0) { + /* perhaps we have a framerate */ + if (mp4vparse->vol.fixed_vop_time_increment != 0 && + (!s || !gst_structure_has_field (s, "framerate"))) { gint fps_num = mp4vparse->vol.vop_time_increment_resolution; gint fps_den = mp4vparse->vol.fixed_vop_time_increment; GstClockTime latency = gst_util_uint64_scale (GST_SECOND, fps_den, fps_num); @@ -542,7 +589,8 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse) } /* or pixel-aspect-ratio */ - if (mp4vparse->vol.par_width > 0 && mp4vparse->vol.par_height > 0) { + if (mp4vparse->vol.par_width > 0 && mp4vparse->vol.par_height > 0 && + (!s || !gst_structure_has_field (s, "pixel-aspect-ratio"))) { gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION, mp4vparse->vol.par_width, mp4vparse->vol.par_height, NULL); @@ -567,6 +615,9 @@ gst_mpeg4vparse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame) else GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT); + if (!mp4vparse->vop_coded) /* buffer without VOP_coded has no data */ + GST_BUFFER_DURATION (buffer) = 0; + if (G_UNLIKELY (mp4vparse->drop && !mp4vparse->config)) { GST_LOG_OBJECT (mp4vparse, "dropping frame as no config yet"); return GST_BASE_PARSE_FLOW_DROPPED; diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h index 75d7d6c0..7611749e 100644 --- a/gst/videoparsers/gstmpeg4videoparse.h +++ b/gst/videoparsers/gstmpeg4videoparse.h @@ -52,6 +52,7 @@ struct _GstMpeg4VParse { gint vop_offset; gboolean vo_found; gboolean intra_frame; + gboolean vop_coded; gboolean update_caps; GstBuffer *config; diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c index 7892229b..7eee6a5e 100644 --- a/gst/videoparsers/gstmpegvideoparse.c +++ b/gst/videoparsers/gstmpegvideoparse.c @@ -169,7 +169,9 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass) static void gst_mpegv_parse_init (GstMpegvParse * parse) { - parse->mpeg_version = 0; + parse->config_flags = FLAG_NONE; + + gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (parse), FALSE); } static void @@ -196,6 +198,7 @@ gst_mpegv_parse_reset (GstMpegvParse * mpvparse) gst_buffer_replace (&mpvparse->config, NULL); memset (&mpvparse->sequencehdr, 0, sizeof (mpvparse->sequencehdr)); memset (&mpvparse->sequenceext, 0, sizeof (mpvparse->sequenceext)); + memset (&mpvparse->sequencedispext, 0, sizeof (mpvparse->sequencedispext)); memset (&mpvparse->pichdr, 0, sizeof (mpvparse->pichdr)); } @@ -232,6 +235,7 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf, guint8 *data; guint8 *data_with_prefix; GstMapInfo map; + gint i, offset; if (mpvparse->seq_offset < 4) { /* This shouldn't happen, but just in case... */ @@ -256,13 +260,8 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf, return TRUE; } - if (gst_mpeg_video_parse_sequence_header (&mpvparse->sequencehdr, data, + if (!gst_mpeg_video_parse_sequence_header (&mpvparse->sequencehdr, data, size - mpvparse->seq_offset, 0)) { - if (mpvparse->fps_num == 0 || mpvparse->fps_den == 0) { - mpvparse->fps_num = mpvparse->sequencehdr.fps_n; - mpvparse->fps_den = mpvparse->sequencehdr.fps_d; - } - } else { GST_DEBUG_OBJECT (mpvparse, "failed to parse config data (size %d) at offset %d", size, mpvparse->seq_offset); @@ -273,23 +272,41 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf, GST_LOG_OBJECT (mpvparse, "accepting parsed config size %d", size); /* Set mpeg version, and parse sequence extension */ - if (mpvparse->mpeg_version <= 0) { - gint i, offset; - - mpvparse->mpeg_version = 1; - for (i = 0; i < mpvparse->ext_count; ++i) { - offset = mpvparse->ext_offsets[i]; - mpvparse->mpeg_version = 2; - if (offset < size && - gst_mpeg_video_parse_sequence_extension (&mpvparse->sequenceext, + mpvparse->config_flags = FLAG_NONE; + for (i = 0; i < mpvparse->ext_count; ++i) { + offset = mpvparse->ext_offsets[i]; + mpvparse->config_flags |= FLAG_MPEG2; + if (offset < size) { + if (gst_mpeg_video_parse_sequence_extension (&mpvparse->sequenceext, map.data, size, offset)) { - mpvparse->fps_num = - mpvparse->sequencehdr.fps_n * (mpvparse->sequenceext.fps_n_ext + 1); - mpvparse->fps_den = - mpvparse->sequencehdr.fps_d * (mpvparse->sequenceext.fps_d_ext + 1); + GST_LOG_OBJECT (mpvparse, "Read Sequence Extension"); + mpvparse->config_flags |= FLAG_SEQUENCE_EXT; + } else + if (gst_mpeg_video_parse_sequence_display_extension + (&mpvparse->sequencedispext, map.data, size, offset)) { + GST_LOG_OBJECT (mpvparse, "Read Sequence Display Extension"); + mpvparse->config_flags |= FLAG_SEQUENCE_DISPLAY_EXT; } } } + if (mpvparse->config_flags & FLAG_MPEG2) { + /* Update the sequence header based on extensions */ + GstMpegVideoSequenceExt *seqext = NULL; + GstMpegVideoSequenceDisplayExt *seqdispext = NULL; + + if (mpvparse->config_flags & FLAG_SEQUENCE_EXT) + seqext = &mpvparse->sequenceext; + if (mpvparse->config_flags & FLAG_SEQUENCE_DISPLAY_EXT) + seqdispext = &mpvparse->sequencedispext; + + gst_mpeg_video_finalise_mpeg2_sequence_header (&mpvparse->sequencehdr, + seqext, seqdispext); + } + + if (mpvparse->fps_num == 0 || mpvparse->fps_den == 0) { + mpvparse->fps_num = mpvparse->sequencehdr.fps_n; + mpvparse->fps_den = mpvparse->sequencehdr.fps_d; + } /* parsing ok, so accept it as new config */ if (mpvparse->config != NULL) @@ -627,10 +644,9 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse) * config data, so we should at least know about version. * If not, it means it has been requested not to drop data, and * upstream and/or app must know what they are doing ... */ - - if (G_LIKELY (mpvparse->mpeg_version)) - gst_caps_set_simple (caps, - "mpegversion", G_TYPE_INT, mpvparse->mpeg_version, NULL); + gst_caps_set_simple (caps, + "mpegversion", G_TYPE_INT, (mpvparse->config_flags & FLAG_MPEG2) ? 2 : 1, + NULL); gst_caps_set_simple (caps, "systemstream", G_TYPE_BOOLEAN, FALSE, "parsed", G_TYPE_BOOLEAN, TRUE, NULL); @@ -664,7 +680,7 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse) GST_TYPE_BUFFER, mpvparse->config, NULL); } - if (mpvparse->mpeg_version == 2) { + if (mpvparse->config_flags & FLAG_SEQUENCE_EXT) { const guint profile_c = mpvparse->sequenceext.profile; const guint level_c = mpvparse->sequenceext.level; const gchar *profile = NULL, *level = NULL; @@ -756,7 +772,8 @@ gst_mpegv_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame) GST_BUFFER_DURATION (buffer) = 0; } - if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) { + if (mpvparse->frame_repeat_count + && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) { GST_BUFFER_DURATION (buffer) = (1 + mpvparse->frame_repeat_count) * GST_BUFFER_DURATION (buffer) / 2; } @@ -781,7 +798,9 @@ gst_mpegv_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame) gchar *codec; /* codec tag */ - codec = g_strdup_printf ("MPEG %d Video", mpvparse->mpeg_version); + codec = + g_strdup_printf ("MPEG %d Video", + (mpvparse->config_flags & FLAG_MPEG2) ? 2 : 1); taglist = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec, NULL); g_free (codec); diff --git a/gst/videoparsers/gstmpegvideoparse.h b/gst/videoparsers/gstmpegvideoparse.h index 47ad4cee..e00e9c86 100644 --- a/gst/videoparsers/gstmpegvideoparse.h +++ b/gst/videoparsers/gstmpegvideoparse.h @@ -47,6 +47,14 @@ G_BEGIN_DECLS typedef struct _GstMpegvParse GstMpegvParse; typedef struct _GstMpegvParseClass GstMpegvParseClass; +/* Config/sequence flags. Reset each time config is re-parsed */ +enum { + FLAG_NONE = 0, + FLAG_MPEG2 = 1, + FLAG_SEQUENCE_EXT = 2, + FLAG_SEQUENCE_DISPLAY_EXT = 4 +}; + struct _GstMpegvParse { GstBaseParse element; @@ -62,9 +70,10 @@ struct _GstMpegvParse { GstBuffer *config; guint8 profile; - guint mpeg_version; + guint config_flags; GstMpegVideoSequenceHdr sequencehdr; GstMpegVideoSequenceExt sequenceext; + GstMpegVideoSequenceDisplayExt sequencedispext; GstMpegVideoPictureHdr pichdr; /* properties */ diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in index e4ee90d4..3e43897d 100644 --- a/gst/videosignal/Makefile.in +++ b/gst/videosignal/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in index eef36bf3..0774925c 100644 --- a/gst/vmnc/Makefile.in +++ b/gst/vmnc/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in index c94d4466..850c7233 100644 --- a/gst/y4m/Makefile.in +++ b/gst/y4m/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/m4/Makefile.in b/m4/Makefile.in index 7d339045..56b5bbc7 100644 --- a/m4/Makefile.in +++ b/m4/Makefile.in @@ -274,6 +274,8 @@ 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@ @@ -281,6 +283,8 @@ 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@ @@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -323,6 +326,10 @@ 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@ @@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in index 608619eb..6abf1571 100644 --- a/pkgconfig/Makefile.in +++ b/pkgconfig/Makefile.in @@ -313,6 +313,8 @@ 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@ @@ -320,6 +322,8 @@ 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@ @@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -362,6 +365,10 @@ 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@ @@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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 780e254a..58bc9b3e 100644 --- a/po/en_GB.gmo +++ b/po/en_GB.gmo diff --git a/po/en_GB.po b/po/en_GB.po index 42e03ebc..f524e589 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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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 25aa1724..ffec41c8 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 0.11.93\n" +"Project-Id-Version: gst-plugins-bad 0.11.94\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2012-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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" @@ -16,26 +16,26 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ext/resindvd/resindvdsrc.c:366 +#: ext/resindvd/resindvdsrc.c:359 msgid "Could not read title information for DVD." msgstr "" -#: ext/resindvd/resindvdsrc.c:372 +#: ext/resindvd/resindvdsrc.c:365 #, c-format msgid "Failed to open DVD device '%s'." msgstr "" -#: ext/resindvd/resindvdsrc.c:378 +#: ext/resindvd/resindvdsrc.c:371 msgid "Failed to set PGC based seeking." msgstr "" -#: ext/resindvd/resindvdsrc.c:1153 +#: ext/resindvd/resindvdsrc.c:1148 msgid "" "Could not read DVD. This may be because the DVD is encrypted and a DVD " "decryption library is not installed." msgstr "" -#: ext/resindvd/resindvdsrc.c:1158 ext/resindvd/resindvdsrc.c:1166 +#: ext/resindvd/resindvdsrc.c:1153 ext/resindvd/resindvdsrc.c:1162 msgid "Could not read DVD." msgstr "" @@ -61,22 +61,22 @@ msgstr "" msgid "Internal data flow error." msgstr "" -#: sys/dvb/gstdvbsrc.c:744 sys/dvb/gstdvbsrc.c:841 +#: sys/dvb/gstdvbsrc.c:758 sys/dvb/gstdvbsrc.c:855 #, c-format msgid "Device \"%s\" does not exist." msgstr "" -#: sys/dvb/gstdvbsrc.c:748 +#: sys/dvb/gstdvbsrc.c:762 #, c-format msgid "Could not open frontend device \"%s\"." msgstr "" -#: sys/dvb/gstdvbsrc.c:762 +#: sys/dvb/gstdvbsrc.c:776 #, c-format msgid "Could not get settings from frontend device \"%s\"." msgstr "" -#: sys/dvb/gstdvbsrc.c:845 +#: sys/dvb/gstdvbsrc.c:859 #, c-format msgid "Could not open file \"%s\" for reading." msgstr "" 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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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 95492dda..7859d1e7 100644 --- a/po/pt_BR.gmo +++ b/po/pt_BR.gmo diff --git a/po/pt_BR.po b/po/pt_BR.po index 96abf491..ba9ca1c0 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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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 89579aec..c8a8fefd 100644 --- a/po/zh_CN.gmo +++ b/po/zh_CN.gmo diff --git a/po/zh_CN.po b/po/zh_CN.po index e28d5342..dbaae832 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-08-08 12:04+0100\n" +"POT-Creation-Date: 2012-09-14 02:04+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 d1a29b34..d79d2232 100644 --- a/sys/Makefile.am +++ b/sys/Makefile.am @@ -130,9 +130,15 @@ else WINSCREENCAP_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) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) +if USE_UVCH264 +UVCH264_DIR=uvch264 +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) DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \ - osxvideo pvr2d qtwrapper shm vcd vdpau wasapi wininet winks winscreencap + 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 28bdd303..8d1f783f 100644 --- a/sys/Makefile.in +++ b/sys/Makefile.in @@ -319,6 +319,8 @@ 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@ @@ -326,6 +328,8 @@ 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@ @@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -368,6 +371,10 @@ 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@ @@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -640,9 +648,11 @@ top_srcdir = @top_srcdir@ #VDPAU_DIR= #endif @USE_DIRECT3D9_TRUE@WINSCREENCAP_DIR = winscreencap -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) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR) +@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 vcd vdpau wasapi wininet winks winscreencap + 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 9077a7d3..4f399086 100644 --- a/sys/acmenc/Makefile.in +++ b/sys/acmenc/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in index 56cc8214..766742e4 100644 --- a/sys/acmmp3dec/Makefile.in +++ b/sys/acmmp3dec/Makefile.in @@ -338,6 +338,8 @@ 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@ @@ -345,6 +347,8 @@ 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@ @@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -387,6 +390,10 @@ 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@ @@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in index d67e3ec2..117f15c5 100644 --- a/sys/applemedia/Makefile.in +++ b/sys/applemedia/Makefile.in @@ -397,6 +397,8 @@ 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@ @@ -404,6 +406,8 @@ 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@ @@ -418,7 +422,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -446,6 +449,10 @@ 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@ @@ -572,6 +579,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in index 9e06a2e4..8b79ce1a 100644 --- a/sys/avc/Makefile.in +++ b/sys/avc/Makefile.in @@ -342,6 +342,8 @@ 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@ @@ -349,6 +351,8 @@ 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@ @@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -391,6 +394,10 @@ 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@ @@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in index 9644a3a0..86405325 100644 --- a/sys/d3dvideosink/Makefile.in +++ b/sys/d3dvideosink/Makefile.in @@ -348,6 +348,8 @@ 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@ @@ -355,6 +357,8 @@ 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@ @@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +400,10 @@ 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@ @@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/d3dvideosink/d3dvideosink.c b/sys/d3dvideosink/d3dvideosink.c index 7f437c41..2284ee66 100644 --- a/sys/d3dvideosink/d3dvideosink.c +++ b/sys/d3dvideosink/d3dvideosink.c @@ -319,7 +319,7 @@ gst_d3dvideosink_init (GstD3DVideoSink * sink) { gst_d3dvideosink_clear (sink); - sink->d3d_device_lock = g_mutex_new (); + g_mutex_init (&sink->d3d_device_lock); sink->par = g_new0 (GValue, 1); g_value_init (sink->par, GST_TYPE_FRACTION); @@ -341,8 +341,7 @@ gst_d3dvideosink_finalize (GObject * gobject) sink->par = NULL; } - g_mutex_free (sink->d3d_device_lock); - sink->d3d_device_lock = NULL; + g_mutex_clear (&sink->d3d_device_lock); G_OBJECT_CLASS (parent_class)->finalize (gobject); } @@ -526,8 +525,8 @@ gst_d3dvideosink_create_shared_hidden_window (GstD3DVideoSink * sink) if (shared.hidden_window_created_signal == NULL) goto failed; - shared.hidden_window_thread = g_thread_create ((GThreadFunc) - gst_d3dvideosink_shared_hidden_window_thread, sink, TRUE, NULL); + shared.hidden_window_thread = g_thread_try_new ("shared hidden window thread", + (GThreadFunc) gst_d3dvideosink_shared_hidden_window_thread, sink, NULL); /* wait maximum 60 seconds for window to be created */ if (WaitForSingleObject (shared.hidden_window_created_signal, @@ -1044,9 +1043,8 @@ gst_d3dvideosink_create_default_window (GstD3DVideoSink * sink) if (sink->window_created_signal == NULL) goto failed; - sink->window_thread = - g_thread_create ((GThreadFunc) gst_d3dvideosink_window_thread, sink, TRUE, - NULL); + sink->window_thread = g_thread_try_new ("window thread", + (GThreadFunc) gst_d3dvideosink_window_thread, sink, NULL); /* wait maximum 10 seconds for window to be created */ if (WaitForSingleObject (sink->window_created_signal, 10000) != WAIT_OBJECT_0) diff --git a/sys/d3dvideosink/d3dvideosink.h b/sys/d3dvideosink/d3dvideosink.h index 6d9b4957..04f4d61c 100644 --- a/sys/d3dvideosink/d3dvideosink.h +++ b/sys/d3dvideosink/d3dvideosink.h @@ -63,17 +63,15 @@ G_BEGIN_DECLS typedef struct _GstD3DVideoSink GstD3DVideoSink; typedef struct _GstD3DVideoSinkClass GstD3DVideoSinkClass; -#define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) -#define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) -#define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (GST_D3DVIDEOSINK (sink)->d3d_device_lock) +#define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock) +#define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock) +#define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock) struct _GstD3DVideoSink { GstVideoSink sink; /* source rectangle */ - //gint width; - //gint height; GstVideoFormat format; GstVideoInfo info; @@ -100,7 +98,7 @@ struct _GstD3DVideoSink WNDPROC prevWndProc; gboolean is_hooked; - GMutex *d3d_device_lock; + GMutex d3d_device_lock; LPDIRECT3DSURFACE9 d3d_offscreen_surface; LPDIRECT3DDEVICE9 d3ddev; D3DPRESENT_PARAMETERS d3dpp; diff --git a/sys/d3dvideosink/directx/dx.c b/sys/d3dvideosink/directx/dx.c index b52e51f5..4c683b35 100644 --- a/sys/d3dvideosink/directx/dx.c +++ b/sys/d3dvideosink/directx/dx.c @@ -46,8 +46,8 @@ init_supported_apis (void) static DirectXAPI *directx_determine_best_available_api (void); /* Mutex macros */ -#define DIRECTX_LOCK g_static_rec_mutex_lock (&dx_lock); -#define DIRECTX_UNLOCK g_static_rec_mutex_unlock (&dx_lock); +#define DIRECTX_LOCK g_rec_mutex_lock (&dx_lock); +#define DIRECTX_UNLOCK g_rec_mutex_unlock (&dx_lock); typedef struct _DirectXInfo DirectXInfo; struct _DirectXInfo @@ -63,7 +63,7 @@ struct _DirectXInfo /* Private vars */ static DirectXInfo dx; -static GStaticRecMutex dx_lock = G_STATIC_REC_MUTEX_INIT; +static GRecMutex dx_lock; gboolean directx_initialize (DirectXInitParams * init_params) diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in index 5075d2dc..6882b41b 100644 --- a/sys/decklink/Makefile.in +++ b/sys/decklink/Makefile.in @@ -360,6 +360,8 @@ 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@ @@ -367,6 +369,8 @@ 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@ @@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -409,6 +412,10 @@ 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@ @@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp index 023569fc..7ce9ecc5 100644 --- a/sys/decklink/gstdecklinksink.cpp +++ b/sys/decklink/gstdecklinksink.cpp @@ -527,6 +527,11 @@ gst_decklink_sink_stop (GstDecklinkSink * decklinksink) decklinksink->output->DisableAudioOutput (); decklinksink->output->DisableVideoOutput (); + decklinksink->output->Release (); + decklinksink->output = NULL; + decklinksink->decklink->Release (); + decklinksink->decklink = NULL; + return TRUE; } diff --git a/sys/directdraw/Makefile.in b/sys/directdraw/Makefile.in index 815174b1..06adaa18 100644 --- a/sys/directdraw/Makefile.in +++ b/sys/directdraw/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in index 4cc4b9db..b4e4384e 100644 --- a/sys/directsound/Makefile.in +++ b/sys/directsound/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in index cf7f3a26..2546e802 100644 --- a/sys/dshowdecwrapper/Makefile.in +++ b/sys/dshowdecwrapper/Makefile.in @@ -347,6 +347,8 @@ 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@ @@ -354,6 +356,8 @@ 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@ @@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -396,6 +399,10 @@ 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@ @@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in index bbf3635c..1004074c 100644 --- a/sys/dshowsrcwrapper/Makefile.in +++ b/sys/dshowsrcwrapper/Makefile.in @@ -277,6 +277,8 @@ 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@ @@ -284,6 +286,8 @@ 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@ @@ -298,7 +302,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -326,6 +329,10 @@ 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@ @@ -452,6 +459,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in index 9408752a..0dbbdcc0 100644 --- a/sys/dshowvideosink/Makefile.in +++ b/sys/dshowvideosink/Makefile.in @@ -277,6 +277,8 @@ 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@ @@ -284,6 +286,8 @@ 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@ @@ -298,7 +302,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -326,6 +329,10 @@ 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@ @@ -452,6 +459,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in index 1795b961..093621e9 100644 --- a/sys/dvb/Makefile.in +++ b/sys/dvb/Makefile.in @@ -350,6 +350,8 @@ 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@ @@ -357,6 +359,8 @@ 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@ @@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -399,6 +402,10 @@ 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@ @@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/dvb/camconditionalaccess.c b/sys/dvb/camconditionalaccess.c index fbb8a39f..6d8bf297 100644 --- a/sys/dvb/camconditionalaccess.c +++ b/sys/dvb/camconditionalaccess.c @@ -191,6 +191,46 @@ handle_conditional_access_info_reply (CamConditionalAccess * cas, } static CamReturn +handle_conditional_access_pmt_reply (CamConditionalAccess * cas, + CamSLSession * session, guint8 * buffer, guint length) +{ + guint16 program_num; + guint8 version_num, current_next_indicator; + + GST_INFO ("conditional access PMT reply"); + + program_num = GST_READ_UINT16_BE (buffer); + buffer += 2; + + GST_INFO ("program_number : %d", program_num); + + version_num = *buffer >> 1 & 0x1f; + current_next_indicator = *buffer & 0x1; + buffer++; + + GST_INFO ("version_num:%d, current_next_indicator:%d", + version_num, current_next_indicator); + + GST_INFO ("CA_enable : %d (0x%x)", *buffer >> 7 ? *buffer & 0x7f : 0, + *buffer); + buffer++; + + length -= 4; + + while (length > 0) { + guint16 PID = GST_READ_UINT16_BE (buffer); + buffer += 2; + GST_INFO ("PID 0x%x CA_enable : %d (0x%x)", PID, + *buffer >> 7 ? *buffer & 0x7f : 0, *buffer); + buffer++; + + length -= 3; + } + + return CAM_RETURN_OK; +} + +static CamReturn data_impl (CamALApplication * application, CamSLSession * session, guint tag, guint8 * buffer, guint length) { @@ -201,7 +241,11 @@ data_impl (CamALApplication * application, CamSLSession * session, case TAG_CONDITIONAL_ACCESS_INFO_REPLY: ret = handle_conditional_access_info_reply (cas, session, buffer, length); break; + case TAG_CONDITIONAL_ACCESS_PMT_REPLY: + ret = handle_conditional_access_pmt_reply (cas, session, buffer, length); + break; default: + GST_WARNING ("Got unknown callback, tag 0x%x", tag); g_return_val_if_reached (CAM_RETURN_ERROR); } diff --git a/sys/dvb/camdevice.c b/sys/dvb/camdevice.c index d38d625a..0a160ceb 100644 --- a/sys/dvb/camdevice.c +++ b/sys/dvb/camdevice.c @@ -104,6 +104,7 @@ cam_device_open (CamDevice * device, const char *filename) ca_caps_t ca_caps; int ret; int i; + int count = 10; g_return_val_if_fail (device != NULL, FALSE); g_return_val_if_fail (device->state == CAM_DEVICE_STATE_CLOSED, FALSE); @@ -117,17 +118,31 @@ cam_device_open (CamDevice * device, const char *filename) return FALSE; } + GST_DEBUG ("Successfully opened device %s", filename); + device->fd = ret; ret = ioctl (device->fd, CA_RESET); - sleep (1); - /* get the capabilities of the CA */ - ret = ioctl (device->fd, CA_GET_CAP, &ca_caps); - if (ret == -1) { - GST_ERROR ("CA_GET_CAP ioctl failed: %s", strerror (errno)); - reset_state (device); - return FALSE; + g_usleep (G_USEC_PER_SEC / 10); + + while (TRUE) { + /* get the capabilities of the CA */ + ret = ioctl (device->fd, CA_GET_CAP, &ca_caps); + if (ret == -1) { + GST_ERROR ("CA_GET_CAP ioctl failed: %s", strerror (errno)); + reset_state (device); + return FALSE; + } + if (ca_caps.slot_num > 0) + break; + if (!count) { + GST_ERROR ("CA_GET_CAP succeeded but not slots"); + reset_state (device); + return FALSE; + } + count--; + g_usleep (G_USEC_PER_SEC / 5); } device->tl = cam_tl_new (device->fd); diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c index c8e66499..e2ba8c48 100644 --- a/sys/dvb/dvbbasebin.c +++ b/sys/dvb/dvbbasebin.c @@ -34,14 +34,14 @@ GST_DEBUG_CATEGORY_STATIC (dvb_base_bin_debug); #define GST_CAT_DEFAULT dvb_base_bin_debug static GstStaticPadTemplate src_template = -GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC, - GST_PAD_REQUEST, +GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, + GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ") ); static GstStaticPadTemplate program_template = GST_STATIC_PAD_TEMPLATE ("program_%u", GST_PAD_SRC, - GST_PAD_SOMETIMES, + GST_PAD_REQUEST, GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ") ); @@ -108,20 +108,26 @@ static void dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin, const GstStructure * pat); static void dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin, const GstStructure * pmt); -static void dvb_base_bin_pad_added_cb (GstElement * mpegtsparse, - GstPad * pad, DvbBaseBin * dvbbasebin); -static void dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse, - GstPad * pad, DvbBaseBin * dvbbasebin); static GstPad *dvb_base_bin_request_new_pad (GstElement * element, GstPadTemplate * templ, const gchar * name, const GstCaps * caps); static void dvb_base_bin_release_pad (GstElement * element, GstPad * pad); static void dvb_base_bin_rebuild_filter (DvbBaseBin * dvbbasebin); +static void +dvb_base_bin_deactivate_program (DvbBaseBin * dvbbasebin, + DvbBaseBinProgram * program); static void dvb_base_bin_uri_handler_init (gpointer g_iface, gpointer iface_data); static void dvb_base_bin_program_destroy (gpointer data); +#define dvb_base_bin_parent_class parent_class +G_DEFINE_TYPE_EXTENDED (DvbBaseBin, dvb_base_bin, GST_TYPE_BIN, + 0, + G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, + dvb_base_bin_uri_handler_init)); + + static DvbBaseBinStream * dvb_base_bin_add_stream (DvbBaseBin * dvbbasebin, guint16 pid) { @@ -175,11 +181,6 @@ dvb_base_bin_get_program (DvbBaseBin * dvbbasebin, gint program_number) static guint signals [LAST_SIGNAL] = { 0 }; */ -#define dvb_base_bin_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (DvbBaseBin, dvb_base_bin, GST_TYPE_BIN, - G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, - dvb_base_bin_uri_handler_init)); - static void dvb_base_bin_class_init (DvbBaseBinClass * klass) { @@ -217,6 +218,7 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass) bin_class->handle_message = dvb_base_bin_handle_message; element_class = GST_ELEMENT_CLASS (klass); + element_class->change_state = dvb_base_bin_change_state; element_class->request_new_pad = dvb_base_bin_request_new_pad; element_class->release_pad = dvb_base_bin_release_pad; @@ -306,12 +308,6 @@ dvb_base_bin_reset (DvbBaseBin * dvbbasebin) cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; } - - if (dvbbasebin->ts_pad) { - gst_element_release_request_pad (GST_ELEMENT (dvbbasebin->mpegtsparse), - dvbbasebin->ts_pad); - dvbbasebin->ts_pad = NULL; - } } static gint16 initial_pids[] = { 0, 1, 0x10, 0x11, 0x12, 0x14, -1 }; @@ -320,21 +316,28 @@ static void dvb_base_bin_init (DvbBaseBin * dvbbasebin) { DvbBaseBinStream *stream; + GstPad *ghost, *pad; int i; dvbbasebin->dvbsrc = gst_element_factory_make ("dvbsrc", NULL); dvbbasebin->buffer_queue = gst_element_factory_make ("queue", NULL); - dvbbasebin->mpegtsparse = gst_element_factory_make ("mpegtsparse", NULL); + dvbbasebin->tsparse = gst_element_factory_make ("tsparse", NULL); - g_object_connect (dvbbasebin->mpegtsparse, - "signal::pad-added", dvb_base_bin_pad_added_cb, dvbbasebin, - "signal::pad-removed", dvb_base_bin_pad_removed_cb, dvbbasebin, NULL); + g_object_set (dvbbasebin->buffer_queue, "max-size-buffers", 0, + "max-size-bytes", 0, "max-size-time", 0, NULL); gst_bin_add_many (GST_BIN (dvbbasebin), dvbbasebin->dvbsrc, - dvbbasebin->buffer_queue, dvbbasebin->mpegtsparse, NULL); + dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL); gst_element_link_many (dvbbasebin->dvbsrc, - dvbbasebin->buffer_queue, dvbbasebin->mpegtsparse, NULL); + dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL); + + /* Expose tsparse source pad */ + pad = gst_element_get_static_pad (dvbbasebin->tsparse, "src"); + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM, + dvb_base_bin_ts_pad_probe_cb, dvbbasebin, NULL); + ghost = gst_ghost_pad_new ("src", pad); + gst_element_add_pad (GST_ELEMENT (dvbbasebin), ghost); dvbbasebin->programs = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, dvb_base_bin_program_destroy); @@ -366,7 +369,7 @@ dvb_base_bin_dispose (GObject * object) /* remove mpegtsparse BEFORE dvbsrc, since the mpegtsparse::pad-removed * signal handler uses dvbsrc */ dvb_base_bin_reset (dvbbasebin); - gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->mpegtsparse); + gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->tsparse); gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->dvbsrc); gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->buffer_queue); dvbbasebin->disposed = TRUE; @@ -390,6 +393,37 @@ dvb_base_bin_finalize (GObject * object) } static void +dvb_base_bin_set_program_numbers (DvbBaseBin * dvbbasebin, const gchar * pn) +{ + gchar **strv, **walk; + DvbBaseBinProgram *program; + + /* Split up and update programs */ + strv = g_strsplit (pn, ":", 0); + + for (walk = strv; *walk; walk++) { + gint program_number = strtol (*walk, NULL, 0); + + program = dvb_base_bin_get_program (dvbbasebin, program_number); + if (program == NULL) { + program = dvb_base_bin_add_program (dvbbasebin, program_number); + program->selected = TRUE; + } + } + + g_strfreev (strv); + + /* FIXME : Deactivate programs no longer selected */ + + if (dvbbasebin->program_numbers) + g_free (dvbbasebin->program_numbers); + dvbbasebin->program_numbers = g_strdup (pn); + + if (0) + dvb_base_bin_deactivate_program (dvbbasebin, NULL); +} + +static void dvb_base_bin_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { @@ -415,8 +449,7 @@ dvb_base_bin_set_property (GObject * object, guint prop_id, g_object_set_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value); break; case PROP_PROGRAM_NUMBERS: - g_object_set_property (G_OBJECT (dvbbasebin->mpegtsparse), pspec->name, - value); + dvb_base_bin_set_program_numbers (dvbbasebin, g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -448,8 +481,7 @@ dvb_base_bin_get_property (GObject * object, guint prop_id, g_object_get_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value); break; case PROP_PROGRAM_NUMBERS: - g_object_get_property (G_OBJECT (dvbbasebin->mpegtsparse), pspec->name, - value); + g_value_set_string (value, dvbbasebin->program_numbers); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -464,12 +496,12 @@ dvb_base_bin_request_new_pad (GstElement * element, GstPad *ghost; gchar *pad_name; + GST_DEBUG ("New pad requested %s", name); + if (name == NULL) name = GST_PAD_TEMPLATE_NAME_TEMPLATE (templ); - pad = - gst_element_get_request_pad (GST_DVB_BASE_BIN (element)->mpegtsparse, - name); + pad = gst_element_get_request_pad (GST_DVB_BASE_BIN (element)->tsparse, name); if (pad == NULL) return NULL; @@ -477,7 +509,6 @@ dvb_base_bin_request_new_pad (GstElement * element, ghost = gst_ghost_pad_new (pad_name, pad); g_free (pad_name); gst_element_add_pad (element, ghost); - gst_element_no_more_pads (element); return ghost; } @@ -493,7 +524,7 @@ dvb_base_bin_release_pad (GstElement * element, GstPad * pad) ghost = GST_GHOST_PAD (pad); target = gst_ghost_pad_get_target (ghost); gst_element_release_request_pad (GST_ELEMENT (GST_DVB_BASE_BIN - (element)->mpegtsparse), target); + (element)->tsparse), target); gst_object_unref (target); gst_element_remove_pad (element, pad); @@ -562,14 +593,8 @@ dvb_base_bin_init_cam (DvbBaseBin * dvbbasebin) ca_file = g_strdup_printf ("/dev/dvb/adapter%d/ca0", adapter); if (g_file_test (ca_file, G_FILE_TEST_EXISTS)) { dvbbasebin->hwcam = cam_device_new (); - if (cam_device_open (dvbbasebin->hwcam, ca_file)) { - /* HACK: poll the cam in a buffer probe */ - dvbbasebin->ts_pad = - gst_element_get_request_pad (dvbbasebin->mpegtsparse, "src_%u"); - gst_pad_add_probe (dvbbasebin->ts_pad, - GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, dvb_base_bin_ts_pad_probe_cb, - dvbbasebin, NULL); - } else { + /* device_open() can block up to 5s ! */ + if (!cam_device_open (dvbbasebin->hwcam, ca_file)) { GST_ERROR_OBJECT (dvbbasebin, "could not open %s", ca_file); cam_device_free (dvbbasebin->hwcam); dvbbasebin->hwcam = NULL; @@ -784,7 +809,7 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message) dvbbasebin = GST_DVB_BASE_BIN (bin); if (message->type == GST_MESSAGE_ELEMENT && - GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->mpegtsparse)) { + GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->tsparse)) { const GstStructure *s = gst_message_get_structure (message); const gchar *structure_name = gst_structure_get_name (s); @@ -792,20 +817,10 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message) dvb_base_bin_pat_info_cb (dvbbasebin, s); else if (strcmp (structure_name, "pmt") == 0) dvb_base_bin_pmt_info_cb (dvbbasebin, s); - - /*else if (strcmp (structure_name, "nit") == 0) - dvb_base_bin_nit_info_cb (dvbbasebin, message->structure); - else if (strcmp (structure_name, "sdt") == 0) - dvb_base_bin_sdt_info_cb (dvbbasebin, message->structure); - else if (strcmp (structure_name, "eit") == 0) - dvb_base_bin_eit_info_cb (dvbbasebin, message->structure); */ - /* forward the message on */ - gst_element_post_message (GST_ELEMENT_CAST (bin), message); - } else { - /* chain up */ - GST_BIN_CLASS (parent_class)->handle_message (bin, message); } + /* chain up */ + GST_BIN_CLASS (parent_class)->handle_message (bin, message); } @@ -888,73 +903,6 @@ dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin, const GstStructure * pmt) } } -static gint -get_pad_program_number (GstPad * pad) -{ - gchar *progstr; - gchar *name; - - name = gst_pad_get_name (pad); - - if (strncmp (name, "program_", 8) != 0) { - g_free (name); - return -1; - } - - progstr = strstr (name, "_"); - g_free (name); - if (progstr == NULL) - return -1; - - return strtol (++progstr, NULL, 10); -} - -static void -dvb_base_bin_pad_added_cb (GstElement * mpegtsparse, - GstPad * pad, DvbBaseBin * dvbbasebin) -{ - DvbBaseBinProgram *program; - gint program_number; - gchar *padname; - - program_number = get_pad_program_number (pad); - if (program_number == -1) - return; - - program = dvb_base_bin_get_program (dvbbasebin, program_number); - if (program == NULL) - program = dvb_base_bin_add_program (dvbbasebin, program_number); - program->selected = TRUE; - padname = gst_pad_get_name (pad); - program->ghost = gst_ghost_pad_new (padname, pad); - gst_pad_set_active (program->ghost, TRUE); - gst_element_add_pad (GST_ELEMENT (dvbbasebin), program->ghost); - gst_element_no_more_pads (GST_ELEMENT (dvbbasebin)); - /* if the program has a pmt, activate it now, otherwise it will get activated - * when there's a PMT */ - if (!program->active && program->pmt_pid != G_MAXUINT16) - dvb_base_bin_activate_program (dvbbasebin, program); - g_free (padname); -} - -static void -dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse, - GstPad * pad, DvbBaseBin * dvbbasebin) -{ - DvbBaseBinProgram *program; - gint program_number; - - program_number = get_pad_program_number (pad); - if (program_number == -1) - return; - - program = dvb_base_bin_get_program (dvbbasebin, program_number); - program->selected = FALSE; - dvb_base_bin_deactivate_program (dvbbasebin, program); - gst_element_remove_pad (GST_ELEMENT (dvbbasebin), program->ghost); - program->ghost = NULL; -} - static guint dvb_base_bin_uri_get_type (GType type) { diff --git a/sys/dvb/dvbbasebin.h b/sys/dvb/dvbbasebin.h index 3389283c..20ff2422 100644 --- a/sys/dvb/dvbbasebin.h +++ b/sys/dvb/dvbbasebin.h @@ -47,11 +47,9 @@ typedef struct _DvbBaseBinClass DvbBaseBinClass; struct _DvbBaseBin { GstBin bin; - GstPad *ts_pad; - GstElement *dvbsrc; GstElement *buffer_queue; - GstElement *mpegtsparse; + GstElement *tsparse; CamDevice *hwcam; GList *pmtlist; gboolean pmtlist_changed; @@ -59,6 +57,9 @@ struct _DvbBaseBin { GHashTable *streams; GHashTable *programs; gboolean disposed; + + /* Cached value */ + gchar *program_numbers; }; struct _DvbBaseBinClass { diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c index 3a83a40d..00eddc42 100644 --- a/sys/dvb/gstdvbsrc.c +++ b/sys/dvb/gstdvbsrc.c @@ -90,6 +90,7 @@ enum ARG_DVBSRC_INVERSION, ARG_DVBSRC_STATS_REPORTING_INTERVAL, ARG_DVBSRC_TIMEOUT, + ARG_DVBSRC_DVB_BUFFER_SIZE }; #define DEFAULT_ADAPTER 0 @@ -109,7 +110,7 @@ enum #define DEFAULT_INVERSION INVERSION_ON #define DEFAULT_STATS_REPORTING_INTERVAL 100 #define DEFAULT_TIMEOUT 1000000 /* 1 second */ - +#define DEFAULT_DVB_BUFFER_SIZE (10*188*1024) /* Default is the same as the kernel default */ #define DEFAULT_BUFFER_SIZE 8192 /* not a property */ static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src); @@ -447,6 +448,13 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass) g_param_spec_uint64 ("timeout", "Timeout", "Post a message after timeout microseconds (0 = disabled)", 0, G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE)); + + g_object_class_install_property (gobject_class, + ARG_DVBSRC_DVB_BUFFER_SIZE, + g_param_spec_uint ("dvb-buffer-size", + "dvb-buffer-size", + "The kernel buffer size used by the DVB api", + 0, G_MAXUINT, DEFAULT_DVB_BUFFER_SIZE, G_PARAM_READWRITE)); } /* initialize the new element @@ -475,7 +483,7 @@ gst_dvbsrc_init (GstDvbSrc * object) } /* Pid 8192 on DVB gets the whole transport stream */ object->pids[0] = 8192; - + object->dvb_buffer_size = DEFAULT_DVB_BUFFER_SIZE; object->adapter_number = DEFAULT_ADAPTER; object->frontend_number = DEFAULT_FRONTEND; object->diseqc_src = DEFAULT_DISEQC_SRC; @@ -638,6 +646,9 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id, case ARG_DVBSRC_TIMEOUT: object->timeout = g_value_get_uint64 (value); break; + case ARG_DVBSRC_DVB_BUFFER_SIZE: + object->dvb_buffer_size = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -704,6 +715,9 @@ gst_dvbsrc_get_property (GObject * _object, guint prop_id, case ARG_DVBSRC_TIMEOUT: g_value_set_uint64 (value, object->timeout); break; + case ARG_DVBSRC_DVB_BUFFER_SIZE: + g_value_set_uint (value, object->dvb_buffer_size); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -850,9 +864,11 @@ gst_dvbsrc_open_dvr (GstDvbSrc * object) return FALSE; } g_free (dvr_dev); - GST_INFO_OBJECT (object, "Setting buffer size"); - if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, 1024 * 1024) < 0) { - GST_INFO_OBJECT (object, "DMX_SET_BUFFER_SIZE failed"); + + GST_INFO_OBJECT (object, "Setting DVB kernel buffer size to %d ", + object->dvb_buffer_size); + if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, object->dvb_buffer_size) < 0) { + GST_INFO_OBJECT (object, "ioctl DMX_SET_BUFFER_SIZE failed (%d)", errno); return FALSE; } return TRUE; @@ -1004,6 +1020,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf) } g_mutex_unlock (&object->tune_mutex); + return retval; } diff --git a/sys/dvb/gstdvbsrc.h b/sys/dvb/gstdvbsrc.h index e290f4d6..adf6c0ed 100644 --- a/sys/dvb/gstdvbsrc.h +++ b/sys/dvb/gstdvbsrc.h @@ -7,12 +7,12 @@ G_BEGIN_DECLS - typedef enum - { - DVB_POL_H, - DVB_POL_V, - DVB_POL_ZERO - } GstDvbSrcPol; + typedef enum +{ + DVB_POL_H, + DVB_POL_V, + DVB_POL_ZERO +} GstDvbSrcPol; #define IPACKS 2048 @@ -32,63 +32,65 @@ G_BEGIN_DECLS #define GST_IS_DVBSRC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVBSRC)) - typedef struct _GstDvbSrc GstDvbSrc; - typedef struct _GstDvbSrcClass GstDvbSrcClass; - typedef struct _GstDvbSrcParam GstDvbSrcParam; +typedef struct _GstDvbSrc GstDvbSrc; +typedef struct _GstDvbSrcClass GstDvbSrcClass; +typedef struct _GstDvbSrcParam GstDvbSrcParam; - struct _GstDvbSrc - { - GstPushSrc element; - GstPad *srcpad; +struct _GstDvbSrc +{ + GstPushSrc element; + GstPad *srcpad; - GMutex tune_mutex; - gboolean need_tune; + GMutex tune_mutex; + gboolean need_tune; - int adapter_type; + int adapter_type; - int adapter_number; /* the device directory with the sub-devices */ - int frontend_number; + int adapter_number; /* the device directory with the sub-devices */ + int frontend_number; - int fd_frontend; - int fd_dvr; - int fd_filters[MAX_FILTERS]; - GstPoll *poll; - GstPollFD poll_fd_dvr; + int fd_frontend; + int fd_dvr; + int fd_filters[MAX_FILTERS]; + GstPoll *poll; + GstPollFD poll_fd_dvr; - guint16 pids[MAX_FILTERS]; - unsigned int freq; - unsigned int sym_rate; - int tone; - int diseqc_src; - gboolean send_diseqc; + guint16 pids[MAX_FILTERS]; + unsigned int freq; + unsigned int sym_rate; + int tone; + int diseqc_src; + gboolean send_diseqc; - int bandwidth; - int code_rate_hp; - int code_rate_lp; - int modulation; - int guard_interval; - int transmission_mode; - int hierarchy_information; - int inversion; - guint64 timeout; + int bandwidth; + int code_rate_hp; + int code_rate_lp; + int modulation; + int guard_interval; + int transmission_mode; + int hierarchy_information; + int inversion; + guint64 timeout; - GstDvbSrcPol pol; - guint stats_interval; - guint stats_counter; - }; + GstDvbSrcPol pol; + guint stats_interval; + guint stats_counter; + gboolean need_unlock; - struct _GstDvbSrcClass - { - GstPushSrcClass parent_class; + guint dvb_buffer_size; +}; - void (*adapter_type) (GstElement * element, gint type); - void (*signal_quality) (GstElement * element, gint strength, gint snr); - }; +struct _GstDvbSrcClass +{ + GstPushSrcClass parent_class; + void (*adapter_type) (GstElement * element, gint type); + void (*signal_quality) (GstElement * element, gint strength, gint snr); +}; - GType gst_dvbsrc_get_type (void); - gboolean gst_dvbsrc_plugin_init (GstPlugin *plugin); -G_END_DECLS +GType gst_dvbsrc_get_type (void); +gboolean gst_dvbsrc_plugin_init (GstPlugin * plugin); -#endif /* __GST_DVBSRC_H__ */ +G_END_DECLS +#endif /* __GST_DVBSRC_H__ */ diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in index 10fd542e..5d583178 100644 --- a/sys/fbdev/Makefile.in +++ b/sys/fbdev/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in index dab647b9..6c9f898a 100644 --- a/sys/linsys/Makefile.in +++ b/sys/linsys/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in index 4e91c69d..490bd1b6 100644 --- a/sys/osxvideo/Makefile.in +++ b/sys/osxvideo/Makefile.in @@ -343,6 +343,8 @@ 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@ @@ -350,6 +352,8 @@ 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@ @@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -392,6 +395,10 @@ 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@ @@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in index 41195b46..bdb942a8 100644 --- a/sys/pvr2d/Makefile.in +++ b/sys/pvr2d/Makefile.in @@ -345,6 +345,8 @@ 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@ @@ -352,6 +354,8 @@ 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@ @@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -394,6 +397,10 @@ 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@ @@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/qtwrapper/Makefile.in b/sys/qtwrapper/Makefile.in index cdbfef8e..48be193c 100644 --- a/sys/qtwrapper/Makefile.in +++ b/sys/qtwrapper/Makefile.in @@ -346,6 +346,8 @@ 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@ @@ -353,6 +355,8 @@ 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@ @@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -395,6 +398,10 @@ 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@ @@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/shm/Makefile.am b/sys/shm/Makefile.am index f62e20e1..ec11cfff 100644 --- a/sys/shm/Makefile.am +++ b/sys/shm/Makefile.am @@ -1,7 +1,3 @@ -glib_enum_prefix = gst_shm - -include $(top_srcdir)/common/glib-gen.mak - plugin_LTLIBRARIES = libgstshm.la libgstshm_la_SOURCES = shmpipe.c shmalloc.c gstshm.c gstshmsrc.c gstshmsink.c diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in index 377d8524..a9fd6768 100644 --- a/sys/shm/Makefile.in +++ b/sys/shm/Makefile.in @@ -15,13 +15,6 @@ @SET_MAKE@ -# these are the variables your Makefile.am should set -# the example is based on the colorbalance interface - -#glib_enum_headers=$(colorbalance_headers) -#glib_enum_define=GST_COLOR_BALANCE -#glib_enum_prefix=gst_color_balance - VPATH = @srcdir@ am__make_dryrun = \ @@ -60,9 +53,9 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/common/glib-gen.mak subdir = sys/shm +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 \ @@ -348,6 +341,8 @@ 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@ @@ -355,6 +350,8 @@ 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@ @@ -369,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -397,6 +393,10 @@ 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@ @@ -523,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -609,8 +610,6 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -glib_enum_prefix = gst_shm -enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\") plugin_LTLIBRARIES = libgstshm.la libgstshm_la_SOURCES = shmpipe.c shmalloc.c gstshm.c gstshmsrc.c gstshmsink.c libgstshm_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) -DSHM_PIPE_USE_GLIB @@ -622,7 +621,7 @@ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/glib-gen.mak $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -643,7 +642,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; -$(top_srcdir)/common/glib-gen.mak: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh @@ -969,42 +967,6 @@ uninstall-am: uninstall-pluginLTLIBRARIES tags uninstall uninstall-am uninstall-pluginLTLIBRARIES -# these are all the rules generating the relevant files -%-marshal.h: %-marshal.list - $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_enum_prefix)_marshal $^ > $*-marshal.h.tmp && \ - mv $*-marshal.h.tmp $*-marshal.h - -%-marshal.c: %-marshal.list - $(AM_V_GEN)echo "#include \"$*-marshal.h\"" >> $*-marshal.c.tmp && \ - glib-genmarshal --body --prefix=$(glib_enum_prefix)_marshal $^ >> $*-marshal.c.tmp && \ - mv $*-marshal.c.tmp $*-marshal.c - -%-enumtypes.h: $(glib_enum_headers) - $(AM_V_GEN)glib-mkenums \ - --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \ - --fprod "\n/* enumerations from \"@filename@\" */\n" \ - --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ - --ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \ - $^ > $@ - -%-enumtypes.c: $(glib_enum_headers) - @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi - $(AM_V_GEN)glib-mkenums \ - --fhead "#include \"$*-enumtypes.h\"\n$(enum_headers)" \ - --fprod "\n/* enumerations from \"@filename@\" */" \ - --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \ - --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ - --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n" \ - $^ > $@ - -# a hack rule to make sure .Plo files exist because they get include'd -# from Makefile's -.deps/%-marshal.Plo: - @touch $@ - -.deps/%-enumtypes.Plo: - @touch $@ - # 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/uvch264/Makefile.am b/sys/uvch264/Makefile.am new file mode 100644 index 00000000..a647fa99 --- /dev/null +++ b/sys/uvch264/Makefile.am @@ -0,0 +1,34 @@ +glib_gen_prefix = __gst_uvc_h264 +glib_gen_basename = gstuvch264 + +plugin_LTLIBRARIES = libgstuvch264.la + +libgstuvch264_la_SOURCES = gstuvch264.c \ + gstuvch264_mjpgdemux.c \ + gstuvch264_src.c \ + uvc_h264.c + +libgstuvch264_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_VIDEO_CFLAGS) \ + $(GST_CFLAGS) \ + $(G_UDEV_CFLAGS) \ + $(LIBUSB_CFLAGS) \ + -DGST_USE_UNSTABLE_API + +libgstuvch264_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstuvch264_la_LIBTOOLFLAGS = --tag=disable-static + +libgstuvch264_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ + $(GST_BASE_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) \ + $(GST_VIDEO_LIBS) \ + $(GST_LIBS) \ + $(G_UDEV_LIBS) \ + $(LIBUSB_LIBS) \ + $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la + +noinst_HEADERS = gstuvch264_mjpgdemux.h \ + gstuvch264_src.h \ + uvc_h264.h diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in new file mode 100644 index 00000000..e7c7fcee --- /dev/null +++ b/sys/uvch264/Makefile.in @@ -0,0 +1,995 @@ +# 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/uvch264 +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 = +libgstuvch264_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la +am_libgstuvch264_la_OBJECTS = libgstuvch264_la-gstuvch264.lo \ + libgstuvch264_la-gstuvch264_mjpgdemux.lo \ + libgstuvch264_la-gstuvch264_src.lo \ + libgstuvch264_la-uvc_h264.lo +libgstuvch264_la_OBJECTS = $(am_libgstuvch264_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +libgstuvch264_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \ + $(CCLD) $(libgstuvch264_la_CFLAGS) $(CFLAGS) \ + $(libgstuvch264_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 = $(libgstuvch264_la_SOURCES) +DIST_SOURCES = $(libgstuvch264_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@ +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@ +VPX_CFLAGS = @VPX_CFLAGS@ +VPX_LIBS = @VPX_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@ +glib_gen_prefix = __gst_uvc_h264 +glib_gen_basename = gstuvch264 +plugin_LTLIBRARIES = libgstuvch264.la +libgstuvch264_la_SOURCES = gstuvch264.c \ + gstuvch264_mjpgdemux.c \ + gstuvch264_src.c \ + uvc_h264.c + +libgstuvch264_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_BASE_CFLAGS) \ + $(GST_VIDEO_CFLAGS) \ + $(GST_CFLAGS) \ + $(G_UDEV_CFLAGS) \ + $(LIBUSB_CFLAGS) \ + -DGST_USE_UNSTABLE_API + +libgstuvch264_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) +libgstuvch264_la_LIBTOOLFLAGS = --tag=disable-static +libgstuvch264_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \ + $(GST_BASE_LIBS) \ + $(GST_PLUGINS_BASE_LIBS) \ + $(GST_VIDEO_LIBS) \ + $(GST_LIBS) \ + $(G_UDEV_LIBS) \ + $(LIBUSB_LIBS) \ + $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la + +noinst_HEADERS = gstuvch264_mjpgdemux.h \ + gstuvch264_src.h \ + uvc_h264.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/uvch264/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu sys/uvch264/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 +libgstuvch264.la: $(libgstuvch264_la_OBJECTS) $(libgstuvch264_la_DEPENDENCIES) $(EXTRA_libgstuvch264_la_DEPENDENCIES) + $(AM_V_CCLD)$(libgstuvch264_la_LINK) -rpath $(plugindir) $(libgstuvch264_la_OBJECTS) $(libgstuvch264_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264_src.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-uvc_h264.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 $@ $< + +libgstuvch264_la-gstuvch264.lo: gstuvch264.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264.Tpo -c -o libgstuvch264_la-gstuvch264.lo `test -f 'gstuvch264.c' || echo '$(srcdir)/'`gstuvch264.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264.c' object='libgstuvch264_la-gstuvch264.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264.lo `test -f 'gstuvch264.c' || echo '$(srcdir)/'`gstuvch264.c + +libgstuvch264_la-gstuvch264_mjpgdemux.lo: gstuvch264_mjpgdemux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264_mjpgdemux.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Tpo -c -o libgstuvch264_la-gstuvch264_mjpgdemux.lo `test -f 'gstuvch264_mjpgdemux.c' || echo '$(srcdir)/'`gstuvch264_mjpgdemux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264_mjpgdemux.c' object='libgstuvch264_la-gstuvch264_mjpgdemux.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264_mjpgdemux.lo `test -f 'gstuvch264_mjpgdemux.c' || echo '$(srcdir)/'`gstuvch264_mjpgdemux.c + +libgstuvch264_la-gstuvch264_src.lo: gstuvch264_src.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264_src.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Tpo -c -o libgstuvch264_la-gstuvch264_src.lo `test -f 'gstuvch264_src.c' || echo '$(srcdir)/'`gstuvch264_src.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264_src.c' object='libgstuvch264_la-gstuvch264_src.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264_src.lo `test -f 'gstuvch264_src.c' || echo '$(srcdir)/'`gstuvch264_src.c + +libgstuvch264_la-uvc_h264.lo: uvc_h264.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-uvc_h264.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-uvc_h264.Tpo -c -o libgstuvch264_la-uvc_h264.lo `test -f 'uvc_h264.c' || echo '$(srcdir)/'`uvc_h264.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-uvc_h264.Tpo $(DEPDIR)/libgstuvch264_la-uvc_h264.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uvc_h264.c' object='libgstuvch264_la-uvc_h264.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-uvc_h264.lo `test -f 'uvc_h264.c' || echo '$(srcdir)/'`uvc_h264.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/uvch264/gstuvch264.c b/sys/uvch264/gstuvch264.c new file mode 100644 index 00000000..77ad73dc --- /dev/null +++ b/sys/uvch264/gstuvch264.c @@ -0,0 +1,50 @@ +/* GStreamer + * + * uvch264: a plugin for handling UVC compliant H264 encoding cameras + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@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; either + * version 2.1 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 + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <gst/gst.h> +#include "gstuvch264_mjpgdemux.h" +#include "gstuvch264_src.h" + +static gboolean +plugin_init (GstPlugin * plugin) +{ + if (!gst_element_register (plugin, "uvch264_mjpgdemux", GST_RANK_NONE, + GST_TYPE_UVC_H264_MJPG_DEMUX)) + return FALSE; + + if (!gst_element_register (plugin, "uvch264_src", GST_RANK_NONE, + GST_TYPE_UVC_H264_SRC)) + return FALSE; + + return TRUE; +} + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "uvch264", + "UVC compliant H264 encoding cameras plugin", + plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c new file mode 100644 index 00000000..4bc68998 --- /dev/null +++ b/sys/uvch264/gstuvch264_mjpgdemux.c @@ -0,0 +1,723 @@ +/* GStreamer + * + * uvch264_mjpg_demux: a demuxer for muxed stream in UVC H264 compliant MJPG + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@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; either + * version 2.1 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 + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/** + * SECTION:element-uvch264-mjpgdemux + * @short_description: UVC H264 compliant MJPG demuxer + * + * Parses a MJPG stream from a UVC H264 compliant encoding camera and extracts + * each muxed stream into separate pads. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> +#include <linux/uvcvideo.h> +#include <linux/usb/video.h> +#include <sys/ioctl.h> + +#ifndef UVCIOC_GET_LAST_SCR +#include <time.h> + +struct uvc_last_scr_sample +{ + __u32 dev_frequency; + __u32 dev_stc; + __u16 dev_sof; + struct timespec host_ts; + __u16 host_sof; +}; + +#define UVCIOC_GET_LAST_SCR _IOR('u', 0x23, struct uvc_last_scr_sample) +#endif + +#include "gstuvch264_mjpgdemux.h" + +enum +{ + PROP_0, + PROP_DEVICE_FD, + PROP_NUM_CLOCK_SAMPLES +}; + +#define DEFAULT_NUM_CLOCK_SAMPLES 32 + +static GstStaticPadTemplate mjpgsink_pad_template = +GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("image/jpeg, " + "width = (int) [ 0, MAX ]," + "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ") + ); + +static GstStaticPadTemplate jpegsrc_pad_template = +GST_STATIC_PAD_TEMPLATE ("jpeg", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("image/jpeg, " + "width = (int) [ 0, MAX ]," + "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ") + ); + +static GstStaticPadTemplate h264src_pad_template = +GST_STATIC_PAD_TEMPLATE ("h264", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-h264, " + "width = (int) [ 0, MAX ], " + "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ") + ); + +static GstStaticPadTemplate yuy2src_pad_template = +GST_STATIC_PAD_TEMPLATE ("yuy2", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-raw-yuv, " + "format = (fourcc) YUY2, " + "width = (int) [ 0, MAX ], " + "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ") + ); +static GstStaticPadTemplate nv12src_pad_template = +GST_STATIC_PAD_TEMPLATE ("nv12", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("video/x-raw-yuv, " + "format = (fourcc) NV21, " + "width = (int) [ 0, MAX ], " + "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ") + ); + + +GST_DEBUG_CATEGORY_STATIC (uvc_h264_mjpg_demux_debug); +#define GST_CAT_DEFAULT uvc_h264_mjpg_demux_debug + +typedef struct +{ + guint32 dev_stc; + guint32 dev_sof; + GstClockTime host_ts; + guint32 host_sof; +} GstUvcH264ClockSample; + +struct _GstUvcH264MjpgDemuxPrivate +{ + int device_fd; + int num_clock_samples; + GstUvcH264ClockSample *clock_samples; + int last_sample; + int num_samples; + GstPad *sink_pad; + GstPad *jpeg_pad; + GstPad *h264_pad; + GstPad *yuy2_pad; + GstPad *nv12_pad; + GstCaps *h264_caps; + GstCaps *yuy2_caps; + GstCaps *nv12_caps; + guint16 h264_width; + guint16 h264_height; + guint16 yuy2_width; + guint16 yuy2_height; + guint16 nv12_width; + guint16 nv12_height; +}; + +typedef struct +{ + guint16 version; + guint16 header_len; + guint32 type; + guint16 width; + guint16 height; + guint32 frame_interval; + guint16 delay; + guint32 pts; +} __attribute__ ((packed)) AuxiliaryStreamHeader; + +static void gst_uvc_h264_mjpg_demux_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec); +static void gst_uvc_h264_mjpg_demux_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec); +static void gst_uvc_h264_mjpg_demux_dispose (GObject * object); +static GstFlowReturn gst_uvc_h264_mjpg_demux_chain (GstPad * pad, + GstBuffer * buffer); +static gboolean gst_uvc_h264_mjpg_demux_sink_setcaps (GstPad * pad, + GstCaps * caps); +static GstCaps *gst_uvc_h264_mjpg_demux_getcaps (GstPad * pad); + +#define _do_init(x) \ + GST_DEBUG_CATEGORY_INIT (uvc_h264_mjpg_demux_debug, \ + "uvch264_mjpgdemux", 0, "UVC H264 MJPG Demuxer"); + +GST_BOILERPLATE_FULL (GstUvcH264MjpgDemux, gst_uvc_h264_mjpg_demux, GstElement, + GST_TYPE_ELEMENT, _do_init); + +static void +gst_uvc_h264_mjpg_demux_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + GstPadTemplate *pt; + + /* do not use gst_element_class_add_static_pad_template to stay compatible + * with gstreamer 0.10.35 */ + pt = gst_static_pad_template_get (&mjpgsink_pad_template); + gst_element_class_add_pad_template (element_class, pt); + gst_object_unref (pt); + pt = gst_static_pad_template_get (&jpegsrc_pad_template); + gst_element_class_add_pad_template (element_class, pt); + gst_object_unref (pt); + pt = gst_static_pad_template_get (&h264src_pad_template); + gst_element_class_add_pad_template (element_class, pt); + gst_object_unref (pt); + pt = gst_static_pad_template_get (&yuy2src_pad_template); + gst_element_class_add_pad_template (element_class, pt); + gst_object_unref (pt); + pt = gst_static_pad_template_get (&nv12src_pad_template); + gst_element_class_add_pad_template (element_class, pt); + gst_object_unref (pt); + + gst_element_class_set_details_simple (element_class, + "UVC H264 MJPG Demuxer", + "Video/Demuxer", + "Demux UVC H264 auxiliary streams from MJPG images", + "Youness Alaoui <youness.alaoui@collabora.co.uk>"); +} + +static void +gst_uvc_h264_mjpg_demux_class_init (GstUvcH264MjpgDemuxClass * klass) +{ + GObjectClass *gobject_class = (GObjectClass *) klass; + + g_type_class_add_private (gobject_class, sizeof (GstUvcH264MjpgDemuxPrivate)); + + gobject_class->set_property = gst_uvc_h264_mjpg_demux_set_property; + gobject_class->get_property = gst_uvc_h264_mjpg_demux_get_property; + gobject_class->dispose = gst_uvc_h264_mjpg_demux_dispose; + + + g_object_class_install_property (gobject_class, PROP_DEVICE_FD, + g_param_spec_int ("device-fd", "device-fd", + "File descriptor of the v4l2 device", + -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_NUM_CLOCK_SAMPLES, + g_param_spec_int ("num-clock-samples", "num-clock-samples", + "Number of clock samples to gather for the PTS synchronization" + " (-1 = unlimited)", + 0, G_MAXINT, DEFAULT_NUM_CLOCK_SAMPLES, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); +} + +static void +gst_uvc_h264_mjpg_demux_init (GstUvcH264MjpgDemux * self, + GstUvcH264MjpgDemuxClass * g_class) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GST_TYPE_UVC_H264_MJPG_DEMUX, + GstUvcH264MjpgDemuxPrivate); + + + self->priv->device_fd = -1; + + /* create the sink and src pads */ + self->priv->sink_pad = + gst_pad_new_from_static_template (&mjpgsink_pad_template, "sink"); + gst_pad_set_chain_function (self->priv->sink_pad, + GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_chain)); + gst_pad_set_setcaps_function (self->priv->sink_pad, + GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_sink_setcaps)); + gst_pad_set_getcaps_function (self->priv->sink_pad, + GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_getcaps)); + gst_element_add_pad (GST_ELEMENT (self), self->priv->sink_pad); + + /* JPEG */ + self->priv->jpeg_pad = + gst_pad_new_from_static_template (&jpegsrc_pad_template, "jpeg"); + gst_pad_set_getcaps_function (self->priv->jpeg_pad, + GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_getcaps)); + gst_element_add_pad (GST_ELEMENT (self), self->priv->jpeg_pad); + + /* H264 */ + self->priv->h264_pad = + gst_pad_new_from_static_template (&h264src_pad_template, "h264"); + gst_pad_use_fixed_caps (self->priv->h264_pad); + gst_element_add_pad (GST_ELEMENT (self), self->priv->h264_pad); + + /* YUY2 */ + self->priv->yuy2_pad = + gst_pad_new_from_static_template (&yuy2src_pad_template, "yuy2"); + gst_pad_use_fixed_caps (self->priv->yuy2_pad); + gst_element_add_pad (GST_ELEMENT (self), self->priv->yuy2_pad); + + /* NV12 */ + self->priv->nv12_pad = + gst_pad_new_from_static_template (&nv12src_pad_template, "nv12"); + gst_pad_use_fixed_caps (self->priv->nv12_pad); + gst_element_add_pad (GST_ELEMENT (self), self->priv->nv12_pad); + + self->priv->h264_caps = gst_caps_new_simple ("video/x-h264", NULL); + self->priv->yuy2_caps = gst_caps_new_simple ("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'), NULL); + self->priv->nv12_caps = gst_caps_new_simple ("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('N', 'V', '1', '2'), NULL); + self->priv->h264_width = self->priv->h264_height = 0; + self->priv->yuy2_width = self->priv->yuy2_height = 0; + self->priv->nv12_width = self->priv->nv12_height = 0; +} + +static void +gst_uvc_h264_mjpg_demux_dispose (GObject * object) +{ + GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object); + + if (self->priv->h264_caps) + gst_caps_unref (self->priv->h264_caps); + self->priv->h264_caps = NULL; + if (self->priv->yuy2_caps) + gst_caps_unref (self->priv->yuy2_caps); + self->priv->yuy2_caps = NULL; + if (self->priv->nv12_caps) + gst_caps_unref (self->priv->nv12_caps); + self->priv->nv12_caps = NULL; + if (self->priv->clock_samples) + g_free (self->priv->clock_samples); + self->priv->clock_samples = NULL; + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +gst_uvc_h264_mjpg_demux_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec) +{ + GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object); + + switch (prop_id) { + case PROP_DEVICE_FD: + self->priv->device_fd = g_value_get_int (value); + break; + case PROP_NUM_CLOCK_SAMPLES: + self->priv->num_clock_samples = g_value_get_int (value); + if (self->priv->clock_samples) { + if (self->priv->num_clock_samples) { + self->priv->clock_samples = g_realloc_n (self->priv->clock_samples, + self->priv->num_clock_samples, sizeof (GstUvcH264ClockSample)); + if (self->priv->num_samples > self->priv->num_clock_samples) { + self->priv->num_samples = self->priv->num_clock_samples; + if (self->priv->last_sample >= self->priv->num_samples) + self->priv->last_sample = self->priv->num_samples - 1; + } + } else { + g_free (self->priv->clock_samples); + self->priv->clock_samples = NULL; + self->priv->last_sample = -1; + self->priv->num_samples = 0; + } + } + if (self->priv->num_clock_samples > 0) { + self->priv->clock_samples = g_malloc0_n (self->priv->num_clock_samples, + sizeof (GstUvcH264ClockSample)); + self->priv->last_sample = -1; + self->priv->num_samples = 0; + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); + break; + } +} + +static void +gst_uvc_h264_mjpg_demux_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec) +{ + GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object); + + switch (prop_id) { + case PROP_DEVICE_FD: + g_value_set_int (value, self->priv->device_fd); + break; + case PROP_NUM_CLOCK_SAMPLES: + g_value_set_int (value, self->priv->num_clock_samples); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); + break; + } +} + + +static gboolean +gst_uvc_h264_mjpg_demux_sink_setcaps (GstPad * pad, GstCaps * caps) +{ + GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (GST_OBJECT_PARENT (pad)); + + return gst_pad_set_caps (self->priv->jpeg_pad, caps); +} + +static GstCaps * +gst_uvc_h264_mjpg_demux_getcaps (GstPad * pad) +{ + GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (GST_OBJECT_PARENT (pad)); + GstCaps *result = NULL; + + if (pad == self->priv->jpeg_pad) + result = gst_pad_peer_get_caps (self->priv->sink_pad); + else if (pad == self->priv->sink_pad) + result = gst_pad_peer_get_caps (self->priv->jpeg_pad); + + /* TODO: intersect with template and fixate caps */ + if (result == NULL) + result = gst_caps_copy (gst_pad_get_pad_template_caps (pad)); + + return result; +} + +static gboolean +_pts_to_timestamp (GstUvcH264MjpgDemux * self, GstBuffer * buf, guint32 pts) +{ + GstUvcH264MjpgDemuxPrivate *priv = self->priv; + GstUvcH264ClockSample *current_sample = NULL; + GstUvcH264ClockSample *oldest_sample = NULL; + guint32 next_sample; + struct uvc_last_scr_sample sample; + guint32 dev_sof; + + if (self->priv->device_fd == -1 || priv->clock_samples == NULL) + return FALSE; + + if (-1 == ioctl (priv->device_fd, UVCIOC_GET_LAST_SCR, &sample)) { + //GST_WARNING_OBJECT (self, " GET_LAST_SCR error"); + return FALSE; + } + + dev_sof = (guint32) (sample.dev_sof + 2048) << 16; + if (priv->num_samples > 0 && + priv->clock_samples[priv->last_sample].dev_sof == dev_sof) { + current_sample = &priv->clock_samples[priv->last_sample]; + } else { + next_sample = (priv->last_sample + 1) % priv->num_clock_samples; + current_sample = &priv->clock_samples[next_sample]; + current_sample->dev_stc = sample.dev_stc; + current_sample->dev_sof = dev_sof; + current_sample->host_ts = sample.host_ts.tv_sec * GST_SECOND + + sample.host_ts.tv_nsec * GST_NSECOND; + current_sample->host_sof = (guint32) (sample.host_sof + 2048) << 16; + + priv->num_samples++; + priv->last_sample = next_sample; + + /* Debug printing */ + GST_DEBUG_OBJECT (self, "device frequency: %u", sample.dev_frequency); + GST_DEBUG_OBJECT (self, "dev_sof: %u", sample.dev_sof); + GST_DEBUG_OBJECT (self, "dev_stc: %u", sample.dev_stc); + GST_DEBUG_OBJECT (self, "host_ts: %lu -- %" GST_TIME_FORMAT, + current_sample->host_ts, GST_TIME_ARGS (current_sample->host_ts)); + GST_DEBUG_OBJECT (self, "host_sof: %u", sample.host_sof); + GST_DEBUG_OBJECT (self, "PTS: %u", pts); + GST_DEBUG_OBJECT (self, "Diff: %u - %f\n", sample.dev_stc - pts, + (gdouble) (sample.dev_stc - pts) / sample.dev_frequency); + } + + if (priv->num_samples < priv->num_clock_samples) + return FALSE; + + next_sample = (priv->last_sample + 1) % priv->num_clock_samples; + oldest_sample = &priv->clock_samples[next_sample]; + + /* TODO: Use current_sample and oldest_sample to do the + * double linear regression and calculate a new PTS */ + (void) oldest_sample; + + return TRUE; +} + +static GstFlowReturn +gst_uvc_h264_mjpg_demux_chain (GstPad * pad, GstBuffer * buf) +{ + GstUvcH264MjpgDemux *self; + GstFlowReturn ret = GST_FLOW_OK; + GstBufferList *jpeg_buf = gst_buffer_list_new (); + GstBufferListIterator *jpeg_it = gst_buffer_list_iterate (jpeg_buf); + GstBufferList *aux_buf = NULL; + GstBufferListIterator *aux_it = NULL; + AuxiliaryStreamHeader aux_header = { 0 }; + GstBuffer *sub_buffer = NULL; + guint32 aux_size = 0; + GstPad *aux_pad = NULL; + GstCaps **aux_caps = NULL; + guint last_offset; + guint i; + guchar *data; + guint size; + + self = GST_UVC_H264_MJPG_DEMUX (GST_PAD_PARENT (pad)); + + last_offset = 0; + data = GST_BUFFER_DATA (buf); + size = GST_BUFFER_SIZE (buf); + if (data == NULL || size == 0) { + ret = gst_pad_push (self->priv->jpeg_pad, buf); + goto done; + } + + gst_buffer_list_iterator_add_group (jpeg_it); + for (i = 0; i < size - 1; i++) { + /* Check for APP4 (0xe4) marker in the jpeg */ + if (data[i] == 0xff && data[i + 1] == 0xe4) { + guint16 segment_size; + + /* Sanity check sizes and get segment size */ + if (i + 4 >= size) { + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Not enough data to read marker size"), (NULL)); + ret = GST_FLOW_ERROR; + goto done; + } + segment_size = GUINT16_FROM_BE (*((guint16 *) (data + i + 2))); + + if (i + segment_size + 2 >= size) { + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Not enough data to read marker content"), (NULL)); + ret = GST_FLOW_ERROR; + goto done; + } + GST_DEBUG_OBJECT (self, + "Found APP4 marker (%d). JPG: %d-%d - APP4: %d - %d", segment_size, + last_offset, i, i, i + 2 + segment_size); + + /* Add JPEG data between the last offset and this market */ + if (i - last_offset > 0) { + sub_buffer = gst_buffer_create_sub (buf, last_offset, i - last_offset); + gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_ALL); + gst_buffer_list_iterator_add (jpeg_it, sub_buffer); + } + last_offset = i + 2 + segment_size; + + /* Reset i/segment size to the app4 data (ignore marker header/size) */ + i += 4; + segment_size -= 2; + + /* If this is a new auxiliary stream, initialize everything properly */ + if (aux_buf == NULL) { + if (segment_size < sizeof (aux_header) + sizeof (aux_size)) { + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Not enough data to read aux header"), (NULL)); + ret = GST_FLOW_ERROR; + goto done; + } + + aux_header = *((AuxiliaryStreamHeader *) (data + i)); + /* version should be little endian but it looks more like BE */ + aux_header.version = GUINT16_FROM_BE (aux_header.version); + aux_header.header_len = GUINT16_FROM_LE (aux_header.header_len); + aux_header.width = GUINT16_FROM_LE (aux_header.width); + aux_header.height = GUINT16_FROM_LE (aux_header.height); + aux_header.frame_interval = GUINT32_FROM_LE (aux_header.frame_interval); + aux_header.delay = GUINT16_FROM_LE (aux_header.delay); + aux_header.pts = GUINT32_FROM_LE (aux_header.pts); + GST_DEBUG_OBJECT (self, "New auxiliary stream : v%d - %d bytes - %" + GST_FOURCC_FORMAT " %dx%d -- %d *100ns -- %d ms -- %d", + aux_header.version, aux_header.header_len, + GST_FOURCC_ARGS (aux_header.type), + aux_header.width, aux_header.height, + aux_header.frame_interval, aux_header.delay, aux_header.pts); + aux_size = *((guint32 *) (data + i + aux_header.header_len)); + GST_DEBUG_OBJECT (self, "Auxiliary stream size : %d bytes", aux_size); + + if (aux_size > 0) { + guint16 *width = NULL; + guint16 *height = NULL; + + /* Find the auxiliary stream's pad and caps */ + switch (aux_header.type) { + case GST_MAKE_FOURCC ('H', '2', '6', '4'): + aux_pad = self->priv->h264_pad; + aux_caps = &self->priv->h264_caps; + width = &self->priv->h264_width; + height = &self->priv->h264_height; + break; + case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'): + aux_pad = self->priv->yuy2_pad; + aux_caps = &self->priv->yuy2_caps; + width = &self->priv->yuy2_width; + height = &self->priv->yuy2_height; + break; + case GST_MAKE_FOURCC ('N', 'V', '1', '2'): + aux_pad = self->priv->nv12_pad; + aux_caps = &self->priv->nv12_caps; + width = &self->priv->nv12_width; + height = &self->priv->nv12_height; + break; + default: + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Unknown auxiliary stream format : %" GST_FOURCC_FORMAT, + GST_FOURCC_ARGS (aux_header.type)), (NULL)); + ret = GST_FLOW_ERROR; + break; + } + + if (ret != GST_FLOW_OK) + goto done; + + if (*width != aux_header.width || *height != aux_header.height) { + GstCaps *peercaps = gst_pad_peer_get_caps (aux_pad); + GstStructure *s = NULL; + gint fps_num = 1000000000 / aux_header.frame_interval; + gint fps_den = 100; + + /* TODO: intersect with pad template */ + GST_DEBUG ("peercaps : %" GST_PTR_FORMAT, peercaps); + if (peercaps && !gst_caps_is_any (peercaps)) + s = gst_caps_get_structure (peercaps, 0); + if (s) { + /* TODO: make sure it contains the right format/width/height */ + gst_structure_fixate_field_nearest_fraction (s, "framerate", + fps_num, fps_den); + GST_DEBUG ("Fixated struct : %" GST_PTR_FORMAT, s); + gst_structure_get_fraction (s, "framerate", &fps_num, &fps_den); + } + if (peercaps) + gst_caps_unref (peercaps); + + *width = aux_header.width; + *height = aux_header.height; + *aux_caps = gst_caps_make_writable (*aux_caps); + /* FIXME: fps must match the caps and be allowed and represent + our first buffer */ + gst_caps_set_simple (*aux_caps, + "width", G_TYPE_INT, aux_header.width, + "height", G_TYPE_INT, aux_header.height, + "framerate", GST_TYPE_FRACTION, fps_num, fps_den, NULL); + if (!gst_pad_set_caps (aux_pad, *aux_caps)) { + ret = GST_FLOW_NOT_NEGOTIATED; + goto done; + } + } + + /* Create new auxiliary buffer list and adjust i/segment size */ + aux_buf = gst_buffer_list_new (); + aux_it = gst_buffer_list_iterate (aux_buf); + gst_buffer_list_iterator_add_group (aux_it); + } + + i += sizeof (aux_header) + sizeof (aux_size); + segment_size -= sizeof (aux_header) + sizeof (aux_size); + } + + if (segment_size > aux_size) { + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Expected %d auxiliary data, got %d bytes", aux_size, + segment_size), (NULL)); + ret = GST_FLOW_ERROR; + goto done; + } + + if (segment_size > 0) { + sub_buffer = gst_buffer_create_sub (buf, i, segment_size); + GST_BUFFER_DURATION (sub_buffer) = + aux_header.frame_interval * 100 * GST_NSECOND; + gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_TIMESTAMPS); + gst_buffer_set_caps (sub_buffer, *aux_caps); + + _pts_to_timestamp (self, sub_buffer, aux_header.pts); + + gst_buffer_list_iterator_add (aux_it, sub_buffer); + + aux_size -= segment_size; + + /* Push completed aux data */ + if (aux_size == 0) { + gst_buffer_list_iterator_free (aux_it); + aux_it = NULL; + GST_DEBUG_OBJECT (self, "Pushing %" GST_FOURCC_FORMAT + " auxiliary buffer %" GST_PTR_FORMAT, + GST_FOURCC_ARGS (aux_header.type), *aux_caps); + ret = gst_pad_push_list (aux_pad, aux_buf); + aux_buf = NULL; + if (ret != GST_FLOW_OK) { + GST_WARNING_OBJECT (self, "Error pushing %" GST_FOURCC_FORMAT + " auxiliary data", GST_FOURCC_ARGS (aux_header.type)); + goto done; + } + } + } + + i += segment_size - 1; + } else if (data[i] == 0xff && data[i + 1] == 0xda) { + + /* The APP4 markers must be before the SOS marker, so this is the end */ + GST_DEBUG_OBJECT (self, "Found SOS marker."); + + sub_buffer = gst_buffer_create_sub (buf, last_offset, size - last_offset); + gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_ALL); + gst_buffer_list_iterator_add (jpeg_it, sub_buffer); + last_offset = size; + break; + } + } + gst_buffer_list_iterator_free (jpeg_it); + jpeg_it = NULL; + + if (aux_buf != NULL) { + GST_ELEMENT_ERROR (self, STREAM, DEMUX, + ("Incomplete auxiliary stream. %d bytes missing", aux_size), (NULL)); + ret = GST_FLOW_ERROR; + goto done; + } + + if (last_offset != size) { + /* this means there was no SOS marker in the jpg, so we assume the JPG was + just a container */ + GST_DEBUG_OBJECT (self, "SOS marker wasn't found. MJPG is container only"); + gst_buffer_list_unref (jpeg_buf); + jpeg_buf = NULL; + } else { + ret = gst_pad_push_list (self->priv->jpeg_pad, jpeg_buf); + jpeg_buf = NULL; + } + + if (ret != GST_FLOW_OK) { + GST_WARNING_OBJECT (self, "Error pushing jpeg data"); + goto done; + } + +done: + /* In case of error, unref whatever was left */ + if (aux_it) + gst_buffer_list_iterator_free (aux_it); + if (aux_buf) + gst_buffer_list_unref (aux_buf); + if (jpeg_it) + gst_buffer_list_iterator_free (jpeg_it); + if (jpeg_buf) + gst_buffer_list_unref (jpeg_buf); + + /* We must always unref the input buffer since we never push it out */ + gst_buffer_unref (buf); + + return ret; +} diff --git a/sys/uvch264/gstuvch264_mjpgdemux.h b/sys/uvch264/gstuvch264_mjpgdemux.h new file mode 100644 index 00000000..8c444520 --- /dev/null +++ b/sys/uvch264/gstuvch264_mjpgdemux.h @@ -0,0 +1,66 @@ +/* GStreamer + * + * uvch264_mjpg_demux: a demuxer for muxed stream in UVC H264 compliant MJPG + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@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; either + * version 2.1 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 + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_UVC_H264_MJPG_DEMUX_H__ +#define __GST_UVC_H264_MJPG_DEMUX_H__ + +#include <gst/gst.h> + + +G_BEGIN_DECLS + +#define GST_TYPE_UVC_H264_MJPG_DEMUX \ + (gst_uvc_h264_mjpg_demux_get_type()) +#define GST_UVC_H264_MJPG_DEMUX(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), \ + GST_TYPE_UVC_H264_MJPG_DEMUX, \ + GstUvcH264MjpgDemux)) +#define GST_UVC_H264_MJPG_DEMUX_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), \ + GST_TYPE_UVC_H264_MJPG_DEMUX, \ + GstUvcH264MjpgDemuxClass)) +#define GST_IS_UVC_H264_MJPG_DEMUX(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ + GST_TYPE_UVC_H264_MJPG_DEMUX)) +#define GST_IS_UVC_H264_MJPG_DEMUX_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), \ + GST_TYPE_UVC_H264_MJPG_DEMUX)) + +typedef struct _GstUvcH264MjpgDemux GstUvcH264MjpgDemux; +typedef struct _GstUvcH264MjpgDemuxPrivate GstUvcH264MjpgDemuxPrivate; +typedef struct _GstUvcH264MjpgDemuxClass GstUvcH264MjpgDemuxClass; + +struct _GstUvcH264MjpgDemux { + GstElement element; + GstUvcH264MjpgDemuxPrivate *priv; +}; + +struct _GstUvcH264MjpgDemuxClass { + GstElementClass parent_class; +}; + +GType gst_uvc_h264_mjpg_demux_get_type (void); + +G_END_DECLS + +#endif /* __GST_UVC_H264_MJPG_DEMUX_H__ */ diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c new file mode 100644 index 00000000..04bbee27 --- /dev/null +++ b/sys/uvch264/gstuvch264_src.c @@ -0,0 +1,3141 @@ +/* + * GStreamer + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@collabora.co.uk> + * + * 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-uvch264-src + * + * A camera bin src element that wraps v4l2src and implements UVC H264 + * Extension Units (XU) to control the H264 encoder in the camera + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "gstuvch264_src.h" + +#include <gst/video/video.h> +#include <linux/uvcvideo.h> +#include <linux/usb/video.h> +#include <sys/ioctl.h> +#include <string.h> + +#include "gstuvch264_src.h" +#include "gstuvch264-marshal.h" +#include <gudev/gudev.h> +#include <libusb.h> + +typedef struct +{ + int8_t bLength; + int8_t bDescriptorType; + int8_t bDescriptorSubType; + int8_t bUnitID; + uint8_t guidExtensionCode[16]; +} __attribute__ ((__packed__)) xu_descriptor; + +#define GUID_FORMAT "02X%02X%02X%02X-%02X%02X%02X%02X-"\ + "%02X%02X%02X%02X-%02X%02X%02X%02X" +#define GUID_ARGS(guid) guid[0], guid[1], guid[2], guid[3], \ + guid[4], guid[5], guid[6], guid[7], \ + guid[8], guid[9], guid[10], guid[11], \ + guid[12], guid[13], guid[14], guid[15] + +#define USB_VIDEO_CONTROL 1 +#define USB_VIDEO_CONTROL_INTERFACE 0x24 +#define USB_VIDEO_CONTROL_XU_TYPE 0x06 + +enum +{ + PROP_0, + /* uvch264_src properties */ + PROP_COLORSPACE_NAME, + PROP_JPEG_DECODER_NAME, + PROP_NUM_CLOCK_SAMPLES, + /* v4l2src properties */ + PROP_NUM_BUFFERS, + PROP_DEVICE, + PROP_DEVICE_NAME, + /* Static controls */ + PROP_INITIAL_BITRATE, + PROP_SLICE_UNITS, + PROP_SLICE_MODE, + PROP_IFRAME_PERIOD, + PROP_USAGE_TYPE, + PROP_ENTROPY, + PROP_ENABLE_SEI, + PROP_NUM_REORDER_FRAMES, + PROP_PREVIEW_FLIPPED, + PROP_LEAKY_BUCKET_SIZE, + /* Dynamic controls */ + PROP_RATE_CONTROL, + PROP_FIXED_FRAMERATE, + PROP_MAX_MBPS, /* read-only */ + PROP_LEVEL_IDC, + PROP_PEAK_BITRATE, + PROP_AVERAGE_BITRATE, + PROP_MIN_IFRAME_QP, + PROP_MAX_IFRAME_QP, + PROP_MIN_PFRAME_QP, + PROP_MAX_PFRAME_QP, + PROP_MIN_BFRAME_QP, + PROP_MAX_BFRAME_QP, + PROP_LTR_BUFFER_SIZE, + PROP_LTR_ENCODER_CONTROL, +}; +/* In caps : frame interval (fps), width, height, profile, mux */ +/* Ignored: temporal, spatial, SNR, MVC views, version, reset */ +/* Events: LTR, generate IDR */ + +enum +{ + /* action signals */ + SIGNAL_GET_ENUM_SETTING, + SIGNAL_GET_BOOLEAN_SETTING, + SIGNAL_GET_INT_SETTING, + LAST_SIGNAL +}; + +static guint _signals[LAST_SIGNAL]; + +/* Default values */ +#define DEFAULT_COLORSPACE_NAME "ffmpegcolorspace" +#define DEFAULT_JPEG_DECODER_NAME "jpegdec" +#define DEFAULT_NUM_CLOCK_SAMPLES 0 +#define DEFAULT_NUM_BUFFERS -1 +#define DEFAULT_DEVICE "/dev/video0" +#define DEFAULT_DEVICE_NAME NULL +#define DEFAULT_INITIAL_BITRATE 3000000 +#define DEFAULT_SLICE_UNITS 4 +#define DEFAULT_SLICE_MODE UVC_H264_SLICEMODE_SLICEPERFRAME +#define DEFAULT_IFRAME_PERIOD 10000 +#define DEFAULT_USAGE_TYPE UVC_H264_USAGETYPE_REALTIME +#define DEFAULT_ENTROPY UVC_H264_ENTROPY_CAVLC +#define DEFAULT_ENABLE_SEI FALSE +#define DEFAULT_NUM_REORDER_FRAMES 0 +#define DEFAULT_PREVIEW_FLIPPED FALSE +#define DEFAULT_LEAKY_BUCKET_SIZE 1000 +#define DEFAULT_RATE_CONTROL UVC_H264_RATECONTROL_CBR +#define DEFAULT_FIXED_FRAMERATE FALSE +#define DEFAULT_LEVEL_IDC 40 +#define DEFAULT_PEAK_BITRATE DEFAULT_INITIAL_BITRATE +#define DEFAULT_AVERAGE_BITRATE DEFAULT_INITIAL_BITRATE +#define DEFAULT_MIN_QP 10 +#define DEFAULT_MAX_QP 46 +#define DEFAULT_LTR_BUFFER_SIZE 0 +#define DEFAULT_LTR_ENCODER_CONTROL 0 + +#define NSEC_PER_SEC (G_USEC_PER_SEC * 1000) + + +GST_DEBUG_CATEGORY (uvc_h264_src_debug); +#define GST_CAT_DEFAULT uvc_h264_src_debug + +GST_BOILERPLATE (GstUvcH264Src, gst_uvc_h264_src, + GstBaseCameraSrc, GST_TYPE_BASE_CAMERA_SRC); + +#define GST_UVC_H264_SRC_VF_CAPS_STR \ + GST_VIDEO_CAPS_RGB ";" \ + GST_VIDEO_CAPS_RGB";" \ + GST_VIDEO_CAPS_BGR";" \ + GST_VIDEO_CAPS_RGBx";" \ + GST_VIDEO_CAPS_xRGB";" \ + GST_VIDEO_CAPS_BGRx";" \ + GST_VIDEO_CAPS_xBGR";" \ + GST_VIDEO_CAPS_RGBA";" \ + GST_VIDEO_CAPS_ARGB";" \ + GST_VIDEO_CAPS_BGRA";" \ + GST_VIDEO_CAPS_ABGR";" \ + GST_VIDEO_CAPS_RGB_16";" \ + GST_VIDEO_CAPS_RGB_15";" \ + "video/x-raw-rgb, bpp = (int)8, depth = (int)8, " \ + "width = "GST_VIDEO_SIZE_RANGE" , " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = "GST_VIDEO_FPS_RANGE ";" \ + GST_VIDEO_CAPS_GRAY8";" \ + GST_VIDEO_CAPS_GRAY16("BIG_ENDIAN")";" \ + GST_VIDEO_CAPS_GRAY16("LITTLE_ENDIAN")";" \ + GST_VIDEO_CAPS_YUV ("{ I420 , NV12 , NV21 , YV12 , YUY2 ," \ + " Y42B , Y444 , YUV9 , YVU9 , Y41B , Y800 , Y8 , GREY ," \ + " Y16 , UYVY , YVYU , IYU1 , v308 , AYUV, A420}") ";" \ + "image/jpeg, " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE + +#define GST_UVC_H264_SRC_VID_CAPS_STR \ + GST_UVC_H264_SRC_VF_CAPS_STR ";" \ + "video/x-h264, " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE ", " \ + "stream-format = (string) { byte-stream, avc }, " \ + "alignment = (string) { au }, " \ + "profile = (string) { high, main, baseline, constrained-baseline }" + +static GstStaticPadTemplate vfsrc_template = +GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME, + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (GST_UVC_H264_SRC_VF_CAPS_STR)); + +static GstStaticPadTemplate imgsrc_template = +GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME, + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS_NONE); + +static GstStaticPadTemplate vidsrc_template = +GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME, + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (GST_UVC_H264_SRC_VID_CAPS_STR)); + + +static void gst_uvc_h264_src_dispose (GObject * object); +static void gst_uvc_h264_src_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec); +static void gst_uvc_h264_src_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec); +static gboolean gst_uvc_h264_src_event (GstPad * pad, GstEvent * event); +static gboolean gst_uvc_h264_src_send_event (GstElement * element, + GstEvent * event); +static gboolean gst_uvc_h264_src_construct_pipeline (GstBaseCameraSrc * + bcamsrc); +static gboolean gst_uvc_h264_src_set_mode (GstBaseCameraSrc * bcamsrc, + GstCameraBinMode mode); +static gboolean gst_uvc_h264_src_start_capture (GstBaseCameraSrc * camerasrc); +static void gst_uvc_h264_src_stop_capture (GstBaseCameraSrc * camerasrc); +static GstStateChangeReturn gst_uvc_h264_src_change_state (GstElement * element, + GstStateChange trans); +static gboolean gst_uvc_h264_src_buffer_probe (GstPad * pad, + GstBuffer * buffer, gpointer user_data); +static gboolean gst_uvc_h264_src_event_probe (GstPad * pad, + GstEvent * event, gpointer user_data); +static void gst_uvc_h264_src_pad_linking_cb (GstPad * pad, + GstPad * peer, gpointer user_data); +static GstCaps *gst_uvc_h264_src_getcaps (GstPad * pad); + + +static void v4l2src_prepare_format (GstElement * v4l2src, gint fd, guint fourcc, + guint width, guint height, gpointer user_data); +static void fill_probe_commit (GstUvcH264Src * self, + uvcx_video_config_probe_commit_t * probe, guint32 frame_interval, + guint32 width, guint32 height, guint32 profile, + UvcH264StreamFormat stream_format); +static gboolean xu_query (GstUvcH264Src * self, guint selector, guint query, + guchar * data); + +static void set_rate_control (GstUvcH264Src * self); +static void set_level_idc (GstUvcH264Src * self); +static void set_bitrate (GstUvcH264Src * self); +static void set_qp (GstUvcH264Src * self, gint type); +static void set_ltr (GstUvcH264Src * self); +static void update_rate_control (GstUvcH264Src * self); +static guint32 update_level_idc_and_get_max_mbps (GstUvcH264Src * self); +static void update_bitrate (GstUvcH264Src * self); +static gboolean update_qp (GstUvcH264Src * self, gint type); +static void update_ltr (GstUvcH264Src * self); + +static gboolean gst_uvc_h264_src_get_enum_setting (GstUvcH264Src * self, + gchar * property, gint * mask, gint * default_value); +static gboolean gst_uvc_h264_src_get_boolean_setting (GstUvcH264Src * self, + gchar * property, gboolean * changeable, gboolean * def); +static gboolean gst_uvc_h264_src_get_int_setting (GstUvcH264Src * self, + gchar * property, gint * min, gint * def, gint * max); + +static void +gst_uvc_h264_src_base_init (gpointer g_class) +{ + GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class); + GstPadTemplate *pt; + + GST_DEBUG_CATEGORY_INIT (uvc_h264_src_debug, "uvch264_src", + 0, "UVC H264 Compliant camera bin source"); + + gst_element_class_set_details_simple (gstelement_class, + "UVC H264 Source", + "Source/Video", + "UVC H264 Encoding camera source", + "Youness Alaoui <youness.alaoui@collabora.co.uk>"); + + /* Don't use gst_element_class_add_static_pad_template in order to keep + * the plugin compatible with gst 0.10.35 */ + pt = gst_static_pad_template_get (&vidsrc_template); + gst_element_class_add_pad_template (gstelement_class, pt); + gst_object_unref (pt); + + pt = gst_static_pad_template_get (&imgsrc_template); + gst_element_class_add_pad_template (gstelement_class, pt); + gst_object_unref (pt); + + pt = gst_static_pad_template_get (&vfsrc_template); + gst_element_class_add_pad_template (gstelement_class, pt); + gst_object_unref (pt); +} + +static void +gst_uvc_h264_src_class_init (GstUvcH264SrcClass * klass) +{ + GObjectClass *gobject_class; + GstElementClass *gstelement_class; + GstBaseCameraSrcClass *gstbasecamerasrc_class; + + gobject_class = G_OBJECT_CLASS (klass); + gstelement_class = GST_ELEMENT_CLASS (klass); + gstbasecamerasrc_class = GST_BASE_CAMERA_SRC_CLASS (klass); + + gobject_class->dispose = gst_uvc_h264_src_dispose; + gobject_class->set_property = gst_uvc_h264_src_set_property; + gobject_class->get_property = gst_uvc_h264_src_get_property; + + gstelement_class->change_state = gst_uvc_h264_src_change_state; + gstelement_class->send_event = gst_uvc_h264_src_send_event; + + gstbasecamerasrc_class->construct_pipeline = + gst_uvc_h264_src_construct_pipeline; + gstbasecamerasrc_class->set_mode = gst_uvc_h264_src_set_mode; + gstbasecamerasrc_class->start_capture = gst_uvc_h264_src_start_capture; + gstbasecamerasrc_class->stop_capture = gst_uvc_h264_src_stop_capture; + + /* Properties */ + g_object_class_install_property (gobject_class, PROP_COLORSPACE_NAME, + g_param_spec_string ("colorspace-name", "colorspace element name", + "The name of the colorspace element", + DEFAULT_COLORSPACE_NAME, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | + GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_JPEG_DECODER_NAME, + g_param_spec_string ("jpeg-decoder-name", "jpeg decoder element name", + "The name of the jpeg decoder element", + DEFAULT_JPEG_DECODER_NAME, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | + GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_NUM_CLOCK_SAMPLES, + g_param_spec_int ("num-clock-samples", "num-clock-samples", + "Number of clock samples to gather for the PTS synchronization" + " (-1 = unlimited)", + 0, G_MAXINT, DEFAULT_NUM_CLOCK_SAMPLES, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | GST_PARAM_MUTABLE_PLAYING | + G_PARAM_STATIC_STRINGS)); + + /* v4l2src proxied properties */ + g_object_class_install_property (gobject_class, PROP_NUM_BUFFERS, + g_param_spec_int ("num-buffers", "num-buffers", + "Number of buffers to output before sending EOS (-1 = unlimited)", + -1, G_MAXINT, DEFAULT_NUM_BUFFERS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_DEVICE, + g_param_spec_string ("device", "device", + "Device location", + DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_DEVICE_NAME, + g_param_spec_string ("device-name", "Device name", + "Name of the device", DEFAULT_DEVICE_NAME, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + + /* Static controls */ + g_object_class_install_property (gobject_class, PROP_INITIAL_BITRATE, + g_param_spec_uint ("initial-bitrate", "Initial bitrate", + "Initial bitrate in bits/second (static control)", + 0, G_MAXUINT, DEFAULT_INITIAL_BITRATE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_SLICE_UNITS, + g_param_spec_uint ("slice-units", "Slice units", + "Slice units (static control)", + 0, G_MAXUINT16, DEFAULT_SLICE_UNITS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_SLICE_MODE, + g_param_spec_enum ("slice-mode", "Slice mode", + "Defines the unit of the slice-units property (static control)", + UVC_H264_SLICEMODE_TYPE, + DEFAULT_SLICE_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_IFRAME_PERIOD, + g_param_spec_uint ("iframe-period", "I Frame Period", + "Time between IDR frames in milliseconds (static control)", + 0, G_MAXUINT16, DEFAULT_IFRAME_PERIOD, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_USAGE_TYPE, + g_param_spec_enum ("usage-type", "Usage type", + "The usage type (static control)", + UVC_H264_USAGETYPE_TYPE, DEFAULT_USAGE_TYPE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_ENTROPY, + g_param_spec_enum ("entropy", "Entropy", + "Entropy (static control)", + UVC_H264_ENTROPY_TYPE, DEFAULT_ENTROPY, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_ENABLE_SEI, + g_param_spec_boolean ("enable-sei", "Enable SEI", + "Enable SEI picture timing (static control)", + DEFAULT_ENABLE_SEI, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_NUM_REORDER_FRAMES, + g_param_spec_uint ("num-reorder-frames", "Number of Reorder frames", + "Number of B frames between the references frames (static control)", + 0, G_MAXUINT8, DEFAULT_NUM_REORDER_FRAMES, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_PREVIEW_FLIPPED, + g_param_spec_boolean ("preview-flipped", "Flip preview", + "Horizontal flipped image for non H.264 streams (static control)", + DEFAULT_PREVIEW_FLIPPED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + g_object_class_install_property (gobject_class, PROP_LEAKY_BUCKET_SIZE, + g_param_spec_uint ("leaky-bucket-size", "Size of the leaky bucket size", + "Size of the leaky bucket size in milliseconds (static control)", + 0, G_MAXUINT16, DEFAULT_LEAKY_BUCKET_SIZE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_READY)); + + /* Dynamic controls */ + g_object_class_install_property (gobject_class, PROP_RATE_CONTROL, + g_param_spec_enum ("rate-control", "Rate control", + "Rate control mode (static & dynamic control)", + UVC_H264_RATECONTROL_TYPE, DEFAULT_RATE_CONTROL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_FIXED_FRAMERATE, + g_param_spec_boolean ("fixed-framerate", "Fixed framerate", + "Fixed framerate (static & dynamic control)", + DEFAULT_FIXED_FRAMERATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MAX_MBPS, + g_param_spec_uint ("max-mbps", "Max macroblocks/second", + "The number of macroblocks per second for the maximum processing rate", + 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_LEVEL_IDC, + g_param_spec_uint ("level-idc", "Level IDC", + "Level IDC (dynamic control)", + 0, G_MAXUINT8, DEFAULT_LEVEL_IDC, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_PEAK_BITRATE, + g_param_spec_uint ("peak-bitrate", "Peak bitrate", + "The peak bitrate in bits/second (dynamic control)", + 0, G_MAXUINT, DEFAULT_PEAK_BITRATE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_AVERAGE_BITRATE, + g_param_spec_uint ("average-bitrate", "Average bitrate", + "The average bitrate in bits/second (dynamic control)", + 0, G_MAXUINT, DEFAULT_AVERAGE_BITRATE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MIN_IFRAME_QP, + g_param_spec_int ("min-iframe-qp", "Minimum I frame QP", + "The minimum Quantization step size for I frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MAX_IFRAME_QP, + g_param_spec_int ("max-iframe-qp", "Minimum I frame QP", + "The minimum Quantization step size for I frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MIN_PFRAME_QP, + g_param_spec_int ("min-pframe-qp", "Minimum P frame QP", + "The minimum Quantization step size for P frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MAX_PFRAME_QP, + g_param_spec_int ("max-pframe-qp", "Minimum P frame QP", + "The minimum Quantization step size for P frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MIN_BFRAME_QP, + g_param_spec_int ("min-bframe-qp", "Minimum B frame QP", + "The minimum Quantization step size for B frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_MAX_BFRAME_QP, + g_param_spec_int ("max-bframe-qp", "Minimum B frame QP", + "The minimum Quantization step size for B frames (dynamic control)", + -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_LTR_BUFFER_SIZE, + g_param_spec_int ("ltr-buffer-size", "LTR Buffer size", + "Total number of Long-Term Reference frames (dynamic control)", + 0, G_MAXUINT8, DEFAULT_LTR_BUFFER_SIZE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + g_object_class_install_property (gobject_class, PROP_LTR_ENCODER_CONTROL, + g_param_spec_int ("ltr-encoder-control", "LTR frames controled by device", + "Number of LTR frames the device can control (dynamic control)", + 0, G_MAXUINT8, DEFAULT_LTR_ENCODER_CONTROL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_PARAM_MUTABLE_PLAYING)); + + _signals[SIGNAL_GET_ENUM_SETTING] = + g_signal_new_class_handler ("get-enum-setting", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_CALLBACK (gst_uvc_h264_src_get_enum_setting), + NULL, NULL, NULL, + G_TYPE_BOOLEAN, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, 0); + _signals[SIGNAL_GET_BOOLEAN_SETTING] = + g_signal_new_class_handler ("get-boolean-setting", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_CALLBACK (gst_uvc_h264_src_get_boolean_setting), NULL, NULL, NULL, + G_TYPE_BOOLEAN, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, 0); + _signals[SIGNAL_GET_INT_SETTING] = + g_signal_new_class_handler ("get-int-setting", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_CALLBACK (gst_uvc_h264_src_get_int_setting), NULL, NULL, NULL, + G_TYPE_BOOLEAN, 4, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, + G_TYPE_POINTER, 0); + +} + +static void +gst_uvc_h264_src_init (GstUvcH264Src * self, GstUvcH264SrcClass * klass) +{ + self->vfsrc = + gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME, + GST_PAD_SRC); + gst_pad_set_getcaps_function (self->vfsrc, + GST_DEBUG_FUNCPTR (gst_uvc_h264_src_getcaps)); + gst_element_add_pad (GST_ELEMENT (self), self->vfsrc); + + self->imgsrc = + gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME, + GST_PAD_SRC); + gst_element_add_pad (GST_ELEMENT (self), self->imgsrc); + + self->vidsrc = + gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME, + GST_PAD_SRC); + gst_pad_set_getcaps_function (self->vidsrc, + GST_DEBUG_FUNCPTR (gst_uvc_h264_src_getcaps)); + gst_element_add_pad (GST_ELEMENT (self), self->vidsrc); + gst_pad_add_buffer_probe (self->vidsrc, + (GCallback) gst_uvc_h264_src_buffer_probe, self); + gst_pad_add_event_probe (self->vfsrc, + (GCallback) gst_uvc_h264_src_event_probe, self); + gst_pad_add_event_probe (self->vidsrc, + (GCallback) gst_uvc_h264_src_event_probe, self); + + self->srcpad_event_func = GST_PAD_EVENTFUNC (self->vfsrc); + + gst_pad_set_event_function (self->imgsrc, gst_uvc_h264_src_event); + gst_pad_set_event_function (self->vidsrc, gst_uvc_h264_src_event); + gst_pad_set_event_function (self->vfsrc, gst_uvc_h264_src_event); + + g_signal_connect (self->vidsrc, "linked", + (GCallback) gst_uvc_h264_src_pad_linking_cb, self); + g_signal_connect (self->vidsrc, "unlinked", + (GCallback) gst_uvc_h264_src_pad_linking_cb, self); + g_signal_connect (self->vfsrc, "linked", + (GCallback) gst_uvc_h264_src_pad_linking_cb, self); + g_signal_connect (self->vfsrc, "unlinked", + (GCallback) gst_uvc_h264_src_pad_linking_cb, self); + + self->vid_newseg = FALSE; + self->vf_newseg = FALSE; + self->v4l2_fd = -1; + gst_base_camera_src_set_mode (GST_BASE_CAMERA_SRC (self), MODE_VIDEO); + + self->main_format = UVC_H264_SRC_FORMAT_NONE; + self->main_width = 0; + self->main_height = 0; + self->main_frame_interval = 0; + self->main_stream_format = UVC_H264_STREAMFORMAT_ANNEXB; + self->main_profile = UVC_H264_PROFILE_CONSTRAINED_BASELINE; + self->secondary_format = UVC_H264_SRC_FORMAT_NONE; + self->secondary_width = 0; + self->secondary_height = 0; + self->secondary_frame_interval = 0; + + /* v4l2src properties */ + self->num_buffers = DEFAULT_NUM_BUFFERS; + self->device = g_strdup (DEFAULT_DEVICE); + + /* Static controls */ + self->initial_bitrate = DEFAULT_INITIAL_BITRATE; + self->slice_units = DEFAULT_SLICE_UNITS; + self->slice_mode = DEFAULT_SLICE_MODE; + self->iframe_period = DEFAULT_IFRAME_PERIOD; + self->usage_type = DEFAULT_USAGE_TYPE; + self->entropy = DEFAULT_ENTROPY; + self->enable_sei = DEFAULT_ENABLE_SEI; + self->num_reorder_frames = DEFAULT_NUM_REORDER_FRAMES; + self->preview_flipped = DEFAULT_PREVIEW_FLIPPED; + self->leaky_bucket_size = DEFAULT_LEAKY_BUCKET_SIZE; + + /* Dynamic controls */ + self->rate_control = DEFAULT_RATE_CONTROL; + self->fixed_framerate = DEFAULT_FIXED_FRAMERATE; + self->level_idc = DEFAULT_LEVEL_IDC; + self->peak_bitrate = DEFAULT_PEAK_BITRATE; + self->average_bitrate = DEFAULT_AVERAGE_BITRATE; + self->min_qp[QP_I_FRAME] = DEFAULT_MIN_QP; + self->max_qp[QP_I_FRAME] = DEFAULT_MAX_QP; + self->min_qp[QP_P_FRAME] = DEFAULT_MIN_QP; + self->max_qp[QP_P_FRAME] = DEFAULT_MAX_QP; + self->min_qp[QP_B_FRAME] = DEFAULT_MIN_QP; + self->max_qp[QP_B_FRAME] = DEFAULT_MAX_QP; + self->ltr_buffer_size = DEFAULT_LTR_BUFFER_SIZE; + self->ltr_encoder_control = DEFAULT_LTR_ENCODER_CONTROL; +} + +static void +gst_uvc_h264_src_dispose (GObject * object) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (object); + + if (self->usb_ctx) + libusb_exit (self->usb_ctx); + self->usb_ctx = NULL; + + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +gst_uvc_h264_src_set_property (GObject * object, + guint prop_id, const GValue * value, GParamSpec * pspec) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (object); + + switch (prop_id) { + case PROP_COLORSPACE_NAME: + g_free (self->colorspace_name); + self->colorspace_name = g_value_dup_string (value); + break; + case PROP_JPEG_DECODER_NAME: + g_free (self->jpeg_decoder_name); + self->jpeg_decoder_name = g_value_dup_string (value); + break; + case PROP_NUM_CLOCK_SAMPLES: + self->num_clock_samples = g_value_get_int (value); + if (self->mjpg_demux) + g_object_set (self->mjpg_demux, + "num-clock-samples", self->num_clock_samples, NULL); + break; + /* v4l2 properties */ + case PROP_NUM_BUFFERS: + self->num_buffers = g_value_get_int (value); + if (self->v4l2_src) + g_object_set_property (G_OBJECT (self->v4l2_src), "num-buffers", value); + break; + case PROP_DEVICE: + g_free (self->device); + self->device = g_value_dup_string (value); + if (self->v4l2_src) + g_object_set_property (G_OBJECT (self->v4l2_src), "device", value); + break; + /* Static controls */ + case PROP_INITIAL_BITRATE: + self->initial_bitrate = g_value_get_uint (value); + break; + case PROP_SLICE_UNITS: + self->slice_units = g_value_get_uint (value); + break; + case PROP_SLICE_MODE: + self->slice_mode = g_value_get_enum (value); + break; + case PROP_IFRAME_PERIOD: + self->iframe_period = g_value_get_uint (value); + break; + case PROP_USAGE_TYPE: + self->usage_type = g_value_get_enum (value); + break; + case PROP_ENTROPY: + self->entropy = g_value_get_enum (value); + break; + case PROP_ENABLE_SEI: + self->enable_sei = g_value_get_boolean (value); + break; + case PROP_NUM_REORDER_FRAMES: + self->num_reorder_frames = g_value_get_uint (value); + break; + case PROP_PREVIEW_FLIPPED: + self->preview_flipped = g_value_get_boolean (value); + break; + case PROP_LEAKY_BUCKET_SIZE: + self->leaky_bucket_size = g_value_get_uint (value); + break; + + + /* Dynamic controls */ + case PROP_RATE_CONTROL: + self->rate_control = g_value_get_enum (value); + set_rate_control (self); + update_rate_control (self); + break; + case PROP_FIXED_FRAMERATE: + self->fixed_framerate = g_value_get_boolean (value); + set_rate_control (self); + update_rate_control (self); + break; + case PROP_LEVEL_IDC: + self->level_idc = g_value_get_uint (value); + set_level_idc (self); + update_level_idc_and_get_max_mbps (self); + break; + case PROP_PEAK_BITRATE: + self->peak_bitrate = g_value_get_uint (value); + set_bitrate (self); + update_bitrate (self); + break; + case PROP_AVERAGE_BITRATE: + self->average_bitrate = g_value_get_uint (value); + set_bitrate (self); + update_bitrate (self); + break; + case PROP_MIN_IFRAME_QP: + self->min_qp[QP_I_FRAME] = g_value_get_int (value); + set_qp (self, QP_I_FRAME); + update_qp (self, QP_I_FRAME); + break; + case PROP_MAX_IFRAME_QP: + self->max_qp[QP_I_FRAME] = g_value_get_int (value); + set_qp (self, QP_I_FRAME); + update_qp (self, QP_I_FRAME); + break; + case PROP_MIN_PFRAME_QP: + self->min_qp[QP_P_FRAME] = g_value_get_int (value); + set_qp (self, QP_P_FRAME); + update_qp (self, QP_P_FRAME); + break; + case PROP_MAX_PFRAME_QP: + self->max_qp[QP_P_FRAME] = g_value_get_int (value); + set_qp (self, QP_P_FRAME); + update_qp (self, QP_P_FRAME); + break; + case PROP_MIN_BFRAME_QP: + self->min_qp[QP_B_FRAME] = g_value_get_int (value); + set_qp (self, QP_B_FRAME); + update_qp (self, QP_B_FRAME); + break; + case PROP_MAX_BFRAME_QP: + self->max_qp[QP_B_FRAME] = g_value_get_int (value); + set_qp (self, QP_B_FRAME); + update_qp (self, QP_B_FRAME); + break; + case PROP_LTR_BUFFER_SIZE: + self->ltr_buffer_size = g_value_get_int (value); + set_ltr (self); + update_ltr (self); + break; + case PROP_LTR_ENCODER_CONTROL: + self->ltr_encoder_control = g_value_get_int (value); + set_ltr (self); + update_ltr (self); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); + break; + } +} + +static void +gst_uvc_h264_src_get_property (GObject * object, + guint prop_id, GValue * value, GParamSpec * pspec) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (object); + uvcx_video_config_probe_commit_t probe; + + switch (prop_id) { + case PROP_INITIAL_BITRATE: + case PROP_SLICE_UNITS: + case PROP_SLICE_MODE: + case PROP_IFRAME_PERIOD: + case PROP_USAGE_TYPE: + case PROP_ENTROPY: + case PROP_ENABLE_SEI: + case PROP_NUM_REORDER_FRAMES: + case PROP_PREVIEW_FLIPPED: + case PROP_LEAKY_BUCKET_SIZE: + fill_probe_commit (self, &probe, 0, 0, 0, 0, 0); + if (GST_STATE (self) >= GST_STATE_PAUSED) { + xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, + (guchar *) & probe); + } + break; + default: + break; + } + + switch (prop_id) { + case PROP_COLORSPACE_NAME: + g_value_set_string (value, self->colorspace_name); + break; + case PROP_JPEG_DECODER_NAME: + g_value_set_string (value, self->jpeg_decoder_name); + break; + case PROP_NUM_CLOCK_SAMPLES: + g_value_set_int (value, self->num_clock_samples); + break; + /* v4l2src properties */ + case PROP_NUM_BUFFERS: + g_value_set_int (value, self->num_buffers); + break; + case PROP_DEVICE: + g_value_set_string (value, self->device); + break; + case PROP_DEVICE_NAME: + if (self->v4l2_src) + g_object_get_property (G_OBJECT (self->v4l2_src), "device-name", value); + else + g_value_set_static_string (value, ""); + break; + /* Static controls */ + case PROP_INITIAL_BITRATE: + g_value_set_uint (value, probe.dwBitRate); + break; + case PROP_SLICE_UNITS: + g_value_set_uint (value, probe.wSliceUnits); + break; + case PROP_SLICE_MODE: + g_value_set_enum (value, probe.wSliceMode); + break; + case PROP_IFRAME_PERIOD: + g_value_set_uint (value, probe.wIFramePeriod); + break; + case PROP_USAGE_TYPE: + g_value_set_enum (value, probe.bUsageType); + break; + case PROP_ENTROPY: + g_value_set_enum (value, probe.bEntropyCABAC); + break; + case PROP_ENABLE_SEI: + g_value_set_boolean (value, + (probe.bTimestamp == UVC_H264_TIMESTAMP_SEI_ENABLE)); + break; + case PROP_NUM_REORDER_FRAMES: + g_value_set_uint (value, probe.bNumOfReorderFrames); + break; + case PROP_PREVIEW_FLIPPED: + g_value_set_boolean (value, + (probe.bPreviewFlipped == UVC_H264_PREFLIPPED_HORIZONTAL)); + break; + case PROP_LEAKY_BUCKET_SIZE: + g_value_set_uint (value, probe.wLeakyBucketSize); + break; + + /* Dynamic controls */ + case PROP_RATE_CONTROL: + update_rate_control (self); + g_value_set_enum (value, self->rate_control); + break; + case PROP_FIXED_FRAMERATE: + update_rate_control (self); + g_value_set_boolean (value, self->fixed_framerate); + break; + case PROP_MAX_MBPS: + g_value_set_uint (value, update_level_idc_and_get_max_mbps (self)); + break; + case PROP_LEVEL_IDC: + update_level_idc_and_get_max_mbps (self); + g_value_set_uint (value, self->level_idc); + break; + case PROP_PEAK_BITRATE: + update_bitrate (self); + g_value_set_uint (value, self->peak_bitrate); + break; + case PROP_AVERAGE_BITRATE: + update_bitrate (self); + g_value_set_uint (value, self->average_bitrate); + break; + case PROP_MIN_IFRAME_QP: + update_qp (self, QP_I_FRAME); + g_value_set_int (value, self->min_qp[QP_I_FRAME]); + break; + case PROP_MAX_IFRAME_QP: + update_qp (self, QP_I_FRAME); + g_value_set_int (value, self->max_qp[QP_I_FRAME]); + break; + case PROP_MIN_PFRAME_QP: + update_qp (self, QP_P_FRAME); + g_value_set_int (value, self->min_qp[QP_P_FRAME]); + break; + case PROP_MAX_PFRAME_QP: + update_qp (self, QP_P_FRAME); + g_value_set_int (value, self->max_qp[QP_P_FRAME]); + break; + case PROP_MIN_BFRAME_QP: + update_qp (self, QP_B_FRAME); + g_value_set_int (value, self->min_qp[QP_B_FRAME]); + break; + case PROP_MAX_BFRAME_QP: + update_qp (self, QP_B_FRAME); + g_value_set_int (value, self->max_qp[QP_B_FRAME]); + break; + case PROP_LTR_BUFFER_SIZE: + update_ltr (self); + g_value_set_int (value, self->ltr_buffer_size); + break; + case PROP_LTR_ENCODER_CONTROL: + update_ltr (self); + g_value_set_int (value, self->ltr_encoder_control); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec); + break; + } +} + +/* Set dynamic controls */ +static void +set_rate_control (GstUvcH264Src * self) +{ + uvcx_rate_control_mode_t req; + + if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " RATE_CONTROL GET_CUR error"); + return; + } + + req.bRateControlMode = self->rate_control; + if (self->fixed_framerate) + req.bRateControlMode |= UVC_H264_RATECONTROL_FIXED_FRM_FLG; + + if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " RATE_CONTROL SET_CUR error"); + return; + } +} + +static void +set_level_idc (GstUvcH264Src * self) +{ + uvcx_video_advance_config_t req; + + if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_GET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG GET_CUR error"); + return; + } + + req.blevel_idc = self->level_idc; + if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_SET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG SET_CUR error"); + return; + } +} + +static void +set_bitrate (GstUvcH264Src * self) +{ + uvcx_bitrate_layers_t req; + + if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " BITRATE_LAYERS GET_CUR error"); + return; + } + + req.dwPeakBitrate = self->peak_bitrate; + req.dwAverageBitrate = self->average_bitrate; + if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_SET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " BITRATE_LAYERS SET_CUR error"); + return; + } +} + +static void +set_qp (GstUvcH264Src * self, gint type) +{ + uvcx_qp_steps_layers_t req; + + req.wLayerID = 0; + switch (type) { + case QP_I_FRAME: + req.bFrameType = UVC_H264_QP_STEPS_I_FRAME_TYPE; + break; + case QP_P_FRAME: + req.bFrameType = UVC_H264_QP_STEPS_P_FRAME_TYPE; + break; + case QP_B_FRAME: + req.bFrameType = UVC_H264_QP_STEPS_B_FRAME_TYPE; + break; + default: + return; + } + req.bMinQp = 0; + req.bMaxQp = 0; + if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error"); + return; + } + + if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS GET_CUR error"); + return; + } + + req.bMinQp = self->min_qp[type]; + req.bMaxQp = self->max_qp[type]; + if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error"); + return; + } +} + +static void +set_ltr (GstUvcH264Src * self) +{ + uvcx_ltr_buffer_size_control_t req; + + if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_GET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " LTR_BUFFER_SIZE GET_CUR error"); + return; + } + + req.bLTRBufferSize = self->ltr_buffer_size; + req.bLTREncoderControl = self->ltr_encoder_control; + if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_SET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, "LTR_BUFFER_SIZE SET_CUR error"); + return; + } +} + +/* Get Dynamic controls */ + +static void +update_rate_control (GstUvcH264Src * self) +{ + uvcx_rate_control_mode_t req; + + if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " RATE_CONTROL GET_CUR error"); + return; + } + + if (self->rate_control != (req.bRateControlMode & + ~UVC_H264_RATECONTROL_FIXED_FRM_FLG)) { + self->rate_control = (req.bRateControlMode & + ~UVC_H264_RATECONTROL_FIXED_FRM_FLG); + g_object_notify (G_OBJECT (self), "rate-control"); + } + if (self->fixed_framerate != ((req.bRateControlMode & + UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0)) { + self->fixed_framerate = ((req.bRateControlMode & + UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0); + g_object_notify (G_OBJECT (self), "fixed-framerate"); + } +} + + +static guint32 +update_level_idc_and_get_max_mbps (GstUvcH264Src * self) +{ + uvcx_video_advance_config_t req; + + if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_GET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG GET_CUR error"); + return 0; + } + + if (self->level_idc != req.blevel_idc) { + self->level_idc = req.blevel_idc; + g_object_notify (G_OBJECT (self), "level-idc"); + } + return req.dwMb_max; +} + +static void +update_bitrate (GstUvcH264Src * self) +{ + uvcx_bitrate_layers_t req; + + if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " BITRATE_LAYERS GET_CUR error"); + return; + } + if (self->peak_bitrate != req.dwPeakBitrate) { + self->peak_bitrate = req.dwPeakBitrate; + g_object_notify (G_OBJECT (self), "peak-bitrate"); + } + if (self->average_bitrate != req.dwAverageBitrate) { + self->average_bitrate = req.dwAverageBitrate; + g_object_notify (G_OBJECT (self), "average-bitrate"); + } +} + +static gboolean +update_qp (GstUvcH264Src * self, gint type) +{ + uvcx_qp_steps_layers_t req; + guint8 frame_type; + + req.wLayerID = 0; + switch (type) { + case QP_I_FRAME: + frame_type = UVC_H264_QP_STEPS_I_FRAME_TYPE; + break; + case QP_P_FRAME: + frame_type = UVC_H264_QP_STEPS_P_FRAME_TYPE; + break; + case QP_B_FRAME: + frame_type = UVC_H264_QP_STEPS_B_FRAME_TYPE; + break; + default: + return FALSE; + } + req.bFrameType = frame_type; + req.bMinQp = 0; + req.bMaxQp = 0; + if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error"); + return FALSE; + } + + if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_GET_CUR, (guchar *) & req)) { + GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS GET_CUR error"); + return FALSE; + } + + if (req.bFrameType == frame_type) { + if (self->min_qp[type] != req.bMinQp) { + self->min_qp[type] = req.bMinQp; + switch (type) { + case QP_I_FRAME: + g_object_notify (G_OBJECT (self), "min-iframe-qp"); + break; + case QP_P_FRAME: + g_object_notify (G_OBJECT (self), "min-pframe-qp"); + break; + case QP_B_FRAME: + g_object_notify (G_OBJECT (self), "min-bframe-qp"); + break; + default: + break; + } + } + if (self->max_qp[type] != req.bMaxQp) { + self->max_qp[type] = req.bMaxQp; + switch (type) { + case QP_I_FRAME: + g_object_notify (G_OBJECT (self), "max-iframe-qp"); + break; + case QP_P_FRAME: + g_object_notify (G_OBJECT (self), "max-pframe-qp"); + break; + case QP_B_FRAME: + g_object_notify (G_OBJECT (self), "max-bframe-qp"); + break; + default: + break; + } + } + return TRUE; + } else { + self->min_qp[type] = 0xFF; + self->max_qp[type] = 0xFF; + return FALSE; + } +} + +static void +update_ltr (GstUvcH264Src * self) +{ + uvcx_ltr_buffer_size_control_t req; + + if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_GET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " LTR_BUFFER_SIZE GET_CUR error"); + return; + } + + if (self->ltr_buffer_size != req.bLTRBufferSize) { + self->ltr_buffer_size = req.bLTRBufferSize; + g_object_notify (G_OBJECT (self), "ltr-buffer-size"); + } + if (self->ltr_encoder_control != req.bLTREncoderControl) { + self->ltr_encoder_control = req.bLTREncoderControl; + g_object_notify (G_OBJECT (self), "ltr-encoder-control"); + } +} + +#define STORE_MIN_DEF_MAX(type) \ + *(type *)min = *((type *) (min_p + offset)); \ + *(type *)def = *((type *) (def_p + offset)); \ + *(type *)max = *((type *) (max_p + offset)); + +static gboolean +probe_setting (GstUvcH264Src * self, uvcx_control_selector_t selector, + guint offset, gint size, gpointer min, gpointer def, gpointer max) +{ + guchar *min_p, *def_p, *max_p; + gboolean ret = FALSE; + __u16 len; + + if (!xu_query (self, selector, UVC_GET_LEN, (guchar *) & len)) { + GST_WARNING_OBJECT (self, "probe_setting GET_LEN error"); + return FALSE; + } + min_p = g_malloc0 (len); + def_p = g_malloc0 (len); + max_p = g_malloc0 (len); + + if (!xu_query (self, selector, UVC_GET_MIN, min_p)) { + GST_WARNING_OBJECT (self, "probe_setting GET_MIN error"); + goto end; + } + if (!xu_query (self, selector, UVC_GET_DEF, def_p)) { + GST_WARNING_OBJECT (self, "probe_setting GET_DEF error"); + goto end; + } + if (!xu_query (self, selector, UVC_GET_MAX, max_p)) { + GST_WARNING_OBJECT (self, "probe_setting GET_MAX error"); + goto end; + } + + switch (size) { + case -1: + STORE_MIN_DEF_MAX (gint8); + ret = TRUE; + break; + case 1: + STORE_MIN_DEF_MAX (guint8); + ret = TRUE; + break; + case -2: + STORE_MIN_DEF_MAX (gint16); + ret = TRUE; + break; + case 2: + STORE_MIN_DEF_MAX (guint16); + ret = TRUE; + break; + case -4: + STORE_MIN_DEF_MAX (gint32); + ret = TRUE; + break; + case 4: + STORE_MIN_DEF_MAX (guint32); + ret = TRUE; + break; + default: + break; + } + +end: + g_free (min_p); + g_free (def_p); + g_free (max_p); + + return ret; +} + +static gboolean +test_enum_setting (GstUvcH264Src * self, guint offset, guint size, + guint16 value) +{ + uvcx_video_config_probe_commit_t cur; + uvcx_video_config_probe_commit_t req; + guchar *req_p = (guchar *) & req; + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, (guchar *) & cur)) { + GST_WARNING_OBJECT (self, " GET_CUR error"); + return FALSE; + } + + req = cur; + + if (size == 1) + *((guint8 *) (req_p + offset)) = (guint8) value; + else + *((guint16 *) (req_p + offset)) = value; + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, req_p)) { + GST_WARNING_OBJECT (self, " SET_CUR error"); + return FALSE; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, req_p)) { + GST_WARNING_OBJECT (self, " GET_CUR error"); + return FALSE; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, (guchar *) & cur)) { + GST_WARNING_OBJECT (self, " SET_CUR error"); + return FALSE; + } + + if (size == 1) + return *((guint8 *) (req_p + offset)) == (guint8) value; + else + return *((guint16 *) (req_p + offset)) == value; +} + +static gboolean +gst_uvc_h264_src_get_enum_setting (GstUvcH264Src * self, gchar * property, + gint * mask, gint * default_value) +{ + guint8 min, def, max; + guint8 en; + gboolean ret = FALSE; + + if (g_strcmp0 (property, "slice-mode") == 0) { + guint16 min16, def16, max16; + guint16 en16; + + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, wSliceMode), 2, + &min16, &def16, &max16); + if (ret) { + *default_value = def16; + *mask = 0; + for (en16 = min16; en16 <= max16; en16++) { + if (test_enum_setting (self, offsetof (uvcx_video_config_probe_commit_t, + wSliceMode), 2, en16)) + *mask |= (1 << en16); + } + } + } else if (g_strcmp0 (property, "usage-type") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bUsageType), 1, + &min, &def, &max); + if (ret) { + *default_value = def; + *mask = 0; + for (en = min; en <= max; en++) { + if (test_enum_setting (self, offsetof (uvcx_video_config_probe_commit_t, + bUsageType), 1, en)) + *mask |= (1 << en); + } + } + } else if (g_strcmp0 (property, "entropy") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bEntropyCABAC), 1, + &min, &def, &max); + if (ret) { + *mask = (1 << min) | (1 << max); + *default_value = def; + } + } else if (g_strcmp0 (property, "rate-control") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bRateControlMode), 1, + &min, &def, &max); + if (ret) { + uvcx_rate_control_mode_t cur; + + *default_value = def; + *mask = 0; + + xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & cur); + + for (en = min; en <= max; en++) { + uvcx_rate_control_mode_t req = { 0, en }; + + if (xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR, + (guchar *) & req) && + xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, + (guchar *) & req) && req.bRateControlMode == en) + *mask |= (1 << en); + } + xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR, (guchar *) & cur); + } + } + + return ret; +} + +static gboolean +gst_uvc_h264_src_get_boolean_setting (GstUvcH264Src * self, gchar * property, + gboolean * changeable, gboolean * default_value) +{ + guint8 min, def, max; + gboolean ret = FALSE; + + if (g_strcmp0 (property, "enable-sei") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bTimestamp), 1, + &min, &def, &max); + *changeable = (min != max); + *default_value = (def != 0); + } else if (g_strcmp0 (property, "preview-flipped") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bPreviewFlipped), 1, + &min, &def, &max); + *changeable = (min != max); + *default_value = (def != 0); + } else if (g_strcmp0 (property, "fixed-framerate") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bRateControlMode), 1, + &min, &def, &max); + *changeable = ((max & UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0); + *default_value = ((def & UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0); + } + + return ret; +} + +static gboolean +gst_uvc_h264_src_get_int_setting (GstUvcH264Src * self, gchar * property, + gint * min, gint * def, gint * max) +{ + guint32 min32, def32, max32; + guint16 min16, def16, max16; + guint8 min8, def8, max8; + gint8 smin8, sdef8, smax8; + gboolean ret = FALSE; + + GST_DEBUG_OBJECT (self, "Probing int property %s", property); + if (g_strcmp0 (property, "initial-bitrate") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, dwBitRate), 4, + &min32, &def32, &max32); + *min = min32; + *def = def32; + *max = max32; + } else if (g_strcmp0 (property, "slice-units") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, wSliceUnits), 2, + &min16, &def16, &max16); + *min = min16; + *def = def16; + *max = max16; + } else if (g_strcmp0 (property, "iframe-period") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, wIFramePeriod), 2, + &min16, &def16, &max16); + *min = min16; + *def = def16; + *max = max16; + } else if (g_strcmp0 (property, "num-reorder-frames") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, bNumOfReorderFrames), 1, + &min8, &def8, &max8); + *min = min8; + *def = def8; + *max = max8; + } else if (g_strcmp0 (property, "leaky-bucket-size") == 0) { + ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE, + offsetof (uvcx_video_config_probe_commit_t, wLeakyBucketSize), 2, + &min16, &def16, &max16); + *min = min16; + *def = def16; + *max = max16; + } else if (g_strcmp0 (property, "level-idc") == 0) { + ret = probe_setting (self, UVCX_VIDEO_ADVANCE_CONFIG, + offsetof (uvcx_video_advance_config_t, blevel_idc), 1, + &min8, &def8, &max8); + *min = min8; + *def = def8; + *max = max8; + } else if (g_strcmp0 (property, "max-mbps") == 0) { + ret = probe_setting (self, UVCX_VIDEO_ADVANCE_CONFIG, + offsetof (uvcx_video_advance_config_t, dwMb_max), 4, + &min32, &def32, &max32); + *min = min32; + *def = def32; + *max = max32; + } else if (g_strcmp0 (property, "peak-bitrate") == 0) { + ret = probe_setting (self, UVCX_BITRATE_LAYERS, + offsetof (uvcx_bitrate_layers_t, dwPeakBitrate), 4, + &min32, &def32, &max32); + *min = min32; + *def = def32; + *max = max32; + } else if (g_strcmp0 (property, "average-bitrate") == 0) { + ret = probe_setting (self, UVCX_BITRATE_LAYERS, + offsetof (uvcx_bitrate_layers_t, dwAverageBitrate), 4, + &min32, &def32, &max32); + *min = min32; + *def = def32; + *max = max32; + } else if (g_strcmp0 (property, "min-iframe-qp") == 0) { + if (update_qp (self, QP_I_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "max-iframe-qp") == 0) { + if (update_qp (self, QP_I_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "min-pframe-qp") == 0) { + if (update_qp (self, QP_P_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "max-pframe-qp") == 0) { + if (update_qp (self, QP_P_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "min-bframe-qp") == 0) { + if (update_qp (self, QP_B_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "max-bframe-qp") == 0) { + if (update_qp (self, QP_B_FRAME)) + ret = probe_setting (self, UVCX_QP_STEPS_LAYERS, + offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8); + *min = smin8; + *def = sdef8; + *max = smax8; + } else if (g_strcmp0 (property, "ltr-buffer-size") == 0) { + ret = probe_setting (self, UVCX_LTR_BUFFER_SIZE_CONTROL, + offsetof (uvcx_ltr_buffer_size_control_t, bLTRBufferSize), 1, + &min8, &def8, &max8); + *min = min8; + *def = def8; + *max = max8; + } else if (g_strcmp0 (property, "ltr-encoder-control") == 0) { + ret = probe_setting (self, UVCX_LTR_BUFFER_SIZE_CONTROL, + offsetof (uvcx_ltr_buffer_size_control_t, bLTREncoderControl), 1, + &min8, &def8, &max8); + *min = min8; + *def = def8; + *max = max8; + } + + return ret; +} + +static gboolean +gst_uvc_h264_src_event_probe (GstPad * pad, GstEvent * event, + gpointer user_data) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (user_data); + gboolean ret = TRUE; + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_EOS: + ret = !self->reconfiguring; + break; + case GST_EVENT_NEWSEGMENT: + if (pad == self->vidsrc) { + ret = !self->vid_newseg; + self->vid_newseg = TRUE; + } else if (pad == self->vfsrc) { + ret = !self->vf_newseg; + self->vf_newseg = TRUE; + } + break; + default: + break; + } + + return ret; +} + +static gboolean +gst_uvc_h264_src_buffer_probe (GstPad * pad, GstBuffer * buffer, + gpointer user_data) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (user_data); + + /* TODO: Check the NALU type and make sure it is a keyframe */ + if (self->key_unit_event) { + GstClockTime ts, running_time, stream_time; + gboolean all_headers; + guint count; + GstEvent *downstream; + + if (gst_video_event_parse_upstream_force_key_unit (self->key_unit_event, + &ts, &all_headers, &count)) { + if (!GST_CLOCK_TIME_IS_VALID (ts)) { + ts = GST_BUFFER_TIMESTAMP (buffer); + } + running_time = gst_segment_to_running_time (&self->segment, + GST_FORMAT_TIME, ts); + + stream_time = gst_segment_to_stream_time (&self->segment, + GST_FORMAT_TIME, ts); + + GST_DEBUG_OBJECT (self, "Sending downstream force-key-unit : %d - %d ts=%" + GST_TIME_FORMAT " running time =%" GST_TIME_FORMAT " stream=%" + GST_TIME_FORMAT, all_headers, count, GST_TIME_ARGS (ts), + GST_TIME_ARGS (running_time), GST_TIME_ARGS (stream_time)); + downstream = gst_video_event_new_downstream_force_key_unit (ts, + running_time, stream_time, all_headers, count); + gst_pad_push_event (self->vidsrc, downstream); + gst_event_replace (&self->key_unit_event, NULL); + } + } + return TRUE; +} + +static gboolean +gst_uvc_h264_src_parse_event (GstUvcH264Src * self, GstPad * pad, + GstEvent * event) +{ + const GstStructure *s = gst_event_get_structure (event); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_CUSTOM_UPSTREAM: + if (pad == self->vidsrc && self->main_format == UVC_H264_SRC_FORMAT_H264) { + if (gst_video_event_is_force_key_unit (event)) { + uvcx_picture_type_control_t req = { 0, 0 }; + GstClockTime ts; + gboolean all_headers; + + if (gst_video_event_parse_upstream_force_key_unit (event, + &ts, &all_headers, NULL)) { + GST_INFO_OBJECT (self, "Received upstream force-key-unit : %d %" + GST_TIME_FORMAT, all_headers, GST_TIME_ARGS (ts)); + /* TODO: wait until 'ts' time is reached */ + if (all_headers) + req.wPicType = UVC_H264_PICTYPE_IDR_WITH_PPS_SPS; + else + req.wPicType = UVC_H264_PICTYPE_IDR; + + if (!xu_query (self, UVCX_PICTURE_TYPE_CONTROL, UVC_SET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " PICTURE_TYPE_CONTROL SET_CUR error"); + } else { + gst_event_replace (&self->key_unit_event, event); + gst_event_unref (event); + + return TRUE; + } + } + } else if (s && + gst_structure_has_name (s, "uvc-h264-ltr-picture-control")) { + guint put_at, encode_using; + + if (gst_structure_get_uint (s, "put-at", &put_at) && + gst_structure_get_uint (s, "encode-using", &encode_using)) { + uvcx_ltr_picture_control req = { 0, put_at, encode_using }; + + if (!xu_query (self, UVCX_LTR_PICTURE_CONTROL, UVC_SET_CUR, + (guchar *) & req)) { + GST_WARNING_OBJECT (self, " LTR PICTURE_CONTROL SET_CUR error"); + } else { + gst_event_unref (event); + + return TRUE; + } + } + return TRUE; + } else if (s && gst_structure_has_name (s, "uvc-h264-bitrate-control")) { + guint average, peak; + + if (gst_structure_get_uint (s, "average-bitrate", &average) && + gst_structure_get_uint (s, "peak-bitrate", &peak)) { + self->average_bitrate = average; + self->peak_bitrate = peak; + set_bitrate (self); + update_bitrate (self); + + gst_event_unref (event); + + return TRUE; + } + } else if (s && gst_structure_has_name (s, "uvc-h264-qp-control")) { + gint min_qp, max_qp; + gboolean valid_event = FALSE; + + if (gst_structure_get_int (s, "min-iframe-qp", &min_qp) && + gst_structure_get_int (s, "max-iframe-qp", &max_qp)) { + self->min_qp[QP_I_FRAME] = min_qp; + self->max_qp[QP_I_FRAME] = max_qp; + set_qp (self, QP_I_FRAME); + update_qp (self, QP_I_FRAME); + valid_event = TRUE; + } + if (gst_structure_get_int (s, "min-pframe-qp", &min_qp) && + gst_structure_get_int (s, "max-pframe-qp", &max_qp)) { + self->min_qp[QP_P_FRAME] = min_qp; + self->max_qp[QP_P_FRAME] = max_qp; + set_qp (self, QP_P_FRAME); + update_qp (self, QP_P_FRAME); + valid_event = TRUE; + } + if (gst_structure_get_int (s, "min-bframe-qp", &min_qp) && + gst_structure_get_int (s, "max-bframe-qp", &max_qp)) { + self->min_qp[QP_B_FRAME] = min_qp; + self->max_qp[QP_B_FRAME] = max_qp; + set_qp (self, QP_B_FRAME); + update_qp (self, QP_B_FRAME); + valid_event = TRUE; + } + + if (valid_event) { + gst_event_unref (event); + + return TRUE; + } + } else if (s && gst_structure_has_name (s, "uvc-h264-rate-control")) { + UvcH264RateControl rate; + gboolean fixed_framerate; + + if (gst_structure_get_enum (s, "rate-control", + UVC_H264_RATECONTROL_TYPE, (gint *) & rate) && + gst_structure_get_boolean (s, "fixed-framerate", + &fixed_framerate)) { + self->rate_control = rate; + self->fixed_framerate = fixed_framerate; + set_rate_control (self); + update_rate_control (self); + + gst_event_unref (event); + + return TRUE; + } + } else if (s && gst_structure_has_name (s, "uvc-h264-level-idc")) { + guint level_idc; + + if (gst_structure_get_uint (s, "level-idc", &level_idc)) { + self->level_idc = level_idc; + set_level_idc (self); + update_level_idc_and_get_max_mbps (self); + + gst_event_unref (event); + } + } + } + if (s && gst_structure_has_name (s, "renegotiate")) { + GST_DEBUG_OBJECT (self, "Received renegotiate on %s", + GST_PAD_NAME (pad)); + /* TODO: Do not reconstruct pipeline twice if we receive + the event on both pads */ + if (GST_STATE (self) >= GST_STATE_READY) { + /* TODO: diff the caps */ + gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); + } + return TRUE; + } + break; + default: + break; + } + + return FALSE; +} + +static gboolean +gst_uvc_h264_src_send_event (GstElement * element, GstEvent * event) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (element); + + if (gst_uvc_h264_src_parse_event (self, self->vidsrc, event)) + return TRUE; + + return GST_ELEMENT_CLASS (parent_class)->send_event (element, event); +} + +static gboolean +gst_uvc_h264_src_event (GstPad * pad, GstEvent * event) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (GST_PAD_PARENT (pad)); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_NEWSEGMENT: + if (!self->vid_newseg && pad == self->vidsrc) { + gboolean update; + gdouble rate, applied_rate; + GstFormat format; + gint64 start, stop, position; + + gst_event_parse_new_segment_full (event, &update, &rate, + &applied_rate, &format, &start, &stop, &position); + gst_segment_set_newsegment (&self->segment, update, rate, format, + start, stop, position); + } + break; + case GST_EVENT_FLUSH_STOP: + if (pad == self->vidsrc) { + gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED); + self->vid_newseg = FALSE; + } + if (pad == self->vfsrc) + self->vf_newseg = FALSE; + break; + default: + if (gst_uvc_h264_src_parse_event (self, pad, event)) + return TRUE; + break; + } + return self->srcpad_event_func (pad, event); +} + +static guint8 +xu_get_id (GstUvcH264Src * self) +{ + static const __u8 guid[16] = GUID_UVCX_H264_XU; + GUdevClient *client; + GUdevDevice *udevice; + GUdevDevice *parent; + guint64 busnum; + guint64 devnum; + libusb_device **device_list = NULL; + libusb_device *device = NULL; + ssize_t cnt; + int i, j, k; + + + if (self->usb_ctx == NULL) + libusb_init (&self->usb_ctx); + + client = g_udev_client_new (NULL); + if (client) { + udevice = g_udev_client_query_by_device_file (client, self->device); + if (udevice) { + parent = g_udev_device_get_parent_with_subsystem (udevice, "usb", + "usb_device"); + if (parent) { + busnum = g_udev_device_get_sysfs_attr_as_uint64 (parent, "busnum"); + devnum = g_udev_device_get_sysfs_attr_as_uint64 (parent, "devnum"); + + cnt = libusb_get_device_list (self->usb_ctx, &device_list); + for (i = 0; i < cnt; i++) { + if (busnum == libusb_get_bus_number (device_list[i]) && + devnum == libusb_get_device_address (device_list[i])) { + device = libusb_ref_device (device_list[i]); + break; + } + } + libusb_free_device_list (device_list, 1); + g_object_unref (parent); + } + g_object_unref (udevice); + } + g_object_unref (client); + } + + if (device) { + struct libusb_device_descriptor desc; + + if (libusb_get_device_descriptor (device, &desc) == 0) { + for (i = 0; i < desc.bNumConfigurations; ++i) { + struct libusb_config_descriptor *config = NULL; + + if (libusb_get_config_descriptor (device, i, &config) == 0) { + for (j = 0; j < config->bNumInterfaces; j++) { + for (k = 0; k < config->interface[j].num_altsetting; k++) { + const struct libusb_interface_descriptor *interface; + const guint8 *ptr = NULL; + + interface = &config->interface[j].altsetting[k]; + if (interface->bInterfaceClass != LIBUSB_CLASS_VIDEO || + interface->bInterfaceSubClass != USB_VIDEO_CONTROL) + continue; + ptr = interface->extra; + while (ptr - interface->extra + + sizeof (xu_descriptor) < interface->extra_length) { + xu_descriptor *desc = (xu_descriptor *) ptr; + + GST_DEBUG_OBJECT (self, "Found VideoControl interface with " + "unit id %d : %" GUID_FORMAT, desc->bUnitID, + GUID_ARGS (desc->guidExtensionCode)); + if (desc->bDescriptorType == USB_VIDEO_CONTROL_INTERFACE && + desc->bDescriptorSubType == USB_VIDEO_CONTROL_XU_TYPE && + memcmp (desc->guidExtensionCode, guid, 16) == 0) { + guint8 unit_id = desc->bUnitID; + + GST_DEBUG_OBJECT (self, "Found H264 XU unit : %d", unit_id); + + libusb_unref_device (device); + return unit_id; + } + ptr += desc->bLength; + } + } + } + } + } + } + libusb_unref_device (device); + } + + return 0; +} + +static gboolean +xu_query (GstUvcH264Src * self, guint selector, guint query, guchar * data) +{ + struct uvc_xu_control_query xu; + __u16 len; + + if (self->v4l2_fd == -1) { + GST_WARNING_OBJECT (self, "Can't query XU with fd = -1"); + return FALSE; + } + + xu.unit = self->h264_unit_id; + xu.selector = selector; + + xu.query = UVC_GET_LEN; + xu.size = sizeof (len); + xu.data = (unsigned char *) &len; + if (-1 == ioctl (self->v4l2_fd, UVCIOC_CTRL_QUERY, &xu)) { + GST_WARNING_OBJECT (self, "PROBE GET_LEN error"); + return FALSE; + } + + if (query == UVC_GET_LEN) { + *((__u16 *) data) = len; + } else { + xu.query = query; + xu.size = len; + xu.data = data; + if (-1 == ioctl (self->v4l2_fd, UVCIOC_CTRL_QUERY, &xu)) { + return FALSE; + } + } + + return TRUE; +} + +static void +fill_probe_commit (GstUvcH264Src * self, + uvcx_video_config_probe_commit_t * probe, guint32 frame_interval, + guint32 width, guint32 height, guint32 profile, + UvcH264StreamFormat stream_format) +{ + probe->dwFrameInterval = frame_interval; + probe->dwBitRate = self->initial_bitrate; + probe->wWidth = width; + probe->wHeight = height; + probe->wSliceUnits = self->slice_units; + probe->wSliceMode = self->slice_mode; + probe->wProfile = profile; + probe->wIFramePeriod = self->iframe_period; + probe->bUsageType = self->usage_type; + probe->bRateControlMode = self->rate_control; + if (self->fixed_framerate) + probe->bRateControlMode |= UVC_H264_RATECONTROL_FIXED_FRM_FLG; + probe->bStreamFormat = stream_format; + probe->bEntropyCABAC = self->entropy; + probe->bTimestamp = self->enable_sei ? + UVC_H264_TIMESTAMP_SEI_ENABLE : UVC_H264_TIMESTAMP_SEI_DISABLE; + probe->bNumOfReorderFrames = self->num_reorder_frames; + probe->bPreviewFlipped = self->preview_flipped ? + UVC_H264_PREFLIPPED_HORIZONTAL : UVC_H264_PREFLIPPED_DISABLE; + probe->wLeakyBucketSize = self->leaky_bucket_size; +} + +static void +print_probe_commit (GstUvcH264Src * self, + uvcx_video_config_probe_commit_t * probe) +{ + GST_DEBUG_OBJECT (self, " Frame interval : %d *100ns", + probe->dwFrameInterval); + GST_DEBUG_OBJECT (self, " Bit rate : %d", probe->dwBitRate); + GST_DEBUG_OBJECT (self, " Hints : %X", probe->bmHints); + GST_DEBUG_OBJECT (self, " Configuration index : %d", + probe->wConfigurationIndex); + GST_DEBUG_OBJECT (self, " Width : %d", probe->wWidth); + GST_DEBUG_OBJECT (self, " Height : %d", probe->wHeight); + GST_DEBUG_OBJECT (self, " Slice units : %d", probe->wSliceUnits); + GST_DEBUG_OBJECT (self, " Slice mode : %X", probe->wSliceMode); + GST_DEBUG_OBJECT (self, " Profile : %X", probe->wProfile); + GST_DEBUG_OBJECT (self, " IFrame Period : %d ms", probe->wIFramePeriod); + GST_DEBUG_OBJECT (self, " Estimated video delay : %d ms", + probe->wEstimatedVideoDelay); + GST_DEBUG_OBJECT (self, " Estimated max config delay : %d ms", + probe->wEstimatedMaxConfigDelay); + GST_DEBUG_OBJECT (self, " Usage type : %X", probe->bUsageType); + GST_DEBUG_OBJECT (self, " Rate control mode : %X", probe->bRateControlMode); + GST_DEBUG_OBJECT (self, " Temporal scale mode : %X", + probe->bTemporalScaleMode); + GST_DEBUG_OBJECT (self, " Spatial scale mode : %X", + probe->bSpatialScaleMode); + GST_DEBUG_OBJECT (self, " SNR scale mode : %X", probe->bSNRScaleMode); + GST_DEBUG_OBJECT (self, " Stream mux option : %X", probe->bStreamMuxOption); + GST_DEBUG_OBJECT (self, " Stream Format : %X", probe->bStreamFormat); + GST_DEBUG_OBJECT (self, " Entropy CABAC : %X", probe->bEntropyCABAC); + GST_DEBUG_OBJECT (self, " Timestamp : %X", probe->bTimestamp); + GST_DEBUG_OBJECT (self, " Num of reorder frames : %d", + probe->bNumOfReorderFrames); + GST_DEBUG_OBJECT (self, " Preview flipped : %X", probe->bPreviewFlipped); + GST_DEBUG_OBJECT (self, " View : %d", probe->bView); + GST_DEBUG_OBJECT (self, " Stream ID : %X", probe->bStreamID); + GST_DEBUG_OBJECT (self, " Spatial layer ratio : %f", + ((probe->bSpatialLayerRatio & 0xF0) >> 4) + + ((float) (probe->bSpatialLayerRatio & 0x0F)) / 16); + GST_DEBUG_OBJECT (self, " Leaky bucket size : %d ms", + probe->wLeakyBucketSize); +} + +static void +configure_h264 (GstUvcH264Src * self, gint fd) +{ + uvcx_video_config_probe_commit_t probe; + + /* Set the secondary format first, so the last SET_CUR will be for the + * H264 format. This way, we can still get the static control values with + * a GET_CUR. Otherwise all static properties will return 0 because that's + * what the GET_CUR of the raw format returns. + */ + if (self->secondary_format == UVC_H264_SRC_FORMAT_RAW) { + memset (&probe, 0, sizeof (probe)); + probe.dwFrameInterval = self->secondary_frame_interval; + probe.wWidth = self->secondary_width; + probe.wHeight = self->secondary_height; + probe.bStreamMuxOption = 5; + + GST_DEBUG_OBJECT (self, "RAW PROBE SET_CUR : "); + print_probe_commit (self, &probe); + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE SET_CUR error"); + return; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return; + } + GST_DEBUG_OBJECT (self, "RAW PROBE GET_CUR : "); + print_probe_commit (self, &probe); + + if (!xu_query (self, UVCX_VIDEO_CONFIG_COMMIT, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "COMMIT SET_CUR error"); + return; + } + } + /* Print MIN/MAX/DEF probe values for debugging purposes */ + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_MIN, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return; + } + GST_DEBUG_OBJECT (self, "PROBE GET_MIN : "); + print_probe_commit (self, &probe); + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_MAX, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return; + } + GST_DEBUG_OBJECT (self, "PROBE GET_MAX : "); + print_probe_commit (self, &probe); + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_DEF, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return; + } + GST_DEBUG_OBJECT (self, "PROBE GET_DEF : "); + print_probe_commit (self, &probe); + + fill_probe_commit (self, &probe, self->main_frame_interval, + self->main_width, self->main_height, self->main_profile, + self->main_stream_format); + if (self->secondary_format != UVC_H264_SRC_FORMAT_NONE) + probe.bStreamMuxOption = 3; + else + probe.bStreamMuxOption = 0; + probe.bmHints = UVC_H264_BMHINTS_RESOLUTION | UVC_H264_BMHINTS_PROFILE | + UVC_H264_BMHINTS_FRAME_INTERVAL; + + GST_DEBUG_OBJECT (self, "PROBE SET_CUR : "); + print_probe_commit (self, &probe); + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE SET_CUR error"); + return; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return; + } + GST_DEBUG_OBJECT (self, "PROBE GET_CUR : "); + print_probe_commit (self, &probe); + + /* Must validate the settings accepted by the encoder */ + if (!xu_query (self, UVCX_VIDEO_CONFIG_COMMIT, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "COMMIT SET_CUR error"); + return; + } +} + +static void +v4l2src_prepare_format (GstElement * v4l2src, gint fd, guint fourcc, + guint width, guint height, gpointer user_data) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (user_data); + + GST_DEBUG_OBJECT (self, "v4l2src prepare-format with FCC %" GST_FOURCC_FORMAT, + GST_FOURCC_ARGS (fourcc)); + + if (self->main_format == UVC_H264_SRC_FORMAT_H264) { + /* TODO: update static controls and g_object_notify those that changed */ + configure_h264 (self, fd); + + /* TODO: update dynamic controls on READY state */ + /* Configure dynamic controls */ + set_rate_control (self); + update_rate_control (self); + set_level_idc (self); + update_level_idc_and_get_max_mbps (self); + set_bitrate (self); + update_bitrate (self); + set_qp (self, QP_I_FRAME); + update_qp (self, QP_I_FRAME); + set_qp (self, QP_P_FRAME); + update_qp (self, QP_P_FRAME); + set_qp (self, QP_B_FRAME); + update_qp (self, QP_B_FRAME); + set_ltr (self); + update_ltr (self); + } +} + +static gboolean +_extract_caps_info (GstStructure * structure, guint16 * width, guint16 * height, + guint32 * frame_interval) +{ + gint w, h, fps_n, fps_d; + gboolean ret = TRUE; + + ret &= gst_structure_get_int (structure, "width", &w); + ret &= gst_structure_get_int (structure, "height", &h); + ret &= gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d); + + if (ret) { + *width = w; + *height = h; + /* Interval is in 100ns */ + *frame_interval = GST_TIME_AS_NSECONDS ((fps_d * GST_SECOND) / fps_n) / 100; + } + + return ret; +} + +static guint16 +_extract_profile (GstStructure * structure) +{ + const gchar *profile_str; + guint16 profile; + + profile = UVC_H264_PROFILE_HIGH; + profile_str = gst_structure_get_string (structure, "profile"); + if (profile_str) { + if (!strcmp (profile_str, "constrained-baseline")) { + profile = UVC_H264_PROFILE_CONSTRAINED_BASELINE; + } else if (!strcmp (profile_str, "baseline")) { + profile = UVC_H264_PROFILE_BASELINE; + } else if (!strcmp (profile_str, "main")) { + profile = UVC_H264_PROFILE_MAIN; + } else if (!strcmp (profile_str, "high")) { + profile = UVC_H264_PROFILE_HIGH; + } + } + return profile; +} + +static UvcH264StreamFormat +_extract_stream_format (GstStructure * structure) +{ + const gchar *stream_format; + + stream_format = gst_structure_get_string (structure, "stream-format"); + if (stream_format) { + if (!strcmp (stream_format, "avc")) + return UVC_H264_STREAMFORMAT_NAL; + else if (!strcmp (stream_format, "byte-stream")) + return UVC_H264_STREAMFORMAT_ANNEXB; + } + return UVC_H264_STREAMFORMAT_ANNEXB; +} + +static GstCaps * +_transform_caps (GstUvcH264Src * self, GstCaps * caps, const gchar * name) +{ + GstElement *el = gst_element_factory_make (name, NULL); + GstElement *cf = gst_element_factory_make ("capsfilter", NULL); + GstPad *sink; + + if (!el || !cf || !gst_bin_add (GST_BIN (self), el)) { + if (el) + gst_object_unref (el); + if (cf) + gst_object_unref (cf); + goto done; + } + if (!gst_bin_add (GST_BIN (self), cf)) { + gst_object_unref (cf); + gst_bin_remove (GST_BIN (self), el); + goto done; + } + if (!gst_element_link (el, cf)) + goto error_remove; + + sink = gst_element_get_static_pad (el, "sink"); + if (!sink) + goto error_remove; + g_object_set (cf, "caps", caps, NULL); + + caps = gst_pad_get_caps (sink); + gst_object_unref (sink); + +error_remove: + gst_bin_remove (GST_BIN (self), cf); + gst_bin_remove (GST_BIN (self), el); + +done: + return caps; +} + +static GstCaps * +gst_uvc_h264_src_transform_caps (GstUvcH264Src * self, GstCaps * caps) +{ + GstCaps *h264 = gst_caps_new_simple ("video/x-h264", NULL); + GstCaps *jpg = gst_caps_new_simple ("image/jpeg", NULL); + GstCaps *h264_caps = gst_caps_intersect (h264, caps); + GstCaps *jpg_caps = gst_caps_intersect (jpg, caps); + + /* TODO: Keep caps order after transformation */ + caps = _transform_caps (self, caps, self->colorspace_name); + + if (!gst_caps_is_empty (h264_caps)) { + GstCaps *temp = gst_caps_union (caps, h264_caps); + gst_caps_unref (caps); + caps = temp; + } + if (!gst_caps_is_empty (jpg_caps)) { + GstCaps *temp = gst_caps_union (caps, jpg_caps); + gst_caps_unref (caps); + caps = temp; + } + + if (h264_caps) + gst_caps_unref (h264_caps); + if (jpg_caps) + gst_caps_unref (jpg_caps); + gst_caps_unref (h264); + gst_caps_unref (jpg); + + + return caps; +} + +static GstCaps * +gst_uvc_h264_src_fixate_caps (GstUvcH264Src * self, GstPad * v4l_pad, + GstCaps * v4l_caps, GstCaps * peer_caps, gboolean primary) +{ + GstCaps *caps = NULL; + GstCaps *icaps = NULL; + GstCaps *tcaps = NULL; + int i; + + if (v4l_caps == NULL || gst_caps_is_any (v4l_caps)) { + GST_DEBUG_OBJECT (self, "v4l caps are invalid. not fixating"); + return NULL; + } + + tcaps = gst_caps_intersect_full (peer_caps, v4l_caps, + GST_CAPS_INTERSECT_FIRST); + GST_DEBUG_OBJECT (self, "intersect: %" GST_PTR_FORMAT, tcaps); + icaps = gst_caps_normalize (tcaps); + gst_caps_unref (tcaps); + + /* Prefer the first caps we are compatible with that the peer proposed */ + for (i = 0; i < gst_caps_get_size (icaps); i++) { + /* get intersection */ + GstCaps *ipcaps = gst_caps_copy_nth (icaps, i); + GstStructure *s = gst_caps_get_structure (ipcaps, 0); + + GST_DEBUG_OBJECT (self, "Testing %s: %" GST_PTR_FORMAT, + primary ? "primary" : "secondary", ipcaps); + if (primary && gst_structure_has_name (s, "video/x-h264")) { + uvcx_video_config_probe_commit_t probe; + guint16 width; + guint16 height; + guint32 interval; + guint16 profile; + UvcH264StreamFormat stream_format; + + if (_extract_caps_info (s, &width, &height, &interval)) { + profile = _extract_profile (s); + stream_format = _extract_stream_format (s); + fill_probe_commit (self, &probe, interval, width, height, + profile, stream_format); + probe.bmHints = UVC_H264_BMHINTS_RESOLUTION | + UVC_H264_BMHINTS_PROFILE | UVC_H264_BMHINTS_FRAME_INTERVAL; + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE SET_CUR error"); + return NULL; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return NULL; + } + GST_DEBUG_OBJECT (self, "Probe gives us %d==%d, %d==%d, %d==%d", + probe.wWidth, width, probe.wHeight, height, + probe.bStreamFormat, stream_format); + if (probe.wWidth == width && probe.wHeight == height && + probe.bStreamFormat == stream_format) { + caps = ipcaps; + break; + } + } + } else if (!primary && self->main_format == UVC_H264_SRC_FORMAT_H264) { + uvcx_video_config_probe_commit_t probe; + guint16 width; + guint16 height; + guint32 interval; + + if (_extract_caps_info (s, &width, &height, &interval)) { + if (gst_structure_has_name (s, "video/x-raw-yuv")) { + guint32 fcc = 0; + guint8 mux = 0; + + if (gst_structure_get_fourcc (s, "format", &fcc)) { + if (fcc == GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')) + mux = 4; + else if (fcc == GST_MAKE_FOURCC ('N', 'V', '1', '2')) + mux = 8; + } + if (mux != 0) { + memset (&probe, 0, sizeof (probe)); + probe.dwFrameInterval = interval; + probe.wWidth = width; + probe.wHeight = height; + probe.bStreamMuxOption = mux | 1; + probe.bmHints = UVC_H264_BMHINTS_RESOLUTION | + UVC_H264_BMHINTS_PROFILE | UVC_H264_BMHINTS_FRAME_INTERVAL; + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE SET_CUR error"); + return NULL; + } + + if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, + (guchar *) & probe)) { + GST_WARNING_OBJECT (self, "PROBE GET_CUR error"); + return NULL; + } + GST_DEBUG_OBJECT (self, "Probe gives us %d==%d, %d==%d, %d~=%d", + probe.wWidth, width, probe.wHeight, height, + probe.bStreamMuxOption, mux); + if (probe.wWidth == width && probe.wHeight == height && + (probe.bStreamMuxOption & mux) != 0) { + caps = ipcaps; + break; + } + } + } else if (gst_structure_has_name (s, "image/jpeg")) { + /* HACK ALERT: No way of figuring this one out but it seems the + * camera doesn't allow for h264 muxing and jpeg resolution higher + * than 640x480 so we shouldn't allow it */ + if (width <= 640 && height <= 480) { + caps = ipcaps; + break; + } + } + } + } else { + caps = ipcaps; + break; + } + gst_caps_unref (ipcaps); + } + + if (caps) { + caps = gst_caps_make_writable (caps); + gst_caps_truncate (caps); + + /* now fixate */ + if (!gst_caps_is_empty (caps)) { + gst_pad_fixate_caps (v4l_pad, caps); + GST_DEBUG_OBJECT (self, "fixated to: %" GST_PTR_FORMAT, caps); + } + + if (gst_caps_is_empty (caps) || gst_caps_is_any (caps)) { + gst_caps_unref (caps); + caps = NULL; + } + } + + return caps; +} + +static void +gst_uvc_h264_src_destroy_pipeline (GstUvcH264Src * self, gboolean v4l2src) +{ + GstIterator *iter = NULL; + gboolean done; + + if (v4l2src && self->v4l2_src) { + gst_bin_remove (GST_BIN (self), self->v4l2_src); + gst_element_set_state (self->v4l2_src, GST_STATE_NULL); + gst_object_unref (self->v4l2_src); + self->v4l2_src = NULL; + self->v4l2_fd = -1; + self->h264_unit_id = 0; + } + if (self->mjpg_demux) { + gst_bin_remove (GST_BIN (self), self->mjpg_demux); + gst_element_set_state (self->mjpg_demux, GST_STATE_NULL); + gst_object_unref (self->mjpg_demux); + self->mjpg_demux = NULL; + } + if (self->jpeg_dec) { + gst_bin_remove (GST_BIN (self), self->jpeg_dec); + gst_element_set_state (self->jpeg_dec, GST_STATE_NULL); + gst_object_unref (self->jpeg_dec); + self->jpeg_dec = NULL; + } + if (self->vid_colorspace) { + gst_bin_remove (GST_BIN (self), self->vid_colorspace); + gst_element_set_state (self->vid_colorspace, GST_STATE_NULL); + gst_object_unref (self->vid_colorspace); + self->vid_colorspace = NULL; + } + if (self->vf_colorspace) { + gst_bin_remove (GST_BIN (self), self->vf_colorspace); + gst_element_set_state (self->vf_colorspace, GST_STATE_NULL); + gst_object_unref (self->vf_colorspace); + self->vf_colorspace = NULL; + } + iter = gst_bin_iterate_elements (GST_BIN (self)); + done = FALSE; + while (!done) { + GstElement *item = NULL; + + switch (gst_iterator_next (iter, (gpointer *) & item)) { + case GST_ITERATOR_OK: + if (item != self->v4l2_src) { + gst_bin_remove (GST_BIN (self), item); + gst_element_set_state (item, GST_STATE_NULL); + } + gst_object_unref (item); + break; + case GST_ITERATOR_RESYNC: + gst_iterator_resync (iter); + break; + case GST_ITERATOR_ERROR: + done = TRUE; + break; + case GST_ITERATOR_DONE: + done = TRUE; + break; + } + } + gst_iterator_free (iter); +} + +static gboolean +ensure_v4l2src (GstUvcH264Src * self) +{ + gchar *device = NULL; + GstClock *v4l2_clock = NULL; + + if (self->v4l2_src == NULL) { + /* Create v4l2 source and set it up */ + self->v4l2_src = gst_element_factory_make ("v4l2src", NULL); + if (!self->v4l2_src || !gst_bin_add (GST_BIN (self), self->v4l2_src)) + goto error; + gst_object_ref (self->v4l2_src); + g_signal_connect (self->v4l2_src, "prepare-format", + (GCallback) v4l2src_prepare_format, self); + } + + g_object_get (self->v4l2_src, "device", &device, NULL); + g_object_set (self->v4l2_src, + "device", self->device, "num-buffers", self->num_buffers, NULL); + + v4l2_clock = gst_element_get_clock (self->v4l2_src); + + /* Set to NULL if the device changed */ + if (g_strcmp0 (device, self->device)) + gst_element_set_state (self->v4l2_src, GST_STATE_NULL); + g_free (device); + + if (gst_element_set_state (self->v4l2_src, GST_STATE_READY) != + GST_STATE_CHANGE_SUCCESS) { + GST_DEBUG_OBJECT (self, "Unable to set v4l2src to READY state"); + goto error_remove; + } + + /* Set/Update the fd and unit id after we go to READY */ + g_object_get (self->v4l2_src, "device-fd", &self->v4l2_fd, NULL); + self->h264_unit_id = xu_get_id (self); + + if (self->h264_unit_id == 0) { + GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS, + ("Device is not a valid UVC H264 camera"), (NULL)); + goto error_remove; + } + + /* going to state READY makes v4l2src lose its reference to the clock */ + if (v4l2_clock) { + gst_element_set_clock (self->v4l2_src, v4l2_clock); + gst_element_set_base_time (self->v4l2_src, + gst_element_get_base_time (GST_ELEMENT (self))); + gst_object_unref (v4l2_clock); + } + + return TRUE; + +error_remove: + gst_element_set_state (self->v4l2_src, GST_STATE_NULL); + gst_bin_remove (GST_BIN (self), self->v4l2_src); + +error: + if (self->v4l2_src) + gst_object_unref (self->v4l2_src); + self->v4l2_src = NULL; + self->v4l2_fd = -1; + self->h264_unit_id = 0; + + return FALSE; +} + +static gboolean +gst_uvc_h264_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (bcamsrc); + GstIterator *iter = NULL; + gboolean iter_done = FALSE; + GstPad *vf_pad = NULL; + GstCaps *vf_caps = NULL; + GstStructure *vf_struct = NULL; + GstPad *vid_pad = NULL; + GstCaps *vid_caps = NULL; + GstStructure *vid_struct = NULL; + GstCaps *src_caps = NULL; + GstPad *v4l_pad = NULL; + GstCaps *v4l_caps = NULL; + gboolean jpg2raw = FALSE; + + enum + { + RAW_NONE, ENCODED_NONE, NONE_RAW, NONE_ENCODED, + H264_JPG, H264_RAW, H264_JPG2RAW, NONE_NONE, + RAW_RAW, ENCODED_ENCODED, + } type; + + GST_DEBUG_OBJECT (self, "Construct pipeline"); + self->reconfiguring = TRUE; + + if (self->v4l2_src) { + uvcx_encoder_reset req = { 0 }; + + if (!xu_query (self, UVCX_ENCODER_RESET, UVC_SET_CUR, (guchar *) & req)) + GST_WARNING_OBJECT (self, " UVCX_ENCODER_RESET SET_CUR error"); + } + + if (!ensure_v4l2src (self)) + goto error; + + gst_uvc_h264_src_destroy_pipeline (self, FALSE); + + /* Potentially unlink v4l2src to the ghost pads */ + gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc), NULL); + gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), NULL); + + vf_caps = gst_pad_peer_get_caps (self->vfsrc); + vid_caps = gst_pad_peer_get_caps (self->vidsrc); + + GST_DEBUG_OBJECT (self, "vfsrc caps : %" GST_PTR_FORMAT, vf_caps); + GST_DEBUG_OBJECT (self, "vidsrc caps : %" GST_PTR_FORMAT, vid_caps); + if (!self->started) { + GST_DEBUG_OBJECT (self, "video not started. Ignoring vidsrc caps"); + if (vid_caps) + gst_caps_unref (vid_caps); + vid_caps = NULL; + } + + v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src"); + v4l_caps = gst_pad_get_caps (v4l_pad); + GST_DEBUG_OBJECT (self, "v4l2src caps : %" GST_PTR_FORMAT, v4l_caps); + if (vid_caps) { + GstCaps *trans_caps = gst_uvc_h264_src_transform_caps (self, vid_caps); + + gst_caps_unref (vid_caps); + vid_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps, + trans_caps, TRUE); + gst_caps_unref (trans_caps); + + if (vid_caps) { + vid_struct = gst_caps_get_structure (vid_caps, 0); + } else { + GST_WARNING_OBJECT (self, "Could not negotiate vidsrc caps format"); + gst_object_unref (v4l_pad); + gst_caps_unref (v4l_caps); + goto error_remove; + } + } + GST_DEBUG_OBJECT (self, "Fixated vidsrc caps : %" GST_PTR_FORMAT, vid_caps); + + if (vid_caps && gst_structure_has_name (vid_struct, "video/x-h264")) { + self->main_format = UVC_H264_SRC_FORMAT_H264; + if (!_extract_caps_info (vid_struct, &self->main_width, + &self->main_height, &self->main_frame_interval)) { + gst_object_unref (v4l_pad); + gst_caps_unref (v4l_caps); + goto error_remove; + } + + self->main_stream_format = _extract_stream_format (vid_struct); + self->main_profile = _extract_profile (vid_struct); + } else { + self->main_format = UVC_H264_SRC_FORMAT_NONE; + } + + if (vf_caps) { + GstCaps *trans_caps = gst_uvc_h264_src_transform_caps (self, vf_caps); + + gst_caps_unref (vf_caps); + vf_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps, + trans_caps, FALSE); + + /* If we couldn't find a suitable vf cap, try the jpeg2raw pipeline */ + if (!vf_caps && self->main_format == UVC_H264_SRC_FORMAT_H264) { + GstCaps *jpg_caps; + + jpg2raw = TRUE; + jpg_caps = _transform_caps (self, trans_caps, self->jpeg_decoder_name); + + vf_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps, + jpg_caps, FALSE); + gst_caps_unref (jpg_caps); + } + gst_caps_unref (trans_caps); + if (vf_caps) { + vf_struct = gst_caps_get_structure (vf_caps, 0); + } else { + GST_WARNING_OBJECT (self, "Could not negotiate vfsrc caps format"); + gst_object_unref (v4l_pad); + gst_caps_unref (v4l_caps); + goto error_remove; + } + } + GST_DEBUG_OBJECT (self, "Fixated vfsrc caps : %" GST_PTR_FORMAT, vf_caps); + gst_object_unref (v4l_pad); + gst_caps_unref (v4l_caps); + + if (vf_caps && vid_caps && + !gst_structure_has_name (vid_struct, "video/x-h264")) { + /* Allow for vfsrc+vidsrc to both be raw or jpeg */ + if (gst_structure_has_name (vid_struct, "image/jpeg") && + gst_structure_has_name (vf_struct, "image/jpeg")) { + self->main_format = UVC_H264_SRC_FORMAT_JPG; + self->secondary_format = UVC_H264_SRC_FORMAT_JPG; + type = ENCODED_ENCODED; + } else if (!gst_structure_has_name (vid_struct, "image/jpeg") && + !gst_structure_has_name (vf_struct, "image/jpeg")) { + self->main_format = UVC_H264_SRC_FORMAT_RAW; + self->secondary_format = UVC_H264_SRC_FORMAT_RAW; + type = RAW_RAW; + } else { + goto error_remove; + } + } else if (vf_caps && vid_caps) { + guint32 smallest_frame_interval; + + if (!_extract_caps_info (vf_struct, &self->secondary_width, + &self->secondary_height, &self->secondary_frame_interval)) + goto error_remove; + + if (jpg2raw == FALSE && gst_structure_has_name (vf_struct, "image/jpeg")) { + type = H264_JPG; + self->secondary_format = UVC_H264_SRC_FORMAT_JPG; + } else { + if (jpg2raw) { + type = H264_JPG2RAW; + self->secondary_format = UVC_H264_SRC_FORMAT_JPG; + } else { + type = H264_RAW; + self->secondary_format = UVC_H264_SRC_FORMAT_RAW; + } + } + smallest_frame_interval = MIN (self->main_frame_interval, + self->secondary_frame_interval); + /* Just to avoid a potential division by zero, set interval to 30 fps */ + if (smallest_frame_interval == 0) + smallest_frame_interval = 333333; + + /* Frame interval is in 100ns units */ + src_caps = gst_caps_new_simple ("image/jpeg", + "width", G_TYPE_INT, self->secondary_width, + "height", G_TYPE_INT, self->secondary_height, + "framerate", GST_TYPE_FRACTION, + NSEC_PER_SEC / smallest_frame_interval, 100, NULL); + } else if (vf_caps || vid_caps) { + self->secondary_format = UVC_H264_SRC_FORMAT_NONE; + if (vid_struct && gst_structure_has_name (vid_struct, "video/x-h264")) { + type = ENCODED_NONE; + } else if (vid_struct && gst_structure_has_name (vid_struct, "image/jpeg")) { + type = ENCODED_NONE; + self->main_format = UVC_H264_SRC_FORMAT_JPG; + } else if (vf_struct && gst_structure_has_name (vf_struct, "image/jpeg")) { + type = NONE_ENCODED; + self->secondary_format = UVC_H264_SRC_FORMAT_JPG; + } else if (vid_struct) { + type = RAW_NONE; + self->main_format = UVC_H264_SRC_FORMAT_RAW; + } else if (vf_struct) { + type = NONE_RAW; + self->secondary_format = UVC_H264_SRC_FORMAT_RAW; + } else { + g_assert_not_reached (); + } + } else { + type = NONE_NONE; + self->main_format = UVC_H264_SRC_FORMAT_NONE; + self->secondary_format = UVC_H264_SRC_FORMAT_NONE; + } + + switch (type) { + case NONE_NONE: + GST_DEBUG_OBJECT (self, "None+None"); + vf_pad = gst_element_get_static_pad (self->v4l2_src, "src"); + break; + case RAW_NONE: + GST_DEBUG_OBJECT (self, "Raw+None"); + self->vid_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + if (!self->vid_colorspace || + !gst_bin_add (GST_BIN (self), self->vid_colorspace)) + goto error_remove; + gst_object_ref (self->vid_colorspace); + if (!gst_element_link (self->v4l2_src, self->vid_colorspace)) + goto error_remove_all; + vid_pad = gst_element_get_static_pad (self->vid_colorspace, "src"); + break; + case NONE_RAW: + GST_DEBUG_OBJECT (self, "None+Raw"); + self->vf_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + if (!self->vf_colorspace || + !gst_bin_add (GST_BIN (self), self->vf_colorspace)) + goto error_remove; + gst_object_ref (self->vf_colorspace); + if (!gst_element_link (self->v4l2_src, self->vf_colorspace)) + goto error_remove_all; + vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src"); + break; + case ENCODED_NONE: + GST_DEBUG_OBJECT (self, "Encoded+None"); + vid_pad = gst_element_get_static_pad (self->v4l2_src, "src"); + break; + case NONE_ENCODED: + GST_DEBUG_OBJECT (self, "None+Encoded"); + vf_pad = gst_element_get_static_pad (self->v4l2_src, "src"); + break; + case H264_JPG: + GST_DEBUG_OBJECT (self, "H264+JPG"); + self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL); + if (!self->mjpg_demux || !gst_bin_add (GST_BIN (self), self->mjpg_demux)) + goto error_remove; + gst_object_ref (self->mjpg_demux); + g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd, + "num-clock-samples", self->num_clock_samples, NULL); + if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux, + src_caps)) + goto error_remove_all; + vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264"); + vf_pad = gst_element_get_static_pad (self->mjpg_demux, "jpeg"); + break; + case H264_RAW: + GST_DEBUG_OBJECT (self, "H264+Raw"); + self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL); + self->vf_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + if (!self->mjpg_demux || !self->vf_colorspace) + goto error_remove; + if (!gst_bin_add (GST_BIN (self), self->mjpg_demux)) + goto error_remove; + gst_object_ref (self->mjpg_demux); + g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd, + "num-clock-samples", self->num_clock_samples, NULL); + if (!gst_bin_add (GST_BIN (self), self->vf_colorspace)) { + gst_object_unref (self->vf_colorspace); + self->vf_colorspace = NULL; + goto error_remove_all; + } + gst_object_ref (self->vf_colorspace); + if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux, + src_caps)) + goto error_remove_all; + if (!gst_element_link_pads (self->mjpg_demux, "yuy2", + self->vf_colorspace, "sink")) + goto error_remove_all; + vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264"); + vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src"); + break; + case H264_JPG2RAW: + GST_DEBUG_OBJECT (self, "H264+Raw(jpegdec)"); + self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL); + self->jpeg_dec = gst_element_factory_make (self->jpeg_decoder_name, NULL); + self->vf_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + if (!self->mjpg_demux || !self->jpeg_dec || !self->vf_colorspace) + goto error_remove; + if (!gst_bin_add (GST_BIN (self), self->mjpg_demux)) + goto error_remove; + gst_object_ref (self->mjpg_demux); + g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd, + "num-clock-samples", self->num_clock_samples, NULL); + if (!gst_bin_add (GST_BIN (self), self->jpeg_dec)) { + gst_object_unref (self->jpeg_dec); + self->jpeg_dec = NULL; + gst_object_unref (self->vf_colorspace); + self->vf_colorspace = NULL; + goto error_remove_all; + } + gst_object_ref (self->jpeg_dec); + if (!gst_bin_add (GST_BIN (self), self->vf_colorspace)) { + gst_object_unref (self->vf_colorspace); + self->vf_colorspace = NULL; + goto error_remove_all; + } + gst_object_ref (self->vf_colorspace); + if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux, + src_caps)) + goto error_remove_all; + if (!gst_element_link_pads (self->mjpg_demux, "jpeg", self->jpeg_dec, + "sink")) + goto error_remove_all; + if (!gst_element_link (self->jpeg_dec, self->vf_colorspace)) + goto error_remove_all; + vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264"); + vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src"); + break; + case RAW_RAW: + { + GstElement *tee = NULL; + + GST_DEBUG_OBJECT (self, "Raw+Raw"); + tee = gst_element_factory_make ("tee", NULL); + if (!tee || !gst_bin_add (GST_BIN (self), tee)) { + if (tee) + gst_object_unref (tee); + goto error_remove; + } + self->vf_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + self->vid_colorspace = gst_element_factory_make (self->colorspace_name, + NULL); + if (!self->vf_colorspace || !self->vid_colorspace) + goto error_remove; + if (!gst_bin_add (GST_BIN (self), self->vf_colorspace)) + goto error_remove; + gst_object_ref (self->vf_colorspace); + if (!gst_bin_add (GST_BIN (self), self->vid_colorspace)) { + gst_object_unref (self->vid_colorspace); + self->vid_colorspace = NULL; + goto error_remove_all; + } + gst_object_ref (self->vid_colorspace); + if (!gst_element_link (self->v4l2_src, tee)) + goto error_remove_all; + if (!gst_element_link (tee, self->vf_colorspace)) + goto error_remove_all; + if (!gst_element_link (tee, self->vid_colorspace)) + goto error_remove_all; + vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src"); + vid_pad = gst_element_get_static_pad (self->vid_colorspace, "src"); + } + break; + case ENCODED_ENCODED: + { + GstElement *tee = NULL; + + GST_DEBUG_OBJECT (self, "Encoded+Encoded"); + tee = gst_element_factory_make ("tee", NULL); + if (!tee || !gst_bin_add (GST_BIN (self), tee)) { + if (tee) + gst_object_unref (tee); + goto error_remove; + } + if (!gst_element_link (self->v4l2_src, tee)) + goto error_remove_all; + vf_pad = gst_element_get_request_pad (tee, "src%d"); + vid_pad = gst_element_get_request_pad (tee, "src%d"); + } + break; + } + + if (!gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc), vid_pad) || + !gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), vf_pad)) + goto error_remove_all; + if (vid_pad) + gst_object_unref (vid_pad); + if (vf_pad) + gst_object_unref (vf_pad); + vid_pad = vf_pad = NULL; + + if (vf_caps) + gst_caps_unref (vf_caps); + if (vid_caps) + gst_caps_unref (vid_caps); + if (src_caps) + gst_caps_unref (src_caps); + vf_caps = vid_caps = src_caps = NULL; + + /* Sync children states, in sink to source order */ + if (self->vid_colorspace && + !gst_element_sync_state_with_parent (self->vid_colorspace)) + goto error_remove_all; + if (self->vf_colorspace && + !gst_element_sync_state_with_parent (self->vf_colorspace)) + goto error_remove_all; + if (self->jpeg_dec && !gst_element_sync_state_with_parent (self->jpeg_dec)) + goto error_remove_all; + if (self->mjpg_demux && + !gst_element_sync_state_with_parent (self->mjpg_demux)) + goto error_remove_all; + if (self->v4l2_src && !gst_element_sync_state_with_parent (self->v4l2_src)) + goto error_remove_all; + + /* Sync any remaining children states with bin's state */ + iter = gst_bin_iterate_elements (GST_BIN (self)); + iter_done = FALSE; + while (!iter_done) { + GstElement *item = NULL; + + switch (gst_iterator_next (iter, (gpointer *) & item)) { + case GST_ITERATOR_OK: + if (!gst_element_sync_state_with_parent (item)) { + gst_object_unref (item); + gst_iterator_free (iter); + goto error_remove_all; + } + gst_object_unref (item); + break; + case GST_ITERATOR_RESYNC: + gst_iterator_resync (iter); + break; + case GST_ITERATOR_ERROR: + iter_done = TRUE; + break; + case GST_ITERATOR_DONE: + iter_done = TRUE; + break; + } + } + gst_iterator_free (iter); + + self->reconfiguring = FALSE; + return TRUE; + +error_remove_all: + gst_uvc_h264_src_destroy_pipeline (self, FALSE); +error_remove: + gst_element_set_state (self->v4l2_src, GST_STATE_NULL); + gst_bin_remove (GST_BIN (self), self->v4l2_src); + +error: + if (self->v4l2_src) + gst_object_unref (self->v4l2_src); + self->v4l2_src = NULL; + self->v4l2_fd = -1; + self->h264_unit_id = 0; + + if (self->mjpg_demux) + gst_object_unref (self->mjpg_demux); + self->mjpg_demux = NULL; + if (self->jpeg_dec) + gst_object_unref (self->jpeg_dec); + self->jpeg_dec = NULL; + if (self->vid_colorspace) + gst_object_unref (self->vid_colorspace); + self->vid_colorspace = NULL; + if (self->vf_colorspace) + gst_object_unref (self->vf_colorspace); + self->vf_colorspace = NULL; + + if (src_caps) + gst_caps_unref (src_caps); + + if (vf_caps) + gst_caps_unref (vf_caps); + if (vid_caps) + gst_caps_unref (vid_caps); + + if (vid_pad) + gst_object_unref (vid_pad); + if (vf_pad) + gst_object_unref (vf_pad); + + self->reconfiguring = FALSE; + return FALSE; +} + +static GstCaps * +gst_uvc_h264_src_getcaps (GstPad * pad) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (GST_OBJECT_PARENT (pad)); + GstCaps *template = NULL; + GstCaps *result = NULL; + + if (pad == self->vfsrc) + template = gst_static_pad_template_get_caps (&vfsrc_template); + else if (pad == self->vidsrc) + template = gst_static_pad_template_get_caps (&vidsrc_template); + else + template = gst_caps_new_empty (); + + if (self->v4l2_src) { + GstPad *v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src"); + GstCaps *v4l_caps = gst_pad_get_caps (v4l_pad); + GstCaps *new_caps = gst_uvc_h264_src_transform_caps (self, v4l_caps); + + result = gst_caps_intersect (new_caps, template); + gst_object_unref (v4l_pad); + gst_caps_unref (v4l_caps); + gst_caps_unref (new_caps); + gst_caps_unref (template); + } else { + result = template; + } + + return result; +} + +static gboolean +gst_uvc_h264_src_set_mode (GstBaseCameraSrc * bcamsrc, GstCameraBinMode mode) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (bcamsrc); + + GST_DEBUG_OBJECT (self, "set mode to %d", mode); + + return (mode == MODE_VIDEO); +} + +static gboolean +gst_uvc_h264_src_start_capture (GstBaseCameraSrc * camerasrc) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (camerasrc); + gboolean ret = TRUE; + + GST_DEBUG_OBJECT (self, "start capture"); + + if (!self->started) { + self->started = TRUE; + if (GST_STATE (self) >= GST_STATE_READY) { + ret = gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); + if (!ret) { + GST_DEBUG_OBJECT (self, "Could not start capture"); + self->started = FALSE; + gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); + } + } + } + + return ret; +} + +static void +gst_uvc_h264_src_stop_capture (GstBaseCameraSrc * camerasrc) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (camerasrc); + + GST_DEBUG_OBJECT (self, "stop capture"); + + if (self->started) { + self->started = FALSE; + if (GST_STATE (self) >= GST_STATE_READY) + gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); + gst_base_camera_src_finish_capture (camerasrc); + } +} + +static void +gst_uvc_h264_src_pad_linking_cb (GstPad * pad, + GstPad * peer, gpointer user_data) +{ + GstUvcH264Src *self = GST_UVC_H264_SRC (user_data); + gchar *pad_name = gst_pad_get_name (pad); + + GST_DEBUG_OBJECT (self, "Pad %s was (un)linked. Renegotiating", pad_name); + g_free (pad_name); + if (GST_STATE (self) >= GST_STATE_READY) + gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); +} + + +static GstStateChangeReturn +gst_uvc_h264_src_change_state (GstElement * element, GstStateChange trans) +{ + GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; + GstUvcH264Src *self = GST_UVC_H264_SRC (element); + + switch (trans) { + case GST_STATE_CHANGE_NULL_TO_READY: + if (!ensure_v4l2src (self)) { + ret = GST_STATE_CHANGE_FAILURE; + goto end; + } + gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED); + break; + case GST_STATE_CHANGE_READY_TO_PAUSED: + case GST_STATE_CHANGE_PAUSED_TO_PLAYING: + if (!self->v4l2_src) + gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self)); + break; + default: + break; + } + + ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans); + + if (ret == GST_STATE_CHANGE_FAILURE) + goto end; + + switch (trans) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + self->vid_newseg = FALSE; + self->vf_newseg = FALSE; + break; + case GST_STATE_CHANGE_READY_TO_NULL: + gst_uvc_h264_src_destroy_pipeline (self, TRUE); + break; + default: + break; + } + + +end: + return ret; +} diff --git a/sys/uvch264/gstuvch264_src.h b/sys/uvch264/gstuvch264_src.h new file mode 100644 index 00000000..0b139ff1 --- /dev/null +++ b/sys/uvch264/gstuvch264_src.h @@ -0,0 +1,162 @@ +/* + * GStreamer + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@collabora.co.uk> + * + * 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_UVC_H264_SRC_H__ +#define __GST_UVC_H264_SRC_H__ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <gst/gst.h> +#include <gst/basecamerabinsrc/gstbasecamerasrc.h> +#include <libusb.h> + +#include "uvc_h264.h" + +G_BEGIN_DECLS +#define GST_TYPE_UVC_H264_SRC \ + (gst_uvc_h264_src_get_type()) +#define GST_UVC_H264_SRC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_UVC_H264_SRC, GstUvcH264Src)) +#define GST_UVC_H264_SRC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_UVC_H264_SRC, GstUvcH264SrcClass)) +#define GST_IS_UVC_H264_SRC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_UVC_H264_SRC)) +#define GST_IS_UVC_H264_SRC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_UVC_H264_SRC)) + GType gst_uvc_h264_src_get_type (void); + +typedef struct _GstUvcH264Src GstUvcH264Src; +typedef struct _GstUvcH264SrcClass GstUvcH264SrcClass; + +enum GstVideoRecordingStatus { + GST_VIDEO_RECORDING_STATUS_DONE, + GST_VIDEO_RECORDING_STATUS_STARTING, + GST_VIDEO_RECORDING_STATUS_RUNNING, + GST_VIDEO_RECORDING_STATUS_FINISHING +}; + +enum { + QP_I_FRAME = 0, + QP_P_FRAME, + QP_B_FRAME, + QP_FRAMES +}; + +typedef enum { + UVC_H264_SRC_FORMAT_NONE, + UVC_H264_SRC_FORMAT_JPG, + UVC_H264_SRC_FORMAT_H264, + UVC_H264_SRC_FORMAT_RAW +} GstUvcH264SrcFormat; + +/** + * GstUcH264Src: + * + */ +struct _GstUvcH264Src +{ + GstBaseCameraSrc parent; + + GstPad *vfsrc; + GstPad *imgsrc; + GstPad *vidsrc; + + /* source elements */ + GstElement *v4l2_src; + GstElement *mjpg_demux; + GstElement *jpeg_dec; + GstElement *vid_colorspace; + GstElement *vf_colorspace; + + GstUvcH264SrcFormat main_format; + guint16 main_width; + guint16 main_height; + guint32 main_frame_interval; + UvcH264StreamFormat main_stream_format; + guint16 main_profile; + GstUvcH264SrcFormat secondary_format; + guint16 secondary_width; + guint16 secondary_height; + guint32 secondary_frame_interval; + + int v4l2_fd; + guint8 h264_unit_id; + libusb_context *usb_ctx; + + GstPadEventFunction srcpad_event_func; + GstEvent *key_unit_event; + GstSegment segment; + + gboolean started; + + /* When restarting the source */ + gboolean reconfiguring; + gboolean vid_newseg; + gboolean vf_newseg; + + gchar *colorspace_name; + gchar *jpeg_decoder_name; + int num_clock_samples; + + /* v4l2src proxied properties */ + guint32 num_buffers; + gchar *device; + + /* Static controls */ + guint32 initial_bitrate; + guint16 slice_units; + UvcH264SliceMode slice_mode; + guint16 iframe_period; + UvcH264UsageType usage_type; + UvcH264Entropy entropy; + gboolean enable_sei; + guint8 num_reorder_frames; + gboolean preview_flipped; + guint16 leaky_bucket_size; + + /* Dynamic controls */ + UvcH264RateControl rate_control; + gboolean fixed_framerate; + guint8 level_idc; + guint32 peak_bitrate; + guint32 average_bitrate; + gint8 min_qp[QP_FRAMES]; + gint8 max_qp[QP_FRAMES]; + guint8 ltr_buffer_size; + guint8 ltr_encoder_control; +}; + + +/** + * GstUvcH264SrcClass: + * + */ +struct _GstUvcH264SrcClass +{ + GstBaseCameraSrcClass parent; +}; + + +#endif /* __GST_UVC_H264_SRC_H__ */ diff --git a/sys/uvch264/uvc_h264.c b/sys/uvch264/uvc_h264.c new file mode 100644 index 00000000..1c26ae43 --- /dev/null +++ b/sys/uvch264/uvc_h264.c @@ -0,0 +1,122 @@ +/* + * GStreamer + * + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@collabora.co.uk> + * + * 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 "uvc_h264.h" + +GType +uvc_h264_slicemode_get_type (void) +{ + static GType type = 0; + + static const GEnumValue types[] = { + {UVC_H264_SLICEMODE_IGNORED, "Ignored", "ignored"}, + {UVC_H264_SLICEMODE_BITSPERSLICE, "Bits per slice", "bits/slice"}, + {UVC_H264_SLICEMODE_MBSPERSLICE, "MBs per Slice", "MBs/slice"}, + {UVC_H264_SLICEMODE_SLICEPERFRAME, "Slice Per Frame", "slice/frame"}, + {0, NULL, NULL} + }; + + if (!type) { + type = g_enum_register_static ("UvcH264SliceMode", types); + } + return type; +} + +GType +uvc_h264_usagetype_get_type (void) +{ + static GType type = 0; + + static const GEnumValue types[] = { + {UVC_H264_USAGETYPE_REALTIME, "Realtime (video conferencing)", "realtime"}, + {UVC_H264_USAGETYPE_BROADCAST, "Broadcast", "broadcast"}, + {UVC_H264_USAGETYPE_STORAGE, "Storage", "storage"}, + {UVC_H264_USAGETYPE_UCCONFIG_0, "UCConfig 0", "ucconfig0"}, + {UVC_H264_USAGETYPE_UCCONFIG_1, "UCConfig 1", "ucconfig1"}, + {UVC_H264_USAGETYPE_UCCONFIG_2Q, "UCConfig 2Q", "ucconfig2q"}, + {UVC_H264_USAGETYPE_UCCONFIG_2S, "UCConfig 2S", "ucconfig2s"}, + {UVC_H264_USAGETYPE_UCCONFIG_3, "UCConfig 3", "ucconfig3"}, + {0, NULL, NULL} + }; + + if (!type) { + type = g_enum_register_static ("UvcH264UsageType", types); + } + return type; +} + +GType +uvc_h264_ratecontrol_get_type (void) +{ + static GType type = 0; + + static const GEnumValue types[] = { + {UVC_H264_RATECONTROL_CBR, "Constant bit rate", "cbr"}, + {UVC_H264_RATECONTROL_VBR, "Variable bit rate", "vbr"}, + {UVC_H264_RATECONTROL_CONST_QP, "Constant QP", "qp"}, + {0, NULL, NULL} + }; + + if (!type) { + type = g_enum_register_static ("UvcH264RateControl", types); + } + return type; +} + +GType +uvc_h264_streamformat_get_type (void) +{ + static GType type = 0; + + static const GEnumValue types[] = { + {UVC_H264_STREAMFORMAT_ANNEXB, "Byte stream format (Annex B)", "byte"}, + {UVC_H264_STREAMFORMAT_NAL, "NAL stream format", "nal"}, + {0, NULL, NULL} + }; + + if (!type) { + type = g_enum_register_static ("UvcH264StreamFormat", types); + } + return type; +} + +GType +uvc_h264_entropy_get_type (void) +{ + static GType type = 0; + + static const GEnumValue types[] = { + {UVC_H264_ENTROPY_CAVLC, "CAVLC", "cavlc"}, + {UVC_H264_ENTROPY_CABAC, "CABAC", "cabac"}, + {0, NULL, NULL} + }; + + if (!type) { + type = g_enum_register_static ("UvcH264Entropy", types); + } + return type; +} diff --git a/sys/uvch264/uvc_h264.h b/sys/uvch264/uvc_h264.h new file mode 100644 index 00000000..d27104ec --- /dev/null +++ b/sys/uvch264/uvc_h264.h @@ -0,0 +1,335 @@ +/* + * uvc_h264.h - Definitions of the UVC H.264 Payload specification Version 1.0 + * + * Copyright (c) 2011 USB Implementers Forum, Inc. + * + * Modification into glib-like header by : + * Copyright (C) 2012 Cisco Systems, Inc. + * Author: Youness Alaoui <youness.alaoui@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. + */ + +#ifndef _UVC_H264_H_ +#define _UVC_H264_H_ + +/* Header File for the little-endian platform */ + +#include <glib.h> +#include <glib-object.h> + +/* bmHints defines */ + +#define UVC_H264_BMHINTS_RESOLUTION (0x0001) +#define UVC_H264_BMHINTS_PROFILE (0x0002) +#define UVC_H264_BMHINTS_RATECONTROL (0x0004) +#define UVC_H264_BMHINTS_USAGE (0x0008) +#define UVC_H264_BMHINTS_SLICEMODE (0x0010) +#define UVC_H264_BMHINTS_SLICEUNITS (0x0020) +#define UVC_H264_BMHINTS_MVCVIEW (0x0040) +#define UVC_H264_BMHINTS_TEMPORAL (0x0080) +#define UVC_H264_BMHINTS_SNR (0x0100) +#define UVC_H264_BMHINTS_SPATIAL (0x0200) +#define UVC_H264_BMHINTS_SPATIAL_RATIO (0x0400) +#define UVC_H264_BMHINTS_FRAME_INTERVAL (0x0800) +#define UVC_H264_BMHINTS_LEAKY_BKT_SIZE (0x1000) +#define UVC_H264_BMHINTS_BITRATE (0x2000) +#define UVC_H264_BMHINTS_ENTROPY (0x4000) +#define UVC_H264_BMHINTS_IFRAMEPERIOD (0x8000) + + +#define UVC_H264_QP_STEPS_I_FRAME_TYPE (0x01) +#define UVC_H264_QP_STEPS_P_FRAME_TYPE (0x02) +#define UVC_H264_QP_STEPS_B_FRAME_TYPE (0x04) +#define UVC_H264_QP_STEPS_ALL_FRAME_TYPES (UVC_H264_QP_STEPS_I_FRAME_TYPE | \ + UVC_H264_QP_STEPS_P_FRAME_TYPE | UVC_H264_QP_STEPS_B_FRAME_TYPE) + +/* wSliceMode defines */ + +typedef enum +{ + UVC_H264_SLICEMODE_IGNORED = 0x0000, + UVC_H264_SLICEMODE_BITSPERSLICE = 0x0001, + UVC_H264_SLICEMODE_MBSPERSLICE = 0x0002, + UVC_H264_SLICEMODE_SLICEPERFRAME = 0x0003 +} UvcH264SliceMode; + +#define UVC_H264_SLICEMODE_TYPE (uvc_h264_slicemode_get_type()) + +GType uvc_h264_slicemode_get_type (void); + +/* bUsageType defines */ + +typedef enum { + UVC_H264_USAGETYPE_REALTIME = 0x01, + UVC_H264_USAGETYPE_BROADCAST = 0x02, + UVC_H264_USAGETYPE_STORAGE = 0x03, + UVC_H264_USAGETYPE_UCCONFIG_0 = 0x04, + UVC_H264_USAGETYPE_UCCONFIG_1 = 0x05, + UVC_H264_USAGETYPE_UCCONFIG_2Q = 0x06, + UVC_H264_USAGETYPE_UCCONFIG_2S = 0x07, + UVC_H264_USAGETYPE_UCCONFIG_3 = 0x08, +} UvcH264UsageType; + +#define UVC_H264_USAGETYPE_TYPE (uvc_h264_usagetype_get_type()) + +GType uvc_h264_usagetype_get_type (void); + +/* bRateControlMode defines */ + +typedef enum { + UVC_H264_RATECONTROL_CBR = 0x01, + UVC_H264_RATECONTROL_VBR = 0x02, + UVC_H264_RATECONTROL_CONST_QP = 0x03, +} UvcH264RateControl; + +#define UVC_H264_RATECONTROL_FIXED_FRM_FLG (0x10) + +#define UVC_H264_RATECONTROL_TYPE (uvc_h264_ratecontrol_get_type()) + +GType uvc_h264_ratecontrol_get_type (void); + +/* bStreamFormat defines */ + +typedef enum { + UVC_H264_STREAMFORMAT_ANNEXB = 0x00, + UVC_H264_STREAMFORMAT_NAL = 0x01, +} UvcH264StreamFormat; + +#define UVC_H264_STREAMFORMAT_TYPE (uvc_h264_streamformat_get_type()) + +GType uvc_h264_streamformat_get_type (void); + +/* bEntropyCABAC defines */ + +typedef enum { + UVC_H264_ENTROPY_CAVLC = 0x00, + UVC_H264_ENTROPY_CABAC = 0x01, +} UvcH264Entropy; + +#define UVC_H264_ENTROPY_TYPE (uvc_h264_entropy_get_type()) + +GType uvc_h264_entropy_get_type (void); + +/* bProfile defines */ +#define UVC_H264_PROFILE_CONSTRAINED_BASELINE 0x4240 +#define UVC_H264_PROFILE_BASELINE 0x4200 +#define UVC_H264_PROFILE_MAIN 0x4D00 +#define UVC_H264_PROFILE_HIGH 0x6400 + +/* bTimingstamp defines */ + +#define UVC_H264_TIMESTAMP_SEI_DISABLE (0x00) +#define UVC_H264_TIMESTAMP_SEI_ENABLE (0x01) + +/* bPreviewFlipped defines */ + +#define UVC_H264_PREFLIPPED_DISABLE (0x00) +#define UVC_H264_PREFLIPPED_HORIZONTAL (0x01) + +/* wPicType defines */ +#define UVC_H264_PICTYPE_I_FRAME (0x00) +#define UVC_H264_PICTYPE_IDR (0x01) +#define UVC_H264_PICTYPE_IDR_WITH_PPS_SPS (0x02) + + +/* wLayerID Macro */ + +/* wLayerID + |------------+------------+------------+----------------+------------| + | Reserved | StreamID | QualityID | DependencyID | TemporalID | + | (3 bits) | (3 bits) | (3 bits) | (4 bits) | (3 bits) | + |------------+------------+------------+----------------+------------| + |15 13|12 10|9 7|6 3|2 0| + |------------+------------+------------+----------------+------------| +*/ + +#define xLayerID(stream_id, quality_id, dependency_id, temporal_id) \ + ((((stream_id) & 7) << 10) | \ + (((quality_id) & 7) << 7) | \ + (((dependency_id) & 15) << 3) | \ + ((temporal_id) & 7)) + +/* id extraction from wLayerID */ + +#define xStream_id(layer_id) (((layer_id) >> 10) & 7) +#define xQuality_id(layer_id) (((layer_id) >> 7) & 7) +#define xDependency_id(layer_id) (((layer_id) >> 3) & 15) +#define xTemporal_id(layer_id) ((layer_id)&7) + +/* UVC H.264 control selectors */ + +typedef enum _uvcx_control_selector_t +{ + UVCX_VIDEO_CONFIG_PROBE = 0x01, + UVCX_VIDEO_CONFIG_COMMIT = 0x02, + UVCX_RATE_CONTROL_MODE = 0x03, + UVCX_TEMPORAL_SCALE_MODE = 0x04, + UVCX_SPATIAL_SCALE_MODE = 0x05, + UVCX_SNR_SCALE_MODE = 0x06, + UVCX_LTR_BUFFER_SIZE_CONTROL = 0x07, + UVCX_LTR_PICTURE_CONTROL = 0x08, + UVCX_PICTURE_TYPE_CONTROL = 0x09, + UVCX_VERSION = 0x0A, + UVCX_ENCODER_RESET = 0x0B, + UVCX_FRAMERATE_CONFIG = 0x0C, + UVCX_VIDEO_ADVANCE_CONFIG = 0x0D, + UVCX_BITRATE_LAYERS = 0x0E, + UVCX_QP_STEPS_LAYERS = 0x0F, +} uvcx_control_selector_t; + + +typedef struct _uvcx_video_config_probe_commit_t +{ + guint32 dwFrameInterval; + guint32 dwBitRate; + guint16 bmHints; + guint16 wConfigurationIndex; + guint16 wWidth; + guint16 wHeight; + guint16 wSliceUnits; + guint16 wSliceMode; + guint16 wProfile; + guint16 wIFramePeriod; + guint16 wEstimatedVideoDelay; + guint16 wEstimatedMaxConfigDelay; + guint8 bUsageType; + guint8 bRateControlMode; + guint8 bTemporalScaleMode; + guint8 bSpatialScaleMode; + guint8 bSNRScaleMode; + guint8 bStreamMuxOption; + guint8 bStreamFormat; + guint8 bEntropyCABAC; + guint8 bTimestamp; + guint8 bNumOfReorderFrames; + guint8 bPreviewFlipped; + guint8 bView; + guint8 bReserved1; + guint8 bReserved2; + guint8 bStreamID; + guint8 bSpatialLayerRatio; + guint16 wLeakyBucketSize; +} __attribute__((packed)) uvcx_video_config_probe_commit_t; + + +typedef struct _uvcx_rate_control_mode_t +{ + guint16 wLayerID; + guint8 bRateControlMode; +} __attribute__((packed)) uvcx_rate_control_mode_t; + + +typedef struct _uvcx_temporal_scale_mode_t +{ + guint16 wLayerID; + guint8 bTemporalScaleMode; +} __attribute__((packed)) uvcx_temporal_scale_mode_t; + + +typedef struct _uvcx_spatial_scale_mode_t +{ + guint16 wLayerID; + guint8 bSpatialScaleMode; +} __attribute__((packed)) uvcx_spatial_scale_mode_t; + + +typedef struct _uvcx_snr_scale_mode_t +{ + guint16 wLayerID; + guint8 bSNRScaleMode; + guint8 bMGSSublayerMode; +} __attribute__((packed)) uvcx_snr_scale_mode_t; + + +typedef struct _uvcx_ltr_buffer_size_control_t +{ + guint16 wLayerID; + guint8 bLTRBufferSize; + guint8 bLTREncoderControl; +} __attribute__((packed)) uvcx_ltr_buffer_size_control_t; + +typedef struct _uvcx_ltr_picture_control +{ + guint16 wLayerID; + guint8 bPutAtPositionInLTRBuffer; + guint8 bEncodeUsingLTR; +} __attribute__((packed)) uvcx_ltr_picture_control; + + +typedef struct _uvcx_picture_type_control_t +{ + guint16 wLayerID; + guint16 wPicType; +} __attribute__((packed)) uvcx_picture_type_control_t; + + +typedef struct _uvcx_version_t +{ + guint16 wVersion; +} __attribute__((packed)) uvcx_version_t; + + +typedef struct _uvcx_encoder_reset +{ + guint16 wLayerID; +} __attribute__((packed)) uvcx_encoder_reset; + + +typedef struct _uvcx_framerate_config_t +{ + guint16 wLayerID; + guint32 dwFrameInterval; +} __attribute__((packed)) uvcx_framerate_config_t; + + +typedef struct _uvcx_video_advance_config_t +{ + guint16 wLayerID; + guint32 dwMb_max; + guint8 blevel_idc; + guint8 bReserved; +} __attribute__((packed)) uvcx_video_advance_config_t; + + +typedef struct _uvcx_bitrate_layers_t +{ + guint16 wLayerID; + guint32 dwPeakBitrate; + guint32 dwAverageBitrate; +} __attribute__((packed)) uvcx_bitrate_layers_t; + + +typedef struct _uvcx_qp_steps_layers_t +{ + guint16 wLayerID; + guint8 bFrameType; + guint8 bMinQp; + guint8 bMaxQp; +} __attribute__((packed)) uvcx_qp_steps_layers_t; + + +#ifdef _WIN32 +// GUID of the UVC H.264 extension unit: {A29E7641-DE04-47E3-8B2B-F4341AFF003B} +DEFINE_GUID(GUID_UVCX_H264_XU, 0xA29E7641, 0xDE04, 0x47E3, 0x8B, 0x2B, 0xF4, 0x34, 0x1A, 0xFF, 0x00, 0x3B); +#else +#define GUID_UVCX_H264_XU \ + {0x41, 0x76, 0x9e, 0xa2, 0x04, 0xde, 0xe3, 0x47, 0x8b, 0x2b, 0xF4, 0x34, 0x1A, 0xFF, 0x00, 0x3B} +#endif + +#endif /*_UVC_H264_H_*/ diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in index ce7eb377..b1e0232d 100644 --- a/sys/vcd/Makefile.in +++ b/sys/vcd/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in index 99ba979c..4f6664b3 100644 --- a/sys/vdpau/Makefile.in +++ b/sys/vdpau/Makefile.in @@ -389,6 +389,8 @@ 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@ @@ -396,6 +398,8 @@ 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@ @@ -410,7 +414,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -438,6 +441,10 @@ 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@ @@ -564,6 +571,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/vdpau/basevideodecoder/Makefile.in b/sys/vdpau/basevideodecoder/Makefile.in index 20556ffe..5d145677 100644 --- a/sys/vdpau/basevideodecoder/Makefile.in +++ b/sys/vdpau/basevideodecoder/Makefile.in @@ -316,6 +316,8 @@ 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@ @@ -323,6 +325,8 @@ 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@ @@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -365,6 +368,10 @@ 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@ @@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/vdpau/gstvdp/Makefile.in b/sys/vdpau/gstvdp/Makefile.in index 19cc103a..9e95f9de 100644 --- a/sys/vdpau/gstvdp/Makefile.in +++ b/sys/vdpau/gstvdp/Makefile.in @@ -357,6 +357,8 @@ 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@ @@ -364,6 +366,8 @@ 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@ @@ -378,7 +382,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -406,6 +409,10 @@ 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@ @@ -532,6 +539,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in index bb781bd3..455e9c45 100644 --- a/sys/wasapi/Makefile.in +++ b/sys/wasapi/Makefile.in @@ -274,6 +274,8 @@ 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@ @@ -281,6 +283,8 @@ 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@ @@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -323,6 +326,10 @@ 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@ @@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in index 80d246ad..b8807cfb 100644 --- a/sys/wininet/Makefile.in +++ b/sys/wininet/Makefile.in @@ -341,6 +341,8 @@ 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@ @@ -348,6 +350,8 @@ 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@ @@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -390,6 +393,10 @@ 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@ @@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in index 98245bbc..b9f34111 100644 --- a/sys/winks/Makefile.in +++ b/sys/winks/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in index 4eb4e2c7..a5dd350b 100644 --- a/sys/winscreencap/Makefile.in +++ b/sys/winscreencap/Makefile.in @@ -344,6 +344,8 @@ 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@ @@ -351,6 +353,8 @@ 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@ @@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -393,6 +396,10 @@ 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@ @@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/Makefile.in b/tests/Makefile.in index aed52e6d..76e49048 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -313,6 +313,8 @@ 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@ @@ -320,6 +322,8 @@ 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@ @@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -362,6 +365,10 @@ 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@ @@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 84cee4d2..64b816d7 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -156,6 +156,20 @@ else check_curl = endif +if USE_UVCH264 +check_uvch264=elements/uvch264demux +else +check_uvch264= +endif +uvch264_dist_data = elements/uvch264demux_data/valid_h264_jpg.mjpg \ + elements/uvch264demux_data/valid_h264_jpg.jpg \ + elements/uvch264demux_data/valid_h264_jpg.h264 \ + elements/uvch264demux_data/valid_h264_yuy2.mjpg \ + elements/uvch264demux_data/valid_h264_yuy2.h264 \ + elements/uvch264demux_data/valid_h264_yuy2.yuy2 + + + VALGRIND_TO_FIX = \ elements/mpeg2enc \ elements/mplex \ @@ -171,6 +185,7 @@ VALGRIND_TESTS_DISABLE = \ # colorspace: bad memory accesses in orc code for odd width buffers - https://bugzilla.gnome.org/show_bug.cgi?id=663248 noinst_PROGRAMS = \ pipelines/colorspace \ + pipelines/streamheader \ $(check_neon) check_PROGRAMS = \ @@ -193,7 +208,9 @@ check_PROGRAMS = \ elements/baseaudiovisualizer \ elements/camerabin \ elements/dataurisrc \ - $(check_jifmux) \ + elements/gdppay \ + elements/gdpdepay \ + $(check_jifmux) \ elements/jpegparse \ $(check_logoinsert) \ elements/h263parse \ @@ -209,10 +226,11 @@ check_PROGRAMS = \ elements/rtpmux \ libs/mpegvideoparser \ libs/h264parser \ + $(check_uvch264) \ libs/vc1parser \ $(check_schro) \ $(check_vp8) \ - elements/viewfinderbin \ + elements/viewfinderbin \ $(check_zbar) \ $(check_orc) \ $(EXPERIMENTAL_CHECKS) @@ -285,6 +303,14 @@ elements_faac_LDADD = \ $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \ -lgstaudio-@GST_API_VERSION@ +elements_gdppay_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) +elements_gdppay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + +elements_gdpdepay_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) +elements_gdpdepay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) + elements_voaacenc_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) @@ -332,8 +358,13 @@ 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_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \ + $(AM_CFLAGS) + +pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) +pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD) -EXTRA_DIST = gst-plugins-bad.supp +EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data) orc_bayer_CFLAGS = $(ORC_CFLAGS) orc_bayer_LDADD = $(ORC_LIBS) -lorc-test-0.4 diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in index 606777e7..0487bd11 100644 --- a/tests/check/Makefile.in +++ b/tests/check/Makefile.in @@ -56,7 +56,8 @@ host_triplet = @host@ target_triplet = @target@ DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/common/check.mak -noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) $(am__EXEEXT_20) +noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) \ + 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) \ @@ -66,6 +67,7 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \ elements/autovideoconvert$(EXEEXT) elements/asfmux$(EXEEXT) \ elements/baseaudiovisualizer$(EXEEXT) \ elements/camerabin$(EXEEXT) elements/dataurisrc$(EXEEXT) \ + elements/gdppay$(EXEEXT) elements/gdpdepay$(EXEEXT) \ $(am__EXEEXT_13) elements/jpegparse$(EXEEXT) $(am__EXEEXT_14) \ elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \ elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \ @@ -73,10 +75,10 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \ elements/mxfmux$(EXEEXT) elements/id3mux$(EXEEXT) \ pipelines/mxf$(EXEEXT) $(am__EXEEXT_15) \ elements/rtpmux$(EXEEXT) libs/mpegvideoparser$(EXEEXT) \ - libs/h264parser$(EXEEXT) libs/vc1parser$(EXEEXT) \ - $(am__EXEEXT_16) $(am__EXEEXT_17) \ - elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_18) \ - $(am__EXEEXT_19) + libs/h264parser$(EXEEXT) $(am__EXEEXT_16) \ + libs/vc1parser$(EXEEXT) $(am__EXEEXT_17) $(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 \ @@ -147,12 +149,13 @@ libparser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ @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_SCHRO_TRUE@am__EXEEXT_16 = elements/schroenc$(EXEEXT) -@USE_VP8_TRUE@am__EXEEXT_17 = elements/vp8enc$(EXEEXT) \ +@USE_UVCH264_TRUE@am__EXEEXT_16 = elements/uvch264demux$(EXEEXT) +@USE_SCHRO_TRUE@am__EXEEXT_17 = elements/schroenc$(EXEEXT) +@USE_VP8_TRUE@am__EXEEXT_18 = elements/vp8enc$(EXEEXT) \ @USE_VP8_TRUE@ elements/vp8dec$(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_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) @@ -236,6 +239,22 @@ elements_faad_DEPENDENCIES = $(am__DEPENDENCIES_1) \ elements_faad_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_faad_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +elements_gdpdepay_SOURCES = elements/gdpdepay.c +elements_gdpdepay_OBJECTS = elements_gdpdepay-gdpdepay.$(OBJEXT) +elements_gdpdepay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) +elements_gdpdepay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(elements_gdpdepay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +elements_gdppay_SOURCES = elements/gdppay.c +elements_gdppay_OBJECTS = elements_gdppay-gdppay.$(OBJEXT) +elements_gdppay_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) +elements_gdppay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(elements_gdppay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ elements_h263parse_SOURCES = elements/h263parse.c elements_h263parse_OBJECTS = h263parse.$(OBJEXT) elements_h263parse_DEPENDENCIES = libparser.la $(am__DEPENDENCIES_2) @@ -334,6 +353,15 @@ elements_timidity_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(elements_timidity_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ +elements_uvch264demux_SOURCES = elements/uvch264demux.c +elements_uvch264demux_OBJECTS = \ + elements_uvch264demux-uvch264demux.$(OBJEXT) +elements_uvch264demux_LDADD = $(LDADD) +elements_uvch264demux_DEPENDENCIES = $(am__DEPENDENCIES_1) +elements_uvch264demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(elements_uvch264demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ elements_viewfinderbin_SOURCES = elements/viewfinderbin.c elements_viewfinderbin_OBJECTS = viewfinderbin.$(OBJEXT) elements_viewfinderbin_LDADD = $(LDADD) @@ -419,6 +447,15 @@ pipelines_mxf_SOURCES = pipelines/mxf.c pipelines_mxf_OBJECTS = mxf.$(OBJEXT) pipelines_mxf_LDADD = $(LDADD) pipelines_mxf_DEPENDENCIES = $(am__DEPENDENCIES_1) +pipelines_streamheader_SOURCES = pipelines/streamheader.c +pipelines_streamheader_OBJECTS = \ + pipelines_streamheader-streamheader.$(OBJEXT) +pipelines_streamheader_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) +pipelines_streamheader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(pipelines_streamheader_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -452,19 +489,21 @@ SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \ $(elements_camerabin_SOURCES) elements/curlfilesink.c \ elements/curlftpsink.c elements/curlhttpsink.c \ elements/curlsmtpsink.c elements/dataurisrc.c elements/faac.c \ - elements/faad.c elements/h263parse.c elements/h264parse.c \ - elements/id3mux.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/faad.c elements/gdpdepay.c elements/gdppay.c \ + elements/h263parse.c elements/h264parse.c elements/id3mux.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/vp8dec.c elements/vp8enc.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/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 \ @@ -472,19 +511,21 @@ DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \ $(elements_camerabin_SOURCES) elements/curlfilesink.c \ elements/curlftpsink.c elements/curlhttpsink.c \ elements/curlsmtpsink.c elements/dataurisrc.c elements/faac.c \ - elements/faad.c elements/h263parse.c elements/h264parse.c \ - elements/id3mux.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/faad.c elements/gdpdepay.c elements/gdppay.c \ + elements/h263parse.c elements/h264parse.c elements/id3mux.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/vp8dec.c elements/vp8enc.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/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;; \ @@ -662,6 +703,8 @@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GST_PREFIX = @GST_PREFIX@ GST_REVISION = @GST_REVISION@ GST_TOOLS_DIR = $(top_builddir)/tools +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@ @@ -669,6 +712,8 @@ 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@ @@ -683,7 +728,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -711,6 +755,10 @@ 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@ @@ -837,6 +885,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -994,6 +1043,15 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp @USE_CURL_TRUE@ elements/curlftpsink \ @USE_CURL_TRUE@ elements/curlsmtpsink +@USE_UVCH264_FALSE@check_uvch264 = +@USE_UVCH264_TRUE@check_uvch264 = elements/uvch264demux +uvch264_dist_data = elements/uvch264demux_data/valid_h264_jpg.mjpg \ + elements/uvch264demux_data/valid_h264_jpg.jpg \ + elements/uvch264demux_data/valid_h264_jpg.h264 \ + elements/uvch264demux_data/valid_h264_yuy2.mjpg \ + elements/uvch264demux_data/valid_h264_yuy2.h264 \ + elements/uvch264demux_data/valid_h264_yuy2.yuy2 + VALGRIND_TO_FIX = \ elements/mpeg2enc \ elements/mplex \ @@ -1070,6 +1128,14 @@ elements_faac_LDADD = \ $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \ -lgstaudio-@GST_API_VERSION@ +elements_gdppay_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) + +elements_gdppay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) +elements_gdpdepay_CFLAGS = \ + $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) + +elements_gdpdepay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) elements_voaacenc_CFLAGS = \ $(GST_PLUGINS_BASE_CFLAGS) \ $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS) @@ -1115,7 +1181,12 @@ 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) -EXTRA_DIST = gst-plugins-bad.supp +elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \ + $(AM_CFLAGS) + +pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS) +pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD) +EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data) orc_bayer_CFLAGS = $(ORC_CFLAGS) orc_bayer_LDADD = $(ORC_LIBS) -lorc-test-0.4 orc_cog_CFLAGS = $(ORC_CFLAGS) @@ -1226,6 +1297,12 @@ elements/faac$(EXEEXT): $(elements_faac_OBJECTS) $(elements_faac_DEPENDENCIES) $ elements/faad$(EXEEXT): $(elements_faad_OBJECTS) $(elements_faad_DEPENDENCIES) $(EXTRA_elements_faad_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/faad$(EXEEXT) $(AM_V_CCLD)$(elements_faad_LINK) $(elements_faad_OBJECTS) $(elements_faad_LDADD) $(LIBS) +elements/gdpdepay$(EXEEXT): $(elements_gdpdepay_OBJECTS) $(elements_gdpdepay_DEPENDENCIES) $(EXTRA_elements_gdpdepay_DEPENDENCIES) elements/$(am__dirstamp) + @rm -f elements/gdpdepay$(EXEEXT) + $(AM_V_CCLD)$(elements_gdpdepay_LINK) $(elements_gdpdepay_OBJECTS) $(elements_gdpdepay_LDADD) $(LIBS) +elements/gdppay$(EXEEXT): $(elements_gdppay_OBJECTS) $(elements_gdppay_DEPENDENCIES) $(EXTRA_elements_gdppay_DEPENDENCIES) elements/$(am__dirstamp) + @rm -f elements/gdppay$(EXEEXT) + $(AM_V_CCLD)$(elements_gdppay_LINK) $(elements_gdppay_OBJECTS) $(elements_gdppay_LDADD) $(LIBS) elements/h263parse$(EXEEXT): $(elements_h263parse_OBJECTS) $(elements_h263parse_DEPENDENCIES) $(EXTRA_elements_h263parse_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/h263parse$(EXEEXT) $(AM_V_CCLD)$(LINK) $(elements_h263parse_OBJECTS) $(elements_h263parse_LDADD) $(LIBS) @@ -1286,6 +1363,9 @@ elements/schroenc$(EXEEXT): $(elements_schroenc_OBJECTS) $(elements_schroenc_DEP elements/timidity$(EXEEXT): $(elements_timidity_OBJECTS) $(elements_timidity_DEPENDENCIES) $(EXTRA_elements_timidity_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/timidity$(EXEEXT) $(AM_V_CCLD)$(elements_timidity_LINK) $(elements_timidity_OBJECTS) $(elements_timidity_LDADD) $(LIBS) +elements/uvch264demux$(EXEEXT): $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_DEPENDENCIES) $(EXTRA_elements_uvch264demux_DEPENDENCIES) elements/$(am__dirstamp) + @rm -f elements/uvch264demux$(EXEEXT) + $(AM_V_CCLD)$(elements_uvch264demux_LINK) $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_LDADD) $(LIBS) elements/viewfinderbin$(EXEEXT): $(elements_viewfinderbin_OBJECTS) $(elements_viewfinderbin_DEPENDENCIES) $(EXTRA_elements_viewfinderbin_DEPENDENCIES) elements/$(am__dirstamp) @rm -f elements/viewfinderbin$(EXEEXT) $(AM_V_CCLD)$(LINK) $(elements_viewfinderbin_OBJECTS) $(elements_viewfinderbin_LDADD) $(LIBS) @@ -1343,6 +1423,9 @@ pipelines/mimic$(EXEEXT): $(pipelines_mimic_OBJECTS) $(pipelines_mimic_DEPENDENC pipelines/mxf$(EXEEXT): $(pipelines_mxf_OBJECTS) $(pipelines_mxf_DEPENDENCIES) $(EXTRA_pipelines_mxf_DEPENDENCIES) pipelines/$(am__dirstamp) @rm -f pipelines/mxf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pipelines_mxf_OBJECTS) $(pipelines_mxf_LDADD) $(LIBS) +pipelines/streamheader$(EXEEXT): $(pipelines_streamheader_OBJECTS) $(pipelines_streamheader_DEPENDENCIES) $(EXTRA_pipelines_streamheader_DEPENDENCIES) pipelines/$(am__dirstamp) + @rm -f pipelines/streamheader$(EXEEXT) + $(AM_V_CCLD)$(pipelines_streamheader_LINK) $(pipelines_streamheader_OBJECTS) $(pipelines_streamheader_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -1365,11 +1448,14 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_camerabin-camerabin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_faac-faac.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_faad-faad.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdpdepay-gdpdepay.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdppay-gdppay.Po@am__quote@ @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_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@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_voaacenc-voaacenc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h263parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h264parse.Po@am__quote@ @@ -1393,6 +1479,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_bayer-bayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_cog-cog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_streamheader-streamheader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schroenc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/states.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewfinderbin.Po@am__quote@ @@ -1625,6 +1712,34 @@ elements_faad-faad.obj: elements/faad.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) $(elements_faad_CFLAGS) $(CFLAGS) -c -o elements_faad-faad.obj `if test -f 'elements/faad.c'; then $(CYGPATH_W) 'elements/faad.c'; else $(CYGPATH_W) '$(srcdir)/elements/faad.c'; fi` +elements_gdpdepay-gdpdepay.o: elements/gdpdepay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdpdepay_CFLAGS) $(CFLAGS) -MT elements_gdpdepay-gdpdepay.o -MD -MP -MF $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo -c -o elements_gdpdepay-gdpdepay.o `test -f 'elements/gdpdepay.c' || echo '$(srcdir)/'`elements/gdpdepay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo $(DEPDIR)/elements_gdpdepay-gdpdepay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdpdepay.c' object='elements_gdpdepay-gdpdepay.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_gdpdepay_CFLAGS) $(CFLAGS) -c -o elements_gdpdepay-gdpdepay.o `test -f 'elements/gdpdepay.c' || echo '$(srcdir)/'`elements/gdpdepay.c + +elements_gdpdepay-gdpdepay.obj: elements/gdpdepay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdpdepay_CFLAGS) $(CFLAGS) -MT elements_gdpdepay-gdpdepay.obj -MD -MP -MF $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo -c -o elements_gdpdepay-gdpdepay.obj `if test -f 'elements/gdpdepay.c'; then $(CYGPATH_W) 'elements/gdpdepay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdpdepay.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo $(DEPDIR)/elements_gdpdepay-gdpdepay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdpdepay.c' object='elements_gdpdepay-gdpdepay.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_gdpdepay_CFLAGS) $(CFLAGS) -c -o elements_gdpdepay-gdpdepay.obj `if test -f 'elements/gdpdepay.c'; then $(CYGPATH_W) 'elements/gdpdepay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdpdepay.c'; fi` + +elements_gdppay-gdppay.o: elements/gdppay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdppay_CFLAGS) $(CFLAGS) -MT elements_gdppay-gdppay.o -MD -MP -MF $(DEPDIR)/elements_gdppay-gdppay.Tpo -c -o elements_gdppay-gdppay.o `test -f 'elements/gdppay.c' || echo '$(srcdir)/'`elements/gdppay.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdppay-gdppay.Tpo $(DEPDIR)/elements_gdppay-gdppay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdppay.c' object='elements_gdppay-gdppay.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_gdppay_CFLAGS) $(CFLAGS) -c -o elements_gdppay-gdppay.o `test -f 'elements/gdppay.c' || echo '$(srcdir)/'`elements/gdppay.c + +elements_gdppay-gdppay.obj: elements/gdppay.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdppay_CFLAGS) $(CFLAGS) -MT elements_gdppay-gdppay.obj -MD -MP -MF $(DEPDIR)/elements_gdppay-gdppay.Tpo -c -o elements_gdppay-gdppay.obj `if test -f 'elements/gdppay.c'; then $(CYGPATH_W) 'elements/gdppay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdppay.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdppay-gdppay.Tpo $(DEPDIR)/elements_gdppay-gdppay.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdppay.c' object='elements_gdppay-gdppay.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_gdppay_CFLAGS) $(CFLAGS) -c -o elements_gdppay-gdppay.obj `if test -f 'elements/gdppay.c'; then $(CYGPATH_W) 'elements/gdppay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdppay.c'; fi` + h263parse.o: elements/h263parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h263parse.o -MD -MP -MF $(DEPDIR)/h263parse.Tpo -c -o h263parse.o `test -f 'elements/h263parse.c' || echo '$(srcdir)/'`elements/h263parse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h263parse.Tpo $(DEPDIR)/h263parse.Po @@ -1905,6 +2020,20 @@ elements_timidity-timidity.obj: elements/timidity.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) $(elements_timidity_CFLAGS) $(CFLAGS) -c -o elements_timidity-timidity.obj `if test -f 'elements/timidity.c'; then $(CYGPATH_W) 'elements/timidity.c'; else $(CYGPATH_W) '$(srcdir)/elements/timidity.c'; fi` +elements_uvch264demux-uvch264demux.o: elements/uvch264demux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_uvch264demux_CFLAGS) $(CFLAGS) -MT elements_uvch264demux-uvch264demux.o -MD -MP -MF $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo -c -o elements_uvch264demux-uvch264demux.o `test -f 'elements/uvch264demux.c' || echo '$(srcdir)/'`elements/uvch264demux.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo $(DEPDIR)/elements_uvch264demux-uvch264demux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/uvch264demux.c' object='elements_uvch264demux-uvch264demux.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_uvch264demux_CFLAGS) $(CFLAGS) -c -o elements_uvch264demux-uvch264demux.o `test -f 'elements/uvch264demux.c' || echo '$(srcdir)/'`elements/uvch264demux.c + +elements_uvch264demux-uvch264demux.obj: elements/uvch264demux.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_uvch264demux_CFLAGS) $(CFLAGS) -MT elements_uvch264demux-uvch264demux.obj -MD -MP -MF $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo -c -o elements_uvch264demux-uvch264demux.obj `if test -f 'elements/uvch264demux.c'; then $(CYGPATH_W) 'elements/uvch264demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/uvch264demux.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo $(DEPDIR)/elements_uvch264demux-uvch264demux.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/uvch264demux.c' object='elements_uvch264demux-uvch264demux.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_uvch264demux_CFLAGS) $(CFLAGS) -c -o elements_uvch264demux-uvch264demux.obj `if test -f 'elements/uvch264demux.c'; then $(CYGPATH_W) 'elements/uvch264demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/uvch264demux.c'; fi` + viewfinderbin.o: elements/viewfinderbin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT viewfinderbin.o -MD -MP -MF $(DEPDIR)/viewfinderbin.Tpo -c -o viewfinderbin.o `test -f 'elements/viewfinderbin.c' || echo '$(srcdir)/'`elements/viewfinderbin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/viewfinderbin.Tpo $(DEPDIR)/viewfinderbin.Po @@ -2115,6 +2244,20 @@ mxf.obj: pipelines/mxf.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 mxf.obj `if test -f 'pipelines/mxf.c'; then $(CYGPATH_W) 'pipelines/mxf.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/mxf.c'; fi` +pipelines_streamheader-streamheader.o: pipelines/streamheader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -MT pipelines_streamheader-streamheader.o -MD -MP -MF $(DEPDIR)/pipelines_streamheader-streamheader.Tpo -c -o pipelines_streamheader-streamheader.o `test -f 'pipelines/streamheader.c' || echo '$(srcdir)/'`pipelines/streamheader.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_streamheader-streamheader.Tpo $(DEPDIR)/pipelines_streamheader-streamheader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/streamheader.c' object='pipelines_streamheader-streamheader.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) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -c -o pipelines_streamheader-streamheader.o `test -f 'pipelines/streamheader.c' || echo '$(srcdir)/'`pipelines/streamheader.c + +pipelines_streamheader-streamheader.obj: pipelines/streamheader.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -MT pipelines_streamheader-streamheader.obj -MD -MP -MF $(DEPDIR)/pipelines_streamheader-streamheader.Tpo -c -o pipelines_streamheader-streamheader.obj `if test -f 'pipelines/streamheader.c'; then $(CYGPATH_W) 'pipelines/streamheader.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/streamheader.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_streamheader-streamheader.Tpo $(DEPDIR)/pipelines_streamheader-streamheader.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/streamheader.c' object='pipelines_streamheader-streamheader.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) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -c -o pipelines_streamheader-streamheader.obj `if test -f 'pipelines/streamheader.c'; then $(CYGPATH_W) 'pipelines/streamheader.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/streamheader.c'; fi` + mostlyclean-libtool: -rm -f *.lo diff --git a/tests/check/elements/autoconvert.c b/tests/check/elements/autoconvert.c index 680464c1..dbb91ccb 100644 --- a/tests/check/elements/autoconvert.c +++ b/tests/check/elements/autoconvert.c @@ -81,37 +81,13 @@ set_autoconvert_factories (GstElement * autoconvert) g_list_free (factories); } -typedef struct -{ - gint n; - GstCaps *caps; -} TestContext; - -static void -generate_test_buffer (GstPad * src, TestContext * ctx) -{ - GstBuffer *buf; - - if (ctx->n == 0) { - ctx->caps = gst_caps_from_string ("test/caps,type=(int)1"); - } else if (ctx->n == 10) { - gst_caps_unref (ctx->caps); - ctx->caps = gst_caps_from_string ("test/caps,type=(int)2"); - } - - buf = gst_buffer_new_and_alloc (4096); - gst_pad_set_caps (src, ctx->caps); - - GST_LOG ("Pushing test buffer, caps %" GST_PTR_FORMAT, ctx->caps); - fail_unless (gst_pad_push (src, buf) == GST_FLOW_OK); -} - GST_START_TEST (test_autoconvert_simple) { GstPad *test_src_pad, *test_sink_pad; GstElement *autoconvert = gst_check_setup_element ("autoconvert"); GstBus *bus = gst_bus_new (); - TestContext ctx = { 0 }; + GstCaps *caps; + guint i; set_autoconvert_factories (autoconvert); @@ -122,9 +98,29 @@ GST_START_TEST (test_autoconvert_simple) gst_element_set_state (GST_ELEMENT_CAST (autoconvert), GST_STATE_PLAYING); - /* Push 20 items */ - for (ctx.n = 0; ctx.n < 20; ctx.n++) - generate_test_buffer (test_src_pad, &ctx); + /* Setting original caps */ + caps = gst_caps_from_string ("test/caps,type=(int)1"); + fail_unless (gst_pad_set_caps (test_src_pad, caps)); + gst_caps_unref (caps); + + /* Push 10 items */ + for (i = 0; i < 10; i++) { + GST_LOG ("Pushing test buffer %d, caps 1"); + fail_unless (gst_pad_push (test_src_pad, gst_buffer_new_and_alloc (4096)) + == GST_FLOW_OK); + } + + GST_LOG ("Changing caps to caps 2"); + caps = gst_caps_from_string ("test/caps,type=(int)2"); + fail_unless (gst_pad_set_caps (test_src_pad, caps)); + gst_caps_unref (caps); + + /* Push 10 more items */ + for (i = 0; i < 10; i++) { + GST_LOG ("Pushing test buffer %d, caps 2"); + fail_unless (gst_pad_push (test_src_pad, gst_buffer_new_and_alloc (4096)) + == GST_FLOW_OK); + } /* Check all the items arrived */ fail_unless_equals_int (g_list_length (buffers), 20); diff --git a/tests/check/elements/camerabin.c b/tests/check/elements/camerabin.c index da727098..ac55a8da 100644 --- a/tests/check/elements/camerabin.c +++ b/tests/check/elements/camerabin.c @@ -1519,9 +1519,21 @@ GST_START_TEST (test_image_location_switching) g_idle_add (image_location_switch_do_capture, filenames); g_main_loop_run (main_loop); - msg = wait_for_element_message (camera, "image-done", GST_CLOCK_TIME_NONE); - fail_unless (msg != NULL); - gst_message_unref (msg); + while (1) { + const gchar *filename; + + msg = wait_for_element_message (camera, "image-done", GST_CLOCK_TIME_NONE); + fail_unless (msg != NULL); + + filename = + gst_structure_get_string (gst_message_get_structure (msg), "filename"); + if (strcmp (filename, + filenames[LOCATION_SWITCHING_FILENAMES_COUNT - 1]) == 0) { + gst_message_unref (msg); + break; + } + gst_message_unref (msg); + } gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); diff --git a/tests/check/elements/gdpdepay.c b/tests/check/elements/gdpdepay.c new file mode 100644 index 00000000..5ee6e5fd --- /dev/null +++ b/tests/check/elements/gdpdepay.c @@ -0,0 +1,399 @@ +/* GStreamer + * + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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 "config.h" +#include <string.h> +#include <unistd.h> + +#include <gst/check/gstcheck.h> +#include <gst/audio/audio.h> +#include "../../gst/gdp/dataprotocol.c" + +/* 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, *myshsinkpad; + +#define FORMATS "{ S8, "GST_AUDIO_NE(S16)" }" + +#define AUDIO_CAPS_TEMPLATE_STRING \ + "audio/x-raw, " \ + "format = (string) "FORMATS", " \ + "rate = (int) [ 1, MAX ], " \ + "channels = (int) [ 1, 8 ]" + +#define AUDIO_CAPS_STRING \ + "audio/x-raw, " \ + "format = (string) "GST_AUDIO_NE(S16)", " \ + "rate = (int) 1000, " \ + "channels = (int) 2" + +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (AUDIO_CAPS_TEMPLATE_STRING) + ); +static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gdp") + ); + +/* takes over reference for outcaps */ +static GstElement * +setup_gdpdepay (void) +{ + GstElement *gdpdepay; + + GST_DEBUG ("setup_gdpdepay"); + gdpdepay = gst_check_setup_element ("gdpdepay"); + mysrcpad = gst_check_setup_src_pad (gdpdepay, &srctemplate); + mysinkpad = gst_check_setup_sink_pad (gdpdepay, &sinktemplate); + gst_pad_set_active (mysrcpad, TRUE); + gst_pad_set_active (mysinkpad, TRUE); + + return gdpdepay; +} + +static void +cleanup_gdpdepay (GstElement * gdpdepay) +{ + GST_DEBUG ("cleanup_gdpdepay"); + + gst_pad_set_active (mysrcpad, FALSE); + if (mysinkpad) + gst_pad_set_active (mysinkpad, FALSE); + if (myshsinkpad) + gst_pad_set_active (myshsinkpad, FALSE); + gst_check_teardown_src_pad (gdpdepay); + gst_check_teardown_sink_pad (gdpdepay); + gst_check_teardown_element (gdpdepay); + mysinkpad = NULL; + myshsinkpad = NULL; +} + +static void +gdpdepay_push_per_byte (const gchar * reason, const guint8 * bytes, + guint length) +{ + int i; + GstBuffer *inbuffer; + + for (i = 0; i < length; ++i) { + inbuffer = gst_buffer_new_and_alloc (1); + gst_buffer_fill (inbuffer, 0, &bytes[i], 1); + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK, + "%s: failed pushing byte buffer", reason); + } +} + +GST_START_TEST (test_audio_per_byte) +{ + GstCaps *caps; + GstPad *srcpad; + GstElement *gdpdepay; + GstBuffer *buffer, *outbuffer; + guint8 *header, *payload; + guint len; + GstDPPacketizer *pk; + + pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0); + + gdpdepay = setup_gdpdepay (); + srcpad = gst_element_get_static_pad (gdpdepay, "src"); + + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + caps = gst_pad_query_caps (srcpad, NULL); + fail_unless (gst_caps_is_any (caps)); + gst_caps_unref (caps); + fail_if (gst_pad_get_current_caps (srcpad)); + + /* create caps and buffer packets and push them */ + caps = gst_caps_from_string (AUDIO_CAPS_STRING); + fail_unless (pk->packet_from_caps (caps, 0, &len, &header, &payload)); + gst_caps_unref (caps); + gdpdepay_push_per_byte ("caps header", header, len); + fail_unless_equals_int (g_list_length (buffers), 0); + gdpdepay_push_per_byte ("caps payload", payload, + gst_dp_header_payload_length (header)); + fail_unless_equals_int (g_list_length (buffers), 0); + caps = gst_pad_query_caps (srcpad, NULL); + fail_if (gst_caps_is_any (caps)); + gst_caps_unref (caps); + + g_free (header); + g_free (payload); + + buffer = gst_buffer_new_and_alloc (4); + gst_buffer_fill (buffer, 0, "f00d", 4); + GST_BUFFER_TIMESTAMP (buffer) = GST_SECOND; + GST_BUFFER_DURATION (buffer) = GST_SECOND / 10; + fail_unless (pk->header_from_buffer (buffer, 0, &len, &header)); + gdpdepay_push_per_byte ("buffer header", header, len); + fail_unless_equals_int (g_list_length (buffers), 0); + gdpdepay_push_per_byte ("buffer payload", (const guint8 *) "f00d", + gst_dp_header_payload_length (header)); + g_free (header); + gst_buffer_unref (buffer); + + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + fail_unless_equals_uint64 (GST_BUFFER_TIMESTAMP (outbuffer), GST_SECOND); + fail_unless_equals_uint64 (GST_BUFFER_DURATION (outbuffer), GST_SECOND / 10); + + buffers = g_list_remove (buffers, outbuffer); + gst_buffer_unref (outbuffer); + + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + gst_object_unref (srcpad); + cleanup_gdpdepay (gdpdepay); + + gst_dp_packetizer_free (pk); +} + +GST_END_TEST; + +GST_START_TEST (test_audio_in_one_buffer) +{ + GstCaps *caps; + GstPad *srcpad; + GstElement *gdpdepay; + GstBuffer *buffer, *inbuffer; + guint8 *caps_header, *caps_payload, *buf_header; + guint header_len, payload_len; + guint i; + GstDPPacketizer *pk; + + pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0); + + gdpdepay = setup_gdpdepay (); + srcpad = gst_element_get_static_pad (gdpdepay, "src"); + + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + /* make sure no caps are set yet */ + caps = gst_pad_query_caps (srcpad, NULL); + fail_unless (gst_caps_is_any (caps)); + gst_caps_unref (caps); + fail_if (gst_pad_get_current_caps (srcpad)); + + /* create caps and buffer packets and push them as one buffer */ + caps = gst_caps_from_string (AUDIO_CAPS_STRING); + fail_unless (pk->packet_from_caps (caps, 0, &header_len, &caps_header, + &caps_payload)); + + buffer = gst_buffer_new_and_alloc (4); + gst_buffer_fill (buffer, 0, "f00d", 4); + fail_unless (pk->header_from_buffer (buffer, 0, &header_len, &buf_header)); + + payload_len = gst_dp_header_payload_length (caps_header); + + inbuffer = gst_buffer_new_and_alloc (2 * GST_DP_HEADER_LENGTH + + payload_len + gst_buffer_get_size (buffer)); + gst_buffer_fill (inbuffer, 0, caps_header, GST_DP_HEADER_LENGTH); + i = GST_DP_HEADER_LENGTH; + gst_buffer_fill (inbuffer, i, caps_payload, payload_len); + i += payload_len; + gst_buffer_fill (inbuffer, i, buf_header, GST_DP_HEADER_LENGTH); + i += GST_DP_HEADER_LENGTH; + gst_buffer_fill (inbuffer, i, "f00d", 4); + + gst_caps_unref (caps); + gst_buffer_unref (buffer); + + g_free (caps_header); + g_free (caps_payload); + g_free (buf_header); + + /* now push it */ + gst_pad_push (mysrcpad, inbuffer); + + /* the buffer is still queued */ + fail_unless_equals_int (g_list_length (buffers), 1); + + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + gst_object_unref (srcpad); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1); + cleanup_gdpdepay (gdpdepay); + + gst_dp_packetizer_free (pk); +} + +GST_END_TEST; + +static GstStaticPadTemplate shsinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gst-test-streamheader") + ); + +static GstElement * +setup_gdpdepay_streamheader (void) +{ + GstElement *gdpdepay; + + GST_DEBUG ("setup_gdpdepay"); + gdpdepay = gst_check_setup_element ("gdpdepay"); + mysrcpad = gst_check_setup_src_pad (gdpdepay, &srctemplate); + myshsinkpad = gst_check_setup_sink_pad (gdpdepay, &shsinktemplate); + gst_pad_set_active (mysrcpad, TRUE); + gst_pad_set_active (myshsinkpad, TRUE); + + return gdpdepay; +} + +/* this tests deserialization of a GDP stream where the serialized caps + * have a streamheader set */ +GST_START_TEST (test_streamheader) +{ + GstCaps *caps; + GstPad *srcpad; + GstElement *gdpdepay; + GstBuffer *buffer, *inbuffer, *outbuffer, *shbuffer; + guint8 *caps_header, *caps_payload, *buf_header; + GstMapInfo map; + guint header_len, payload_len; + guint i; + GstStructure *structure; + GValue array = { 0 }; + GValue value = { 0 }; + GstDPPacketizer *pk; + + pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0); + + gdpdepay = setup_gdpdepay_streamheader (); + srcpad = gst_element_get_static_pad (gdpdepay, "src"); + ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1); + + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + /* make sure no caps are set yet */ + caps = gst_pad_query_caps (srcpad, NULL); + fail_unless (gst_caps_is_any (caps)); + gst_caps_unref (caps); + fail_if (gst_pad_get_current_caps (srcpad)); + + /* create a streamheader buffer and the caps containing it */ + caps = gst_caps_from_string ("application/x-gst-test-streamheader"); + structure = gst_caps_get_structure (caps, 0); + buffer = gst_buffer_new_and_alloc (4); + gst_buffer_fill (buffer, 0, "f00d", 4); + GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_HEADER); + g_value_init (&array, GST_TYPE_ARRAY); + g_value_init (&value, GST_TYPE_BUFFER); + shbuffer = gst_buffer_copy (buffer); + gst_value_set_buffer (&value, shbuffer); + gst_buffer_unref (shbuffer); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_structure_set_value (structure, "streamheader", &array); + g_value_unset (&array); + + /* create GDP packets for the caps and the buffer, and put them in one + * GDP buffer */ + fail_unless (pk->packet_from_caps (caps, 0, &header_len, &caps_header, + &caps_payload)); + + fail_unless (pk->header_from_buffer (buffer, 0, &header_len, &buf_header)); + + payload_len = gst_dp_header_payload_length (caps_header); + + gst_buffer_map (buffer, &map, GST_MAP_READ); + inbuffer = gst_buffer_new_and_alloc (2 * GST_DP_HEADER_LENGTH + + payload_len + map.size); + gst_buffer_fill (inbuffer, 0, caps_header, GST_DP_HEADER_LENGTH); + i = GST_DP_HEADER_LENGTH; + gst_buffer_fill (inbuffer, i, caps_payload, payload_len); + i += payload_len; + gst_buffer_fill (inbuffer, i, buf_header, GST_DP_HEADER_LENGTH); + i += GST_DP_HEADER_LENGTH; + gst_buffer_fill (inbuffer, i, map.data, map.size); + gst_buffer_unmap (buffer, &map); + + gst_caps_unref (caps); + gst_buffer_unref (buffer); + + g_free (caps_header); + g_free (caps_payload); + g_free (buf_header); + + /* now push it */ + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + gst_pad_push (mysrcpad, inbuffer); + + /* our only output buffer is the streamheader buffer */ + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + fail_unless (GST_BUFFER_FLAG_IS_SET (outbuffer, GST_BUFFER_FLAG_HEADER)); + + /* FIXME: get streamheader, compare data with buffer */ + gst_buffer_unref (outbuffer); + + /* clean up */ + fail_unless (gst_element_set_state (gdpdepay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + gst_object_unref (srcpad); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1); + cleanup_gdpdepay (gdpdepay); + + gst_dp_packetizer_free (pk); +} + +GST_END_TEST; + +static Suite * +gdpdepay_suite (void) +{ + Suite *s = suite_create ("gdpdepay"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_audio_per_byte); + tcase_add_test (tc_chain, test_audio_in_one_buffer); + tcase_add_test (tc_chain, test_streamheader); + + return s; +} + +GST_CHECK_MAIN (gdpdepay); diff --git a/tests/check/elements/gdppay.c b/tests/check/elements/gdppay.c new file mode 100644 index 00000000..451a0c53 --- /dev/null +++ b/tests/check/elements/gdppay.c @@ -0,0 +1,571 @@ +/* GStreamer + * + * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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 "config.h" +#include <string.h> +#include <unistd.h> + +#include <gst/check/gstcheck.h> +#include <gst/audio/audio.h> +#include "../../gst/gdp/dataprotocol.c" + +/* 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, *myshsrcpad, *mysinkpad; + +#define FORMATS "{ S8, "GST_AUDIO_NE(S16)" }" + +#define AUDIO_CAPS_TEMPLATE_STRING \ + "audio/x-raw, " \ + "format = (string) "FORMATS", " \ + "rate = (int) [ 1, MAX ], " \ + "channels = (int) [ 1, 8 ]" + +#define AUDIO_CAPS_STRING \ + "audio/x-raw, " \ + "format = (string) "GST_AUDIO_NE(S16)", " \ + "rate = (int) 1000, " \ + "channels = (int) 2" + + +static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gdp") + ); +static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS (AUDIO_CAPS_TEMPLATE_STRING) + ); + +/* takes over reference for outcaps */ +static GstElement * +setup_gdppay (void) +{ + GstElement *gdppay; + + GST_DEBUG ("setup_gdppay"); + gdppay = gst_check_setup_element ("gdppay"); + mysrcpad = gst_check_setup_src_pad (gdppay, &srctemplate); + mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate); + gst_pad_set_active (mysrcpad, TRUE); + gst_pad_set_active (mysinkpad, TRUE); + + return gdppay; +} + +static void +cleanup_gdppay (GstElement * gdppay) +{ + GST_DEBUG ("cleanup_gdppay"); + + if (mysrcpad) + gst_pad_set_active (mysrcpad, FALSE); + if (myshsrcpad) + gst_pad_set_active (myshsrcpad, FALSE); + gst_pad_set_active (mysinkpad, FALSE); + gst_check_teardown_src_pad (gdppay); + gst_check_teardown_sink_pad (gdppay); + gst_check_teardown_element (gdppay); + mysrcpad = NULL; + myshsrcpad = NULL; +} + +GST_START_TEST (test_audio) +{ + GstCaps *caps; + GstElement *gdppay; + GstBuffer *inbuffer, *outbuffer; + GstSegment segment; + GstEvent *event; + gchar *caps_string; + gint length; + + gdppay = setup_gdppay (); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + GST_DEBUG ("new segment"); + gst_segment_init (&segment, GST_FORMAT_TIME); + segment.stop = GST_SECOND; + event = gst_event_new_segment (&segment); + fail_unless (gst_pad_push_event (mysrcpad, event)); + + /* no buffer should be pushed yet, waiting for caps */ + fail_unless_equals_int (g_list_length (buffers), 0); + + GST_DEBUG ("first buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + caps = gst_caps_from_string (AUDIO_CAPS_STRING); + gst_pad_set_caps (mysrcpad, caps); + caps_string = gst_caps_to_string (caps); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK); + + /* we should have three buffers now */ + fail_unless_equals_int (g_list_length (buffers), 3); + + /* first buffer is the serialized new_segment event; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + gst_buffer_unref (outbuffer); + + /* second buffer is the serialized caps; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1); + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* the third buffer is the GDP buffer for our pushed buffer */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* second buffer */ + GST_DEBUG ("second buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK); + + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + + /* the third output buffer is data */ + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* a third buffer without caps set explicitly; should work */ + GST_DEBUG ("Creating third buffer, no caps set"); + inbuffer = gst_buffer_new_and_alloc (4); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK); + + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + + /* the fourth output buffer is data */ + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + gst_caps_unref (caps); + g_free (caps_string); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1); + cleanup_gdppay (gdppay); +} + +GST_END_TEST; + +static GstStaticPadTemplate shsrctemplate = GST_STATIC_PAD_TEMPLATE ("src", + GST_PAD_SRC, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("application/x-gst-test-streamheader") + ); + + +static GstElement * +setup_gdppay_streamheader (void) +{ + GstElement *gdppay; + + GST_DEBUG ("setup_gdppay"); + gdppay = gst_check_setup_element ("gdppay"); + myshsrcpad = gst_check_setup_src_pad (gdppay, &shsrctemplate); + mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate); + gst_pad_set_active (myshsrcpad, TRUE); + gst_pad_set_active (mysinkpad, TRUE); + + return gdppay; +} + +/* this test serializes a stream that already has a streamheader of its own. + * the streamheader should then be serialized and put on the GDP stream's + * streamheader */ +GST_START_TEST (test_streamheader) +{ + GstCaps *caps, *sinkcaps; + GstElement *gdppay; + GstBuffer *inbuffer, *outbuffer, *shbuffer; + GstSegment segment; + GstEvent *event; + gchar *caps_string; + gint length; + GstStructure *structure; + GValue array = { 0 }; + GValue value = { 0 }; + const GValue *sh; + GArray *shbuffers; + + + gdppay = setup_gdppay_streamheader (); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + GST_DEBUG ("new segment"); + gst_segment_init (&segment, GST_FORMAT_TIME); + segment.stop = GST_SECOND; + event = gst_event_new_segment (&segment); + fail_unless (gst_pad_push_event (myshsrcpad, event)); + + /* no buffer should be pushed yet, still waiting for caps */ + fail_unless_equals_int (g_list_length (buffers), 0); + + GST_DEBUG ("first buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + gst_buffer_fill (inbuffer, 0, "head", 4); + caps = gst_caps_from_string ("application/x-gst-test-streamheader"); + structure = gst_caps_get_structure (caps, 0); + GST_BUFFER_FLAG_SET (inbuffer, GST_BUFFER_FLAG_HEADER); + g_value_init (&array, GST_TYPE_ARRAY); + g_value_init (&value, GST_TYPE_BUFFER); + shbuffer = gst_buffer_copy (inbuffer); + gst_value_set_buffer (&value, shbuffer); + gst_buffer_unref (shbuffer); + gst_value_array_append_value (&array, &value); + g_value_unset (&value); + gst_structure_set_value (structure, "streamheader", &array); + g_value_unset (&array); + caps_string = gst_caps_to_string (caps); + + gst_pad_set_caps (myshsrcpad, caps); + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK); + + /* we should have three buffers now */ + fail_unless_equals_int (g_list_length (buffers), 3); + + /* our sink pad should now have GDP caps with a streamheader that includes + * GDP wrappings of our streamheader */ + sinkcaps = gst_pad_get_current_caps (mysinkpad); + structure = gst_caps_get_structure (sinkcaps, 0); + fail_unless_equals_string ((gchar *) gst_structure_get_name (structure), + "application/x-gdp"); + fail_unless (gst_structure_has_field (structure, "streamheader")); + sh = gst_structure_get_value (structure, "streamheader"); + fail_unless (G_VALUE_TYPE (sh) == GST_TYPE_ARRAY); + shbuffers = g_value_peek_pointer (sh); + /* a serialized new_segment, a serialized caps, and serialization of our + * incoming streamheader */ + fail_unless_equals_int (shbuffers->len, 3); + + gst_caps_unref (sinkcaps); + + /* first buffer is the serialized new_segment event; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + gst_buffer_unref (outbuffer); + + /* second buffer is the serialized caps; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1); + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* the third buffer is the GDP buffer for our pushed buffer */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* second buffer */ + GST_DEBUG ("second buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK); + + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + + /* the third output buffer is data */ + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* a third buffer without caps set explicitly; should work */ + GST_DEBUG ("Creating third buffer, no caps set"); + inbuffer = gst_buffer_new_and_alloc (4); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK); + + fail_unless_equals_int (g_list_length (buffers), 1); + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + + /* the fourth output buffer is data */ + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + gst_caps_unref (caps); + g_free (caps_string); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1); + cleanup_gdppay (gdppay); +} + +GST_END_TEST; + + +GST_START_TEST (test_first_no_caps) +{ + GstElement *gdppay; + GstBuffer *inbuffer; + + gdppay = setup_gdppay (); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + GST_DEBUG ("first buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing should trigger an error */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_NOT_NEGOTIATED); + + fail_unless_equals_int (g_list_length (buffers), 0); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1); + cleanup_gdppay (gdppay); +} + +GST_END_TEST; + +/* element should still work if no new_segment is sent before the first + * buffer */ +GST_START_TEST (test_first_no_new_segment) +{ + GstElement *gdppay; + GstBuffer *inbuffer; + GstCaps *caps; + + gdppay = setup_gdppay (); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + GST_DEBUG ("first buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + caps = gst_caps_from_string (AUDIO_CAPS_STRING); + gst_pad_set_caps (mysrcpad, caps); + gst_caps_unref (caps); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK); + + /* we should have three buffers now; + * one for an "invented" new segment, one for GDP caps, and one with our + * buffer */ + fail_unless_equals_int (g_list_length (buffers), 3); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1); + cleanup_gdppay (gdppay); +} + +GST_END_TEST; + +GST_START_TEST (test_crc) +{ + GstCaps *caps; + GstElement *gdppay; + GstBuffer *inbuffer, *outbuffer; + GstSegment segment; + GstEvent *event; + gchar *caps_string; + gint length; + GstMapInfo map; + guint16 crc_calculated, crc_read; + + gdppay = setup_gdppay (); + g_object_set (gdppay, "crc-header", TRUE, NULL); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS, + "could not set to playing"); + + GST_DEBUG ("new segment"); + gst_segment_init (&segment, GST_FORMAT_TIME); + event = gst_event_new_segment (&segment); + fail_unless (gst_pad_push_event (mysrcpad, event)); + + /* no buffer should be pushed yet, waiting for caps */ + fail_unless_equals_int (g_list_length (buffers), 0); + + GST_DEBUG ("first buffer"); + inbuffer = gst_buffer_new_and_alloc (4); + caps = gst_caps_from_string (AUDIO_CAPS_STRING); + gst_pad_set_caps (mysrcpad, caps); + caps_string = gst_caps_to_string (caps); + + ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); + + /* pushing gives away my reference */ + fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK); + + /* we should have three buffers now */ + fail_unless_equals_int (g_list_length (buffers), 3); + + /* first buffer is the serialized new_segment event; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + + /* verify the header checksum */ + /* CRC's start at 58 in the header */ + outbuffer = gst_buffer_make_writable (outbuffer); + gst_buffer_map (outbuffer, &map, GST_MAP_READWRITE); + crc_calculated = gst_dp_crc (map.data, 58); + crc_read = GST_READ_UINT16_BE (map.data + 58); + fail_unless_equals_int (crc_calculated, crc_read); + + /* change a byte in the header and verify that the checksum now fails */ + map.data[0] = 0xff; + crc_calculated = gst_dp_crc (map.data, 58); + fail_if (crc_calculated == crc_read, + "Introducing a byte error in the header should make the checksum fail"); + + gst_buffer_unmap (outbuffer, &map); + gst_buffer_unref (outbuffer); + + /* second buffer is the serialized caps; + * the element also holds a ref to it */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2); + length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1); + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + /* the third buffer is the GDP buffer for our pushed buffer */ + fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL); + buffers = g_list_remove (buffers, outbuffer); + ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1); + length = GST_DP_HEADER_LENGTH + 4; + fail_unless_equals_int (gst_buffer_get_size (outbuffer), length); + gst_buffer_unref (outbuffer); + + fail_unless (gst_element_set_state (gdppay, + GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null"); + + gst_caps_unref (caps); + g_free (caps_string); + g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL); + g_list_free (buffers); + buffers = NULL; + ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1); + cleanup_gdppay (gdppay); +} + +GST_END_TEST; + + +static Suite * +gdppay_suite (void) +{ + Suite *s = suite_create ("gdppay"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_audio); + tcase_add_test (tc_chain, test_first_no_caps); + tcase_add_test (tc_chain, test_first_no_new_segment); + tcase_add_test (tc_chain, test_streamheader); + tcase_add_test (tc_chain, test_crc); + + return s; +} + +GST_CHECK_MAIN (gdppay); diff --git a/tests/check/elements/jifmux.c b/tests/check/elements/jifmux.c index 0f129086..76f34578 100644 --- a/tests/check/elements/jifmux.c +++ b/tests/check/elements/jifmux.c @@ -1020,6 +1020,7 @@ GST_START_TEST (test_jifmux_tags) GstTagList *taglist; GstDateTime *datetime; GstBuffer *buffer; + GstSample *sample; GstMapInfo map; gint i; @@ -1037,6 +1038,9 @@ GST_START_TEST (test_jifmux_tags) } gst_buffer_unmap (buffer, &map); + sample = gst_sample_new (buffer, NULL, NULL, NULL); + gst_buffer_unref (buffer); + taglist = gst_tag_list_new (GST_TAG_ARTIST, "some artist", GST_TAG_COPYRIGHT, "My copyright notice", GST_TAG_DEVICE_MANUFACTURER, "MyFavoriteBrand", @@ -1049,7 +1053,7 @@ GST_START_TEST (test_jifmux_tags) GST_TAG_CAPTURING_FOCAL_LENGTH, 22.5, GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, 5.25, GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, -2.5, - GST_TAG_APPLICATION_DATA, buffer, + GST_TAG_APPLICATION_DATA, sample, GST_TAG_CAPTURING_FLASH_FIRED, TRUE, GST_TAG_CAPTURING_FLASH_MODE, "auto", GST_TAG_CAPTURING_SOURCE, "dsc", @@ -1066,7 +1070,7 @@ GST_START_TEST (test_jifmux_tags) GST_TAG_IMAGE_HORIZONTAL_PPI, 300.0, GST_TAG_IMAGE_VERTICAL_PPI, 96.0, NULL); gst_date_time_unref (datetime); - gst_buffer_unref (buffer); + gst_sample_unref (sample); generate_jif_file_with_tags_from_taglist (taglist, tmpfile); libexif_check_tags_from_taglist (taglist, tmpfile); gst_tag_list_unref (taglist); diff --git a/tests/check/elements/jpegparse.c b/tests/check/elements/jpegparse.c index fa8c63ac..991bab90 100644 --- a/tests/check/elements/jpegparse.c +++ b/tests/check/elements/jpegparse.c @@ -308,8 +308,8 @@ make_my_output_buffer (GstBuffer * buffer_in) GstBuffer *buffer; GstMapInfo map; - buffer = gst_buffer_new (); gst_buffer_map (buffer_in, &map, GST_MAP_READ); + buffer = gst_buffer_new_and_alloc (map.size); gst_buffer_fill (buffer, 0, map.data, map.size); gst_buffer_unmap (buffer_in, &map); diff --git a/tests/check/elements/kate.c b/tests/check/elements/kate.c index c33c8f92..2ac860d8 100644 --- a/tests/check/elements/kate.c +++ b/tests/check/elements/kate.c @@ -514,7 +514,7 @@ GST_START_TEST (test_kate_encode_spu) GST_BUFFER_DURATION (inbuffer) = 5 * GST_SECOND; ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1); - caps = gst_caps_from_string ("video/x-dvd-subpicture"); + caps = gst_caps_from_string ("subpicture/x-dvd"); fail_unless (caps != NULL); gst_buffer_set_caps (inbuffer, caps); gst_caps_unref (caps); diff --git a/tests/check/elements/mpeg2enc.c b/tests/check/elements/mpeg2enc.c index 41dc7e07..78f7a50b 100644 --- a/tests/check/elements/mpeg2enc.c +++ b/tests/check/elements/mpeg2enc.c @@ -53,8 +53,8 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", /* some global vars, makes it easy as for the ones above */ -static GMutex *mpeg2enc_mutex; -static GCond *mpeg2enc_cond; +static GMutex mpeg2enc_mutex; +static GCond mpeg2enc_cond; static gboolean arrived_eos; static gboolean @@ -63,10 +63,10 @@ test_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: - g_mutex_lock (mpeg2enc_mutex); + g_mutex_lock (&mpeg2enc_mutex); arrived_eos = TRUE; - g_cond_signal (mpeg2enc_cond); - g_mutex_unlock (mpeg2enc_mutex); + g_cond_signal (&mpeg2enc_cond); + g_mutex_unlock (&mpeg2enc_mutex); break; default: break; @@ -91,8 +91,8 @@ setup_mpeg2enc (void) gst_pad_set_event_function (mysinkpad, test_sink_event); /* and notify the test run */ - mpeg2enc_mutex = g_mutex_new (); - mpeg2enc_cond = g_cond_new (); + g_mutex_init (&mpeg2enc_mutex); + g_cond_init (&mpeg2enc_cond); return mpeg2enc; } @@ -109,8 +109,8 @@ cleanup_mpeg2enc (GstElement * mpeg2enc) gst_check_teardown_sink_pad (mpeg2enc); gst_check_teardown_element (mpeg2enc); - g_mutex_free (mpeg2enc_mutex); - g_cond_free (mpeg2enc_cond); + g_mutex_clear (&mpeg2enc_mutex); + g_cond_clear (&mpeg2enc_cond); } GST_START_TEST (test_video_pad) @@ -141,10 +141,10 @@ GST_START_TEST (test_video_pad) /* need to force eos and state change to make sure the encoding task ends */ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE); /* need to wait a bit to make sure mpeg2enc task digested all this */ - g_mutex_lock (mpeg2enc_mutex); + g_mutex_lock (&mpeg2enc_mutex); while (!arrived_eos) - g_cond_wait (mpeg2enc_cond, mpeg2enc_mutex); - g_mutex_unlock (mpeg2enc_mutex); + g_cond_wait (&mpeg2enc_cond, &mpeg2enc_mutex); + g_mutex_unlock (&mpeg2enc_mutex); num_buffers = g_list_length (buffers); /* well, we do not really know much with mpeg, but at least something ... */ diff --git a/tests/check/elements/mpegtsmux.c b/tests/check/elements/mpegtsmux.c index 90709e15..f02d7a8a 100644 --- a/tests/check/elements/mpegtsmux.c +++ b/tests/check/elements/mpegtsmux.c @@ -457,7 +457,7 @@ pad_push (GstPad * pad, GstBuffer * buffer, GstClockTime timestamp) data->pad = pad; data->buffer = buffer; GST_BUFFER_TIMESTAMP (buffer) = timestamp; - data->thread = g_thread_create (pad_push_thread, data, TRUE, NULL); + data->thread = g_thread_try_new ("gst-check", pad_push_thread, data, NULL); return data; } diff --git a/tests/check/elements/mplex.c b/tests/check/elements/mplex.c index 13a2c277..3ac31dcb 100644 --- a/tests/check/elements/mplex.c +++ b/tests/check/elements/mplex.c @@ -51,8 +51,8 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", /* some global vars, makes it easy as for the ones above */ -static GMutex *mplex_mutex; -static GCond *mplex_cond; +static GMutex mplex_mutex; +static GCond mplex_cond; static gboolean arrived_eos; /* another easy hack, some mp2 audio data that should please mplex @@ -103,10 +103,10 @@ test_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) switch (GST_EVENT_TYPE (event)) { case GST_EVENT_EOS: - g_mutex_lock (mplex_mutex); + g_mutex_lock (&mplex_mutex); arrived_eos = TRUE; - g_cond_signal (mplex_cond); - g_mutex_unlock (mplex_mutex); + g_cond_signal (&mplex_cond); + g_mutex_unlock (&mplex_mutex); break; default: break; @@ -191,8 +191,8 @@ setup_mplex (void) gst_pad_set_event_function (mysinkpad, test_sink_event); /* and notify the test run */ - mplex_mutex = g_mutex_new (); - mplex_cond = g_cond_new (); + g_mutex_init (&mplex_mutex); + g_cond_init (&mplex_cond); return mplex; } @@ -209,8 +209,8 @@ cleanup_mplex (GstElement * mplex) gst_check_teardown_sink_pad (mplex); gst_check_teardown_element (mplex); - g_mutex_free (mplex_mutex); - g_cond_free (mplex_cond); + g_mutex_clear (&mplex_mutex); + g_cond_clear (&mplex_cond); gst_deinit (); } @@ -245,10 +245,10 @@ GST_START_TEST (test_audio_pad) /* need to force eos and state change to make sure the encoding task ends */ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE); /* need to wait a bit to make sure mplex task digested all this */ - g_mutex_lock (mplex_mutex); + g_mutex_lock (&mplex_mutex); while (!arrived_eos) - g_cond_wait (mplex_cond, mplex_mutex); - g_mutex_unlock (mplex_mutex); + g_cond_wait (&mplex_cond, &mplex_mutex); + g_mutex_unlock (&mplex_mutex); num_buffers = g_list_length (buffers); /* well, we do not really know much with mplex, but at least something ... */ diff --git a/tests/check/elements/mxfdemux.c b/tests/check/elements/mxfdemux.c index d84ae32a..450d9a8f 100644 --- a/tests/check/elements/mxfdemux.c +++ b/tests/check/elements/mxfdemux.c @@ -269,6 +269,11 @@ mxfdemux_suite (void) Suite *s = suite_create ("mxfdemux"); TCase *tc_chain = tcase_create ("general"); + /* FIXME: remove again once ported */ + if (!gst_registry_check_feature_version (gst_registry_get (), "mxfdemux", 1, + 0, 0)) + return s; + suite_add_tcase (s, tc_chain); tcase_set_timeout (tc_chain, 180); tcase_add_test (tc_chain, test_pull); diff --git a/tests/check/elements/mxfmux.c b/tests/check/elements/mxfmux.c index f8c931e2..06afeed3 100644 --- a/tests/check/elements/mxfmux.c +++ b/tests/check/elements/mxfmux.c @@ -248,6 +248,11 @@ mxfmux_suite (void) suite_add_tcase (s, tc_chain); tcase_set_timeout (tc_chain, 180); + /* FIXME: remove again once ported */ + if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1, 0, + 0)) + return s; + tcase_add_test (tc_chain, test_mpeg2); tcase_add_test (tc_chain, test_raw_video_raw_audio); tcase_add_test (tc_chain, test_raw_video_stride_transform); diff --git a/tests/check/elements/opus.c b/tests/check/elements/opus.c index be5b2cf6..84d39b34 100644 --- a/tests/check/elements/opus.c +++ b/tests/check/elements/opus.c @@ -333,6 +333,11 @@ GST_START_TEST (test_opus_encode_properties) NULL); check_buffers (1); + + fail_unless (gst_pad_push_event (myencsrcpad, + gst_event_new_flush_start ()) == TRUE); + fail_unless (gst_pad_push_event (myencsrcpad, + gst_event_new_flush_stop (TRUE)) == TRUE); } gst_caps_unref (caps); diff --git a/tests/check/elements/parser.c b/tests/check/elements/parser.c index 356b7738..1e3fd0f5 100644 --- a/tests/check/elements/parser.c +++ b/tests/check/elements/parser.c @@ -123,7 +123,7 @@ buffer_verify_data (void *buffer, void *user_data) } } if (!vdata->no_metadata) { - fail_unless (GST_BUFFER_TIMESTAMP (buffer) == vdata->ts_counter); + fail_unless (GST_BUFFER_DTS (buffer) == vdata->ts_counter); fail_unless (GST_BUFFER_DURATION (buffer) != 0); fail_unless (GST_BUFFER_OFFSET (buffer) == vdata->offset_counter); } diff --git a/tests/check/elements/rtpmux.c b/tests/check/elements/rtpmux.c index 1228e5b8..b565b1f1 100644 --- a/tests/check/elements/rtpmux.c +++ b/tests/check/elements/rtpmux.c @@ -50,6 +50,9 @@ query_func (GstPad * pad, GstObject * noparent, GstQuery * query) gst_query_set_caps_result (query, *caps); break; } + case GST_QUERY_ACCEPT_CAPS: + gst_query_set_accept_caps_result (query, TRUE); + break; default: break; } @@ -68,14 +71,17 @@ event_func (GstPad * pad, GstObject * noparent, GstEvent * event) gst_event_parse_caps (event, &caps); fail_unless (caps2 != NULL && *caps2 != NULL); - fail_unless (gst_caps_is_equal (caps, *caps2)); + fail_unless (gst_caps_is_fixed (caps)); + fail_unless (gst_caps_is_fixed (*caps2)); + fail_unless (gst_caps_is_equal_fixed (caps, *caps2)); break; } default: - gst_event_unref (event); break; } + gst_event_unref (event); + return TRUE; } diff --git a/tests/check/elements/uvch264demux.c b/tests/check/elements/uvch264demux.c new file mode 100644 index 00000000..a633c694 --- /dev/null +++ b/tests/check/elements/uvch264demux.c @@ -0,0 +1,696 @@ +/* GStreamer + * + * unit test for uvch264_demux + * + * Copyright (C) <2012> Collabora Ltd. + * Author: Youness Alaoui <youness.alaoui@collabora.co.uk> + * Copyright (C) <2008> 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 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 <gst/check/gstcheck.h> +#include <string.h> + +static GstElement *demux; +static GstPad *mjpg_pad, *h264_pad, *yuy2_pad, *nv12_pad, *jpg_pad; +static gboolean have_h264_eos, have_yuy2_eos, have_nv12_eos, have_jpg_eos; +static GstBuffer *buffer_h264, *buffer_yuy2, *buffer_nv12, *buffer_jpg; +static GError *gerror; +static gchar *error_debug; + +static GstStaticPadTemplate mjpg_template = +GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, + GST_STATIC_CAPS ("image/jpeg, width=640, height=480, framerate=15/1")); + +static GstStaticPadTemplate sink_template = +GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, + GST_STATIC_CAPS_ANY); + +#define STRINGIFY_(x) #x +#define STRINGIFY(x) STRINGIFY_ (x) +#define DATADIR STRINGIFY (UVCH264DEMUX_DATADIR) +#define VALID_H264_JPG_MJPG_FILENAME DATADIR "/valid_h264_jpg.mjpg" +#define VALID_H264_JPG_JPG_FILENAME DATADIR "/valid_h264_jpg.jpg" +#define VALID_H264_JPG_H264_FILENAME DATADIR "/valid_h264_jpg.h264" +#define VALID_H264_YUY2_MJPG_FILENAME DATADIR "/valid_h264_yuy2.mjpg" +#define VALID_H264_YUY2_YUY2_FILENAME DATADIR "/valid_h264_yuy2.yuy2" +#define VALID_H264_YUY2_H264_FILENAME DATADIR "/valid_h264_yuy2.h264" + +#define _sink_chain_func(type) \ +static GstFlowReturn \ + _sink_##type##_chain (GstPad * pad, GstBuffer * buffer) \ +{ \ + fail_unless (GST_BUFFER_CAPS (buffer) != NULL); \ + \ + buffer_##type = buffer; \ + \ + return GST_FLOW_OK; \ +} + +#define _sink_event_func(type) \ +static gboolean \ + _sink_##type##_event (GstPad * pad, GstEvent * event) \ +{ \ + if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) \ + have_##type##_eos = TRUE; \ + \ + gst_event_unref (event); \ + \ + return TRUE; \ +} + + +_sink_chain_func (h264); +_sink_chain_func (yuy2); +_sink_chain_func (nv12); +_sink_chain_func (jpg); + +_sink_event_func (h264); +_sink_event_func (yuy2); +_sink_event_func (nv12); +_sink_event_func (jpg); + + +static GstBusSyncReply +_bus_sync_handler (GstBus * bus, GstMessage * message, gpointer data) +{ + if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR) { + fail_unless (gerror == NULL && error_debug == NULL); + fail_unless (GST_MESSAGE_SRC (message) == GST_OBJECT (demux)); + gst_message_parse_error (message, &gerror, &error_debug); + } + return GST_BUS_PASS; +} + +static void +_teardown_test (void) +{ + GstBus *bus; + gst_element_set_state (demux, GST_STATE_NULL); + + bus = GST_ELEMENT_BUS (demux); + gst_bus_set_flushing (bus, TRUE); + gst_object_unref (bus); + + gst_pad_set_active (mjpg_pad, FALSE); + gst_object_unref (mjpg_pad); + if (h264_pad) { + gst_pad_set_active (h264_pad, FALSE); + gst_object_unref (h264_pad); + } + if (yuy2_pad) { + gst_pad_set_active (yuy2_pad, FALSE); + gst_object_unref (yuy2_pad); + } + if (nv12_pad) { + gst_pad_set_active (nv12_pad, FALSE); + gst_object_unref (nv12_pad); + } + if (jpg_pad) { + gst_pad_set_active (jpg_pad, FALSE); + gst_object_unref (jpg_pad); + } + if (gerror) { + g_error_free (gerror); + gerror = NULL; + } + if (error_debug) { + g_free (error_debug); + error_debug = NULL; + } + + gst_object_unref (demux); + mjpg_pad = h264_pad = yuy2_pad = nv12_pad = jpg_pad = NULL; + demux = NULL; +} + +static void +_setup_test (gboolean link_h264, gboolean link_yuy2, gboolean link_nv12, + gboolean link_jpg) +{ + GstBus *bus = gst_bus_new (); + GstPad *sinkpad, *h264pad, *yuy2pad, *nv12pad, *jpgpad; + + have_h264_eos = have_yuy2_eos = have_nv12_eos = have_jpg_eos = FALSE; + buffer_h264 = buffer_yuy2 = buffer_nv12 = buffer_jpg = NULL; + + demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL); + fail_unless (demux != NULL); + + gst_element_set_bus (demux, bus); + gst_bus_set_sync_handler (bus, _bus_sync_handler, NULL); + + mjpg_pad = gst_pad_new_from_static_template (&mjpg_template, "src"); + fail_unless (mjpg_pad != NULL); + sinkpad = gst_element_get_static_pad (demux, "sink"); + fail_unless (sinkpad != NULL); + fail_unless (gst_pad_link (mjpg_pad, sinkpad) == GST_PAD_LINK_OK); + gst_object_unref (sinkpad); + + gst_pad_set_active (mjpg_pad, TRUE); + + if (link_h264) { + h264pad = gst_element_get_static_pad (demux, "h264"); + fail_unless (h264pad != NULL); + + h264_pad = gst_pad_new_from_static_template (&sink_template, "h264"); + fail_unless (h264_pad != NULL); + gst_pad_set_chain_function (h264_pad, _sink_h264_chain); + gst_pad_set_event_function (h264_pad, _sink_h264_event); + + fail_unless (gst_pad_link (h264pad, h264_pad) == GST_PAD_LINK_OK); + gst_object_unref (h264pad); + + gst_pad_set_active (h264_pad, TRUE); + } + if (link_yuy2) { + yuy2pad = gst_element_get_static_pad (demux, "yuy2"); + fail_unless (yuy2pad != NULL); + + yuy2_pad = gst_pad_new_from_static_template (&sink_template, "yuy2"); + fail_unless (yuy2_pad != NULL); + gst_pad_set_chain_function (yuy2_pad, _sink_yuy2_chain); + gst_pad_set_event_function (yuy2_pad, _sink_yuy2_event); + + fail_unless (gst_pad_link (yuy2pad, yuy2_pad) == GST_PAD_LINK_OK); + gst_object_unref (yuy2pad); + + gst_pad_set_active (yuy2_pad, TRUE); + } + if (link_nv12) { + nv12pad = gst_element_get_static_pad (demux, "nv12"); + fail_unless (nv12pad != NULL); + + nv12_pad = gst_pad_new_from_static_template (&sink_template, "nv12"); + fail_unless (nv12_pad != NULL); + gst_pad_set_chain_function (nv12_pad, _sink_nv12_chain); + gst_pad_set_event_function (nv12_pad, _sink_nv12_event); + + fail_unless (gst_pad_link (nv12pad, nv12_pad) == GST_PAD_LINK_OK); + gst_object_unref (nv12pad); + gst_pad_set_active (nv12_pad, TRUE); + } + if (link_jpg) { + jpgpad = gst_element_get_static_pad (demux, "jpeg"); + fail_unless (jpgpad != NULL); + + jpg_pad = gst_pad_new_from_static_template (&sink_template, "jpeg"); + fail_unless (jpg_pad != NULL); + gst_pad_set_chain_function (jpg_pad, _sink_jpg_chain); + gst_pad_set_event_function (jpg_pad, _sink_jpg_event); + + fail_unless (gst_pad_link (jpgpad, jpg_pad) == GST_PAD_LINK_OK); + gst_object_unref (jpgpad); + + gst_pad_set_active (jpg_pad, TRUE); + } + + gst_element_set_state (demux, GST_STATE_PLAYING); +} + +static GstBuffer * +_buffer_from_file (const gchar * filename) +{ + GstBuffer *buffer = gst_buffer_new (); + gchar *contents = NULL; + gsize length = 0; + + fail_unless (g_file_get_contents (filename, &contents, &length, NULL)); + + GST_BUFFER_MALLOCDATA (buffer) = (guint8 *) contents; + GST_BUFFER_DATA (buffer) = (guint8 *) contents; + GST_BUFFER_SIZE (buffer) = length; + GST_BUFFER_OFFSET (buffer) = 0; + + return buffer; +} + +GST_START_TEST (test_valid_h264_jpg) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstCaps *h264_caps; + GstBuffer *buffer; + gchar *h264_data, *jpg_data; + gsize h264_size, jpg_size; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + h264_caps = gst_caps_new_simple ("video/x-h264", + "width", G_TYPE_INT, 640, "height", G_TYPE_INT, 480, + "framerate", GST_TYPE_FRACTION, 15, 1, NULL); + buffer = _buffer_from_file (VALID_H264_JPG_MJPG_FILENAME); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (g_file_get_contents (VALID_H264_JPG_H264_FILENAME, + &h264_data, &h264_size, NULL)); + fail_unless (g_file_get_contents (VALID_H264_JPG_JPG_FILENAME, + &jpg_data, &jpg_size, NULL)); + + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos); + fail_unless (have_yuy2_eos); + fail_unless (have_nv12_eos); + fail_unless (have_jpg_eos); + fail_unless (buffer_h264 != NULL); + fail_unless (buffer_jpg != NULL); + fail_unless (buffer_nv12 == NULL); + fail_unless (buffer_yuy2 == NULL); + fail_unless (gerror == NULL && error_debug == NULL); + fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_h264), + h264_caps)); + fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_jpg), + mjpg_caps)); + fail_unless (GST_BUFFER_SIZE (buffer_h264) == h264_size); + fail_unless (GST_BUFFER_SIZE (buffer_jpg) == jpg_size); + fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data, + h264_size) == 0); + fail_unless (memcmp (GST_BUFFER_DATA (buffer_jpg), jpg_data, jpg_size) == 0); + + gst_caps_unref (mjpg_caps); + gst_caps_unref (h264_caps); + g_free (h264_data); + g_free (jpg_data); + gst_buffer_unref (buffer_h264); + gst_buffer_unref (buffer_jpg); + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_valid_h264_yuy2) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstCaps *h264_caps; + GstCaps *yuy2_caps; + GstBuffer *buffer; + gchar *h264_data, *yuy2_data; + gsize h264_size, yuy2_size; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + h264_caps = gst_caps_new_simple ("video/x-h264", + "width", G_TYPE_INT, 640, "height", G_TYPE_INT, 480, + "framerate", GST_TYPE_FRACTION, 15, 1, NULL); + yuy2_caps = gst_caps_new_simple ("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'), + "width", G_TYPE_INT, 160, "height", G_TYPE_INT, 90, + "framerate", GST_TYPE_FRACTION, 15, 1, NULL); + buffer = _buffer_from_file (VALID_H264_YUY2_MJPG_FILENAME); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (g_file_get_contents (VALID_H264_YUY2_H264_FILENAME, + &h264_data, &h264_size, NULL)); + fail_unless (g_file_get_contents (VALID_H264_YUY2_YUY2_FILENAME, + &yuy2_data, &yuy2_size, NULL)); + + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos); + fail_unless (have_yuy2_eos); + fail_unless (have_nv12_eos); + fail_unless (have_jpg_eos); + fail_unless (buffer_h264 != NULL); + fail_unless (buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL); + fail_unless (buffer_yuy2 != NULL); + fail_unless (gerror == NULL && error_debug == NULL); + fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_h264), + h264_caps)); + fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_yuy2), + yuy2_caps)); + fail_unless (GST_BUFFER_SIZE (buffer_h264) == h264_size); + fail_unless (GST_BUFFER_SIZE (buffer_yuy2) == yuy2_size); + fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data, + h264_size) == 0); + fail_unless (memcmp (GST_BUFFER_DATA (buffer_yuy2), yuy2_data, + yuy2_size) == 0); + + gst_caps_unref (mjpg_caps); + gst_caps_unref (yuy2_caps); + gst_caps_unref (h264_caps); + g_free (h264_data); + g_free (yuy2_data); + gst_buffer_unref (buffer_h264); + gst_buffer_unref (buffer_yuy2); + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_no_data) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new (); + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg != NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror == NULL && error_debug == NULL); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_data_zero) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memset (GST_BUFFER_DATA (buffer), 0, 1024); + GST_BUFFER_SIZE (buffer) = 1024; + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_no_marker_size) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Not enough data to read marker size", + strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_not_enough_data) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0xff, 0x00, 0x00 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Not enough data to read marker content", + strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_no_aux_header) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x02, 0x00, 0x00, + 0xff, 0xd9 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Not enough data to read aux header", strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_empty_aux_data) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x1C, 0x00, 0x01, + 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07, + 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00, + 0x40, 0x62, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xd9 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror == NULL); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_unknown_fcc) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x2C, 0x00, 0x01, + 0x16, 0x00, 0x48, 0x30, 0x30, 0x30, 0x80, 0x07, + 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00, + 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xd9 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Unknown auxiliary stream format : H000", + strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_not_enough_aux_data) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x1C, 0x00, 0x01, + 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07, + 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00, + 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00, + 0xff, 0xd9 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Incomplete auxiliary stream. 16 bytes missing", + strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +GST_START_TEST (test_too_much_aux_data) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x3C, 0x00, 0x01, + 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07, + 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00, + 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xd9 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 == NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror != NULL); + fail_unless (gerror->domain == GST_STREAM_ERROR); + fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX); + fail_unless (memcmp (gerror->message, + "Expected 16 auxiliary data, got 32 bytes", + strlen (gerror->message)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + + +GST_START_TEST (test_no_sos_marker) +{ + GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template); + GstBuffer *buffer = gst_buffer_new_and_alloc (1024); + const guchar data[] = { + 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x2C, 0x00, 0x01, + 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07, + 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00, + 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xd9 + }; + const guchar h264_data[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + _setup_test (TRUE, TRUE, TRUE, TRUE); + + memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data)); + GST_BUFFER_SIZE (buffer) = sizeof (data); + gst_buffer_set_caps (buffer, mjpg_caps); + fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK); + fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ())); + + fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos); + fail_unless (buffer_h264 != NULL && buffer_jpg == NULL); + fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL); + fail_unless (gerror == NULL); + fail_unless (GST_BUFFER_SIZE (buffer_h264) == sizeof (h264_data)); + fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data, + sizeof (h264_data)) == 0); + + _teardown_test (); +} + +GST_END_TEST; + +static Suite * +uvch264demux_suite (void) +{ + Suite *s = suite_create ("uvch264demux"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_set_timeout (tc_chain, 180); + tcase_add_test (tc_chain, test_valid_h264_jpg); + tcase_add_test (tc_chain, test_valid_h264_yuy2); + tcase_add_test (tc_chain, test_no_data); + tcase_add_test (tc_chain, test_data_zero); + tcase_add_test (tc_chain, test_no_marker_size); + tcase_add_test (tc_chain, test_not_enough_data); + tcase_add_test (tc_chain, test_no_aux_header); + tcase_add_test (tc_chain, test_empty_aux_data); + tcase_add_test (tc_chain, test_unknown_fcc); + tcase_add_test (tc_chain, test_no_sos_marker); + tcase_add_test (tc_chain, test_not_enough_aux_data); + tcase_add_test (tc_chain, test_too_much_aux_data); + + return s; +} + +GST_CHECK_MAIN (uvch264demux); diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264 b/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264 Binary files differnew file mode 100644 index 00000000..f57e002d --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264 diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg b/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg Binary files differnew file mode 100644 index 00000000..e23067b9 --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg b/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg Binary files differnew file mode 100644 index 00000000..f36b514a --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264 b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264 Binary files differnew file mode 100644 index 00000000..ae68b8b6 --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264 diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg Binary files differnew file mode 100644 index 00000000..c59e7088 --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2 b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2 new file mode 100644 index 00000000..b6288913 --- /dev/null +++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2 @@ -0,0 +1 @@ + !!!! ! ##"!"#"#!""""!"$##$#"$$#%$"#$"%#"##$"""%#%!"%""##"#" # "!!!!"!"!%~~~ ! !! !! !#!!!"!####""!#""$"$#!#"$#%$~##"" "!"!""! !!"!#!!! ""|!! !!!" "!!""!#!!! "!~$"$"""!#$""##%#$!#$!" "~ #!#! ! !~!"! ! " } ! ! !! ! "!! ! !""%! """""#"$! ##$""""$""$""!"" ! ! ! !!! "! ! ! ~ ! ! ! ! ~!! "###"!!" !""!"""!"&$!"!"# !! ! " !! !~!! ~ !!!!" ! "! !! ! !"! !"!!"!""#""$#""""$""$##%#"##%#"! ""#"" " " ! ~ ""##!##""$#"!"##""!##"!"#"!!!! !!""!""!$"#$#"#$$###"!$%$%&&%(~'+&$%""## !! "!" ~ !! "~ "#"$%$&%%$%%(%%$%%'%%%%&%%&#%$$%%$~#&(%$%&$%&'~('(.~3?EU|cs ~ "!#$""%%%'&'&'(,+,1~589;ADRT~Yd~kv}}}~(%%%$"###"!$#! " "! " !"!! ~ "}%*{-1{=D|NQ{Xazfmzrwzx}z}}}|||}}~}~~~~~~~$#""!# !!!~!"! ! !!hxxxyzzz{z|z}}}}}}~~}~}~~~~~~&$ ! ! " ! \x}z{zzyz|{~}}}}|}~~~~~~~~#""! ! "! ! ~ Hv}x|z{y|||~{~~~~}}~~}~~$"#" "!! " 7||zzzy}}{~|~}|~|~~}~}~~~~$#!~ | ~# ~%}{|zz{z~|||}}}}~}|~~~~~~~~~!!! !$ }yzzz|{}}}~~}}}}~}~}~~~~#!!! " wzy{|{{{{||}~||}}~~~~?|97v7:v{~|"" ! k~{zz{z|~|}~}}~~~}|}}j46w35v53t26x|! ~" W|{zz{|{|}~||~}~~~~~~}~~~~6}27wfizfhyT2~1lx~~!A|y~{{{||}}~~|}}}}~|}|~}}~}?4w9hyggvhh{jdw<4x{~} !~-{x~|}{||||~~|}|}~}|~}~~}40x_^yfjzghyhf|e:y/v~p #yy}z{}|{~}}}}~~~~~}~~~~21ybguhf|hdwhgshey/Twfw{{{z|{~|~~}~}}}}}~~~~40wccxhhzee|egxffz<5w~_ k}{}{{}}{}}|}}~~|~~~:1ydbygfxegyegwhhzX1zS _z{~zz{|{}|~}}~}~}~~~~.Mfsegzedyef|fhx^0z6}6yJ~~Ny{~y}z{{}}~}~}~~}82fwgcyae|ff{dgxP.sJfzC>uC~;|{}{z||}||}}~~}~~~}}|~}15va_zgcyaf{fe{.8x:cs9Su9~*}z}z{z}||}}~~}~~|}}}}~~~).f}_YvxdIy/dzjt~0~x}{~{}z|z}}}~~}}}~}~~~~~~~//z6JxQIs0-x-y(s|{}|}}}||~}}~}~}~|}~}}~~~C/z/,x0-y/{PeNz~"~lz}}|~|z||}|z}}~~|~|}~}}~~~].ezWcxfby~~~Wxz{{||p~A|28{h{}|}~0*}U~R1y3_z|~~~5{29y~~~~~w:R{M<|w~,cxgFw~>zz|}{z|P*)|(+|+0|z{}}}.-z,z;-y,N~~~2~11{y~~\M^{PFA{2+.}-/w:wA`]te[x->vr-)]z)u|{}}{}|)&(|Z~.+,|^|}}PA|W~|,*~+}{I,|-=|~5.}.1{D{0/2}B.|.7w1-z.0y/{y0,-{+)w+*z1,w.1x]`bygb{1t~/ s{x|{{~}(&'{z|Q**{6c*v)){*+|`*(z*j|b*|+3{}1+*{0,|0My.A,xm/-.z3.,x,,.z~-*+~(&x*(y~)(+yYbbwd\~u.J<~~pzu{{{~}*&'|kzk(&{+-&|'~{+*)*(z+X}{(y)-z**1z+*1y~,-+z},,+}.-,y},,,x-**x))w++z~,'+z};ZawTDyX\|f\}^azG~k{z|{|}}{.'%}S}{')~)|*(|(}{)*|(xz>&q'G}(+)y~+*0}**+z}++*|~7,-|,+,}~.+)y1))zJ~~7(y),ylBu~-dzfCy6`|~]wzy}~|||5'&}@}{**z(n3'x*d{V'o(6}~+)*y~X))|),y~/*,{}X+,{~.,/x/**x1,)w~/)y*-z*/w~6bz3uRA}G~}~Jyu{{|~z}~}N'%|1{|6'{(Z}B&{'Ryt'y(*~}((){p)'z/+~)+{/++{w~/4+yz2,*y~2)*y6,+x\('x8+,w}w2-u~}2|y{z~}z{g&'|*~.%{(c}N&}'F}d'{&>{)'(|)*(z}:)'z*(+z6**|o1Z,q4,)xs2*,y:+)yM((z:++v~~}#~xz{|{{|}{x%%}'}4&}(P}e%}&5}v({'2y~)))y.)*zx}B))|}*)+{|B*+}dj@9{lY2.~f3|+.x~N,Cyw9,yM2|-+v~~rz{||{}~z}%%}%t}:${)P~~&&+||&~(8z}*,({}5+*|a\))y8+~*){6.}+-}:mz1,yy~-+~/+z*8yB)'yo*'y)6z+-z}~mr}y{z{}{|L%{&%~%%|&p||7(({*'|(p~**){~D+*|L-*|,D|-,x.-~/1|Um~FU|V@E}v}~~}~~~gw|z{{|~}}~|Q&'|%*}f}{a}/-?w}}y~}~~~}~~~~}~~~~}~~~~Su|wxzz||~~|~||}}}|~~~~~}~6uzxz||{~~||}||}|}~}}~~~~~}K~u}~eXD|~~}#u{wx||~{{|z}{|^`_~^}v}\`sQk~\\|qzi~~M~Ldl~m[S}SlUY]z~r}v{y{}|}~}|{|{{d}U>~~}Uym~F}N~}imR~~a}zs_K{zbqz|O`eRWw~pnzxy|{|z~{{||~{t}NU{|t~\x_|~WYyj_~hPifu~}c~~~~cgyxx}z{{|}|}~{|Egx|fm}}|}}}}~~}~~~~~~~~~UXxuxxyz}z{}z{zz}|~{}~}}}}|~~}~~~~p}<>2*#~B|twzyzz}||}{}{|~{||}||~|~}~~}~~~~~~~~~~~u|1|rwzyz|{{{~~z}{{}|{}}}|}}~}~~~~~~~~}%ru{yy{x{||}|}~|}~}}|}}~~~|~~us~K~~oT\|~~~~y| pt}wy{y{{|{~~~|{~|}}}}~~vhz~^R~]F{Nk}ap}<6~@M}Wmmo]|myU[}~~~juzvw|z{y|{{}}~~}|||~~|}}=AzA8}{D~`U|gy{m_@@|JCoyMutel}~~v|dqzuxzxz{z|~|}{}|~~||||~|{~}~}~x~~~~~~~|}Os|uuzxw{xz{{}}}~{}~~{|}~~~~|}~~~~}}~~~z|5q|utyuv{wy|{{|{}|}z~||~|}}||~}~~~~~~~~~~{}"p{rtyuwzwvzzz{|}|}}{}{~{|}{|||~}}~~~}}~~}}~~l|mzqqytu|uw|yz{{{|}|z}~|}~{}||z{}~~~~}}}~}|~~}~~~~|zw~pk_4iupq|qs{uuyvx{xzy{{{|}{~||~}{|}||{~|}||||zy~}|~|{|~xr}ul|d^SMFB950,'$$\ymnzqqzqrzss}uu|uu|tuyrtyqm|jc}a\|PH<5.&&~'0.~)(&" ~
\ No newline at end of file diff --git a/tests/check/libs/mpegvideoparser.c b/tests/check/libs/mpegvideoparser.c index f598dd7e..f80d1f84 100644 --- a/tests/check/libs/mpegvideoparser.c +++ b/tests/check/libs/mpegvideoparser.c @@ -102,8 +102,8 @@ GST_START_TEST (test_mpeg_parse_sequence_header) assert_equals_int (seqhdr.width, 1920); assert_equals_int (seqhdr.height, 1080); assert_equals_int (seqhdr.aspect_ratio_info, 3); - assert_equals_int (seqhdr.par_w, 17280); - assert_equals_int (seqhdr.par_h, 17280); + assert_equals_int (seqhdr.par_w, 64); + assert_equals_int (seqhdr.par_h, 45); assert_equals_int (seqhdr.frame_rate_code, 7); assert_equals_int (seqhdr.fps_n, 60000); assert_equals_int (seqhdr.fps_d, 1001); diff --git a/tests/check/pipelines/mxf.c b/tests/check/pipelines/mxf.c index 230eb3ae..1be63b13 100644 --- a/tests/check/pipelines/mxf.c +++ b/tests/check/pipelines/mxf.c @@ -269,6 +269,11 @@ mxf_suite (void) suite_add_tcase (s, tc_chain); tcase_set_timeout (tc_chain, 180); + /* FIXME: remove again once ported */ + if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1, + 0, 0)) + return s; + tcase_add_test (tc_chain, test_mpeg2); tcase_add_test (tc_chain, test_raw_video_raw_audio); tcase_add_test (tc_chain, test_raw_video_stride_transform); diff --git a/tests/check/pipelines/streamheader.c b/tests/check/pipelines/streamheader.c new file mode 100644 index 00000000..02e72ed7 --- /dev/null +++ b/tests/check/pipelines/streamheader.c @@ -0,0 +1,279 @@ +/* GStreamer + * + * unit test for streamheader handling + * + * Copyright (C) 2007 Thomas Vander Stichele <thomas at apestaart dot 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. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <glib.h> + +#ifdef G_OS_WIN32 +#include <stdlib.h> +#include <stdio.h> +#include <io.h> +#include <fcntl.h> +#define pipe(fds) _pipe(fds,4096,O_BINARY) +#else +#include <unistd.h> +#endif + +#include <gio/gio.h> +#include <gst/check/gstcheck.h> +#include <gst/check/gstbufferstraw.h> + +#ifndef GST_DISABLE_PARSE + +/* this tests a gdp-serialized tag from audiotestsrc being sent only once + * to clients of multifdsink */ + +static int n_tags = 0; + +static GstPadProbeReturn +tag_event_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) +{ + GMainLoop *loop = user_data; + GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info); + + switch (GST_EVENT_TYPE (event)) { + case GST_EVENT_TAG: + { + ++n_tags; + fail_if (n_tags > 1, "More than 1 tag received"); + break; + } + case GST_EVENT_EOS: + { + g_main_loop_quit (loop); + break; + } + default: + break; + } + + return GST_PAD_PROBE_OK; +} + +GST_START_TEST (test_multifdsink_gdp_tag) +{ + GstElement *p1, *p2; + GstElement *src, *sink, *depay; + GstPad *pad; + GMainLoop *loop; + int pfd[2]; + + loop = g_main_loop_new (NULL, FALSE); + + p1 = gst_parse_launch ("audiotestsrc num-buffers=10 ! gdppay" + " ! multifdsink name=p1sink", NULL); + fail_if (p1 == NULL); + p2 = gst_parse_launch ("fdsrc name=p2src ! gdpdepay name=depay" + " ! fakesink name=p2sink signal-handoffs=True", NULL); + fail_if (p2 == NULL); + + fail_if (pipe (pfd) == -1); + + gst_element_set_state (p1, GST_STATE_READY); + + sink = gst_bin_get_by_name (GST_BIN (p1), "p1sink"); + g_signal_emit_by_name (sink, "add", pfd[1], NULL); ///s[1] + gst_object_unref (sink); + + src = gst_bin_get_by_name (GST_BIN (p2), "p2src"); + g_object_set (G_OBJECT (src), "fd", pfd[0], NULL); + gst_object_unref (src); + + depay = gst_bin_get_by_name (GST_BIN (p2), "depay"); + fail_if (depay == NULL); + + pad = gst_element_get_static_pad (depay, "src"); + fail_unless (pad != NULL, "Could not get pad out of depay"); + gst_object_unref (depay); + + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, + tag_event_probe_cb, loop, NULL); + + gst_element_set_state (p1, GST_STATE_PLAYING); + gst_element_set_state (p2, GST_STATE_PLAYING); + + g_main_loop_run (loop); + + assert_equals_int (n_tags, 1); + + gst_element_set_state (p1, GST_STATE_NULL); + gst_object_unref (p1); + gst_element_set_state (p2, GST_STATE_NULL); + gst_object_unref (p2); +} + +GST_END_TEST; + +#ifdef HAVE_VORBIS +/* this tests gdp-serialized Vorbis header pages being sent only once + * to clients of multifdsink; the gdp depayloader should deserialize + * exactly three in_caps buffers for the three header packets */ + +static int n_in_caps = 0; + +static GstPadProbeReturn +buffer_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data) +{ + GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info); + GstMapInfo map; + + gst_buffer_map (buffer, &map, GST_MAP_READ); + + if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_HEADER)) { + GstCaps *caps; + GstStructure *s; + const GValue *sh; + GArray *buffers; + GstBuffer *buf; + int i; + gboolean found = FALSE; + + n_in_caps++; + + caps = gst_pad_get_current_caps (pad); + s = gst_caps_get_structure (caps, 0); + fail_unless (gst_structure_has_field (s, "streamheader")); + sh = gst_structure_get_value (s, "streamheader"); + buffers = g_value_peek_pointer (sh); + assert_equals_int (buffers->len, 3); + + for (i = 0; i < 3; ++i) { + GValue *val; + GstMapInfo map2; + + val = &g_array_index (buffers, GValue, i); + buf = g_value_peek_pointer (val); + fail_unless (GST_IS_BUFFER (buf)); + + gst_buffer_map (buf, &map2, GST_MAP_READ); + if (map2.size == map.size) { + if (memcmp (map2.data, map.data, map.size) == 0) { + found = TRUE; + } + } + gst_buffer_unmap (buf, &map2); + } + fail_unless (found, "Did not find incoming HEADER buffer %p on caps", + buffer); + + gst_caps_unref (caps); + } + gst_buffer_unmap (buffer, &map); + + return TRUE; +} + +GST_START_TEST (test_multifdsink_gdp_vorbisenc) +{ + GstElement *p1, *p2; + GstElement *src, *sink, *depay; + GstPad *pad; + GMainLoop *loop; + int pfd[2]; + + loop = g_main_loop_new (NULL, FALSE); + + p1 = gst_parse_launch ("audiotestsrc num-buffers=10 ! audioconvert " + " ! vorbisenc ! gdppay ! multifdsink name=p1sink", NULL); + fail_if (p1 == NULL); + p2 = gst_parse_launch ("fdsrc name=p2src ! gdpdepay name=depay" + " ! fakesink name=p2sink signal-handoffs=True", NULL); + fail_if (p2 == NULL); + + fail_if (pipe (pfd) == -1); + + gst_element_set_state (p1, GST_STATE_READY); + + sink = gst_bin_get_by_name (GST_BIN (p1), "p1sink"); + g_signal_emit_by_name (sink, "add", pfd[1], NULL); + gst_object_unref (sink); + + src = gst_bin_get_by_name (GST_BIN (p2), "p2src"); + g_object_set (G_OBJECT (src), "fd", pfd[0], NULL); + gst_object_unref (src); + + depay = gst_bin_get_by_name (GST_BIN (p2), "depay"); + fail_if (depay == NULL); + + pad = gst_element_get_static_pad (depay, "src"); + fail_unless (pad != NULL, "Could not get pad out of depay"); + gst_object_unref (depay); + + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, + tag_event_probe_cb, loop, NULL); + gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_probe_cb, NULL, + NULL); + + gst_element_set_state (p1, GST_STATE_PLAYING); + gst_element_set_state (p2, GST_STATE_PLAYING); + + g_main_loop_run (loop); + + assert_equals_int (n_in_caps, 3); + + gst_element_set_state (p1, GST_STATE_NULL); + gst_object_unref (p1); + gst_element_set_state (p2, GST_STATE_NULL); + gst_object_unref (p2); +} + +GST_END_TEST; +#endif /* HAVE_VORBIS */ + +#endif /* #ifndef GST_DISABLE_PARSE */ + +static Suite * +streamheader_suite (void) +{ + Suite *s = suite_create ("streamheader"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); +#ifndef GST_DISABLE_PARSE + tcase_add_test (tc_chain, test_multifdsink_gdp_tag); +#ifdef HAVE_VORBIS + tcase_add_test (tc_chain, test_multifdsink_gdp_vorbisenc); +#endif +#endif + + return s; +} + +int +main (int argc, char **argv) +{ + int nf; + + Suite *s = streamheader_suite (); + SRunner *sr = srunner_create (s); + + gst_check_init (&argc, &argv); + + srunner_run_all (sr, CK_NORMAL); + nf = srunner_ntests_failed (sr); + srunner_free (sr); + + return nf; +} diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am index eef73e6c..d166a660 100644 --- a/tests/examples/Makefile.am +++ b/tests/examples/Makefile.am @@ -1,5 +1,11 @@ +if USE_UVCH264 +UVCH264_DIR=uvch264 +else +UVCH264_DIR= +endif + if HAVE_GTK -GTK_EXAMPLES=mxf scaletempo camerabin2 +GTK_EXAMPLES=mxf scaletempo camerabin2 $(UVCH264_DIR) else GTK_EXAMPLES= endif @@ -13,6 +19,6 @@ endif OPENCV_EXAMPLES=opencv SUBDIRS= $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES) -DIST_SUBDIRS= camerabin2 directfb mxf scaletempo opencv +DIST_SUBDIRS= camerabin2 directfb mxf scaletempo opencv uvch264 include $(top_srcdir)/common/parallel-subdirs.mak diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in index f75fb23b..89166b90 100644 --- a/tests/examples/Makefile.in +++ b/tests/examples/Makefile.in @@ -319,6 +319,8 @@ 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@ @@ -326,6 +328,8 @@ 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@ @@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -368,6 +371,10 @@ 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@ @@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ @@ -580,13 +588,15 @@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ +@USE_UVCH264_FALSE@UVCH264_DIR = +@USE_UVCH264_TRUE@UVCH264_DIR = uvch264 @HAVE_GTK_FALSE@GTK_EXAMPLES = -@HAVE_GTK_TRUE@GTK_EXAMPLES = mxf scaletempo camerabin2 +@HAVE_GTK_TRUE@GTK_EXAMPLES = mxf scaletempo camerabin2 $(UVCH264_DIR) @USE_DIRECTFB_FALSE@DIRECTFB_DIR = @USE_DIRECTFB_TRUE@DIRECTFB_DIR = directfb OPENCV_EXAMPLES = opencv SUBDIRS = $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES) -DIST_SUBDIRS = camerabin2 directfb mxf scaletempo opencv +DIST_SUBDIRS = camerabin2 directfb mxf scaletempo opencv uvch264 all: all-recursive .SUFFIXES: diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in index fed26c78..651453d7 100644 --- a/tests/examples/camerabin2/Makefile.in +++ b/tests/examples/camerabin2/Makefile.in @@ -328,6 +328,8 @@ 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@ @@ -335,6 +337,8 @@ 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@ @@ -349,7 +353,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -377,6 +380,10 @@ 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@ @@ -503,6 +510,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/examples/camerabin2/gst-camerabin2-test.c b/tests/examples/camerabin2/gst-camerabin2-test.c index e5ad385a..00b9fa25 100644 --- a/tests/examples/camerabin2/gst-camerabin2-test.c +++ b/tests/examples/camerabin2/gst-camerabin2-test.c @@ -853,17 +853,15 @@ static void set_metadata (GstElement * camera) { GstTagSetter *setter = GST_TAG_SETTER (camera); - GTimeVal time = { 0, 0 }; + GstDateTime *datetime; gchar *desc_str; - GDate *date = g_date_new (); - g_get_current_time (&time); - g_date_set_time_val (date, &time); + datetime = gst_date_time_new_now_local_time (); desc_str = g_strdup_printf ("captured by %s", g_get_real_name ()); gst_tag_setter_add_tags (setter, GST_TAG_MERGE_REPLACE, - GST_TAG_DATE, date, + GST_TAG_DATE_TIME, datetime, GST_TAG_DESCRIPTION, desc_str, GST_TAG_TITLE, "gst-camerabin-test capture", GST_TAG_GEO_LOCATION_LONGITUDE, 1.0, @@ -873,7 +871,7 @@ set_metadata (GstElement * camera) GST_TAG_DEVICE_MODEL, "gst-camerabin-test model", NULL); g_free (desc_str); - g_date_free (date); + gst_date_time_unref (datetime); } static gboolean diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in index 62dad588..24f26673 100644 --- a/tests/examples/directfb/Makefile.in +++ b/tests/examples/directfb/Makefile.in @@ -308,6 +308,8 @@ 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@ @@ -315,6 +317,8 @@ 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@ @@ -329,7 +333,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -357,6 +360,10 @@ 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@ @@ -483,6 +490,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in index cc439ff0..3b0ed266 100644 --- a/tests/examples/mxf/Makefile.in +++ b/tests/examples/mxf/Makefile.in @@ -313,6 +313,8 @@ 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@ @@ -320,6 +322,8 @@ 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@ @@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -362,6 +365,10 @@ 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@ @@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in index 3741f17c..a9a5c8f0 100644 --- a/tests/examples/opencv/Makefile.in +++ b/tests/examples/opencv/Makefile.in @@ -314,6 +314,8 @@ 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@ @@ -321,6 +323,8 @@ 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@ @@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -363,6 +366,10 @@ 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@ @@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/examples/scaletempo/Makefile.in b/tests/examples/scaletempo/Makefile.in index 346adf74..d9edc9e0 100644 --- a/tests/examples/scaletempo/Makefile.in +++ b/tests/examples/scaletempo/Makefile.in @@ -316,6 +316,8 @@ 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@ @@ -323,6 +325,8 @@ 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@ @@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -365,6 +368,10 @@ 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@ @@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/examples/uvch264/Makefile.am b/tests/examples/uvch264/Makefile.am new file mode 100644 index 00000000..e02b8882 --- /dev/null +++ b/tests/examples/uvch264/Makefile.am @@ -0,0 +1,36 @@ +TEST_UVCH264_GLADE_FILES = window.glade \ + boolean_property.glade \ + enum_property.glade \ + int_property.glade + +if HAVE_GTK + +TEST_UVCH264_EXAMPLES = test-uvch264 + +test_uvch264_SOURCES = test-uvch264.c +test_uvch264_CFLAGS = \ + $(GST_PLUGINS_BAD_CFLAGS) \ + $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_VIDEO_CFLAGS) \ + $(GST_CFLAGS) \ + $(GTK_CFLAGS) \ + $(GMODULE_EXPORT_CFLAGS) \ + -DGST_USE_UNSTABLE_API +test_uvch264_LDADD = \ + $(GST_PLUGINS_BASE_LIBS) \ + $(GST_VIDEO_LIBS) \ + $(GST_LIBS) \ + -lgstinterfaces-@GST_MAJORMINOR@ \ + $(GTK_LIBS) \ + $(GMODULE_EXPORT_LIBS) + +noinst_DATA = $(TEST_UVCH264_GLADE_FILES) + +else +TEST_UVCH264_EXAMPLES = +endif + +noinst_PROGRAMS = $(TEST_UVCH264_EXAMPLES) + +EXTRA_DIST = $(TEST_UVCH264_GLADE_FILES) + diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in new file mode 100644 index 00000000..a8215f9a --- /dev/null +++ b/tests/examples/uvch264/Makefile.in @@ -0,0 +1,916 @@ +# 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@ +noinst_PROGRAMS = $(am__EXEEXT_1) +subdir = tests/examples/uvch264 +DIST_COMMON = $(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 = +@HAVE_GTK_TRUE@am__EXEEXT_1 = test-uvch264$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__test_uvch264_SOURCES_DIST = test-uvch264.c +@HAVE_GTK_TRUE@am_test_uvch264_OBJECTS = \ +@HAVE_GTK_TRUE@ test_uvch264-test-uvch264.$(OBJEXT) +test_uvch264_OBJECTS = $(am_test_uvch264_OBJECTS) +am__DEPENDENCIES_1 = +@HAVE_GTK_TRUE@test_uvch264_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@HAVE_GTK_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +@HAVE_GTK_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +test_uvch264_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_uvch264_CFLAGS) \ + $(CFLAGS) $(AM_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 = $(test_uvch264_SOURCES) +DIST_SOURCES = $(am__test_uvch264_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(noinst_DATA) +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@ +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@ +VPX_CFLAGS = @VPX_CFLAGS@ +VPX_LIBS = @VPX_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@ +TEST_UVCH264_GLADE_FILES = window.glade \ + boolean_property.glade \ + enum_property.glade \ + int_property.glade + +@HAVE_GTK_FALSE@TEST_UVCH264_EXAMPLES = +@HAVE_GTK_TRUE@TEST_UVCH264_EXAMPLES = test-uvch264 +@HAVE_GTK_TRUE@test_uvch264_SOURCES = test-uvch264.c +@HAVE_GTK_TRUE@test_uvch264_CFLAGS = \ +@HAVE_GTK_TRUE@ $(GST_PLUGINS_BAD_CFLAGS) \ +@HAVE_GTK_TRUE@ $(GST_PLUGINS_BASE_CFLAGS) \ +@HAVE_GTK_TRUE@ $(GST_VIDEO_CFLAGS) \ +@HAVE_GTK_TRUE@ $(GST_CFLAGS) \ +@HAVE_GTK_TRUE@ $(GTK_CFLAGS) \ +@HAVE_GTK_TRUE@ $(GMODULE_EXPORT_CFLAGS) \ +@HAVE_GTK_TRUE@ -DGST_USE_UNSTABLE_API + +@HAVE_GTK_TRUE@test_uvch264_LDADD = \ +@HAVE_GTK_TRUE@ $(GST_PLUGINS_BASE_LIBS) \ +@HAVE_GTK_TRUE@ $(GST_VIDEO_LIBS) \ +@HAVE_GTK_TRUE@ $(GST_LIBS) \ +@HAVE_GTK_TRUE@ -lgstinterfaces-@GST_MAJORMINOR@ \ +@HAVE_GTK_TRUE@ $(GTK_LIBS) \ +@HAVE_GTK_TRUE@ $(GMODULE_EXPORT_LIBS) + +@HAVE_GTK_TRUE@noinst_DATA = $(TEST_UVCH264_GLADE_FILES) +EXTRA_DIST = $(TEST_UVCH264_GLADE_FILES) +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 tests/examples/uvch264/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu tests/examples/uvch264/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): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +test-uvch264$(EXEEXT): $(test_uvch264_OBJECTS) $(test_uvch264_DEPENDENCIES) $(EXTRA_test_uvch264_DEPENDENCIES) + @rm -f test-uvch264$(EXEEXT) + $(AM_V_CCLD)$(test_uvch264_LINK) $(test_uvch264_OBJECTS) $(test_uvch264_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_uvch264-test-uvch264.Po@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 $@ $< + +test_uvch264-test-uvch264.o: test-uvch264.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uvch264_CFLAGS) $(CFLAGS) -MT test_uvch264-test-uvch264.o -MD -MP -MF $(DEPDIR)/test_uvch264-test-uvch264.Tpo -c -o test_uvch264-test-uvch264.o `test -f 'test-uvch264.c' || echo '$(srcdir)/'`test-uvch264.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uvch264-test-uvch264.Tpo $(DEPDIR)/test_uvch264-test-uvch264.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-uvch264.c' object='test_uvch264-test-uvch264.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) $(test_uvch264_CFLAGS) $(CFLAGS) -c -o test_uvch264-test-uvch264.o `test -f 'test-uvch264.c' || echo '$(srcdir)/'`test-uvch264.c + +test_uvch264-test-uvch264.obj: test-uvch264.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uvch264_CFLAGS) $(CFLAGS) -MT test_uvch264-test-uvch264.obj -MD -MP -MF $(DEPDIR)/test_uvch264-test-uvch264.Tpo -c -o test_uvch264-test-uvch264.obj `if test -f 'test-uvch264.c'; then $(CYGPATH_W) 'test-uvch264.c'; else $(CYGPATH_W) '$(srcdir)/test-uvch264.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uvch264-test-uvch264.Tpo $(DEPDIR)/test_uvch264-test-uvch264.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-uvch264.c' object='test_uvch264-test-uvch264.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) $(test_uvch264_CFLAGS) $(CFLAGS) -c -o test_uvch264-test-uvch264.obj `if test -f 'test-uvch264.c'; then $(CYGPATH_W) 'test-uvch264.c'; else $(CYGPATH_W) '$(srcdir)/test-uvch264.c'; fi` + +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 $(PROGRAMS) $(DATA) +installdirs: +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-noinstPROGRAMS \ + 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-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: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS 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-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 + + +# 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/tests/examples/uvch264/boolean_property.glade b/tests/examples/uvch264/boolean_property.glade new file mode 100644 index 00000000..d391a58c --- /dev/null +++ b/tests/examples/uvch264/boolean_property.glade @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkHBox" id="boolean-property"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="width_chars">18</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="value"> + <property name="label" translatable="yes"> Disabled </property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="toggled" handler="on_button_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="get"> + <property name="label" translatable="yes">Get</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_get_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="set"> + <property name="label" translatable="yes">Set</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_set_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label66"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Default</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkToggleButton" id="default"> + <property name="label" translatable="yes"> Disabled </property> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="toggled" handler="on_button_toggled" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + </object> +</interface> diff --git a/tests/examples/uvch264/enum_property.glade b/tests/examples/uvch264/enum_property.glade new file mode 100644 index 00000000..0dfb9747 --- /dev/null +++ b/tests/examples/uvch264/enum_property.glade @@ -0,0 +1,88 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkHBox" id="enum-property"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="width_chars">18</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBoxText" id="value"> + <property name="visible">True</property> + <property name="can_focus">False</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="get"> + <property name="label" translatable="yes">Get</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_get_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="set"> + <property name="label" translatable="yes">Set</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_set_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label72"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Default</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="default"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="invisible_char_set">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + </object> +</interface> diff --git a/tests/examples/uvch264/int_property.glade b/tests/examples/uvch264/int_property.glade new file mode 100644 index 00000000..422ce1cd --- /dev/null +++ b/tests/examples/uvch264/int_property.glade @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkHBox" id="int-property"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="width_chars">18</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="value"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">10</property> + <property name="invisible_char_set">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="get"> + <property name="label" translatable="yes">Get</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_get_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="set"> + <property name="label" translatable="yes">Set</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_set_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Minimum</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="minimum"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">10</property> + <property name="invisible_char_set">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Default</property> + <property name="width_chars">8</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">6</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="default"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">10</property> + <property name="invisible_char_set">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">7</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Maximum</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">8</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="maximum"> + <property name="visible">True</property> + <property name="sensitive">False</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="width_chars">10</property> + <property name="invisible_char_set">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">9</property> + </packing> + </child> + </object> +</interface> diff --git a/tests/examples/uvch264/test-uvch264.c b/tests/examples/uvch264/test-uvch264.c new file mode 100644 index 00000000..78d8ac11 --- /dev/null +++ b/tests/examples/uvch264/test-uvch264.c @@ -0,0 +1,673 @@ +#include <gst/gst.h> +#include <gtk/gtk.h> +#include <gdk/gdkx.h> +#include <gst/interfaces/xoverlay.h> +#include <gst/video/video.h> + +#define WINDOW_GLADE "window.glade" +#define INT_PROPERTY_GLADE "int_property.glade" +#define ENUM_PROPERTY_GLADE "enum_property.glade" +#define BOOL_PROPERTY_GLADE "boolean_property.glade" + +#define PROPERTY_TO_VBOX \ + properties[i].dynamic ? GTK_BOX (dynamic_vbox) : GTK_BOX (static_vbox) + +#define GET_WIDGET(object, type, name) \ + type (gtk_builder_get_object ((object)->builder, name)) + +#define GET_PROP_WIDGET(type, name) GET_WIDGET (&(properties[i]), type, name) + +static guint h264_xid, preview_xid; + +typedef struct +{ + GtkBuilder *builder; + GstElement *src; + enum + { NONE, INT, ENUM, BOOL } type; + const gchar *property_name; + gboolean readonly; + gboolean dynamic; +} Prop; + +typedef struct +{ + GtkBuilder *builder; + GstElement *bin; + GstElement *src; + GstElement *identity; + GstElement *vid_capsfilter; + GstElement *vf_capsfilter; +} Main; + +Prop properties[] = { + {NULL, NULL, INT, "initial-bitrate", FALSE, FALSE}, + {NULL, NULL, INT, "slice-units", FALSE, FALSE}, + {NULL, NULL, ENUM, "slice-mode", FALSE, FALSE}, + {NULL, NULL, INT, "iframe-period", FALSE, FALSE}, + {NULL, NULL, ENUM, "usage-type", FALSE, FALSE}, + {NULL, NULL, ENUM, "entropy", FALSE, FALSE}, + {NULL, NULL, BOOL, "enable-sei", FALSE, FALSE}, + {NULL, NULL, INT, "num-reorder-frames", FALSE, FALSE}, + {NULL, NULL, BOOL, "preview-flipped", FALSE, FALSE}, + {NULL, NULL, INT, "leaky-bucket-size", FALSE, FALSE}, + {NULL, NULL, INT, "num-clock-samples", FALSE, TRUE}, + {NULL, NULL, ENUM, "rate-control", FALSE, TRUE}, + {NULL, NULL, BOOL, "fixed-framerate", FALSE, TRUE}, + {NULL, NULL, INT, "max-mbps", TRUE, TRUE}, + {NULL, NULL, INT, "level-idc", FALSE, TRUE}, + {NULL, NULL, INT, "peak-bitrate", FALSE, TRUE}, + {NULL, NULL, INT, "average-bitrate", FALSE, TRUE}, + {NULL, NULL, INT, "min-iframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "max-iframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "min-pframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "max-pframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "min-bframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "max-bframe-qp", FALSE, TRUE}, + {NULL, NULL, INT, "ltr-buffer-size", FALSE, TRUE}, + {NULL, NULL, INT, "ltr-encoder-control", FALSE, TRUE}, +}; + +static void set_drop_probability (Main * self); +static void get_all_properties (void); +static void probe_all_properties (gboolean playing); + +/* Callbacks */ +void on_button_toggled (GtkToggleButton * button, gpointer user_data); +void on_get_button_clicked (GtkButton * button, gpointer user_data); +void on_set_button_clicked (GtkButton * button, gpointer user_data); +void on_button_ready_clicked (GtkButton * button, gpointer user_data); +void on_button_null_clicked (GtkButton * button, gpointer user_data); +void on_button_playing_clicked (GtkButton * button, gpointer user_data); +void on_iframe_button_clicked (GtkButton * button, gpointer user_data); +void on_renegotiate_button_clicked (GtkButton * button, gpointer user_data); +void on_start_capture_button_clicked (GtkButton * button, gpointer user_data); +void on_stop_capture_button_clicked (GtkButton * button, gpointer user_data); +void on_window_destroyed (GtkWindow * window, gpointer user_data); + +static GstEvent * +new_upstream_force_key_unit (GstClockTime running_time, + gboolean all_headers, guint count) +{ + GstEvent *force_key_unit_event; + GstStructure *s; + + s = gst_structure_new ("GstForceKeyUnit", + "running-time", GST_TYPE_CLOCK_TIME, running_time, + "all-headers", G_TYPE_BOOLEAN, all_headers, + "count", G_TYPE_UINT, count, NULL); + force_key_unit_event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, s); + + return force_key_unit_event; +} + +void +on_get_button_clicked (GtkButton * button, gpointer user_data) +{ + Prop *property = user_data; + + switch (property->type) { + case INT: + { + gchar *val; + gint val_int; + g_object_get (property->src, property->property_name, &val_int, NULL); + val = g_strdup_printf ("%d", val_int); + gtk_entry_set_text (GET_WIDGET (property, GTK_ENTRY, "value"), val); + g_free (val); + } + break; + case ENUM: + { + GParamSpec *param; + gint val; + + g_object_get (property->src, property->property_name, &val, NULL); + param = g_object_class_find_property (G_OBJECT_GET_CLASS (property->src), + property->property_name); + if (G_IS_PARAM_SPEC_ENUM (param)) { + GEnumValue *values; + guint i = 0; + + values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values; + + while (values[i].value_name) { + if (values[i].value == val) { + gtk_combo_box_set_active (GET_WIDGET (property, + (GtkComboBox *), "value"), i); + break; + } + i++; + } + } + } + break; + case BOOL: + { + gboolean val; + + g_object_get (property->src, property->property_name, &val, NULL); + gtk_toggle_button_set_active (GET_WIDGET (property, + (GtkToggleButton *), "value"), val); + } + break; + case NONE: + default: + break; + } +} + +void +on_set_button_clicked (GtkButton * button, gpointer user_data) +{ + Prop *property = user_data; + + switch (property->type) { + case INT: + { + int val_int; + const gchar *val; + + val = gtk_entry_get_text (GET_WIDGET (property, GTK_ENTRY, "value")); + val_int = (int) g_ascii_strtoll (val, NULL, 0); + g_object_set (property->src, property->property_name, val_int, NULL); + } + break; + case ENUM: + { + GParamSpec *param; + + param = g_object_class_find_property (G_OBJECT_GET_CLASS (property->src), + property->property_name); + if (G_IS_PARAM_SPEC_ENUM (param)) { + GEnumValue *values; + guint val = 0; + + values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values; + + val = gtk_combo_box_get_active (GET_WIDGET (property, + (GtkComboBox *), "value")); + g_object_set (property->src, property->property_name, + values[val].value, NULL); + } + } + break; + case BOOL: + { + gboolean val; + + val = gtk_toggle_button_get_active (GET_WIDGET (property, + (GtkToggleButton *), "value")); + g_object_set (property->src, property->property_name, val, NULL); + } + break; + case NONE: + default: + break; + } + get_all_properties (); +} + +void +on_button_toggled (GtkToggleButton * button, gpointer user_data) +{ + if (gtk_toggle_button_get_active (button)) + gtk_button_set_label (GTK_BUTTON (button), " Enabled "); + else + gtk_button_set_label (GTK_BUTTON (button), " Disabled "); +} + +static gboolean +set_caps (Main * self, gboolean send_event) +{ + const gchar *h264_filter; + const gchar *raw_filter; + GstCaps *h264_caps = NULL; + GstCaps *raw_caps = NULL; + gboolean ret = TRUE; + + h264_filter = gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "h264_caps")); + raw_filter = + gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "preview_caps")); + if (h264_filter) + h264_caps = gst_caps_from_string (h264_filter); + if (raw_filter) + raw_caps = gst_caps_from_string (raw_filter); + + g_debug ("H264 caps : %s", gst_caps_to_string (h264_caps)); + g_debug ("Preview caps : %s", gst_caps_to_string (raw_caps)); + if (!h264_caps || !raw_caps) { + g_debug ("Invalid caps"); + ret = FALSE; + goto end; + } + + g_object_set (self->vid_capsfilter, "caps", h264_caps, NULL); + g_object_set (self->vf_capsfilter, "caps", raw_caps, NULL); + + if (send_event) { + gst_element_send_event (GST_ELEMENT (self->src), + gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, + gst_structure_new ("renegotiate", NULL))); + } + +end: + if (h264_caps) + gst_caps_unref (h264_caps); + if (raw_caps) + gst_caps_unref (raw_caps); + + return ret; +} + +void +on_button_ready_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + set_caps (self, FALSE); + gst_element_set_state (self->bin, GST_STATE_READY); + probe_all_properties (FALSE); + get_all_properties (); +} + +void +on_button_null_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + gst_element_set_state (self->bin, GST_STATE_NULL); + probe_all_properties (FALSE); + get_all_properties (); +} + +void +on_button_playing_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + if (gst_element_set_state (self->bin, GST_STATE_PLAYING) == + GST_STATE_CHANGE_FAILURE) { + g_debug ("Unable to go to state PLAYING"); + } + set_caps (self, FALSE); + probe_all_properties (TRUE); + get_all_properties (); + + set_drop_probability (self); +} + +void +on_iframe_button_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + GstEvent *event; + gboolean pps_sps; + + set_drop_probability (self); + pps_sps = gtk_toggle_button_get_active (GET_WIDGET (self, (GtkToggleButton *), + "pps_sps")); + + event = new_upstream_force_key_unit (GST_CLOCK_TIME_NONE, pps_sps, 0); + gst_element_send_event (GST_ELEMENT (self->src), event); +} + +void +on_renegotiate_button_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + set_caps (self, TRUE); + probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED); + get_all_properties (); +} + +void +on_start_capture_button_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + set_caps (self, FALSE); + g_signal_emit_by_name (G_OBJECT (self->src), "start-capture", NULL); + probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED); + get_all_properties (); +} + +void +on_stop_capture_button_clicked (GtkButton * button, gpointer user_data) +{ + Main *self = user_data; + + set_caps (self, FALSE); + g_signal_emit_by_name (G_OBJECT (self->src), "stop-capture", NULL); + probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED); + get_all_properties (); +} + +void +on_window_destroyed (GtkWindow * window, gpointer user_data) +{ + gtk_main_quit (); +} + +static gboolean +_bus_callback (GstBus * bus, GstMessage * message, gpointer user_data) +{ + const GstStructure *s = gst_message_get_structure (message); + GstObject *source = NULL; + + if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT && + gst_structure_has_name (s, "prepare-xwindow-id")) { + source = GST_MESSAGE_SRC (message); + if (!g_strcmp0 (gst_object_get_name (source), "h264_sink")) + gst_x_overlay_set_window_handle (GST_X_OVERLAY (source), h264_xid); + else + gst_x_overlay_set_window_handle (GST_X_OVERLAY (source), preview_xid); + } + + return TRUE; +} + +static void +set_drop_probability (Main * self) +{ + const gchar *drop; + gdouble drop_probability = 0.0; + + drop = gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "drop")); + drop_probability = g_ascii_strtod (drop, NULL); + g_debug ("Setting drop probability to : %f", drop_probability); + g_object_set (self->identity, "drop-probability", drop_probability, NULL); +} + +static void +get_all_properties (void) +{ + int i; + + for (i = 0; i < G_N_ELEMENTS (properties); i++) + on_get_button_clicked (NULL, &properties[i]); + +} + +static void +probe_all_properties (gboolean playing) +{ + int i; + + for (i = 0; i < G_N_ELEMENTS (properties); i++) { + gboolean return_value, changeable, default_bool; + guint mask, minimum, maximum, default_int; + GParamSpec *param; + + /* When playing, ignore static controls */ + if (playing && !properties[i].dynamic) + continue; + + switch (properties[i].type) { + case INT: + g_signal_emit_by_name (G_OBJECT (properties[i].src), "get-int-setting", + properties[i].property_name, &minimum, &default_int, &maximum, + &return_value, NULL); + if (return_value) { + gchar *min, *def, *max; + + min = g_strdup_printf ("%d", minimum); + def = g_strdup_printf ("%d", default_int); + max = g_strdup_printf ("%d", maximum); + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "minimum"), min); + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), def); + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "maximum"), max); + g_free (min); + g_free (def); + g_free (max); + } else { + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "minimum"), ""); + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), ""); + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "maximum"), ""); + } + break; + case ENUM: + g_signal_emit_by_name (G_OBJECT (properties[i].src), "get-enum-setting", + properties[i].property_name, &mask, &default_int, &return_value, + NULL); + param = + g_object_class_find_property (G_OBJECT_GET_CLASS (properties + [i].src), properties[i].property_name); + if (G_IS_PARAM_SPEC_ENUM (param)) { + GEnumValue *values; + guint j = 0; + + values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values; + + if (return_value) { + while (values[j].value_name) { + if (values[j].value == default_int) { + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), + values[j].value_name); + break; + } + j++; + } + } else { + gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), ""); + } + + j = 0; + while (values[j].value_name) { +#if !GTK_CHECK_VERSION (2, 24, 0) + gtk_combo_box_remove_text (GET_PROP_WIDGET ((GtkComboBox *), + "value"), 0); +#else + gtk_combo_box_text_remove (GET_PROP_WIDGET ((GtkComboBoxText *), + "value"), 0); +#endif + j++; + } + + j = 0; + while (values[j].value_name) { + gchar *val; + if (return_value && (mask & (1 << values[j].value)) != 0) + val = g_strdup_printf ("**%s**", values[j].value_name); + else + val = g_strdup (values[j].value_name); + +#if !GTK_CHECK_VERSION (2, 24, 0) + gtk_combo_box_append_text (GET_PROP_WIDGET ((GtkComboBox *), + "value"), val); +#else + gtk_combo_box_text_append_text (GET_PROP_WIDGET ((GtkComboBoxText + *), "value"), val); +#endif + g_free (val); + j++; + } + } + break; + case BOOL: + g_signal_emit_by_name (G_OBJECT (properties[i].src), + "get-boolean-setting", properties[i].property_name, + &changeable, &default_bool, &return_value, NULL); + if (return_value) { + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "value"), + changeable); + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "get"), + changeable); + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), + changeable); + gtk_toggle_button_set_active (GET_PROP_WIDGET ((GtkToggleButton *), + "default"), default_bool); + } + break; + case NONE: + default: + break; + } + } +} + +int +main (int argc, char *argv[]) +{ + Main self = { NULL, NULL, NULL, NULL }; + GstBus *bus = NULL; + GtkWidget *window, *static_vbox, *dynamic_vbox, *da; + gchar *drop; + gdouble drop_probability; + GdkWindow *gdk_win = NULL; + const char *device = "/dev/video0"; + GError *error = NULL; + int i; + + gtk_init (&argc, &argv); + gst_init (&argc, &argv); + + if (argc > 1) + device = argv[1]; + else + g_print ("Usage : %s [device]\nUsing default device : %s\n", + argv[0], device); + + + self.bin = gst_parse_launch ("uvch264_src name=src src.vidsrc ! queue ! " + "capsfilter name=vid_cf ! identity name=identity ! ffdec_h264 ! " + "xvimagesink name=h264_sink async=false " + "src.vfsrc ! queue ! capsfilter name=vf_cf ! " + "xvimagesink name=preview_sink async=false", NULL); + + if (!self.bin) + return -1; + + /* Listen to the bus for messages */ + bus = gst_element_get_bus (self.bin); + gst_bus_add_watch (bus, _bus_callback, self.bin); + gst_object_unref (bus); + + self.src = gst_bin_get_by_name (GST_BIN (self.bin), "src"); + self.identity = gst_bin_get_by_name (GST_BIN (self.bin), "identity"); + self.vid_capsfilter = gst_bin_get_by_name (GST_BIN (self.bin), "vid_cf"); + self.vf_capsfilter = gst_bin_get_by_name (GST_BIN (self.bin), "vf_cf"); + + self.builder = gtk_builder_new (); + gtk_builder_add_from_file (self.builder, WINDOW_GLADE, &error); + if (error) { + g_debug ("Unable to load glade file : %s", error->message); + goto end; + } + gtk_builder_connect_signals (self.builder, &self); + + g_object_get (self.identity, "drop-probability", &drop_probability, NULL); + drop = g_strdup_printf ("%f", drop_probability); + gtk_entry_set_text (GET_WIDGET (&self, GTK_ENTRY, "drop"), drop); + g_free (drop); + window = GET_WIDGET (&self, GTK_WIDGET, "window"); + static_vbox = GET_WIDGET (&self, GTK_WIDGET, "static"); + dynamic_vbox = GET_WIDGET (&self, GTK_WIDGET, "dynamic"); + da = GET_WIDGET (&self, GTK_WIDGET, "h264"); + gtk_widget_realize (da); + gdk_win = gtk_widget_get_window (da); + h264_xid = GDK_WINDOW_XID (gdk_win); + da = GET_WIDGET (&self, GTK_WIDGET, "preview"); + gtk_widget_realize (da); + gdk_win = gtk_widget_get_window (da); + preview_xid = GDK_WINDOW_XID (gdk_win); + + set_caps (&self, FALSE); + + g_object_set (self.src, "device", device, NULL); + if (gst_element_set_state (self.bin, GST_STATE_READY) == + GST_STATE_CHANGE_FAILURE) { + g_debug ("Unable to go to state READY"); + goto end; + } + + for (i = 0; i < G_N_ELEMENTS (properties); i++) { + switch (properties[i].type) { + case INT: + properties[i].src = self.src; + properties[i].builder = gtk_builder_new (); + gtk_builder_add_from_file (properties[i].builder, INT_PROPERTY_GLADE, + NULL); + gtk_builder_connect_signals (properties[i].builder, &properties[i]); + gtk_box_pack_start (PROPERTY_TO_VBOX, + GET_PROP_WIDGET (GTK_WIDGET, "int-property"), TRUE, TRUE, 2); + gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"), + properties[i].property_name); + if (properties[i].readonly) + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE); + break; + case ENUM: + properties[i].src = self.src; + properties[i].builder = gtk_builder_new (); +#if !GTK_CHECK_VERSION (2, 24, 0) + gtk_builder_add_from_file (properties[i].builder, + "enum_property_gtk2.glade", NULL); +#else + gtk_builder_add_from_file (properties[i].builder, ENUM_PROPERTY_GLADE, + NULL); +#endif + gtk_builder_connect_signals (properties[i].builder, &properties[i]); + gtk_box_pack_start (PROPERTY_TO_VBOX, + GET_PROP_WIDGET (GTK_WIDGET, "enum-property"), TRUE, TRUE, 2); + gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"), + properties[i].property_name); +#if !GTK_CHECK_VERSION (2, 24, 0) + { + GtkComboBox *combo_box; + GtkCellRenderer *cell; + GtkListStore *store; + + combo_box = GET_PROP_WIDGET ((GtkComboBox *), "value"); + store = gtk_list_store_new (1, G_TYPE_STRING); + gtk_combo_box_set_model (combo_box, GTK_TREE_MODEL (store)); + g_object_unref (store); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell, + "text", 0, NULL); + } +#endif + if (properties[i].readonly) + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE); + break; + case BOOL: + properties[i].src = self.src; + properties[i].builder = gtk_builder_new (); + gtk_builder_add_from_file (properties[i].builder, BOOL_PROPERTY_GLADE, + NULL); + gtk_builder_connect_signals (properties[i].builder, &properties[i]); + gtk_box_pack_start (PROPERTY_TO_VBOX, + GET_PROP_WIDGET (GTK_WIDGET, "boolean-property"), TRUE, TRUE, 2); + gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"), + properties[i].property_name); + if (properties[i].readonly) + gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE); + break; + case NONE: + default: + break; + } + } + probe_all_properties (FALSE); + get_all_properties (); + + gtk_widget_show (window); + gtk_main (); + +end: + g_object_unref (G_OBJECT (self.builder)); + for (i = 0; i < G_N_ELEMENTS (properties); i++) { + if (properties[i].builder) + g_object_unref (G_OBJECT (properties[i].builder)); + } + gst_element_set_state (self.bin, GST_STATE_NULL); + gst_object_unref (self.src); + gst_object_unref (self.identity); + gst_object_unref (self.vid_capsfilter); + gst_object_unref (self.vf_capsfilter); + gst_object_unref (self.bin); + + return 0; +} diff --git a/tests/examples/uvch264/window.glade b/tests/examples/uvch264/window.glade new file mode 100644 index 00000000..8b7624a9 --- /dev/null +++ b/tests/examples/uvch264/window.glade @@ -0,0 +1,345 @@ +<?xml version="1.0" encoding="UTF-8"?> +<interface> + <!-- interface-requires gtk+ 3.0 --> + <object class="GtkWindow" id="window"> + <property name="can_focus">False</property> + <property name="title" translatable="yes">Test for uvch264_src</property> + <signal name="destroy" handler="on_window_destroyed" swapped="no"/> + <child> + <object class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkVBox" id="vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkHBox" id="box26"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="homogeneous">True</property> + <child> + <object class="GtkButton" id="button2"> + <property name="label" translatable="yes">State NULL</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_button_null_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button51"> + <property name="label" translatable="yes">State READY</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_button_ready_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button52"> + <property name="label" translatable="yes">State PLAYING</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_button_playing_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button3"> + <property name="label" translatable="yes">Start capture</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_start_capture_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button4"> + <property name="label" translatable="yes">Stop capture</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_stop_capture_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button5"> + <property name="label" translatable="yes">Renegotiate</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_renegotiate_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Static controls</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="static"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Dynamic controls</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="dynamic"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="box1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Drop probability % (between 0.0 and 1.0)</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="drop"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="pps_sps"> + <property name="label" translatable="yes">With SPS/PPS</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_action_appearance">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton" id="button1"> + <property name="label" translatable="yes">Request keyframe</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_action_appearance">False</property> + <signal name="clicked" handler="on_iframe_button_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkVBox" id="box2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">H264</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="h264_caps"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="text" translatable="yes">video/x-h264,width=640,height=480,profile=constrained-baseline,stream-format=bytestream,framerate=15/1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkDrawingArea" id="h264"> + <property name="width_request">320</property> + <property name="height_request">240</property> + <property name="visible">True</property> + <property name="app_paintable">True</property> + <property name="can_focus">False</property> + <property name="double_buffered">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Preview</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="preview_caps"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="text" translatable="yes">video/x-raw-yuv,width=320,height=240,format=(fourcc)YUY2,framerate=15/1</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkDrawingArea" id="preview"> + <property name="width_request">320</property> + <property name="height_request">240</property> + <property name="visible">True</property> + <property name="app_paintable">True</property> + <property name="can_focus">False</property> + <property name="double_buffered">False</property> + <property name="halign">center</property> + <property name="valign">center</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> +</interface> diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in index 04207cd6..2be98d45 100644 --- a/tests/files/Makefile.in +++ b/tests/files/Makefile.in @@ -274,6 +274,8 @@ 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@ @@ -281,6 +283,8 @@ 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@ @@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -323,6 +326,10 @@ 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@ @@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in index f9066c99..927cc4ea 100644 --- a/tests/icles/Makefile.in +++ b/tests/icles/Makefile.in @@ -313,6 +313,8 @@ 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@ @@ -320,6 +322,8 @@ 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@ @@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -362,6 +365,10 @@ 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@ @@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/tools/Makefile.in b/tools/Makefile.in index 8f1ee891..78d92b51 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -274,6 +274,8 @@ 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@ @@ -281,6 +283,8 @@ 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@ @@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@ HAVE_GSM = @HAVE_GSM@ HAVE_JASPER = @HAVE_JASPER@ HAVE_NAS = @HAVE_NAS@ -HAVE_VPX = @HAVE_VPX@ HAVE_WILDMIDI = @HAVE_WILDMIDI@ HAVE_X = @HAVE_X@ HAVE_X11 = @HAVE_X11@ @@ -323,6 +326,10 @@ 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@ @@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@ VOAACENC_LIBS = @VOAACENC_LIBS@ VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@ VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@ +VPX_CFLAGS = @VPX_CFLAGS@ VPX_LIBS = @VPX_LIBS@ WARNING_CFLAGS = @WARNING_CFLAGS@ WARNING_CXXFLAGS = @WARNING_CXXFLAGS@ diff --git a/win32/common/config.h b/win32/common/config.h index 08cbdf48..78932dbe 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -199,7 +199,7 @@ #undef USE_POISONING /* Version number of package */ -#define VERSION "0.11.93" +#define VERSION "0.11.94" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ |