[PATCH v2 5/6] winegstreamer: Merge wg_*_parser_create functions.
Derek Lesho
dlesho at codeweavers.com
Fri Sep 17 14:58:57 CDT 2021
Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
dlls/winegstreamer/gst_private.h | 13 +++++--
dlls/winegstreamer/media_source.c | 2 +-
dlls/winegstreamer/quartz_parser.c | 12 +++---
dlls/winegstreamer/wg_parser.c | 62 ++++++++++--------------------
4 files changed, 37 insertions(+), 52 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 22d9547ed72..a266984d969 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -156,12 +156,17 @@ struct wg_parser_event
};
C_ASSERT(sizeof(struct wg_parser_event) == 40);
+enum wg_parser_type
+{
+ WG_DECODEBIN_PARSER,
+ WG_AVI_PARSER,
+ WG_MPEG_AUDIO_PARSER,
+ WG_WAVE_PARSER,
+};
+
struct unix_funcs
{
- struct wg_parser *(CDECL *wg_decodebin_parser_create)(void);
- struct wg_parser *(CDECL *wg_avi_parser_create)(void);
- struct wg_parser *(CDECL *wg_mpeg_audio_parser_create)(void);
- struct wg_parser *(CDECL *wg_wave_parser_create)(void);
+ struct wg_parser *(CDECL *wg_parser_create)(enum wg_parser_type type);
void (CDECL *wg_parser_destroy)(struct wg_parser *parser);
HRESULT (CDECL *wg_parser_connect)(struct wg_parser *parser, uint64_t file_size);
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 21e5f6c5d5b..efe8f7b45cb 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -1324,7 +1324,7 @@ static HRESULT media_source_constructor(IMFByteStream *bytestream, struct media_
if (FAILED(hr = MFAllocateWorkQueue(&object->async_commands_queue)))
goto fail;
- if (!(parser = unix_funcs->wg_decodebin_parser_create()))
+ if (!(parser = unix_funcs->wg_parser_create(WG_DECODEBIN_PARSER)))
{
hr = E_OUTOFMEMORY;
goto fail;
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c
index 20000f63eb7..a89d3ec7baa 100644
--- a/dlls/winegstreamer/quartz_parser.c
+++ b/dlls/winegstreamer/quartz_parser.c
@@ -59,7 +59,7 @@ struct parser
HANDLE read_thread;
- struct wg_parser * (*parser_create)(void);
+ enum wg_parser_type parser_type;
BOOL (*init_gst)(struct parser *filter);
HRESULT (*source_query_accept)(struct parser_source *pin, const AM_MEDIA_TYPE *mt);
HRESULT (*source_get_media_type)(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt);
@@ -974,7 +974,7 @@ static HRESULT parser_sink_connect(struct strmbase_sink *iface, IPin *peer, cons
IAsyncReader_Length(filter->reader, &file_size, &unused);
- if (!(filter->wg_parser = filter->parser_create()))
+ if (!(filter->wg_parser = unix_funcs->wg_parser_create(filter->parser_type)))
{
hr = E_OUTOFMEMORY;
goto err;
@@ -1120,7 +1120,7 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out)
if (!(object = calloc(1, sizeof(*object))))
return E_OUTOFMEMORY;
- object->parser_create = unix_funcs->wg_decodebin_parser_create;
+ object->parser_type = WG_DECODEBIN_PARSER;
strmbase_filter_init(&object->filter, outer, &CLSID_decodebin_parser, &filter_ops);
strmbase_sink_init(&object->sink, &object->filter, L"input pin", &sink_ops, NULL);
@@ -1648,7 +1648,7 @@ HRESULT wave_parser_create(IUnknown *outer, IUnknown **out)
if (!(object = calloc(1, sizeof(*object))))
return E_OUTOFMEMORY;
- object->parser_create = unix_funcs->wg_wave_parser_create;
+ object->parser_type = WG_WAVE_PARSER;
strmbase_filter_init(&object->filter, outer, &CLSID_WAVEParser, &filter_ops);
strmbase_sink_init(&object->sink, &object->filter, L"input pin", &wave_parser_sink_ops, NULL);
@@ -1733,7 +1733,7 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out)
if (!(object = calloc(1, sizeof(*object))))
return E_OUTOFMEMORY;
- object->parser_create = unix_funcs->wg_avi_parser_create;
+ object->parser_type = WG_AVI_PARSER;
strmbase_filter_init(&object->filter, outer, &CLSID_AviSplitter, &filter_ops);
strmbase_sink_init(&object->sink, &object->filter, L"input pin", &avi_splitter_sink_ops, NULL);
@@ -1838,7 +1838,7 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out)
if (!(object = calloc(1, sizeof(*object))))
return E_OUTOFMEMORY;
- object->parser_create = unix_funcs->wg_mpeg_audio_parser_create;
+ object->parser_type = WG_MPEG_AUDIO_PARSER;
strmbase_filter_init(&object->filter, outer, &CLSID_MPEG1Splitter, &mpeg_splitter_ops);
strmbase_sink_init(&object->sink, &object->filter, L"Input", &mpeg_splitter_sink_ops, NULL);
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index f751463a548..a91fa3a3ed6 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -1622,13 +1622,32 @@ static BOOL wave_parser_init_gst(struct wg_parser *parser)
return TRUE;
}
-static struct wg_parser *wg_parser_create(void)
+static struct wg_parser * CDECL wg_parser_create(enum wg_parser_type type)
{
struct wg_parser *parser;
if (!(parser = calloc(1, sizeof(*parser))))
return NULL;
+ switch (type)
+ {
+ case WG_DECODEBIN_PARSER:
+ parser->init_gst = decodebin_parser_init_gst;
+ break;
+ case WG_AVI_PARSER:
+ parser->init_gst = avi_parser_init_gst;
+ break;
+ case WG_MPEG_AUDIO_PARSER:
+ parser->init_gst = mpeg_audio_parser_init_gst;
+ break;
+ case WG_WAVE_PARSER:
+ parser->init_gst = wave_parser_init_gst;
+ break;
+ default:
+ free(parser);
+ return NULL;
+ }
+
pthread_mutex_init(&parser->mutex, NULL);
pthread_cond_init(&parser->state_cond, NULL);
pthread_cond_init(&parser->read_cond, NULL);
@@ -1638,42 +1657,6 @@ static struct wg_parser *wg_parser_create(void)
return parser;
}
-static struct wg_parser * CDECL wg_decodebin_parser_create(void)
-{
- struct wg_parser *parser;
-
- if ((parser = wg_parser_create()))
- parser->init_gst = decodebin_parser_init_gst;
- return parser;
-}
-
-static struct wg_parser * CDECL wg_avi_parser_create(void)
-{
- struct wg_parser *parser;
-
- if ((parser = wg_parser_create()))
- parser->init_gst = avi_parser_init_gst;
- return parser;
-}
-
-static struct wg_parser * CDECL wg_mpeg_audio_parser_create(void)
-{
- struct wg_parser *parser;
-
- if ((parser = wg_parser_create()))
- parser->init_gst = mpeg_audio_parser_init_gst;
- return parser;
-}
-
-static struct wg_parser * CDECL wg_wave_parser_create(void)
-{
- struct wg_parser *parser;
-
- if ((parser = wg_parser_create()))
- parser->init_gst = wave_parser_init_gst;
- return parser;
-}
-
static void CDECL wg_parser_destroy(struct wg_parser *parser)
{
unsigned int i;
@@ -1722,10 +1705,7 @@ static void CDECL wg_parser_destroy(struct wg_parser *parser)
static const struct unix_funcs funcs =
{
- wg_decodebin_parser_create,
- wg_avi_parser_create,
- wg_mpeg_audio_parser_create,
- wg_wave_parser_create,
+ wg_parser_create,
wg_parser_destroy,
wg_parser_connect,
--
2.33.0
More information about the wine-devel
mailing list