[PATCH 4/5] quartz: Move the source and destination rectangles to the BaseControlVideo structure.
Zebediah Figura
z.figura12 at gmail.com
Wed May 6 19:28:51 CDT 2020
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/quartz_private.h | 10 +-
dlls/quartz/video.c | 216 ++++++++++++-----------------------
dlls/quartz/videorenderer.c | 68 +++--------
dlls/quartz/vmr9.c | 93 +++++----------
4 files changed, 111 insertions(+), 276 deletions(-)
diff --git a/dlls/quartz/quartz_private.h b/dlls/quartz/quartz_private.h
index 7f2372ce33b..2bbebd48b3a 100644
--- a/dlls/quartz/quartz_private.h
+++ b/dlls/quartz/quartz_private.h
@@ -166,29 +166,23 @@ typedef struct tagBaseControlVideo
{
IBasicVideo IBasicVideo_iface;
+ RECT src, dst;
+
struct strmbase_filter *pFilter;
struct strmbase_pin *pPin;
const struct BaseControlVideoFuncTable *pFuncsTable;
} BaseControlVideo;
-typedef HRESULT (WINAPI *BaseControlVideo_GetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
typedef HRESULT (WINAPI *BaseControlVideo_GetStaticImage)(BaseControlVideo* This, LONG *pBufferSize, LONG *pDIBImage);
-typedef HRESULT (WINAPI *BaseControlVideo_GetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultSourceRect)(BaseControlVideo* This);
typedef HRESULT (WINAPI *BaseControlVideo_SetDefaultTargetRect)(BaseControlVideo* This);
-typedef HRESULT (WINAPI *BaseControlVideo_SetSourceRect)(BaseControlVideo* This, RECT *pSourceRect);
-typedef HRESULT (WINAPI *BaseControlVideo_SetTargetRect)(BaseControlVideo* This, RECT *pTargetRect);
typedef struct BaseControlVideoFuncTable
{
- BaseControlVideo_GetSourceRect pfnGetSourceRect;
BaseControlVideo_GetStaticImage pfnGetStaticImage;
- BaseControlVideo_GetTargetRect pfnGetTargetRect;
BaseControlVideo_SetDefaultSourceRect pfnSetDefaultSourceRect;
BaseControlVideo_SetDefaultTargetRect pfnSetDefaultTargetRect;
- BaseControlVideo_SetSourceRect pfnSetSourceRect;
- BaseControlVideo_SetTargetRect pfnSetTargetRect;
} BaseControlVideoFuncTable;
void basic_video_init(BaseControlVideo *video, struct strmbase_filter *filter,
diff --git a/dlls/quartz/video.c b/dlls/quartz/video.c
index 2d002d8de43..ace83664898 100644
--- a/dlls/quartz/video.c
+++ b/dlls/quartz/video.c
@@ -207,271 +207,197 @@ static HRESULT WINAPI basic_video_get_VideoHeight(IBasicVideo *iface, LONG *pVid
return S_OK;
}
-static HRESULT WINAPI basic_video_put_SourceLeft(IBasicVideo *iface, LONG SourceLeft)
+static HRESULT WINAPI basic_video_put_SourceLeft(IBasicVideo *iface, LONG left)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, SourceLeft);
- hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- if (SUCCEEDED(hr))
- {
- SourceRect.right = (SourceRect.right - SourceRect.left) + SourceLeft;
- SourceRect.left = SourceLeft;
- hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
+ TRACE("iface %p, left %d.\n", iface, left);
- return hr;
+ if (left < 0 || This->src.right + left - This->src.left > get_bitmap_header(This)->biWidth)
+ return E_INVALIDARG;
+
+ OffsetRect(&This->src, left - This->src.left, 0);
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_SourceLeft(IBasicVideo *iface, LONG *pSourceLeft)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceLeft);
if (!pSourceLeft)
return E_POINTER;
- This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- *pSourceLeft = SourceRect.left;
+ *pSourceLeft = This->src.left;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_SourceWidth(IBasicVideo *iface, LONG SourceWidth)
+static HRESULT WINAPI basic_video_put_SourceWidth(IBasicVideo *iface, LONG width)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, SourceWidth);
- hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- if (SUCCEEDED(hr))
- {
- SourceRect.right = SourceRect.left + SourceWidth;
- hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
+ TRACE("iface %p, width %d.\n", iface, width);
- return hr;
+ if (width <= 0 || This->src.left + width > get_bitmap_header(This)->biWidth)
+ return E_INVALIDARG;
+
+ This->src.right = This->src.left + width;
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_SourceWidth(IBasicVideo *iface, LONG *pSourceWidth)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceWidth);
if (!pSourceWidth)
return E_POINTER;
- This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- *pSourceWidth = SourceRect.right - SourceRect.left;
+ *pSourceWidth = This->src.right - This->src.left;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_SourceTop(IBasicVideo *iface, LONG SourceTop)
+static HRESULT WINAPI basic_video_put_SourceTop(IBasicVideo *iface, LONG top)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, SourceTop);
- hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- if (SUCCEEDED(hr))
- {
- SourceRect.bottom = (SourceRect.bottom - SourceRect.top) + SourceTop;
- SourceRect.top = SourceTop;
- hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
+ TRACE("iface %p, top %d.\n", iface, top);
- return hr;
+ if (top < 0 || This->src.bottom + top - This->src.top > get_bitmap_header(This)->biHeight)
+ return E_INVALIDARG;
+
+ OffsetRect(&This->src, 0, top - This->src.top);
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_SourceTop(IBasicVideo *iface, LONG *pSourceTop)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceTop);
if (!pSourceTop)
return E_POINTER;
- This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- *pSourceTop = SourceRect.top;
+ *pSourceTop = This->src.top;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_SourceHeight(IBasicVideo *iface, LONG SourceHeight)
+static HRESULT WINAPI basic_video_put_SourceHeight(IBasicVideo *iface, LONG height)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, SourceHeight);
- hr = This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- if (SUCCEEDED(hr))
- {
- SourceRect.bottom = SourceRect.top + SourceHeight;
- hr = BaseControlVideoImpl_CheckSourceRect(This, &SourceRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
+ TRACE("iface %p, height %d.\n", iface, height);
- return hr;
+ if (height <= 0 || This->src.top + height > get_bitmap_header(This)->biHeight)
+ return E_INVALIDARG;
+
+ This->src.bottom = This->src.top + height;
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_SourceHeight(IBasicVideo *iface, LONG *pSourceHeight)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pSourceHeight);
if (!pSourceHeight)
return E_POINTER;
- This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- *pSourceHeight = SourceRect.bottom - SourceRect.top;
+ *pSourceHeight = This->src.bottom - This->src.top;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_DestinationLeft(IBasicVideo *iface, LONG DestinationLeft)
+static HRESULT WINAPI basic_video_put_DestinationLeft(IBasicVideo *iface, LONG left)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, DestinationLeft);
- hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- if (SUCCEEDED(hr))
- {
- DestRect.right = (DestRect.right - DestRect.left) + DestinationLeft;
- DestRect.left = DestinationLeft;
- hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
+ TRACE("iface %p, left %d.\n", iface, left);
- return hr;
+ OffsetRect(&This->dst, left - This->dst.left, 0);
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_DestinationLeft(IBasicVideo *iface, LONG *pDestinationLeft)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationLeft);
if (!pDestinationLeft)
return E_POINTER;
- This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- *pDestinationLeft = DestRect.left;
+ *pDestinationLeft = This->dst.left;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_DestinationWidth(IBasicVideo *iface, LONG DestinationWidth)
+static HRESULT WINAPI basic_video_put_DestinationWidth(IBasicVideo *iface, LONG width)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, DestinationWidth);
- hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- if (SUCCEEDED(hr))
- {
- DestRect.right = DestRect.left + DestinationWidth;
- hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
+ TRACE("iface %p, width %d.\n", iface, width);
- return hr;
+ if (width <= 0)
+ return E_INVALIDARG;
+
+ This->dst.right = This->dst.left + width;
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_DestinationWidth(IBasicVideo *iface, LONG *pDestinationWidth)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationWidth);
if (!pDestinationWidth)
return E_POINTER;
- This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- *pDestinationWidth = DestRect.right - DestRect.left;
+ *pDestinationWidth = This->dst.right - This->dst.left;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_DestinationTop(IBasicVideo *iface, LONG DestinationTop)
+static HRESULT WINAPI basic_video_put_DestinationTop(IBasicVideo *iface, LONG top)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, DestinationTop);
- hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- if (SUCCEEDED(hr))
- {
- DestRect.bottom = (DestRect.bottom - DestRect.top) + DestinationTop;
- DestRect.top = DestinationTop;
- hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
+ TRACE("iface %p, top %d.\n", iface, top);
- return hr;
+ OffsetRect(&This->dst, 0, top - This->dst.top);
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_DestinationTop(IBasicVideo *iface, LONG *pDestinationTop)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationTop);
if (!pDestinationTop)
return E_POINTER;
- This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- *pDestinationTop = DestRect.top;
+ *pDestinationTop = This->dst.top;
return S_OK;
}
-static HRESULT WINAPI basic_video_put_DestinationHeight(IBasicVideo *iface, LONG DestinationHeight)
+static HRESULT WINAPI basic_video_put_DestinationHeight(IBasicVideo *iface, LONG height)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
- HRESULT hr;
- TRACE("(%p/%p)->(%d)\n", This, iface, DestinationHeight);
- hr = This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- if (SUCCEEDED(hr))
- {
- DestRect.bottom = DestRect.top + DestinationHeight;
- hr = BaseControlVideoImpl_CheckTargetRect(This, &DestRect);
- }
- if (SUCCEEDED(hr))
- hr = This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
+ TRACE("iface %p, height %d.\n", iface, height);
- return hr;
+ if (height <= 0)
+ return E_INVALIDARG;
+
+ This->dst.bottom = This->dst.top + height;
+ return S_OK;
}
static HRESULT WINAPI basic_video_get_DestinationHeight(IBasicVideo *iface, LONG *pDestinationHeight)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p)\n", This, iface, pDestinationHeight);
if (!pDestinationHeight)
return E_POINTER;
- This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- *pDestinationHeight = DestRect.bottom - DestRect.top;
+ *pDestinationHeight = This->dst.bottom - This->dst.top;
return S_OK;
}
@@ -486,23 +412,22 @@ static HRESULT WINAPI basic_video_SetSourcePosition(IBasicVideo *iface, LONG Lef
SetRect(&SourceRect, Left, Top, Left + Width, Top + Height);
if (FAILED(BaseControlVideoImpl_CheckSourceRect(This, &SourceRect)))
return E_INVALIDARG;
- return This->pFuncsTable->pfnSetSourceRect(This, &SourceRect);
+ This->src = SourceRect;
+ return S_OK;
}
static HRESULT WINAPI basic_video_GetSourcePosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
{
- RECT SourceRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
if (!pLeft || !pTop || !pWidth || !pHeight)
return E_POINTER;
- This->pFuncsTable->pfnGetSourceRect(This, &SourceRect);
- *pLeft = SourceRect.left;
- *pTop = SourceRect.top;
- *pWidth = SourceRect.right - SourceRect.left;
- *pHeight = SourceRect.bottom - SourceRect.top;
+ *pLeft = This->src.left;
+ *pTop = This->src.top;
+ *pWidth = This->src.right - This->src.left;
+ *pHeight = This->src.bottom - This->src.top;
return S_OK;
}
@@ -525,23 +450,22 @@ static HRESULT WINAPI basic_video_SetDestinationPosition(IBasicVideo *iface, LON
SetRect(&DestRect, Left, Top, Left + Width, Top + Height);
if (FAILED(BaseControlVideoImpl_CheckTargetRect(This, &DestRect)))
return E_INVALIDARG;
- return This->pFuncsTable->pfnSetTargetRect(This, &DestRect);
+ This->dst = DestRect;
+ return S_OK;
}
static HRESULT WINAPI basic_video_GetDestinationPosition(IBasicVideo *iface, LONG *pLeft, LONG *pTop, LONG *pWidth, LONG *pHeight)
{
- RECT DestRect;
BaseControlVideo *This = impl_from_IBasicVideo(iface);
TRACE("(%p/%p)->(%p, %p, %p, %p)\n", This, iface, pLeft, pTop, pWidth, pHeight);
if (!pLeft || !pTop || !pWidth || !pHeight)
return E_POINTER;
- This->pFuncsTable->pfnGetTargetRect(This, &DestRect);
- *pLeft = DestRect.left;
- *pTop = DestRect.top;
- *pWidth = DestRect.right - DestRect.left;
- *pHeight = DestRect.bottom - DestRect.top;
+ *pLeft = This->dst.left;
+ *pTop = This->dst.top;
+ *pWidth = This->dst.right - This->dst.left;
+ *pHeight = This->dst.bottom - This->dst.top;
return S_OK;
}
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index 39d1586c772..9a79ad4581c 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -44,8 +44,6 @@ struct video_renderer
IOverlay IOverlay_iface;
- RECT SourceRect;
- RECT DestRect;
LONG VideoWidth;
LONG VideoHeight;
LONG FullScreenMode;
@@ -102,6 +100,7 @@ static HRESULT WINAPI VideoRenderer_ShouldDrawSampleNow(struct strmbase_renderer
static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *iface, IMediaSample *pSample)
{
struct video_renderer *filter = impl_from_strmbase_renderer(iface);
+ RECT src = filter->baseControlVideo.src, dst = filter->baseControlVideo.dst;
LPBYTE pbSrcStream = NULL;
HRESULT hr;
HDC dc;
@@ -116,13 +115,9 @@ static HRESULT WINAPI VideoRenderer_DoRenderSample(struct strmbase_renderer *ifa
}
dc = GetDC(filter->window.hwnd);
- StretchDIBits(dc, filter->DestRect.left, filter->DestRect.top,
- filter->DestRect.right - filter->DestRect.left,
- filter->DestRect.bottom - filter->DestRect.top,
- filter->SourceRect.left, filter->SourceRect.top,
- filter->SourceRect.right - filter->SourceRect.left,
- filter->SourceRect.bottom - filter->SourceRect.top,
- pbSrcStream, (BITMAPINFO *)get_bitmap_header(&filter->renderer.sink.pin.mt), DIB_RGB_COLORS, SRCCOPY);
+ StretchDIBits(dc, dst.left, dst.top, dst.right - dst.left, dst.bottom - dst.top,
+ src.left, src.top, src.right - src.left, src.bottom - src.top, pbSrcStream,
+ (BITMAPINFO *)get_bitmap_header(&filter->renderer.sink.pin.mt), DIB_RGB_COLORS, SRCCOPY);
ReleaseDC(filter->window.hwnd, dc);
if (filter->renderer.filter.state == State_Paused)
@@ -236,7 +231,7 @@ static HRESULT video_renderer_connect(struct strmbase_renderer *iface, const AM_
filter->VideoWidth = bitmap_header->biWidth;
filter->VideoHeight = abs(bitmap_header->biHeight);
SetRect(&rect, 0, 0, filter->VideoWidth, filter->VideoHeight);
- filter->SourceRect = filter->DestRect = rect;
+ filter->baseControlVideo.src = filter->baseControlVideo.dst = rect;
AdjustWindowRectEx(&rect, GetWindowLongW(window, GWL_STYLE), FALSE,
GetWindowLongW(window, GWL_EXSTYLE));
@@ -258,15 +253,10 @@ static RECT video_renderer_get_default_rect(struct video_window *iface)
static BOOL video_renderer_resize(struct video_window *iface, LONG Width, LONG Height)
{
- struct video_renderer *This = impl_from_video_window(iface);
+ struct video_renderer *filter = impl_from_video_window(iface);
TRACE("WM_SIZE %d %d\n", Width, Height);
- GetClientRect(iface->hwnd, &This->DestRect);
- TRACE("WM_SIZING: DestRect=(%d,%d),(%d,%d)\n",
- This->DestRect.left,
- This->DestRect.top,
- This->DestRect.right - This->DestRect.left,
- This->DestRect.bottom - This->DestRect.top);
+ GetClientRect(iface->hwnd, &filter->baseControlVideo.dst);
return TRUE;
}
@@ -291,13 +281,6 @@ static const struct video_window_ops window_ops =
.resize = video_renderer_resize,
};
-static HRESULT WINAPI VideoRenderer_GetSourceRect(BaseControlVideo* iface, RECT *pSourceRect)
-{
- struct video_renderer *This = impl_from_BaseControlVideo(iface);
- CopyRect(pSourceRect,&This->SourceRect);
- return S_OK;
-}
-
static HRESULT WINAPI VideoRenderer_GetStaticImage(BaseControlVideo *iface, LONG *size, LONG *image)
{
struct video_renderer *filter = impl_from_BaseControlVideo(iface);
@@ -345,18 +328,11 @@ static HRESULT WINAPI VideoRenderer_GetStaticImage(BaseControlVideo *iface, LONG
return S_OK;
}
-static HRESULT WINAPI VideoRenderer_GetTargetRect(BaseControlVideo* iface, RECT *pTargetRect)
-{
- struct video_renderer *This = impl_from_BaseControlVideo(iface);
- CopyRect(pTargetRect,&This->DestRect);
- return S_OK;
-}
-
static HRESULT WINAPI VideoRenderer_SetDefaultSourceRect(BaseControlVideo* iface)
{
struct video_renderer *This = impl_from_BaseControlVideo(iface);
- SetRect(&This->SourceRect, 0, 0, This->VideoWidth, This->VideoHeight);
+ SetRect(&This->baseControlVideo.src, 0, 0, This->VideoWidth, This->VideoHeight);
return S_OK;
}
@@ -369,33 +345,15 @@ static HRESULT WINAPI VideoRenderer_SetDefaultTargetRect(BaseControlVideo* iface
if (!GetClientRect(This->window.hwnd, &rect))
return E_FAIL;
- SetRect(&This->DestRect, 0, 0, rect.right, rect.bottom);
+ SetRect(&This->baseControlVideo.dst, 0, 0, rect.right, rect.bottom);
return S_OK;
}
-static HRESULT WINAPI VideoRenderer_SetSourceRect(BaseControlVideo* iface, RECT *pSourceRect)
-{
- struct video_renderer *This = impl_from_BaseControlVideo(iface);
- CopyRect(&This->SourceRect,pSourceRect);
- return S_OK;
-}
-
-static HRESULT WINAPI VideoRenderer_SetTargetRect(BaseControlVideo* iface, RECT *pTargetRect)
-{
- struct video_renderer *This = impl_from_BaseControlVideo(iface);
- CopyRect(&This->DestRect,pTargetRect);
- return S_OK;
-}
-
static const BaseControlVideoFuncTable renderer_BaseControlVideoFuncTable = {
- VideoRenderer_GetSourceRect,
VideoRenderer_GetStaticImage,
- VideoRenderer_GetTargetRect,
VideoRenderer_SetDefaultSourceRect,
VideoRenderer_SetDefaultTargetRect,
- VideoRenderer_SetSourceRect,
- VideoRenderer_SetTargetRect
};
static HRESULT WINAPI VideoWindow_get_FullScreenMode(IVideoWindow *iface,
@@ -428,16 +386,16 @@ static HRESULT WINAPI VideoWindow_put_FullScreenMode(IVideoWindow *iface, LONG f
SetWindowLongW(window, GWL_STYLE, WS_POPUP);
SetWindowPos(window, HWND_TOP, 0, 0,
GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW);
- GetWindowRect(window, &filter->DestRect);
+ GetWindowRect(window, &filter->baseControlVideo.dst);
}
else
{
ShowWindow(window, SW_HIDE);
SetParent(window, filter->window.hwndOwner);
SetWindowLongW(window, GWL_STYLE, filter->saved_style);
- GetClientRect(window, &filter->DestRect);
- SetWindowPos(window, 0, filter->DestRect.left, filter->DestRect.top,
- filter->DestRect.right, filter->DestRect.bottom, SWP_NOZORDER | SWP_SHOWWINDOW);
+ GetClientRect(window, &filter->baseControlVideo.dst);
+ SetWindowPos(window, 0, filter->baseControlVideo.dst.left, filter->baseControlVideo.dst.top,
+ filter->baseControlVideo.dst.right, filter->baseControlVideo.dst.bottom, SWP_NOZORDER | SWP_SHOWWINDOW);
}
filter->FullScreenMode = fullscreen;
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index c0d6799eec1..4e535629cce 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -104,8 +104,6 @@ struct quartz_vmr
/* for Windowless Mode */
HWND hWndClippingWindow;
- RECT source_rect;
- RECT target_rect;
LONG VideoWidth;
LONG VideoHeight;
@@ -229,9 +227,6 @@ static DWORD VMR9_SendSampleData(struct quartz_vmr *This, VMR9PresentationInfo *
width = bmiHeader->biWidth;
height = bmiHeader->biHeight;
- TRACE("Src Rect: %s\n", wine_dbgstr_rect(&This->source_rect));
- TRACE("Dst Rect: %s\n", wine_dbgstr_rect(&This->target_rect));
-
hr = IDirect3DSurface9_LockRect(info->lpSurf, &lock, NULL, D3DLOCK_DISCARD);
if (FAILED(hr))
{
@@ -420,8 +415,8 @@ static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE
if (filter->mode == VMR9Mode_Windowless && !filter->hWndClippingWindow)
return S_OK;
- info.dwWidth = filter->source_rect.right;
- info.dwHeight = filter->source_rect.bottom;
+ info.dwWidth = filter->baseControlVideo.src.right;
+ info.dwHeight = filter->baseControlVideo.src.bottom;
info.Pool = D3DPOOL_DEFAULT;
info.MinBuffers = 1;
info.szAspectRatio.cx = info.dwWidth;
@@ -517,7 +512,7 @@ static HRESULT vmr_connect(struct strmbase_renderer *iface, const AM_MEDIA_TYPE
filter->VideoWidth = bitmap_header->biWidth;
filter->VideoHeight = bitmap_header->biHeight;
SetRect(&rect, 0, 0, filter->VideoWidth, filter->VideoHeight);
- filter->source_rect = filter->target_rect = rect;
+ filter->baseControlVideo.src = filter->baseControlVideo.dst = rect;
AdjustWindowRectEx(&rect, GetWindowLongW(window, GWL_STYLE), FALSE,
GetWindowLongW(window, GWL_EXSTYLE));
@@ -679,12 +674,7 @@ static BOOL vmr_resize(struct video_window *This, LONG Width, LONG Height)
struct quartz_vmr *pVMR9 = impl_from_video_window(This);
TRACE("WM_SIZE %d %d\n", Width, Height);
- GetClientRect(This->hwnd, &pVMR9->target_rect);
- TRACE("WM_SIZING: DestRect=(%d,%d),(%d,%d)\n",
- pVMR9->target_rect.left,
- pVMR9->target_rect.top,
- pVMR9->target_rect.right - pVMR9->target_rect.left,
- pVMR9->target_rect.bottom - pVMR9->target_rect.top);
+ GetClientRect(This->hwnd, &pVMR9->baseControlVideo.dst);
return TRUE;
}
@@ -695,13 +685,6 @@ static const struct video_window_ops window_ops =
.resize = vmr_resize,
};
-static HRESULT WINAPI VMR9_GetSourceRect(BaseControlVideo* This, RECT *pSourceRect)
-{
- struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This);
- CopyRect(pSourceRect,&pVMR9->source_rect);
- return S_OK;
-}
-
static HRESULT WINAPI VMR9_GetStaticImage(BaseControlVideo *iface, LONG *size, LONG *image)
{
struct quartz_vmr *filter = impl_from_BaseControlVideo(iface);
@@ -765,18 +748,11 @@ out:
return hr;
}
-static HRESULT WINAPI VMR9_GetTargetRect(BaseControlVideo* This, RECT *pTargetRect)
-{
- struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This);
- CopyRect(pTargetRect,&pVMR9->target_rect);
- return S_OK;
-}
-
static HRESULT WINAPI VMR9_SetDefaultSourceRect(BaseControlVideo* This)
{
struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This);
- SetRect(&pVMR9->source_rect, 0, 0, pVMR9->VideoWidth, pVMR9->VideoHeight);
+ SetRect(&pVMR9->baseControlVideo.src, 0, 0, pVMR9->VideoWidth, pVMR9->VideoHeight);
return S_OK;
}
@@ -789,33 +765,15 @@ static HRESULT WINAPI VMR9_SetDefaultTargetRect(BaseControlVideo* This)
if (!GetClientRect(pVMR9->window.hwnd, &rect))
return E_FAIL;
- SetRect(&pVMR9->target_rect, 0, 0, rect.right, rect.bottom);
-
- return S_OK;
-}
+ SetRect(&pVMR9->baseControlVideo.dst, 0, 0, rect.right, rect.bottom);
-static HRESULT WINAPI VMR9_SetSourceRect(BaseControlVideo* This, RECT *pSourceRect)
-{
- struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This);
- CopyRect(&pVMR9->source_rect,pSourceRect);
- return S_OK;
-}
-
-static HRESULT WINAPI VMR9_SetTargetRect(BaseControlVideo* This, RECT *pTargetRect)
-{
- struct quartz_vmr* pVMR9 = impl_from_BaseControlVideo(This);
- CopyRect(&pVMR9->target_rect,pTargetRect);
return S_OK;
}
static const BaseControlVideoFuncTable renderer_BaseControlVideoFuncTable = {
- VMR9_GetSourceRect,
VMR9_GetStaticImage,
- VMR9_GetTargetRect,
VMR9_SetDefaultSourceRect,
VMR9_SetDefaultTargetRect,
- VMR9_SetSourceRect,
- VMR9_SetTargetRect
};
static const IVideoWindowVtbl IVideoWindow_VTable =
@@ -1552,10 +1510,10 @@ static HRESULT WINAPI VMR7WindowlessControl_SetVideoPosition(IVMRWindowlessContr
EnterCriticalSection(&This->renderer.filter.csFilter);
if (source)
- This->source_rect = *source;
+ This->baseControlVideo.src = *source;
if (dest)
{
- This->target_rect = *dest;
+ This->baseControlVideo.dst = *dest;
FIXME("Output rectangle: %s.\n", wine_dbgstr_rect(dest));
SetWindowPos(This->window.hwnd, NULL,
dest->left, dest->top, dest->right - dest->left, dest->bottom-dest->top,
@@ -1573,10 +1531,10 @@ static HRESULT WINAPI VMR7WindowlessControl_GetVideoPosition(IVMRWindowlessContr
struct quartz_vmr *This = impl_from_IVMRWindowlessControl(iface);
if (source)
- *source = This->source_rect;
+ *source = This->baseControlVideo.src;
if (dest)
- *dest = This->target_rect;
+ *dest = This->baseControlVideo.dst;
FIXME("(%p/%p)->(%p/%p) stub\n", iface, This, source, dest);
return S_OK;
@@ -1753,10 +1711,10 @@ static HRESULT WINAPI VMR9WindowlessControl_SetVideoPosition(IVMRWindowlessContr
EnterCriticalSection(&This->renderer.filter.csFilter);
if (source)
- This->source_rect = *source;
+ This->baseControlVideo.src = *source;
if (dest)
{
- This->target_rect = *dest;
+ This->baseControlVideo.dst = *dest;
FIXME("Output rectangle: %s.\n", wine_dbgstr_rect(dest));
SetWindowPos(This->window.hwnd, NULL,
dest->left, dest->top, dest->right - dest->left, dest->bottom - dest->top,
@@ -1773,10 +1731,10 @@ static HRESULT WINAPI VMR9WindowlessControl_GetVideoPosition(IVMRWindowlessContr
struct quartz_vmr *This = impl_from_IVMRWindowlessControl9(iface);
if (source)
- *source = This->source_rect;
+ *source = This->baseControlVideo.src;
if (dest)
- *dest = This->target_rect;
+ *dest = This->baseControlVideo.dst;
FIXME("(%p/%p)->(%p/%p) stub\n", iface, This, source, dest);
return S_OK;
@@ -2561,10 +2519,11 @@ static HRESULT VMR9_ImagePresenter_PresentOffscreenSurface(struct default_presen
}
/* Move rect to origin and flip it */
- SetRect(&target_rect, 0, This->pVMR9->target_rect.bottom - This->pVMR9->target_rect.top,
- This->pVMR9->target_rect.right - This->pVMR9->target_rect.left, 0);
+ SetRect(&target_rect, 0, This->pVMR9->baseControlVideo.dst.bottom - This->pVMR9->baseControlVideo.dst.top,
+ This->pVMR9->baseControlVideo.dst.right - This->pVMR9->baseControlVideo.dst.left, 0);
- hr = IDirect3DDevice9_StretchRect(This->d3d9_dev, surface, &This->pVMR9->source_rect, target, &target_rect, D3DTEXF_LINEAR);
+ hr = IDirect3DDevice9_StretchRect(This->d3d9_dev, surface,
+ &This->pVMR9->baseControlVideo.src, target, &target_rect, D3DTEXF_LINEAR);
if (FAILED(hr))
ERR("IDirect3DDevice9_StretchRect -- %08x\n", hr);
IDirect3DSurface9_Release(target);
@@ -2736,8 +2695,8 @@ static BOOL CreateRenderingWindow(struct default_presenter *This, VMR9Allocation
d3dpp.Windowed = TRUE;
d3dpp.hDeviceWindow = This->pVMR9->window.hwnd;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.BackBufferHeight = This->pVMR9->target_rect.bottom - This->pVMR9->target_rect.top;
- d3dpp.BackBufferWidth = This->pVMR9->target_rect.right - This->pVMR9->target_rect.left;
+ d3dpp.BackBufferHeight = This->pVMR9->baseControlVideo.dst.bottom - This->pVMR9->baseControlVideo.dst.top;
+ d3dpp.BackBufferWidth = This->pVMR9->baseControlVideo.dst.right - This->pVMR9->baseControlVideo.dst.left;
hr = IDirect3D9_CreateDevice(This->d3d9_ptr, d3d9_adapter, D3DDEVTYPE_HAL, NULL, D3DCREATE_MIXED_VERTEXPROCESSING, &d3dpp, &This->d3d9_dev);
if (FAILED(hr))
@@ -2872,24 +2831,24 @@ static HRESULT VMR9_SurfaceAllocator_UpdateDeviceReset(struct default_presenter
{
if (i % 2)
{
- t_vert[i].x = (float)This->pVMR9->target_rect.right - (float)This->pVMR9->target_rect.left - 0.5f;
- t_vert[i].u = (float)This->pVMR9->source_rect.right / (float)width;
+ t_vert[i].x = (float)This->pVMR9->baseControlVideo.dst.right - (float)This->pVMR9->baseControlVideo.dst.left - 0.5f;
+ t_vert[i].u = (float)This->pVMR9->baseControlVideo.src.right / (float)width;
}
else
{
t_vert[i].x = -0.5f;
- t_vert[i].u = (float)This->pVMR9->source_rect.left / (float)width;
+ t_vert[i].u = (float)This->pVMR9->baseControlVideo.src.left / (float)width;
}
if (i % 4 < 2)
{
t_vert[i].y = -0.5f;
- t_vert[i].v = (float)This->pVMR9->source_rect.bottom / (float)height;
+ t_vert[i].v = (float)This->pVMR9->baseControlVideo.src.bottom / (float)height;
}
else
{
- t_vert[i].y = (float)This->pVMR9->target_rect.bottom - (float)This->pVMR9->target_rect.top - 0.5f;
- t_vert[i].v = (float)This->pVMR9->source_rect.top / (float)height;
+ t_vert[i].y = (float)This->pVMR9->baseControlVideo.dst.bottom - (float)This->pVMR9->baseControlVideo.dst.top - 0.5f;
+ t_vert[i].v = (float)This->pVMR9->baseControlVideo.src.top / (float)height;
}
t_vert[i].z = 0.0f;
t_vert[i].rhw = 1.0f;
--
2.26.2
More information about the wine-devel
mailing list