[PATCH 06/10] winegstreamer: Forward media time on transform filter
Maarten Lankhorst
m.b.lankhorst at gmail.com
Sun Nov 7 08:02:50 CST 2010
---
dlls/winegstreamer/gsttffilter.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c
index 9339299..f825a51 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)
--
1.7.1
More information about the wine-patches
mailing list