summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /media-plugins/gst-plugins-ffmpeg
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'media-plugins/gst-plugins-ffmpeg')
-rw-r--r--media-plugins/gst-plugins-ffmpeg/Manifest2
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-audioresample.patch71
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-channel_layout.patch29
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-coma.patch16
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-ffmpeg2.patch139
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-gstffmpegpipe_redef.patch16
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-iscodec.patch24
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch187
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-r_frame_rate.patch25
-rw-r--r--media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-snow-codec.patch11
-rw-r--r--media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r2.ebuild84
-rw-r--r--media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r3.ebuild77
-rw-r--r--media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r4.ebuild80
-rw-r--r--media-plugins/gst-plugins-ffmpeg/metadata.xml5
14 files changed, 766 insertions, 0 deletions
diff --git a/media-plugins/gst-plugins-ffmpeg/Manifest b/media-plugins/gst-plugins-ffmpeg/Manifest
new file mode 100644
index 000000000000..62028ead5984
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/Manifest
@@ -0,0 +1,2 @@
+DIST gst-ffmpeg-0.10.13_p201211-libav-9-patches.tar.xz 14076 SHA256 5afa627ccbbedc1c80bfd419cb497c746aea0f27e0165a49c41947eba31774ee SHA512 cd12490600c0e56a85ec7436ec6152be8962c0e949ee9925ad64c114c60d7a72958f7c5ac98a3bdc6988bce707a2c40060e3a20b899ef2a95a30b4166bfb8145 WHIRLPOOL a7f17fd32112ba9df89ef80717946a50cc81e02e608c7cc15066987cd0e3556a1971ef5360ac50089d7c883aae5eb9d36ed3d7834fb7a075a816ceb16fa2b960
+DIST gst-ffmpeg-0.10.13_p201211.tar.xz 4285300 SHA256 cc15841b9972d1b60c9aaa3ffae14f3dbf44c0b08c14bb9319fb8956c89864c6 SHA512 9067aa92ef7613b08a51957d35d1de80897c28cb959522d9b523de6f482635dac3fe421015febb88ece624b7baee0216dd4b72e770bf92c05d8994f186d2f396 WHIRLPOOL 88ba2ce647ca821ef8f7aa22d64cf39397e30d8f34eadec475e6b627472c4baf6c7de6c60d4ca86527a67c710193dc00eb6534fe8bc92f73cc26db1f8e404a49
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-audioresample.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-audioresample.patch
new file mode 100644
index 000000000000..3c115d7b45c5
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-audioresample.patch
@@ -0,0 +1,71 @@
+--- ext/ffmpeg/gstffmpegaudioresample.c~ 2015-05-29 11:38:03.639001637 +0200
++++ ext/ffmpeg/gstffmpegaudioresample.c 2015-05-29 20:08:24.744107000 +0200
+@@ -24,6 +24,7 @@
+ #include "config.h"
+ #endif
+
++#include <libavresample/avresample.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
+ #else
+@@ -37,6 +38,60 @@
+ #include "gstffmpeg.h"
+ #include "gstffmpegcodecmap.h"
+
++struct AudioData {
++ const AVClass *class; /**< AVClass for logging */
++ uint8_t *data[AVRESAMPLE_MAX_CHANNELS]; /**< data plane pointers */
++ uint8_t *buffer; /**< data buffer */
++ unsigned int buffer_size; /**< allocated buffer size */
++ int allocated_samples; /**< number of samples the buffer can hold */
++ int nb_samples; /**< current number of samples */
++ enum AVSampleFormat sample_fmt; /**< sample format */
++ int channels; /**< channel count */
++ int allocated_channels; /**< allocated channel count */
++ int is_planar; /**< sample format is planar */
++ int planes; /**< number of data planes */
++ int sample_size; /**< bytes per sample */
++ int stride; /**< sample byte offset within a plane */
++ int read_only; /**< data is read-only */
++ int allow_realloc; /**< realloc is allowed */
++ int ptr_align; /**< minimum data pointer alignment */
++ int samples_align; /**< allocated samples alignment */
++ const char *name; /**< name for debug logging */
++};
++
++typedef struct AudioData AudioData;
++
++struct ReSampleContext {
++ AVAudioResampleContext *avr;
++ AudioData *buffer;
++ uint8_t *filter_bank;
++ int filter_length;
++ int ideal_dst_incr;
++ int dst_incr;
++ unsigned int index;
++ int frac;
++ int src_incr;
++ int compensation_distance;
++ int phase_shift;
++ int phase_mask;
++ int linear;
++ enum AVResampleFilterType filter_type;
++ int kaiser_beta;
++ void (*set_filter)(void *filter, double *tab, int phase, int tap_count);
++ void (*resample_one)(struct ResampleContext *c, void *dst0,
++ int dst_index, const void *src0,
++ unsigned int index, int frac);
++ void (*resample_nearest)(void *dst0, int dst_index,
++ const void *src0, unsigned int index);
++ int padding_size;
++ int initial_padding_filled;
++ int initial_padding_samples;
++ int final_padding_filled;
++ int final_padding_samples;
++};
++
++typedef struct ReSampleContext ReSampleContext;
++
+ typedef struct _GstFFMpegAudioResample
+ {
+ GstBaseTransform element;
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-channel_layout.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-channel_layout.patch
new file mode 100644
index 000000000000..9358f76153ca
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-channel_layout.patch
@@ -0,0 +1,29 @@
+Include correct header with correct version. Fixes build with ffmpeg-0.10.
+
+
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegcodecmap.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+@@ -25,10 +25,20 @@
+ #include <gst/gst.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
+-#include <channel_layout.h>>
++#include <avutil.h>
++#if (LIBAVUTIL_VERSION_INT > AV_VERSION_INT(52,6,0) || (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT > AV_VERSION_INT(52,2,0)))
++#include <channel_layout.h>
++#else
++#include <audioconvert.h>
++#endif
+ #else
+ #include <libavcodec/avcodec.h>
++#include <libavutil/avutil.h>
++#if (LIBAVUTIL_VERSION_INT > AV_VERSION_INT(52,6,0) || (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT > AV_VERSION_INT(52,2,0)))
+ #include <libavutil/channel_layout.h>
++#else
++#include <libavutil/audioconvert.h>
++#endif
+ #endif
+ #include <string.h>
+
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-coma.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-coma.patch
new file mode 100644
index 000000000000..0426d00301c5
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-coma.patch
@@ -0,0 +1,16 @@
+Some muxers come with a ',' in their name, replace it by '_' as in the other
+places.
+
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegmux.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegmux.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegmux.c
+@@ -936,7 +936,7 @@ gst_ffmpegmux_register (GstPlugin * plug
+ p = type_name;
+
+ while (*p) {
+- if (*p == '.')
++ if (*p == '.' || *p == ',')
+ *p = '_';
+ p++;
+ }
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-ffmpeg2.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-ffmpeg2.patch
new file mode 100644
index 000000000000..0ee39dac7f53
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-ffmpeg2.patch
@@ -0,0 +1,139 @@
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcfg.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegcfg.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcfg.c
+@@ -171,13 +171,10 @@ gst_ffmpeg_idct_algo_get_type (void)
+ {FF_IDCT_INT, "JPEG reference Integer", "int"},
+ {FF_IDCT_SIMPLE, "Simple", "simple"},
+ {FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
+- {FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
+ {FF_IDCT_ARM, "ARM", "arm"},
+ {FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
+ {FF_IDCT_SH4, "SH4", "sh4"},
+ {FF_IDCT_SIMPLEARM, "SIMPLEARM", "simplearm"},
+- {FF_IDCT_H264, "H264", "h264"},
+- {FF_IDCT_VP3, "VP3", "vp3"},
+ {FF_IDCT_IPP, "IPP", "ipp"},
+ {FF_IDCT_XVIDMMX, "XVIDMMX", "xvidmmx"},
+ {0, NULL, NULL},
+@@ -274,9 +271,6 @@ gst_ffmpeg_flags_get_type (void)
+ "global-headers"},
+ {CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
+ "aic"},
+- {CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
+- {CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
+- "qp-rd"},
+ {CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
+ {0, NULL, NULL},
+ };
+@@ -580,18 +574,6 @@ gst_ffmpeg_cfg_init (void)
+ -100, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ gst_ffmpeg_add_pspec (pspec, max_key_interval, FALSE, mpeg, NULL);
+
+- pspec = g_param_spec_int ("luma-elim-threshold",
+- "Luma Elimination Threshold",
+- "Luma Single Coefficient Elimination Threshold",
+- -99, 99, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+- gst_ffmpeg_add_pspec (pspec, config.luma_elim_threshold, FALSE, mpeg, NULL);
+-
+- pspec = g_param_spec_int ("chroma-elim-threshold",
+- "Chroma Elimination Threshold",
+- "Chroma Single Coefficient Elimination Threshold",
+- -99, 99, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+- gst_ffmpeg_add_pspec (pspec, config.chroma_elim_threshold, FALSE, mpeg, NULL);
+-
+ pspec = g_param_spec_float ("lumi-masking", "Luminance Masking",
+ "Luminance Masking", -1.0f, 1.0f, 0.0f,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegcodecmap.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+@@ -572,13 +572,11 @@ gst_ffmpeg_codecid_to_caps (enum AVCodec
+ break;
+ }
+
+- /* FIXME: context->sub_id must be filled in during decoding */
+ caps =
+ gst_ff_vid_caps_new (context, codec_id, encode,
+ "video/x-pn-realvideo", "systemstream", G_TYPE_BOOLEAN, FALSE,
+ "rmversion", G_TYPE_INT, version, NULL);
+ if (context) {
+- gst_caps_set_simple (caps, "format", G_TYPE_INT, context->sub_id, NULL);
+ if (context->extradata_size >= 8) {
+ gst_caps_set_simple (caps,
+ "subformat", G_TYPE_INT, GST_READ_UINT32_BE (context->extradata),
+@@ -2559,18 +2557,6 @@ gst_ffmpeg_caps_with_codecid (enum AVCod
+ }
+ break;
+
+- case AV_CODEC_ID_RV10:
+- case AV_CODEC_ID_RV20:
+- case AV_CODEC_ID_RV30:
+- case AV_CODEC_ID_RV40:
+- {
+- gint format;
+-
+- if (gst_structure_get_int (str, "format", &format))
+- context->sub_id = format;
+-
+- break;
+- }
+ case AV_CODEC_ID_COOK:
+ case AV_CODEC_ID_RA_288:
+ case AV_CODEC_ID_RA_144:
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegenc.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegenc.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegenc.c
+@@ -572,7 +572,6 @@ gst_ffmpegenc_setcaps (GstPad * pad, Gst
+ ffmpegenc->context->coder_type = 0;
+ ffmpegenc->context->context_model = 0;
+ ffmpegenc->context->scenechange_threshold = 0;
+- ffmpegenc->context->inter_threshold = 0;
+
+ /* and last but not least the pass; CBR, 2-pass, etc */
+ ffmpegenc->context->flags |= ffmpegenc->pass;
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegdec.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegdec.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegdec.c
+@@ -2082,7 +2082,7 @@ gst_ffmpegdec_audio_frame (GstFFMpegDec
+ const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
+ {
+ gint len = -1, got_frame;
+- gint have_data = AVCODEC_MAX_AUDIO_FRAME_SIZE;
++ gint have_data = 0;
+ GstClockTime out_timestamp, out_duration;
+ gint64 out_offset;
+ AVPacket packet;
+@@ -2101,21 +2101,22 @@ gst_ffmpegdec_audio_frame (GstFFMpegDec
+ goto beach;
+ }
+
+- *outbuf =
+- new_aligned_buffer (AVCODEC_MAX_AUDIO_FRAME_SIZE,
+- GST_PAD_CAPS (ffmpegdec->srcpad));
+-
+ gst_avpacket_init (&packet, data, size);
+ len = avcodec_decode_audio4 (ffmpegdec->context, frame, &got_frame, &packet);
+ GST_DEBUG_OBJECT (ffmpegdec,
+ "Decode audio: ret=%d, got_frame=%d", len, got_frame);
+ if (!got_frame) {
+- gst_buffer_unref (*outbuf);
+- *outbuf = NULL;
+ len = -1;
+ goto beach;
+ }
+- if (len >= 0) have_data = copy_samples(ffmpegdec->context, frame, GST_BUFFER_DATA (*outbuf), AVCODEC_MAX_AUDIO_FRAME_SIZE);
++
++ int obuf_size = av_samples_get_buffer_size(NULL, ffmpegdec->context->channels, frame->nb_samples, frame->format, 0);
++
++ *outbuf=
++ new_aligned_buffer (obuf_size,
++ GST_PAD_CAPS (ffmpegdec->srcpad));
++
++ if (len >= 0) have_data = copy_samples(ffmpegdec->context, frame, GST_BUFFER_DATA (*outbuf), obuf_size);
+
+ if (len >= 0 && have_data > 0) {
+ GST_DEBUG_OBJECT (ffmpegdec, "Creating output buffer");
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-gstffmpegpipe_redef.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-gstffmpegpipe_redef.patch
new file mode 100644
index 000000000000..f76d72affde8
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-gstffmpegpipe_redef.patch
@@ -0,0 +1,16 @@
+This is already typedef'ed like that in gstffmpeg.h, included from this file.
+https://bugs.gentoo.org/show_bug.cgi?id=460208
+
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegpipe.h
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegpipe.h
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegpipe.h
+@@ -48,8 +48,6 @@ G_BEGIN_DECLS
+ g_cond_signal (m->cond); \
+ } G_STMT_END
+
+-typedef struct _GstFFMpegPipe GstFFMpegPipe;
+-
+ struct _GstFFMpegPipe
+ {
+ /* lock for syncing */
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-iscodec.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-iscodec.patch
new file mode 100644
index 000000000000..ef198cc33b55
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-iscodec.patch
@@ -0,0 +1,24 @@
+Provide replacement for these functions when not available.
+(e.g ffmpeg-0.10)
+
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegutils.h
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegutils.h
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegutils.h
+@@ -99,4 +99,16 @@ av_smp_format_depth(enum AVSampleFormat
+ GstBuffer *
+ new_aligned_buffer (gint size, GstCaps * caps);
+
++#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,7,0) || (LIBAVCODEC_VERSION_MICRO >= 100 && LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,8,0)))
++static inline int av_codec_is_encoder(AVCodec *codec)
++{
++ return codec && (codec->encode || codec->encode2);
++}
++
++static inline int av_codec_is_decoder(AVCodec *codec)
++{
++ return codec && codec->decode;
++}
++#endif
++
+ #endif /* __GST_FFMPEG_UTILS_H__ */
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch
new file mode 100644
index 000000000000..424bd0cc5c71
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch
@@ -0,0 +1,187 @@
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegcodecmap.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegcodecmap.c
+@@ -1925,6 +1925,10 @@ gst_ffmpeg_smpfmt_to_caps (enum AVSample
+ gboolean integer = TRUE;
+ gboolean signedness = FALSE;
+
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(51,46,0)
++ sample_fmt = av_get_packed_sample_fmt (sample_fmt);
++#endif
++
+ switch (sample_fmt) {
+ case AV_SAMPLE_FMT_S16:
+ signedness = TRUE;
+@@ -2009,7 +2013,7 @@ gst_ffmpeg_codectype_to_audio_caps (AVCo
+
+ ctx.channels = -1;
+ caps = gst_caps_new_empty ();
+- for (i = 0; i <= AV_SAMPLE_FMT_DBL; i++) {
++ for (i = 0; i < AV_SAMPLE_FMT_NB; i++) {
+ temp =
+ gst_ffmpeg_smpfmt_to_caps (i, encode ? &ctx : NULL, codec_id, encode);
+ if (temp != NULL) {
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegutils.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegutils.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegutils.c
+@@ -47,6 +47,9 @@ gint
+ av_smp_format_depth (enum AVSampleFormat smp_fmt)
+ {
+ gint depth = -1;
++#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(51,46,0)
++ smp_fmt = av_get_packed_sample_fmt (smp_fmt);
++#endif
+ switch (smp_fmt) {
+ case AV_SAMPLE_FMT_U8:
+ depth = 1;
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegdec.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegdec.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegdec.c
+@@ -2044,16 +2044,49 @@ out_of_segment:
+ }
+ }
+
++static void copy_samples_planar(unsigned bps,
++ unsigned nb_samples,
++ unsigned nb_channels,
++ unsigned char *dst,
++ unsigned char **src)
++{
++ unsigned s, c, o = 0;
++
++ for (s = 0; s < nb_samples; s++) {
++ for (c = 0; c < nb_channels; c++) {
++ memcpy(dst, src[c] + o, bps);
++ dst += bps;
++ }
++ o += bps;
++ }
++}
++
++static int copy_samples(AVCodecContext *avc, AVFrame *frame,
++ unsigned char *buf, int max_size)
++{
++ int channels = avc->channels;
++ int sample_size = av_get_bytes_per_sample(avc->sample_fmt);
++ int size = channels * sample_size * frame->nb_samples;
++ if (size > max_size) {
++ return -1;
++ }
++ if (av_sample_fmt_is_planar(avc->sample_fmt))
++ copy_samples_planar(sample_size, frame->nb_samples, channels, buf, frame->extended_data);
++ else memcpy(buf, frame->data[0], size);
++ return size;
++}
++
+ static gint
+ gst_ffmpegdec_audio_frame (GstFFMpegDec * ffmpegdec,
+ AVCodec * in_plugin, guint8 * data, guint size,
+ const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
+ {
+- gint len = -1;
++ gint len = -1, got_frame;
+ gint have_data = AVCODEC_MAX_AUDIO_FRAME_SIZE;
+ GstClockTime out_timestamp, out_duration;
+ gint64 out_offset;
+ AVPacket packet;
++ AVFrame *frame;
+
+ GST_DEBUG_OBJECT (ffmpegdec,
+ "size:%d, offset:%" G_GINT64_FORMAT ", ts:%" GST_TIME_FORMAT ", dur:%"
+@@ -2061,15 +2094,28 @@ gst_ffmpegdec_audio_frame (GstFFMpegDec
+ dec_info->offset, GST_TIME_ARGS (dec_info->timestamp),
+ GST_TIME_ARGS (dec_info->duration), GST_TIME_ARGS (ffmpegdec->next_out));
+
++ frame = avcodec_alloc_frame();
++ if (!frame) {
++ *outbuf = NULL;
++ len = -1;
++ goto beach;
++ }
++
+ *outbuf =
+ new_aligned_buffer (AVCODEC_MAX_AUDIO_FRAME_SIZE,
+ GST_PAD_CAPS (ffmpegdec->srcpad));
+
+ gst_avpacket_init (&packet, data, size);
+- len = avcodec_decode_audio3 (ffmpegdec->context,
+- (int16_t *) GST_BUFFER_DATA (*outbuf), &have_data, &packet);
++ len = avcodec_decode_audio4 (ffmpegdec->context, frame, &got_frame, &packet);
+ GST_DEBUG_OBJECT (ffmpegdec,
+- "Decode audio: len=%d, have_data=%d", len, have_data);
++ "Decode audio: ret=%d, got_frame=%d", len, got_frame);
++ if (!got_frame) {
++ gst_buffer_unref (*outbuf);
++ *outbuf = NULL;
++ len = -1;
++ goto beach;
++ }
++ if (len >= 0) have_data = copy_samples(ffmpegdec->context, frame, GST_BUFFER_DATA (*outbuf), AVCODEC_MAX_AUDIO_FRAME_SIZE);
+
+ if (len >= 0 && have_data > 0) {
+ GST_DEBUG_OBJECT (ffmpegdec, "Creating output buffer");
+@@ -2145,6 +2191,7 @@ gst_ffmpegdec_audio_frame (GstFFMpegDec
+ }
+
+ beach:
++ av_free(frame);
+ GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
+ *ret, *outbuf, len);
+ return len;
+Index: gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegenc.c
+===================================================================
+--- gst-ffmpeg-0.10.13_p201211.orig/ext/ffmpeg/gstffmpegenc.c
++++ gst-ffmpeg-0.10.13_p201211/ext/ffmpeg/gstffmpegenc.c
+@@ -843,12 +843,30 @@ gst_ffmpegenc_chain_video (GstPad * pad,
+ return gst_pad_push (ffmpegenc->srcpad, outbuf);
+ }
+
++static void copy_samples_to_planar(unsigned bps,
++ unsigned nb_samples,
++ unsigned nb_channels,
++ unsigned char *dst,
++ unsigned char *src)
++{
++ unsigned s, c, o = 0;
++
++ for (s = 0; s < nb_samples; s++) {
++ for (c = 0; c < nb_channels; c++) {
++ memcpy(dst + nb_samples * c, src + o, bps);
++ o += bps;
++ }
++ dst += bps;
++ }
++}
++
+ static GstFlowReturn
+ gst_ffmpegenc_encode_audio (GstFFMpegEnc * ffmpegenc, guint8 * audio_in,
+ guint in_size, guint max_size, GstClockTime timestamp,
+ GstClockTime duration, gboolean discont)
+ {
+ GstBuffer *outbuf;
++ GstBuffer *inbuf2;
+ AVCodecContext *ctx;
+ guint8 *audio_out;
+ gint res;
+@@ -864,7 +882,18 @@ gst_ffmpegenc_encode_audio (GstFFMpegEnc
+ if (ffmpegenc->buffer_size != max_size)
+ ffmpegenc->buffer_size = max_size;
+
++ if (av_sample_fmt_is_planar(ctx->sample_fmt)) {
++ guint8 * audio_in2;
++ inbuf2 = gst_buffer_new_and_alloc (in_size + FF_MIN_BUFFER_SIZE);
++ audio_in2 = GST_BUFFER_DATA (inbuf2);
++ copy_samples_to_planar(av_get_bytes_per_sample(ctx->sample_fmt), in_size / (av_get_bytes_per_sample(ctx->sample_fmt) * ctx->channels),
++ ctx->channels, audio_in2, audio_in);
++ audio_in = audio_in2;
++ }
+ res = avcodec_encode_audio (ctx, audio_out, max_size, (short *) audio_in);
++ if (av_sample_fmt_is_planar(ctx->sample_fmt)) {
++ gst_buffer_unref (inbuf2);
++ }
+
+ if (res < 0) {
+ GST_ERROR_OBJECT (ffmpegenc, "Failed to encode buffer: %d", res);
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-r_frame_rate.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-r_frame_rate.patch
new file mode 100644
index 000000000000..5c34257b867f
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-r_frame_rate.patch
@@ -0,0 +1,25 @@
+From: Ettore Di Giacinto <mudler@sabayonlinux.org>
+--- ext/ffmpeg/gstffmpegdemux.c~ 2015-05-29 00:52:07.601606544 +0200
++++ ext/ffmpeg/gstffmpegdemux.c 2015-05-29 01:18:18.533113323 +0200
+@@ -781,8 +781,8 @@
+ break;
+ case GST_FORMAT_DEFAULT:
+ gst_query_set_position (query, GST_FORMAT_DEFAULT,
+- gst_util_uint64_scale (timeposition, avstream->r_frame_rate.num,
+- GST_SECOND * avstream->r_frame_rate.den));
++ gst_util_uint64_scale (timeposition, avstream->avg_frame_rate.num,
++ GST_SECOND * avstream->avg_frame_rate.den));
+ res = TRUE;
+ break;
+ case GST_FORMAT_BYTES:
+@@ -818,8 +818,8 @@
+ break;
+ case GST_FORMAT_DEFAULT:
+ gst_query_set_duration (query, GST_FORMAT_DEFAULT,
+- gst_util_uint64_scale (timeduration, avstream->r_frame_rate.num,
+- GST_SECOND * avstream->r_frame_rate.den));
++ gst_util_uint64_scale (timeduration, avstream->avg_frame_rate.num,
++ GST_SECOND * avstream->avg_frame_rate.den));
+ res = TRUE;
+ break;
+ case GST_FORMAT_BYTES:
diff --git a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-snow-codec.patch b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-snow-codec.patch
new file mode 100644
index 000000000000..7e54f929f674
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-snow-codec.patch
@@ -0,0 +1,11 @@
+From: Ettore Di Giacinto <mudler@sabayonlinux.org>
+--- ext/ffmpeg/gstffmpegcodecmap.c~ 2015-05-29 10:50:06.207840323 +0200
++++ ext/ffmpeg/gstffmpegcodecmap.c 2015-05-29 10:50:25.638042896 +0200
+@@ -1307,7 +1307,6 @@
+ case AV_CODEC_ID_FLIC:
+ case AV_CODEC_ID_VMDVIDEO:
+ case AV_CODEC_ID_VMDAUDIO:
+- case AV_CODEC_ID_SNOW:
+ case AV_CODEC_ID_VIXL:
+ case AV_CODEC_ID_QPEG:
+ case AV_CODEC_ID_PGMYUV:
diff --git a/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r2.ebuild b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r2.ebuild
new file mode 100644
index 000000000000..24ddc643cc4d
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r2.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2014 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-ffmpeg"
+MY_P=${MY_PN}-${PV}
+
+# Create a major/minor combo for SLOT
+PVP=(${PV//[-\._]/ })
+SLOT=${PVP[0]}.${PVP[1]}
+
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="http://gstreamer.freedesktop.org/modules/gst-ffmpeg.html"
+#SRC_URI="http://gstreamer.freedesktop.org/src/${MY_PN}/${MY_P}.tar.bz2"
+SRC_URI="http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}.tar.xz
+ http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}-libav-9-patches.tar.xz"
+
+LICENSE="GPL-2"
+KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="+orc"
+
+S=${WORKDIR}/${MY_P}
+
+RDEPEND=">=media-libs/gstreamer-0.10.36-r2:0.10[${MULTILIB_USEDEP}]
+ >=media-libs/gst-plugins-base-0.10.36:0.10[${MULTILIB_USEDEP}]
+ >=virtual/ffmpeg-9-r1[${MULTILIB_USEDEP}]
+ || (
+ >=media-video/ffmpeg-1.2.6-r1:0[${MULTILIB_USEDEP}]
+ >=media-libs/libpostproc-10.20140517-r1[${MULTILIB_USEDEP}]
+ )
+ orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )"
+DEPEND="${RDEPEND}
+ >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]"
+RDEPEND="${RDEPEND}
+ abi_x86_32? (
+ !app-emulation/emul-linux-x86-gstplugins[-abi_x86_32(-)]
+ )"
+
+src_prepare() {
+ sed -e 's/sleep 15//' -i configure.ac configure || die
+
+ # libav-9 support backported from gst-plugins-libav-1.1.0
+ epatch ../${MY_P}-libav-9-patches/*.patch
+
+ # compat bits for older ffmpeg/libav releases
+ epatch "${FILESDIR}/${PV}-channel_layout.patch" \
+ "${FILESDIR}/${PV}-iscodec.patch" \
+ "${FILESDIR}/${PV}-coma.patch" \
+ "${FILESDIR}/${PV}-gstffmpegpipe_redef.patch"
+
+ # compatibility with recent releases
+ if has_version '>=media-video/ffmpeg-1.1' || has_version '>=media-video/libav-9' ; then
+ epatch "${FILESDIR}/${PV}-planaraudio.patch"
+ sed -i -e 's/ CODEC_ID/ AV_CODEC_ID/g' \
+ -e 's/ CodecID/ AVCodecID/g' \
+ ext/ffmpeg/*.{c,h}
+ epatch "${FILESDIR}/${PV}-ffmpeg2.patch"
+ fi
+}
+
+multilib_src_configure() {
+ # always use system ffmpeg if possible
+ ECONF_SOURCE=${S} \
+ econf \
+ --with-system-ffmpeg \
+ $(use_enable orc)
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ prune_libtool_files --modules
+}
+
+pkg_postinst() {
+ if has_version "media-video/ffmpeg"; then
+ elog "Please note that upstream uses media-video/libav"
+ elog "rather than media-video/ffmpeg. If you encounter any"
+ elog "issues try to move from ffmpeg to libav."
+ fi
+}
diff --git a/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r3.ebuild b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r3.ebuild
new file mode 100644
index 000000000000..8c283d099682
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r3.ebuild
@@ -0,0 +1,77 @@
+# 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-ffmpeg"
+MY_P=${MY_PN}-${PV}
+
+# Create a major/minor combo for SLOT
+PVP=(${PV//[-\._]/ })
+SLOT=${PVP[0]}.${PVP[1]}
+
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="http://gstreamer.freedesktop.org/modules/gst-ffmpeg.html"
+#SRC_URI="http://gstreamer.freedesktop.org/src/${MY_PN}/${MY_P}.tar.bz2"
+SRC_URI="http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}.tar.xz
+ http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}-libav-9-patches.tar.xz"
+
+LICENSE="GPL-2"
+KEYWORDS="~alpha amd64 ~arm hppa ~ia64 ~mips ppc ppc64 ~sparc x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="libav +orc"
+
+S=${WORKDIR}/${MY_P}
+
+RDEPEND="
+ >=media-libs/gstreamer-0.10.36-r2:0.10[${MULTILIB_USEDEP}]
+ >=media-libs/gst-plugins-base-0.10.36:0.10[${MULTILIB_USEDEP}]
+
+ !libav? ( >=media-video/ffmpeg-1.2.6-r1:0=[${MULTILIB_USEDEP}] )
+ libav? (
+ >=media-video/libav-9.12:0=[${MULTILIB_USEDEP}]
+ <media-video/libav-10:0=[${MULTILIB_USEDEP}]
+ >=media-libs/libpostproc-10.20140517-r1:0=[${MULTILIB_USEDEP}] )
+ orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )
+ abi_x86_32? ( !app-emulation/emul-linux-x86-gstplugins[-abi_x86_32(-)] )
+"
+DEPEND="${RDEPEND}
+ >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+src_prepare() {
+ sed -e 's/sleep 15//' -i configure.ac configure || die
+
+ # libav-9 support backported from gst-plugins-libav-1.1.0
+ epatch ../${MY_P}-libav-9-patches/*.patch
+
+ # compat bits for older ffmpeg/libav releases
+ epatch "${FILESDIR}/${PV}-channel_layout.patch" \
+ "${FILESDIR}/${PV}-iscodec.patch" \
+ "${FILESDIR}/${PV}-coma.patch" \
+ "${FILESDIR}/${PV}-gstffmpegpipe_redef.patch"
+
+ # compatibility with recent releases
+ if has_version '>=media-video/ffmpeg-1.1' || has_version '>=media-video/libav-9' ; then
+ epatch "${FILESDIR}/${PV}-planaraudio.patch"
+ sed -i -e 's/ CODEC_ID/ AV_CODEC_ID/g' \
+ -e 's/ CodecID/ AVCodecID/g' \
+ ext/ffmpeg/*.{c,h}
+ epatch "${FILESDIR}/${PV}-ffmpeg2.patch"
+ fi
+}
+
+multilib_src_configure() {
+ # always use system ffmpeg if possible
+ ECONF_SOURCE=${S} \
+ econf \
+ --with-system-ffmpeg \
+ $(use_enable orc)
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ prune_libtool_files --modules
+}
diff --git a/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r4.ebuild b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r4.ebuild
new file mode 100644
index 000000000000..63ced4f67d33
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/gst-plugins-ffmpeg-0.10.13_p201211-r4.ebuild
@@ -0,0 +1,80 @@
+# 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-ffmpeg"
+MY_P=${MY_PN}-${PV}
+
+# Create a major/minor combo for SLOT
+PVP=(${PV//[-\._]/ })
+SLOT=${PVP[0]}.${PVP[1]}
+
+DESCRIPTION="FFmpeg based gstreamer plugin"
+HOMEPAGE="http://gstreamer.freedesktop.org/modules/gst-ffmpeg.html"
+#SRC_URI="http://gstreamer.freedesktop.org/src/${MY_PN}/${MY_P}.tar.bz2"
+SRC_URI="http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}.tar.xz
+ http://dev.gentoo.org/~tetromino/distfiles/${PN}/${MY_P}-libav-9-patches.tar.xz"
+
+LICENSE="GPL-2"
+KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 sparc x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="libav +orc"
+
+S=${WORKDIR}/${MY_P}
+
+RDEPEND="
+ >=media-libs/gstreamer-0.10.36-r2:0.10[${MULTILIB_USEDEP}]
+ >=media-libs/gst-plugins-base-0.10.36:0.10[${MULTILIB_USEDEP}]
+
+ !libav? ( >=media-video/ffmpeg-1.2.6-r1:0=[${MULTILIB_USEDEP}] )
+ libav? (
+ >=media-video/libav-11.3:0=[${MULTILIB_USEDEP}]
+ >=media-libs/libpostproc-10.20140517-r1:0=[${MULTILIB_USEDEP}] )
+ orc? ( >=dev-lang/orc-0.4.17[${MULTILIB_USEDEP}] )
+ abi_x86_32? ( !app-emulation/emul-linux-x86-gstplugins[-abi_x86_32(-)] )
+"
+DEPEND="${RDEPEND}
+ >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]
+"
+
+src_prepare() {
+ sed -e 's/sleep 15//' -i configure.ac configure || die
+
+ # libav-9 support backported from gst-plugins-libav-1.1.0
+ epatch ../${MY_P}-libav-9-patches/*.patch
+
+ # compat bits for older ffmpeg/libav releases
+ epatch "${FILESDIR}/${PV}-channel_layout.patch" \
+ "${FILESDIR}/${PV}-iscodec.patch" \
+ "${FILESDIR}/${PV}-coma.patch" \
+ "${FILESDIR}/${PV}-gstffmpegpipe_redef.patch"
+
+ # compatibility with recent releases
+ if has_version '>=media-video/ffmpeg-1.1' || has_version '>=media-video/libav-9' ; then
+ epatch "${FILESDIR}/${PV}-planaraudio.patch"
+ sed -i -e 's/ CODEC_ID/ AV_CODEC_ID/g' \
+ -e 's/ CodecID/ AVCodecID/g' \
+ ext/ffmpeg/*.{c,h}
+ epatch "${FILESDIR}/${PV}-ffmpeg2.patch"
+ fi
+
+ # libav 11 migration
+ epatch "${FILESDIR}/${PV}-r_frame_rate.patch"
+ epatch "${FILESDIR}/${PV}-audioresample.patch"
+ epatch "${FILESDIR}/${PV}-snow-codec.patch"
+}
+
+multilib_src_configure() {
+ # always use system ffmpeg if possible
+ ECONF_SOURCE=${S} \
+ econf \
+ --with-system-ffmpeg \
+ $(use_enable orc)
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ prune_libtool_files --modules
+}
diff --git a/media-plugins/gst-plugins-ffmpeg/metadata.xml b/media-plugins/gst-plugins-ffmpeg/metadata.xml
new file mode 100644
index 000000000000..d1096fb54bd8
--- /dev/null
+++ b/media-plugins/gst-plugins-ffmpeg/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <herd>gstreamer</herd>
+</pkgmetadata>