From: Alfred Agrell floating@muncher.se
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56698 --- dlls/winegstreamer/wg_parser.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c index 431a8b74cb2..35e155224ba 100644 --- a/dlls/winegstreamer/wg_parser.c +++ b/dlls/winegstreamer/wg_parser.c @@ -117,6 +117,7 @@ struct wg_parser_stream
bool flushing, eos, enabled, has_tags, has_buffer, no_more_pads;
+ uint64_t prev_presentation_end; uint64_t duration; gchar *tags[WG_PARSER_TAG_COUNT]; }; @@ -371,6 +372,14 @@ static NTSTATUS wg_parser_stream_get_buffer(void *args) wg_buffer->pts = GST_BUFFER_PTS(buffer) / 100; if ((wg_buffer->has_duration = GST_BUFFER_DURATION_IS_VALID(buffer))) wg_buffer->duration = GST_BUFFER_DURATION(buffer) / 100; + if (wg_buffer->has_duration && !wg_buffer->has_pts && stream->prev_presentation_end) + { + wg_buffer->has_pts = true; + wg_buffer->pts = stream->prev_presentation_end; + stream->prev_presentation_end = wg_buffer->pts + wg_buffer->duration; + } + if (wg_buffer->has_duration && wg_buffer->has_pts) + stream->prev_presentation_end = wg_buffer->pts + wg_buffer->duration; wg_buffer->discontinuity = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DISCONT); wg_buffer->preroll = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_LIVE); wg_buffer->delta = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT);