msxml3: Add some useful traces and demangle some parameter names.
[wine] / dlls / wineqtdecoder / qtutils.c
1 /*
2  * QuickTime Toolkit decoder utils
3  *
4  * Copyright 2011 Aric Stewart, CodeWeavers
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #include "config.h"
22
23 #define ULONG CoreFoundation_ULONG
24 #define HRESULT CoreFoundation_HRESULT
25
26 #define LoadResource __carbon_LoadResource
27 #define CompareString __carbon_CompareString
28 #define GetCurrentThread __carbon_GetCurrentThread
29 #define GetCurrentProcess __carbon_GetCurrentProcess
30 #define AnimatePalette __carbon_AnimatePalette
31 #define EqualRgn __carbon_EqualRgn
32 #define FillRgn __carbon_FillRgn
33 #define FrameRgn __carbon_FrameRgn
34 #define GetPixel __carbon_GetPixel
35 #define InvertRgn __carbon_InvertRgn
36 #define LineTo __carbon_LineTo
37 #define OffsetRgn __carbon_OffsetRgn
38 #define PaintRgn __carbon_PaintRgn
39 #define Polygon __carbon_Polygon
40 #define ResizePalette __carbon_ResizePalette
41 #define SetRectRgn __carbon_SetRectRgn
42
43 #define CheckMenuItem __carbon_CheckMenuItem
44 #define DeleteMenu __carbon_DeleteMenu
45 #define DrawMenuBar __carbon_DrawMenuBar
46 #define EnableMenuItem __carbon_EnableMenuItem
47 #define EqualRect __carbon_EqualRect
48 #define FillRect __carbon_FillRect
49 #define FrameRect __carbon_FrameRect
50 #define GetCursor __carbon_GetCursor
51 #define GetMenu __carbon_GetMenu
52 #define InvertRect __carbon_InvertRect
53 #define IsWindowVisible __carbon_IsWindowVisible
54 #define MoveWindow __carbon_MoveWindow
55 #define OffsetRect __carbon_OffsetRect
56 #define PtInRect __carbon_PtInRect
57 #define SetCursor __carbon_SetCursor
58 #define SetRect __carbon_SetRect
59 #define ShowCursor __carbon_ShowCursor
60 #define ShowWindow __carbon_ShowWindow
61 #define UnionRect __carbon_UnionRect
62
63 #include <CoreVideo/CVPixelBuffer.h>
64
65 #undef LoadResource
66 #undef CompareString
67 #undef GetCurrentThread
68 #undef _CDECL
69 #undef DPRINTF
70 #undef GetCurrentProcess
71 #undef AnimatePalette
72 #undef EqualRgn
73 #undef FillRgn
74 #undef FrameRgn
75 #undef GetPixel
76 #undef InvertRgn
77 #undef LineTo
78 #undef OffsetRgn
79 #undef PaintRgn
80 #undef Polygon
81 #undef ResizePalette
82 #undef SetRectRgn
83 #undef CheckMenuItem
84 #undef DeleteMenu
85 #undef DrawMenuBar
86 #undef EnableMenuItem
87 #undef EqualRect
88 #undef FillRect
89 #undef FrameRect
90 #undef GetCursor
91 #undef GetMenu
92 #undef InvertRect
93 #undef IsWindowVisible
94 #undef MoveWindow
95 #undef OffsetRect
96 #undef PtInRect
97 #undef SetCursor
98 #undef SetRect
99 #undef ShowCursor
100 #undef ShowWindow
101 #undef UnionRect
102
103 #undef ULONG
104 #undef HRESULT
105 #undef DPRINTF
106 #undef STDMETHODCALLTYPE
107
108 #include "windef.h"
109 #include "winbase.h"
110 #include "wtypes.h"
111 #include "winuser.h"
112 #include "dshow.h"
113
114 #include "wine/debug.h"
115 #include "qtprivate.h"
116
117 WINE_DEFAULT_DEBUG_CHANNEL(qtdecoder);
118
119 typedef struct {
120       UInt8 a; /* Alpha Channel */
121       UInt8 r; /* red component */
122       UInt8 g; /* green component */
123       UInt8 b; /* blue component */
124 } ARGBPixelRecord, *ARGBPixelPtr, **ARGBPixelHdl;
125
126 HRESULT AccessPixelBufferPixels( CVPixelBufferRef pixelBuffer, LPBYTE pbDstStream)
127 {
128     LPBYTE pPixels = NULL;
129     LPBYTE out = NULL;
130     size_t bytesPerRow = 0, height = 0, width = 0;
131     OSType actualType;
132     int i;
133
134     actualType = CVPixelBufferGetPixelFormatType(pixelBuffer);
135     if (k32ARGBPixelFormat != actualType)
136     {
137         ERR("Pixel Buffer is not desired Type\n");
138         return E_FAIL;
139     }
140     CVPixelBufferLockBaseAddress(pixelBuffer,0);
141     pPixels = (LPBYTE)CVPixelBufferGetBaseAddress(pixelBuffer);
142     bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
143     height = CVPixelBufferGetHeight(pixelBuffer);
144     width = CVPixelBufferGetWidth(pixelBuffer);
145
146     for (out = pbDstStream, i = 0; i < height; i++)
147     {
148         int j;
149         for (j = 0; j < width; j++)
150         {
151             *((DWORD*)out) = (((ARGBPixelPtr)pPixels)[j].r) << 16
152                           | (((ARGBPixelPtr)pPixels)[j].g) << 8
153                           | (((ARGBPixelPtr)pPixels)[j].b);
154             out+=3;
155         }
156         pPixels += bytesPerRow;
157     }
158     CVPixelBufferUnlockBaseAddress(pixelBuffer,0);
159     return S_OK;
160 }