[PATCH 5/5] winegstreamer: Flatten wg_parser_event into a wg_parser_buffer structure.

Zebediah Figura zfigura at codeweavers.com
Wed Feb 23 15:46:50 CST 2022


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/winegstreamer/gst_private.h   |  2 +-
 dlls/winegstreamer/main.c          |  8 ++---
 dlls/winegstreamer/media_source.c  | 18 +++++-----
 dlls/winegstreamer/quartz_parser.c | 38 ++++++++++-----------
 dlls/winegstreamer/unixlib.h       | 31 +++++------------
 dlls/winegstreamer/wg_parser.c     | 54 +++++++++++++-----------------
 dlls/winegstreamer/wm_reader.c     | 38 ++++++++++-----------
 7 files changed, 84 insertions(+), 105 deletions(-)

diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 2f37d97378d..2cbba09f9a7 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -80,7 +80,7 @@ void wg_parser_stream_get_preferred_format(struct wg_parser_stream *stream, stru
 void wg_parser_stream_enable(struct wg_parser_stream *stream, const struct wg_format *format);
 void wg_parser_stream_disable(struct wg_parser_stream *stream);
 
-bool wg_parser_stream_get_event(struct wg_parser_stream *stream, struct wg_parser_event *event);
+bool wg_parser_stream_get_buffer(struct wg_parser_stream *stream, struct wg_parser_buffer *buffer);
 bool wg_parser_stream_copy_buffer(struct wg_parser_stream *stream,
         void *data, uint32_t offset, uint32_t size);
 void wg_parser_stream_release_buffer(struct wg_parser_stream *stream);
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index e9e347b0c65..327d144499e 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -172,15 +172,15 @@ void wg_parser_stream_disable(struct wg_parser_stream *stream)
     __wine_unix_call(unix_handle, unix_wg_parser_stream_disable, stream);
 }
 
-bool wg_parser_stream_get_event(struct wg_parser_stream *stream, struct wg_parser_event *event)
+bool wg_parser_stream_get_buffer(struct wg_parser_stream *stream, struct wg_parser_buffer *buffer)
 {
-    struct wg_parser_stream_get_event_params params =
+    struct wg_parser_stream_get_buffer_params params =
     {
         .stream = stream,
-        .event = event,
+        .buffer = buffer,
     };
 
-    return !__wine_unix_call(unix_handle, unix_wg_parser_stream_get_event, &params);
+    return !__wine_unix_call(unix_handle, unix_wg_parser_stream_get_buffer, &params);
 }
 
 bool wg_parser_stream_copy_buffer(struct wg_parser_stream *stream,
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 92cb27dc5dc..c9f95a8a451 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -450,7 +450,7 @@ static void dispatch_end_of_presentation(struct media_source *source)
     IMFMediaEventQueue_QueueEventParamVar(source->event_queue, MEEndOfPresentation, &GUID_NULL, S_OK, &empty);
 }
 
-static void send_buffer(struct media_stream *stream, const struct wg_parser_event *event, IUnknown *token)
+static void send_buffer(struct media_stream *stream, const struct wg_parser_buffer *wg_buffer, IUnknown *token)
 {
     IMFMediaBuffer *buffer;
     IMFSample *sample;
@@ -463,7 +463,7 @@ static void send_buffer(struct media_stream *stream, const struct wg_parser_even
         return;
     }
 
-    if (FAILED(hr = MFCreateMemoryBuffer(event->u.buffer.size, &buffer)))
+    if (FAILED(hr = MFCreateMemoryBuffer(wg_buffer->size, &buffer)))
     {
         ERR("Failed to create buffer, hr %#lx.\n", hr);
         IMFSample_Release(sample);
@@ -476,7 +476,7 @@ static void send_buffer(struct media_stream *stream, const struct wg_parser_even
         goto out;
     }
 
-    if (FAILED(hr = IMFMediaBuffer_SetCurrentLength(buffer, event->u.buffer.size)))
+    if (FAILED(hr = IMFMediaBuffer_SetCurrentLength(buffer, wg_buffer->size)))
     {
         ERR("Failed to set size, hr %#lx.\n", hr);
         goto out;
@@ -488,7 +488,7 @@ static void send_buffer(struct media_stream *stream, const struct wg_parser_even
         goto out;
     }
 
-    if (!wg_parser_stream_copy_buffer(stream->wg_stream, data, 0, event->u.buffer.size))
+    if (!wg_parser_stream_copy_buffer(stream->wg_stream, data, 0, wg_buffer->size))
     {
         wg_parser_stream_release_buffer(stream->wg_stream);
         IMFMediaBuffer_Unlock(buffer);
@@ -502,13 +502,13 @@ static void send_buffer(struct media_stream *stream, const struct wg_parser_even
         goto out;
     }
 
-    if (FAILED(hr = IMFSample_SetSampleTime(sample, event->u.buffer.pts)))
+    if (FAILED(hr = IMFSample_SetSampleTime(sample, wg_buffer->pts)))
     {
         ERR("Failed to set sample time, hr %#lx.\n", hr);
         goto out;
     }
 
-    if (FAILED(hr = IMFSample_SetSampleDuration(sample, event->u.buffer.duration)))
+    if (FAILED(hr = IMFSample_SetSampleDuration(sample, wg_buffer->duration)))
     {
         ERR("Failed to set sample duration, hr %#lx.\n", hr);
         goto out;
@@ -528,13 +528,13 @@ out:
 static void wait_on_sample(struct media_stream *stream, IUnknown *token)
 {
     PROPVARIANT empty_var = {.vt = VT_EMPTY};
-    struct wg_parser_event event;
+    struct wg_parser_buffer buffer;
 
     TRACE("%p, %p\n", stream, token);
 
-    if (wg_parser_stream_get_event(stream->wg_stream, &event))
+    if (wg_parser_stream_get_buffer(stream->wg_stream, &buffer))
     {
-        send_buffer(stream, &event, token);
+        send_buffer(stream, &buffer, token);
     }
     else
     {
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index 9b0fa4acb93..d369d4c7f20 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -686,7 +686,7 @@ static uint64_t scale_uint64(uint64_t value, uint32_t numerator, uint32_t denomi
 
 /* Fill and send a single IMediaSample. */
 static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample,
-        const struct wg_parser_event *event, uint32_t offset, uint32_t size, DWORD bytes_per_second)
+        const struct wg_parser_buffer *buffer, uint32_t offset, uint32_t size, DWORD bytes_per_second)
 {
     HRESULT hr;
     BYTE *ptr = NULL;
@@ -707,21 +707,21 @@ static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample,
         return S_OK;
     }
 
-    if (event->u.buffer.has_pts)
+    if (buffer->has_pts)
     {
-        REFERENCE_TIME start_pts = event->u.buffer.pts;
+        REFERENCE_TIME start_pts = buffer->pts;
 
         if (offset)
             start_pts += scale_uint64(offset, 10000000, bytes_per_second);
         start_pts -= pin->seek.llCurrent;
         start_pts *= pin->seek.dRate;
 
-        if (event->u.buffer.has_duration)
+        if (buffer->has_duration)
         {
-            REFERENCE_TIME end_pts = event->u.buffer.pts + event->u.buffer.duration;
+            REFERENCE_TIME end_pts = buffer->pts + buffer->duration;
 
-            if (offset + size < event->u.buffer.size)
-                end_pts = event->u.buffer.pts + scale_uint64(offset + size, 10000000, bytes_per_second);
+            if (offset + size < buffer->size)
+                end_pts = buffer->pts + scale_uint64(offset + size, 10000000, bytes_per_second);
             end_pts -= pin->seek.llCurrent;
             end_pts *= pin->seek.dRate;
 
@@ -740,9 +740,9 @@ static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample,
         IMediaSample_SetMediaTime(sample, NULL, NULL);
     }
 
-    IMediaSample_SetDiscontinuity(sample, !offset && event->u.buffer.discontinuity);
-    IMediaSample_SetPreroll(sample, event->u.buffer.preroll);
-    IMediaSample_SetSyncPoint(sample, !event->u.buffer.delta);
+    IMediaSample_SetDiscontinuity(sample, !offset && buffer->discontinuity);
+    IMediaSample_SetPreroll(sample, buffer->preroll);
+    IMediaSample_SetSyncPoint(sample, !buffer->delta);
 
     if (!pin->pin.pin.peer)
         return VFW_E_NOT_CONNECTED;
@@ -754,7 +754,7 @@ static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample,
 
 /* Send a single GStreamer buffer (splitting it into multiple IMediaSamples if
  * necessary). */
-static void send_buffer(struct parser_source *pin, const struct wg_parser_event *event)
+static void send_buffer(struct parser_source *pin, const struct wg_parser_buffer *buffer)
 {
     HRESULT hr;
     IMediaSample *sample;
@@ -774,7 +774,7 @@ static void send_buffer(struct parser_source *pin, const struct wg_parser_event
         WAVEFORMATEX *format = (WAVEFORMATEX *)pin->pin.pin.mt.pbFormat;
         uint32_t offset = 0;
 
-        while (offset < event->u.buffer.size)
+        while (offset < buffer->size)
         {
             uint32_t advance;
 
@@ -784,9 +784,9 @@ static void send_buffer(struct parser_source *pin, const struct wg_parser_event
                 break;
             }
 
-            advance = min(IMediaSample_GetSize(sample), event->u.buffer.size - offset);
+            advance = min(IMediaSample_GetSize(sample), buffer->size - offset);
 
-            hr = send_sample(pin, sample, event, offset, advance, format->nAvgBytesPerSec);
+            hr = send_sample(pin, sample, buffer, offset, advance, format->nAvgBytesPerSec);
 
             IMediaSample_Release(sample);
 
@@ -804,7 +804,7 @@ static void send_buffer(struct parser_source *pin, const struct wg_parser_event
         }
         else
         {
-            hr = send_sample(pin, sample, event, 0, event->u.buffer.size, 0);
+            hr = send_sample(pin, sample, buffer, 0, buffer->size, 0);
 
             IMediaSample_Release(sample);
         }
@@ -822,7 +822,7 @@ static DWORD CALLBACK stream_thread(void *arg)
 
     while (filter->streaming)
     {
-        struct wg_parser_event event;
+        struct wg_parser_buffer buffer;
 
         EnterCriticalSection(&pin->flushing_cs);
 
@@ -833,9 +833,9 @@ static DWORD CALLBACK stream_thread(void *arg)
             continue;
         }
 
-        if (wg_parser_stream_get_event(pin->wg_stream, &event))
+        if (wg_parser_stream_get_buffer(pin->wg_stream, &buffer))
         {
-            send_buffer(pin, &event);
+            send_buffer(pin, &buffer);
         }
         else
         {
@@ -844,8 +844,6 @@ static DWORD CALLBACK stream_thread(void *arg)
             pin->eos = true;
         }
 
-        TRACE("Got event of type %#x.\n", event.type);
-
         LeaveCriticalSection(&pin->flushing_cs);
     }
 
diff --git a/dlls/winegstreamer/unixlib.h b/dlls/winegstreamer/unixlib.h
index 9d75e94cb6a..3dfa30b4889 100644
--- a/dlls/winegstreamer/unixlib.h
+++ b/dlls/winegstreamer/unixlib.h
@@ -103,27 +103,14 @@ struct wg_format
     } u;
 };
 
-enum wg_parser_event_type
+struct wg_parser_buffer
 {
-    WG_PARSER_EVENT_NONE = 0,
-    WG_PARSER_EVENT_BUFFER,
-};
-
-struct wg_parser_event
-{
-    enum wg_parser_event_type type;
-    union
-    {
-        struct
-        {
-            /* pts and duration are in 100-nanosecond units. */
-            ULONGLONG pts, duration;
-            uint32_t size;
-            bool discontinuity, preroll, delta, has_pts, has_duration;
-        } buffer;
-    } u;
+    /* pts and duration are in 100-nanosecond units. */
+    UINT64 pts, duration;
+    UINT32 size;
+    bool discontinuity, preroll, delta, has_pts, has_duration;
 };
-C_ASSERT(sizeof(struct wg_parser_event) == 40);
+C_ASSERT(sizeof(struct wg_parser_buffer) == 32);
 
 enum wg_parser_type
 {
@@ -185,10 +172,10 @@ struct wg_parser_stream_enable_params
     const struct wg_format *format;
 };
 
-struct wg_parser_stream_get_event_params
+struct wg_parser_stream_get_buffer_params
 {
     struct wg_parser_stream *stream;
-    struct wg_parser_event *event;
+    struct wg_parser_buffer *buffer;
 };
 
 struct wg_parser_stream_copy_buffer_params
@@ -247,7 +234,7 @@ enum unix_funcs
     unix_wg_parser_stream_enable,
     unix_wg_parser_stream_disable,
 
-    unix_wg_parser_stream_get_event,
+    unix_wg_parser_stream_get_buffer,
     unix_wg_parser_stream_copy_buffer,
     unix_wg_parser_stream_release_buffer,
     unix_wg_parser_stream_notify_qos,
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index e114a19a26b..f36feead9c6 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -102,7 +102,6 @@ struct wg_parser_stream
     struct wg_format preferred_format, current_format;
 
     pthread_cond_t event_cond, event_empty_cond;
-    struct wg_parser_event event;
     GstBuffer *buffer;
     GstMapInfo map_info;
 
@@ -251,22 +250,37 @@ static NTSTATUS wg_parser_stream_disable(void *args)
     return S_OK;
 }
 
-static NTSTATUS wg_parser_stream_get_event(void *args)
+static NTSTATUS wg_parser_stream_get_buffer(void *args)
 {
-    const struct wg_parser_stream_get_event_params *params = args;
+    const struct wg_parser_stream_get_buffer_params *params = args;
+    struct wg_parser_buffer *wg_buffer = params->buffer;
     struct wg_parser_stream *stream = params->stream;
     struct wg_parser *parser = stream->parser;
+    GstBuffer *buffer;
 
     pthread_mutex_lock(&parser->mutex);
 
-    while (!stream->eos && stream->event.type == WG_PARSER_EVENT_NONE)
+    while (!stream->eos && !stream->buffer)
         pthread_cond_wait(&stream->event_cond, &parser->mutex);
 
     /* Note that we can both have a buffer and stream->eos, in which case we
      * must return the buffer. */
-    if (stream->event.type != WG_PARSER_EVENT_NONE)
+    if ((buffer = stream->buffer))
     {
-        *params->event = stream->event;
+        /* FIXME: Should we use gst_segment_to_stream_time_full()? Under what
+         * circumstances is the stream time not equal to the buffer PTS? Note
+         * that this will need modification to wg_parser_stream_notify_qos() as
+         * well. */
+
+        if ((wg_buffer->has_pts = GST_BUFFER_PTS_IS_VALID(buffer)))
+            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;
+        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);
+        wg_buffer->size = gst_buffer_get_size(buffer);
+
         pthread_mutex_unlock(&parser->mutex);
         return S_OK;
     }
@@ -291,7 +305,6 @@ static NTSTATUS wg_parser_stream_copy_buffer(void *args)
         return VFW_E_WRONG_STATE;
     }
 
-    assert(stream->event.type == WG_PARSER_EVENT_BUFFER);
     assert(offset < stream->map_info.size);
     assert(offset + size <= stream->map_info.size);
     memcpy(params->data, stream->map_info.data + offset, size);
@@ -307,12 +320,11 @@ static NTSTATUS wg_parser_stream_release_buffer(void *args)
 
     pthread_mutex_lock(&parser->mutex);
 
-    assert(stream->event.type == WG_PARSER_EVENT_BUFFER);
+    assert(stream->buffer);
 
     gst_buffer_unmap(stream->buffer, &stream->map_info);
     gst_buffer_unref(stream->buffer);
     stream->buffer = NULL;
-    stream->event.type = WG_PARSER_EVENT_NONE;
 
     pthread_mutex_unlock(&parser->mutex);
     pthread_cond_signal(&stream->event_empty_cond);
@@ -459,13 +471,12 @@ static gboolean sink_event_cb(GstPad *pad, GstObject *parent, GstEvent *event)
                 stream->flushing = true;
                 pthread_cond_signal(&stream->event_empty_cond);
 
-                if (stream->event.type == WG_PARSER_EVENT_BUFFER)
+                if (stream->buffer)
                 {
                     gst_buffer_unmap(stream->buffer, &stream->map_info);
                     gst_buffer_unref(stream->buffer);
                     stream->buffer = NULL;
                 }
-                stream->event.type = WG_PARSER_EVENT_NONE;
 
                 pthread_mutex_unlock(&parser->mutex);
             }
@@ -514,7 +525,6 @@ static GstFlowReturn sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *bu
 {
     struct wg_parser_stream *stream = gst_pad_get_element_private(pad);
     struct wg_parser *parser = stream->parser;
-    struct wg_parser_event stream_event;
 
     GST_LOG("stream %p, buffer %p.", stream, buffer);
 
@@ -524,27 +534,12 @@ static GstFlowReturn sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *bu
         return GST_FLOW_OK;
     }
 
-    stream_event.type = WG_PARSER_EVENT_BUFFER;
-
-    /* FIXME: Should we use gst_segment_to_stream_time_full()? Under what
-     * circumstances is the stream time not equal to the buffer PTS? Note that
-     * this will need modification to wg_parser_stream_notify_qos() as well. */
-
-    if ((stream_event.u.buffer.has_pts = GST_BUFFER_PTS_IS_VALID(buffer)))
-        stream_event.u.buffer.pts = GST_BUFFER_PTS(buffer) / 100;
-    if ((stream_event.u.buffer.has_duration = GST_BUFFER_DURATION_IS_VALID(buffer)))
-        stream_event.u.buffer.duration = GST_BUFFER_DURATION(buffer) / 100;
-    stream_event.u.buffer.discontinuity = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DISCONT);
-    stream_event.u.buffer.preroll = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_LIVE);
-    stream_event.u.buffer.delta = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT);
-    stream_event.u.buffer.size = gst_buffer_get_size(buffer);
-
     /* Allow this buffer to be flushed by GStreamer. We are effectively
      * implementing a queue object here. */
 
     pthread_mutex_lock(&parser->mutex);
 
-    while (!stream->flushing && stream->event.type != WG_PARSER_EVENT_NONE)
+    while (!stream->flushing && stream->buffer)
         pthread_cond_wait(&stream->event_empty_cond, &parser->mutex);
     if (stream->flushing)
     {
@@ -562,7 +557,6 @@ static GstFlowReturn sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *bu
         return GST_FLOW_ERROR;
     }
 
-    stream->event = stream_event;
     stream->buffer = buffer;
 
     pthread_mutex_unlock(&parser->mutex);
@@ -1591,7 +1585,7 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
     X(wg_parser_stream_enable),
     X(wg_parser_stream_disable),
 
-    X(wg_parser_stream_get_event),
+    X(wg_parser_stream_get_buffer),
     X(wg_parser_stream_copy_buffer),
     X(wg_parser_stream_release_buffer),
     X(wg_parser_stream_notify_qos),
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c
index 96de6f2a3ba..bfed0d1e0ca 100644
--- a/dlls/winegstreamer/wm_reader.c
+++ b/dlls/winegstreamer/wm_reader.c
@@ -1825,7 +1825,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
 {
     IWMReaderCallbackAdvanced *callback_advanced = stream->reader->callback_advanced;
     struct wg_parser_stream *wg_stream = stream->wg_stream;
-    struct wg_parser_event event;
+    struct wg_parser_buffer wg_buffer;
     DWORD size, capacity;
     INSSBuffer *sample;
     HRESULT hr;
@@ -1839,7 +1839,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
 
     for (;;)
     {
-        if (!wg_parser_stream_get_event(wg_stream, &event))
+        if (!wg_parser_stream_get_buffer(wg_stream, &wg_buffer))
         {
             stream->eos = true;
             TRACE("End of stream.\n");
@@ -1851,9 +1851,9 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
         if (callback_advanced && stream->read_compressed && stream->allocate_stream)
         {
             if (FAILED(hr = IWMReaderCallbackAdvanced_AllocateForStream(callback_advanced,
-                    stream->index + 1, event.u.buffer.size, &sample, NULL)))
+                    stream->index + 1, wg_buffer.size, &sample, NULL)))
             {
-                ERR("Failed to allocate stream sample of %u bytes, hr %#lx.\n", event.u.buffer.size, hr);
+                ERR("Failed to allocate stream sample of %u bytes, hr %#lx.\n", wg_buffer.size, hr);
                 wg_parser_stream_release_buffer(wg_stream);
                 return hr;
             }
@@ -1861,9 +1861,9 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
         else if (callback_advanced && !stream->read_compressed && stream->allocate_output)
         {
             if (FAILED(hr = IWMReaderCallbackAdvanced_AllocateForOutput(callback_advanced,
-                    stream->index, event.u.buffer.size, &sample, NULL)))
+                    stream->index, wg_buffer.size, &sample, NULL)))
             {
-                ERR("Failed to allocate output sample of %u bytes, hr %#lx.\n", event.u.buffer.size, hr);
+                ERR("Failed to allocate output sample of %u bytes, hr %#lx.\n", wg_buffer.size, hr);
                 wg_parser_stream_release_buffer(wg_stream);
                 return hr;
             }
@@ -1873,7 +1873,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
             struct buffer *object;
 
             /* FIXME: Should these be pooled? */
-            if (!(object = calloc(1, offsetof(struct buffer, data[event.u.buffer.size]))))
+            if (!(object = calloc(1, offsetof(struct buffer, data[wg_buffer.size]))))
             {
                 wg_parser_stream_release_buffer(wg_stream);
                 return E_OUTOFMEMORY;
@@ -1881,7 +1881,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
 
             object->INSSBuffer_iface.lpVtbl = &buffer_vtbl;
             object->refcount = 1;
-            object->capacity = event.u.buffer.size;
+            object->capacity = wg_buffer.size;
 
             TRACE("Created buffer %p.\n", object);
             sample = &object->INSSBuffer_iface;
@@ -1891,32 +1891,32 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
             ERR("Failed to get data pointer, hr %#lx.\n", hr);
         if (FAILED(hr = INSSBuffer_GetMaxLength(sample, &capacity)))
             ERR("Failed to get capacity, hr %#lx.\n", hr);
-        if (event.u.buffer.size > capacity)
-            ERR("Returned capacity %lu is less than requested capacity %u.\n", capacity, event.u.buffer.size);
+        if (wg_buffer.size > capacity)
+            ERR("Returned capacity %lu is less than requested capacity %u.\n", capacity, wg_buffer.size);
 
-        if (!wg_parser_stream_copy_buffer(wg_stream, data, 0, event.u.buffer.size))
+        if (!wg_parser_stream_copy_buffer(wg_stream, data, 0, wg_buffer.size))
         {
             /* The GStreamer pin has been flushed. */
             INSSBuffer_Release(sample);
             continue;
         }
 
-        if (FAILED(hr = INSSBuffer_SetLength(sample, event.u.buffer.size)))
-            ERR("Failed to set size %u, hr %#lx.\n", event.u.buffer.size, hr);
+        if (FAILED(hr = INSSBuffer_SetLength(sample, wg_buffer.size)))
+            ERR("Failed to set size %u, hr %#lx.\n", wg_buffer.size, hr);
 
         wg_parser_stream_release_buffer(wg_stream);
 
-        if (!event.u.buffer.has_pts)
+        if (!wg_buffer.has_pts)
             FIXME("Missing PTS.\n");
-        if (!event.u.buffer.has_duration)
+        if (!wg_buffer.has_duration)
             FIXME("Missing duration.\n");
 
-        *pts = event.u.buffer.pts;
-        *duration = event.u.buffer.duration;
+        *pts = wg_buffer.pts;
+        *duration = wg_buffer.duration;
         *flags = 0;
-        if (event.u.buffer.discontinuity)
+        if (wg_buffer.discontinuity)
             *flags |= WM_SF_DISCONTINUITY;
-        if (!event.u.buffer.delta)
+        if (!wg_buffer.delta)
             *flags |= WM_SF_CLEANPOINT;
 
         *ret_sample = sample;
-- 
2.35.1




More information about the wine-devel mailing list