| /* | |
| * QuickTime Toolkit decoder utils | |
| * | |
| * Copyright 2011 Aric Stewart, CodeWeavers | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #include "config.h" | |
| #define ULONG CoreFoundation_ULONG | |
| #define HRESULT CoreFoundation_HRESULT | |
| #define LoadResource __carbon_LoadResource | |
| #define CompareString __carbon_CompareString | |
| #define GetCurrentThread __carbon_GetCurrentThread | |
| #define GetCurrentProcess __carbon_GetCurrentProcess | |
| #define AnimatePalette __carbon_AnimatePalette | |
| #define EqualRgn __carbon_EqualRgn | |
| #define FillRgn __carbon_FillRgn | |
| #define FrameRgn __carbon_FrameRgn | |
| #define GetPixel __carbon_GetPixel | |
| #define InvertRgn __carbon_InvertRgn | |
| #define LineTo __carbon_LineTo | |
| #define OffsetRgn __carbon_OffsetRgn | |
| #define PaintRgn __carbon_PaintRgn | |
| #define Polygon __carbon_Polygon | |
| #define ResizePalette __carbon_ResizePalette | |
| #define SetRectRgn __carbon_SetRectRgn | |
| #define CheckMenuItem __carbon_CheckMenuItem | |
| #define DeleteMenu __carbon_DeleteMenu | |
| #define DrawMenuBar __carbon_DrawMenuBar | |
| #define EnableMenuItem __carbon_EnableMenuItem | |
| #define EqualRect __carbon_EqualRect | |
| #define FillRect __carbon_FillRect | |
| #define FrameRect __carbon_FrameRect | |
| #define GetCursor __carbon_GetCursor | |
| #define GetMenu __carbon_GetMenu | |
| #define InvertRect __carbon_InvertRect | |
| #define IsWindowVisible __carbon_IsWindowVisible | |
| #define MoveWindow __carbon_MoveWindow | |
| #define OffsetRect __carbon_OffsetRect | |
| #define PtInRect __carbon_PtInRect | |
| #define SetCursor __carbon_SetCursor | |
| #define SetRect __carbon_SetRect | |
| #define ShowCursor __carbon_ShowCursor | |
| #define ShowWindow __carbon_ShowWindow | |
| #define UnionRect __carbon_UnionRect | |
| #include <CoreVideo/CVPixelBuffer.h> | |
| #undef LoadResource | |
| #undef CompareString | |
| #undef GetCurrentThread | |
| #undef _CDECL | |
| #undef DPRINTF | |
| #undef GetCurrentProcess | |
| #undef AnimatePalette | |
| #undef EqualRgn | |
| #undef FillRgn | |
| #undef FrameRgn | |
| #undef GetPixel | |
| #undef InvertRgn | |
| #undef LineTo | |
| #undef OffsetRgn | |
| #undef PaintRgn | |
| #undef Polygon | |
| #undef ResizePalette | |
| #undef SetRectRgn | |
| #undef CheckMenuItem | |
| #undef DeleteMenu | |
| #undef DrawMenuBar | |
| #undef EnableMenuItem | |
| #undef EqualRect | |
| #undef FillRect | |
| #undef FrameRect | |
| #undef GetCursor | |
| #undef GetMenu | |
| #undef InvertRect | |
| #undef IsWindowVisible | |
| #undef MoveWindow | |
| #undef OffsetRect | |
| #undef PtInRect | |
| #undef SetCursor | |
| #undef SetRect | |
| #undef ShowCursor | |
| #undef ShowWindow | |
| #undef UnionRect | |
| #undef ULONG | |
| #undef HRESULT | |
| #undef DPRINTF | |
| #undef STDMETHODCALLTYPE | |
| #include "windef.h" | |
| #include "winbase.h" | |
| #include "wtypes.h" | |
| #include "winuser.h" | |
| #include "dshow.h" | |
| #include "wine/debug.h" | |
| #include "qtprivate.h" | |
| WINE_DEFAULT_DEBUG_CHANNEL(qtdecoder); | |
| typedef struct { | |
| UInt8 a; /* Alpha Channel */ | |
| UInt8 r; /* red component */ | |
| UInt8 g; /* green component */ | |
| UInt8 b; /* blue component */ | |
| } ARGBPixelRecord, *ARGBPixelPtr, **ARGBPixelHdl; | |
| HRESULT AccessPixelBufferPixels( CVPixelBufferRef pixelBuffer, LPBYTE pbDstStream) | |
| { | |
| LPBYTE pPixels = NULL; | |
| size_t bytesPerRow = 0, height = 0, width = 0; | |
| OSType actualType; | |
| int i; | |
| actualType = CVPixelBufferGetPixelFormatType(pixelBuffer); | |
| if (k32ARGBPixelFormat != actualType) | |
| { | |
| ERR("Pixel Buffer is not desired Type\n"); | |
| return E_FAIL; | |
| } | |
| CVPixelBufferLockBaseAddress(pixelBuffer,0); | |
| pPixels = (LPBYTE)CVPixelBufferGetBaseAddress(pixelBuffer); | |
| bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer); | |
| height = CVPixelBufferGetHeight(pixelBuffer); | |
| width = CVPixelBufferGetWidth(pixelBuffer); | |
| for (i = 1; i <= height; i++) | |
| { | |
| int j; | |
| LPBYTE out = pbDstStream + ((height - i) * width * 3); | |
| for (j = 0; j < width; j++) | |
| { | |
| *((DWORD*)out) = (((ARGBPixelPtr)pPixels)[j].r) << 16 | |
| | (((ARGBPixelPtr)pPixels)[j].g) << 8 | |
| | (((ARGBPixelPtr)pPixels)[j].b); | |
| out+=3; | |
| } | |
| pPixels += bytesPerRow; | |
| } | |
| CVPixelBufferUnlockBaseAddress(pixelBuffer,0); | |
| return S_OK; | |
| } |