Maarten Lankhorst : quartz: Add VIDEOINFOHEADER2 support to VideoRenderer.
Alexandre Julliard
julliard at winehq.org
Tue Apr 15 08:47:31 CDT 2008
Module: wine
Branch: master
Commit: 3e9cee050f801ab3cd69378d168f5efd51862f0b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3e9cee050f801ab3cd69378d168f5efd51862f0b
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Fri Apr 11 15:10:19 2008 -0700
quartz: Add VIDEOINFOHEADER2 support to VideoRenderer.
---
dlls/quartz/videorenderer.c | 78 +++++++++++++++++++++++++++++-------------
1 files changed, 54 insertions(+), 24 deletions(-)
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index f363b82..f0a73d7 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -35,7 +35,9 @@
#include "evcode.h"
#include "strmif.h"
#include "ddraw.h"
+#include "dvdmedia.h"
+#include "assert.h"
#include "wine/unicode.h"
#include "wine/debug.h"
@@ -263,7 +265,6 @@ static const IMemInputPinVtbl MemInputPin_Vtbl =
static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data, DWORD size)
{
- VIDEOINFOHEADER* format;
AM_MEDIA_TYPE amt;
HRESULT hr = S_OK;
DDSURFACEDESC sdesc;
@@ -271,6 +272,7 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
int height;
LPBYTE palette = NULL;
HDC hDC;
+ BITMAPINFOHEADER *bmiHeader;
TRACE("%p %p %d\n", This, data, size);
@@ -280,23 +282,39 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
ERR("Unable to retrieve media type\n");
return hr;
}
- format = (VIDEOINFOHEADER*)amt.pbFormat;
-
- TRACE("biSize = %d\n", format->bmiHeader.biSize);
- TRACE("biWidth = %d\n", format->bmiHeader.biWidth);
- TRACE("biHeight = %d\n", format->bmiHeader.biHeight);
- TRACE("biPlanes = %d\n", format->bmiHeader.biPlanes);
- TRACE("biBitCount = %d\n", format->bmiHeader.biBitCount);
- TRACE("biCompression = %s\n", debugstr_an((LPSTR)&(format->bmiHeader.biCompression), 4));
- TRACE("biSizeImage = %d\n", format->bmiHeader.biSizeImage);
-
- width = format->bmiHeader.biWidth;
- height = format->bmiHeader.biHeight;
- palette = ((LPBYTE)&format->bmiHeader) + format->bmiHeader.biSize;
+
+ if (IsEqualIID(&amt.formattype, &FORMAT_VideoInfo))
+ {
+ bmiHeader = &((VIDEOINFOHEADER *)amt.pbFormat)->bmiHeader;
+ }
+ else if (IsEqualIID(&amt.formattype, &FORMAT_VideoInfo2))
+ {
+ bmiHeader = &((VIDEOINFOHEADER2 *)amt.pbFormat)->bmiHeader;
+ }
+ else
+ {
+ FIXME("Unknown type %s\n", debugstr_guid(&amt.subtype));
+ return VFW_E_RUNTIME_ERROR;
+ }
+
+
+ TRACE("biSize = %d\n", bmiHeader->biSize);
+ TRACE("biWidth = %d\n", bmiHeader->biWidth);
+ TRACE("biHeight = %d\n", bmiHeader->biHeight);
+ TRACE("biPlanes = %d\n", bmiHeader->biPlanes);
+ TRACE("biBitCount = %d\n", bmiHeader->biBitCount);
+ TRACE("biCompression = %s\n", debugstr_an((LPSTR)&(bmiHeader->biCompression), 4));
+ TRACE("biSizeImage = %d\n", bmiHeader->biSizeImage);
+
+ width = bmiHeader->biWidth;
+ height = bmiHeader->biHeight;
+ palette = ((LPBYTE)bmiHeader) + bmiHeader->biSize;
if (!This->init)
{
- /* Honor previously set WindowPos */
+ if (!This->WindowPos.right || !This->WindowPos.bottom)
+ This->WindowPos = This->SourceRect;
+
TRACE("WindowPos: %d %d %d %d\n", This->WindowPos.left, This->WindowPos.top, This->WindowPos.right, This->WindowPos.bottom);
SetWindowPos(This->hWnd, NULL,
This->WindowPos.left,
@@ -304,8 +322,9 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
This->WindowPos.right - This->WindowPos.left,
This->WindowPos.bottom - This->WindowPos.top,
SWP_NOZORDER|SWP_NOMOVE);
+
GetClientRect(This->hWnd, &This->DestRect);
- This->init = TRUE;
+ This->init = TRUE;
}
hDC = GetDC(This->hWnd);
@@ -321,10 +340,9 @@ static DWORD VideoRenderer_SendSampleData(VideoRendererImpl* This, LPBYTE data,
StretchDIBits(hDC, This->DestRect.left, This->DestRect.top, This->DestRect.right -This->DestRect.left,
This->DestRect.bottom - This->DestRect.top, This->SourceRect.left, This->SourceRect.top,
This->SourceRect.right - This->SourceRect.left, This->SourceRect.bottom - This->SourceRect.top,
- data, (BITMAPINFO*)&format->bmiHeader, DIB_RGB_COLORS, SRCCOPY);
+ data, (BITMAPINFO *)bmiHeader, DIB_RGB_COLORS, SRCCOPY);
ReleaseDC(This->hWnd, hDC);
-
if (This->AutoShow)
ShowWindow(This->hWnd, SW_SHOW);
@@ -385,17 +403,29 @@ static HRESULT VideoRenderer_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt
IsEqualIID(&pmt->subtype, &MEDIASUBTYPE_RGB8))
{
VideoRendererImpl* This = (VideoRendererImpl*) iface;
- VIDEOINFOHEADER* format = (VIDEOINFOHEADER*)pmt->pbFormat;
- if (!IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo))
+ if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo))
+ {
+ VIDEOINFOHEADER *format = (VIDEOINFOHEADER *)pmt->pbFormat;
+ This->SourceRect.left = 0;
+ This->SourceRect.top = 0;
+ This->SourceRect.right = This->VideoWidth = format->bmiHeader.biWidth;
+ This->SourceRect.bottom = This->VideoHeight = format->bmiHeader.biHeight;
+ }
+ else if (IsEqualIID(&pmt->formattype, &FORMAT_VideoInfo2))
+ {
+ VIDEOINFOHEADER2 *format2 = (VIDEOINFOHEADER2 *)pmt->pbFormat;
+
+ This->SourceRect.left = 0;
+ This->SourceRect.top = 0;
+ This->SourceRect.right = This->VideoWidth = format2->bmiHeader.biWidth;
+ This->SourceRect.bottom = This->VideoHeight = format2->bmiHeader.biHeight;
+ }
+ else
{
WARN("Format type %s not supported\n", debugstr_guid(&pmt->formattype));
return S_FALSE;
}
- This->SourceRect.left = 0;
- This->SourceRect.top = 0;
- This->SourceRect.right = This->VideoWidth = format->bmiHeader.biWidth;
- This->SourceRect.bottom = This->VideoHeight = format->bmiHeader.biHeight;
return S_OK;
}
return S_FALSE;
More information about the wine-cvs
mailing list