diff options
Diffstat (limited to 'media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch')
-rw-r--r-- | media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch | 187 |
1 files changed, 0 insertions, 187 deletions
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 deleted file mode 100644 index 424bd0cc5c71..000000000000 --- a/media-plugins/gst-plugins-ffmpeg/files/0.10.13_p201211-planaraudio.patch +++ /dev/null @@ -1,187 +0,0 @@ -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); |