summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-04-29 13:06:07 +0300
committerSebastian Dröge <sebastian@centricular.com>2016-05-02 10:03:14 +0300
commit6b4a77fc97448f4316f1bc2c0a2249491905f89d (patch)
treebf7b55e5c0f295606082a6188014bd04376dbc19
parent26a222647f36dda6f17a1557303592352ae60068 (diff)
downloadgst-libav-6b4a77fc97448f4316f1bc2c0a2249491905f89d.tar.gz
avauddec: Finish frames if they are header buffers only and don't produce any output
Otherwise we will consider them as one frame of raw audio that is still pending, and shift all timestamps by the amount of time spent with header buffers. https://bugzilla.gnome.org/show_bug.cgi?id=765797
-rw-r--r--ext/libav/gstavauddec.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c
index f2a400e..e55c256 100644
--- a/ext/libav/gstavauddec.c
+++ b/ext/libav/gstavauddec.c
@@ -702,7 +702,7 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
GstMapInfo map;
gint size, bsize, len, have_data;
GstFlowReturn ret = GST_FLOW_OK;
- gboolean do_padding;
+ gboolean do_padding, is_header;
ffmpegdec = (GstFFMpegAudDec *) decoder;
@@ -715,6 +715,7 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
}
inbuf = gst_buffer_ref (inbuf);
+ is_header = GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_HEADER);
oclass = (GstFFMpegAudDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
@@ -819,7 +820,7 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
ret =
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec),
ffmpegdec->outbuf, 1);
- else if (len < 0)
+ else if (len < 0 || is_header)
ret =
gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1);
ffmpegdec->outbuf = NULL;