public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: media-plugins/gst-plugins-libav/files/, media-plugins/gst-plugins-libav/
@ 2015-09-05 14:48 Pacho Ramos
  0 siblings, 0 replies; 4+ messages in thread
From: Pacho Ramos @ 2015-09-05 14:48 UTC (permalink / raw
  To: gentoo-commits

commit:     4ca70bac6bfdc75c9b8d606954b8e81aaabc84f7
Author:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
AuthorDate: Sat Sep  5 14:45:43 2015 +0000
Commit:     Pacho Ramos <pacho <AT> gentoo <DOT> org>
CommitDate: Sat Sep  5 14:47:44 2015 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4ca70bac

media-plugins/gst-plugins-libav: Apply upstream fixes from 1.4 branch

Package-Manager: portage-2.2.20.1

 .../gst-plugins-libav-1.4.5-allocate-buffer.patch  | 42 +++++++++++++
 .../gst-plugins-libav-1.4.5-fix-memleak.patch      | 23 ++++++++
 .../files/gst-plugins-libav-1.4.5-h265-fixes.patch | 34 +++++++++++
 .../files/gst-plugins-libav-1.4.5-post-error.patch | 24 ++++++++
 .../gst-plugins-libav-1.4.5-r2.ebuild              | 69 ++++++++++++++++++++++
 5 files changed, 192 insertions(+)

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-allocate-buffer.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-allocate-buffer.patch
new file mode 100644
index 0000000..72c69db
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-allocate-buffer.patch
@@ -0,0 +1,42 @@
+From 055ae13e08ed1af220001de7b55d5c9defe64476 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Mon, 9 Mar 2015 22:01:43 +0100
+Subject: avviddec: Error out if we try to allocate a buffer without being
+ negotiated
+
+Otherwise we just run into assertions because we should've errored out
+already.
+
+diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
+index 5a1b7ed..23f9c74 100644
+--- a/ext/libav/gstavviddec.c
++++ b/ext/libav/gstavviddec.c
+@@ -1114,6 +1114,9 @@ get_output_buffer (GstFFMpegVidDec * ffmpegdec, GstVideoCodecFrame * frame)
+ 
+   GST_LOG_OBJECT (ffmpegdec, "get output buffer");
+ 
++  if (!ffmpegdec->output_state)
++    goto not_negotiated;
++
+   ret =
+       gst_video_decoder_allocate_output_frame (GST_VIDEO_DECODER (ffmpegdec),
+       frame);
+@@ -1154,9 +1157,14 @@ get_output_buffer (GstFFMpegVidDec * ffmpegdec, GstVideoCodecFrame * frame)
+   /* special cases */
+ alloc_failed:
+   {
+-    GST_DEBUG_OBJECT (ffmpegdec, "pad_alloc failed");
++    GST_DEBUG_OBJECT (ffmpegdec, "allocation failed");
+     return ret;
+   }
++not_negotiated:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "not negotiated");
++    return GST_FLOW_NOT_NEGOTIATED;
++  }
+ }
+ 
+ static void
+-- 
+cgit v0.10.2
+

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-fix-memleak.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-fix-memleak.patch
new file mode 100644
index 0000000..60c0a0f
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-fix-memleak.patch
@@ -0,0 +1,23 @@
+From 98f0b80c8d0ff5da7b3dc579a0230e9efeae87fd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Tue, 2 Jun 2015 09:09:09 +0200
+Subject: avauddev: Unref decoded AVFrame after we're done with it
+
+Otherwise we might leak some memory, like all compressed data when using
+avdec_ac3.
+
+diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c
+index dd32466..bf16857 100644
+--- a/ext/libav/gstavauddec.c
++++ b/ext/libav/gstavauddec.c
+@@ -590,6 +590,7 @@ gst_ffmpegauddec_audio_frame (GstFFMpegAudDec * ffmpegdec,
+   }
+ 
+ beach:
++  av_frame_unref (&frame);
+   GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
+       *ret, *outbuf, len);
+   return len;
+-- 
+cgit v0.10.2
+

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-h265-fixes.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-h265-fixes.patch
new file mode 100644
index 0000000..a00bc14
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-h265-fixes.patch
@@ -0,0 +1,34 @@
+From ac54ee0473f71e0c7fc195883b9ac6ae15f302af Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian@centricular.com>
+Date: Fri, 5 Jun 2015 11:57:37 +0200
+Subject: avviddec: Release stream lock while calling avcodec_decode_video2()
+
+It might call back into us from another thread and try to take
+the stream lock again, e.g. to allocate a buffer. Fixes avdec_h265
+not outputting anything.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=726020
+
+diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
+index e2d8245..b876b18 100644
+--- a/ext/libav/gstavviddec.c
++++ b/ext/libav/gstavviddec.c
+@@ -1246,8 +1246,15 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
+     GST_DEBUG_OBJECT (ffmpegdec, "copy pal %p %p", &packet, pal);
+   }
+ 
++  /* This might call into get_buffer() from another thread,
++   * which would cause a deadlock. Release the lock here
++   * and taking it again later seems safe
++   * See https://bugzilla.gnome.org/show_bug.cgi?id=726020
++   */
++  GST_VIDEO_DECODER_STREAM_UNLOCK (ffmpegdec);
+   len = avcodec_decode_video2 (ffmpegdec->context,
+       ffmpegdec->picture, have_data, &packet);
++  GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec);
+ 
+   GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d",
+       len, *have_data);
+-- 
+cgit v0.10.2
+

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-post-error.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-post-error.patch
new file mode 100644
index 0000000..4703020
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.4.5-post-error.patch
@@ -0,0 +1,24 @@
+From 07d185161ea5d543f2ae1c6485da79dd7ee01173 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete@collabora.com>
+Date: Tue, 2 Jun 2015 20:48:33 -0400
+Subject: avviddec: Post error message before returning a flow error
+
+This is required.
+
+diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
+index 23f9c74..e2d8245 100644
+--- a/ext/libav/gstavviddec.c
++++ b/ext/libav/gstavviddec.c
+@@ -1479,7 +1479,8 @@ gst_ffmpegviddec_handle_frame (GstVideoDecoder * decoder,
+       GST_TIME_ARGS (frame->pts), GST_TIME_ARGS (frame->duration));
+ 
+   if (!gst_buffer_map (frame->input_buffer, &minfo, GST_MAP_READ)) {
+-    GST_ERROR_OBJECT (ffmpegdec, "Failed to map buffer");
++    GST_ELEMENT_ERROR (ffmpegdec, STREAM, DECODE, ("Decoding problem"),
++        ("Failed to map buffer for reading"));
+     return GST_FLOW_ERROR;
+   }
+ 
+-- 
+cgit v0.10.2
+

diff --git a/media-plugins/gst-plugins-libav/gst-plugins-libav-1.4.5-r2.ebuild b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.4.5-r2.ebuild
new file mode 100644
index 0000000..2555b16
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.4.5-r2.ebuild
@@ -0,0 +1,69 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="5"
+inherit eutils flag-o-matic multilib-minimal
+
+MY_PN="gst-libav"
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="http://gstreamer.freedesktop.org/modules/gst-libav.html"
+SRC_URI="http://gstreamer.freedesktop.org/src/${MY_PN}/${MY_PN}-${PV}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="1.0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="libav +orc"
+
+RDEPEND="
+	>=media-libs/gstreamer-1.4.0:1.0[${MULTILIB_USEDEP}]
+	>=media-libs/gst-plugins-base-1.4.0:1.0[${MULTILIB_USEDEP}]
+	!libav? ( >=media-video/ffmpeg-2.2:0=[${MULTILIB_USEDEP}] )
+	libav? ( >=media-video/libav-10:0=[${MULTILIB_USEDEP}] )
+	orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )
+"
+DEPEND="${RDEPEND}
+	app-arch/xz-utils
+	>=dev-util/gtk-doc-am-1.12
+	>=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+src_prepare() {
+	# Upstream patches
+	# avviddec: Error out if we try to allocate a buffer without being negotiated
+	epatch "${FILESDIR}"/${P}-allocate-buffer.patch
+
+	# avauddev: Unref decoded AVFrame after we're done with it
+	epatch "${FILESDIR}"/${P}-fix-memleak.patch
+
+	# avviddec: Post error message before returning a flow error
+	epatch "${FILESDIR}"/${P}-post-error.patch
+
+	# avviddec: Release stream lock while calling avcodec_decode_video2()
+	epatch "${FILESDIR}"/${P}-h265-fixes.patch
+}
+
+multilib_src_configure() {
+	GST_PLUGINS_BUILD=""
+	# always use system ffmpeg/libav if possible
+	ECONF_SOURCE=${S} \
+	econf \
+		--disable-maintainer-mode \
+		--with-package-name="Gentoo GStreamer ebuild" \
+		--with-package-origin="https://www.gentoo.org" \
+		--disable-fatal-warnings \
+		--with-system-libav \
+		$(use_enable orc)
+}
+
+multilib_src_compile() {
+	# Don't build with -Werror
+	emake ERROR_CFLAGS=
+}
+
+multilib_src_install_all() {
+	einstalldocs
+	prune_libtool_files --modules
+}


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: media-plugins/gst-plugins-libav/files/, media-plugins/gst-plugins-libav/
@ 2016-02-17 21:08 Alexis Ballier
  0 siblings, 0 replies; 4+ messages in thread
From: Alexis Ballier @ 2016-02-17 21:08 UTC (permalink / raw
  To: gentoo-commits

commit:     f85d12e25f136a5418416704b1e8a37d041b4437
Author:     Alexis Ballier <aballier <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 17 21:06:14 2016 +0000
Commit:     Alexis Ballier <aballier <AT> gentoo <DOT> org>
CommitDate: Wed Feb 17 21:08:07 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f85d12e2

media-plugins/gst-plugins-libav: Fix build and runtime with ffmpeg 3.0. Bug #574790.

Patches are all from upstream, except gst-plugins-libav-1.6.3-minr-compat.patch which is a small #ifdefery more by myself to preserve working options and passing tests with ffmpeg 2.8.

Package-Manager: portage-2.2.27
Signed-off-by: Alexis Ballier <aballier <AT> gentoo.org>

 .../files/gst-plugins-libav-1.6.3-bitrate.patch    |  49 +++
 .../gst-plugins-libav-1.6.3-chain-dispose.patch    |  23 ++
 .../gst-plugins-libav-1.6.3-deinterlace-lavf.patch | 199 ++++++++++++
 .../gst-plugins-libav-1.6.3-minr-compat.patch      |  22 ++
 .../files/gst-plugins-libav-1.6.3-minr-maxr.patch  |  74 +++++
 .../gst-plugins-libav-1.6.3-no-deprecated.patch    | 356 +++++++++++++++++++++
 .../gst-plugins-libav-1.6.3.ebuild                 |  13 +-
 7 files changed, 735 insertions(+), 1 deletion(-)

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-bitrate.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-bitrate.patch
new file mode 100644
index 0000000..4c0510a
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-bitrate.patch
@@ -0,0 +1,49 @@
+commit 46fb2e9f11820190f2e173f4ebd83f0d15adea40
+Author: Sebastian Dröge <sebastian@centricular.com>
+Date:   Sat Jan 16 16:40:52 2016 +0200
+
+    libav: Bitrate field changed from int to int64_t, fix compiler warnings
+    
+    Cast it to a gint64 for now though, as otherwise we will fail compilation
+    with ffmpeg 2.8.
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=757498
+
+diff --git a/ext/libav/gstavaudenc.c b/ext/libav/gstavaudenc.c
+index 64d7011..9a8e690 100644
+--- a/ext/libav/gstavaudenc.c
++++ b/ext/libav/gstavaudenc.c
+@@ -269,8 +269,9 @@ gst_ffmpegaudenc_set_format (GstAudioEncoder * encoder, GstAudioInfo * info)
+     ffmpegaudenc->context->bit_rate = ffmpegaudenc->bitrate;
+     ffmpegaudenc->context->bit_rate_tolerance = ffmpegaudenc->bitrate;
+   } else {
+-    GST_INFO_OBJECT (ffmpegaudenc, "Using avcontext default bitrate %d",
+-        ffmpegaudenc->context->bit_rate);
++    GST_INFO_OBJECT (ffmpegaudenc,
++        "Using avcontext default bitrate %" G_GINT64_FORMAT,
++        (gint64) ffmpegaudenc->context->bit_rate);
+   }
+ 
+   /* RTP payload used for GOB production (for Asterisk) */
+diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
+index 2f8dc8a..966c9b8 100644
+--- a/ext/libav/gstavcodecmap.c
++++ b/ext/libav/gstavcodecmap.c
+@@ -2357,6 +2357,7 @@ gst_ffmpeg_caps_to_smpfmt (const GstCaps * caps,
+   GstStructure *structure;
+   const gchar *fmt;
+   GstAudioFormat format = GST_AUDIO_FORMAT_UNKNOWN;
++  gint bitrate;
+ 
+   g_return_if_fail (gst_caps_get_size (caps) == 1);
+ 
+@@ -2365,7 +2366,8 @@ gst_ffmpeg_caps_to_smpfmt (const GstCaps * caps,
+   gst_structure_get_int (structure, "channels", &context->channels);
+   gst_structure_get_int (structure, "rate", &context->sample_rate);
+   gst_structure_get_int (structure, "block_align", &context->block_align);
+-  gst_structure_get_int (structure, "bitrate", &context->bit_rate);
++  gst_structure_get_int (structure, "bitrate", &bitrate);
++  context->bit_rate = bitrate;
+ 
+   if (!raw)
+     return;

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-chain-dispose.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-chain-dispose.patch
new file mode 100644
index 0000000..de8947a
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-chain-dispose.patch
@@ -0,0 +1,23 @@
+commit e04bcf0601286990d0fa2dd9999fcfcff1b5784b
+Author: Sebastian Dröge <sebastian@centricular.com>
+Date:   Sat Jan 16 16:43:16 2016 +0200
+
+    avdeinterlace: Chain up to parent class' dispose()
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=757498
+
+diff --git a/ext/libav/gstavdeinterlace.c b/ext/libav/gstavdeinterlace.c
+index fe2d60d..6bdc605 100644
+--- a/ext/libav/gstavdeinterlace.c
++++ b/ext/libav/gstavdeinterlace.c
+@@ -310,7 +310,10 @@ static void
+ gst_ffmpegdeinterlace_dispose (GObject * obj)
+ {
+   GstFFMpegDeinterlace *deinterlace = GST_FFMPEGDEINTERLACE (obj);
++
+   delete_filter_graph (deinterlace);
++
++  G_OBJECT_CLASS (gst_ffmpegdeinterlace_parent_class)->dispose (obj);
+ }
+ 
+ static int

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-deinterlace-lavf.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-deinterlace-lavf.patch
new file mode 100644
index 0000000..f53c854
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-deinterlace-lavf.patch
@@ -0,0 +1,199 @@
+commit ddec3a2c78dd317efc1e9bc3ec0b2c49bf31ae77
+Author: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
+Date:   Wed Nov 4 21:16:18 2015 +0100
+
+    avdeinterlace: Port non-deprecated AVFilter API
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=757498
+
+diff --git a/configure.ac b/configure.ac
+index 19fa183..4d6fe94 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -280,7 +280,7 @@ AC_ARG_WITH(system-libav,
+             [AC_HELP_STRING([--with-system-libav], [use system Libav libraries])])
+ 
+ if test "x$with_system_libav" = "xyes"; then
+-  PKG_CHECK_MODULES(LIBAV, libavformat libavcodec libavutil)
++  PKG_CHECK_MODULES(LIBAV, libavfilter libavformat libavcodec libavutil)
+   PKG_CHECK_MODULES(SWSCALE, libswscale libavutil)
+   saved_CPPFLAGS="$CPPFLAGS"
+   CPPFLAGS="$CPPFLAGS $LIBAV_CFLAGS"
+@@ -313,6 +313,7 @@ else
+ 
+   LIBAV_DEPS="\$(top_builddir)/gst-libs/ext/libav/libavformat/libavformat.a \
+               \$(top_builddir)/gst-libs/ext/libav/libavcodec/libavcodec.a \
++              \$(top_builddir)/gst-libs/ext/libav/libavfilter/libavfilter.a \
+               \$(top_builddir)/gst-libs/ext/libav/libswresample/libswresample.a \
+               \$(top_builddir)/gst-libs/ext/libav/libavutil/libavutil.a"
+   if test "x$enable_static_plugins" = xyes; then
+@@ -357,7 +358,7 @@ else
+   # Enable pic and static so that we get .a files, but with PIC code.
+   emblibav_configure_args="$emblibav_configure_args \
+         --enable-static --enable-pic \
+-        --disable-avdevice --disable-postproc --disable-avfilter \
++        --disable-avdevice --disable-postproc \
+         --disable-programs --disable-ffserver --disable-ffplay --disable-ffprobe --disable-ffmpeg \
+         --disable-encoder=flac --disable-protocols --disable-devices \
+         --disable-network --disable-hwaccels --disable-dxva2 --disable-vdpau \
+diff --git a/ext/libav/gstavdeinterlace.c b/ext/libav/gstavdeinterlace.c
+index 2d142a6..6906059 100644
+--- a/ext/libav/gstavdeinterlace.c
++++ b/ext/libav/gstavdeinterlace.c
+@@ -25,6 +25,9 @@
+ #endif
+ 
+ #include <libavcodec/avcodec.h>
++#include <libavfilter/avfilter.h>
++#include <libavfilter/buffersrc.h>
++#include <libavfilter/buffersink.h>
+ 
+ #include <gst/gst.h>
+ #include <gst/video/video.h>
+@@ -93,6 +96,14 @@ typedef struct _GstFFMpegDeinterlace
+ 
+   enum PixelFormat pixfmt;
+   AVPicture from_frame, to_frame;
++
++  AVFilterContext *buffersink_ctx;
++  AVFilterContext *buffersrc_ctx;
++  AVFilterGraph *filter_graph;
++  AVFrame *filter_frame;
++  int last_width, last_height;
++  enum AVPixelFormat last_pixfmt;
++
+ } GstFFMpegDeinterlace;
+ 
+ typedef struct _GstFFMpegDeinterlaceClass
+@@ -135,6 +146,8 @@ G_DEFINE_TYPE (GstFFMpegDeinterlace, gst_ffmpegdeinterlace, GST_TYPE_ELEMENT);
+ static GstFlowReturn gst_ffmpegdeinterlace_chain (GstPad * pad,
+     GstObject * parent, GstBuffer * inbuf);
+ 
++static void gst_ffmpegdeinterlace_dispose (GObject * obj);
++
+ static void
+ gst_ffmpegdeinterlace_class_init (GstFFMpegDeinterlaceClass * klass)
+ {
+@@ -167,6 +180,8 @@ gst_ffmpegdeinterlace_class_init (GstFFMpegDeinterlaceClass * klass)
+   gst_element_class_set_static_metadata (element_class,
+       "libav Deinterlace element", "Filter/Effect/Video/Deinterlace",
+       "Deinterlace video", "Luca Ognibene <luogni@tin.it>");
++
++  gobject_class->dispose = gst_ffmpegdeinterlace_dispose;
+ }
+ 
+ static void
+@@ -277,6 +292,101 @@ gst_ffmpegdeinterlace_init (GstFFMpegDeinterlace * deinterlace)
+   deinterlace->reconfigure = FALSE;
+   deinterlace->mode = DEFAULT_MODE;
+   deinterlace->new_mode = -1;
++  deinterlace->last_width = -1;
++  deinterlace->last_height = -1;
++  deinterlace->last_pixfmt = AV_PIX_FMT_NONE;
++}
++
++static void
++delete_filter_graph (GstFFMpegDeinterlace * deinterlace)
++{
++  if (deinterlace->filter_graph) {
++    av_frame_free (&deinterlace->filter_frame);
++    avfilter_graph_free (&deinterlace->filter_graph);
++  }
++}
++
++static void
++gst_ffmpegdeinterlace_dispose (GObject * obj)
++{
++  GstFFMpegDeinterlace *deinterlace = GST_FFMPEGDEINTERLACE (obj);
++  delete_filter_graph (deinterlace);
++}
++
++static int
++init_filter_graph (GstFFMpegDeinterlace * deinterlace,
++    enum AVPixelFormat pixfmt, int width, int height)
++{
++  AVFilterInOut *inputs = NULL, *outputs = NULL;
++  char args[512];
++  int res;
++
++  delete_filter_graph (deinterlace);
++  deinterlace->filter_graph = avfilter_graph_alloc ();
++  snprintf (args, sizeof (args),
++      "buffer=video_size=%dx%d:pix_fmt=%d:time_base=1/1:pixel_aspect=0/1[in];"
++      "[in]yadif[out];" "[out]buffersink", width, height, pixfmt);
++  res =
++      avfilter_graph_parse2 (deinterlace->filter_graph, args, &inputs,
++      &outputs);
++  if (res < 0)
++    return res;
++  if (inputs || outputs)
++    return -1;
++  res = avfilter_graph_config (deinterlace->filter_graph, NULL);
++  if (res < 0)
++    return res;
++
++  deinterlace->buffersrc_ctx =
++      avfilter_graph_get_filter (deinterlace->filter_graph, "Parsed_buffer_0");
++  deinterlace->buffersink_ctx =
++      avfilter_graph_get_filter (deinterlace->filter_graph,
++      "Parsed_buffersink_2");
++  if (!deinterlace->buffersrc_ctx || !deinterlace->buffersink_ctx)
++    return -1;
++  deinterlace->filter_frame = av_frame_alloc ();
++  deinterlace->last_width = width;
++  deinterlace->last_height = height;
++  deinterlace->last_pixfmt = pixfmt;
++
++  return 0;
++}
++
++static int
++process_filter_graph (GstFFMpegDeinterlace * deinterlace, AVPicture * dst,
++    const AVPicture * src, enum AVPixelFormat pixfmt, int width, int height)
++{
++  int res;
++
++  if (!deinterlace->filter_graph || width != deinterlace->last_width ||
++      height != deinterlace->last_height
++      || pixfmt != deinterlace->last_pixfmt) {
++    res = init_filter_graph (deinterlace, pixfmt, width, height);
++    if (res < 0)
++      return res;
++  }
++
++  memcpy (deinterlace->filter_frame->data, src->data, sizeof (src->data));
++  memcpy (deinterlace->filter_frame->linesize, src->linesize,
++      sizeof (src->linesize));
++  deinterlace->filter_frame->width = width;
++  deinterlace->filter_frame->height = height;
++  deinterlace->filter_frame->format = pixfmt;
++  res =
++      av_buffersrc_add_frame (deinterlace->buffersrc_ctx,
++      deinterlace->filter_frame);
++  if (res < 0)
++    return res;
++  res =
++      av_buffersink_get_frame (deinterlace->buffersink_ctx,
++      deinterlace->filter_frame);
++  if (res < 0)
++    return res;
++  av_picture_copy (dst, (const AVPicture *) deinterlace->filter_frame, pixfmt,
++      width, height);
++  av_frame_unref (deinterlace->filter_frame);
++
++  return 0;
+ }
+ 
+ static GstFlowReturn
+@@ -320,8 +430,9 @@ gst_ffmpegdeinterlace_chain (GstPad * pad, GstObject * parent,
+   gst_ffmpeg_avpicture_fill (&deinterlace->to_frame, to_map.data,
+       deinterlace->pixfmt, deinterlace->width, deinterlace->height);
+ 
+-  avpicture_deinterlace (&deinterlace->to_frame, &deinterlace->from_frame,
+-      deinterlace->pixfmt, deinterlace->width, deinterlace->height);
++  process_filter_graph (deinterlace, &deinterlace->to_frame,
++      &deinterlace->from_frame, deinterlace->pixfmt, deinterlace->width,
++      deinterlace->height);
+   gst_buffer_unmap (outbuf, &to_map);
+   gst_buffer_unmap (inbuf, &from_map);
+ 

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-compat.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-compat.patch
new file mode 100644
index 0000000..70b2e0a
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-compat.patch
@@ -0,0 +1,22 @@
+Preserve compatibility with ffmpeg 2.8 for rc-min-rate option.
+
+Index: gst-libav-1.6.3/ext/libav/gstavcfg.c
+===================================================================
+--- gst-libav-1.6.3.orig/ext/libav/gstavcfg.c
++++ gst-libav-1.6.3/ext/libav/gstavcfg.c
+@@ -524,9 +524,15 @@ gst_ffmpeg_cfg_init (void)
+ #endif
+   gst_ffmpeg_add_pspec (pspec, config.rc_max_rate, FALSE, mpeg, NULL);
+ 
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT (57, 3, 0)
++  pspec = g_param_spec_int ("rc-min-rate", "Ratecontrol Minimum Bitrate",
++      "Ratecontrol Minimum Bitrate", 0, G_MAXINT, 0,
++      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
++#else
+   pspec = g_param_spec_int64 ("rc-min-rate", "Ratecontrol Minimum Bitrate",
+       "Ratecontrol Minimum Bitrate", 0, G_MAXINT64, 0,
+       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
++#endif
+   gst_ffmpeg_add_pspec (pspec, config.rc_min_rate, FALSE, mpeg, NULL);
+ 
+   pspec =

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-maxr.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-maxr.patch
new file mode 100644
index 0000000..a3b4a91
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-minr-maxr.patch
@@ -0,0 +1,74 @@
+commit e3cf542215519f882b7570a4b59aad75a8d2d27a
+Author: Edward Hervey <edward@centricular.com>
+Date:   Tue Feb 16 16:32:38 2016 +0100
+
+    avcfg: rc-min-rate and rc-max-rate are now 64bit integers
+    
+    Switch the gobject properties and internal handling to support that
+
+diff --git a/ext/libav/gstavcfg.c b/ext/libav/gstavcfg.c
+index d38cce1..a361994 100644
+--- a/ext/libav/gstavcfg.c
++++ b/ext/libav/gstavcfg.c
+@@ -513,13 +513,19 @@ gst_ffmpeg_cfg_init (void)
+   gst_ffmpeg_add_pspec (pspec, config.rc_buffer_aggressivity, FALSE, mpeg,
+       NULL);
+ 
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT (57, 3, 0)
+   pspec = g_param_spec_int ("rc-max-rate", "Ratecontrol Maximum Bitrate",
+       "Ratecontrol Maximum Bitrate", 0, G_MAXINT, 0,
+       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
++#else
++  pspec = g_param_spec_int64 ("rc-max-rate", "Ratecontrol Maximum Bitrate",
++      "Ratecontrol Maximum Bitrate", 0, G_MAXINT64, 0,
++      G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
++#endif
+   gst_ffmpeg_add_pspec (pspec, config.rc_max_rate, FALSE, mpeg, NULL);
+ 
+-  pspec = g_param_spec_int ("rc-min-rate", "Ratecontrol Minimum Bitrate",
+-      "Ratecontrol Minimum Bitrate", 0, G_MAXINT, 0,
++  pspec = g_param_spec_int64 ("rc-min-rate", "Ratecontrol Minimum Bitrate",
++      "Ratecontrol Minimum Bitrate", 0, G_MAXINT64, 0,
+       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+   gst_ffmpeg_add_pspec (pspec, config.rc_min_rate, FALSE, mpeg, NULL);
+ 
+@@ -770,6 +776,15 @@ gst_ffmpeg_cfg_install_property (GstFFMpegVidEncClass * klass, guint base)
+               : pint->default_value, pspec->flags);
+           break;
+         }
++        case G_TYPE_INT64:{
++          GParamSpecInt64 *pint = G_PARAM_SPEC_INT64 (pspec);
++
++          pspec = g_param_spec_int64 (name, nick, blurb,
++              pint->minimum, pint->maximum,
++              lavc_default ? G_STRUCT_MEMBER (gint64, ctx, ctx_offset)
++              : pint->default_value, pspec->flags);
++          break;
++        }
+         case G_TYPE_UINT:{
+           GParamSpecUInt *puint = G_PARAM_SPEC_UINT (pspec);
+ 
+@@ -862,6 +877,11 @@ gst_ffmpeg_cfg_set_property (GObject * object,
+       G_STRUCT_MEMBER (gint, ffmpegenc, qdata->offset) =
+           g_value_get_int (value);
+       break;
++    case G_TYPE_INT64:
++      g_return_val_if_fail (qdata->size == sizeof (gint64), TRUE);
++      G_STRUCT_MEMBER (gint64, ffmpegenc, qdata->offset) =
++          g_value_get_int64 (value);
++      break;
+     case G_TYPE_FLOAT:
+       g_return_val_if_fail (qdata->size == sizeof (gfloat), TRUE);
+       G_STRUCT_MEMBER (gfloat, ffmpegenc, qdata->offset) =
+@@ -924,6 +944,11 @@ gst_ffmpeg_cfg_get_property (GObject * object,
+       g_return_val_if_fail (qdata->size == sizeof (gint), TRUE);
+       g_value_set_int (value, G_STRUCT_MEMBER (gint, ffmpegenc, qdata->offset));
+       break;
++    case G_TYPE_INT64:
++      g_return_val_if_fail (qdata->size == sizeof (gint64), TRUE);
++      g_value_set_int64 (value, G_STRUCT_MEMBER (gint64, ffmpegenc,
++              qdata->offset));
++      break;
+     case G_TYPE_FLOAT:
+       g_return_val_if_fail (qdata->size == sizeof (gfloat), TRUE);
+       g_value_set_float (value,

diff --git a/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-no-deprecated.patch b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-no-deprecated.patch
new file mode 100644
index 0000000..5788533
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/gst-plugins-libav-1.6.3-no-deprecated.patch
@@ -0,0 +1,356 @@
+commit 6235a04ef356f8d7e2f933758ddba359fa95a5ec
+Author: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
+Date:   Wed Nov 4 21:18:56 2015 +0100
+
+    libav: Remove usage of deprecated API
+    
+    https://bugzilla.gnome.org/show_bug.cgi?id=757498
+
+diff --git a/ext/libav/gstavcfg.c b/ext/libav/gstavcfg.c
+index a85f547..d38cce1 100644
+--- a/ext/libav/gstavcfg.c
++++ b/ext/libav/gstavcfg.c
+@@ -173,13 +173,10 @@ gst_ffmpeg_idct_algo_get_type (void)
+       {FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
+       {FF_IDCT_ARM, "ARM", "arm"},
+       {FF_IDCT_ALTIVEC, "Altivec", "altivec"},
+-      {FF_IDCT_SH4, "SH4", "sh4"},
+       {FF_IDCT_SIMPLEARM, "Simple ARM", "simplearm"},
+-      {FF_IDCT_IPP, "IPP", "ipp"},
+       {FF_IDCT_XVID, "XVID", "xvid"},
+       {FF_IDCT_SIMPLEARMV5TE, "Simple ARMV5TE", "simplearmv5te"},
+       {FF_IDCT_SIMPLEARMV6, "Simple ARMV6", "simplearmv6"},
+-      {FF_IDCT_SIMPLEVIS, "Simple Vis", "simplevis"},
+       {FF_IDCT_FAAN, "FAAN", "faan"},
+       {FF_IDCT_SIMPLENEON, "Simple NEON", "simpleneon"},
+       {0, NULL, NULL},
+@@ -665,7 +662,7 @@ gst_ffmpeg_cfg_init (void)
+   gst_ffmpeg_add_pspec (pspec, interlaced, FALSE, mpeg, NULL);
+ 
+   pspec = g_param_spec_int ("max-bframes", "Max B-Frames",
+-      "Maximum B-frames in a row", 0, FF_MAX_B_FRAMES, 0,
++      "Maximum B-frames in a row", 0, INT_MAX, 0,
+       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+   gst_ffmpeg_add_pspec (pspec, config.max_b_frames, FALSE, mpeg, NULL);
+ 
+diff --git a/ext/libav/gstavcodecmap.c b/ext/libav/gstavcodecmap.c
+index 11a9ed2..2f8dc8a 100644
+--- a/ext/libav/gstavcodecmap.c
++++ b/ext/libav/gstavcodecmap.c
+@@ -770,10 +770,6 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
+       }
+       break;
+ 
+-    case AV_CODEC_ID_MPEG2VIDEO_XVMC:
+-      /* this is a special ID - don't need it in GStreamer, I think */
+-      break;
+-
+     case AV_CODEC_ID_H263:
+       if (encode) {
+         caps =
+@@ -2202,7 +2198,7 @@ gst_ffmpeg_codecid_to_caps (enum AVCodecID codec_id,
+  */
+ 
+ static GstCaps *
+-gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context,
++gst_ffmpeg_pixfmt_to_caps (enum AVPixelFormat pix_fmt, AVCodecContext * context,
+     enum AVCodecID codec_id)
+ {
+   GstCaps *caps = NULL;
+@@ -2533,7 +2529,7 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps,
+ typedef struct
+ {
+   GstVideoFormat format;
+-  enum PixelFormat pixfmt;
++  enum AVPixelFormat pixfmt;
+ } PixToFmt;
+ 
+ /* FIXME : FILLME */
+@@ -2625,7 +2621,7 @@ static const PixToFmt pixtofmttable[] = {
+ };
+ 
+ GstVideoFormat
+-gst_ffmpeg_pixfmt_to_videoformat (enum PixelFormat pixfmt)
++gst_ffmpeg_pixfmt_to_videoformat (enum AVPixelFormat pixfmt)
+ {
+   guint i;
+ 
+@@ -2637,7 +2633,7 @@ gst_ffmpeg_pixfmt_to_videoformat (enum PixelFormat pixfmt)
+   return GST_VIDEO_FORMAT_UNKNOWN;
+ }
+ 
+-static enum PixelFormat
++static enum AVPixelFormat
+ gst_ffmpeg_videoformat_to_pixfmt_for_codec (GstVideoFormat format,
+     const AVCodec * codec)
+ {
+@@ -2661,7 +2657,7 @@ gst_ffmpeg_videoformat_to_pixfmt_for_codec (GstVideoFormat format,
+   return AV_PIX_FMT_NONE;
+ }
+ 
+-enum PixelFormat
++enum AVPixelFormat
+ gst_ffmpeg_videoformat_to_pixfmt (GstVideoFormat format)
+ {
+   return gst_ffmpeg_videoformat_to_pixfmt_for_codec (format, NULL);
+diff --git a/ext/libav/gstavcodecmap.h b/ext/libav/gstavcodecmap.h
+index 40f46c3..486a0d5 100644
+--- a/ext/libav/gstavcodecmap.h
++++ b/ext/libav/gstavcodecmap.h
+@@ -132,8 +132,8 @@ void
+ gst_ffmpeg_audioinfo_to_context (GstAudioInfo *info,
+ 				 AVCodecContext *context);
+ 
+-GstVideoFormat gst_ffmpeg_pixfmt_to_videoformat (enum PixelFormat pixfmt);
+-enum PixelFormat gst_ffmpeg_videoformat_to_pixfmt (GstVideoFormat format);
++GstVideoFormat gst_ffmpeg_pixfmt_to_videoformat (enum AVPixelFormat pixfmt);
++enum AVPixelFormat gst_ffmpeg_videoformat_to_pixfmt (GstVideoFormat format);
+ 
+ GstAudioFormat gst_ffmpeg_smpfmt_to_audioformat (enum AVSampleFormat sample_fmt);
+ 
+diff --git a/ext/libav/gstavdeinterlace.c b/ext/libav/gstavdeinterlace.c
+index 6906059..fe2d60d 100644
+--- a/ext/libav/gstavdeinterlace.c
++++ b/ext/libav/gstavdeinterlace.c
+@@ -94,7 +94,7 @@ typedef struct _GstFFMpegDeinterlace
+   gboolean reconfigure;
+   GstFFMpegDeinterlaceMode new_mode;
+ 
+-  enum PixelFormat pixfmt;
++  enum AVPixelFormat pixfmt;
+   AVPicture from_frame, to_frame;
+ 
+   AVFilterContext *buffersink_ctx;
+diff --git a/ext/libav/gstavutils.c b/ext/libav/gstavutils.c
+index c434202..5d1567b 100644
+--- a/ext/libav/gstavutils.c
++++ b/ext/libav/gstavutils.c
+@@ -279,7 +279,7 @@ gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height)
+ 
+ int
+ gst_ffmpeg_avpicture_fill (AVPicture * picture,
+-    uint8_t * ptr, enum PixelFormat pix_fmt, int width, int height)
++    uint8_t * ptr, enum AVPixelFormat pix_fmt, int width, int height)
+ {
+   int size, w2, h2, size2;
+   int stride, stride2;
+diff --git a/ext/libav/gstavutils.h b/ext/libav/gstavutils.h
+index 6d111a2..f4d90ef 100644
+--- a/ext/libav/gstavutils.h
++++ b/ext/libav/gstavutils.h
+@@ -42,7 +42,7 @@ gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height);
+ int
+ gst_ffmpeg_avpicture_fill (AVPicture * picture,
+                            uint8_t *   ptr,
+-                           enum PixelFormat pix_fmt,
++                           enum AVPixelFormat pix_fmt,
+                            int         width,
+                            int         height);
+ 
+diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
+index da9acf6..cc0cf03 100644
+--- a/ext/libav/gstavviddec.c
++++ b/ext/libav/gstavviddec.c
+@@ -444,9 +444,6 @@ gst_ffmpegviddec_set_format (GstVideoDecoder * decoder,
+ 
+   /* set buffer functions */
+   ffmpegdec->context->get_buffer2 = gst_ffmpegviddec_get_buffer2;
+-  ffmpegdec->context->get_buffer = NULL;
+-  ffmpegdec->context->reget_buffer = NULL;
+-  ffmpegdec->context->release_buffer = NULL;
+   ffmpegdec->context->draw_horiz_band = NULL;
+ 
+   /* reset coded_width/_height to prevent it being reused from last time when
+@@ -825,10 +822,6 @@ gst_ffmpegviddec_get_buffer2 (AVCodecContext * context, AVFrame * picture,
+ 
+   picture->buf[0] = av_buffer_create (NULL, 0, dummy_free_buffer, dframe, 0);
+ 
+-  /* tell ffmpeg we own this buffer, transfer the ref we have on the buffer to
+-   * the opaque data. */
+-  picture->type = FF_BUFFER_TYPE_USER;
+-
+   GST_LOG_OBJECT (ffmpegdec, "returned frame %p", dframe->buffer);
+ 
+   return 0;
+@@ -1355,8 +1348,6 @@ gst_ffmpegviddec_video_frame (GstFFMpegVidDec * ffmpegdec,
+       (guint64) ffmpegdec->picture->pts);
+   GST_DEBUG_OBJECT (ffmpegdec, "picture: num %d",
+       ffmpegdec->picture->coded_picture_number);
+-  GST_DEBUG_OBJECT (ffmpegdec, "picture: ref %d",
+-      ffmpegdec->picture->reference);
+   GST_DEBUG_OBJECT (ffmpegdec, "picture: display %d",
+       ffmpegdec->picture->display_picture_number);
+   GST_DEBUG_OBJECT (ffmpegdec, "picture: opaque %p",
+diff --git a/ext/libav/gstavviddec.h b/ext/libav/gstavviddec.h
+index f152ba8..a9965b7 100644
+--- a/ext/libav/gstavviddec.h
++++ b/ext/libav/gstavviddec.h
+@@ -41,7 +41,7 @@ struct _GstFFMpegVidDec
+   gboolean opened;
+ 
+   /* current output pictures */
+-  enum PixelFormat pic_pix_fmt;
++  enum AVPixelFormat pic_pix_fmt;
+   gint pic_width;
+   gint pic_height;
+   gint pic_par_n;
+@@ -70,7 +70,7 @@ struct _GstFFMpegVidDec
+   GstBufferPool *internal_pool;
+   gint pool_width;
+   gint pool_height;
+-  enum PixelFormat pool_format;
++  enum AVPixelFormat pool_format;
+   GstVideoInfo pool_info;
+ };
+ 
+diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c
+index 1df1699..94aca49 100644
+--- a/ext/libav/gstavvidenc.c
++++ b/ext/libav/gstavvidenc.c
+@@ -290,7 +290,7 @@ gst_ffmpegvidenc_set_format (GstVideoEncoder * encoder,
+   GstCaps *allowed_caps;
+   GstCaps *icaps;
+   GstVideoCodecState *output_format;
+-  enum PixelFormat pix_fmt;
++  enum AVPixelFormat pix_fmt;
+   GstFFMpegVidEnc *ffmpegenc = (GstFFMpegVidEnc *) encoder;
+   GstFFMpegVidEncClass *oclass =
+       (GstFFMpegVidEncClass *) G_OBJECT_GET_CLASS (ffmpegenc);
+diff --git a/ext/libswscale/gstffmpegscale.c b/ext/libswscale/gstffmpegscale.c
+index f34259b..62343d0 100644
+--- a/ext/libswscale/gstffmpegscale.c
++++ b/ext/libswscale/gstffmpegscale.c
+@@ -45,7 +45,7 @@ typedef struct _GstFFMpegScale
+   /* state */
+   GstVideoInfo in_info, out_info;
+ 
+-  enum PixelFormat in_pixfmt, out_pixfmt;
++  enum AVPixelFormat in_pixfmt, out_pixfmt;
+   struct SwsContext *ctx;
+ 
+   /* property */
+@@ -214,8 +214,8 @@ gst_ffmpegscale_init (GstFFMpegScale * scale)
+ {
+   scale->method = DEFAULT_PROP_METHOD;
+   scale->ctx = NULL;
+-  scale->in_pixfmt = PIX_FMT_NONE;
+-  scale->out_pixfmt = PIX_FMT_NONE;
++  scale->in_pixfmt = AV_PIX_FMT_NONE;
++  scale->out_pixfmt = AV_PIX_FMT_NONE;
+ }
+ 
+ static void
+@@ -226,8 +226,8 @@ gst_ffmpegscale_reset (GstFFMpegScale * scale)
+     scale->ctx = NULL;
+   }
+ 
+-  scale->in_pixfmt = PIX_FMT_NONE;
+-  scale->out_pixfmt = PIX_FMT_NONE;
++  scale->in_pixfmt = AV_PIX_FMT_NONE;
++  scale->out_pixfmt = AV_PIX_FMT_NONE;
+ }
+ 
+ static void
+@@ -442,11 +442,11 @@ gst_ffmpegscale_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
+ 
+ /* Convert a GstCaps (video/raw) to a FFMPEG PixFmt
+  */
+-static enum PixelFormat
++static enum AVPixelFormat
+ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps)
+ {
+   GstVideoInfo info;
+-  enum PixelFormat pix_fmt;
++  enum AVPixelFormat pix_fmt;
+ 
+   GST_DEBUG ("converting caps %" GST_PTR_FORMAT, caps);
+ 
+@@ -455,52 +455,52 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps)
+ 
+   switch (GST_VIDEO_INFO_FORMAT (&info)) {
+     case GST_VIDEO_FORMAT_YUY2:
+-      pix_fmt = PIX_FMT_YUYV422;
++      pix_fmt = AV_PIX_FMT_YUYV422;
+       break;
+     case GST_VIDEO_FORMAT_UYVY:
+-      pix_fmt = PIX_FMT_UYVY422;
++      pix_fmt = AV_PIX_FMT_UYVY422;
+       break;
+     case GST_VIDEO_FORMAT_I420:
+-      pix_fmt = PIX_FMT_YUV420P;
++      pix_fmt = AV_PIX_FMT_YUV420P;
+       break;
+     case GST_VIDEO_FORMAT_Y41B:
+-      pix_fmt = PIX_FMT_YUV411P;
++      pix_fmt = AV_PIX_FMT_YUV411P;
+       break;
+     case GST_VIDEO_FORMAT_Y42B:
+-      pix_fmt = PIX_FMT_YUV422P;
++      pix_fmt = AV_PIX_FMT_YUV422P;
+       break;
+     case GST_VIDEO_FORMAT_YUV9:
+-      pix_fmt = PIX_FMT_YUV410P;
++      pix_fmt = AV_PIX_FMT_YUV410P;
+       break;
+     case GST_VIDEO_FORMAT_ARGB:
+-      pix_fmt = PIX_FMT_ARGB;
++      pix_fmt = AV_PIX_FMT_ARGB;
+       break;
+     case GST_VIDEO_FORMAT_RGBA:
+-      pix_fmt = PIX_FMT_RGBA;
++      pix_fmt = AV_PIX_FMT_RGBA;
+       break;
+     case GST_VIDEO_FORMAT_BGRA:
+-      pix_fmt = PIX_FMT_BGRA;
++      pix_fmt = AV_PIX_FMT_BGRA;
+       break;
+     case GST_VIDEO_FORMAT_ABGR:
+-      pix_fmt = PIX_FMT_ABGR;
++      pix_fmt = AV_PIX_FMT_ABGR;
+       break;
+     case GST_VIDEO_FORMAT_BGR:
+-      pix_fmt = PIX_FMT_BGR24;
++      pix_fmt = AV_PIX_FMT_BGR24;
+       break;
+     case GST_VIDEO_FORMAT_RGB:
+-      pix_fmt = PIX_FMT_RGB24;
++      pix_fmt = AV_PIX_FMT_RGB24;
+       break;
+     case GST_VIDEO_FORMAT_RGB16:
+-      pix_fmt = PIX_FMT_RGB565;
++      pix_fmt = AV_PIX_FMT_RGB565;
+       break;
+     case GST_VIDEO_FORMAT_RGB15:
+-      pix_fmt = PIX_FMT_RGB555;
++      pix_fmt = AV_PIX_FMT_RGB555;
+       break;
+     case GST_VIDEO_FORMAT_RGB8P:
+-      pix_fmt = PIX_FMT_PAL8;
++      pix_fmt = AV_PIX_FMT_PAL8;
+       break;
+     default:
+-      pix_fmt = PIX_FMT_NONE;
++      pix_fmt = AV_PIX_FMT_NONE;
+       break;
+   }
+   return pix_fmt;
+@@ -508,7 +508,7 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps)
+   /* ERROR */
+ invalid_caps:
+   {
+-    return PIX_FMT_NONE;
++    return AV_PIX_FMT_NONE;
+   }
+ }
+ 
+@@ -537,8 +537,8 @@ gst_ffmpegscale_set_caps (GstBaseTransform * trans, GstCaps * incaps,
+   scale->in_pixfmt = gst_ffmpeg_caps_to_pixfmt (incaps);
+   scale->out_pixfmt = gst_ffmpeg_caps_to_pixfmt (outcaps);
+ 
+-  if (!ok || scale->in_pixfmt == PIX_FMT_NONE ||
+-      scale->out_pixfmt == PIX_FMT_NONE ||
++  if (!ok || scale->in_pixfmt == AV_PIX_FMT_NONE ||
++      scale->out_pixfmt == AV_PIX_FMT_NONE ||
+       GST_VIDEO_INFO_FORMAT (&scale->in_info) == GST_VIDEO_FORMAT_UNKNOWN ||
+       GST_VIDEO_INFO_FORMAT (&scale->out_info) == GST_VIDEO_FORMAT_UNKNOWN)
+     goto refuse_caps;

diff --git a/media-plugins/gst-plugins-libav/gst-plugins-libav-1.6.3.ebuild b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.6.3.ebuild
index 320ac6e..d2d35c4 100644
--- a/media-plugins/gst-plugins-libav/gst-plugins-libav-1.6.3.ebuild
+++ b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.6.3.ebuild
@@ -3,7 +3,7 @@
 # $Id$
 
 EAPI="5"
-inherit eutils multilib-minimal
+inherit eutils multilib-minimal autotools
 
 MY_PN="gst-libav"
 DESCRIPTION="FFmpeg based gstreamer plugin"
@@ -31,6 +31,17 @@ DEPEND="${RDEPEND}
 
 S="${WORKDIR}/${MY_PN}-${PV}"
 
+src_prepare() {
+	epatch \
+		"${FILESDIR}/${PN}-1.6.3-deinterlace-lavf.patch" \
+		"${FILESDIR}/${PN}-1.6.3-no-deprecated.patch" \
+		"${FILESDIR}/${PN}-1.6.3-bitrate.patch" \
+		"${FILESDIR}/${PN}-1.6.3-chain-dispose.patch" \
+		"${FILESDIR}/${PN}-1.6.3-minr-maxr.patch" \
+		"${FILESDIR}/${PN}-1.6.3-minr-compat.patch"
+	eautoreconf
+}
+
 multilib_src_configure() {
 	GST_PLUGINS_BUILD=""
 	# Upstream dropped support for system libav and won't work


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: media-plugins/gst-plugins-libav/files/, media-plugins/gst-plugins-libav/
@ 2019-02-12 11:10 Mart Raudsepp
  0 siblings, 0 replies; 4+ messages in thread
From: Mart Raudsepp @ 2019-02-12 11:10 UTC (permalink / raw
  To: gentoo-commits

commit:     111c5eb603e3a831e41b810786999aeea5ec6eb0
Author:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 12 10:31:42 2019 +0000
Commit:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
CommitDate: Tue Feb 12 11:09:42 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=111c5eb6

media-plugins/gst-plugins-libav: leak fix; bump bundled ffmpeg used with USE=libav

Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Mart Raudsepp <leio <AT> gentoo.org>

 media-plugins/gst-plugins-libav/Manifest           |   1 +
 .../files/AVOptionsRanges-leak-fix.patch           |  34 +++++++
 ...gst-plugins-libav-1.14.4.4.1.1_p20190113.ebuild | 103 +++++++++++++++++++++
 3 files changed, 138 insertions(+)

diff --git a/media-plugins/gst-plugins-libav/Manifest b/media-plugins/gst-plugins-libav/Manifest
index acd2008c714..fcc156cef16 100644
--- a/media-plugins/gst-plugins-libav/Manifest
+++ b/media-plugins/gst-plugins-libav/Manifest
@@ -1,4 +1,5 @@
 DIST ffmpeg-3.4.5.tar.bz2 10183082 BLAKE2B f72157baefcd6a0ca8f389309bbe947ad21996e0f2eb3c46c6bfc90f1ebbb14bfd007d001e46ea51efef5db5f9fcee24b1a90b6862136aeebecdc95bb61b23a5 SHA512 e12707d47404a9ce02790b77d2852fc1a1573c8108e980c7355fa48ba891d1649464d4fe4d08394ecd6d871f651ac4388486b7654cb54a7aaeedaf05c55513ec
+DIST ffmpeg-4.1.1.tar.bz2 10686360 BLAKE2B 47f4716d7e184d7318eb1a99ab1cdc188009464e973162e583f7ca4ae79fa3b103f9d5329c8993b72d20667e42e5a749123709a4640f07762568300b5c3c897f SHA512 0241c44e1dffd0d890a3d30a1b2387ea167d578bb39ba0c804fb417e132d343a9e43da9247b205e18b893d8cf75d8528e9971569be67ac380b88618ef0a75ed4
 DIST ffmpeg-4.1.tar.bz2 10687291 BLAKE2B 07293af1b13c6c6cad72e368207db21bdbc4b991931166c24ff40b00c3b3c8e1242be1876af8e3f154cc840fcd90d87b762fe77faccf06936dd096478d5d074b SHA512 ccf6d07268dc47e08ca619eb182a003face2a8ee73ec1a28157330dd7de1df88939def1fc1c7e6b6ac7b59752cdad84657d589b2fafb73e14e5ef03fb6e33417
 DIST gst-libav-1.14.4-ffmpeg4-patchset.tar.xz 49428 BLAKE2B 74c3e0b25643bcfdf01d1d16514401fef4bb988ba3d1f306b647ba0cd6e89f0205cc33e6d144889d6b2f7fab9e4fae946e03821a85009fa95c68f3cedf25068a SHA512 1347424ed342f00c25ac4780670611a24eeaf708426b6efc6d9f6c6fa7bf91ef292302a5363afe9523c497265b8c0d7ad81374364cbecb2924b749e716819745
 DIST gst-libav-1.14.4.tar.xz 9036732 BLAKE2B 1c2e257912f61dac71e1d890f4cb650e0cdbbf4472cbd8dc6b73e471d1914409b71699bd198c154069e15e68364530e91f76619afb52b91e373e58c9237ab7cb SHA512 4a0e9a91c23cba82e6a6b8eb65ff42b9d80389dd232b08c22b3431d3942fb93a6a7e64be97083d11cbceb2abe5d45dc5b37d230f7552e1a7fb193610d0530717

diff --git a/media-plugins/gst-plugins-libav/files/AVOptionsRanges-leak-fix.patch b/media-plugins/gst-plugins-libav/files/AVOptionsRanges-leak-fix.patch
new file mode 100644
index 00000000000..5594dbc1ab8
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/AVOptionsRanges-leak-fix.patch
@@ -0,0 +1,34 @@
+From a2c88ec9dadf4a6d7f5f7b16feb2c5c2e155d72d Mon Sep 17 00:00:00 2001
+From: Seungha Yang <seungha.yang@navercorp.com>
+Date: Sun, 13 Jan 2019 00:46:50 +0900
+Subject: [PATCH] avcfg: Fix AVOptionRanges leak
+
+It must be freed with av_opt_freep_ranges as documented.
+---
+ ext/libav/gstavcfg.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/ext/libav/gstavcfg.c b/ext/libav/gstavcfg.c
+index 9236078..9d34462 100644
+--- a/ext/libav/gstavcfg.c
++++ b/ext/libav/gstavcfg.c
+@@ -252,10 +252,12 @@ install_opts (GObjectClass * gobject_class, const AVClass ** obj, guint prop_id,
+     if (g_object_class_find_property (gobject_class, name))
+       continue;
+ 
+-    if (av_opt_query_ranges (&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0
+-        && r->nb_ranges == 1) {
+-      min = r->range[0]->value_min;
+-      max = r->range[0]->value_max;
++    if (av_opt_query_ranges (&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0) {
++      if (r->nb_ranges == 1) {
++        min = r->range[0]->value_min;
++        max = r->range[0]->value_max;
++      }
++      av_opt_freep_ranges (&r);
+     }
+ 
+     help = g_strdup_printf ("%s%s", opt->help, extra_help);
+-- 
+2.17.0
+

diff --git a/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.1_p20190113.ebuild b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.1_p20190113.ebuild
new file mode 100644
index 00000000000..5b725f793bb
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.1_p20190113.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit autotools eapi7-ver multilib-minimal
+
+MY_PN="gst-libav"
+MY_PV="$(ver_cut 1-3)"
+MY_P="${MY_PN}-${MY_PV}"
+FFMPEG_PV="$(ver_cut 4- ${PV%_*})"
+
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="https://gstreamer.freedesktop.org/modules/gst-libav.html"
+SRC_URI="https://gstreamer.freedesktop.org/src/${MY_PN}/${MY_P}.tar.xz
+	https://dev.gentoo.org/~leio/distfiles/${MY_P}-ffmpeg4-patchset.tar.xz
+	libav? ( https://ffmpeg.org/releases/ffmpeg-${FFMPEG_PV}.tar.bz2 )"
+
+LICENSE="LGPL-2+"
+SLOT="1.0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~x86 ~x86-fbsd"
+IUSE="libav +orc"
+
+RDEPEND="
+	>=dev-libs/glib-2.40.0:2[${MULTILIB_USEDEP}]
+	>=media-libs/gstreamer-${MY_PV}:1.0[${MULTILIB_USEDEP}]
+	>=media-libs/gst-plugins-base-${MY_PV}:1.0[${MULTILIB_USEDEP}]
+	!libav? ( >=media-video/ffmpeg-4:0=[${MULTILIB_USEDEP}] )
+	libav? (
+		app-arch/bzip2[${MULTILIB_USEDEP}]
+		app-arch/xz-utils[${MULTILIB_USEDEP}]
+	)
+	orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )
+"
+DEPEND="${RDEPEND}
+	>=dev-util/gtk-doc-am-1.12
+	>=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+	"${WORKDIR}"/patches # ffmpeg-4 compat and more from git up to 20181115; requires eautoreconf
+	"${FILESDIR}"/AVOptionsRanges-leak-fix.patch # extra patch from Jan 2019 for a leak fix
+	"${FILESDIR}"/external-ffmpeg4-dep.patch # Automatically rescan available elements for registry when system ffmpeg changes
+)
+
+RESTRICT="test" # FIXME: tests seem to get stuck at one point; investigate properly
+
+src_unpack() {
+	default
+
+	if use libav; then
+		# Use newer version of bundled FFmpeg.
+		rm -r "${S}/gst-libs/ext/libav" || die
+		ln -s ../../../ffmpeg-${FFMPEG_PV} "${S}/gst-libs/ext/libav" || die
+	fi
+}
+
+src_prepare() {
+	default
+	eautoreconf # remove with a proper release without build system touching patchset
+}
+
+multilib_src_configure() {
+	GST_PLUGINS_BUILD=""
+	# Upstream dropped support for system libav and won't work
+	# for preserving its compat anymore, forcing us to rely on internal
+	# ffmpeg copy if we don't want to cause unresolvable blockers for
+	# libav setups.
+	# https://bugzilla.gnome.org/show_bug.cgi?id=758183
+	# Prefer system ffmpeg for -libav
+	local myconf=()
+
+	if use libav; then
+		ewarn "Using bundled ffmpeg copy as upstream dropped"
+		ewarn "the support for compiling against system libav"
+		ewarn "https://bugzilla.gnome.org/show_bug.cgi?id=758183"
+
+		myconf+=(--with-libav-extra-configure="--disable-debug --optflags=\\\"${CFLAGS}\\\"")
+	else
+		myconf+=("--with-system-libav")
+	fi
+
+	ECONF_SOURCE=${S} \
+	econf \
+		--disable-maintainer-mode \
+		--with-package-name="Gentoo GStreamer ebuild" \
+		--with-package-origin="https://www.gentoo.org" \
+		--disable-fatal-warnings \
+		$(use_enable orc) \
+		"${myconf[@]}"
+}
+
+multilib_src_compile() {
+	# Don't build with -Werror; verbose build
+	emake ERROR_CFLAGS= V=1
+}
+
+multilib_src_install_all() {
+	einstalldocs
+	find "${ED}" -name '*.la' -delete || die
+}


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: media-plugins/gst-plugins-libav/files/, media-plugins/gst-plugins-libav/
@ 2019-03-30 14:23 Mart Raudsepp
  0 siblings, 0 replies; 4+ messages in thread
From: Mart Raudsepp @ 2019-03-30 14:23 UTC (permalink / raw
  To: gentoo-commits

commit:     336f5a5340f9244062adede3bd2e901b98ee6c3a
Author:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 30 14:16:13 2019 +0000
Commit:     Mart Raudsepp <leio <AT> gentoo <DOT> org>
CommitDate: Sat Mar 30 14:23:23 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=336f5a53

media-plugins/gst-plugins-libav: bump bundled ffmpeg for USE=libav, timestamp fixes

Closes: https://bugs.gentoo.org/681710
Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Mart Raudsepp <leio <AT> gentoo.org>

 media-plugins/gst-plugins-libav/Manifest           |   1 +
 .../gst-plugins-libav/files/fix-negative-pts.patch |  40 ++++++++
 ...gst-plugins-libav-1.14.4.4.1.2_p20190329.ebuild | 104 +++++++++++++++++++++
 3 files changed, 145 insertions(+)

diff --git a/media-plugins/gst-plugins-libav/Manifest b/media-plugins/gst-plugins-libav/Manifest
index 4b36e56d740..818ea1de684 100644
--- a/media-plugins/gst-plugins-libav/Manifest
+++ b/media-plugins/gst-plugins-libav/Manifest
@@ -1,4 +1,5 @@
 DIST ffmpeg-3.4.5.tar.bz2 10183082 BLAKE2B f72157baefcd6a0ca8f389309bbe947ad21996e0f2eb3c46c6bfc90f1ebbb14bfd007d001e46ea51efef5db5f9fcee24b1a90b6862136aeebecdc95bb61b23a5 SHA512 e12707d47404a9ce02790b77d2852fc1a1573c8108e980c7355fa48ba891d1649464d4fe4d08394ecd6d871f651ac4388486b7654cb54a7aaeedaf05c55513ec
 DIST ffmpeg-4.1.1.tar.bz2 10686360 BLAKE2B 47f4716d7e184d7318eb1a99ab1cdc188009464e973162e583f7ca4ae79fa3b103f9d5329c8993b72d20667e42e5a749123709a4640f07762568300b5c3c897f SHA512 0241c44e1dffd0d890a3d30a1b2387ea167d578bb39ba0c804fb417e132d343a9e43da9247b205e18b893d8cf75d8528e9971569be67ac380b88618ef0a75ed4
+DIST ffmpeg-4.1.2.tar.bz2 10687366 BLAKE2B c69cc693078f40610c4414f01ed20f89a85db398b3177d8d79a6f58f2d48b6a8049a2bc622933e0ae0a2889f635c25ccf1c5856cb86a4d98bb0bc2308188ae86 SHA512 6c3bf20d46772a80299c9d385919a745e4022c0a9b3c438c0504d3c94bb8d472f2c9026105330fa7c50c2f23f511eb853f32e4387f73c0b7b0d0761c20cb8b31
 DIST gst-libav-1.14.4-ffmpeg4-patchset.tar.xz 49428 BLAKE2B 74c3e0b25643bcfdf01d1d16514401fef4bb988ba3d1f306b647ba0cd6e89f0205cc33e6d144889d6b2f7fab9e4fae946e03821a85009fa95c68f3cedf25068a SHA512 1347424ed342f00c25ac4780670611a24eeaf708426b6efc6d9f6c6fa7bf91ef292302a5363afe9523c497265b8c0d7ad81374364cbecb2924b749e716819745
 DIST gst-libav-1.14.4.tar.xz 9036732 BLAKE2B 1c2e257912f61dac71e1d890f4cb650e0cdbbf4472cbd8dc6b73e471d1914409b71699bd198c154069e15e68364530e91f76619afb52b91e373e58c9237ab7cb SHA512 4a0e9a91c23cba82e6a6b8eb65ff42b9d80389dd232b08c22b3431d3942fb93a6a7e64be97083d11cbceb2abe5d45dc5b37d230f7552e1a7fb193610d0530717

diff --git a/media-plugins/gst-plugins-libav/files/fix-negative-pts.patch b/media-plugins/gst-plugins-libav/files/fix-negative-pts.patch
new file mode 100644
index 00000000000..d5be422e781
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/files/fix-negative-pts.patch
@@ -0,0 +1,40 @@
+From 1d293764e55fb9c3901c9dfa903fa5ae0021ab10 Mon Sep 17 00:00:00 2001
+From: Guillaume Desmottes <guillaume.desmottes@collabora.com>
+Date: Thu, 21 Feb 2019 08:48:31 +0100
+Subject: [PATCH] avdemux: fix negative pts if start_time is bigger than the ts
+
+The start time is supposed to be the ts of the first frame.
+FFmpeg uses fractions to represent timestamps and the start time may use a
+different base than the frame pts. So we may end up having the start
+time bigger than the pts because of rounding when converting to gst ts.
+
+See https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/51
+for details.
+---
+ ext/libav/gstavdemux.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/ext/libav/gstavdemux.c b/ext/libav/gstavdemux.c
+index 30e0360..3b74f92 100644
+--- a/ext/libav/gstavdemux.c
++++ b/ext/libav/gstavdemux.c
+@@ -1473,8 +1473,14 @@ gst_ffmpegdemux_loop (GstFFMpegDemux * demux)
+     goto drop;
+ #endif
+ 
+-  if (GST_CLOCK_TIME_IS_VALID (timestamp))
+-    timestamp -= demux->start_time;
++  if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
++    /* start_time should be the ts of the first frame but it may actually be
++     * higher because of rounding when converting to gst ts. */
++    if (demux->start_time >= timestamp)
++      timestamp = 0;
++    else
++      timestamp -= demux->start_time;
++  }
+ 
+   /* check if we ran outside of the segment */
+   if (demux->segment.stop != -1 && timestamp > demux->segment.stop)
+-- 
+2.17.0
+

diff --git a/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.2_p20190329.ebuild b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.2_p20190329.ebuild
new file mode 100644
index 00000000000..e9c44dd1b7b
--- /dev/null
+++ b/media-plugins/gst-plugins-libav/gst-plugins-libav-1.14.4.4.1.2_p20190329.ebuild
@@ -0,0 +1,104 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit autotools eapi7-ver multilib-minimal
+
+MY_PN="gst-libav"
+MY_PV="$(ver_cut 1-3)"
+MY_P="${MY_PN}-${MY_PV}"
+FFMPEG_PV="$(ver_cut 4- ${PV%_*})"
+
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="https://gstreamer.freedesktop.org/modules/gst-libav.html"
+SRC_URI="https://gstreamer.freedesktop.org/src/${MY_PN}/${MY_P}.tar.xz
+	https://dev.gentoo.org/~leio/distfiles/${MY_P}-ffmpeg4-patchset.tar.xz
+	libav? ( https://ffmpeg.org/releases/ffmpeg-${FFMPEG_PV}.tar.bz2 )"
+
+LICENSE="LGPL-2+"
+SLOT="1.0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~x86 ~x86-fbsd"
+IUSE="libav +orc"
+
+RDEPEND="
+	>=dev-libs/glib-2.40.0:2[${MULTILIB_USEDEP}]
+	>=media-libs/gstreamer-${MY_PV}:1.0[${MULTILIB_USEDEP}]
+	>=media-libs/gst-plugins-base-${MY_PV}:1.0[${MULTILIB_USEDEP}]
+	!libav? ( >=media-video/ffmpeg-4:0=[${MULTILIB_USEDEP}] )
+	libav? (
+		app-arch/bzip2[${MULTILIB_USEDEP}]
+		app-arch/xz-utils[${MULTILIB_USEDEP}]
+	)
+	orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )
+"
+DEPEND="${RDEPEND}
+	>=dev-util/gtk-doc-am-1.12
+	>=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+	"${WORKDIR}"/patches # ffmpeg-4 compat and more from git up to 20181115; requires eautoreconf
+	"${FILESDIR}"/AVOptionsRanges-leak-fix.patch # extra patch from Jan 2019 for a leak fix
+	"${FILESDIR}"/fix-negative-pts.patch # extra patch from Feb 2019 to fix negative pts if start_time is bigger than the ts
+	"${FILESDIR}"/external-ffmpeg4-dep.patch # Automatically rescan available elements for registry when system ffmpeg changes
+)
+
+RESTRICT="test" # FIXME: tests seem to get stuck at one point; investigate properly
+
+src_unpack() {
+	default
+
+	if use libav; then
+		# Use newer version of bundled FFmpeg.
+		rm -r "${S}/gst-libs/ext/libav" || die
+		ln -s ../../../ffmpeg-${FFMPEG_PV} "${S}/gst-libs/ext/libav" || die
+	fi
+}
+
+src_prepare() {
+	default
+	eautoreconf # remove with a proper release without build system touching patchset
+}
+
+multilib_src_configure() {
+	GST_PLUGINS_BUILD=""
+	# Upstream dropped support for system libav and won't work
+	# for preserving its compat anymore, forcing us to rely on internal
+	# ffmpeg copy if we don't want to cause unresolvable blockers for
+	# libav setups.
+	# https://bugzilla.gnome.org/show_bug.cgi?id=758183
+	# Prefer system ffmpeg for -libav
+	local myconf=()
+
+	if use libav; then
+		ewarn "Using bundled ffmpeg copy as upstream dropped"
+		ewarn "the support for compiling against system libav"
+		ewarn "https://bugzilla.gnome.org/show_bug.cgi?id=758183"
+
+		myconf+=(--with-libav-extra-configure="--disable-debug --optflags=\\\"${CFLAGS}\\\"")
+	else
+		myconf+=("--with-system-libav")
+	fi
+
+	ECONF_SOURCE=${S} \
+	econf \
+		--disable-maintainer-mode \
+		--with-package-name="Gentoo GStreamer ebuild" \
+		--with-package-origin="https://www.gentoo.org" \
+		--disable-fatal-warnings \
+		$(use_enable orc) \
+		"${myconf[@]}"
+}
+
+multilib_src_compile() {
+	# Don't build with -Werror; verbose build
+	emake ERROR_CFLAGS= V=1
+}
+
+multilib_src_install_all() {
+	einstalldocs
+	find "${ED}" -name '*.la' -delete || die
+}


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-03-30 14:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-05 14:48 [gentoo-commits] repo/gentoo:master commit in: media-plugins/gst-plugins-libav/files/, media-plugins/gst-plugins-libav/ Pacho Ramos
  -- strict thread matches above, loose matches on Subject: below --
2016-02-17 21:08 Alexis Ballier
2019-02-12 11:10 Mart Raudsepp
2019-03-30 14:23 Mart Raudsepp

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox