diff --git a/ChangeLog b/ChangeLog index 7c94248210..9a7d8a61a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,592 @@ -=== release 0.10.16 === +=== release 0.10.17 === -2010-09-02 Tim-Philipp Müller +2011-01-21 Tim-Philipp Müller * configure.ac: - releasing 0.10.16, "Because He Knows the Time is Short" + releasing 0.10.17, "Raised by Wolves" -2010-09-02 23:49:14 +0100 Tim-Philipp Müller +2011-01-18 11:11:28 +0000 Tim-Philipp Müller + + * configure.ac: + * docs/plugins/inspect/plugin-a52dec.xml: + * docs/plugins/inspect/plugin-amrnb.xml: + * docs/plugins/inspect/plugin-amrwbdec.xml: + * docs/plugins/inspect/plugin-asf.xml: + * docs/plugins/inspect/plugin-cdio.xml: + * docs/plugins/inspect/plugin-dvdlpcmdec.xml: + * docs/plugins/inspect/plugin-dvdread.xml: + * docs/plugins/inspect/plugin-dvdsub.xml: + * docs/plugins/inspect/plugin-iec958.xml: + * docs/plugins/inspect/plugin-lame.xml: + * docs/plugins/inspect/plugin-mad.xml: + * docs/plugins/inspect/plugin-mpeg2dec.xml: + * docs/plugins/inspect/plugin-mpegaudioparse.xml: + * docs/plugins/inspect/plugin-mpegstream.xml: + * docs/plugins/inspect/plugin-realmedia.xml: + * docs/plugins/inspect/plugin-siddec.xml: + * docs/plugins/inspect/plugin-twolame.xml: + * docs/plugins/inspect/plugin-x264.xml: + * win32/common/config.h: + 0.10.16.4 pre-release + +2011-01-14 17:37:09 +0100 Edward Hervey + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: Use the proper component value for height + +2011-01-11 20:42:06 +0000 Tim-Philipp Müller + + * configure.ac: + * docs/plugins/inspect/plugin-a52dec.xml: + * docs/plugins/inspect/plugin-amrnb.xml: + * docs/plugins/inspect/plugin-amrwbdec.xml: + * docs/plugins/inspect/plugin-asf.xml: + * docs/plugins/inspect/plugin-cdio.xml: + * docs/plugins/inspect/plugin-dvdlpcmdec.xml: + * docs/plugins/inspect/plugin-dvdread.xml: + * docs/plugins/inspect/plugin-dvdsub.xml: + * docs/plugins/inspect/plugin-iec958.xml: + * docs/plugins/inspect/plugin-lame.xml: + * docs/plugins/inspect/plugin-mad.xml: + * docs/plugins/inspect/plugin-mpeg2dec.xml: + * docs/plugins/inspect/plugin-mpegaudioparse.xml: + * docs/plugins/inspect/plugin-mpegstream.xml: + * docs/plugins/inspect/plugin-realmedia.xml: + * docs/plugins/inspect/plugin-siddec.xml: + * docs/plugins/inspect/plugin-twolame.xml: + * docs/plugins/inspect/plugin-x264.xml: + * win32/common/config.h: + 0.10.16.3 pre-release + +2011-01-11 17:09:02 +0100 Edward Hervey + + * gst/asfdemux/asfheaders.c: + * gst/asfdemux/asfheaders.h: + * gst/asfdemux/gstasfdemux.c: + asfdemux: Handle new type of DRM'd asf files. + These are produced by the new MS PlayReady system. + https://bugzilla.gnome.org/show_bug.cgi?id=639226 + +2011-01-11 15:51:14 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From e572c87 to f94d739 + +2011-01-10 16:37:19 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From ccbaa85 to e572c87 + +2011-01-10 14:54:40 +0000 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From 46445ad to ccbaa85 + +2011-01-08 00:35:08 +0000 Tim-Philipp Müller + + * tests/check/Makefile.am: + tests: never disable g_assert() and cast checks for the unit tests + The unit tests are riddled with g_assert() and friends, make sure we + don't disable assert and cast checks for the unit tests even if + this has been specified for the rest of the code base, e.g. via + --disable-glib-asserts + +2011-01-07 14:42:26 +0000 Tim-Philipp Müller + + * configure.ac: + * win32/common/config.h: + 0.10.16.2 pre-release + +2011-01-07 14:38:17 +0000 Tim-Philipp Müller + + * docs/plugins/gst-plugins-ugly-plugins.args: + * docs/plugins/inspect/plugin-a52dec.xml: + * docs/plugins/inspect/plugin-amrnb.xml: + * docs/plugins/inspect/plugin-amrwbdec.xml: + * docs/plugins/inspect/plugin-asf.xml: + * docs/plugins/inspect/plugin-cdio.xml: + * docs/plugins/inspect/plugin-dvdlpcmdec.xml: + * docs/plugins/inspect/plugin-dvdread.xml: + * docs/plugins/inspect/plugin-dvdsub.xml: + * docs/plugins/inspect/plugin-iec958.xml: + * docs/plugins/inspect/plugin-lame.xml: + * docs/plugins/inspect/plugin-mad.xml: + * docs/plugins/inspect/plugin-mpeg2dec.xml: + * docs/plugins/inspect/plugin-mpegaudioparse.xml: + * docs/plugins/inspect/plugin-mpegstream.xml: + * docs/plugins/inspect/plugin-realmedia.xml: + * docs/plugins/inspect/plugin-siddec.xml: + * docs/plugins/inspect/plugin-twolame.xml: + * docs/plugins/inspect/plugin-x264.xml: + docs: update docs + +2011-01-07 14:37:07 +0000 Tim-Philipp Müller + + * po/bg.po: + * po/ca.po: + * po/ru.po: + po: update translations + +2011-01-07 14:33:37 +0000 Tim-Philipp Müller + + * configure.ac: + configure: use $LIBM instead of hardcoding -lm + +2011-01-06 13:15:17 +0100 Edward Hervey + + * gst/realmedia/rmdemux.c: + rmdemux: Initialize return variable. + In the unlikely event that height is 0 (which is invalid) we would end up + never setting the flow return. + +2011-01-05 16:52:03 +0100 Edward Hervey + + * gst/realmedia/rmutils.c: + realmedia: Fix unitialized variables on macosx + +2011-01-04 10:32:05 -0300 Thiago Santos + + * ext/x264/gstx264enc.c: + x264enc: Handle codec/encoder tags + Make x264enc drop video-codec and codec tags and replace + encoder/encoder-version with x264 and its build number + Fixes #621465 + +2010-12-29 22:17:50 +0000 Tim-Philipp Müller + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers + +2010-12-29 22:10:58 +0000 Tim-Philipp Müller + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: minor formatting clean-up + +2010-12-29 21:42:36 +0000 Tim-Philipp Müller + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: refactor cropping code to use libgstvideo functions + https://bugzilla.gnome.org/show_bug.cgi?id=571146 + +2010-12-29 20:19:34 +0000 Tim-Philipp Müller + + * ext/mpeg2dec/gstmpeg2dec.c: + * ext/mpeg2dec/gstmpeg2dec.h: + mpeg2dec: use GstVideoFormat instead of custom enum + +2010-12-29 20:15:03 +0000 Tim-Philipp Müller + + * ext/mpeg2dec/Makefile.am: + mpeg2dec: fix LIBADD order in Makefile.am + +2010-11-19 13:01:35 -0500 Tristan Matthews + + * ext/x264/gstx264enc.c: + x264: vbv-buf-capacity should have a minimum of 0 + x264 will clip this value internally, and users should be allowed to + specify a lower value than 300 ms. + https://bugzilla.gnome.org/show_bug.cgi?id=635291 + +2010-12-27 11:38:24 +0000 Tim-Philipp Müller + + * ext/x264/gstx264enc.c: + x264enc: also accept YV12 input + +2010-12-01 18:35:59 +0100 Mark Nauwelaerts + + * ext/x264/gstx264enc.c: + x264enc: add a note to the docs about encoder latency and queues + https://bugzilla.gnome.org/show_bug.cgi?id=636107 + +2010-12-24 10:12:19 +0000 Vincent Penquerc'h + + * gst/realmedia/rademux.c: + * gst/realmedia/rmdemux.c: + realmedia: do not use the pad buffer allocation functions in demuxers + Doing so can block, see https://bugzilla.gnome.org/show_bug.cgi?id=637822 + https://bugzilla.gnome.org/show_bug.cgi?id=637932 + +2010-12-20 17:47:41 +0100 Edward Hervey + + * common: + Automatic update of common submodule + From 169462a to 46445ad + +2010-12-16 10:30:31 +0100 Sebastian Dröge + + * ext/mad/gstmad.c: + mad: If gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one + Fixes bug #635461. + +2010-12-15 14:56:36 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 20742ae to 169462a + +2010-12-12 11:54:35 -0600 Rob Clark + + * gst/realmedia/rmdemux.c: + rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly + Signed-off-by: Rob Clark + +2010-12-13 16:24:09 +0200 Stefan Kost + + * common: + Automatic update of common submodule + From 011bcc8 to 20742ae + +2010-11-14 10:57:21 -0800 Leo Singer + + * configure.ac: + x264: uses pkg-config to locate libx264 + +2010-12-07 15:39:32 +0100 Wim Taymans + + * tests/check/pipelines/lame.c: + check: don't use deprecated method + +2010-12-03 17:43:25 +0100 Benjamin Gaignard + + * Android.mk: + * android/NOTICE: + * android/amrnb.mk: + * android/amrwbdec.mk: + * android/asf.mk: + * android/mpegaudioparse.mk: + Add build system for Android + +2010-11-25 19:51:50 +0100 Edward Hervey + + * gst/realmedia/rmutils.c: + realmedia: Remove dead assignments + +2010-11-25 19:51:40 +0100 Edward Hervey + + * ext/mad/gstmad.c: + mad: Remove dead assignments + +2010-11-13 12:38:45 +0000 Tim-Philipp Müller + + * ext/dvdread/dvdreadsrc.c: + dvdreadsrc: remove bogus comment + +2010-11-13 12:34:37 +0000 Thomas Green + + * ext/dvdread/dvdreadsrc.c: + dvdreadsrc: fix handling of multi-angle streams + We would output all angles interleaved instead of just + the selected angle. + https://bugzilla.gnome.org/show_bug.cgi?id=539254 + +2010-10-28 17:01:16 +0100 Tim-Philipp Müller + + * gst/realmedia/Makefile.am: + realmedia: fix LIBS order in Makefile + +2010-10-22 09:17:40 +0100 Tim-Philipp Müller + + * 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/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/lt.po: + * po/lv.po: + * po/ms.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: + po: update for new translatable strings + +2010-10-27 13:17:29 +0100 Jan Schmidt + + * common: + Automatic update of common submodule + From 7bbd708 to 011bcc8 + +2010-10-20 20:26:45 +0200 Guillaume Emont + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: convert the position to stream time before answering to a position query + +2010-10-24 14:22:39 +0200 Edward Hervey + + * gst/realmedia/Makefile.am: + * gst/realmedia/rademux.c: + * gst/realmedia/rmdemux.c: + * gst/realmedia/rmdemux.h: + realmedia: Get codec name from pbutils instead of harcoding them + +2010-10-22 11:29:55 +0200 Robert Swain + + * ext/x264/gstx264enc.c: + x264enc: Work around a rate control issue in libx264 + When variable framerate is disabled in libx264 (which occurs when using + the zerolatency tuning), libx264 ignores timestamps but still uses the + timebase leading to messed up rate control with our nanosecond timebase. + We work around this issue by setting the timebase to the reciprocal of + the framerate and we validate that the framerate is suitable. + This has been fixed upstream in libx264 but there are non-fixed versions + in the wild so this workaround is still needed. + Fixes bug #632861 + +2010-10-19 16:30:51 +0200 Sebastian Dröge + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: Use gst_pad_peer_query() instead of getting the peer pad manually + +2010-10-13 21:38:06 +0200 Guillaume Emont + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: fix position query by trusting upstream + Position queries are badly handled for DVDs (probably due to the division in + chapters): the time returned was the time since the start of chapter. + Now ask upstream for position queries, fall back to the old code if upstream + cannot answer the query. + +2010-10-19 12:20:40 +0300 Stefan Kost + + * ext/lame/gstlame.c: + * ext/mad/gstmad.c: + * ext/sidplay/gstsiddec.cc: + * gst/mpegstream/gstmpegparse.c: + various: canonicalize property names + +2010-10-19 10:06:33 +0300 Stefan Kost + + * ext/a52dec/gsta52dec.c: + * ext/amrnb/amrnbdec.c: + * ext/amrnb/amrnbenc.c: + * ext/cdio/gstcdiocddasrc.c: + * ext/dvdread/dvdreadsrc.c: + * ext/lame/gstlame.c: + * ext/lame/gstlamemp3enc.c: + * ext/mad/gstmad.c: + * ext/sidplay/gstsiddec.cc: + * ext/x264/gstx264enc.c: + various (ext): add a missing G_PARAM_STATIC_STRINGS flags + +2010-10-19 09:49:47 +0300 Stefan Kost + + * gst/iec958/ac3iec.c: + * gst/mpegaudioparse/gstmpegaudioparse.c: + * gst/mpegstream/gstmpegparse.c: + * gst/mpegstream/gstrfc2250enc.c: + * gst/realmedia/pnmsrc.c: + * gst/realmedia/rdtmanager.c: + various (gst): add a missing G_PARAM_STATIC_STRINGS flags + +2010-10-14 12:32:16 -0700 David Schleef + + * common: + Automatic update of common submodule + From 5a668bf to 7bbd708 + +2010-10-08 12:44:52 -0700 David Schleef + + * common: + Automatic update of common submodule + From c4a8adc to 5a668bf + +2010-10-08 12:56:05 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From 5e3c9bf to c4a8adc + +2010-09-29 21:24:23 +0200 Mark Nauwelaerts + + * ext/mad/gstmad.c: + * ext/mad/gstmad.h: + mad: support reverse playback + +2010-09-26 19:24:08 +0100 Tim-Philipp Müller + + * ext/dvdread/dvdreadsrc.c: + dvdreadsrc: improve error messages on read errors + Provide proper i18n-ed error messages when a read error happens, + and point out that the error could be happening because the + DVD is scrambled. + https://bugzilla.gnome.org/show_bug.cgi?id=613633 + +2010-09-24 00:03:50 +0100 Tim-Philipp Müller + + * configure.ac: + configure: set plugin release datetime + +2010-09-21 18:34:31 +0200 Edward Hervey + + * common: + Automatic update of common submodule + From aa0d1d0 to 5e3c9bf + +2010-09-15 20:14:47 +0100 Tim-Philipp Müller + + * gst/mpegstream/gstmpegparse.c: + mpegparse: re-fix flow return handling + Fix wrong GST_FLOW_IS_SUCCESS substitution in commit e99cb46c: + - } while (GST_FLOW_IS_SUCCESS (result)); + + } while (result != GST_FLOW_OK); + +2010-09-09 22:33:36 +0300 Stefan Kost + + * tests/check/Makefile.am: + * tests/check/generic/states.c: + tests: allow running state tests for all elements + Now one can use GST_NO_STATE_IGNORE_ELEMENTS=1 make generic/states.check + to try elements that would normaly be skipped. + +2010-09-09 09:53:07 +0100 Tim-Philipp Müller + + * Makefile.am: + New pkgconfig subdirectory needs to be added to SUBDIRS as well so it's entered and disted + +2010-09-08 00:09:35 +0100 Tim-Philipp Müller + + * configure.ac: + * pkgconfig/.gitignore: + * pkgconfig/Makefile.am: + * pkgconfig/gstreamer-plugins-ugly-uninstalled.pc.in: + Add gstreamer-plugins-ugly-uninstalled-0.10.pc file so other modules can find our plugins + This .pc file will not be installed, it's only for uninstalled setups, + same thing as we do for -good. This is so other modules' unit tests can + find our plugins properly in an uninstalled setup. + +2010-09-07 11:42:52 +0100 Tim-Philipp Müller + + * common: + Automatic update of common submodule + From c2e10bf to aa0d1d0 + +2010-09-06 23:53:10 +0100 Tim-Philipp Müller + + * configure.ac: + configure: re-enable use of -DGST_DISABLE_DEPRECATED in git versions + +2010-09-06 23:51:23 +0100 Tim-Philipp Müller + + * ext/sidplay/gstsiddec.cc: + siddec: don't use GST_FLOW_IS_FATAL + GST_FLOW_IS_FATAL has been deprecated in core git. + +2010-09-05 18:58:50 -0700 David Schleef + + * common: + Automatic update of common submodule + From d3d9acf to c2e10bf + +2010-09-05 12:27:02 +0200 Sebastian Dröge + + * configure.ac: + configure: Require orc >= 0.4.6 for --compat + +2010-09-05 12:20:22 +0200 Sebastian Dröge + + * common: + Automatic update of common submodule + From ec60217 to d3d9acf + +2010-08-27 18:26:49 +0200 Sebastian Dröge + + * ext/mpeg2dec/gstmpeg2dec.c: + mpeg2dec: Don't use GST_FLOW_IS_FATAL() + And don't post error messages if allocating a buffer resulted + in WRONG_STATE or UNEXPECTED. + +2010-08-27 18:25:31 +0200 Sebastian Dröge + + * gst/mpegaudioparse/gstxingmux.c: + xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream + +2010-08-27 18:24:11 +0200 Sebastian Dröge + + * gst/mpegstream/gstdvddemux.c: + * gst/mpegstream/gstmpegdemux.c: + * gst/mpegstream/gstmpegparse.c: + mpegstream: Don't use GST_FLOW_IS_SUCCESS() + +2010-08-27 18:22:45 +0200 Sebastian Dröge + + * gst/realmedia/rmdemux.c: + rmdemux: Don't use GST_FLOW_IS_FATAL() and GST_FLOW_IS_SUCCESS() + +2010-08-27 18:19:00 +0200 Sebastian Dröge + + * gst/asfdemux/gstasfdemux.c: + asfdemux: Don't use GST_FLOW_IS_FATAL() + And don't post error messages for UNEXPECTED and post an error + message if pulling data failed because of NOT_LINKED. + +2010-09-04 13:17:53 +0100 Tim-Philipp Müller + + * configure.ac: + * docs/plugins/inspect/plugin-a52dec.xml: + * docs/plugins/inspect/plugin-amrnb.xml: + * docs/plugins/inspect/plugin-amrwbdec.xml: + * docs/plugins/inspect/plugin-asf.xml: + * docs/plugins/inspect/plugin-cdio.xml: + * docs/plugins/inspect/plugin-dvdlpcmdec.xml: + * docs/plugins/inspect/plugin-dvdread.xml: + * docs/plugins/inspect/plugin-dvdsub.xml: + * docs/plugins/inspect/plugin-iec958.xml: + * docs/plugins/inspect/plugin-lame.xml: + * docs/plugins/inspect/plugin-mad.xml: + * docs/plugins/inspect/plugin-mpeg2dec.xml: + * docs/plugins/inspect/plugin-mpegaudioparse.xml: + * docs/plugins/inspect/plugin-mpegstream.xml: + * docs/plugins/inspect/plugin-realmedia.xml: + * docs/plugins/inspect/plugin-siddec.xml: + * docs/plugins/inspect/plugin-twolame.xml: + * docs/plugins/inspect/plugin-x264.xml: + * win32/common/config.h: + Back to development + Temporarily disable -DGST_DISABLE_DEPRECATED for git builds until + the code is updated for the GST_FLOW_IS_* macro deprecations. + +=== release 0.10.16 === + +2010-09-02 23:59:20 +0100 Tim-Philipp Müller + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-plugins-ugly.doap: + * win32/common/config.h: + Release 0.10.16 + +2010-09-02 23:58:22 +0100 Tim-Philipp Müller * docs/plugins/inspect/plugin-a52dec.xml: * docs/plugins/inspect/plugin-amrnb.xml: @@ -25,7 +606,7 @@ * docs/plugins/inspect/plugin-siddec.xml: * docs/plugins/inspect/plugin-twolame.xml: * docs/plugins/inspect/plugin-x264.xml: - docs: update for release + docs: update docs for release 2010-09-02 23:48:05 +0100 Tim-Philipp Müller diff --git a/NEWS b/NEWS index d7f935e6c4..396b101c16 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,41 @@ -This is GStreamer Ugly Plug-ins 0.10.16 "Because He Knows the Time is Short" +This is GStreamer Ugly Plug-ins 0.10.17 "Raised by Wolves" + +Changes since 0.10.16: + + * asfdemux: Handle new type of DRM'd asf files + * dvdreadsrc: fix handling of multi-angle streams + * dvdreadsrc: improve error messages on read errors + * mad: if gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one + * mad: support reverse playback + * mpeg2dec: convert the position to stream time before answering to a position query + * mpeg2dec: fix position query by trusting upstream + * mpeg2dec: refactor cropping code to use libgstvideo functions + * mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers + * mpegparse: re-fix flow return handling + * rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly + * x264enc: add a note to the docs about encoder latency and queues + * x264enc: also accept YV12 input + * x264enc: Handle codec/encoder tags + * x264enc: Work around a rate control issue in libx264 + * x264: use pkg-config to locate libx264 + * x264: vbv-buf-capacity should have a minimum of 0 + * xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream + +Bugs fixed since 0.10.16: + + * 539254 : [dvdreadsrc] DVDs with multiple angles switch angles during read + * 571146 : mpeg2dec: possibly uses wrong strides for 4:2:2 and 4:4:4 YUV with unusual display width or height + * 599515 : Fix dvb for DVB API 3.3 + * 621465 : [x264enc] Video codec information copied incorrectly to output + * 632549 : [mpeg2dec] answers to position queries are wrong for DVDs + * 632861 : [x264enc] really bad quality with tune=zerolatency + * 634840 : x264: use pkg-config to locate dependencies for plugin + * 635291 : x264enc: " vbv-buf-capacity " property should have minimum value of 0 + * 635461 : Crash in mad decoder when changing number of audio output channels in Totem while media is running + * 636107 : x264enc: docs should indicate specifics of using with queues + * 637093 : rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly + * 637932 : realmedia: do not use the pad buffer allocation functions in demuxers + * 639226 : [asfdemux] Doesn't handle new PlayReady DRM files Changes since 0.10.15: diff --git a/RELEASE b/RELEASE index c4d7b641ee..3012d58f58 100644 --- a/RELEASE +++ b/RELEASE @@ -1,5 +1,5 @@ -Release notes for GStreamer Ugly Plug-ins 0.10.16 "Because He Knows the Time is Short" +Release notes for GStreamer Ugly Plug-ins 0.10.17 "Raised by Wolves" The GStreamer team is proud to announce a new release @@ -8,8 +8,6 @@ GStreamer Ugly Plug-ins. The 0.10.x series is a stable series targeted at end users. -It is not API or ABI compatible with the stable 0.8.x series. -It is, however, parallel installable with the 0.8.x series. @@ -55,38 +53,40 @@ contains a set of less supported plug-ins that haven't passed the Features of this release - * refactor x264enc to use current x264 API correctly, add new properties and new defaults - * liboil is no longer required, but orc is now required - * build: require orc >= 0.4.5, GLib >= 2.20, automake >= 1.10, autoconf >= 2.60; liboil is no longer required - * asfdemux: fix playback of files or streams that are shorter than the advertised preroll value - * asfdemux: fix sending eos event for chained asfs in pull mode (exotic) - * asfdemux: fix playback of files or streams that advertise miniscule preroll values - * lamemp3enc: implement latency query - * rmdemux: fix playback of sipro audio streams - * x264enc: refactor code in preparation for presets/tunings - * x264enc: add "profile" property (and default to MAIN profile) - * x264enc: improve defaults: medium speed/quality preset; auto mode for threads - * x264enc: add "speed-preset", "tune" and "psy-tune" properties - * x264enc: add "option-string" property to specify advanced parameters - * x264enc: set time base if needed, fixes visual artifacts - * x264enc: add "sliced-threads", "sync-lookahead", "intra-refresh", "mb-tree", and "rc-lookahead" properties - * x264enc: fix compilation against ancient x264 versions (X264_BUILD <= 75) - * x264enc: speed up first pass of multi-pass encoding (has no impact on quality) - * x264enc: fix flushing of delayed frames with new default settings + * asfdemux: Handle new type of DRM'd asf files + * dvdreadsrc: fix handling of multi-angle streams + * dvdreadsrc: improve error messages on read errors + * mad: if gst_pad_alloc_buffer() returns a buffer with the wrong size allocate a new one + * mad: support reverse playback + * mpeg2dec: convert the position to stream time before answering to a position query + * mpeg2dec: fix position query by trusting upstream + * mpeg2dec: refactor cropping code to use libgstvideo functions + * mpeg2dec: use gst_pad_alloc_buffer() when cropping buffers + * mpegparse: re-fix flow return handling + * rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly + * x264enc: add a note to the docs about encoder latency and queues + * x264enc: also accept YV12 input + * x264enc: Handle codec/encoder tags + * x264enc: Work around a rate control issue in libx264 + * x264: use pkg-config to locate libx264 + * x264: vbv-buf-capacity should have a minimum of 0 + * xingmux: Don't ignore WRONG_STATE and NOT_LINKED when pushing data downstream Bugs fixed in this release - * 599718 : [asf] support chained asfs - * 600412 : [asfdemux] Wrong handling of downstream GstFlowReturn - * 607798 : x264enc needs updating to support new features and use x264 correctly - * 618896 : lamemp3enc doesn't implement latency query - * 620007 : Gibberish sound when playing a certain RealMedia file of Sipro/ACELP.net audio codec - * 620344 : Update gst-plugins-ugly docs on website - * 622407 : [asfdemux] doesn't detect some streams if preroll value is very small - * 624786 : x264enc time base is wrong - * 625557 : x264enc doesn't flush delayed frames properly - * 626577 : [x264enc] regression: doesn't work with older versions of x264 - * 627946 : mp3parse misuses GST_FLOW_IS_FATAL, doesn't forward GST_FLOW_UNEXPECTED upstream + * 539254 : [dvdreadsrc] DVDs with multiple angles switch angles during read + * 571146 : mpeg2dec: possibly uses wrong strides for 4:2:2 and 4:4:4 YUV with unusual display width or height + * 599515 : Fix dvb for DVB API 3.3 + * 621465 : [x264enc] Video codec information copied incorrectly to output + * 632549 : [mpeg2dec] answers to position queries are wrong for DVDs + * 632861 : [x264enc] really bad quality with tune=zerolatency + * 634840 : x264: use pkg-config to locate dependencies for plugin + * 635291 : x264enc: " vbv-buf-capacity " property should have minimum value of 0 + * 635461 : Crash in mad decoder when changing number of audio output channels in Totem while media is running + * 636107 : x264enc: docs should indicate specifics of using with queues + * 637093 : rmdemux: set GST_BUFFER_FLAG_DELTA_UNIT properly + * 637932 : realmedia: do not use the pad buffer allocation functions in demuxers + * 639226 : [asfdemux] Doesn't handle new PlayReady DRM files Download @@ -115,17 +115,21 @@ Applications Contributors to this release - * Alessandro Decina - * David Hoyt + * Benjamin Gaignard * David Schleef * Edward Hervey + * Guillaume Emont + * Jan Schmidt + * Leo Singer * Mark Nauwelaerts - * Olivier Crête + * Rob Clark * Robert Swain * Sebastian Dröge * Stefan Kost * Thiago Santos + * Thomas Green * Tim-Philipp Müller * Tristan Matthews + * Vincent Penquerc'h * Wim Taymans   \ No newline at end of file diff --git a/common b/common index 011bcc8a0f..1de7f6ab2d 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit 011bcc8a0fc7f798ee874a7ba899123fb2470e22 +Subproject commit 1de7f6ab2d4bc1af69f06079cf0f4e2cbbfdc178 diff --git a/configure.ac b/configure.ac index fdb0a445f4..d16c139c4c 100644 --- a/configure.ac +++ b/configure.ac @@ -250,7 +250,7 @@ translit(dnm, m, l) AM_CONDITIONAL(USE_AMRNB, true) AG_GST_CHECK_FEATURE(AMRNB, [amrnb library], amrnb, [ PKG_CHECK_MODULES(AMRNB, opencore-amrnb, HAVE_AMRNB="yes", [ AG_GST_CHECK_LIBHEADER(AMRNB, opencore-amrnb, - Decoder_Interface_init, -lm, + Decoder_Interface_init, $LIBM, opencore-amrnb/interf_dec.h, AMRNB_LIBS="-lopencore-amrnb") ]) @@ -287,10 +287,10 @@ AG_GST_CHECK_FEATURE(DVDREAD, [dvdread library], dvdreadsrc, [ dnl *** lame *** translit(dnm, m, l) AM_CONDITIONAL(USE_LAME, true) AG_GST_CHECK_FEATURE(LAME, [lame mp3 encoder library], lame, [ - AG_GST_CHECK_LIBHEADER(LAME, mp3lame, lame_init, -lm, lame/lame.h, + AG_GST_CHECK_LIBHEADER(LAME, mp3lame, lame_init, $LIBM, lame/lame.h, [ HAVE_LAME="yes" - LAME_LIBS="-lmp3lame -lm" + LAME_LIBS="-lmp3lame $LIBM" dnl is lame presets available LAME_CFLAGS="" AC_TRY_COMPILE([#include ], [ int preset = MEDIUM ], @@ -371,24 +371,7 @@ AG_GST_CHECK_FEATURE(TWOLAME, [twolame], twolame, [ dnl *** x264 (MPEG-4 part 10/h.264/AVC encoder) *** translit(dnm, m, l) AM_CONDITIONAL(USE_X264, true) AG_GST_CHECK_FEATURE(X264, [x264 plug-in], x264, [ - AG_GST_CHECK_LIBHEADER(X264, x264, x264_encoder_encode, -lm, x264.h, - AC_MSG_CHECKING([for uptodate x264 API version]) - dnl _stdint not yet generated, so no compiling - AC_TRY_CPP([ - #include - #if X264_BUILD < 55 - #error "x264 build too old" - #endif - ], [ - AC_MSG_RESULT(yes) - X264_LIBS="$LDFLAGS -lx264 -lm" - X264_CFLAGS="$CFLAGS" - AC_SUBST(X264_LIBS) - AC_SUBST(X264_CFLAGS) - ], [ - AC_MSG_RESULT(no) - HAVE_X264=no - ])) + AG_GST_PKG_CHECK_MODULES(X264, x264 >= 0.55.0) ]) else @@ -536,7 +519,7 @@ sed \ -e 's/.* PLUGINDIR$/#ifdef _DEBUG\n# define PLUGINDIR PREFIX "\\\\debug\\\\lib\\\\gstreamer-0.11"\n#else\n# define PLUGINDIR PREFIX "\\\\lib\\\\gstreamer-0.11"\n#endif/' \ -e 's/.* USE_BINARY_REGISTRY$/#define USE_BINARY_REGISTRY/' \ -e 's/.* VERSION$/#define VERSION "'$VERSION'"/' \ - -e "s/.* DEFAULT_AUDIOSINK$/#define DEFAULT_AUDIOSINK \"directaudiosink\"/" \ + -e "s/.* DEFAULT_AUDIOSINK$/#define DEFAULT_AUDIOSINK \"directsoundsink\"/" \ -e "s/.* DEFAULT_AUDIOSRC$/#define DEFAULT_AUDIOSRC \"audiotestsrc\"/" \ -e "s/.* DEFAULT_VIDEOSRC$/#define DEFAULT_VIDEOSRC \"videotestsrc\"/" \ -e "s/.* DEFAULT_VISUALIZER$/#define DEFAULT_VISUALIZER \"goom\"/" \ diff --git a/docs/plugins/gst-plugins-ugly-plugins.args b/docs/plugins/gst-plugins-ugly-plugins.args index 2516199bef..e9ae943789 100644 --- a/docs/plugins/gst-plugins-ugly-plugins.args +++ b/docs/plugins/gst-plugins-ugly-plugins.args @@ -1041,7 +1041,7 @@ GstX264Enc::vbv-buf-capacity guint -[300,10000] +<= 10000 rw VBV buffer capacity Size of the VBV buffer in milliseconds. diff --git a/docs/plugins/inspect/plugin-a52dec.xml b/docs/plugins/inspect/plugin-a52dec.xml index 3eab7c1808..fc7299fd73 100644 --- a/docs/plugins/inspect/plugin-a52dec.xml +++ b/docs/plugins/inspect/plugin-a52dec.xml @@ -3,7 +3,7 @@ Decodes ATSC A/52 encoded audio streams ../../ext/a52dec/.libs/libgsta52dec.so libgsta52dec.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-amrnb.xml b/docs/plugins/inspect/plugin-amrnb.xml index bb6043dd97..f37f9e006a 100644 --- a/docs/plugins/inspect/plugin-amrnb.xml +++ b/docs/plugins/inspect/plugin-amrnb.xml @@ -3,7 +3,7 @@ Adaptive Multi-Rate Narrow-Band ../../ext/amrnb/.libs/libgstamrnb.so libgstamrnb.so - 0.10.16.1 + 0.10.17.1 unknown gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-amrwbdec.xml b/docs/plugins/inspect/plugin-amrwbdec.xml index 636980e1d4..b159126d2c 100644 --- a/docs/plugins/inspect/plugin-amrwbdec.xml +++ b/docs/plugins/inspect/plugin-amrwbdec.xml @@ -3,7 +3,7 @@ Adaptive Multi-Rate Wide-Band Decoder ../../ext/amrwbdec/.libs/libgstamrwbdec.so libgstamrwbdec.so - 0.10.16.1 + 0.10.17.1 unknown gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-asf.xml b/docs/plugins/inspect/plugin-asf.xml index 04722c6e4b..f608ae3f5a 100644 --- a/docs/plugins/inspect/plugin-asf.xml +++ b/docs/plugins/inspect/plugin-asf.xml @@ -3,7 +3,7 @@ Demuxes and muxes audio and video in Microsofts ASF format ../../gst/asfdemux/.libs/libgstasf.so libgstasf.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-cdio.xml b/docs/plugins/inspect/plugin-cdio.xml index 9a66e3b9fe..edc46ba27c 100644 --- a/docs/plugins/inspect/plugin-cdio.xml +++ b/docs/plugins/inspect/plugin-cdio.xml @@ -3,7 +3,7 @@ Read audio from audio CDs ../../ext/cdio/.libs/libgstcdio.so libgstcdio.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-dvdlpcmdec.xml b/docs/plugins/inspect/plugin-dvdlpcmdec.xml index 2f7e58309b..bf1a628146 100644 --- a/docs/plugins/inspect/plugin-dvdlpcmdec.xml +++ b/docs/plugins/inspect/plugin-dvdlpcmdec.xml @@ -3,7 +3,7 @@ Decode DVD LPCM frames into standard PCM ../../gst/dvdlpcmdec/.libs/libgstdvdlpcmdec.so libgstdvdlpcmdec.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-dvdread.xml b/docs/plugins/inspect/plugin-dvdread.xml index dc07367204..bc53d16653 100644 --- a/docs/plugins/inspect/plugin-dvdread.xml +++ b/docs/plugins/inspect/plugin-dvdread.xml @@ -3,7 +3,7 @@ Access a DVD with dvdread ../../ext/dvdread/.libs/libgstdvdread.so libgstdvdread.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-dvdsub.xml b/docs/plugins/inspect/plugin-dvdsub.xml index b43760662b..b72cf83bcb 100644 --- a/docs/plugins/inspect/plugin-dvdsub.xml +++ b/docs/plugins/inspect/plugin-dvdsub.xml @@ -3,7 +3,7 @@ DVD subtitle parser and decoder ../../gst/dvdsub/.libs/libgstdvdsub.so libgstdvdsub.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-iec958.xml b/docs/plugins/inspect/plugin-iec958.xml index f9e90b74cd..2f7b7085a0 100644 --- a/docs/plugins/inspect/plugin-iec958.xml +++ b/docs/plugins/inspect/plugin-iec958.xml @@ -3,7 +3,7 @@ Convert raw AC3 into IEC958 (S/PDIF) frames ../../gst/iec958/.libs/libgstiec958.so libgstiec958.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-lame.xml b/docs/plugins/inspect/plugin-lame.xml index ba424c8b27..3d4a58cfce 100644 --- a/docs/plugins/inspect/plugin-lame.xml +++ b/docs/plugins/inspect/plugin-lame.xml @@ -3,7 +3,7 @@ Encode MP3s with LAME ../../ext/lame/.libs/libgstlame.so libgstlame.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-mad.xml b/docs/plugins/inspect/plugin-mad.xml index e5fcd1abb3..2b9190e101 100644 --- a/docs/plugins/inspect/plugin-mad.xml +++ b/docs/plugins/inspect/plugin-mad.xml @@ -3,7 +3,7 @@ mp3 decoding based on the mad library ../../ext/mad/.libs/libgstmad.so libgstmad.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-mpeg2dec.xml b/docs/plugins/inspect/plugin-mpeg2dec.xml index 88310ecc6b..e7001f5008 100644 --- a/docs/plugins/inspect/plugin-mpeg2dec.xml +++ b/docs/plugins/inspect/plugin-mpeg2dec.xml @@ -3,7 +3,7 @@ LibMpeg2 decoder ../../ext/mpeg2dec/.libs/libgstmpeg2dec.so libgstmpeg2dec.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-mpegaudioparse.xml b/docs/plugins/inspect/plugin-mpegaudioparse.xml index 3a71952907..342977d927 100644 --- a/docs/plugins/inspect/plugin-mpegaudioparse.xml +++ b/docs/plugins/inspect/plugin-mpegaudioparse.xml @@ -3,7 +3,7 @@ MPEG-1 layer 1/2/3 audio stream elements ../../gst/mpegaudioparse/.libs/libgstmpegaudioparse.so libgstmpegaudioparse.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-mpegstream.xml b/docs/plugins/inspect/plugin-mpegstream.xml index 096ed37062..461f86e103 100644 --- a/docs/plugins/inspect/plugin-mpegstream.xml +++ b/docs/plugins/inspect/plugin-mpegstream.xml @@ -3,7 +3,7 @@ MPEG system stream parser ../../gst/mpegstream/.libs/libgstmpegstream.so libgstmpegstream.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-realmedia.xml b/docs/plugins/inspect/plugin-realmedia.xml index 1cc6165462..149002cb16 100644 --- a/docs/plugins/inspect/plugin-realmedia.xml +++ b/docs/plugins/inspect/plugin-realmedia.xml @@ -3,7 +3,7 @@ RealMedia support plugins ../../gst/realmedia/.libs/libgstrmdemux.so libgstrmdemux.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-siddec.xml b/docs/plugins/inspect/plugin-siddec.xml index b483909458..d33a037e47 100644 --- a/docs/plugins/inspect/plugin-siddec.xml +++ b/docs/plugins/inspect/plugin-siddec.xml @@ -3,7 +3,7 @@ Uses libsidplay to decode .sid files ../../ext/sidplay/.libs/libgstsid.so libgstsid.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-twolame.xml b/docs/plugins/inspect/plugin-twolame.xml index 900182d0c8..38bcb0fc22 100644 --- a/docs/plugins/inspect/plugin-twolame.xml +++ b/docs/plugins/inspect/plugin-twolame.xml @@ -3,7 +3,7 @@ Encode MP2s with TwoLAME ../../ext/twolame/.libs/libgsttwolame.so libgsttwolame.so - 0.10.16.1 + 0.10.17.1 LGPL gst-plugins-ugly GStreamer Ugly Plug-ins git diff --git a/docs/plugins/inspect/plugin-x264.xml b/docs/plugins/inspect/plugin-x264.xml index 2e8420994f..ee349f03ff 100644 --- a/docs/plugins/inspect/plugin-x264.xml +++ b/docs/plugins/inspect/plugin-x264.xml @@ -3,7 +3,7 @@ libx264-based H264 plugins ../../ext/x264/.libs/libgstx264.so libgstx264.so - 0.10.16.1 + 0.10.17.1 GPL gst-plugins-ugly GStreamer Ugly Plug-ins git @@ -20,7 +20,7 @@ sink sink always -
video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 16, 2147483647 ], height=(int)[ 16, 2147483647 ]
+
video/x-raw-yuv, format=(fourcc){ I420, YV12 }, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 16, 2147483647 ], height=(int)[ 16, 2147483647 ]
src diff --git a/ext/amrwbdec/amrwbdec.c b/ext/amrwbdec/amrwbdec.c index bbaf33be8a..51f759d855 100644 --- a/ext/amrwbdec/amrwbdec.c +++ b/ext/amrwbdec/amrwbdec.c @@ -63,7 +63,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_amrwbdec_debug); static const unsigned char block_size[16] = { 18, 24, 33, 37, 41, 47, 51, 59, 61, - 6, 6, 0, 0, 0, 1, 1 + 6, 0, 0, 0, 0, 1, 1 }; static gboolean gst_amrwbdec_event (GstPad * pad, GstEvent * event); @@ -285,7 +285,13 @@ gst_amrwbdec_chain (GstPad * pad, GstBuffer * buffer) GST_DEBUG_OBJECT (amrwbdec, "mode %d, block %d", mode, block); - if (!block || gst_adapter_available (amrwbdec->adapter) < block) + if (!block) { + GST_LOG_OBJECT (amrwbdec, "skipping byte"); + gst_adapter_flush (amrwbdec->adapter, 1); + continue; + } + + if (gst_adapter_available (amrwbdec->adapter) < block) break; /* the library seems to write into the source data, hence the copy. */ diff --git a/ext/lame/gstlamemp3enc.c b/ext/lame/gstlamemp3enc.c index 7ad7829e55..21bc9563ef 100644 --- a/ext/lame/gstlamemp3enc.c +++ b/ext/lame/gstlamemp3enc.c @@ -389,6 +389,61 @@ setup_failed: } } +static GstCaps * +gst_lamemp3enc_sink_getcaps (GstPad * pad) +{ + const GstCaps *templ_caps; + GstLameMP3Enc *lame; + GstCaps *allowed = NULL; + GstCaps *caps, *filter_caps; + gint i, j; + + lame = GST_LAMEMP3ENC (gst_pad_get_parent (pad)); + + /* we want to be able to communicate to upstream elements like audioconvert + * and audioresample any rate/channel restrictions downstream (e.g. muxer + * only accepting certain sample rates) */ + templ_caps = gst_pad_get_pad_template_caps (pad); + allowed = gst_pad_get_allowed_caps (lame->srcpad); + if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) { + caps = gst_caps_copy (templ_caps); + goto done; + } + + filter_caps = gst_caps_new_empty (); + + for (i = 0; i < gst_caps_get_size (templ_caps); i++) { + GQuark q_name; + + q_name = gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); + + /* pick rate + channel fields from allowed caps */ + for (j = 0; j < gst_caps_get_size (allowed); j++) { + const GstStructure *allowed_s = gst_caps_get_structure (allowed, j); + const GValue *val; + GstStructure *s; + + s = gst_structure_id_empty_new (q_name); + if ((val = gst_structure_get_value (allowed_s, "rate"))) + gst_structure_set_value (s, "rate", val); + if ((val = gst_structure_get_value (allowed_s, "channels"))) + gst_structure_set_value (s, "channels", val); + + gst_caps_merge_structure (filter_caps, s); + } + } + + caps = gst_caps_intersect (filter_caps, templ_caps); + gst_caps_unref (filter_caps); + +done: + + gst_caps_replace (&allowed, NULL); + gst_object_unref (lame); + + return caps; +} + static gint64 gst_lamemp3enc_get_latency (GstLameMP3Enc * lame) { @@ -453,6 +508,8 @@ gst_lamemp3enc_init (GstLameMP3Enc * lame) GST_DEBUG_FUNCPTR (gst_lamemp3enc_chain)); gst_pad_set_setcaps_function (lame->sinkpad, GST_DEBUG_FUNCPTR (gst_lamemp3enc_sink_setcaps)); + gst_pad_set_getcaps_function (lame->sinkpad, + GST_DEBUG_FUNCPTR (gst_lamemp3enc_sink_getcaps)); gst_element_add_pad (GST_ELEMENT (lame), lame->sinkpad); lame->srcpad = diff --git a/ext/mad/gstmad.c b/ext/mad/gstmad.c index d34502379f..35efbb5ad6 100644 --- a/ext/mad/gstmad.c +++ b/ext/mad/gstmad.c @@ -100,10 +100,8 @@ static GstFlowReturn gst_mad_chain_reverse (GstMad * mad, GstBuffer * buf); static GstStateChangeReturn gst_mad_change_state (GstElement * element, GstStateChange transition); -#ifndef GST_DISABLE_INDEX static void gst_mad_set_index (GstElement * element, GstIndex * index); static GstIndex *gst_mad_get_index (GstElement * element); -#endif static GstTagList *gst_mad_id3_to_tag_list (const struct id3_tag *tag); @@ -200,10 +198,8 @@ gst_mad_class_init (GstMadClass * klass) gobject_class->dispose = gst_mad_dispose; gstelement_class->change_state = gst_mad_change_state; -#ifndef GST_DISABLE_INDEX gstelement_class->set_index = gst_mad_set_index; gstelement_class->get_index = gst_mad_get_index; -#endif /* init properties */ /* currently, string representations are used, we might want to change that */ @@ -287,9 +283,7 @@ gst_mad_dispose (GObject * object) { GstMad *mad = GST_MAD (object); -#ifndef GST_DISABLE_INDEX gst_mad_set_index (GST_ELEMENT (object), NULL); -#endif g_free (mad->tempbuffer); mad->tempbuffer = NULL; @@ -301,7 +295,6 @@ gst_mad_dispose (GObject * object) G_OBJECT_CLASS (parent_class)->dispose (object); } -#ifndef GST_DISABLE_INDEX static void gst_mad_set_index (GstElement * element, GstIndex * index) { @@ -320,7 +313,6 @@ gst_mad_get_index (GstElement * element) return mad->index; } -#endif static gboolean gst_mad_convert_sink (GstPad * pad, GstFormat src_format, gint64 src_value, @@ -604,7 +596,6 @@ error: return FALSE; } -#ifndef GST_DISABLE_INDEX static gboolean index_seek (GstMad * mad, GstPad * pad, GstEvent * event) { @@ -681,7 +672,6 @@ index_seek (GstMad * mad, GstPad * pad, GstEvent * event) return FALSE; } -#endif static gboolean normal_seek (GstMad * mad, GstPad * pad, GstEvent * event) @@ -807,11 +797,9 @@ gst_mad_src_event (GstPad * pad, GstEvent * event) /* the all-formats seek logic, ref the event, we need it later */ gst_event_ref (event); if (!(res = gst_pad_push_event (mad->sinkpad, event))) { -#ifndef GST_DISABLE_INDEX if (mad->index) res = index_seek (mad, pad, event); else -#endif res = normal_seek (mad, pad, event); } gst_event_unref (event); @@ -1038,10 +1026,10 @@ gst_mad_check_restart (GstMad * mad) } -/* The following code has been taken from +/* The following code has been taken from * rhythmbox/metadata/monkey-media/stream-info-impl/id3-vfs/mp3bitrate.c * which took it from xine-lib/src/demuxers/demux_mpgaudio.c - * This code has been kindly relicensed to LGPL by Thibaut Mattern and + * This code has been kindly relicensed to LGPL by Thibaut Mattern and * Bastien Nocera */ #define BE_32(x) GST_READ_UINT32_BE(x) @@ -1642,11 +1630,11 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer) /* We are using the incoming timestamps to generate the outgoing ones * if available. However some muxing formats are not precise enough - * to allow us to generate a perfect stream. When converting the + * to allow us to generate a perfect stream. When converting the * timestamp to a number of encoded samples so far we are introducing - * a lot of potential error compared to our accumulated number of - * samples encoded. If the difference between those 2 numbers is - * bigger than half a frame we then use the incoming timestamp + * a lot of potential error compared to our accumulated number of + * samples encoded. If the difference between those 2 numbers is + * bigger than half a frame we then use the incoming timestamp * as a reference, otherwise we continue using our accumulated samples * counter */ if (ABS (mad->total_samples - total) > nsamples / 2) { @@ -1672,14 +1660,13 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer) GST_SECOND, mad->rate) - time_offset; } -#ifndef GST_DISABLE_INDEX if (mad->index) { guint64 x_bytes = mad->base_byte_offset + mad->bytes_consumed; - gst_index_add_association (mad->index, mad->index_id, 0, + gst_index_add_association (mad->index, mad->index_id, + GST_ASSOCIATION_FLAG_DELTA_UNIT, GST_FORMAT_BYTES, x_bytes, GST_FORMAT_TIME, time_offset, NULL); } -#endif if (mad->segment_start <= (time_offset == GST_CLOCK_TIME_NONE ? 0 : time_offset)) { @@ -1728,6 +1715,13 @@ gst_mad_chain (GstPad * pad, GstBuffer * buffer) goto skip_frame; } + if (GST_BUFFER_SIZE (outbuffer) != nsamples * mad->channels * 4) { + gst_buffer_unref (outbuffer); + + outbuffer = gst_buffer_new_and_alloc (nsamples * mad->channels * 4); + gst_buffer_set_caps (outbuffer, GST_PAD_CAPS (mad->srcpad)); + } + mad_synth_frame (&mad->synth, &mad->frame); left_ch = mad->synth.pcm.samples[0]; right_ch = mad->synth.pcm.samples[1]; diff --git a/ext/mad/gstmad.h b/ext/mad/gstmad.h index 63e1afa675..3acc7e29d6 100644 --- a/ext/mad/gstmad.h +++ b/ext/mad/gstmad.h @@ -86,10 +86,8 @@ struct _GstMad gint times_pending; gboolean caps_set; /* used to keep track of whether to change/update caps */ -#ifndef GST_DISABLE_INDEX GstIndex *index; gint index_id; -#endif gboolean check_for_xing; gboolean xing_found; diff --git a/ext/mpeg2dec/Makefile.am b/ext/mpeg2dec/Makefile.am index 376336c233..ab2aed30dc 100644 --- a/ext/mpeg2dec/Makefile.am +++ b/ext/mpeg2dec/Makefile.am @@ -1,9 +1,10 @@ plugin_LTLIBRARIES = libgstmpeg2dec.la libgstmpeg2dec_la_SOURCES = gstmpeg2dec.c -libgstmpeg2dec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(MPEG2DEC_CFLAGS) -libgstmpeg2dec_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(MPEG2DEC_LIBS) $(GST_LIBS) \ - -lgstvideo-$(GST_MAJORMINOR) +libgstmpeg2dec_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \ + $(GST_CFLAGS) $(MPEG2DEC_CFLAGS) +libgstmpeg2dec_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \ + $(GST_LIBS) $(MPEG2DEC_LIBS) libgstmpeg2dec_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstmpeg2dec_la_LIBTOOLFLAGS = --tag=disable-static diff --git a/ext/mpeg2dec/gstmpeg2dec.c b/ext/mpeg2dec/gstmpeg2dec.c index f552d7de04..5867462e55 100644 --- a/ext/mpeg2dec/gstmpeg2dec.c +++ b/ext/mpeg2dec/gstmpeg2dec.c @@ -85,10 +85,8 @@ static void gst_mpeg2dec_init (GstMpeg2dec * mpeg2dec); static void gst_mpeg2dec_finalize (GObject * object); static void gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec); -#ifndef GST_DISABLE_INDEX static void gst_mpeg2dec_set_index (GstElement * element, GstIndex * index); static GstIndex *gst_mpeg2dec_get_index (GstElement * element); -#endif static gboolean gst_mpeg2dec_src_event (GstPad * pad, GstEvent * event); static const GstQueryType *gst_mpeg2dec_get_src_query_types (GstPad * pad); @@ -121,7 +119,7 @@ static const GstEventMask *gst_mpeg2dec_get_event_masks (GstPad * pad); static GstElementClass *parent_class = NULL; -static gboolean crop_buffer (GstMpeg2dec * mpeg2dec, GstBuffer ** buf); +static gboolean gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf); /*static guint gst_mpeg2dec_signals[LAST_SIGNAL] = { 0 };*/ @@ -187,10 +185,8 @@ gst_mpeg2dec_class_init (GstMpeg2decClass * klass) gobject_class->finalize = gst_mpeg2dec_finalize; gstelement_class->change_state = gst_mpeg2dec_change_state; -#ifndef GST_DISABLE_INDEX gstelement_class->set_index = gst_mpeg2dec_set_index; gstelement_class->get_index = gst_mpeg2dec_get_index; -#endif } static void @@ -268,7 +264,7 @@ gst_mpeg2dec_reset (GstMpeg2dec * mpeg2dec) } /* reset the initial video state */ - mpeg2dec->format = MPEG2DEC_FORMAT_NONE; + mpeg2dec->format = GST_VIDEO_FORMAT_UNKNOWN; mpeg2dec->width = -1; mpeg2dec->height = -1; gst_segment_init (&mpeg2dec->segment, GST_FORMAT_UNDEFINED); @@ -291,7 +287,6 @@ gst_mpeg2dec_qos_reset (GstMpeg2dec * mpeg2dec) GST_OBJECT_UNLOCK (mpeg2dec); } -#ifndef GST_DISABLE_INDEX static void gst_mpeg2dec_set_index (GstElement * element, GstIndex * index) { @@ -317,139 +312,63 @@ gst_mpeg2dec_get_index (GstElement * element) return (mpeg2dec->index) ? gst_object_ref (mpeg2dec->index) : NULL; } -#endif -/* see gst-plugins/gst/games/gstvideoimage.c, paint_setup_I420() */ -#define I420_Y_ROWSTRIDE(width) (GST_ROUND_UP_4(width)) -#define I420_U_ROWSTRIDE(width) (GST_ROUND_UP_8(width)/2) -#define I420_V_ROWSTRIDE(width) ((GST_ROUND_UP_8(I420_Y_ROWSTRIDE(width)))/2) - -#define I420_Y_OFFSET(w,h) (0) -#define I420_U_OFFSET(w,h) (I420_Y_OFFSET(w,h)+(I420_Y_ROWSTRIDE(w)*GST_ROUND_UP_2(h))) -#define I420_V_OFFSET(w,h) (I420_U_OFFSET(w,h)+(I420_U_ROWSTRIDE(w)*GST_ROUND_UP_2(h)/2)) - -#define I420_SIZE(w,h) (I420_V_OFFSET(w,h)+(I420_V_ROWSTRIDE(w)*GST_ROUND_UP_2(h)/2)) - -static GstBuffer * -crop_copy_i420_buffer (GstMpeg2dec * mpeg2dec, GstBuffer * input) +static GstFlowReturn +gst_mpeg2dec_crop_buffer (GstMpeg2dec * dec, GstBuffer ** buf) { + GstFlowReturn flow_ret; + GstBuffer *inbuf = *buf; GstBuffer *outbuf; - guint8 *dest, *src; - guint outsize, line; + guint outsize, c; - outsize = I420_SIZE (mpeg2dec->width, mpeg2dec->height); - GST_LOG_OBJECT (mpeg2dec, "Copying input buffer %ux%u (%u) to output buffer " - "%ux%u (%u)", mpeg2dec->decoded_width, mpeg2dec->decoded_height, - GST_BUFFER_SIZE (input), mpeg2dec->width, mpeg2dec->height, outsize); - outbuf = gst_buffer_new_and_alloc (outsize); + outsize = gst_video_format_get_size (dec->format, dec->width, dec->height); - /* Copy Y first */ - src = GST_BUFFER_DATA (input); - dest = GST_BUFFER_DATA (outbuf); - for (line = 0; line < mpeg2dec->height; line++) { - memcpy (dest, src, mpeg2dec->width); - dest += I420_Y_ROWSTRIDE (mpeg2dec->width); - src += I420_Y_ROWSTRIDE (mpeg2dec->decoded_width); - } + GST_LOG_OBJECT (dec, "Copying input buffer %ux%u (%u) to output buffer " + "%ux%u (%u)", dec->decoded_width, dec->decoded_height, + GST_BUFFER_SIZE (inbuf), dec->width, dec->height, outsize); - /* U */ - src = GST_BUFFER_DATA (input) - + I420_U_OFFSET (mpeg2dec->decoded_width, mpeg2dec->decoded_height); - dest = GST_BUFFER_DATA (outbuf) - + I420_U_OFFSET (mpeg2dec->width, mpeg2dec->height); - for (line = 0; line < mpeg2dec->height / 2; line++) { - memcpy (dest, src, mpeg2dec->width / 2); - dest += I420_U_ROWSTRIDE (mpeg2dec->width); - src += I420_U_ROWSTRIDE (mpeg2dec->decoded_width); - } + flow_ret = gst_pad_alloc_buffer_and_set_caps (dec->srcpad, + GST_BUFFER_OFFSET_NONE, outsize, GST_PAD_CAPS (dec->srcpad), &outbuf); - /* V */ - src = GST_BUFFER_DATA (input) - + I420_V_OFFSET (mpeg2dec->decoded_width, mpeg2dec->decoded_height); - dest = GST_BUFFER_DATA (outbuf) - + I420_V_OFFSET (mpeg2dec->width, mpeg2dec->height); - for (line = 0; line < mpeg2dec->height / 2; line++) { - memcpy (dest, src, mpeg2dec->width / 2); - dest += I420_V_ROWSTRIDE (mpeg2dec->width); - src += I420_V_ROWSTRIDE (mpeg2dec->decoded_width); - } + if (G_UNLIKELY (flow_ret != GST_FLOW_OK)) + return flow_ret; - return outbuf; -} + for (c = 0; c < 3; c++) { + const guint8 *src; + guint8 *dest; + guint stride_in, stride_out; + guint c_height, c_width, line; - /* FIXME: this is unlikely to be right stride-wise and offset-wise */ -static GstBuffer * -crop_copy_i422_buffer (GstMpeg2dec * mpeg2dec, GstBuffer * input) -{ - GstBuffer *outbuf; - guint8 *in_data, *out_data; - guint line; + src = + GST_BUFFER_DATA (inbuf) + + gst_video_format_get_component_offset (dec->format, c, + dec->decoded_width, dec->decoded_height); + dest = + GST_BUFFER_DATA (outbuf) + + gst_video_format_get_component_offset (dec->format, c, dec->width, + dec->height); + stride_out = gst_video_format_get_row_stride (dec->format, c, dec->width); + stride_in = + gst_video_format_get_row_stride (dec->format, c, dec->decoded_width); + c_height = + gst_video_format_get_component_height (dec->format, c, dec->height); + c_width = gst_video_format_get_component_width (dec->format, c, dec->width); - outbuf = gst_buffer_new_and_alloc (mpeg2dec->width * mpeg2dec->height * 2); - - /* Copy Y first */ - in_data = GST_BUFFER_DATA (input); - out_data = GST_BUFFER_DATA (outbuf); - for (line = 0; line < mpeg2dec->height; line++) { - memcpy (out_data, in_data, mpeg2dec->width); - out_data += mpeg2dec->width; - in_data += mpeg2dec->decoded_width; - } - - /* Now copy U & V */ - in_data = GST_BUFFER_DATA (input) - + mpeg2dec->decoded_width * mpeg2dec->decoded_height; - for (line = 0; line < mpeg2dec->height; line++) { - memcpy (out_data, in_data, mpeg2dec->width / 2); - memcpy (out_data + mpeg2dec->width * mpeg2dec->height / 2, - in_data + mpeg2dec->decoded_width * mpeg2dec->decoded_height / 2, - mpeg2dec->width / 2); - out_data += mpeg2dec->width / 2; - in_data += mpeg2dec->decoded_width / 2; - } - - return outbuf; -} - -static gboolean -crop_buffer (GstMpeg2dec * mpeg2dec, GstBuffer ** buf) -{ - gboolean result = TRUE; - GstBuffer *input = *buf; - GstBuffer *outbuf; - - /*We crop only if the target region is smaller than the input one */ - if ((mpeg2dec->decoded_width > mpeg2dec->width) || - (mpeg2dec->decoded_height > mpeg2dec->height)) { - /* If we don't know about the format, we just return the original - * buffer. - */ - if (mpeg2dec->format == MPEG2DEC_FORMAT_I422 || - mpeg2dec->format == MPEG2DEC_FORMAT_I420 || - mpeg2dec->format == MPEG2DEC_FORMAT_YV12) { - /*FIXME: I have tried to use gst_buffer_copy_on_write, but it - * still have some artifact, so I'me allocating new buffer - * for each frame decoded... - */ - if (mpeg2dec->format == MPEG2DEC_FORMAT_I422) { - outbuf = crop_copy_i422_buffer (mpeg2dec, input); - } else { - outbuf = crop_copy_i420_buffer (mpeg2dec, input); - } - - GST_DEBUG ("cropping buffer"); - - gst_buffer_set_caps (outbuf, GST_PAD_CAPS (mpeg2dec->srcpad)); - gst_buffer_copy_metadata (outbuf, input, - GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS); - gst_buffer_unref (input); - - *buf = outbuf; - result = TRUE; + for (line = 0; line < c_height; line++) { + memcpy (dest, src, c_width); + dest += stride_out; + src += stride_in; } } - return result; + gst_buffer_set_caps (outbuf, GST_PAD_CAPS (dec->srcpad)); + gst_buffer_copy_metadata (outbuf, inbuf, + GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS); + + gst_buffer_unref (*buf); + *buf = outbuf; + + return GST_FLOW_OK; } static GstFlowReturn @@ -524,7 +443,8 @@ gst_mpeg2dec_alloc_buffer (GstMpeg2dec * mpeg2dec, gint64 offset, /* ERRORS */ no_buffer: { - if (ret != GST_FLOW_WRONG_STATE && ret != GST_FLOW_UNEXPECTED) { + if (ret != GST_FLOW_WRONG_STATE && ret != GST_FLOW_UNEXPECTED && + ret != GST_FLOW_NOT_LINKED) { GST_ELEMENT_ERROR (mpeg2dec, RESOURCE, FAILED, (NULL), ("Failed to allocate memory for buffer, reason %s", gst_flow_get_name (ret))); @@ -550,47 +470,28 @@ gst_mpeg2dec_negotiate_format (GstMpeg2dec * mpeg2dec) if (sequence->width != sequence->chroma_width && sequence->height != sequence->chroma_height) { - - fourcc = GST_STR_FOURCC ("I420"); - mpeg2dec->format = MPEG2DEC_FORMAT_I420; - mpeg2dec->size = - I420_SIZE (mpeg2dec->decoded_width, mpeg2dec->decoded_height); - - mpeg2dec->u_offs = - I420_U_OFFSET (mpeg2dec->decoded_width, mpeg2dec->decoded_height); - mpeg2dec->v_offs = - I420_V_OFFSET (mpeg2dec->decoded_width, mpeg2dec->decoded_height); - + mpeg2dec->format = GST_VIDEO_FORMAT_I420; } else if ((sequence->width == sequence->chroma_width && sequence->height != sequence->chroma_height) || (sequence->width != sequence->chroma_width && sequence->height == sequence->chroma_height)) { - gint halfsize; - - fourcc = GST_STR_FOURCC ("Y42B"); - mpeg2dec->format = MPEG2DEC_FORMAT_I422; - halfsize = mpeg2dec->decoded_width * mpeg2dec->decoded_height; - mpeg2dec->size = halfsize * 2; - mpeg2dec->u_offs = halfsize; - mpeg2dec->v_offs = halfsize + (halfsize / 2); + mpeg2dec->format = GST_VIDEO_FORMAT_Y42B; } else { - gint size; - - size = mpeg2dec->decoded_width * mpeg2dec->decoded_height; - - fourcc = GST_STR_FOURCC ("Y444"); - mpeg2dec->format = MPEG2DEC_FORMAT_Y444; - mpeg2dec->size = size * 3; - mpeg2dec->u_offs = size; - mpeg2dec->v_offs = size * 2; + mpeg2dec->format = GST_VIDEO_FORMAT_Y444; } + fourcc = gst_video_format_to_fourcc (mpeg2dec->format); + mpeg2dec->size = gst_video_format_get_size (mpeg2dec->format, + mpeg2dec->decoded_width, mpeg2dec->decoded_height); + mpeg2dec->u_offs = gst_video_format_get_component_offset (mpeg2dec->format, 1, + mpeg2dec->decoded_width, mpeg2dec->decoded_height); + mpeg2dec->v_offs = gst_video_format_get_component_offset (mpeg2dec->format, 2, + mpeg2dec->decoded_width, mpeg2dec->decoded_height); + if (mpeg2dec->pixel_width == 0 || mpeg2dec->pixel_height == 0) { - GValue par = { 0, } - , dar = { - 0,} - , dimensions = { - 0,}; + GValue par = { 0, }; + GValue dar = { 0, }; + GValue dimensions = { 0, }; /* assume display aspect ratio (DAR) of 4:3 */ g_value_init (&dar, GST_TYPE_FRACTION); @@ -706,7 +607,7 @@ handle_sequence (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) init_dummybuf (mpeg2dec); - /* Pump in some null buffers, because otherwise libmpeg2 doesn't + /* Pump in some null buffers, because otherwise libmpeg2 doesn't * initialise the discard_fbuf->id */ mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL); mpeg2_set_buf (mpeg2dec->decoder, mpeg2dec->dummybuf, NULL); @@ -981,14 +882,13 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) picture->nb_fields, GST_BUFFER_OFFSET (outbuf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf))); -#ifndef GST_DISABLE_INDEX if (mpeg2dec->index) { gst_index_add_association (mpeg2dec->index, mpeg2dec->index_id, - (key_frame ? GST_ASSOCIATION_FLAG_KEY_UNIT : 0), + (key_frame ? GST_ASSOCIATION_FLAG_KEY_UNIT : + GST_ASSOCIATION_FLAG_DELTA_UNIT), GST_FORMAT_BYTES, GST_BUFFER_OFFSET (outbuf), GST_FORMAT_TIME, GST_BUFFER_TIMESTAMP (outbuf), 0); } -#endif if (picture->flags & PIC_FLAG_SKIP) goto skip; @@ -1025,8 +925,14 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) * array of buffers */ gst_buffer_ref (outbuf); - /* do cropping if needed */ - crop_buffer (mpeg2dec, &outbuf); + /* do cropping if the target region is smaller than the input one */ + if (mpeg2dec->decoded_width != mpeg2dec->width || + mpeg2dec->decoded_height != mpeg2dec->height) { + GST_DEBUG_OBJECT (mpeg2dec, "cropping buffer"); + ret = gst_mpeg2dec_crop_buffer (mpeg2dec, &outbuf); + if (ret != GST_FLOW_OK) + goto done; + } if (mpeg2dec->segment.rate >= 0.0) { /* forward: push right away */ @@ -1048,6 +954,8 @@ handle_slice (GstMpeg2dec * mpeg2dec, const mpeg2_info_t * info) ret = GST_FLOW_OK; } +done: + return ret; /* special cases */ @@ -1333,11 +1241,9 @@ gst_mpeg2dec_sink_event (GstPad * pad, GstEvent * event) break; } case GST_EVENT_EOS: -#ifndef GST_DISABLE_INDEX if (mpeg2dec->index && mpeg2dec->closed) { gst_index_commit (mpeg2dec->index, mpeg2dec->index_id); } -#endif ret = gst_pad_push_event (mpeg2dec->srcpad, event); break; default: @@ -1630,7 +1536,6 @@ gst_mpeg2dec_get_event_masks (GstPad * pad) } #endif -#ifndef GST_DISABLE_INDEX static gboolean index_seek (GstPad * pad, GstEvent * event) { @@ -1697,7 +1602,6 @@ index_seek (GstPad * pad, GstEvent * event) } return FALSE; } -#endif static gboolean normal_seek (GstPad * pad, GstEvent * event) @@ -1783,11 +1687,9 @@ gst_mpeg2dec_src_event (GstPad * pad, GstEvent * event) case GST_EVENT_SEEK:{ gst_event_ref (event); if (!(res = gst_pad_push_event (mpeg2dec->sinkpad, event))) { -#ifndef GST_DISABLE_INDEX if (mpeg2dec->index) res = index_seek (pad, event); else -#endif res = normal_seek (pad, event); } gst_event_unref (event); diff --git a/ext/mpeg2dec/gstmpeg2dec.h b/ext/mpeg2dec/gstmpeg2dec.h index c7a31580d3..43ba42d669 100644 --- a/ext/mpeg2dec/gstmpeg2dec.h +++ b/ext/mpeg2dec/gstmpeg2dec.h @@ -46,15 +46,6 @@ typedef struct _GstMpeg2dec GstMpeg2dec; typedef struct _GstMpeg2decClass GstMpeg2decClass; typedef enum -{ - MPEG2DEC_FORMAT_NONE, - MPEG2DEC_FORMAT_I422, - MPEG2DEC_FORMAT_I420, - MPEG2DEC_FORMAT_YV12, - MPEG2DEC_FORMAT_Y444 -} Mpeg2decFormat; - -typedef enum { MPEG2DEC_DISC_NONE = 0, MPEG2DEC_DISC_NEW_PICTURE, @@ -87,7 +78,7 @@ struct _GstMpeg2dec { GstSegment segment; /* video state */ - Mpeg2decFormat format; + GstVideoFormat format; gint width; gint height; gint decoded_width; @@ -104,17 +95,15 @@ struct _GstMpeg2dec { gint v_offs; guint8 *dummybuf[4]; - + guint64 offset; gint fps_n; gint fps_d; gboolean need_sequence; -#ifndef GST_DISABLE_INDEX GstIndex *index; gint index_id; -#endif - + gint error_count; gboolean can_allocate_aligned; diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c index a99a8e1946..4617f23237 100644 --- a/ext/x264/gstx264enc.c +++ b/ext/x264/gstx264enc.c @@ -46,6 +46,17 @@ * applied, followed by the user-set properties, fast first pass restrictions and * finally the profile restrictions. * + * Some settings, including the default settings, may lead to quite + * some latency (i.e. frame buffering) in the encoder. This may cause problems + * with pipeline stalling in non-trivial pipelines, because the encoder latency + * is often considerably higher than the default size of a simple queue + * element. Such problems are caused by one of the queues in the other + * non-x264enc streams/branches filling up and blocking upstream. They can + * be fixed by relaxing the default time/size/buffer limits on the queue + * elements in the non-x264 branches, or using a (single) multiqueue element + * for all branches. Also see the last example below. + * + * * * Example pipeline * |[ @@ -66,6 +77,14 @@ * constant quality at around Q25 using the 'medium' speed/quality preset and * restricting the options used so that the output is H.264 Baseline Profile * compliant and finally multiplexing the output in Quicktime mov format. + * |[ + * gst-launch -v videotestsrc num-buffers=1000 ! tee name=t ! queue ! xvimagesink \ + * t. ! queue ! x264enc rc-lookahead=5 ! fakesink + * ]| This example pipeline will encode a test video source to H264 while + * displaying the input material at the same time. As mentioned above, + * specific settings are needed in this case to avoid pipeline stalling. + * Depending on goals and context, other approaches are possible, e.g. + * tune=zerolatency might be configured, or queue sizes increased. * */ @@ -357,7 +376,7 @@ gst_x264_enc_tune_get_type (void) static GType tune_type = 0; if (!tune_type) { - tune_type = g_flags_register_static ("GstX264EncTune", tune_types); + tune_type = g_flags_register_static ("GstX264EncTune", tune_types + 1); } return tune_type; } @@ -430,7 +449,7 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw-yuv, " - "format = (fourcc) I420, " + "format = (fourcc) { I420, YV12 }, " "framerate = (fraction) [0, MAX], " "width = (int) [ 16, MAX ], " "height = (int) [ 16, MAX ]") ); @@ -559,7 +578,7 @@ gst_x264_enc_class_init (GstX264EncClass * klass) g_object_class_install_property (gobject_class, ARG_VBV_BUF_CAPACITY, g_param_spec_uint ("vbv-buf-capacity", "VBV buffer capacity", "Size of the VBV buffer in milliseconds", - 300, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT, + 0, 10000, ARG_VBV_BUF_CAPACITY_DEFAULT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); #ifdef X264_PRESETS @@ -1365,15 +1384,14 @@ static gboolean gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) { GstX264Enc *encoder = GST_X264_ENC (GST_OBJECT_PARENT (pad)); + GstVideoFormat format; gint width, height; gint fps_num, fps_den; gint par_num, par_den; gint i; /* get info from caps */ - /* only I420 supported for now; so apparently claims x264enc ? */ - if (!gst_video_format_parse_caps (caps, &encoder->format, &width, &height) || - encoder->format != GST_VIDEO_FORMAT_I420) + if (!gst_video_format_parse_caps (caps, &format, &width, &height)) return FALSE; if (!gst_video_parse_caps_framerate (caps, &fps_num, &fps_den)) return FALSE; @@ -1382,8 +1400,8 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) par_den = 1; } - /* If the encoder is initialized, do not - reinitialize it again if not necessary */ + /* If the encoder is initialized, do not reinitialize it again if not + * necessary */ if (encoder->x264enc) { if (width == encoder->width && height == encoder->height && fps_num == encoder->fps_num && fps_den == encoder->fps_den @@ -1397,6 +1415,7 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) } /* store input description */ + encoder->format = format; encoder->width = width; encoder->height = height; encoder->fps_num = fps_num; @@ -1404,11 +1423,12 @@ gst_x264_enc_sink_set_caps (GstPad * pad, GstCaps * caps) encoder->par_num = par_num; encoder->par_den = par_den; - /* prepare a cached image description */ + /* prepare a cached image description */ encoder->image_size = gst_video_format_get_size (encoder->format, width, height); for (i = 0; i < 3; ++i) { - /* only offsets now, is shifted later */ + /* only offsets now, is shifted later. Offsets will be for Y, U, V so we + * can just feed YV12 as I420 to the decoder later */ encoder->offset[i] = gst_video_format_get_component_offset (encoder->format, i, width, height); encoder->stride[i] = gst_video_format_get_row_stride (encoder->format, @@ -1475,8 +1495,23 @@ gst_x264_enc_sink_event (GstPad * pad, GstEvent * event) case GST_EVENT_EOS: gst_x264_enc_flush_frames (encoder, TRUE); break; + case GST_EVENT_TAG:{ + GstTagList *tags = NULL; + + event = + GST_EVENT (gst_mini_object_make_writable (GST_MINI_OBJECT (event))); + + gst_event_parse_tag (event, &tags); + /* drop codec/video-codec and replace encoder/encoder-version */ + gst_tag_list_remove_tag (tags, GST_TAG_VIDEO_CODEC); + gst_tag_list_remove_tag (tags, GST_TAG_CODEC); + gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_ENCODER, "x264", + GST_TAG_ENCODER_VERSION, X264_BUILD, NULL); + /* push is done below */ + break; /* no flushing if flush received, * buffers in encoder are considered (in the) past */ + } case GST_EVENT_CUSTOM_DOWNSTREAM:{ const GstStructure *s; s = gst_event_get_structure (event); diff --git a/gst-plugins-ugly.doap b/gst-plugins-ugly.doap index fdc961ffc6..51f99b1d39 100644 --- a/gst-plugins-ugly.doap +++ b/gst-plugins-ugly.doap @@ -33,6 +33,17 @@ might be widely known to present patent problems. + + + 0.10.17 + 0.10 + Raised by Wolves + 2011-01-21 + + + + + 0.10.16 diff --git a/gst/asfdemux/asfheaders.c b/gst/asfdemux/asfheaders.c index fdbf3d00da..ae0763919e 100644 --- a/gst/asfdemux/asfheaders.c +++ b/gst/asfdemux/asfheaders.c @@ -151,6 +151,13 @@ const ASFGuidHash asf_object_guids[] = { {ASF_OBJ_MARKER, "ASF_OBJ_MARKER", {0xf487cd01, 0x11cfa951, 0xc000e68e, 0x6553200c} }, + /* This guid is definitely used for encryption (mentioned in MS smooth + * streaming docs) in new PlayReady (c) (tm) (wtf) system, but I haven't + * found a proper name for it. + * (Edward Jan 11 2011).*/ + {ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT, "ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT", + {0x9a04f079, 0x42869840, 0x5be692ab, 0x955f88e0} + }, {ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED", {0, 0, 0, 0} } diff --git a/gst/asfdemux/asfheaders.h b/gst/asfdemux/asfheaders.h index ff43fa6f8a..db1101a57d 100644 --- a/gst/asfdemux/asfheaders.h +++ b/gst/asfdemux/asfheaders.h @@ -67,7 +67,8 @@ typedef enum { ASF_OBJ_EXT_CONTENT_ENCRYPTION, ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, ASF_OBJ_SCRIPT_COMMAND, - ASF_OBJ_MARKER + ASF_OBJ_MARKER, + ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT } AsfObjectID; typedef enum { diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c index 2b16a3f602..b56c81a798 100644 --- a/gst/asfdemux/asfpacket.c +++ b/gst/asfdemux/asfpacket.c @@ -226,8 +226,10 @@ asf_payload_parse_replicated_data_extensions (AsfStream * stream, switch (ext->id) { case ASF_PAYLOAD_EXTENSION_DURATION: if (G_LIKELY (ext->len == 2)) { - payload->duration = - GST_READ_UINT16_LE (payload->rep_data + off) * GST_MSECOND; + guint16 tdur = GST_READ_UINT16_LE (payload->rep_data + off); + /* packet durations of 1ms are mostly invalid */ + if (tdur != 1) + payload->duration = tdur * GST_MSECOND; } else { GST_WARNING ("unexpected DURATION extensions len %u", ext->len); } diff --git a/gst/asfdemux/gstasfdemux.c b/gst/asfdemux/gstasfdemux.c index 88bff47bf7..002002789b 100644 --- a/gst/asfdemux/gstasfdemux.c +++ b/gst/asfdemux/gstasfdemux.c @@ -2289,7 +2289,7 @@ gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data, flags = gst_asf_demux_get_uint16 (&data, &size); stream_id = flags & 0x7f; - is_encrypted = ! !((flags & 0x8000) << 15); + is_encrypted = !!((flags & 0x8000) << 15); unknown = gst_asf_demux_get_uint32 (&data, &size); GST_DEBUG_OBJECT (demux, "Found stream %u, time_offset=%" GST_TIME_FORMAT, @@ -2895,8 +2895,8 @@ gst_asf_demux_process_file (GstASFDemux * demux, guint8 * data, guint64 size) max_pktsize = gst_asf_demux_get_uint32 (&data, &size); min_bitrate = gst_asf_demux_get_uint32 (&data, &size); - demux->broadcast = ! !(flags & 0x01); - demux->seekable = ! !(flags & 0x02); + demux->broadcast = !!(flags & 0x01); + demux->seekable = !!(flags & 0x02); GST_DEBUG_OBJECT (demux, "min_pktsize = %u", min_pktsize); GST_DEBUG_OBJECT (demux, "flags::broadcast = %d", demux->broadcast); @@ -3653,6 +3653,7 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data, case ASF_OBJ_CONTENT_ENCRYPTION: case ASF_OBJ_EXT_CONTENT_ENCRYPTION: case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT: + case ASF_OBJ_UNKNOWN_ENCRYPTION_OBJECT: goto error_encrypted; case ASF_OBJ_CONCEAL_NONE: case ASF_OBJ_HEAD2: diff --git a/gst/mpegaudioparse/gstxingmux.c b/gst/mpegaudioparse/gstxingmux.c index e3ee8912db..4f19d5758d 100644 --- a/gst/mpegaudioparse/gstxingmux.c +++ b/gst/mpegaudioparse/gstxingmux.c @@ -165,7 +165,7 @@ parse_header (guint32 header, guint * ret_size, guint * ret_spf, bitrate = (header >> 12) & 0xF; bitrate = mp3types_bitrates[lsf][layer - 1][bitrate] * 1000; if (bitrate == 0) - return 0; + return FALSE; samplerate = (header >> 10) & 0x3; samplerate = mp3types_freqs[lsf + mpg25][samplerate]; diff --git a/gst/mpegstream/gstdvddemux.c b/gst/mpegstream/gstdvddemux.c index 8faadea4cb..4c53fbfa6f 100644 --- a/gst/mpegstream/gstdvddemux.c +++ b/gst/mpegstream/gstdvddemux.c @@ -32,6 +32,8 @@ */ #define PTM_DISCONT_ADJUST (0.3 * GST_SECOND) #define INITIAL_END_PTM (-1) +#define MAX_GAP ( 3 * GST_SECOND / 2 ) +#define MAX_GAP_TOLERANCE ( GST_SECOND / 20 ) GST_DEBUG_CATEGORY_STATIC (gstdvddemux_debug); #define GST_CAT_DEFAULT (gstdvddemux_debug) @@ -439,8 +441,8 @@ gst_dvd_demux_handle_dvd_event (GstDVDDemux * dvd_demux, GstEvent * event) gst_element_no_more_pads (GST_ELEMENT (dvd_demux)); /* Keep video/audio/subtitle pads within 1/2 sec of the SCR */ - mpeg_demux->max_gap = GST_SECOND / 2; - mpeg_demux->max_gap_tolerance = GST_SECOND / 20; + mpeg_demux->max_gap = MAX_GAP; + mpeg_demux->max_gap_tolerance = MAX_GAP_TOLERANCE; } else { GST_DEBUG_OBJECT (dvd_demux, "dvddemux Forwarding DVD event %s to all pads", event_type); @@ -1179,8 +1181,8 @@ gst_dvd_demux_reset (GstDVDDemux * dvd_demux) dvd_demux->mpeg_version = 0; /* Reset max_gap handling */ - mpeg_demux->max_gap = 0.5 * GST_SECOND; - mpeg_demux->max_gap_tolerance = 0.05 * GST_SECOND; + mpeg_demux->max_gap = MAX_GAP; + mpeg_demux->max_gap_tolerance = MAX_GAP_TOLERANCE; } static void diff --git a/gst/mpegstream/gstmpegdemux.c b/gst/mpegstream/gstmpegdemux.c index 142a038fdb..5264597cf8 100644 --- a/gst/mpegstream/gstmpegdemux.c +++ b/gst/mpegstream/gstmpegdemux.c @@ -1030,9 +1030,11 @@ gst_mpeg_demux_send_subbuffer (GstMPEGDemux * mpeg_demux, outstream->scr_offs = 0; if (mpeg_demux->index != NULL) { - /* Register a new index position. */ + /* Register a new index position. + * FIXME: check for keyframes + */ gst_index_add_association (mpeg_demux->index, - outstream->index_id, 0, + outstream->index_id, GST_ASSOCIATION_FLAG_DELTA_UNIT, GST_FORMAT_BYTES, GST_BUFFER_OFFSET (buffer), GST_FORMAT_TIME, timestamp, 0); } diff --git a/gst/realmedia/rademux.c b/gst/realmedia/rademux.c index 6cc9bd1fa3..5626aec23d 100644 --- a/gst/realmedia/rademux.c +++ b/gst/realmedia/rademux.c @@ -506,13 +506,8 @@ gst_real_audio_demux_parse_data (GstRealAudioDemux * demux) const guint8 *data; GstBuffer *buf = NULL; - ret = gst_pad_alloc_buffer_and_set_caps (demux->srcpad, - GST_BUFFER_OFFSET_NONE, unit_size, GST_PAD_CAPS (demux->srcpad), &buf); - - if (ret != GST_FLOW_OK) { - GST_DEBUG_OBJECT (demux, "pad_alloc flow: %s", gst_flow_get_name (ret)); - break; - } + buf = gst_buffer_new_and_alloc (unit_size); + gst_buffer_set_caps (buf, GST_PAD_CAPS (demux->srcpad)); data = gst_adapter_peek (demux->adapter, unit_size); memcpy (GST_BUFFER_DATA (buf), data, unit_size); diff --git a/gst/realmedia/rmdemux.c b/gst/realmedia/rmdemux.c index 91070c1149..e6b8ec6ddc 100644 --- a/gst/realmedia/rmdemux.c +++ b/gst/realmedia/rmdemux.c @@ -1918,7 +1918,7 @@ gst_rmdemux_stream_clear_cached_subpackets (GstRMDemux * rmdemux, static GstFlowReturn gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream) { - GstFlowReturn ret; + GstFlowReturn ret = GST_FLOW_ERROR; GstBuffer *outbuf; guint packet_size = stream->packet_size; guint height = stream->subpackets->len; @@ -1930,12 +1930,8 @@ gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream) GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size, leaf_size, height); - ret = gst_pad_alloc_buffer_and_set_caps (stream->pad, - GST_BUFFER_OFFSET_NONE, height * packet_size, - GST_PAD_CAPS (stream->pad), &outbuf); - - if (ret != GST_FLOW_OK) - goto done; + outbuf = gst_buffer_new_and_alloc (height * packet_size); + gst_buffer_set_caps (outbuf, GST_PAD_CAPS (stream->pad)); for (p = 0; p < height; ++p) { GstBuffer *b = g_ptr_array_index (stream->subpackets, p); @@ -1976,8 +1972,6 @@ gst_rmdemux_descramble_audio (GstRMDemux * rmdemux, GstRMDemuxStream * stream) gst_buffer_unref (outbuf); -done: - gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream); return ret; @@ -2061,12 +2055,8 @@ gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux, GST_LOG ("packet_size = %u, leaf_size = %u, height= %u", packet_size, stream->leaf_size, height); - ret = gst_pad_alloc_buffer_and_set_caps (stream->pad, - GST_BUFFER_OFFSET_NONE, height * packet_size, - GST_PAD_CAPS (stream->pad), &outbuf); - - if (ret != GST_FLOW_OK) - goto done; + outbuf = gst_buffer_new_and_alloc (height * packet_size); + gst_buffer_set_caps (outbuf, GST_PAD_CAPS (stream->pad)); for (p = 0; p < height; ++p) { GstBuffer *b = g_ptr_array_index (stream->subpackets, p); @@ -2091,8 +2081,6 @@ gst_rmdemux_descramble_sipr_audio (GstRMDemux * rmdemux, gst_buffer_set_caps (outbuf, GST_PAD_CAPS (stream->pad)); ret = gst_pad_push (stream->pad, outbuf); -done: - gst_rmdemux_stream_clear_cached_subpackets (rmdemux, stream); return ret; @@ -2462,6 +2450,10 @@ gst_rmdemux_parse_video_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream, stream->discont = FALSE; } + if (!key) { + GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DELTA_UNIT); + } + ret = gst_pad_push (stream->pad, out); ret = gst_rmdemux_combine_flows (rmdemux, stream, ret); if (ret != GST_FLOW_OK) @@ -2501,7 +2493,7 @@ gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream, GstBuffer * in, guint offset, guint16 version, GstClockTime timestamp, gboolean key) { - GstFlowReturn ret, cret; + GstFlowReturn ret; GstBuffer *buffer; const guint8 *data; guint size; @@ -2509,12 +2501,8 @@ gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream, data = GST_BUFFER_DATA (in) + offset; size = GST_BUFFER_SIZE (in) - offset; - ret = gst_pad_alloc_buffer_and_set_caps (stream->pad, - GST_BUFFER_OFFSET_NONE, size, GST_PAD_CAPS (stream->pad), &buffer); - - cret = gst_rmdemux_combine_flows (rmdemux, stream, ret); - if (ret != GST_FLOW_OK) - goto alloc_failed; + buffer = gst_buffer_new_and_alloc (size); + gst_buffer_set_caps (buffer, GST_PAD_CAPS (stream->pad)); memcpy (GST_BUFFER_DATA (buffer), (guint8 *) data, size); @@ -2548,14 +2536,6 @@ gst_rmdemux_parse_audio_packet (GstRMDemux * rmdemux, GstRMDemuxStream * stream, gst_buffer_unref (in); return ret; - - /* ERRORS */ -alloc_failed: - { - GST_DEBUG_OBJECT (rmdemux, "pad alloc returned %d", ret); - gst_buffer_unref (in); - return cret; - } } static GstFlowReturn diff --git a/gst/realmedia/rmutils.c b/gst/realmedia/rmutils.c index ef752c6957..6ae68786e2 100644 --- a/gst/realmedia/rmutils.c +++ b/gst/realmedia/rmutils.c @@ -145,7 +145,7 @@ gst_rm_utils_descramble_dnet_buffer (GstBuffer * buf) static void gst_rm_utils_swap_nibbles (guint8 * data, gint idx1, gint idx2, gint len) { - guint8 *d1, *d2, tmp1, tmp2, tmp1n, tmp2n; + guint8 *d1, *d2, tmp1 = 0, tmp2, tmp1n, tmp2n; if ((idx2 & 1) && !(idx1 & 1)) { /* align destination to a byte by swapping the indexes */ diff --git a/po/bg.po b/po/bg.po index 3d955733c0..3625c1c895 100644 --- a/po/bg.po +++ b/po/bg.po @@ -1,17 +1,18 @@ # Bulgarian translation of gst-plugins-ugly. -# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gst-plugins-ugly package. -# Alexander Shopov , 2007, 2008, 2009. +# Alexander Shopov , 2007, 2008, 2009, 2010. +# # msgid "" msgstr "" -"Project-Id-Version: gst-plugins-ugly 0.10.11.2\n" +"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2010-10-15 15:20+0100\n" -"PO-Revision-Date: 2009-06-15 07:48+0300\n" -"Last-Translator: Alexander Shopov \n" +"POT-Creation-Date: 2011-01-07 14:34+0000\n" +"PO-Revision-Date: 2010-11-04 14:22+0200\n" +"Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" -"Language: bg\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,19 +32,19 @@ msgstr "DVD-то не може да бъде отворено" #, c-format msgid "Could not open DVD title %d" -msgstr "Част %d от DVD-то не може да бъде отворена" +msgstr "Заглавната част %d от DVD-то не може да бъде отворена" #, c-format msgid "Failed to go to chapter %d of DVD title %d" -msgstr "Не може да се премине към раздел %d от част %d на DVD-то" +msgstr "Не може да се премине към раздел %d от заглавната част %d на DVD-то" #, c-format msgid "" "Could not open DVD title %d. Interactive titles are not supported by this " "element" msgstr "" -"Част %d от DVD-то не може да бъде отворена. Интерактивни части не се " -"поддържат от този елемент" +"Заглавната част %d от DVD-то не може да бъде отворена. Интерактивни части не " +"се поддържат от този елемент" msgid "" "Could not read DVD. This may be because the DVD is encrypted and a DVD " @@ -75,15 +76,3 @@ msgstr "Потокът не съдържа данни." msgid "Internal data stream error." msgstr "Вътрешна грешка в потока от данни." - -#~ msgid "Invalid title information on DVD." -#~ msgstr "Неправилна заглавна информация в DVD." - -#~ msgid "Could not read title information for DVD." -#~ msgstr "Заглавната информация в DVD не може да бъде прочетена." - -#~ msgid "Failed to open DVD device '%s'." -#~ msgstr "Устройството за DVD — „%s“, не може да бъде отворено." - -#~ msgid "Failed to set PGC based seeking." -#~ msgstr "Не може да се зададе търсене на базата на PGC." diff --git a/po/ca.po b/po/ca.po index e2d51e8ef0..fbab84e1d9 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1,48 +1,49 @@ -# Catalan translation for GStreamer. -# Copyright © 2004 Free Software Foundation, Inc. -# This file is distributed under the same licence as the gst-plugins package. -# Jordi Mallach , 2004. +# Catalan translation for gstreamer. +# Copyright © 2004, 2005, 2010 Free Software Foundation, Inc. +# This file is put in the public domain. +# Jordi Mallach , 2004, 2005, 2010. # msgid "" msgstr "" -"Project-Id-Version: gst-plugins 0.8.3\n" +"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2010-10-15 15:20+0100\n" -"PO-Revision-Date: 2004-08-05 15:48+0200\n" +"POT-Creation-Date: 2011-01-07 14:34+0000\n" +"PO-Revision-Date: 2010-11-04 23:22+0100\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n!=1;\n" -#, fuzzy msgid "Could not read from CD." -msgstr "No s'ha pogut escriure al fitxer «%s»." +msgstr "No s'ha pogut llegir des del CD." msgid "Could not open CD device for reading." -msgstr "No s'ha pogut obrir el dispositiu de CD per a la lectura." +msgstr "No s'ha pogut obrir el dispositiu de CD per a llegir." -#, fuzzy msgid "Disc is not an Audio CD." -msgstr "El dispositiu no està obert." +msgstr "El disc no és un CD d'àudio." msgid "Could not open DVD" -msgstr "" +msgstr "No s'ha pogut obrir el DVD" -#, fuzzy, c-format +#, c-format msgid "Could not open DVD title %d" -msgstr "No s'ha pogut tancar el fitxer vfs «%s»." +msgstr "No s'ha pogut obrir el títol %d del DVD" #, c-format msgid "Failed to go to chapter %d of DVD title %d" -msgstr "" +msgstr "No s'ha pogut anar al capítol %d del títol %d del DVD." #, c-format msgid "" "Could not open DVD title %d. Interactive titles are not supported by this " "element" msgstr "" +"No s'ha pogut obrir el títol %d del DVD. Els títols interactius no són " +"implementats per aquest element" msgid "" "Could not read DVD. This may be because the DVD is encrypted and a DVD " @@ -51,208 +52,28 @@ msgstr "" #, fuzzy msgid "Could not read DVD." -msgstr "No s'ha pogut escriure al fitxer «%s»." +msgstr "No s'ha pogut obrir el DVD" msgid "Failed to configure LAME encoder. Check your encoding parameters." msgstr "" +"No s'ha pogut configurar el codificador LAME. Comproveu els paràmetres de " +"codificació." #, c-format msgid "" "The requested bitrate %d kbit/s for property '%s' is not allowed. The " "bitrate was changed to %d kbit/s." msgstr "" +"La taxa de bits %d kbit/s per a la propietat «%s» no és permesa. S'ha " +"canviat la taxa de bits a %d kbit/s." msgid "Failed to configure TwoLAME encoder. Check your encoding parameters." msgstr "" +"No s'ha pogut configurar el codificador TwoLAME. Comproveu els paràmetres de " +"codificació." msgid "This stream contains no data." -msgstr "" +msgstr "Aquest flux no conté dades." msgid "Internal data stream error." -msgstr "" - -#, fuzzy -#~ msgid "Could not read title information for DVD." -#~ msgstr "No s'ha pogut escriure al fitxer «%s»." - -#~ msgid "Could not open file \"%s\" for writing." -#~ msgstr "No s'ha pogut obrir el fitxer «%s» per a l'escriptura." - -#~ msgid "Error closing file \"%s\"." -#~ msgstr "S'ha produït un error en tancar el fitxer «%s»." - -#~ msgid "Could not open file \"%s\" for reading." -#~ msgstr "No s'ha pogut obrir el fitxer «%s» per a la lectura." - -#~ msgid "Could not open vfs file \"%s\" for reading." -#~ msgstr "No s'ha pogut obrir el fitxer vfs «%s» per a la lectura." - -#~ msgid "Could not open vfs file \"%s\" for writing: %s." -#~ msgstr "No s'ha pogut obrir el fitxer vfs «%s» per a l'escriptura: %s." - -#~ msgid "No filename given" -#~ msgstr "No s'ha donat cap nom de fitxer" - -#~ msgid "No filename specified." -#~ msgstr "No s'ha especificat cap nom de fitxer." - -#~ msgid "No or invalid input audio, AVI stream will be corrupt." -#~ msgstr "" -#~ "L'entrada d'àudio no existeix o és invàlida, el flux AVI serà corrupte." - -#~ msgid "" -#~ "The %s element could not be found. This element is essential for " -#~ "playback. Please install the right plug-in and verify that it works by " -#~ "running 'gst-inspect %s'" -#~ msgstr "" -#~ "No s'ha pogut trobar l'element %s. Aquest element és essencial per a la " -#~ "reproducció. Si us plau, instal·leu el connector adequat i verifiqueu que " -#~ "funciona correctament executant «gst-inspect %s»" - -#~ msgid "" -#~ "No usable colorspace element could be found.\n" -#~ "Please install one and restart." -#~ msgstr "" -#~ "No s'ha trobat cap element d'espai de color utilitzable.\n" -#~ "Si us plau, instal·leu un i reinicieu." - -#~ msgid "Could not open audio device \"%s\" for writing." -#~ msgstr "No s'ha pogut el dispositiu d'àudio «%s» per a l'escriptura." - -#~ msgid "Could not open control device \"%s\" for writing." -#~ msgstr "" -#~ "No s'ha pogut obrir el dispositiu de control «%s» per a l'escriptura." - -#~ msgid "Could not configure audio device \"%s\"." -#~ msgstr "No s'ha pogut configurar el dispositiu d'àudio «%s»." - -#~ msgid "Could not set audio device \"%s\" to %d Hz." -#~ msgstr "No s'ha pogut establir el dispositiu d'àudio «%s» a %d Hz." - -#~ msgid "Could not close audio device \"%s\"." -#~ msgstr "No s'ha pogut tancar el dispositiu d'àudio «%s»." - -#~ msgid "Could not close control device \"%s\"." -#~ msgstr "No s'ha pogut tancar el dispositiu de control «%s»." - -#~ msgid "Could not open video device \"%s\" for writing." -#~ msgstr "No s'ha pogut obrir el dispositiu de vídeo «%s» per a l'escriptura." - -#~ msgid "Could not close video device \"%s\"." -#~ msgstr "No s'ha pogut tancar el dispositiu de vídeo «%s»." - -#~ msgid "Could not write to device \"%s\"." -#~ msgstr "No s'ha pogut escriure al dispositiu «%s»." - -#~ msgid "OSS device \"%s\" is already in use by another program." -#~ msgstr "El dispositiu OSS «%s» ja està en ús per un altre programa." - -#~ msgid "Could not access device \"%s\", check its permissions." -#~ msgstr "" -#~ "No s'ha pogut accedir al dispositiu «%s», comproveu els seus permisos." - -#~ msgid "Device \"%s\" does not exist." -#~ msgstr "El dispositiu «%s» no existeix." - -#~ msgid "Could not open device \"%s\" for writing." -#~ msgstr "No s'ha pogut obrir el dispositiu «%s» per a l'escriptura." - -#~ msgid "Could not open device \"%s\" for reading." -#~ msgstr "No s'ha pogut obrir el dispositiu «%s» per a la lectura." - -#~ msgid "Your OSS device could not be probed correctly" -#~ msgstr "No s'ha pogut detectar el vostre dispositiu d'OSS correctament" - -#~ msgid "Volume" -#~ msgstr "Volum" - -#~ msgid "Bass" -#~ msgstr "Baixos" - -#~ msgid "Treble" -#~ msgstr "Aguts" - -#~ msgid "Synth" -#~ msgstr "Sintetitzador" - -#~ msgid "PCM" -#~ msgstr "PCM" - -#~ msgid "Speaker" -#~ msgstr "Altaveu" - -#~ msgid "Line-in" -#~ msgstr "Línia-entrada" - -#~ msgid "Microphone" -#~ msgstr "Micròfon" - -#~ msgid "CD" -#~ msgstr "CD" - -#~ msgid "Mixer" -#~ msgstr "Mesclador" - -#~ msgid "PCM-2" -#~ msgstr "PCM-2" - -#~ msgid "Record" -#~ msgstr "Enregistrament" - -#~ msgid "In-gain" -#~ msgstr "Ganància-entrada" - -#~ msgid "Out-gain" -#~ msgstr "Ganància-sortida" - -#~ msgid "Line-1" -#~ msgstr "Línia-1" - -#~ msgid "Line-2" -#~ msgstr "Línia-2" - -#~ msgid "Line-3" -#~ msgstr "Línia-3" - -#~ msgid "Digital-1" -#~ msgstr "Digital-1" - -#~ msgid "Digital-2" -#~ msgstr "Digital-2" - -#~ msgid "Digital-3" -#~ msgstr "Digital-3" - -#~ msgid "Phone-in" -#~ msgstr "Telèfon-entrada" - -#~ msgid "Phone-out" -#~ msgstr "Telèfon-sortida" - -#~ msgid "Video" -#~ msgstr "Vídeo" - -#~ msgid "Radio" -#~ msgstr "Ràdio" - -#~ msgid "Monitor" -#~ msgstr "Monitor" - -#~ msgid "No device specified." -#~ msgstr "No s'ha especificat cap dispositiu." - -#~ msgid "Could not open device \"%s\" for reading and writing." -#~ msgstr "" -#~ "No s'ha pogut obrir el dispositiu «%s» per a l'escriptura i lectura." - -#~ msgid "Device is open." -#~ msgstr "El dispositiu està obert." - -#~ msgid "Device \"%s\" is not a capture device." -#~ msgstr "El dispositiu «%s» no és un dispositiu de captura." - -#~ msgid "Could not get buffers from device \"%s\"." -#~ msgstr "No s'han pogut obtenir els búfers del dispositiu «%s»." - -#~ msgid "Could not get enough buffers from device \"%s\"." -#~ msgstr "No s'han pogut obtenir búfers suficients del dispositiu «%s»." +msgstr "S'ha produït un error intern de flux de dades." diff --git a/po/ru.po b/po/ru.po index 24d7653f01..58b28c1006 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,20 +1,24 @@ # Translation for gst-plugins-ugly messages to Russian # This file is put in the public domain. +# # Артём Попов , 2009. # Pavel Maryanov , 2009. -# +# Yuri Kozlov , 2011. msgid "" msgstr "" -"Project-Id-Version: gst-plugins-ugly 0.10.9.3\n" +"Project-Id-Version: gst-plugins-ugly 0.10.14.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2010-10-15 15:20+0100\n" -"PO-Revision-Date: 2009-02-12 14:26+0200\n" -"Last-Translator: Pavel Maryanov \n" +"POT-Creation-Date: 2011-01-07 14:34+0000\n" +"PO-Revision-Date: 2011-01-01 14:29+0300\n" +"Last-Translator: Yuri Kozlov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "Could not read from CD." msgstr "Не удалось прочесть CD." @@ -54,7 +58,7 @@ msgid "Could not read DVD." msgstr "Не удалось открыть DVD" msgid "Failed to configure LAME encoder. Check your encoding parameters." -msgstr "Не удалось настроить кодировщик LAME. Проверьте параметры сжатия." +msgstr "Не удалось настроить кодировщик LAME. Проверьте параметры кодирования." #, c-format msgid "" @@ -64,9 +68,9 @@ msgstr "" "Запрошенный битрейт в %d кбит/с для свойства «%s» недопустим. Битрейт был " "изменён на %d кбит/с." -#, fuzzy msgid "Failed to configure TwoLAME encoder. Check your encoding parameters." -msgstr "Не удалось настроить кодировщик LAME. Проверьте параметры сжатия." +msgstr "" +"Не удалось настроить кодировщик TwoLAME. Проверьте параметры кодирования." msgid "This stream contains no data." msgstr "Поток не содержит данных." diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index a7eaba9d32..23e9d87953 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -56,7 +56,8 @@ noinst_PROGRAMS = noinst_HEADERS = elements/xingmux_testdata.h -AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) +AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \ + -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS) # valgrind testing @@ -64,7 +65,7 @@ VALGRIND_TESTS_DISABLE = elements/x264enc SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-ugly.supp -elements_cmmldec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) -elements_cmmlenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) +elements_cmmldec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) +elements_cmmlenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(AM_CFLAGS) EXTRA_DIST = gst-plugins-ugly.supp diff --git a/tests/check/pipelines/lame.c b/tests/check/pipelines/lame.c index ea7b52a040..943219b7e6 100644 --- a/tests/check/pipelines/lame.c +++ b/tests/check/pipelines/lame.c @@ -65,6 +65,47 @@ GST_START_TEST (test_format) GST_END_TEST; +GST_START_TEST (test_caps_proxy) +{ + GstElement *bin; + GstPad *pad; + gchar *pipe_str; + GstBuffer *buffer; + GError *error = NULL; + + pipe_str = g_strdup_printf ("audiotestsrc num-buffers=1 " + "! audio/x-raw-int,rate=48000,channels=1 " + "! audioresample " + "! lamemp3enc ! audio/mpeg,rate=(int){22050,44100} ! fakesink"); + + bin = gst_parse_launch (pipe_str, &error); + fail_unless (bin != NULL, "Error parsing pipeline: %s", + error ? error->message : "(invalid error)"); + g_free (pipe_str); + + /* get the pad */ + { + GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink0"); + + fail_unless (sink != NULL, "Could not get fakesink out of bin"); + pad = gst_element_get_static_pad (sink, "sink"); + fail_unless (pad != NULL, "Could not get pad out of fakesink"); + gst_object_unref (sink); + } + + gst_buffer_straw_start_pipeline (bin, pad); + + buffer = gst_buffer_straw_get_buffer (bin, pad); + + gst_buffer_straw_stop_pipeline (bin, pad); + + gst_buffer_unref (buffer); + gst_object_unref (pad); + gst_object_unref (bin); +} + +GST_END_TEST; + #endif /* #ifndef GST_DISABLE_PARSE */ Suite * @@ -77,6 +118,7 @@ lame_suite (void) #ifndef GST_DISABLE_PARSE tcase_add_test (tc_chain, test_format); + tcase_add_test (tc_chain, test_caps_proxy); #endif return s; diff --git a/win32/common/config.h b/win32/common/config.h index f853f54801..e1d39b14a7 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -9,7 +9,7 @@ #undef AC_APPLE_UNIVERSAL_BUILD /* Default audio sink */ -#define DEFAULT_AUDIOSINK "directaudiosink" +#define DEFAULT_AUDIOSINK "directsoundsink" /* Default audio source */ #define DEFAULT_AUDIOSRC "audiotestsrc" @@ -51,6 +51,9 @@ /* package origin */ #define GST_PACKAGE_ORIGIN "Unknown package origin" +/* GStreamer package release date/time for plugins as YYYY-MM-DD */ +#undef GST_PACKAGE_RELEASE_DATETIME + /* Define to enable a52dec (used by a52dec). */ #undef HAVE_A52DEC @@ -230,7 +233,7 @@ #define PACKAGE_NAME "GStreamer Ugly Plug-ins" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "GStreamer Ugly Plug-ins 0.10.16.1" +#define PACKAGE_STRING "GStreamer Ugly Plug-ins 0.10.17.1" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gst-plugins-ugly" @@ -239,7 +242,7 @@ #undef PACKAGE_URL /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.10.16.1" +#define PACKAGE_VERSION "0.10.17.1" /* directory where plugins are located */ #ifdef _DEBUG @@ -267,7 +270,7 @@ #undef STDC_HEADERS /* Version number of package */ -#define VERSION "0.10.16.1" +#define VERSION "0.10.17.1" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */