From 1840b0233a4b4686e7254e568c91c7f078a05f66 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Tue, 15 Nov 2016 23:27:17 +1100 Subject: [PATCH] audio: Don't answer BYTES queries Refuse to answer BYTES queries ourselves. The only time they make sense is on raw elementary streams, in which case upstream would already have answered. They especially don't make sense for encoders to answer based on upstream values - although perhaps later we could make it do TIME->BYTES conversion on the source pad based on bitrate. https://bugzilla.gnome.org/show_bug.cgi?id=757631 --- gst-libs/gst/audio/gstaudiodecoder.c | 7 +++++++ gst-libs/gst/audio/gstaudioencoder.c | 18 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index e583e2f3d2..f03ec696d6 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -2767,6 +2767,13 @@ gst_audio_decoder_src_query_default (GstAudioDecoder * dec, GstQuery * query) break; } + /* Refuse BYTES format queries. If it made sense to + * answer them, upstream would have already */ + if (format == GST_FORMAT_BYTES) { + GST_LOG_OBJECT (dec, "Ignoring BYTES position query"); + break; + } + /* we start from the last seen time */ time = dec->output_segment.position; /* correct for the segment values */ diff --git a/gst-libs/gst/audio/gstaudioencoder.c b/gst-libs/gst/audio/gstaudioencoder.c index afd6c135e4..b8715a8b5c 100644 --- a/gst-libs/gst/audio/gstaudioencoder.c +++ b/gst-libs/gst/audio/gstaudioencoder.c @@ -924,7 +924,7 @@ gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf, ret = gst_pad_push (enc->srcpad, tmpbuf); if (ret != GST_FLOW_OK) { GST_WARNING_OBJECT (enc, "pushing header returned %s", - gst_flow_get_name (ret)); + gst_flow_get_name (ret)); goto exit; } } @@ -1896,6 +1896,14 @@ gst_audio_encoder_src_query_default (GstAudioEncoder * enc, GstQuery * query) } gst_query_parse_position (query, &req_fmt, NULL); + + /* Refuse BYTES format queries. If it made sense to + * * answer them, upstream would have already */ + if (req_fmt == GST_FORMAT_BYTES) { + GST_LOG_OBJECT (enc, "Ignoring BYTES position query"); + break; + } + fmt = GST_FORMAT_TIME; if (!(res = gst_pad_peer_query_position (enc->sinkpad, fmt, &pos))) break; @@ -1918,6 +1926,14 @@ gst_audio_encoder_src_query_default (GstAudioEncoder * enc, GstQuery * query) } gst_query_parse_duration (query, &req_fmt, NULL); + + /* Refuse BYTES format queries. If it made sense to + * * answer them, upstream would have already */ + if (req_fmt == GST_FORMAT_BYTES) { + GST_LOG_OBJECT (enc, "Ignoring BYTES position query"); + break; + } + fmt = GST_FORMAT_TIME; if (!(res = gst_pad_peer_query_duration (enc->sinkpad, fmt, &dur))) break;