[PATCH 2/8] winegstreamer: Use a 64-bit handle type for struct wg_parser_stream.

Zebediah Figura zfigura at codeweavers.com
Fri Dec 10 14:52:12 CST 2021


Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/winegstreamer/gst_private.h   | 22 +++++++++----------
 dlls/winegstreamer/main.c          | 34 +++++++++++++++++++----------
 dlls/winegstreamer/media_source.c  |  6 ++---
 dlls/winegstreamer/quartz_parser.c |  6 ++---
 dlls/winegstreamer/unixlib.h       | 28 ++++++++++++++++--------
 dlls/winegstreamer/wg_parser.c     | 35 +++++++++++++++++++++---------
 dlls/winegstreamer/wm_reader.c     |  2 +-
 7 files changed, 84 insertions(+), 49 deletions(-)

diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 340712eefe1..6e3128f9a0b 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -77,23 +77,23 @@ bool wg_parser_get_next_read_offset(wg_parser_t parser, uint64_t *offset, uint32
 void wg_parser_push_data(wg_parser_t parser, const void *data, uint32_t size) DECLSPEC_HIDDEN;
 
 uint32_t wg_parser_get_stream_count(wg_parser_t parser) DECLSPEC_HIDDEN;
-struct wg_parser_stream *wg_parser_get_stream(wg_parser_t parser, uint32_t index) DECLSPEC_HIDDEN;
+wg_parser_stream_t wg_parser_get_stream(wg_parser_t parser, uint32_t index) DECLSPEC_HIDDEN;
 
-void wg_parser_stream_get_preferred_format(struct wg_parser_stream *stream, struct wg_format *format) DECLSPEC_HIDDEN;
-void wg_parser_stream_enable(struct wg_parser_stream *stream, const struct wg_format *format) DECLSPEC_HIDDEN;
-void wg_parser_stream_disable(struct wg_parser_stream *stream) DECLSPEC_HIDDEN;
+void wg_parser_stream_get_preferred_format(wg_parser_stream_t stream, struct wg_format *format) DECLSPEC_HIDDEN;
+void wg_parser_stream_enable(wg_parser_stream_t stream, const struct wg_format *format) DECLSPEC_HIDDEN;
+void wg_parser_stream_disable(wg_parser_stream_t stream) DECLSPEC_HIDDEN;
 
-bool wg_parser_stream_get_event(struct wg_parser_stream *stream, struct wg_parser_event *event) DECLSPEC_HIDDEN;
-bool wg_parser_stream_copy_buffer(struct wg_parser_stream *stream,
+bool wg_parser_stream_get_event(wg_parser_stream_t stream, struct wg_parser_event *event) DECLSPEC_HIDDEN;
+bool wg_parser_stream_copy_buffer(wg_parser_stream_t stream,
         void *data, uint32_t offset, uint32_t size) DECLSPEC_HIDDEN;
-void wg_parser_stream_release_buffer(struct wg_parser_stream *stream) DECLSPEC_HIDDEN;
-void wg_parser_stream_notify_qos(struct wg_parser_stream *stream,
+void wg_parser_stream_release_buffer(wg_parser_stream_t stream) DECLSPEC_HIDDEN;
+void wg_parser_stream_notify_qos(wg_parser_stream_t stream,
         bool underflow, double proportion, int64_t diff, uint64_t timestamp) DECLSPEC_HIDDEN;
 
 /* Returns the duration in 100-nanosecond units. */
-uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream) DECLSPEC_HIDDEN;
+uint64_t wg_parser_stream_get_duration(wg_parser_stream_t stream) DECLSPEC_HIDDEN;
 /* start_pos and stop_pos are in 100-nanosecond units. */
-void wg_parser_stream_seek(struct wg_parser_stream *stream, double rate,
+void wg_parser_stream_seek(wg_parser_stream_t stream, double rate,
         uint64_t start_pos, uint64_t stop_pos, DWORD start_flags, DWORD stop_flags) DECLSPEC_HIDDEN;
 
 unsigned int wg_format_get_max_size(const struct wg_format *format);
@@ -121,7 +121,7 @@ HRESULT audio_converter_create(REFIID riid, void **ret) DECLSPEC_HIDDEN;
 struct wm_stream
 {
     struct wm_reader *reader;
-    struct wg_parser_stream *wg_stream;
+    wg_parser_stream_t wg_stream;
     struct wg_format format;
     WMT_STREAM_SELECTION selection;
     WORD index;
diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c
index 23c11d883c9..fd73f79d365 100644
--- a/dlls/winegstreamer/main.c
+++ b/dlls/winegstreamer/main.c
@@ -161,7 +161,7 @@ uint32_t wg_parser_get_stream_count(wg_parser_t parser)
     return params.count;
 }
 
-struct wg_parser_stream *wg_parser_get_stream(wg_parser_t parser, uint32_t index)
+wg_parser_stream_t wg_parser_get_stream(wg_parser_t parser, uint32_t index)
 {
     struct wg_parser_get_stream_params params =
     {
@@ -173,7 +173,7 @@ struct wg_parser_stream *wg_parser_get_stream(wg_parser_t parser, uint32_t index
     return params.stream;
 }
 
-void wg_parser_stream_get_preferred_format(struct wg_parser_stream *stream, struct wg_format *format)
+void wg_parser_stream_get_preferred_format(wg_parser_stream_t stream, struct wg_format *format)
 {
     struct wg_parser_stream_get_preferred_format_params params =
     {
@@ -184,7 +184,7 @@ void wg_parser_stream_get_preferred_format(struct wg_parser_stream *stream, stru
     __wine_unix_call(unix_handle, unix_wg_parser_stream_get_preferred_format, &params);
 }
 
-void wg_parser_stream_enable(struct wg_parser_stream *stream, const struct wg_format *format)
+void wg_parser_stream_enable(wg_parser_stream_t stream, const struct wg_format *format)
 {
     struct wg_parser_stream_enable_params params =
     {
@@ -195,12 +195,17 @@ void wg_parser_stream_enable(struct wg_parser_stream *stream, const struct wg_fo
     __wine_unix_call(unix_handle, unix_wg_parser_stream_enable, &params);
 }
 
-void wg_parser_stream_disable(struct wg_parser_stream *stream)
+void wg_parser_stream_disable(wg_parser_stream_t stream)
 {
-    __wine_unix_call(unix_handle, unix_wg_parser_stream_disable, stream);
+    struct wg_parser_stream_disable_params params =
+    {
+        .stream = stream,
+    };
+
+    __wine_unix_call(unix_handle, unix_wg_parser_stream_disable, &params);
 }
 
-bool wg_parser_stream_get_event(struct wg_parser_stream *stream, struct wg_parser_event *event)
+bool wg_parser_stream_get_event(wg_parser_stream_t stream, struct wg_parser_event *event)
 {
     struct wg_parser_stream_get_event_params params =
     {
@@ -211,7 +216,7 @@ bool wg_parser_stream_get_event(struct wg_parser_stream *stream, struct wg_parse
     return !__wine_unix_call(unix_handle, unix_wg_parser_stream_get_event, &params);
 }
 
-bool wg_parser_stream_copy_buffer(struct wg_parser_stream *stream,
+bool wg_parser_stream_copy_buffer(wg_parser_stream_t stream,
         void *data, uint32_t offset, uint32_t size)
 {
     struct wg_parser_stream_copy_buffer_params params =
@@ -225,12 +230,17 @@ bool wg_parser_stream_copy_buffer(struct wg_parser_stream *stream,
     return !__wine_unix_call(unix_handle, unix_wg_parser_stream_copy_buffer, &params);
 }
 
-void wg_parser_stream_release_buffer(struct wg_parser_stream *stream)
+void wg_parser_stream_release_buffer(wg_parser_stream_t stream)
 {
-    __wine_unix_call(unix_handle, unix_wg_parser_stream_release_buffer, stream);
+    struct wg_parser_stream_release_buffer_params params =
+    {
+        .stream = stream,
+    };
+
+    __wine_unix_call(unix_handle, unix_wg_parser_stream_release_buffer, &params);
 }
 
-void wg_parser_stream_notify_qos(struct wg_parser_stream *stream,
+void wg_parser_stream_notify_qos(wg_parser_stream_t stream,
         bool underflow, double proportion, int64_t diff, uint64_t timestamp)
 {
     struct wg_parser_stream_notify_qos_params params =
@@ -245,7 +255,7 @@ void wg_parser_stream_notify_qos(struct wg_parser_stream *stream,
     __wine_unix_call(unix_handle, unix_wg_parser_stream_notify_qos, &params);
 }
 
-uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream)
+uint64_t wg_parser_stream_get_duration(wg_parser_stream_t stream)
 {
     struct wg_parser_stream_get_duration_params params =
     {
@@ -256,7 +266,7 @@ uint64_t wg_parser_stream_get_duration(struct wg_parser_stream *stream)
     return params.duration;
 }
 
-void wg_parser_stream_seek(struct wg_parser_stream *stream, double rate,
+void wg_parser_stream_seek(wg_parser_stream_t stream, double rate,
         uint64_t start_pos, uint64_t stop_pos, DWORD start_flags, DWORD stop_flags)
 {
     struct wg_parser_stream_seek_params params =
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index c31c573b381..e3092690f1c 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -35,7 +35,7 @@ struct media_stream
     IMFMediaEventQueue *event_queue;
     IMFStreamDescriptor *descriptor;
 
-    struct wg_parser_stream *wg_stream;
+    wg_parser_stream_t wg_stream;
 
     IUnknown **token_queue;
     LONG token_queue_count;
@@ -838,12 +838,12 @@ static const IMFMediaStreamVtbl media_stream_vtbl =
 };
 
 static HRESULT new_media_stream(struct media_source *source,
-        struct wg_parser_stream *wg_stream, DWORD stream_id, struct media_stream **out_stream)
+        wg_parser_stream_t wg_stream, DWORD stream_id, struct media_stream **out_stream)
 {
     struct media_stream *object = calloc(1, sizeof(*object));
     HRESULT hr;
 
-    TRACE("source %p, wg_stream %p, stream_id %u.\n", source, wg_stream, stream_id);
+    TRACE("source %p, wg_stream %#I64x, stream_id %u.\n", source, wg_stream, stream_id);
 
     object->IMFMediaStream_iface.lpVtbl = &media_stream_vtbl;
     object->ref = 1;
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index 29adece3a38..78969860f2b 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -69,7 +69,7 @@ struct parser_source
     struct strmbase_source pin;
     IQualityControl IQualityControl_iface;
 
-    struct wg_parser_stream *wg_stream;
+    wg_parser_stream_t wg_stream;
 
     SourceSeeking seek;
 
@@ -86,7 +86,7 @@ static const IMediaSeekingVtbl GST_Seeking_Vtbl;
 static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
 
 static struct parser_source *create_pin(struct parser *filter,
-        struct wg_parser_stream *stream, const WCHAR *name);
+        wg_parser_stream_t stream, const WCHAR *name);
 static HRESULT GST_RemoveOutputPins(struct parser *This);
 static HRESULT WINAPI GST_ChangeCurrent(IMediaSeeking *iface);
 static HRESULT WINAPI GST_ChangeStop(IMediaSeeking *iface);
@@ -1574,7 +1574,7 @@ static const struct strmbase_source_ops source_ops =
 };
 
 static struct parser_source *create_pin(struct parser *filter,
-        struct wg_parser_stream *stream, const WCHAR *name)
+        wg_parser_stream_t stream, const WCHAR *name)
 {
     struct parser_source *pin, **new_array;
 
diff --git a/dlls/winegstreamer/unixlib.h b/dlls/winegstreamer/unixlib.h
index b6fcfc26d6a..aa2e3c820a5 100644
--- a/dlls/winegstreamer/unixlib.h
+++ b/dlls/winegstreamer/unixlib.h
@@ -30,7 +30,7 @@
 
 #include "wine/unixlib.h"
 
-typedef UINT64 wg_parser_t;
+typedef UINT64 wg_parser_t, wg_parser_stream_t;
 
 struct wg_format
 {
@@ -187,38 +187,48 @@ struct wg_parser_get_stream_params
 {
     wg_parser_t parser;
     UINT32 index;
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
 };
 
 struct wg_parser_stream_get_preferred_format_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     struct wg_format *format;
 };
 
 struct wg_parser_stream_enable_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     const struct wg_format *format;
 };
 
+struct wg_parser_stream_disable_params
+{
+    wg_parser_stream_t stream;
+};
+
 struct wg_parser_stream_get_event_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     struct wg_parser_event *event;
 };
 
 struct wg_parser_stream_copy_buffer_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     void *data;
     UINT32 offset;
     UINT32 size;
 };
 
+struct wg_parser_stream_release_buffer_params
+{
+    wg_parser_stream_t stream;
+};
+
 struct wg_parser_stream_notify_qos_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     bool underflow;
     DOUBLE proportion;
     INT64 diff;
@@ -227,13 +237,13 @@ struct wg_parser_stream_notify_qos_params
 
 struct wg_parser_stream_get_duration_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     UINT64 duration;
 };
 
 struct wg_parser_stream_seek_params
 {
-    struct wg_parser_stream *stream;
+    wg_parser_stream_t stream;
     DOUBLE rate;
     UINT64 start_pos, stop_pos;
     DWORD start_flags, stop_flags;
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 9c0bfd0a8d2..7c9ba652125 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -123,6 +123,16 @@ static wg_parser_t wg_parser_get_handle(struct wg_parser *parser)
     return (uintptr_t)parser;
 }
 
+static struct wg_parser_stream *get_wg_parser_stream(wg_parser_stream_t handle)
+{
+    return (struct wg_parser_stream *)(uintptr_t)handle;
+}
+
+static wg_parser_stream_t wg_parser_stream_get_handle(struct wg_parser_stream *stream)
+{
+    return (uintptr_t)stream;
+}
+
 static enum wg_audio_format wg_audio_format_from_gst(GstAudioFormat format)
 {
     switch (format)
@@ -530,7 +540,7 @@ static NTSTATUS wg_parser_get_stream(void *args)
     struct wg_parser_get_stream_params *params = args;
     struct wg_parser *parser = get_wg_parser(params->parser);
 
-    params->stream = parser->streams[params->index];
+    params->stream = wg_parser_stream_get_handle(parser->streams[params->index]);
     return S_OK;
 }
 
@@ -611,15 +621,16 @@ static NTSTATUS wg_parser_push_data(void *args)
 static NTSTATUS wg_parser_stream_get_preferred_format(void *args)
 {
     const struct wg_parser_stream_get_preferred_format_params *params = args;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
 
-    *params->format = params->stream->preferred_format;
+    *params->format = stream->preferred_format;
     return S_OK;
 }
 
 static NTSTATUS wg_parser_stream_enable(void *args)
 {
     const struct wg_parser_stream_enable_params *params = args;
-    struct wg_parser_stream *stream = params->stream;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     const struct wg_format *format = params->format;
 
     stream->current_format = *format;
@@ -657,7 +668,8 @@ static NTSTATUS wg_parser_stream_enable(void *args)
 
 static NTSTATUS wg_parser_stream_disable(void *args)
 {
-    struct wg_parser_stream *stream = args;
+    const struct wg_parser_stream_disable_params *params = args;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
 
     stream->enabled = false;
     return S_OK;
@@ -666,7 +678,7 @@ static NTSTATUS wg_parser_stream_disable(void *args)
 static NTSTATUS wg_parser_stream_get_event(void *args)
 {
     const struct wg_parser_stream_get_event_params *params = args;
-    struct wg_parser_stream *stream = params->stream;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     struct wg_parser *parser = stream->parser;
 
     pthread_mutex_lock(&parser->mutex);
@@ -696,7 +708,7 @@ static NTSTATUS wg_parser_stream_get_event(void *args)
 static NTSTATUS wg_parser_stream_copy_buffer(void *args)
 {
     const struct wg_parser_stream_copy_buffer_params *params = args;
-    struct wg_parser_stream *stream = params->stream;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     struct wg_parser *parser = stream->parser;
     uint32_t offset = params->offset;
     uint32_t size = params->size;
@@ -720,7 +732,8 @@ static NTSTATUS wg_parser_stream_copy_buffer(void *args)
 
 static NTSTATUS wg_parser_stream_release_buffer(void *args)
 {
-    struct wg_parser_stream *stream = args;
+    struct wg_parser_stream_release_buffer_params *params = args;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     struct wg_parser *parser = stream->parser;
 
     pthread_mutex_lock(&parser->mutex);
@@ -741,8 +754,9 @@ static NTSTATUS wg_parser_stream_release_buffer(void *args)
 static NTSTATUS wg_parser_stream_get_duration(void *args)
 {
     struct wg_parser_stream_get_duration_params *params = args;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
 
-    params->duration = params->stream->duration;
+    params->duration = stream->duration;
     return S_OK;
 }
 
@@ -750,6 +764,7 @@ static NTSTATUS wg_parser_stream_seek(void *args)
 {
     GstSeekType start_type = GST_SEEK_TYPE_SET, stop_type = GST_SEEK_TYPE_SET;
     const struct wg_parser_stream_seek_params *params = args;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     DWORD start_flags = params->start_flags;
     DWORD stop_flags = params->stop_flags;
     GstSeekFlags flags = 0;
@@ -766,7 +781,7 @@ static NTSTATUS wg_parser_stream_seek(void *args)
     if ((stop_flags & AM_SEEKING_PositioningBitsMask) == AM_SEEKING_NoPositioning)
         stop_type = GST_SEEK_TYPE_NONE;
 
-    if (!gst_pad_push_event(params->stream->my_sink, gst_event_new_seek(params->rate, GST_FORMAT_TIME,
+    if (!gst_pad_push_event(stream->my_sink, gst_event_new_seek(params->rate, GST_FORMAT_TIME,
             flags, start_type, params->start_pos * 100, stop_type, params->stop_pos * 100)))
         GST_ERROR("Failed to seek.\n");
 
@@ -776,7 +791,7 @@ static NTSTATUS wg_parser_stream_seek(void *args)
 static NTSTATUS wg_parser_stream_notify_qos(void *args)
 {
     const struct wg_parser_stream_notify_qos_params *params = args;
-    struct wg_parser_stream *stream = params->stream;
+    struct wg_parser_stream *stream = get_wg_parser_stream(params->stream);
     GstClockTime stream_time;
     GstEvent *event;
 
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c
index d5649f4ba9a..134b519867c 100644
--- a/dlls/winegstreamer/wm_reader.c
+++ b/dlls/winegstreamer/wm_reader.c
@@ -1815,7 +1815,7 @@ HRESULT wm_reader_get_stream_sample(struct wm_stream *stream,
         INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags)
 {
     IWMReaderCallbackAdvanced *callback_advanced = stream->reader->callback_advanced;
-    struct wg_parser_stream *wg_stream = stream->wg_stream;
+    wg_parser_stream_t wg_stream = stream->wg_stream;
     struct wg_parser_event event;
 
     if (stream->selection == WMT_OFF)
-- 
2.34.1




More information about the wine-devel mailing list