annotate libavutil/bswap.h @ 9:ea1ba68cf0ed

update to match api changes + add sscc produced source
author Nina Engelhardt <nengel@mailbox.tu-berlin.de>
date Wed, 05 Jun 2013 14:43:26 +0200
parents
children
rev   line source
nengel@2 1 /*
nengel@2 2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
nengel@2 3 *
nengel@2 4 * This file is part of FFmpeg.
nengel@2 5 *
nengel@2 6 * FFmpeg is free software; you can redistribute it and/or
nengel@2 7 * modify it under the terms of the GNU Lesser General Public
nengel@2 8 * License as published by the Free Software Foundation; either
nengel@2 9 * version 2.1 of the License, or (at your option) any later version.
nengel@2 10 *
nengel@2 11 * FFmpeg is distributed in the hope that it will be useful,
nengel@2 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nengel@2 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
nengel@2 14 * Lesser General Public License for more details.
nengel@2 15 *
nengel@2 16 * You should have received a copy of the GNU Lesser General Public
nengel@2 17 * License along with FFmpeg; if not, write to the Free Software
nengel@2 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
nengel@2 19 */
nengel@2 20
nengel@2 21 /**
nengel@2 22 * @file
nengel@2 23 * byte swapping routines
nengel@2 24 */
nengel@2 25
nengel@2 26 #ifndef AVUTIL_BSWAP_H
nengel@2 27 #define AVUTIL_BSWAP_H
nengel@2 28
nengel@2 29 #include <stdint.h>
nengel@2 30 #include "config.h"
nengel@2 31 #include "attributes.h"
nengel@2 32
nengel@2 33 #if ARCH_ARM
nengel@2 34 # include "arm/bswap.h"
nengel@2 35 #elif ARCH_X86
nengel@2 36 # include "x86/bswap.h"
nengel@2 37 #endif
nengel@2 38
nengel@2 39 #ifndef bswap_16
nengel@2 40 static av_always_inline av_const uint16_t bswap_16(uint16_t x)
nengel@2 41 {
nengel@2 42 x= (x>>8) | (x<<8);
nengel@2 43 return x;
nengel@2 44 }
nengel@2 45 #endif
nengel@2 46
nengel@2 47 #ifndef bswap_32
nengel@2 48 static av_always_inline av_const uint32_t bswap_32(uint32_t x)
nengel@2 49 {
nengel@2 50 x= ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF);
nengel@2 51 x= (x>>16) | (x<<16);
nengel@2 52 return x;
nengel@2 53 }
nengel@2 54 #endif
nengel@2 55
nengel@2 56 #ifndef bswap_64
nengel@2 57 static inline uint64_t av_const bswap_64(uint64_t x)
nengel@2 58 {
nengel@2 59 #if 0
nengel@2 60 x= ((x<< 8)&0xFF00FF00FF00FF00ULL) | ((x>> 8)&0x00FF00FF00FF00FFULL);
nengel@2 61 x= ((x<<16)&0xFFFF0000FFFF0000ULL) | ((x>>16)&0x0000FFFF0000FFFFULL);
nengel@2 62 return (x>>32) | (x<<32);
nengel@2 63 #else
nengel@2 64 union {
nengel@2 65 uint64_t ll;
nengel@2 66 uint32_t l[2];
nengel@2 67 } w, r;
nengel@2 68 w.ll = x;
nengel@2 69 r.l[0] = bswap_32 (w.l[1]);
nengel@2 70 r.l[1] = bswap_32 (w.l[0]);
nengel@2 71 return r.ll;
nengel@2 72 #endif
nengel@2 73 }
nengel@2 74 #endif
nengel@2 75
nengel@2 76 // be2me ... big-endian to machine-endian
nengel@2 77 // le2me ... little-endian to machine-endian
nengel@2 78
nengel@2 79 #if HAVE_BIGENDIAN
nengel@2 80 #define be2me_16(x) (x)
nengel@2 81 #define be2me_32(x) (x)
nengel@2 82 #define be2me_64(x) (x)
nengel@2 83 #define le2me_16(x) bswap_16(x)
nengel@2 84 #define le2me_32(x) bswap_32(x)
nengel@2 85 #define le2me_64(x) bswap_64(x)
nengel@2 86 #else
nengel@2 87 #define be2me_16(x) bswap_16(x)
nengel@2 88 #define be2me_32(x) bswap_32(x)
nengel@2 89 #define be2me_64(x) bswap_64(x)
nengel@2 90 #define le2me_16(x) (x)
nengel@2 91 #define le2me_32(x) (x)
nengel@2 92 #define le2me_64(x) (x)
nengel@2 93 #endif
nengel@2 94
nengel@2 95 #endif /* AVUTIL_BSWAP_H */