Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/dsoundrender.c | 13 +++------- dlls/quartz/vmr9.c | 53 +++++++++++++++++++------------------- dlls/strmbase/renderer.c | 4 +-- include/wine/strmbase.h | 3 +-- 4 files changed, 33 insertions(+), 40 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index ca1e60de61d..b21ba40cb51 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -397,18 +397,13 @@ static void dsound_render_start_stream(struct strmbase_renderer *iface) } }
-static HRESULT WINAPI DSoundRender_CompleteConnect(struct strmbase_renderer *iface, IPin *pReceivePin) +static HRESULT dsound_render_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt) { DSoundRenderImpl *This = impl_from_strmbase_renderer(iface); - const AM_MEDIA_TYPE *pmt = &This->renderer.sink.pin.mt; + const WAVEFORMATEX *format = (WAVEFORMATEX *)mt->pbFormat; HRESULT hr = S_OK; - WAVEFORMATEX *format; DSBUFFERDESC buf_desc;
- TRACE("(%p)->(%p)\n", This, pReceivePin); - - format = (WAVEFORMATEX*)pmt->pbFormat; - This->buf_size = format->nAvgBytesPerSec;
memset(&buf_desc,0,sizeof(DSBUFFERDESC)); @@ -417,7 +412,7 @@ static HRESULT WINAPI DSoundRender_CompleteConnect(struct strmbase_renderer *ifa DSBCAPS_CTRLFREQUENCY | DSBCAPS_GLOBALFOCUS | DSBCAPS_GETCURRENTPOSITION2; buf_desc.dwBufferBytes = This->buf_size; - buf_desc.lpwfxFormat = format; + buf_desc.lpwfxFormat = (WAVEFORMATEX *)format; hr = IDirectSound8_CreateSoundBuffer(This->dsound, &buf_desc, &This->dsbuffer, NULL); This->writepos = This->buf_size; if (FAILED(hr)) @@ -523,7 +518,7 @@ static const struct strmbase_renderer_ops renderer_ops = .renderer_stop_stream = dsound_render_stop_stream, .pfnShouldDrawSampleNow = DSoundRender_ShouldDrawSampleNow, .pfnPrepareReceive = DSoundRender_PrepareReceive, - .pfnCompleteConnect = DSoundRender_CompleteConnect, + .renderer_connect = dsound_render_connect, .pfnBreakConnect = DSoundRender_BreakConnect, .pfnEndOfStream = DSoundRender_EndOfStream, .pfnEndFlush = DSoundRender_EndFlush, diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index 60c19e00191..0177f7e36fa 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -338,26 +338,8 @@ static HRESULT WINAPI VMR9_CheckMediaType(struct strmbase_renderer *iface, const if (!IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) || !pmt->pbFormat) return S_FALSE;
- /* Ignore subtype, test for bicompression instead */ - if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo)) - { - VIDEOINFOHEADER *format = (VIDEOINFOHEADER *)pmt->pbFormat; - - This->bmiheader = format->bmiHeader; - This->VideoWidth = format->bmiHeader.biWidth; - This->VideoHeight = format->bmiHeader.biHeight; - SetRect(&This->source_rect, 0, 0, This->VideoWidth, This->VideoHeight); - } - else if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo2)) - { - VIDEOINFOHEADER2 *format = (VIDEOINFOHEADER2 *)pmt->pbFormat; - - This->bmiheader = format->bmiHeader; - This->VideoWidth = format->bmiHeader.biWidth; - This->VideoHeight = format->bmiHeader.biHeight; - SetRect(&This->source_rect, 0, 0, This->VideoWidth, This->VideoHeight); - } - else + if (!IsEqualGUID(&pmt->formattype, &FORMAT_VideoInfo) + && !IsEqualGUID(&pmt->formattype, &FORMAT_VideoInfo2)) { ERR("Format type %s not supported\n", debugstr_guid(&pmt->formattype)); return S_FALSE; @@ -461,16 +443,33 @@ static HRESULT WINAPI VMR9_ShouldDrawSampleNow(struct strmbase_renderer *iface, return S_FALSE; }
-static HRESULT WINAPI VMR9_CompleteConnect(struct strmbase_renderer *This, IPin *pReceivePin) +static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt) { - struct quartz_vmr *pVMR9 = impl_from_IBaseFilter(&This->filter.IBaseFilter_iface); + struct quartz_vmr *filter = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface); HRESULT hr;
- TRACE("(%p)\n", This); + if (IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)) + { + VIDEOINFOHEADER *format = (VIDEOINFOHEADER *)mt->pbFormat; + + filter->bmiheader = format->bmiHeader; + filter->VideoWidth = format->bmiHeader.biWidth; + filter->VideoHeight = format->bmiHeader.biHeight; + SetRect(&filter->source_rect, 0, 0, filter->VideoWidth, filter->VideoHeight); + } + else if (IsEqualIID(&mt->formattype, &FORMAT_VideoInfo2)) + { + VIDEOINFOHEADER2 *format = (VIDEOINFOHEADER2 *)mt->pbFormat; + + filter->bmiheader = format->bmiHeader; + filter->VideoWidth = format->bmiHeader.biWidth; + filter->VideoHeight = format->bmiHeader.biHeight; + SetRect(&filter->source_rect, 0, 0, filter->VideoWidth, filter->VideoHeight); + }
- if (pVMR9->mode || - SUCCEEDED(hr = IVMRFilterConfig9_SetRenderingMode(&pVMR9->IVMRFilterConfig9_iface, VMR9Mode_Windowed))) - hr = VMR9_maybe_init(pVMR9, FALSE); + if (filter->mode + || SUCCEEDED(hr = IVMRFilterConfig9_SetRenderingMode(&filter->IVMRFilterConfig9_iface, VMR9Mode_Windowed))) + hr = VMR9_maybe_init(filter, FALSE);
return hr; } @@ -576,7 +575,7 @@ static const struct strmbase_renderer_ops renderer_ops = .renderer_start_stream = vmr_start_stream, .renderer_stop_stream = vmr_stop_stream, .pfnShouldDrawSampleNow = VMR9_ShouldDrawSampleNow, - .pfnCompleteConnect = VMR9_CompleteConnect, + .renderer_connect = vmr_connect, .pfnBreakConnect = VMR9_BreakConnect, .renderer_destroy = vmr_destroy, .renderer_query_interface = vmr_query_interface, diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index d592ab034e6..cedcd9a62a0 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -52,8 +52,8 @@ static HRESULT WINAPI BaseRenderer_InputPin_ReceiveConnection(IPin *iface, IPin hr = BaseInputPinImpl_ReceiveConnection(iface, peer, mt); if (SUCCEEDED(hr)) { - if (filter->pFuncsTable->pfnCompleteConnect) - hr = filter->pFuncsTable->pfnCompleteConnect(filter, peer); + if (filter->pFuncsTable->renderer_connect) + hr = filter->pFuncsTable->renderer_connect(filter, mt); } LeaveCriticalSection(&filter->filter.csFilter);
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 7e3b38b49d5..461214cf082 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -523,7 +523,6 @@ typedef HRESULT (WINAPI *BaseRenderer_EndOfStream)(struct strmbase_renderer *ifa typedef HRESULT (WINAPI *BaseRenderer_BeginFlush) (struct strmbase_renderer *iface); typedef HRESULT (WINAPI *BaseRenderer_EndFlush) (struct strmbase_renderer *iface); typedef HRESULT (WINAPI *BaseRenderer_BreakConnect) (struct strmbase_renderer *iface); -typedef HRESULT (WINAPI *BaseRenderer_CompleteConnect) (struct strmbase_renderer *iface, IPin *peer);
struct strmbase_renderer_ops { @@ -534,7 +533,7 @@ struct strmbase_renderer_ops void (*renderer_stop_stream)(struct strmbase_renderer *iface); BaseRenderer_ShouldDrawSampleNow pfnShouldDrawSampleNow; BaseRenderer_PrepareReceive pfnPrepareReceive; - BaseRenderer_CompleteConnect pfnCompleteConnect; + HRESULT (*renderer_connect)(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt); BaseRenderer_BreakConnect pfnBreakConnect; BaseRenderer_EndOfStream pfnEndOfStream; BaseRenderer_EndFlush pfnEndFlush;