[PATCH v2 2/5] strmbase: Pass an AM_MEDIA_TYPE pointer to CompleteConnect().
Zebediah Figura
z.figura12 at gmail.com
Mon Dec 9 22:07:12 CST 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/dsoundrender.c | 13 +++-----
dlls/quartz/vmr9.c | 65 +++++++++++++++++++-------------------
dlls/strmbase/renderer.c | 4 +--
include/wine/strmbase.h | 3 +-
4 files changed, 39 insertions(+), 46 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..a9b90b322dd 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -331,38 +331,20 @@ static HRESULT WINAPI VMR9_DoRenderSample(struct strmbase_renderer *iface, IMedi
return hr;
}
-static HRESULT WINAPI VMR9_CheckMediaType(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *pmt)
+static HRESULT WINAPI VMR9_CheckMediaType(struct strmbase_renderer *iface, const AM_MEDIA_TYPE *mt)
{
- struct quartz_vmr *This = impl_from_IBaseFilter(&iface->filter.IBaseFilter_iface);
+ const VIDEOINFOHEADER *vih;
- if (!IsEqualIID(&pmt->majortype, &MEDIATYPE_Video) || !pmt->pbFormat)
+ if (!IsEqualIID(&mt->majortype, &MEDIATYPE_Video) || !mt->pbFormat)
return S_FALSE;
- /* Ignore subtype, test for bicompression instead */
- if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo))
- {
- VIDEOINFOHEADER *format = (VIDEOINFOHEADER *)pmt->pbFormat;
+ if (!IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo)
+ && !IsEqualGUID(&mt->formattype, &FORMAT_VideoInfo2))
+ return S_FALSE;
- 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;
+ vih = (VIDEOINFOHEADER *)mt->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
- {
- ERR("Format type %s not supported\n", debugstr_guid(&pmt->formattype));
- return S_FALSE;
- }
- if (This->bmiheader.biCompression != BI_RGB)
+ if (vih->bmiHeader.biCompression != BI_RGB)
return S_FALSE;
return S_OK;
}
@@ -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;
--
2.24.0
More information about the wine-devel
mailing list