michael@0: /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "assert.h" michael@0: #include "ANPBase.h" michael@0: #include michael@0: michael@0: #define LOG(args...) __android_log_print(ANDROID_LOG_INFO, "GeckoPlugins" , ## args) michael@0: #define ASSIGN(obj, name) (obj)->name = anp_bitmap_##name michael@0: michael@0: michael@0: #define SK_A32_BITS 8 michael@0: #define SK_R32_BITS 8 michael@0: #define SK_G32_BITS 8 michael@0: #define SK_B32_BITS 8 michael@0: michael@0: #ifdef IS_BIG_ENDIAN michael@0: #define SK_R32_SHIFT 24 michael@0: #define SK_G32_SHIFT 16 michael@0: #define SK_B32_SHIFT 8 michael@0: #define SK_A32_SHIFT 0 michael@0: #else michael@0: #define SK_R32_SHIFT 0 michael@0: #define SK_G32_SHIFT 8 michael@0: #define SK_B32_SHIFT 16 michael@0: #define SK_A32_SHIFT 24 michael@0: #endif michael@0: michael@0: #define SK_A32_MASK ((1 << SK_A32_BITS) - 1) michael@0: #define SK_R32_MASK ((1 << SK_R32_BITS) - 1) michael@0: #define SK_G32_MASK ((1 << SK_G32_BITS) - 1) michael@0: #define SK_B32_MASK ((1 << SK_B32_BITS) - 1) michael@0: michael@0: #define SK_R16_BITS 5 michael@0: #define SK_G16_BITS 6 michael@0: #define SK_B16_BITS 5 michael@0: michael@0: #define SK_R16_SHIFT (SK_B16_BITS + SK_G16_BITS) michael@0: #define SK_G16_SHIFT (SK_B16_BITS) michael@0: #define SK_B16_SHIFT 0 michael@0: michael@0: #define SK_R16_MASK ((1 << SK_R16_BITS) - 1) michael@0: #define SK_G16_MASK ((1 << SK_G16_BITS) - 1) michael@0: #define SK_B16_MASK ((1 << SK_B16_BITS) - 1) michael@0: michael@0: bool michael@0: anp_bitmap_getPixelPacking(ANPBitmapFormat fmt, ANPPixelPacking* packing) { michael@0: LOG("%s", __PRETTY_FUNCTION__); michael@0: switch (fmt) { michael@0: case kRGBA_8888_ANPBitmapFormat: michael@0: if (packing) { michael@0: packing->AShift = SK_A32_SHIFT; michael@0: packing->ABits = SK_A32_BITS; michael@0: packing->RShift = SK_R32_SHIFT; michael@0: packing->RBits = SK_R32_BITS; michael@0: packing->GShift = SK_G32_SHIFT; michael@0: packing->GBits = SK_G32_BITS; michael@0: packing->BShift = SK_B32_SHIFT; michael@0: packing->BBits = SK_B32_BITS; michael@0: } michael@0: return true; michael@0: case kRGB_565_ANPBitmapFormat: michael@0: if (packing) { michael@0: packing->AShift = 0; michael@0: packing->ABits = 0; michael@0: packing->RShift = SK_R16_SHIFT; michael@0: packing->RBits = SK_R16_BITS; michael@0: packing->GShift = SK_G16_SHIFT; michael@0: packing->GBits = SK_G16_BITS; michael@0: packing->BShift = SK_B16_SHIFT; michael@0: packing->BBits = SK_B16_BITS; michael@0: } michael@0: return true; michael@0: default: michael@0: break; michael@0: } michael@0: return false; michael@0: } michael@0: michael@0: void InitBitmapInterface(ANPBitmapInterfaceV0 *i) { michael@0: _assert(i->inSize == sizeof(*i)); michael@0: ASSIGN(i, getPixelPacking); michael@0: }