| 1 | /***************************************************************************\ | 
|---|
| 2 | * | 
|---|
| 3 | * Module Name: DIVE.H | 
|---|
| 4 | * | 
|---|
| 5 | * OS/2 2.1 Multimedia Extensions Display Engine API data structures | 
|---|
| 6 | * | 
|---|
| 7 | * Copyright (c) International Business Machines Corporation 1993, 1994 | 
|---|
| 8 | *                         All Rights Reserved | 
|---|
| 9 | * | 
|---|
| 10 | * | 
|---|
| 11 | \****************************************************************************/ | 
|---|
| 12 | #ifdef __cplusplus | 
|---|
| 13 | extern "C" { | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 | #ifndef _DIVE_H_ | 
|---|
| 17 | #define _DIVE_H_ | 
|---|
| 18 |  | 
|---|
| 19 | #define MAX_DIVE_INSTANCES    64 | 
|---|
| 20 |  | 
|---|
| 21 | #define FOURCC ULONG | 
|---|
| 22 | #define HDIVE ULONG | 
|---|
| 23 |  | 
|---|
| 24 | #define DIVE_SUCCESS                                     0x00000000 | 
|---|
| 25 | #define DIVE_ERR_INVALID_INSTANCE                        0x00001000 | 
|---|
| 26 | #define DIVE_ERR_SOURCE_FORMAT                           0x00001001 | 
|---|
| 27 | #define DIVE_ERR_DESTINATION_FORMAT                      0x00001002 | 
|---|
| 28 | #define DIVE_ERR_BLITTER_NOT_SETUP                       0x00001003 | 
|---|
| 29 | #define DIVE_ERR_INSUFFICIENT_LENGTH                     0x00001004 | 
|---|
| 30 | #define DIVE_ERR_TOO_MANY_INSTANCES                      0x00001005 | 
|---|
| 31 | #define DIVE_ERR_NO_DIRECT_ACCESS                        0x00001006 | 
|---|
| 32 | #define DIVE_ERR_NOT_BANK_SWITCHED                       0x00001007 | 
|---|
| 33 | #define DIVE_ERR_INVALID_BANK_NUMBER                     0x00001008 | 
|---|
| 34 | #define DIVE_ERR_FB_NOT_ACQUIRED                         0x00001009 | 
|---|
| 35 | #define DIVE_ERR_FB_ALREADY_ACQUIRED                     0x0000100a | 
|---|
| 36 | #define DIVE_ERR_ACQUIRE_FAILED                          0x0000100b | 
|---|
| 37 | #define DIVE_ERR_BANK_SWITCH_FAILED                      0x0000100c | 
|---|
| 38 | #define DIVE_ERR_DEACQUIRE_FAILED                        0x0000100d | 
|---|
| 39 | #define DIVE_ERR_INVALID_PALETTE                         0x0000100e | 
|---|
| 40 | #define DIVE_ERR_INVALID_DESTINATION_RECTL               0x0000100f | 
|---|
| 41 | #define DIVE_ERR_INVALID_BUFFER_NUMBER                   0x00001010 | 
|---|
| 42 | #define DIVE_ERR_SSMDD_NOT_INSTALLED                     0x00001011 | 
|---|
| 43 | #define DIVE_ERR_BUFFER_ALREADY_ACCESSED                 0x00001012 | 
|---|
| 44 | #define DIVE_ERR_BUFFER_NOT_ACCESSED                     0x00001013 | 
|---|
| 45 | #define DIVE_ERR_TOO_MANY_BUFFERS                        0x00001014 | 
|---|
| 46 | #define DIVE_ERR_ALLOCATION_ERROR                        0x00001015 | 
|---|
| 47 | #define DIVE_ERR_INVALID_LINESIZE                        0x00001016 | 
|---|
| 48 | #define DIVE_ERR_FATAL_EXCEPTION                         0x00001017 | 
|---|
| 49 | #define DIVE_ERR_INVALID_CONVERSION                      0x00001018 | 
|---|
| 50 | #define DIVE_ERR_VSD_ERROR                               0x00001019 | 
|---|
| 51 | #define DIVE_ERR_COLOR_SUPPORT                           0x0000101a | 
|---|
| 52 | #define DIVE_ERR_OUT_OF_RANGE                            0x0000101b | 
|---|
| 53 | #define DIVE_WARN_NO_SIZE                                0x00001100 | 
|---|
| 54 |  | 
|---|
| 55 | #define DIVE_BUFFER_SCREEN                               0x00000000 | 
|---|
| 56 | #define DIVE_BUFFER_GRAPHICS_PLANE                       0x00000001 | 
|---|
| 57 | #define DIVE_BUFFER_ALTERNATE_PLANE                      0x00000002 | 
|---|
| 58 |  | 
|---|
| 59 | #define DIVE_FULLY_VISIBLE                               0xffffffff | 
|---|
| 60 |  | 
|---|
| 61 |  | 
|---|
| 62 | /* Notes: | 
|---|
| 63 | Associated/Allocated memory buffers start at:      0x00000010 | 
|---|
| 64 |  | 
|---|
| 65 | Specifing DIVE_BUFFER_GRAPHICS_PLANE results in the image being | 
|---|
| 66 | transferred to the graphics plane. | 
|---|
| 67 | Specifing DIVE_BUFFER_ALTERNATE_PLANE results in the image being | 
|---|
| 68 | transferred to the alternate (e.g. overlay) plane.  If your | 
|---|
| 69 | hardware doesn't support such a plane, this is an error. | 
|---|
| 70 | Specifing DIVE_BUFFER_SCREEN will result in the image being | 
|---|
| 71 | transferred to either the graphics plane buffer or the alternate | 
|---|
| 72 | plane buffer based on if an alternate buffer exists and based on | 
|---|
| 73 | the suitability the overlay plane to accelerate the scaling of | 
|---|
| 74 | the image.  If DIVE chooses to use the alternate buffer, it | 
|---|
| 75 | will also paint the overlay "key" color on the graphics plane. | 
|---|
| 76 | This automatic painting does not occur if the alternate plane | 
|---|
| 77 | is explicitly specified. | 
|---|
| 78 | */ | 
|---|
| 79 |  | 
|---|
| 80 |  | 
|---|
| 81 |  | 
|---|
| 82 | typedef struct _DIVE_CAPS { | 
|---|
| 83 |  | 
|---|
| 84 | ULONG  ulStructLen;            /* Set equal to sizeof(DIVE_CAPS)          */ | 
|---|
| 85 | ULONG  ulPlaneCount;           /* Number of defined planes.               */ | 
|---|
| 86 |  | 
|---|
| 87 | /* Info returned in the following fields pertains to ulPlaneID.           */ | 
|---|
| 88 | BOOL   fScreenDirect;          /* TRUE if can get addressability to vram. */ | 
|---|
| 89 | BOOL   fBankSwitched;          /* TRUE if vram is bank-switched.          */ | 
|---|
| 90 | ULONG  ulDepth;                /* Number of bits per pixel.               */ | 
|---|
| 91 | ULONG  ulHorizontalResolution; /* Screen width in pixels.                 */ | 
|---|
| 92 | ULONG  ulVerticalResolution;   /* Screen height in pixels.                */ | 
|---|
| 93 | ULONG  ulScanLineBytes;        /* Screen scan line size in bytes.         */ | 
|---|
| 94 | FOURCC fccColorEncoding;       /* Colorspace encoding of the screen.      */ | 
|---|
| 95 | ULONG  ulApertureSize;         /* Size of vram aperture in bytes.         */ | 
|---|
| 96 |  | 
|---|
| 97 | ULONG  ulInputFormats;         /* Number of input color formats.          */ | 
|---|
| 98 | ULONG  ulOutputFormats;        /* Number of output color formats.         */ | 
|---|
| 99 | ULONG  ulFormatLength;         /* Length of format buffer.                */ | 
|---|
| 100 | PVOID  pFormatData;            /* Pointer to color format buffer FOURCC's.*/ | 
|---|
| 101 |  | 
|---|
| 102 | } DIVE_CAPS; | 
|---|
| 103 | typedef DIVE_CAPS *PDIVE_CAPS; | 
|---|
| 104 |  | 
|---|
| 105 |  | 
|---|
| 106 |  | 
|---|
| 107 |  | 
|---|
| 108 | typedef struct _SETUP_BLITTER { | 
|---|
| 109 |  | 
|---|
| 110 | /* Set the ulStructLen field equal to the amount of the structure used. */ | 
|---|
| 111 | /* allowable: blank lines below mark sizes of 8, 28, 32, 52, 60, or 68. */ | 
|---|
| 112 | ULONG  ulStructLen; | 
|---|
| 113 | /* Set the ulInvert flags based on the following:                       */ | 
|---|
| 114 | /* b0001 = d01 = h01 = flip the image in the horizontal direction.      */ | 
|---|
| 115 | /* b0010 = d02 = h02 = flip the image in the vertical direction.        */ | 
|---|
| 116 | /* All other bits ignored.                                              */ | 
|---|
| 117 | ULONG  fInvert; | 
|---|
| 118 |  | 
|---|
| 119 | /* This is the color format of the source data.  See "FOURCC.H"         */ | 
|---|
| 120 | FOURCC fccSrcColorFormat; | 
|---|
| 121 | /* This is the width of the source image in pixels.                     */ | 
|---|
| 122 | ULONG  ulSrcWidth; | 
|---|
| 123 | /* This is the height of the source image in pixels.                    */ | 
|---|
| 124 | ULONG  ulSrcHeight; | 
|---|
| 125 | /* This is the horizontal offset from which to start displaying for     */ | 
|---|
| 126 | /* use in displaying a sub-portion of the source image.                 */ | 
|---|
| 127 | ULONG  ulSrcPosX; | 
|---|
| 128 | /* This is the vertical offset from which to start displaying.          */ | 
|---|
| 129 | ULONG  ulSrcPosY; | 
|---|
| 130 |  | 
|---|
| 131 | /* This is the dither type to use.  0 defines no dither and 1           */ | 
|---|
| 132 | /* defines 2x2 dither (all others ignored).  Note: dithering is only    */ | 
|---|
| 133 | /* supported in direct color to LUT8 conversions.                       */ | 
|---|
| 134 | ULONG  ulDitherType; | 
|---|
| 135 |  | 
|---|
| 136 | /* This is the color format of the destinaion data.  See "FOURCC.H"     */ | 
|---|
| 137 | FOURCC fccDstColorFormat; | 
|---|
| 138 | /* This is the width of the destination image in pixels.                */ | 
|---|
| 139 | ULONG  ulDstWidth; | 
|---|
| 140 | /* This is the height of the destination image in pixels.               */ | 
|---|
| 141 | ULONG  ulDstHeight; | 
|---|
| 142 | /* This is the horizontal offset from which to start displaying for     */ | 
|---|
| 143 | /* use in displaying to sub-portion of the destination image.           */ | 
|---|
| 144 | LONG   lDstPosX; | 
|---|
| 145 | /* This is the vertical offset from which to start displaying.          */ | 
|---|
| 146 | LONG   lDstPosY; | 
|---|
| 147 |  | 
|---|
| 148 | /* This is the world screen horizontal position, where 0 is left.       */ | 
|---|
| 149 | /* These are ignored if the destination is not the screen.              */ | 
|---|
| 150 | LONG   lScreenPosX; | 
|---|
| 151 | /* This is the world screen vertical position, where 0 is bottom.       */ | 
|---|
| 152 | LONG   lScreenPosY; | 
|---|
| 153 |  | 
|---|
| 154 | /* This is the number of visible rectangular regions being passed in.   */ | 
|---|
| 155 | /* These are ignored if the destination is not the screen.              */ | 
|---|
| 156 | /* Also, if you application *KNOWS* that the region is fully visible    */ | 
|---|
| 157 | /* (like not going to the screen), the you can use DIVE_FULLY_VISIBLE   */ | 
|---|
| 158 | /* instead of making up a bogus visible region structure.               */ | 
|---|
| 159 | ULONG  ulNumDstRects; | 
|---|
| 160 | /* This points to an array of visible regions which defines what        */ | 
|---|
| 161 | /* portions of the source image are to be displayed.                    */ | 
|---|
| 162 | PRECTL pVisDstRects;           /* Pointer to array of visible rectangles. */ | 
|---|
| 163 |  | 
|---|
| 164 | } SETUP_BLITTER; | 
|---|
| 165 | typedef SETUP_BLITTER *PSETUP_BLITTER; | 
|---|
| 166 |  | 
|---|
| 167 |  | 
|---|
| 168 |  | 
|---|
| 169 | ULONG APIENTRY DiveQueryCaps ( PDIVE_CAPS pDiveCaps, | 
|---|
| 170 | ULONG      ulPlaneBufNum ); | 
|---|
| 171 |  | 
|---|
| 172 | ULONG APIENTRY DiveOpen ( HDIVE *phDiveInst, | 
|---|
| 173 | BOOL   fNonScreenInstance, | 
|---|
| 174 | PVOID  ppFrameBuffer ); | 
|---|
| 175 |  | 
|---|
| 176 | ULONG APIENTRY DiveSetupBlitter ( HDIVE          hDiveInst, | 
|---|
| 177 | PSETUP_BLITTER pSetupBlitter ); | 
|---|
| 178 |  | 
|---|
| 179 | ULONG APIENTRY DiveBlitImage ( HDIVE hDiveInst, | 
|---|
| 180 | ULONG ulSrcBufNumber, | 
|---|
| 181 | ULONG ulDstBufNumber ); | 
|---|
| 182 |  | 
|---|
| 183 | #ifdef INCL_MM_OS2 | 
|---|
| 184 | /* Same as DiveBlitImage, except pbLineMask points to one byte per line      */ | 
|---|
| 185 | /* in source image buffer such that 0: unchanged, 0xFF: changed              */ | 
|---|
| 186 | ULONG APIENTRY DiveBlitImageLines ( HDIVE hDiveInst, | 
|---|
| 187 | ULONG ulSrcBufNumber, | 
|---|
| 188 | ULONG ulDstBufNumber, | 
|---|
| 189 | PBYTE pbLineMask ); | 
|---|
| 190 | #endif | 
|---|
| 191 |  | 
|---|
| 192 | ULONG APIENTRY DiveClose ( HDIVE hDiveInst ); | 
|---|
| 193 |  | 
|---|
| 194 | ULONG APIENTRY DiveAcquireFrameBuffer ( HDIVE   hDiveInst, | 
|---|
| 195 | PRECTL  prectlDst ); | 
|---|
| 196 |  | 
|---|
| 197 | ULONG APIENTRY DiveSwitchBank ( HDIVE hDiveInst, | 
|---|
| 198 | ULONG ulBankNumber ); | 
|---|
| 199 |  | 
|---|
| 200 | ULONG APIENTRY DiveDeacquireFrameBuffer ( HDIVE hDiveInst ); | 
|---|
| 201 |  | 
|---|
| 202 | ULONG APIENTRY DiveCalcFrameBufferAddress ( HDIVE  hDiveInst, | 
|---|
| 203 | PRECTL prectlDest, | 
|---|
| 204 | PBYTE *ppDestinationAddress, | 
|---|
| 205 | PULONG pulBankNumber, | 
|---|
| 206 | PULONG pulRemLinesInBank ); | 
|---|
| 207 |  | 
|---|
| 208 | /* Notes on DiveAllocImageBuffer: | 
|---|
| 209 | If pbImageBuffer is not NULL, the buffer is associated rather than | 
|---|
| 210 | allocated.  If pbImageBuffer is not NULL and the buffer number | 
|---|
| 211 | pointed to by pulBufferNumber is non-zero, a new buffer pointer is | 
|---|
| 212 | associated with the buffer number.  Even though no memory is | 
|---|
| 213 | allocated by DiveAllocImageBuffer when user-allocated buffers are | 
|---|
| 214 | associated, DiveFreeImageBuffer should be called to release the | 
|---|
| 215 | buffer association to avoid using up available buffer indexes. | 
|---|
| 216 | The specified line size will be used if a buffer is allocated in | 
|---|
| 217 | system memory, or if a user buffer is associated.  If the | 
|---|
| 218 | specified line size is zero, the allocated line size is rounded up | 
|---|
| 219 | to the nearest DWORD boundry. | 
|---|
| 220 | */ | 
|---|
| 221 |  | 
|---|
| 222 | ULONG APIENTRY DiveAllocImageBuffer ( HDIVE  hDiveInst, | 
|---|
| 223 | PULONG pulBufferNumber, | 
|---|
| 224 | FOURCC fccColorSpace, | 
|---|
| 225 | ULONG  ulWidth, | 
|---|
| 226 | ULONG  ulHeight, | 
|---|
| 227 | ULONG  ulLineSizeBytes, | 
|---|
| 228 | PBYTE  pbImageBuffer ); | 
|---|
| 229 |  | 
|---|
| 230 | ULONG APIENTRY DiveFreeImageBuffer ( HDIVE hDiveInst, | 
|---|
| 231 | ULONG ulBufferNumber ); | 
|---|
| 232 |  | 
|---|
| 233 | ULONG APIENTRY DiveBeginImageBufferAccess ( HDIVE  hDiveInst, | 
|---|
| 234 | ULONG  ulBufferNumber, | 
|---|
| 235 | PBYTE *ppbImageBuffer, | 
|---|
| 236 | PULONG pulBufferScanLineBytes, | 
|---|
| 237 | PULONG pulBufferScanLines ); | 
|---|
| 238 |  | 
|---|
| 239 | ULONG APIENTRY DiveEndImageBufferAccess ( HDIVE hDiveInst, | 
|---|
| 240 | ULONG ulBufferNumber ); | 
|---|
| 241 |  | 
|---|
| 242 |  | 
|---|
| 243 |  | 
|---|
| 244 | /* Notes on palettes: | 
|---|
| 245 | Neither DiveSetSourcePalette nor DiveSetDestinationPalette API's will set | 
|---|
| 246 | the physical palette.  If your application MUST set the PHYSICAL palette, | 
|---|
| 247 | try using no more than 236 entries (the middle 236: 10-245, thus leaving | 
|---|
| 248 | the top and bottom 10 entries for the Workplace Shell).  If your | 
|---|
| 249 | application MUST use ALL 256 entries, it must do so as a full-screen | 
|---|
| 250 | (i.e. maximized) application.  Remember, No WM_REALIZEPALETTE message | 
|---|
| 251 | will be sent to other running applications, meaning they will not redraw | 
|---|
| 252 | and their colors will be all wrong.  It is not recommended that a | 
|---|
| 253 | developer use these commands: | 
|---|
| 254 |  | 
|---|
| 255 | To set physical palette, do the following: | 
|---|
| 256 | hps = WinGetPS ( HWND_DESKTOP ); | 
|---|
| 257 | hdc = GpiQueryDevice ( hps ); | 
|---|
| 258 | GpiCreateLogColorTable ( hps, LCOL_PURECOLOR | LCOL_REALIZABLE, | 
|---|
| 259 | LCOLF_CONSECRGB, 0, 256, (PLONG)plRGB2Entries ); | 
|---|
| 260 | Gre32EntrY3 ( hdc, 0L, 0x000060C6L ); | 
|---|
| 261 | WinInvalidateRect ( HWND_DESKTOP, (PRECTL)NULL, TRUE ); | 
|---|
| 262 | WinReleasePS ( hps ); | 
|---|
| 263 |  | 
|---|
| 264 | To reset physical palette, do the following: | 
|---|
| 265 | hps = WinGetPS ( HWND_DESKTOP ); | 
|---|
| 266 | hdc = GpiQueryDevice ( hps ); | 
|---|
| 267 | Gre32EntrY3 ( hdc, 0L, 0x000060C7L ); | 
|---|
| 268 | WinInvalidateRect ( HWND_DESKTOP, (PRECTL)NULL, TRUE ); | 
|---|
| 269 | WinReleasePS ( hps ); | 
|---|
| 270 | */ | 
|---|
| 271 |  | 
|---|
| 272 |  | 
|---|
| 273 | /* Use either of the two defines as the pRGB2Entries pointer to have DIVE    */ | 
|---|
| 274 | /* query and set the physical or default palette as source or destination.   */ | 
|---|
| 275 |  | 
|---|
| 276 | #define DIVE_PALETTE_PHYSICAL                     (PBYTE)0x00000000 | 
|---|
| 277 | #define DIVE_PALETTE_DEFAULT                      (PBYTE)0xffffffff | 
|---|
| 278 |  | 
|---|
| 279 | ULONG APIENTRY DiveSetDestinationPalette ( HDIVE hDiveInst, | 
|---|
| 280 | ULONG ulStartIndex, | 
|---|
| 281 | ULONG ulNumEntries, | 
|---|
| 282 | PBYTE pbRGB2Entries ); | 
|---|
| 283 |  | 
|---|
| 284 | ULONG APIENTRY DiveSetSourcePalette ( HDIVE hDiveInst, | 
|---|
| 285 | ULONG ulStartIndex, | 
|---|
| 286 | ULONG ulNumEntries, | 
|---|
| 287 | PBYTE pbRGB2Entries ); | 
|---|
| 288 |  | 
|---|
| 289 | #ifdef INCL_MM_OS2 | 
|---|
| 290 | ULONG APIENTRY DiveSetTransparentBlitMode ( HDIVE hDiveInst, | 
|---|
| 291 | ULONG ulTransBlitMode, | 
|---|
| 292 | ULONG ulValue1, | 
|---|
| 293 | ULONG ulValue2 ); | 
|---|
| 294 |  | 
|---|
| 295 | /* The following transparent blitting modes are supported:                   */ | 
|---|
| 296 |  | 
|---|
| 297 | #define DIVE_TBM_NONE                              0x0 | 
|---|
| 298 | /* No transparency, i.e. all pixels are transferred (default)                */ | 
|---|
| 299 |  | 
|---|
| 300 | #define DIVE_TBM_EXCLUDE_SOURCE_VALUE              0x01 | 
|---|
| 301 | /* Source pixels with values that exactly match the value specified in       */ | 
|---|
| 302 | /* ulValue1 are not transferred.                                             */ | 
|---|
| 303 |  | 
|---|
| 304 | #define DIVE_TBM_EXCLUDE_SOURCE_RGB_RANGE          0x02 | 
|---|
| 305 | /* Source pixels with values that lie within the range specified in RGB      */ | 
|---|
| 306 | /* color space specified by ulValue1 (minimum) and ulValue2 (maximum)        */ | 
|---|
| 307 | /* are not transferred by DiveBlitImage.                                     */ | 
|---|
| 308 |  | 
|---|
| 309 | #define DIVE_TBM_INCLUDE_SOURCE_RGB_RANGE          0x03 | 
|---|
| 310 | /* Source pixels with values that lie outside the range specified in RGB     */ | 
|---|
| 311 | /* color space specified by ulValue1 (minimum) and ulValue2 (maximum)        */ | 
|---|
| 312 | /* are not transferred by DiveBlitImage.                                     */ | 
|---|
| 313 |  | 
|---|
| 314 | #define DIVE_TBM_EXCLUDE_SOURCE_YUV_RANGE          0x04 | 
|---|
| 315 | /* Source pixels with values that lie within the range specified in RGB      */ | 
|---|
| 316 | /* color space specified by ulValue1 (minimum) and ulValue2 (maximum)        */ | 
|---|
| 317 | /* are not transferred by DiveBlitImage.                                     */ | 
|---|
| 318 |  | 
|---|
| 319 | #define DIVE_TBM_INCLUDE_SOURCE_YUV_RANGE          0x05 | 
|---|
| 320 | /* Source pixels with values that lie outside the range specified in RGB     */ | 
|---|
| 321 | /* color space specified by ulValue1 (minimum) and ulValue2 (maximum)        */ | 
|---|
| 322 | /* are not transferred by DiveBlitImage.                                     */ | 
|---|
| 323 |  | 
|---|
| 324 | /* Notes on transparent blitting: | 
|---|
| 325 | Supported transparent blitting functions are all based on source pixel | 
|---|
| 326 | values.  A pixel in the destination image buffer is not modified if the | 
|---|
| 327 | corresponding pixel in the source buffer is "transparent".  The color | 
|---|
| 328 | values or color value ranges specified in ulValue1 and ulValue2 are | 
|---|
| 329 | dependent on the source image color format (fccSrcColorFormat) and the | 
|---|
| 330 | color space in which the range comparison is taking place. | 
|---|
| 331 |  | 
|---|
| 332 | FOURCC_LUT8: | 
|---|
| 333 | The color value is specified in the low 8 bits of parameter | 
|---|
| 334 |  | 
|---|
| 335 | FOURCC_Y888, FOURCC_Y2X2, FOURCC_Y4X4, FOURCC_YUV9, FOURCC_Y644, FOURCC_Y422: | 
|---|
| 336 | 23:8 - Y, 15:8 - U, 7:8 - V  (bits 31:8 ignored) | 
|---|
| 337 |  | 
|---|
| 338 | FOURCC_R565, FOURCC_R555, FOURCC_R664, FOURCC_RGB3, FOURCC_BGR3, FOURCC_RGB4, | 
|---|
| 339 | FOURCC_BGR4: | 
|---|
| 340 | 23:8 - R, 15:8 - G, 7:8 - B  (bits 31:8 ignored) | 
|---|
| 341 | R, G, and B components are specified with 8 bit significance, regardless | 
|---|
| 342 | of significance in the source data. | 
|---|
| 343 |  | 
|---|
| 344 | Transparent blitting of other source image formats is not supported. | 
|---|
| 345 |  | 
|---|
| 346 | For range comparisons in RGB or YUV, the three components are compared | 
|---|
| 347 | independently against the minimum and maximum values specified by the | 
|---|
| 348 | ulValue1 and ulValue2 parameters respectively.  A value is considered to | 
|---|
| 349 | within the specified range if all three components satisfy: | 
|---|
| 350 | min <= value <= max. | 
|---|
| 351 |  | 
|---|
| 352 | For EXCLUDE_SOURCE_VALUE tranparent blitting, the specified value in | 
|---|
| 353 | ulValue1 is assumed to be in the source color space as described above. | 
|---|
| 354 | For range comparisons, the values specified in ulValue1 and ulValue2 are | 
|---|
| 355 | assumed to be in the color space in which the range comparison is to be | 
|---|
| 356 | performed, either YUV or RGB. | 
|---|
| 357 |  | 
|---|
| 358 | - For range comparisons in YUV where the source data format is a YUV | 
|---|
| 359 | form, the values in ulValue1 and ulValue2 are in the source YUV | 
|---|
| 360 | format. | 
|---|
| 361 |  | 
|---|
| 362 | - For range comparisons in YUV where the source data format is RGB, | 
|---|
| 363 | conversion of source data format from RGB to YUV using standard | 
|---|
| 364 | CCIR601 equations is assumed (refer to fourcc.h). | 
|---|
| 365 |  | 
|---|
| 366 | - For range comparisons in RGB where the source data format is an RGB | 
|---|
| 367 | form, the values in ulValue1 and ulValue2 specify the RGB range with | 
|---|
| 368 | 5 bits significance in R, 6 bits in G, and 5 bits in B. | 
|---|
| 369 |  | 
|---|
| 370 | - For range comparisons in RGB where the source data format is YUV, | 
|---|
| 371 | conversion of source data format from YUV to RGB using standard | 
|---|
| 372 | CCIR601 equations is assumed (refer to fourcc.h). | 
|---|
| 373 |  | 
|---|
| 374 |  | 
|---|
| 375 |  | 
|---|
| 376 | */ | 
|---|
| 377 |  | 
|---|
| 378 | #endif | 
|---|
| 379 |  | 
|---|
| 380 | #endif | 
|---|
| 381 | #ifdef __cplusplus | 
|---|
| 382 | } | 
|---|
| 383 | #endif | 
|---|
| 384 |  | 
|---|