obs-studio/build_dependencies/aja/include/ajalibraries/ajantv2/includes/ntv2endian.h

75 lines
2.8 KiB
C
Raw Normal View History

2023-03-04 18:33:16 +01:00
/* SPDX-License-Identifier: MIT */
/**
@file ntv2endian.h
@brief Defines a number of handy byte-swapping macros.
@copyright (C) 2008-2021 AJA Video Systems, Inc. All rights reserved.
**/
#ifndef NTV2ENDIAN_H
#define NTV2ENDIAN_H
#include "ajatypes.h"
// unconditional endian byte swap
#define NTV2EndianSwap16(__val__) \
( ((UWord(__val__)<<8) & 0xFF00) | \
((UWord(__val__)>>8) & 0x00FF) )
#define NTV2EndianSwap32(__val__) \
( ((ULWord(__val__)<<24) & 0xFF000000) | \
((ULWord(__val__)<< 8) & 0x00FF0000) | \
((ULWord(__val__)>> 8) & 0x0000FF00) | \
((ULWord(__val__)>>24) & 0x000000FF) )
#define NTV2EndianSwap64(__val__) \
( ((ULWord64(__val__)<<56) & 0xFF00000000000000ULL) | \
((ULWord64(__val__)<<40) & 0x00FF000000000000ULL) | \
((ULWord64(__val__)<<24) & 0x0000FF0000000000ULL) | \
((ULWord64(__val__)<< 8) & 0x000000FF00000000ULL) | \
((ULWord64(__val__)>> 8) & 0x00000000FF000000ULL) | \
((ULWord64(__val__)>>24) & 0x0000000000FF0000ULL) | \
((ULWord64(__val__)>>40) & 0x000000000000FF00ULL) | \
((ULWord64(__val__)>>56) & 0x00000000000000FFULL) )
#if AJATargetBigEndian // BigEndian (BE) target host
// BigEndian-to-host (NetworkByteOrder-to-host) (native)
#define NTV2EndianSwap16BtoH(__val__) (__val__)
#define NTV2EndianSwap16HtoB(__val__) (__val__)
#define NTV2EndianSwap32BtoH(__val__) (__val__)
#define NTV2EndianSwap32HtoB(__val__) (__val__)
#define NTV2EndianSwap64BtoH(__val__) (__val__)
#define NTV2EndianSwap64HtoB(__val__) (__val__)
// LittleEndian-to-host (translate)
#define NTV2EndianSwap16LtoH(__val__) NTV2EndianSwap16(__val__)
#define NTV2EndianSwap16HtoL(__val__) NTV2EndianSwap16(__val__)
#define NTV2EndianSwap32LtoH(__val__) NTV2EndianSwap32(__val__)
#define NTV2EndianSwap32HtoL(__val__) NTV2EndianSwap32(__val__)
#define NTV2EndianSwap64LtoH(__val__) NTV2EndianSwap64(__val__)
#define NTV2EndianSwap64HtoL(__val__) NTV2EndianSwap64(__val__)
#else // LittleEndian (LE) target host
// BigEndian-to-host (NetworkByteOrder-to-host) (translate)
#define NTV2EndianSwap16BtoH(__val__) NTV2EndianSwap16(__val__)
#define NTV2EndianSwap16HtoB(__val__) NTV2EndianSwap16(__val__)
#define NTV2EndianSwap32BtoH(__val__) NTV2EndianSwap32(__val__)
#define NTV2EndianSwap32HtoB(__val__) NTV2EndianSwap32(__val__)
#define NTV2EndianSwap64BtoH(__val__) NTV2EndianSwap64(__val__)
#define NTV2EndianSwap64HtoB(__val__) NTV2EndianSwap64(__val__)
// LittleEndian-to-host (native)
#define NTV2EndianSwap16LtoH(__val__) (__val__)
#define NTV2EndianSwap16HtoL(__val__) (__val__)
#define NTV2EndianSwap32LtoH(__val__) (__val__)
#define NTV2EndianSwap32HtoL(__val__) (__val__)
#define NTV2EndianSwap64LtoH(__val__) (__val__)
#define NTV2EndianSwap64HtoL(__val__) (__val__)
#endif
#endif // NTV2ENDIAN_H