"gstdemux" is not a very specific name, or accurate (it does not always demux, nor is it the only object which may demux using GStreamer). Also, while it does not risk colliding with GStreamer definitions as-is (lacking an underscore), I am inclined to avoid using "gst" or "gstreamer" as a prefix for our definitions, simply for the sake of clarity.
"parser" is the common term for both DirectShow filters and GStreamer elements which "drive" the pipeline, i.e. explicitly pull data from upstream and push data downstream. While it's arguably still not specific enough (i.e. should be specifically identified as a DirectShow parser), I think that the differing terminology in Media Foundation (where the counterpart is a "media source") makes the choice of a shorter name justifiable.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 100 +++++++++++++++++----------------- 1 file changed, 50 insertions(+), 50 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 0243f8e20c1..19b7667bb06 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -54,7 +54,7 @@ struct gstdemux struct strmbase_sink sink; IAsyncReader *reader;
- struct gstdemux_source **sources; + struct parser_source **sources; unsigned int source_count; BOOL enum_sink_first;
@@ -70,11 +70,11 @@ struct gstdemux HANDLE push_thread;
BOOL (*init_gst)(struct gstdemux *filter); - HRESULT (*source_query_accept)(struct gstdemux_source *pin, const AM_MEDIA_TYPE *mt); - HRESULT (*source_get_media_type)(struct gstdemux_source *pin, unsigned int index, AM_MEDIA_TYPE *mt); + 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); };
-struct gstdemux_source +struct parser_source { struct strmbase_source pin; IQualityControl IQualityControl_iface; @@ -95,7 +95,7 @@ static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0}; static const IMediaSeekingVtbl GST_Seeking_Vtbl; static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
-static struct gstdemux_source *create_pin(struct gstdemux *filter, const WCHAR *name); +static struct parser_source *create_pin(struct gstdemux *filter, const WCHAR *name); static HRESULT GST_RemoveOutputPins(struct gstdemux *This); static HRESULT WINAPI GST_ChangeCurrent(IMediaSeeking *iface); static HRESULT WINAPI GST_ChangeStop(IMediaSeeking *iface); @@ -479,7 +479,7 @@ static GstCaps *amt_to_gst_caps(const AM_MEDIA_TYPE *mt)
static gboolean query_sink(GstPad *pad, GstObject *parent, GstQuery *query) { - struct gstdemux_source *pin = gst_pad_get_element_private(pad); + struct parser_source *pin = gst_pad_get_element_private(pad);
TRACE("pin %p, type "%s".\n", pin, gst_query_type_get_name(query->type));
@@ -654,7 +654,7 @@ static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event)
static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) { - struct gstdemux_source *pin = gst_pad_get_element_private(pad); + struct parser_source *pin = gst_pad_get_element_private(pad); gboolean ret;
TRACE("pin %p, type "%s".\n", pin, GST_EVENT_TYPE_NAME(event)); @@ -796,7 +796,7 @@ static DWORD CALLBACK push_data(LPVOID iface) return 0; }
-static HRESULT send_sample(struct gstdemux_source *pin, IMediaSample *sample, +static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample, GstBuffer *buf, GstMapInfo *info, gsize offset, gsize size, DWORD bytes_per_second) { HRESULT hr; @@ -861,7 +861,7 @@ static HRESULT send_sample(struct gstdemux_source *pin, IMediaSample *sample,
static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *buf) { - struct gstdemux_source *pin = gst_pad_get_element_private(pad); + struct parser_source *pin = gst_pad_get_element_private(pad); struct gstdemux *This = impl_from_strmbase_filter(pin->pin.pin.filter); HRESULT hr = S_OK; IMediaSample *sample; @@ -1006,7 +1006,7 @@ static void removed_decoded_pad(GstElement *bin, GstPad *pad, gpointer user)
for (i = 0; i < filter->source_count; ++i) { - struct gstdemux_source *pin = filter->sources[i]; + struct parser_source *pin = filter->sources[i];
if (pin->their_src == pad) { @@ -1032,7 +1032,7 @@ static void init_new_decoded_pad(GstElement *bin, GstPad *pad, struct gstdemux * char *name; GstCaps *caps; GstStructure *arg; - struct gstdemux_source *pin; + struct parser_source *pin; int ret; WCHAR nameW[128];
@@ -1189,7 +1189,7 @@ static void existing_new_pad(GstElement *bin, GstPad *pad, gpointer user)
for (i = 0; i < This->source_count; ++i) { - struct gstdemux_source *pin = This->sources[i]; + struct parser_source *pin = This->sources[i]; if (!pin->their_src) { gst_segment_init(pin->segment, GST_FORMAT_TIME);
@@ -1415,9 +1415,9 @@ static LONGLONG query_duration(GstPad *pad) return 0; }
-static inline struct gstdemux_source *impl_from_IMediaSeeking(IMediaSeeking *iface) +static inline struct parser_source *impl_from_IMediaSeeking(IMediaSeeking *iface) { - return CONTAINING_RECORD(iface, struct gstdemux_source, seek.IMediaSeeking_iface); + return CONTAINING_RECORD(iface, struct parser_source, seek.IMediaSeeking_iface); }
static struct strmbase_pin *gstdemux_get_pin(struct strmbase_filter *base, unsigned int index) @@ -1675,7 +1675,7 @@ static BOOL gstdecoder_init_gst(struct gstdemux *filter)
for (i = 0; i < filter->source_count; ++i) { - struct gstdemux_source *pin = filter->sources[i]; + struct parser_source *pin = filter->sources[i]; const HANDLE events[2] = {pin->caps_event, filter->error_event};
pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); @@ -1692,7 +1692,7 @@ static BOOL gstdecoder_init_gst(struct gstdemux *filter) return TRUE; }
-static HRESULT gstdecoder_source_query_accept(struct gstdemux_source *pin, const AM_MEDIA_TYPE *mt) +static HRESULT gstdecoder_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { /* At least make sure we can convert it to GstCaps. */ GstCaps *caps = amt_to_gst_caps(mt); @@ -1703,7 +1703,7 @@ static HRESULT gstdecoder_source_query_accept(struct gstdemux_source *pin, const return S_OK; }
-static HRESULT gstdecoder_source_get_media_type(struct gstdemux_source *pin, +static HRESULT gstdecoder_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { GstCaps *caps = gst_pad_get_current_caps(pin->my_sink); @@ -1870,21 +1870,21 @@ static const IAMStreamSelectVtbl stream_select_vtbl =
static HRESULT WINAPI GST_ChangeCurrent(IMediaSeeking *iface) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); TRACE("(%p)\n", This); return S_OK; }
static HRESULT WINAPI GST_ChangeStop(IMediaSeeking *iface) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); TRACE("(%p)\n", This); return S_OK; }
static HRESULT WINAPI GST_ChangeRate(IMediaSeeking *iface) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); GstEvent *ev = gst_event_new_seek(This->seek.dRate, GST_FORMAT_TIME, 0, GST_SEEK_TYPE_NONE, -1, GST_SEEK_TYPE_NONE, -1); TRACE("(%p) New rate %g\n", This, This->seek.dRate); mark_wine_thread(); @@ -1894,19 +1894,19 @@ static HRESULT WINAPI GST_ChangeRate(IMediaSeeking *iface)
static HRESULT WINAPI GST_Seeking_QueryInterface(IMediaSeeking *iface, REFIID riid, void **ppv) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); return IPin_QueryInterface(&This->pin.pin.IPin_iface, riid, ppv); }
static ULONG WINAPI GST_Seeking_AddRef(IMediaSeeking *iface) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); return IPin_AddRef(&This->pin.pin.IPin_iface); }
static ULONG WINAPI GST_Seeking_Release(IMediaSeeking *iface) { - struct gstdemux_source *This = impl_from_IMediaSeeking(iface); + struct parser_source *This = impl_from_IMediaSeeking(iface); return IPin_Release(&This->pin.pin.IPin_iface); }
@@ -1914,7 +1914,7 @@ static HRESULT WINAPI GST_Seeking_SetPositions(IMediaSeeking *iface, LONGLONG *current, DWORD current_flags, LONGLONG *stop, DWORD stop_flags) { GstSeekType current_type = GST_SEEK_TYPE_SET, stop_type = GST_SEEK_TYPE_SET; - struct gstdemux_source *pin = impl_from_IMediaSeeking(iface); + struct parser_source *pin = impl_from_IMediaSeeking(iface); GstSeekFlags flags = 0;
TRACE("pin %p, current %s, current_flags %#x, stop %s, stop_flags %#x.\n", @@ -1973,32 +1973,32 @@ static const IMediaSeekingVtbl GST_Seeking_Vtbl = SourceSeekingImpl_GetPreroll };
-static inline struct gstdemux_source *impl_from_IQualityControl( IQualityControl *iface ) +static inline struct parser_source *impl_from_IQualityControl( IQualityControl *iface ) { - return CONTAINING_RECORD(iface, struct gstdemux_source, IQualityControl_iface); + return CONTAINING_RECORD(iface, struct parser_source, IQualityControl_iface); }
static HRESULT WINAPI GST_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv) { - struct gstdemux_source *pin = impl_from_IQualityControl(iface); + struct parser_source *pin = impl_from_IQualityControl(iface); return IPin_QueryInterface(&pin->pin.pin.IPin_iface, riid, ppv); }
static ULONG WINAPI GST_QualityControl_AddRef(IQualityControl *iface) { - struct gstdemux_source *pin = impl_from_IQualityControl(iface); + struct parser_source *pin = impl_from_IQualityControl(iface); return IPin_AddRef(&pin->pin.pin.IPin_iface); }
static ULONG WINAPI GST_QualityControl_Release(IQualityControl *iface) { - struct gstdemux_source *pin = impl_from_IQualityControl(iface); + struct parser_source *pin = impl_from_IQualityControl(iface); return IPin_Release(&pin->pin.pin.IPin_iface); }
static HRESULT WINAPI GST_QualityControl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality q) { - struct gstdemux_source *pin = impl_from_IQualityControl(iface); + struct parser_source *pin = impl_from_IQualityControl(iface); GstQOSType type = GST_QOS_TYPE_OVERFLOW; GstClockTime timestamp; GstClockTimeDiff diff; @@ -2053,7 +2053,7 @@ static HRESULT WINAPI GST_QualityControl_Notify(IQualityControl *iface, IBaseFil
static HRESULT WINAPI GST_QualityControl_SetSink(IQualityControl *iface, IQualityControl *tonotify) { - struct gstdemux_source *pin = impl_from_IQualityControl(iface); + struct parser_source *pin = impl_from_IQualityControl(iface); TRACE("(%p)->(%p)\n", pin, pin); /* Do nothing */ return S_OK; @@ -2067,14 +2067,14 @@ static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl = { GST_QualityControl_SetSink };
-static inline struct gstdemux_source *impl_source_from_IPin(IPin *iface) +static inline struct parser_source *impl_source_from_IPin(IPin *iface) { - return CONTAINING_RECORD(iface, struct gstdemux_source, pin.pin.IPin_iface); + return CONTAINING_RECORD(iface, struct parser_source, pin.pin.IPin_iface); }
static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - struct gstdemux_source *pin = impl_source_from_IPin(&iface->IPin_iface); + struct parser_source *pin = impl_source_from_IPin(&iface->IPin_iface);
if (IsEqualGUID(iid, &IID_IMediaSeeking)) *out = &pin->seek.IMediaSeeking_iface; @@ -2089,14 +2089,14 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, vo
static HRESULT source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { - struct gstdemux_source *pin = impl_source_from_IPin(&iface->IPin_iface); + struct parser_source *pin = impl_source_from_IPin(&iface->IPin_iface); struct gstdemux *filter = impl_from_strmbase_filter(iface->filter); return filter->source_query_accept(pin, mt); }
static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { - struct gstdemux_source *pin = impl_source_from_IPin(&iface->IPin_iface); + struct parser_source *pin = impl_source_from_IPin(&iface->IPin_iface); struct gstdemux *filter = impl_from_strmbase_filter(iface->filter); return filter->source_get_media_type(pin, index, mt); } @@ -2104,7 +2104,7 @@ static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int in static HRESULT WINAPI GSTOutPin_DecideBufferSize(struct strmbase_source *iface, IMemAllocator *allocator, ALLOCATOR_PROPERTIES *props) { - struct gstdemux_source *pin = impl_source_from_IPin(&iface->pin.IPin_iface); + struct parser_source *pin = impl_source_from_IPin(&iface->pin.IPin_iface); unsigned int buffer_size = 16384; ALLOCATOR_PROPERTIES ret_props;
@@ -2131,7 +2131,7 @@ static HRESULT WINAPI GSTOutPin_DecideBufferSize(struct strmbase_source *iface, return IMemAllocator_SetProperties(allocator, props, &ret_props); }
-static void free_source_pin(struct gstdemux_source *pin) +static void free_source_pin(struct parser_source *pin) { if (pin->pin.pin.peer) { @@ -2174,9 +2174,9 @@ static const struct strmbase_source_ops source_ops = .pfnDecideBufferSize = GSTOutPin_DecideBufferSize, };
-static struct gstdemux_source *create_pin(struct gstdemux *filter, const WCHAR *name) +static struct parser_source *create_pin(struct gstdemux *filter, const WCHAR *name) { - struct gstdemux_source *pin, **new_array; + struct parser_source *pin, **new_array; char pad_name[19];
if (!(new_array = heap_realloc(filter->sources, (filter->source_count + 1) * sizeof(*new_array)))) @@ -2344,7 +2344,7 @@ static const struct strmbase_sink_ops wave_parser_sink_ops = static BOOL wave_parser_init_gst(struct gstdemux *filter) { static const WCHAR source_name[] = {'o','u','t','p','u','t',0}; - struct gstdemux_source *pin; + struct parser_source *pin; GstElement *element; HANDLE events[2]; int ret; @@ -2400,7 +2400,7 @@ static BOOL wave_parser_init_gst(struct gstdemux *filter) return TRUE; }
-static gboolean get_source_amt(const struct gstdemux_source *pin, AM_MEDIA_TYPE *mt) +static gboolean get_source_amt(const struct parser_source *pin, AM_MEDIA_TYPE *mt) { GstCaps *caps = gst_pad_get_current_caps(pin->my_sink); gboolean ret = amt_from_gst_caps(caps, mt); @@ -2408,7 +2408,7 @@ static gboolean get_source_amt(const struct gstdemux_source *pin, AM_MEDIA_TYPE return ret; }
-static HRESULT wave_parser_source_query_accept(struct gstdemux_source *pin, const AM_MEDIA_TYPE *mt) +static HRESULT wave_parser_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { AM_MEDIA_TYPE pad_mt; HRESULT hr; @@ -2420,7 +2420,7 @@ static HRESULT wave_parser_source_query_accept(struct gstdemux_source *pin, cons return hr; }
-static HRESULT wave_parser_source_get_media_type(struct gstdemux_source *pin, +static HRESULT wave_parser_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { if (index > 0) @@ -2510,7 +2510,7 @@ static BOOL avi_splitter_init_gst(struct gstdemux *filter)
for (i = 0; i < filter->source_count; ++i) { - struct gstdemux_source *pin = filter->sources[i]; + struct parser_source *pin = filter->sources[i]; const HANDLE events[2] = {pin->caps_event, filter->error_event};
pin->seek.llDuration = pin->seek.llStop = query_duration(pin->their_src); @@ -2527,7 +2527,7 @@ static BOOL avi_splitter_init_gst(struct gstdemux *filter) return TRUE; }
-static HRESULT avi_splitter_source_query_accept(struct gstdemux_source *pin, const AM_MEDIA_TYPE *mt) +static HRESULT avi_splitter_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { AM_MEDIA_TYPE pad_mt; HRESULT hr; @@ -2539,7 +2539,7 @@ static HRESULT avi_splitter_source_query_accept(struct gstdemux_source *pin, con return hr; }
-static HRESULT avi_splitter_source_get_media_type(struct gstdemux_source *pin, +static HRESULT avi_splitter_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { if (index > 0) @@ -2598,7 +2598,7 @@ static const struct strmbase_sink_ops mpeg_splitter_sink_ops = static BOOL mpeg_splitter_init_gst(struct gstdemux *filter) { static const WCHAR source_name[] = {'A','u','d','i','o',0}; - struct gstdemux_source *pin; + struct parser_source *pin; GstElement *element; HANDLE events[3]; DWORD res; @@ -2660,7 +2660,7 @@ static BOOL mpeg_splitter_init_gst(struct gstdemux *filter) return TRUE; }
-static HRESULT mpeg_splitter_source_query_accept(struct gstdemux_source *pin, const AM_MEDIA_TYPE *mt) +static HRESULT mpeg_splitter_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { AM_MEDIA_TYPE pad_mt; HRESULT hr; @@ -2672,7 +2672,7 @@ static HRESULT mpeg_splitter_source_query_accept(struct gstdemux_source *pin, co return hr; }
-static HRESULT mpeg_splitter_source_get_media_type(struct gstdemux_source *pin, +static HRESULT mpeg_splitter_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { if (index > 0)
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 146 +++++++++++++++++----------------- 1 file changed, 73 insertions(+), 73 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 19b7667bb06..19b35e462ed 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -46,7 +46,7 @@ GST_DEBUG_CATEGORY_STATIC(wine);
static const GUID MEDIASUBTYPE_CVID = {mmioFOURCC('c','v','i','d'), 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
-struct gstdemux +struct parser { struct strmbase_filter filter; IAMStreamSelect IAMStreamSelect_iface; @@ -69,7 +69,7 @@ struct gstdemux
HANDLE push_thread;
- BOOL (*init_gst)(struct gstdemux *filter); + 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); }; @@ -86,17 +86,17 @@ struct parser_source SourceSeeking seek; };
-static inline struct gstdemux *impl_from_strmbase_filter(struct strmbase_filter *iface) +static inline struct parser *impl_from_strmbase_filter(struct strmbase_filter *iface) { - return CONTAINING_RECORD(iface, struct gstdemux, filter); + return CONTAINING_RECORD(iface, struct parser, filter); }
static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0}; static const IMediaSeekingVtbl GST_Seeking_Vtbl; static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
-static struct parser_source *create_pin(struct gstdemux *filter, const WCHAR *name); -static HRESULT GST_RemoveOutputPins(struct gstdemux *This); +static struct parser_source *create_pin(struct parser *filter, const WCHAR *name); +static HRESULT GST_RemoveOutputPins(struct parser *This); static HRESULT WINAPI GST_ChangeCurrent(IMediaSeeking *iface); static HRESULT WINAPI GST_ChangeStop(IMediaSeeking *iface); static HRESULT WINAPI GST_ChangeRate(IMediaSeeking *iface); @@ -569,7 +569,7 @@ static gboolean query_sink(GstPad *pad, GstObject *parent, GstQuery *query) } }
-static gboolean gst_base_src_perform_seek(struct gstdemux *This, GstEvent *event) +static gboolean gst_base_src_perform_seek(struct parser *This, GstEvent *event) { gboolean res = TRUE; gdouble rate; @@ -623,7 +623,7 @@ static gboolean gst_base_src_perform_seek(struct gstdemux *This, GstEvent *event
static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event) { - struct gstdemux *This = gst_pad_get_element_private(pad); + struct parser *This = gst_pad_get_element_private(pad);
TRACE("filter %p, type "%s".\n", This, GST_EVENT_TYPE_NAME(event));
@@ -729,7 +729,7 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) static DWORD CALLBACK push_data(LPVOID iface) { LONGLONG maxlen, curlen; - struct gstdemux *This = iface; + struct parser *This = iface; GstMapInfo mapping; GstBuffer *buffer; HRESULT hr; @@ -862,7 +862,7 @@ static HRESULT send_sample(struct parser_source *pin, IMediaSample *sample, static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *buf) { struct parser_source *pin = gst_pad_get_element_private(pad); - struct gstdemux *This = impl_from_strmbase_filter(pin->pin.pin.filter); + struct parser *This = impl_from_strmbase_filter(pin->pin.pin.filter); HRESULT hr = S_OK; IMediaSample *sample; GstMapInfo info; @@ -939,7 +939,7 @@ static GstFlowReturn got_data_sink(GstPad *pad, GstObject *parent, GstBuffer *bu
static GstFlowReturn request_buffer_src(GstPad *pad, GstObject *parent, guint64 ofs, guint len, GstBuffer **buffer) { - struct gstdemux *This = gst_pad_get_element_private(pad); + struct parser *This = gst_pad_get_element_private(pad); GstBuffer *new_buffer = NULL; HRESULT hr; GstMapInfo info; @@ -974,7 +974,7 @@ static GstFlowReturn request_buffer_src(GstPad *pad, GstObject *parent, guint64
static DWORD CALLBACK push_data_init(LPVOID iface) { - struct gstdemux *This = iface; + struct parser *This = iface; DWORD64 ofs = 0;
TRACE("Starting..\n"); @@ -998,7 +998,7 @@ static DWORD CALLBACK push_data_init(LPVOID iface)
static void removed_decoded_pad(GstElement *bin, GstPad *pad, gpointer user) { - struct gstdemux *filter = user; + struct parser *filter = user; unsigned int i; char *name;
@@ -1025,7 +1025,7 @@ static void removed_decoded_pad(GstElement *bin, GstPad *pad, gpointer user) g_free(name); }
-static void init_new_decoded_pad(GstElement *bin, GstPad *pad, struct gstdemux *This) +static void init_new_decoded_pad(GstElement *bin, GstPad *pad, struct parser *This) { static const WCHAR formatW[] = {'S','t','r','e','a','m',' ','%','0','2','u',0}; const char *typename; @@ -1172,7 +1172,7 @@ out:
static void existing_new_pad(GstElement *bin, GstPad *pad, gpointer user) { - struct gstdemux *This = user; + struct parser *This = user; unsigned int i; int ret;
@@ -1211,7 +1211,7 @@ static void existing_new_pad(GstElement *bin, GstPad *pad, gpointer user)
static gboolean query_function(GstPad *pad, GstObject *parent, GstQuery *query) { - struct gstdemux *This = gst_pad_get_element_private(pad); + struct parser *This = gst_pad_get_element_private(pad); GstFormat format;
TRACE("filter %p, type %s.\n", This, GST_QUERY_TYPE_NAME(query)); @@ -1252,7 +1252,7 @@ static gboolean query_function(GstPad *pad, GstObject *parent, GstQuery *query)
static gboolean activate_push(GstPad *pad, gboolean activate) { - struct gstdemux *This = gst_pad_get_element_private(pad); + struct parser *This = gst_pad_get_element_private(pad);
EnterCriticalSection(&This->filter.csFilter); if (!activate) { @@ -1281,7 +1281,7 @@ static gboolean activate_push(GstPad *pad, gboolean activate)
static gboolean activate_mode(GstPad *pad, GstObject *parent, GstPadMode mode, gboolean activate) { - struct gstdemux *filter = gst_pad_get_element_private(pad); + struct parser *filter = gst_pad_get_element_private(pad);
TRACE("%s source pad for filter %p in %s mode.\n", activate ? "Activating" : "Deactivating", filter, gst_pad_mode_get_name(mode)); @@ -1299,7 +1299,7 @@ static gboolean activate_mode(GstPad *pad, GstObject *parent, GstPadMode mode, g
static void no_more_pads(GstElement *decodebin, gpointer user) { - struct gstdemux *filter = user; + struct parser *filter = user; TRACE("filter %p.\n", filter); SetEvent(filter->no_more_pads_event); } @@ -1325,7 +1325,7 @@ static GstAutoplugSelectResult autoplug_blacklist(GstElement *bin, GstPad *pad,
static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) { - struct gstdemux *filter = data; + struct parser *filter = data; GError *err = NULL; gchar *dbg_info = NULL;
@@ -1358,7 +1358,7 @@ static GstBusSyncReply watch_bus(GstBus *bus, GstMessage *msg, gpointer data) return GST_BUS_DROP; }
-static HRESULT GST_Connect(struct gstdemux *This, IPin *pConnectPin) +static HRESULT GST_Connect(struct parser *This, IPin *pConnectPin) { LONGLONG avail; GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE( @@ -1420,9 +1420,9 @@ static inline struct parser_source *impl_from_IMediaSeeking(IMediaSeeking *iface return CONTAINING_RECORD(iface, struct parser_source, seek.IMediaSeeking_iface); }
-static struct strmbase_pin *gstdemux_get_pin(struct strmbase_filter *base, unsigned int index) +static struct strmbase_pin *parser_get_pin(struct strmbase_filter *base, unsigned int index) { - struct gstdemux *filter = impl_from_strmbase_filter(base); + struct parser *filter = impl_from_strmbase_filter(base);
if (filter->enum_sink_first) { @@ -1441,9 +1441,9 @@ static struct strmbase_pin *gstdemux_get_pin(struct strmbase_filter *base, unsig return NULL; }
-static void gstdemux_destroy(struct strmbase_filter *iface) +static void parser_destroy(struct strmbase_filter *iface) { - struct gstdemux *filter = impl_from_strmbase_filter(iface); + struct parser *filter = impl_from_strmbase_filter(iface); HRESULT hr;
CloseHandle(filter->no_more_pads_event); @@ -1473,9 +1473,9 @@ static void gstdemux_destroy(struct strmbase_filter *iface) heap_free(filter); }
-static HRESULT gstdemux_init_stream(struct strmbase_filter *iface) +static HRESULT parser_init_stream(struct strmbase_filter *iface) { - struct gstdemux *filter = impl_from_strmbase_filter(iface); + struct parser *filter = impl_from_strmbase_filter(iface); const SourceSeeking *seeking; GstStateChangeReturn ret; unsigned int i; @@ -1525,9 +1525,9 @@ static HRESULT gstdemux_init_stream(struct strmbase_filter *iface) return S_OK; }
-static HRESULT gstdemux_cleanup_stream(struct strmbase_filter *iface) +static HRESULT parser_cleanup_stream(struct strmbase_filter *iface) { - struct gstdemux *filter = impl_from_strmbase_filter(iface); + struct parser *filter = impl_from_strmbase_filter(iface); GstStateChangeReturn ret; unsigned int i;
@@ -1552,9 +1552,9 @@ static HRESULT gstdemux_cleanup_stream(struct strmbase_filter *iface) return S_OK; }
-static HRESULT gstdemux_wait_state(struct strmbase_filter *iface, DWORD timeout) +static HRESULT parser_wait_state(struct strmbase_filter *iface, DWORD timeout) { - struct gstdemux *filter = impl_from_strmbase_filter(iface); + struct parser *filter = impl_from_strmbase_filter(iface); GstStateChangeReturn ret;
if (!filter->container) @@ -1574,16 +1574,16 @@ static HRESULT gstdemux_wait_state(struct strmbase_filter *iface, DWORD timeout)
static const struct strmbase_filter_ops filter_ops = { - .filter_get_pin = gstdemux_get_pin, - .filter_destroy = gstdemux_destroy, - .filter_init_stream = gstdemux_init_stream, - .filter_cleanup_stream = gstdemux_cleanup_stream, - .filter_wait_state = gstdemux_wait_state, + .filter_get_pin = parser_get_pin, + .filter_destroy = parser_destroy, + .filter_init_stream = parser_init_stream, + .filter_cleanup_stream = parser_cleanup_stream, + .filter_wait_state = parser_wait_state, };
-static inline struct gstdemux *impl_from_strmbase_sink(struct strmbase_sink *iface) +static inline struct parser *impl_from_strmbase_sink(struct strmbase_sink *iface) { - return CONTAINING_RECORD(iface, struct gstdemux, sink); + return CONTAINING_RECORD(iface, struct parser, sink); }
static HRESULT sink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) @@ -1593,9 +1593,9 @@ static HRESULT sink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE return S_FALSE; }
-static HRESULT gstdemux_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt) +static HRESULT parser_sink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *pmt) { - struct gstdemux *filter = impl_from_strmbase_sink(iface); + struct parser *filter = impl_from_strmbase_sink(iface); HRESULT hr = S_OK;
mark_wine_thread(); @@ -1615,9 +1615,9 @@ err: return hr; }
-static void gstdemux_sink_disconnect(struct strmbase_sink *iface) +static void parser_sink_disconnect(struct strmbase_sink *iface) { - struct gstdemux *filter = impl_from_strmbase_sink(iface); + struct parser *filter = impl_from_strmbase_sink(iface);
mark_wine_thread();
@@ -1630,11 +1630,11 @@ static void gstdemux_sink_disconnect(struct strmbase_sink *iface) static const struct strmbase_sink_ops sink_ops = { .base.pin_query_accept = sink_query_accept, - .sink_connect = gstdemux_sink_connect, - .sink_disconnect = gstdemux_sink_disconnect, + .sink_connect = parser_sink_connect, + .sink_disconnect = parser_sink_disconnect, };
-static BOOL gstdecoder_init_gst(struct gstdemux *filter) +static BOOL gstdecoder_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("decodebin", NULL); unsigned int i; @@ -1790,7 +1790,7 @@ static BOOL parser_init_gstreamer(void)
HRESULT gstdemux_create(IUnknown *outer, IUnknown **out) { - struct gstdemux *object; + struct parser *object;
if (!parser_init_gstreamer()) return E_FAIL; @@ -1814,26 +1814,26 @@ HRESULT gstdemux_create(IUnknown *outer, IUnknown **out) return S_OK; }
-static struct gstdemux *impl_from_IAMStreamSelect(IAMStreamSelect *iface) +static struct parser *impl_from_IAMStreamSelect(IAMStreamSelect *iface) { - return CONTAINING_RECORD(iface, struct gstdemux, IAMStreamSelect_iface); + return CONTAINING_RECORD(iface, struct parser, IAMStreamSelect_iface); }
static HRESULT WINAPI stream_select_QueryInterface(IAMStreamSelect *iface, REFIID iid, void **out) { - struct gstdemux *filter = impl_from_IAMStreamSelect(iface); + struct parser *filter = impl_from_IAMStreamSelect(iface); return IUnknown_QueryInterface(filter->filter.outer_unk, iid, out); }
static ULONG WINAPI stream_select_AddRef(IAMStreamSelect *iface) { - struct gstdemux *filter = impl_from_IAMStreamSelect(iface); + struct parser *filter = impl_from_IAMStreamSelect(iface); return IUnknown_AddRef(filter->filter.outer_unk); }
static ULONG WINAPI stream_select_Release(IAMStreamSelect *iface) { - struct gstdemux *filter = impl_from_IAMStreamSelect(iface); + struct parser *filter = impl_from_IAMStreamSelect(iface); return IUnknown_Release(filter->filter.outer_unk); }
@@ -2090,14 +2090,14 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, vo static HRESULT source_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { struct parser_source *pin = impl_source_from_IPin(&iface->IPin_iface); - struct gstdemux *filter = impl_from_strmbase_filter(iface->filter); + struct parser *filter = impl_from_strmbase_filter(iface->filter); return filter->source_query_accept(pin, mt); }
static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt) { struct parser_source *pin = impl_source_from_IPin(&iface->IPin_iface); - struct gstdemux *filter = impl_from_strmbase_filter(iface->filter); + struct parser *filter = impl_from_strmbase_filter(iface->filter); return filter->source_get_media_type(pin, index, mt); }
@@ -2174,7 +2174,7 @@ static const struct strmbase_source_ops source_ops = .pfnDecideBufferSize = GSTOutPin_DecideBufferSize, };
-static struct parser_source *create_pin(struct gstdemux *filter, const WCHAR *name) +static struct parser_source *create_pin(struct parser *filter, const WCHAR *name) { struct parser_source *pin, **new_array; char pad_name[19]; @@ -2207,7 +2207,7 @@ static struct parser_source *create_pin(struct gstdemux *filter, const WCHAR *na return pin; }
-static HRESULT GST_RemoveOutputPins(struct gstdemux *This) +static HRESULT GST_RemoveOutputPins(struct parser *This) { unsigned int i;
@@ -2337,11 +2337,11 @@ static HRESULT wave_parser_sink_query_accept(struct strmbase_pin *iface, const A static const struct strmbase_sink_ops wave_parser_sink_ops = { .base.pin_query_accept = wave_parser_sink_query_accept, - .sink_connect = gstdemux_sink_connect, - .sink_disconnect = gstdemux_sink_disconnect, + .sink_connect = parser_sink_connect, + .sink_disconnect = parser_sink_disconnect, };
-static BOOL wave_parser_init_gst(struct gstdemux *filter) +static BOOL wave_parser_init_gst(struct parser *filter) { static const WCHAR source_name[] = {'o','u','t','p','u','t',0}; struct parser_source *pin; @@ -2433,7 +2433,7 @@ static HRESULT wave_parser_source_get_media_type(struct parser_source *pin, HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) { static const WCHAR sink_name[] = {'i','n','p','u','t',' ','p','i','n',0}; - struct gstdemux *object; + struct parser *object;
if (!parser_init_gstreamer()) return E_FAIL; @@ -2466,11 +2466,11 @@ static HRESULT avi_splitter_sink_query_accept(struct strmbase_pin *iface, const static const struct strmbase_sink_ops avi_splitter_sink_ops = { .base.pin_query_accept = avi_splitter_sink_query_accept, - .sink_connect = gstdemux_sink_connect, - .sink_disconnect = gstdemux_sink_disconnect, + .sink_connect = parser_sink_connect, + .sink_disconnect = parser_sink_disconnect, };
-static BOOL avi_splitter_init_gst(struct gstdemux *filter) +static BOOL avi_splitter_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("avidemux", NULL); unsigned int i; @@ -2552,7 +2552,7 @@ static HRESULT avi_splitter_source_get_media_type(struct parser_source *pin, HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) { static const WCHAR sink_name[] = {'i','n','p','u','t',' ','p','i','n',0}; - struct gstdemux *object; + struct parser *object;
if (!parser_init_gstreamer()) return E_FAIL; @@ -2591,11 +2591,11 @@ static HRESULT mpeg_splitter_sink_query_accept(struct strmbase_pin *iface, const static const struct strmbase_sink_ops mpeg_splitter_sink_ops = { .base.pin_query_accept = mpeg_splitter_sink_query_accept, - .sink_connect = gstdemux_sink_connect, - .sink_disconnect = gstdemux_sink_disconnect, + .sink_connect = parser_sink_connect, + .sink_disconnect = parser_sink_disconnect, };
-static BOOL mpeg_splitter_init_gst(struct gstdemux *filter) +static BOOL mpeg_splitter_init_gst(struct parser *filter) { static const WCHAR source_name[] = {'A','u','d','i','o',0}; struct parser_source *pin; @@ -2684,7 +2684,7 @@ static HRESULT mpeg_splitter_source_get_media_type(struct parser_source *pin,
static HRESULT mpeg_splitter_query_interface(struct strmbase_filter *iface, REFIID iid, void **out) { - struct gstdemux *filter = impl_from_strmbase_filter(iface); + struct parser *filter = impl_from_strmbase_filter(iface);
if (IsEqualGUID(iid, &IID_IAMStreamSelect)) { @@ -2699,17 +2699,17 @@ static HRESULT mpeg_splitter_query_interface(struct strmbase_filter *iface, REFI static const struct strmbase_filter_ops mpeg_splitter_ops = { .filter_query_interface = mpeg_splitter_query_interface, - .filter_get_pin = gstdemux_get_pin, - .filter_destroy = gstdemux_destroy, - .filter_init_stream = gstdemux_init_stream, - .filter_cleanup_stream = gstdemux_cleanup_stream, - .filter_wait_state = gstdemux_wait_state, + .filter_get_pin = parser_get_pin, + .filter_destroy = parser_destroy, + .filter_init_stream = parser_init_stream, + .filter_cleanup_stream = parser_cleanup_stream, + .filter_wait_state = parser_wait_state, };
HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) { static const WCHAR sink_name[] = {'I','n','p','u','t',0}; - struct gstdemux *object; + struct parser *object;
if (!parser_init_gstreamer()) return E_FAIL;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gst_guids.h | 2 +- dlls/winegstreamer/gst_private.h | 2 +- dlls/winegstreamer/gstdemux.c | 16 ++++++++-------- dlls/winegstreamer/main.c | 18 +++++++++--------- dlls/winegstreamer/winegstreamer_classes.idl | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/dlls/winegstreamer/gst_guids.h b/dlls/winegstreamer/gst_guids.h index b5ed3139b60..ea859586d7f 100644 --- a/dlls/winegstreamer/gst_guids.h +++ b/dlls/winegstreamer/gst_guids.h @@ -19,5 +19,5 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-DEFINE_GUID(CLSID_Gstreamer_Splitter, 0xf9d8d64e, 0xa144, 0x47dc, 0x8e, 0xe0, 0xf5, 0x34, 0x98, 0x37, 0x2c, 0x29); +DEFINE_GUID(CLSID_decodebin_parser, 0xf9d8d64e, 0xa144, 0x47dc, 0x8e, 0xe0, 0xf5, 0x34, 0x98, 0x37, 0x2c, 0x29); DEFINE_GUID(WINESUBTYPE_Gstreamer, 0xffffffff, 0x128f, 0x4dd1, 0xad, 0x22, 0xbe, 0xcf, 0xa6, 0x6c, 0xe7, 0xaa); diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 9518f721504..e591a95f3ca 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -67,7 +67,7 @@ static inline const char *debugstr_time(REFERENCE_TIME time) extern LONG object_locks;
HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; -HRESULT gstdemux_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; +HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN;
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 19b35e462ed..040da3f2ce0 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1634,7 +1634,7 @@ static const struct strmbase_sink_ops sink_ops = .sink_disconnect = parser_sink_disconnect, };
-static BOOL gstdecoder_init_gst(struct parser *filter) +static BOOL decodebin_parser_init_gst(struct parser *filter) { GstElement *element = gst_element_factory_make("decodebin", NULL); unsigned int i; @@ -1692,7 +1692,7 @@ static BOOL gstdecoder_init_gst(struct parser *filter) return TRUE; }
-static HRESULT gstdecoder_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) +static HRESULT decodebin_parser_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { /* At least make sure we can convert it to GstCaps. */ GstCaps *caps = amt_to_gst_caps(mt); @@ -1703,7 +1703,7 @@ static HRESULT gstdecoder_source_query_accept(struct parser_source *pin, const A return S_OK; }
-static HRESULT gstdecoder_source_get_media_type(struct parser_source *pin, +static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { GstCaps *caps = gst_pad_get_current_caps(pin->my_sink); @@ -1788,7 +1788,7 @@ static BOOL parser_init_gstreamer(void) return TRUE; }
-HRESULT gstdemux_create(IUnknown *outer, IUnknown **out) +HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) { struct parser *object;
@@ -1800,14 +1800,14 @@ HRESULT gstdemux_create(IUnknown *outer, IUnknown **out) if (!(object = heap_alloc_zero(sizeof(*object)))) return E_OUTOFMEMORY;
- strmbase_filter_init(&object->filter, outer, &CLSID_Gstreamer_Splitter, &filter_ops); + strmbase_filter_init(&object->filter, outer, &CLSID_decodebin_parser, &filter_ops); strmbase_sink_init(&object->sink, &object->filter, wcsInputPinName, &sink_ops, NULL);
object->no_more_pads_event = CreateEventW(NULL, FALSE, FALSE, NULL); object->error_event = CreateEventW(NULL, TRUE, FALSE, NULL); - object->init_gst = gstdecoder_init_gst; - object->source_query_accept = gstdecoder_source_query_accept; - object->source_get_media_type = gstdecoder_source_get_media_type; + object->init_gst = decodebin_parser_init_gst; + object->source_query_accept = decodebin_parser_source_query_accept; + object->source_get_media_type = decodebin_parser_source_get_media_type;
TRACE("Created GStreamer demuxer %p.\n", object); *out = &object->filter.IUnknown_inner; diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index 385c5550235..3c630a1561f 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -135,7 +135,7 @@ static const IClassFactoryVtbl class_factory_vtbl = };
static struct class_factory avi_splitter_cf = {{&class_factory_vtbl}, avi_splitter_create}; -static struct class_factory gstdemux_cf = {{&class_factory_vtbl}, gstdemux_create}; +static struct class_factory decodebin_parser_cf = {{&class_factory_vtbl}, decodebin_parser_create}; static struct class_factory mpeg_splitter_cf = {{&class_factory_vtbl}, mpeg_splitter_create}; static struct class_factory wave_parser_cf = {{&class_factory_vtbl}, wave_parser_create};
@@ -154,8 +154,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out)
if (IsEqualGUID(clsid, &CLSID_AviSplitter)) factory = &avi_splitter_cf; - else if (IsEqualGUID(clsid, &CLSID_Gstreamer_Splitter)) - factory = &gstdemux_cf; + else if (IsEqualGUID(clsid, &CLSID_decodebin_parser)) + factory = &decodebin_parser_cf; else if (IsEqualGUID(clsid, &CLSID_MPEG1Splitter)) factory = &mpeg_splitter_cf; else if (IsEqualGUID(clsid, &CLSID_WAVEParser)) @@ -321,7 +321,7 @@ static const REGFILTER2 reg_wave_parser = .u.s2.rgPins2 = reg_wave_parser_pins, };
-static const REGFILTERPINS2 reg_gstdemux_pins[3] = +static const REGFILTERPINS2 reg_decodebin_parser_pins[3] = { { .nMediaTypes = 1, @@ -339,12 +339,12 @@ static const REGFILTERPINS2 reg_gstdemux_pins[3] = }, };
-static const REGFILTER2 reg_gstdemux = +static const REGFILTER2 reg_decodebin_parser = { .dwVersion = 2, .dwMerit = MERIT_PREFERRED, .u.s2.cPins2 = 3, - .u.s2.rgPins2 = reg_gstdemux_pins, + .u.s2.rgPins2 = reg_decodebin_parser_pins, };
HRESULT WINAPI DllRegisterServer(void) @@ -362,8 +362,8 @@ HRESULT WINAPI DllRegisterServer(void) return hr;
IFilterMapper2_RegisterFilter(mapper, &CLSID_AviSplitter, avi_splitterW, NULL, NULL, NULL, ®_avi_splitter); - IFilterMapper2_RegisterFilter(mapper, &CLSID_Gstreamer_Splitter, - wGstreamer_Splitter, NULL, NULL, NULL, ®_gstdemux); + IFilterMapper2_RegisterFilter(mapper, &CLSID_decodebin_parser, + wGstreamer_Splitter, NULL, NULL, NULL, ®_decodebin_parser); IFilterMapper2_RegisterFilter(mapper, &CLSID_MPEG1Splitter, mpeg_splitterW, NULL, NULL, NULL, ®_mpeg_splitter); IFilterMapper2_RegisterFilter(mapper, &CLSID_WAVEParser, wave_parserW, NULL, NULL, NULL, ®_wave_parser);
@@ -387,7 +387,7 @@ HRESULT WINAPI DllUnregisterServer(void) return hr;
IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_AviSplitter); - IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_Gstreamer_Splitter); + IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_decodebin_parser); IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_MPEG1Splitter); IFilterMapper2_UnregisterFilter(mapper, NULL, NULL, &CLSID_WAVEParser);
diff --git a/dlls/winegstreamer/winegstreamer_classes.idl b/dlls/winegstreamer/winegstreamer_classes.idl index cf1fc69f38a..072ec90eea4 100644 --- a/dlls/winegstreamer/winegstreamer_classes.idl +++ b/dlls/winegstreamer/winegstreamer_classes.idl @@ -43,11 +43,11 @@ coclass MPEG1Splitter {} coclass WAVEParser {}
[ - helpstring("GStreamer splitter"), + helpstring("GStreamer parser using decodebin"), threading(both), uuid(f9d8d64e-a144-47dc-8ee0-f53498372c29) ] -coclass Gstreamer_Splitter {} +coclass decodebin_parser {}
[ threading(both),
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 040da3f2ce0..f30264f1c88 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -624,12 +624,14 @@ static gboolean gst_base_src_perform_seek(struct parser *This, GstEvent *event) static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event) { struct parser *This = gst_pad_get_element_private(pad); + gboolean ret = TRUE;
TRACE("filter %p, type "%s".\n", This, GST_EVENT_TYPE_NAME(event));
switch (event->type) { case GST_EVENT_SEEK: - return gst_base_src_perform_seek(This, event); + ret = gst_base_src_perform_seek(This, event); + break; case GST_EVENT_FLUSH_START: EnterCriticalSection(&This->filter.csFilter); if (This->reader) @@ -649,13 +651,13 @@ static gboolean event_src(GstPad *pad, GstObject *parent, GstEvent *event) case GST_EVENT_RECONFIGURE: return gst_pad_event_default(pad, parent, event); } - return TRUE; + gst_event_unref(event); + return ret; }
static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) { struct parser_source *pin = gst_pad_get_element_private(pad); - gboolean ret;
TRACE("pin %p, type "%s".\n", pin, GST_EVENT_TYPE_NAME(event));
@@ -675,7 +677,7 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) if (segment->format != GST_FORMAT_TIME) { FIXME("Unhandled format "%s".\n", gst_format_get_name(segment->format)); - return TRUE; + break; }
gst_segment_copy_into(segment, pin->segment); @@ -688,14 +690,14 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) if (pin->pin.pin.peer) IPin_NewSegment(pin->pin.pin.peer, pos, stop, rate*applied_rate);
- return TRUE; + break; } case GST_EVENT_EOS: if (pin->pin.pin.peer) IPin_EndOfStream(pin->pin.pin.peer); else SetEvent(pin->eos_event); - return TRUE; + break; case GST_EVENT_FLUSH_START: if (impl_from_strmbase_filter(pin->pin.pin.filter)->ignore_flush) { /* gst-plugins-base prior to 1.7 contains a bug which causes @@ -706,24 +708,28 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) * unset the flushing flag to avoid the problem. */ TRACE("Working around gst <1.7 bug, ignoring FLUSH_START\n"); GST_PAD_UNSET_FLUSHING (pad); - return TRUE; + break; } if (pin->pin.pin.peer) IPin_BeginFlush(pin->pin.pin.peer); - return TRUE; + break; case GST_EVENT_FLUSH_STOP: gst_segment_init(pin->segment, GST_FORMAT_TIME); if (pin->pin.pin.peer) IPin_EndFlush(pin->pin.pin.peer); - return TRUE; + break; case GST_EVENT_CAPS: - ret = gst_pad_event_default(pad, parent, event); + { + gboolean ret = gst_pad_event_default(pad, parent, event); SetEvent(pin->caps_event); return ret; + } default: WARN("Ignoring "%s" event.\n", GST_EVENT_TYPE_NAME(event)); return gst_pad_event_default(pad, parent, event); } + gst_event_unref(event); + return TRUE; }
static DWORD CALLBACK push_data(LPVOID iface)
gst_pad_get_current_caps() is not guaranteed to return the updated caps when GST_EVENT_CAPS is handled by the event handler, or even after gst_pad_event_default(). The actual implementation of gst_pad_send_event() in fact sets it later. Avoid a potential race condition by using our own caps pointer.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 36 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 23 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index f30264f1c88..d6b47e871d5 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -83,6 +83,7 @@ struct parser_source GstElement *flip; HANDLE caps_event, eos_event; GstSegment *segment; + GstCaps *caps; SourceSeeking seek; };
@@ -720,9 +721,12 @@ static gboolean event_sink(GstPad *pad, GstObject *parent, GstEvent *event) break; case GST_EVENT_CAPS: { - gboolean ret = gst_pad_event_default(pad, parent, event); + GstCaps *caps; + + gst_event_parse_caps(event, &caps); + gst_caps_replace(&pin->caps, caps); SetEvent(pin->caps_event); - return ret; + break; } default: WARN("Ignoring "%s" event.\n", GST_EVENT_TYPE_NAME(event)); @@ -1712,7 +1716,7 @@ static HRESULT decodebin_parser_source_query_accept(struct parser_source *pin, c static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, unsigned int index, AM_MEDIA_TYPE *mt) { - GstCaps *caps = gst_pad_get_current_caps(pin->my_sink); + const GstCaps *caps = pin->caps; const GstStructure *structure; const char *type;
@@ -1744,10 +1748,7 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, if (amt_from_gst_caps(caps, mt)) { if (!index--) - { - gst_caps_unref(caps); return S_OK; - } FreeMediaType(mt); }
@@ -1756,7 +1757,6 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, gint width, height, fps_n, fps_d; GstVideoInfo info;
- gst_caps_unref(caps); gst_structure_get_int(structure, "width", &width); gst_structure_get_int(structure, "height", &height); gst_video_info_set_format(&info, video_formats[index], width, height); @@ -1774,7 +1774,6 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, GstAudioInfo info; gint rate;
- gst_caps_unref(caps); gst_structure_get_int(structure, "rate", &rate); gst_audio_info_set_format(&info, GST_AUDIO_FORMAT_S16LE, rate, 2, NULL); if (!amt_from_gst_audio_info(&info, mt)) @@ -1782,7 +1781,6 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, return S_OK; }
- gst_caps_unref(caps); return VFW_S_NO_MORE_ITEMS; }
@@ -2406,20 +2404,12 @@ static BOOL wave_parser_init_gst(struct parser *filter) return TRUE; }
-static gboolean get_source_amt(const struct parser_source *pin, AM_MEDIA_TYPE *mt) -{ - GstCaps *caps = gst_pad_get_current_caps(pin->my_sink); - gboolean ret = amt_from_gst_caps(caps, mt); - gst_caps_unref(caps); - return ret; -} - static HRESULT wave_parser_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE *mt) { AM_MEDIA_TYPE pad_mt; HRESULT hr;
- if (!get_source_amt(pin, &pad_mt)) + if (!amt_from_gst_caps(pin->caps, &pad_mt)) return E_OUTOFMEMORY; hr = compare_media_types(mt, &pad_mt) ? S_OK : S_FALSE; FreeMediaType(&pad_mt); @@ -2431,7 +2421,7 @@ static HRESULT wave_parser_source_get_media_type(struct parser_source *pin, { if (index > 0) return VFW_S_NO_MORE_ITEMS; - if (!get_source_amt(pin, mt)) + if (!amt_from_gst_caps(pin->caps, mt)) return E_OUTOFMEMORY; return S_OK; } @@ -2538,7 +2528,7 @@ static HRESULT avi_splitter_source_query_accept(struct parser_source *pin, const AM_MEDIA_TYPE pad_mt; HRESULT hr;
- if (!get_source_amt(pin, &pad_mt)) + if (!amt_from_gst_caps(pin->caps, &pad_mt)) return E_OUTOFMEMORY; hr = compare_media_types(mt, &pad_mt) ? S_OK : S_FALSE; FreeMediaType(&pad_mt); @@ -2550,7 +2540,7 @@ static HRESULT avi_splitter_source_get_media_type(struct parser_source *pin, { if (index > 0) return VFW_S_NO_MORE_ITEMS; - if (!get_source_amt(pin, mt)) + if (!amt_from_gst_caps(pin->caps, mt)) return E_OUTOFMEMORY; return S_OK; } @@ -2671,7 +2661,7 @@ static HRESULT mpeg_splitter_source_query_accept(struct parser_source *pin, cons AM_MEDIA_TYPE pad_mt; HRESULT hr;
- if (!get_source_amt(pin, &pad_mt)) + if (!amt_from_gst_caps(pin->caps, &pad_mt)) return E_OUTOFMEMORY; hr = compare_media_types(mt, &pad_mt) ? S_OK : S_FALSE; FreeMediaType(&pad_mt); @@ -2683,7 +2673,7 @@ static HRESULT mpeg_splitter_source_get_media_type(struct parser_source *pin, { if (index > 0) return VFW_S_NO_MORE_ITEMS; - if (!get_source_amt(pin, mt)) + if (!amt_from_gst_caps(pin->caps, mt)) return E_OUTOFMEMORY; return S_OK; }