[PATCH v4 1/5] strmbase: Combine the SetMediaType() and CompleteConnect() callbacks. (original) (raw)

Zebediah Figura z.figura12 at gmail.com
Tue Dec 10 10:35:11 CST 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>

dlls/quartz/acmwrapper.c | 115 +++++++----------------- dlls/quartz/avidec.c | 37 ++------ dlls/strmbase/transform.c | 7 +- dlls/winegstreamer/gsttffilter.c | 146 +++++++++++-------------------- dlls/wineqtdecoder/qtvdecoder.c | 25 ++---- include/wine/strmbase.h | 5 +- 6 files changed, 103 insertions(+), 232 deletions(-)

diff --git a/dlls/quartz/acmwrapper.c b/dlls/quartz/acmwrapper.c index 8eea6ab147..33d9debe5c 100644 --- a/dlls/quartz/acmwrapper.c +++ b/dlls/quartz/acmwrapper.c @@ -40,7 +40,6 @@ typedef struct ACMWrapperImpl TransformFilter tf; HACMSTREAM has; - LPWAVEFORMATEX pWfIn; LPWAVEFORMATEX pWfOut; LONGLONG lasttime_real; @@ -224,85 +223,43 @@ error: return hr; } -static HRESULT WINAPI ACMWrapper_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE * pmt) +static BOOL is_audio_subtype(const GUID guid) { - ACMWrapperImpl This = impl_from_TransformFilter(tf); - MMRESULT res;

} -static HRESULT WINAPI ACMWrapper_CompleteConnect(TransformFilter *tf, PIN_DIRECTION dir, IPin *pin) +static HRESULT acm_wrapper_connect_sink(TransformFilter *iface, const AM_MEDIA_TYPE mt) { - ACMWrapperImpl This = impl_from_TransformFilter(tf); - MMRESULT res; + ACMWrapperImpl *filter = impl_from_TransformFilter(iface); + const WAVEFORMATEX *wfx = (WAVEFORMATEX *)mt->pbFormat; HACMSTREAM drv; + MMRESULT res; - TRACE("(%p)\n", This);

} static HRESULT WINAPI ACMWrapper_BreakConnect(TransformFilter *tf, PIN_DIRECTION dir) @@ -341,18 +298,10 @@ static HRESULT WINAPI ACMWrapper_DecideBufferSize(TransformFilter *tf, IMemAlloc } static const TransformFilterFuncTable ACMWrapper_FuncsTable = { - ACMWrapper_DecideBufferSize, - NULL, - ACMWrapper_Receive, - NULL, - NULL, - ACMWrapper_SetMediaType, - ACMWrapper_CompleteConnect, - ACMWrapper_BreakConnect, - NULL, - NULL, - NULL, - NULL + .pfnDecideBufferSize = ACMWrapper_DecideBufferSize, + .pfnReceive = ACMWrapper_Receive, + .transform_connect_sink = acm_wrapper_connect_sink, + .pfnBreakConnect = ACMWrapper_BreakConnect, }; HRESULT ACMWrapper_create(IUnknown *outer, void *out) diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 32969a3473..abed957fa6 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -210,16 +210,11 @@ static HRESULT WINAPI AVIDec_StopStreaming(TransformFilter pTransformFilter) return S_OK; } -static HRESULT WINAPI AVIDec_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE * pmt) +static HRESULT avi_dec_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE pmt) { AVIDecImpl This = impl_from_TransformFilter(tf); HRESULT hr = VFW_E_TYPE_NOT_ACCEPTED; - TRACE("(%p)->(%p)\n", This, pmt);

@@ -310,15 +305,6 @@ failed: return hr; } -static HRESULT WINAPI AVIDec_CompleteConnect(TransformFilter *tf, PIN_DIRECTION dir, IPin pin) -{ - AVIDecImpl This = impl_from_TransformFilter(tf);

-}

static HRESULT WINAPI AVIDec_BreakConnect(TransformFilter *tf, PIN_DIRECTION dir) { AVIDecImpl *This = impl_from_TransformFilter(tf); @@ -357,19 +343,14 @@ static HRESULT WINAPI AVIDec_DecideBufferSize(TransformFilter *tf, IMemAllocator } static const TransformFilterFuncTable AVIDec_FuncsTable = { - AVIDec_DecideBufferSize, - AVIDec_StartStreaming, - AVIDec_Receive, - AVIDec_StopStreaming, - NULL, - AVIDec_SetMediaType, - AVIDec_CompleteConnect, - AVIDec_BreakConnect, - NULL, - NULL, - AVIDec_EndFlush, - NULL, - AVIDec_NotifyDrop + .pfnDecideBufferSize = AVIDec_DecideBufferSize, + .pfnStartStreaming = AVIDec_StartStreaming, + .pfnReceive = AVIDec_Receive, + .pfnStopStreaming = AVIDec_StopStreaming, + .transform_connect_sink = avi_dec_connect_sink, + .pfnBreakConnect = AVIDec_BreakConnect, + .pfnEndFlush = AVIDec_EndFlush, + .pfnNotify = AVIDec_NotifyDrop, }; HRESULT AVIDec_create(IUnknown *outer, void **out) diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c index 7a79f70905..30ed0006cb 100644 --- a/dlls/strmbase/transform.c +++ b/dlls/strmbase/transform.c @@ -405,11 +405,8 @@ static HRESULT WINAPI TransformFilter_InputPin_ReceiveConnection(IPin * iface, I TRACE("(%p)->(%p, %p)\n", iface, pReceivePin, pmt); strmbase_dump_media_type(pmt); - if (pTransform->pFuncsTable->pfnSetMediaType) - hr = pTransform->pFuncsTable->pfnSetMediaType(pTransform, PINDIR_INPUT, pmt);

diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c index ee1851dfdc..d44a6ae33a 100644 --- a/dlls/winegstreamer/gsttffilter.c +++ b/dlls/winegstreamer/gsttffilter.c @@ -516,7 +516,7 @@ static HRESULT WINAPI Gstreamer_Mp3_QueryConnect(TransformFilter *iface, const A return S_OK; } -static HRESULT WINAPI Gstreamer_Mp3_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE *amt) +static HRESULT mp3_decoder_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt) { GstTfImpl This = (GstTfImpl)tf; GstCaps *capsin, *capsout; @@ -525,13 +525,8 @@ static HRESULT WINAPI Gstreamer_Mp3_SetMediaType(TransformFilter *tf, PIN_DIRECT HRESULT hr; int layer; - TRACE("%p 0x%x %p\n", This, dir, amt);

 mark_wine_thread();

@@ -588,26 +583,19 @@ static HRESULT WINAPI Gstreamer_Mp3_SetMediaType(TransformFilter *tf, PIN_DIRECT return hr; } -static HRESULT WINAPI Gstreamer_Mp3_ConnectInput(TransformFilter *tf, PIN_DIRECTION dir, IPin *pin) -{ - TRACE("%p 0x%x %p\n", tf, dir, pin); - return S_OK; -}

static const TransformFilterFuncTable Gstreamer_Mp3_vtbl = { - Gstreamer_transform_DecideBufferSize, - Gstreamer_transform_ProcessBegin, - Gstreamer_transform_ProcessData, - Gstreamer_transform_ProcessEnd, - Gstreamer_Mp3_QueryConnect, - Gstreamer_Mp3_SetMediaType, - Gstreamer_Mp3_ConnectInput, - Gstreamer_transform_Cleanup, - Gstreamer_transform_EndOfStream, - Gstreamer_transform_BeginFlush, - Gstreamer_transform_EndFlush, - Gstreamer_transform_NewSegment, - Gstreamer_transform_QOS + .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize, + .pfnStartStreaming = Gstreamer_transform_ProcessBegin, + .pfnReceive = Gstreamer_transform_ProcessData, + .pfnStopStreaming = Gstreamer_transform_ProcessEnd, + .pfnCheckInputType = Gstreamer_Mp3_QueryConnect, + .transform_connect_sink = mp3_decoder_connect_sink, + .pfnBreakConnect = Gstreamer_transform_Cleanup, + .pfnEndOfStream = Gstreamer_transform_EndOfStream, + .pfnBeginFlush = Gstreamer_transform_BeginFlush, + .pfnEndFlush = Gstreamer_transform_EndFlush, + .pfnNewSegment = Gstreamer_transform_NewSegment, + .pfnNotify = Gstreamer_transform_QOS, }; IUnknown * CALLBACK Gstreamer_Mp3_create(IUnknown *punkouter, HRESULT *phr) @@ -664,13 +652,7 @@ static HRESULT WINAPI Gstreamer_YUV_QueryConnect(TransformFilter *iface, const A } } -static HRESULT WINAPI Gstreamer_YUV_ConnectInput(TransformFilter *tf, PIN_DIRECTION dir, IPin *pin) -{ - TRACE("%p 0x%x %p\n", tf, dir, pin); - return S_OK; -}

-static HRESULT WINAPI Gstreamer_YUV2RGB_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE *amt) +static HRESULT yuv_to_rgb_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt) { GstTfImpl This = (GstTfImpl)tf; GstCaps *capsin, *capsout; @@ -679,13 +661,8 @@ static HRESULT WINAPI Gstreamer_YUV2RGB_SetMediaType(TransformFilter *tf, PIN_DI int avgtime; LONG width, height; - TRACE("%p 0x%x %p\n", This, dir, amt);

 mark_wine_thread();

@@ -738,19 +715,18 @@ static HRESULT WINAPI Gstreamer_YUV2RGB_SetMediaType(TransformFilter *tf, PIN_DI } static const TransformFilterFuncTable Gstreamer_YUV2RGB_vtbl = { - Gstreamer_transform_DecideBufferSize, - Gstreamer_transform_ProcessBegin, - Gstreamer_transform_ProcessData, - Gstreamer_transform_ProcessEnd, - Gstreamer_YUV_QueryConnect, - Gstreamer_YUV2RGB_SetMediaType, - Gstreamer_YUV_ConnectInput, - Gstreamer_transform_Cleanup, - Gstreamer_transform_EndOfStream, - Gstreamer_transform_BeginFlush, - Gstreamer_transform_EndFlush, - Gstreamer_transform_NewSegment, - Gstreamer_transform_QOS + .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize, + .pfnStartStreaming = Gstreamer_transform_ProcessBegin, + .pfnReceive = Gstreamer_transform_ProcessData, + .pfnStopStreaming = Gstreamer_transform_ProcessEnd, + .pfnCheckInputType = Gstreamer_YUV_QueryConnect, + .transform_connect_sink = yuv_to_rgb_connect_sink, + .pfnBreakConnect = Gstreamer_transform_Cleanup, + .pfnEndOfStream = Gstreamer_transform_EndOfStream, + .pfnBeginFlush = Gstreamer_transform_BeginFlush, + .pfnEndFlush = Gstreamer_transform_EndFlush, + .pfnNewSegment = Gstreamer_transform_NewSegment, + .pfnNotify = Gstreamer_transform_QOS, }; IUnknown * CALLBACK Gstreamer_YUV2RGB_create(IUnknown *punkouter, HRESULT *phr) @@ -772,7 +748,7 @@ IUnknown * CALLBACK Gstreamer_YUV2RGB_create(IUnknown *punkouter, HRESULT *phr) return obj; } -static HRESULT WINAPI Gstreamer_YUV2ARGB_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE *amt) +static HRESULT yuv_to_argb_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt) { GstTfImpl This = (GstTfImpl)tf; GstCaps *capsin, *capsout; @@ -781,13 +757,8 @@ static HRESULT WINAPI Gstreamer_YUV2ARGB_SetMediaType(TransformFilter *tf, PIN_D int avgtime; LONG width, height; - TRACE("%p 0x%x %p\n", This, dir, amt);

 mark_wine_thread();

@@ -840,19 +811,18 @@ static HRESULT WINAPI Gstreamer_YUV2ARGB_SetMediaType(TransformFilter *tf, PIN_D } static const TransformFilterFuncTable Gstreamer_YUV2ARGB_vtbl = { - Gstreamer_transform_DecideBufferSize, - Gstreamer_transform_ProcessBegin, - Gstreamer_transform_ProcessData, - Gstreamer_transform_ProcessEnd, - Gstreamer_YUV_QueryConnect, - Gstreamer_YUV2ARGB_SetMediaType, - Gstreamer_YUV_ConnectInput, - Gstreamer_transform_Cleanup, - Gstreamer_transform_EndOfStream, - Gstreamer_transform_BeginFlush, - Gstreamer_transform_EndFlush, - Gstreamer_transform_NewSegment, - Gstreamer_transform_QOS + .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize, + .pfnStartStreaming = Gstreamer_transform_ProcessBegin, + .pfnReceive = Gstreamer_transform_ProcessData, + .pfnStopStreaming = Gstreamer_transform_ProcessEnd, + .pfnCheckInputType = Gstreamer_YUV_QueryConnect, + .transform_connect_sink = yuv_to_argb_connect_sink, + .pfnBreakConnect = Gstreamer_transform_Cleanup, + .pfnEndOfStream = Gstreamer_transform_EndOfStream, + .pfnBeginFlush = Gstreamer_transform_BeginFlush, + .pfnEndFlush = Gstreamer_transform_EndFlush, + .pfnNewSegment = Gstreamer_transform_NewSegment, + .pfnNotify = Gstreamer_transform_QOS, }; IUnknown * CALLBACK Gstreamer_YUV2ARGB_create(IUnknown *punkouter, HRESULT *phr) @@ -886,13 +856,7 @@ static HRESULT WINAPI Gstreamer_AudioConvert_QueryConnect(TransformFilter *iface return S_OK; } -static HRESULT WINAPI Gstreamer_AudioConvert_ConnectInput(TransformFilter *tf, PIN_DIRECTION dir, IPin *pin) -{ - TRACE("%p 0x%x %p\n", tf, dir, pin); - return S_OK; -}

-static HRESULT WINAPI Gstreamer_AudioConvert_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE *amt) +static HRESULT audio_converter_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE *amt) { GstTfImpl This = (GstTfImpl)tf; GstCaps *capsin, *capsout; @@ -905,13 +869,8 @@ static HRESULT WINAPI Gstreamer_AudioConvert_SetMediaType(TransformFilter *tf, P BOOL inisfloat = FALSE; int indepth; - TRACE("%p 0x%x %p\n", This, dir, amt);

 mark_wine_thread();

@@ -972,19 +931,18 @@ static HRESULT WINAPI Gstreamer_AudioConvert_SetMediaType(TransformFilter *tf, P } static const TransformFilterFuncTable Gstreamer_AudioConvert_vtbl = { - Gstreamer_transform_DecideBufferSize, - Gstreamer_transform_ProcessBegin, - Gstreamer_transform_ProcessData, - Gstreamer_transform_ProcessEnd, - Gstreamer_AudioConvert_QueryConnect, - Gstreamer_AudioConvert_SetMediaType, - Gstreamer_AudioConvert_ConnectInput, - Gstreamer_transform_Cleanup, - Gstreamer_transform_EndOfStream, - Gstreamer_transform_BeginFlush, - Gstreamer_transform_EndFlush, - Gstreamer_transform_NewSegment, - Gstreamer_transform_QOS + .pfnDecideBufferSize = Gstreamer_transform_DecideBufferSize, + .pfnStartStreaming = Gstreamer_transform_ProcessBegin, + .pfnReceive = Gstreamer_transform_ProcessData, + .pfnStopStreaming = Gstreamer_transform_ProcessEnd, + .pfnCheckInputType = Gstreamer_AudioConvert_QueryConnect, + .transform_connect_sink = audio_converter_connect_sink, + .pfnBreakConnect = Gstreamer_transform_Cleanup, + .pfnEndOfStream = Gstreamer_transform_EndOfStream, + .pfnBeginFlush = Gstreamer_transform_BeginFlush, + .pfnEndFlush = Gstreamer_transform_EndFlush, + .pfnNewSegment = Gstreamer_transform_NewSegment, + .pfnNotify = Gstreamer_transform_QOS, }; IUnknown * CALLBACK Gstreamer_AudioConvert_create(IUnknown *punkouter, HRESULT phr) diff --git a/dlls/wineqtdecoder/qtvdecoder.c b/dlls/wineqtdecoder/qtvdecoder.c index 3da0738aec..4be654e5a1 100644 --- a/dlls/wineqtdecoder/qtvdecoder.c +++ b/dlls/wineqtdecoder/qtvdecoder.c @@ -336,7 +336,7 @@ static HRESULT WINAPI QTVDecoder_StopStreaming(TransformFilter pTransformFilter return S_OK; } -static HRESULT WINAPI QTVDecoder_SetMediaType(TransformFilter *tf, PIN_DIRECTION dir, const AM_MEDIA_TYPE * pmt) +static HRESULT video_decoder_connect_sink(TransformFilter *tf, const AM_MEDIA_TYPE pmt) { QTVDecoderImpl This = impl_from_TransformFilter(tf); HRESULT hr = VFW_E_TYPE_NOT_ACCEPTED; @@ -344,11 +344,6 @@ static HRESULT WINAPI QTVDecoder_SetMediaType(TransformFilter *tf, PIN_DIRECTION AM_MEDIA_TYPE *outpmt = &This->tf.pmt; CFNumberRef n = NULL; - TRACE("(%p)->(%p)\n", This, pmt);

@@ -502,18 +497,12 @@ static HRESULT WINAPI QTVDecoder_DecideBufferSize(TransformFilter *tf, IMemAlloc } static const TransformFilterFuncTable QTVDecoder_FuncsTable = { - QTVDecoder_DecideBufferSize, - QTVDecoder_StartStreaming, - QTVDecoder_Receive, - QTVDecoder_StopStreaming, - NULL, - QTVDecoder_SetMediaType, - NULL, - QTVDecoder_BreakConnect, - NULL, - NULL, - NULL, - NULL + .pfnDecideBufferSize = QTVDecoder_DecideBufferSize, + .pfnStartStreaming = QTVDecoder_StartStreaming, + .pfnReceive = QTVDecoder_Receive, + .pfnStopStreaming = QTVDecoder_StopStreaming, + .transform_connect_sink = video_decoder_connect_sink, + .pfnBreakConnect = QTVDecoder_BreakConnect, }; IUnknown * CALLBACK QTVDecoder_create(IUnknown outer, HRESULT phr) diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index c3699f1925..7e3b38b49d 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -197,9 +197,7 @@ typedef HRESULT (WINAPI *TransformFilter_DecideBufferSize) (TransformFilter *ifa typedef HRESULT (WINAPI *TransformFilter_StartStreaming) (TransformFilter *iface); typedef HRESULT (WINAPI *TransformFilter_StopStreaming) (TransformFilter iface); typedef HRESULT (WINAPI TransformFilter_Receive) (TransformFilter iface, IMediaSample pIn); -typedef HRESULT (WINAPI *TransformFilter_CompleteConnect) (TransformFilter *iface, PIN_DIRECTION dir, IPin *pPin); typedef HRESULT (WINAPI *TransformFilter_BreakConnect) (TransformFilter *iface, PIN_DIRECTION dir); -typedef HRESULT (WINAPI *TransformFilter_SetMediaType) (TransformFilter *iface, PIN_DIRECTION dir, const AM_MEDIA_TYPE *pMediaType); typedef HRESULT (WINAPI *TransformFilter_CheckInputType) (TransformFilter *iface, const AM_MEDIA_TYPE *pMediaType); typedef HRESULT (WINAPI *TransformFilter_EndOfStream) (TransformFilter *iface); typedef HRESULT (WINAPI *TransformFilter_BeginFlush) (TransformFilter *iface); @@ -216,8 +214,7 @@ typedef struct TransformFilterFuncTable { TransformFilter_Receive pfnReceive; TransformFilter_StopStreaming pfnStopStreaming; TransformFilter_CheckInputType pfnCheckInputType; - TransformFilter_SetMediaType pfnSetMediaType; - TransformFilter_CompleteConnect pfnCompleteConnect; + HRESULT (*transform_connect_sink)(TransformFilter *filter, const AM_MEDIA_TYPE *mt); TransformFilter_BreakConnect pfnBreakConnect; TransformFilter_EndOfStream pfnEndOfStream; TransformFilter_BeginFlush pfnBeginFlush;

2.24.0



More information about the wine-devel mailing list