1607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang/* 2607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * Copyright (C) 2017 The Android Open Source Project 3607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * 4607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * Licensed under the Apache License, Version 2.0 (the "License"); 5607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * you may not use this file except in compliance with the License. 6607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * You may obtain a copy of the License at 7607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * 8607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * http://www.apache.org/licenses/LICENSE-2.0 9607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * 10607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * Unless required by applicable law or agreed to in writing, software 11607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * distributed under the License is distributed on an "AS IS" BASIS, 12607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * See the License for the specific language governing permissions and 14607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang * limitations under the License. 15607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang */ 16607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 17607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang#ifndef BYTE_UTILS_H 18607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 19607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang#define BYTE_UTILS_H 20607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 21607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang#include <arpa/inet.h> 22607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 23607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kangnamespace android { 24607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 25f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissenconstexpr int FOURCC(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4) { 26f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen return ((c1) << 24 | (c2) << 16 | (c3) << 8 | (c4)); 27f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen} 28f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen 29f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissentemplate <size_t N> 30f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissenconstexpr int32_t FOURCC(const char (&s) [N]) { 31f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen static_assert(N == 5, "fourcc: wrong length"); 32f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen return 33f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen (unsigned char) s[0] << 24 | 34f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen (unsigned char) s[1] << 16 | 35f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen (unsigned char) s[2] << 8 | 36f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen (unsigned char) s[3] << 0; 37f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen} 38f92458812f4eeb95da65ac71323c100b428243d5Marco Nelissen 39607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 40607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint16_t U16_AT(const uint8_t *ptr); 41607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint32_t U32_AT(const uint8_t *ptr); 42607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint64_t U64_AT(const uint8_t *ptr); 43607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 44607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint16_t U16LE_AT(const uint8_t *ptr); 45607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint32_t U32LE_AT(const uint8_t *ptr); 46607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint64_t U64LE_AT(const uint8_t *ptr); 47607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 48607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint64_t ntoh64(uint64_t x); 49607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kanguint64_t hton64(uint64_t x); 50607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 51607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kangvoid MakeFourCCString(uint32_t x, char *s); 52607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 53607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang} // namespace android 54607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 55607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang#endif // BYTE_UTILS_H 56607612858f3afad1ade51a098aafa2a41523b5f7Dongwon Kang 57