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