From: Paul Gofman pgofman@codeweavers.com
--- dlls/winegstreamer/wg_transform.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/winegstreamer/wg_transform.c b/dlls/winegstreamer/wg_transform.c index 83626095f9e..b45c5ef9847 100644 --- a/dlls/winegstreamer/wg_transform.c +++ b/dlls/winegstreamer/wg_transform.c @@ -85,6 +85,11 @@ static GstFlowReturn transform_sink_chain_cb(GstPad *pad, GstObject *parent, Gst
GST_LOG("transform %p, buffer %p.", transform, buffer);
+ if (GST_BUFFER_PTS_IS_VALID(buffer)) + transform->segment.start = GST_BUFFER_PTS(buffer); + else if (GST_BUFFER_DURATION_IS_VALID(buffer)) + transform->segment.start += GST_BUFFER_DURATION(buffer); + if (!(sample = gst_sample_new(buffer, transform->output_caps, NULL, NULL))) { GST_ERROR("Failed to allocate transform %p output sample.", transform); @@ -304,6 +309,10 @@ NTSTATUS wg_transform_create(void *args) transform->output_plane_align = 0; transform->output_format = output_format;
+ /* We need to use GST_FORMAT_TIME here because it's the only format + * some elements such avdec_wmav2 correctly support. */ + gst_segment_init(&transform->segment, GST_FORMAT_TIME); + if (!(src_caps = wg_format_to_caps(&input_format))) goto out; if (!(template = gst_pad_template_new("src", GST_PAD_SRC, GST_PAD_ALWAYS, src_caps))) @@ -442,12 +451,6 @@ NTSTATUS wg_transform_create(void *args) if (!(event = gst_event_new_caps(src_caps)) || !gst_pad_push_event(transform->my_src, event)) goto out; - - /* We need to use GST_FORMAT_TIME here because it's the only format - * some elements such avdec_wmav2 correctly support. */ - gst_segment_init(&transform->segment, GST_FORMAT_TIME); - transform->segment.start = 0; - transform->segment.stop = -1; if (!(event = gst_event_new_segment(&transform->segment)) || !gst_pad_push_event(transform->my_src, event)) goto out;