のねのBlog

パソコンやソフト開発で起きた問題など書きます。よろしくお願いします。

Skia SkEndianSwap16

    226 /*
    227  * Get a short from a buffer
    228  * This method is unsafe, the caller is responsible for performing a check
    229  */
    230 inline uint16_t get_short(uint8_t* buffer, uint32_t i) {
    231     uint16_t result;
    232     memcpy(&result, &(buffer[i]), 2);
    233 #ifdef SK_CPU_BENDIAN
    234     return SkEndianSwap16(result); <=====
    235 #else
    236     return result;
    237 #endif
    238 }

Cross Reference: /external/skia/src/codec/SkCodecPriv.h

ヘッダーは、これ。

      8 #ifndef SkCodecPriv_DEFINED
      9 #define SkCodecPriv_DEFINED
     10 
     11 #include "SkColorPriv.h"
     12 #include "SkColorTable.h"
     13 #include "SkImageInfo.h"
     14 #include "SkTypes.h"
      8 #ifndef SkTypes_DEFINED
      9 #define SkTypes_DEFINED
     10 
     11 // IWYU pragma: begin_exports
     12 #include "SkPreConfig.h"
     13 #include "SkUserConfig.h"
     14 #include "SkPostConfig.h"
     15 #include <stddef.h>
     16 #include <stdint.h>
     17 
     18 #if defined(SK_ARM_HAS_NEON)
     19     #include <arm_neon.h>
     20 #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
     21     #include <immintrin.h>
     22 #endif
     23 // IWYU pragma: end_exports
     24 
     25 #include <string.h>

Cross Reference: /external/skia/include/core/SkTypes.h

#define _LITTLE_ENDIAN	1234
#define _BIG_ENDIAN	4321
#define _PDP_ENDIAN	3412
#define _BYTE_ORDER _LITTLE_ENDIAN
#define __LITTLE_ENDIAN_BITFIELD

#ifndef __LITTLE_ENDIAN
#define __LITTLE_ENDIAN _LITTLE_ENDIAN
#endif
#ifndef __BIG_ENDIAN
#define __BIG_ENDIAN _BIG_ENDIAN
#endif
#define __BYTE_ORDER _BYTE_ORDER

Cross Reference: /external/skia/include/core/SkPreConfig.h

プリプロセッサオプションに、__BIG_ENDIANを追加したらコンパイルできるようになった。