From 1577c5a8c38f5c94c8ca8bd7f1befbafaf3464bc Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Sun, 7 Nov 2010 15:02:50 +0100 Subject: [PATCH] winegstreamer: Forward media time on transform filter. --- dlls/winegstreamer/gsttffilter.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c index 933929962c2..f825a51b0aa 100644 --- a/dlls/winegstreamer/gsttffilter.c +++ b/dlls/winegstreamer/gsttffilter.c @@ -166,6 +166,14 @@ static GstFlowReturn got_data(GstPad *pad, GstBuffer *buf) { } else IMediaSample_SetTime(sample, NULL, NULL); + if (GST_BUFFER_OFFSET_IS_VALID(buf) && + GST_BUFFER_OFFSET_END_IS_VALID(buf)) { + tStart = buf->offset / 100; + tStop = buf->offset_end / 100; + IMediaSample_SetMediaTime(sample, &tStart, &tStop); + } + else + IMediaSample_SetMediaTime(sample, NULL, NULL); IMediaSample_SetDiscontinuity(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_DISCONT)); IMediaSample_SetPreroll(sample, GST_BUFFER_FLAG_IS_SET(buf, GST_BUFFER_FLAG_PREROLL)); @@ -232,6 +240,10 @@ static HRESULT WINAPI Gstreamer_transform_ProcessData(TransformFilter *iface, IM if (hr == S_OK) buf->duration = (tStop - tStart)*100; } + if (IMediaSample_GetMediaTime(sample, &tStart, &tStop) == S_OK) { + buf->offset = tStart * 100; + buf->offset_end = tStop * 100; + } if (IMediaSample_IsDiscontinuity(sample) == S_OK) GST_BUFFER_FLAG_SET(buf, GST_BUFFER_FLAG_DISCONT); if (IMediaSample_IsPreroll(sample) == S_OK)