diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-04-29 13:06:07 +0300 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-05-02 10:03:14 +0300 |
commit | 6b4a77fc97448f4316f1bc2c0a2249491905f89d (patch) | |
tree | bf7b55e5c0f295606082a6188014bd04376dbc19 | |
parent | 26a222647f36dda6f17a1557303592352ae60068 (diff) |
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.c | 5 |
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; |