[PATCH 5/5] winegstreamer: Use the source file size to compute duration.

Anton Baskanov baskanov at gmail.com
Mon Jun 21 09:35:06 CDT 2021


Signed-off-by: Anton Baskanov <baskanov at gmail.com>
---
Seems like GST_FORMAT_BYTES duration queries are forwarded all the way
up to my_src, which returns the source file size. On the other hand,
the convert query on stream->their_src expects the size of the decoded
raw data. This patch uses parser->their_sink to convert the source file
size to get a correct duration estimate.
---
 dlls/winegstreamer/wg_parser.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 4ee8d7198e4..f0a967cb919 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1532,7 +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;
+        gint64 duration;
 
         while (!stream->has_caps && !parser->error)
             pthread_cond_wait(&parser->init_cond, &parser->mutex);
@@ -1560,12 +1560,8 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
             {
                 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))
+                if (gst_pad_query_convert(parser->their_sink, GST_FORMAT_BYTES, file_size,
+                        GST_FORMAT_TIME, &duration))
                 {
                     stream->duration = duration / 100;
                 }
-- 
2.25.1




More information about the wine-devel mailing list