[PATCH 1/5] winegstreamer: Inline query_duration() into wg_parser_connect().
Anton Baskanov
baskanov at gmail.com
Mon Jun 21 09:35:02 CDT 2021
Signed-off-by: Anton Baskanov <baskanov at gmail.com>
---
dlls/winegstreamer/wg_parser.c | 44 ++++++++++++++++++----------------
1 file changed, 23 insertions(+), 21 deletions(-)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 0d59297a026..acea68ad27d 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1496,26 +1496,6 @@ static gboolean src_event_cb(GstPad *pad, GstObject *parent, GstEvent *event)
return ret;
}
-static LONGLONG query_duration(GstPad *pad)
-{
- gint64 duration, byte_length;
-
- if (gst_pad_query_duration(pad, GST_FORMAT_TIME, &duration))
- return duration / 100;
-
- WARN("Failed to query time duration; trying to convert from byte length.\n");
-
- /* To accurately get a duration for the stream, we want to only consider the
- * length of that stream. Hence, query for the pad duration, instead of
- * using the file duration. */
- if (gst_pad_query_duration(pad, GST_FORMAT_BYTES, &byte_length)
- && gst_pad_query_convert(pad, GST_FORMAT_BYTES, byte_length, GST_FORMAT_TIME, &duration))
- return duration / 100;
-
- ERR("Failed to query duration.\n");
- return 0;
-}
-
static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_size)
{
GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE("quartz_src",
@@ -1552,6 +1532,7 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
for (i = 0; i < parser->stream_count; ++i)
{
struct wg_parser_stream *stream = parser->streams[i];
+ gint64 duration, byte_length;
while (!stream->has_caps && !parser->error)
pthread_cond_wait(&parser->init_cond, &parser->mutex);
@@ -1565,7 +1546,28 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
* avidemux, wavparse, qtdemux) in practice record duration before
* fixing caps, so as a heuristic, wait until we get caps before trying
* to query for duration. */
- stream->duration = query_duration(stream->their_src);
+ if (gst_pad_query_duration(stream->their_src, GST_FORMAT_TIME, &duration))
+ {
+ stream->duration = duration / 100;
+ }
+ else
+ {
+ WARN("Failed to query time duration; trying to convert from byte length.\n");
+
+ /* To accurately get a duration for the stream, we want to only consider the
+ * length of that stream. Hence, query for the pad duration, instead of
+ * using the file duration. */
+ if (gst_pad_query_duration(stream->their_src, GST_FORMAT_BYTES, &byte_length)
+ && gst_pad_query_convert(stream->their_src, GST_FORMAT_BYTES, byte_length,
+ GST_FORMAT_TIME, &duration))
+ {
+ stream->duration = duration / 100;
+ }
+ else
+ {
+ ERR("Failed to query duration.\n");
+ }
+ }
}
pthread_mutex_unlock(&parser->mutex);
--
2.25.1
More information about the wine-devel
mailing list