1e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber/* 2e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Copyright (C) 2009 The Android Open Source Project 3e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 4e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * you may not use this file except in compliance with the License. 6e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * You may obtain a copy of the License at 7e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 8e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 10e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Unless required by applicable law or agreed to in writing, software 11e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * See the License for the specific language governing permissions and 14e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * limitations under the License. 15e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber */ 16e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 17e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <arpa/inet.h> 18e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 19e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <media/stagefright/Utils.h> 20e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android { 22e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 23e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberuint16_t U16_AT(const uint8_t *ptr) { 24e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return ptr[0] << 8 | ptr[1]; 25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} 26e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberuint32_t U32_AT(const uint8_t *ptr) { 28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return ptr[0] << 24 | ptr[1] << 16 | ptr[2] << 8 | ptr[3]; 29e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} 30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 31e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberuint64_t U64_AT(const uint8_t *ptr) { 32e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return ((uint64_t)U32_AT(ptr)) << 32 | U32_AT(ptr + 4); 33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} 34e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 35388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberuint16_t U16LE_AT(const uint8_t *ptr) { 36388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber return ptr[0] | (ptr[1] << 8); 37388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber} 38388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 39388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberuint32_t U32LE_AT(const uint8_t *ptr) { 40388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber return ptr[3] << 24 | ptr[2] << 16 | ptr[1] << 8 | ptr[0]; 41388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber} 42388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 43388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberuint64_t U64LE_AT(const uint8_t *ptr) { 44388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber return ((uint64_t)U32LE_AT(ptr + 4)) << 32 | U32LE_AT(ptr); 45388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber} 46388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 47e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber// XXX warning: these won't work on big-endian host. 48e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberuint64_t ntoh64(uint64_t x) { 49e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return ((uint64_t)ntohl(x & 0xffffffff) << 32) | ntohl(x >> 32); 50e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} 51e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 52e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberuint64_t hton64(uint64_t x) { 53e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber return ((uint64_t)htonl(x & 0xffffffff) << 32) | htonl(x >> 32); 54e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} 55e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 56e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} // namespace android 57e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 58