diff --git a/xbmc/utils/EndianSwap.cpp b/xbmc/utils/EndianSwap.cpp new file mode 100644 index 0000000000000..c32b30516a747 --- /dev/null +++ b/xbmc/utils/EndianSwap.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2012 Team XBMC + * http://www.xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + */ + +#include "EndianSwap.h" + +/* based on libavformat/spdif.c */ +void Endian_Swap16_buf(uint16_t *dst, uint16_t *src, int w) +{ + int i; + + for (i = 0; i + 8 <= w; i += 8) { + dst[i + 0] = Endian_Swap16(src[i + 0]); + dst[i + 1] = Endian_Swap16(src[i + 1]); + dst[i + 2] = Endian_Swap16(src[i + 2]); + dst[i + 3] = Endian_Swap16(src[i + 3]); + dst[i + 4] = Endian_Swap16(src[i + 4]); + dst[i + 5] = Endian_Swap16(src[i + 5]); + dst[i + 6] = Endian_Swap16(src[i + 6]); + dst[i + 7] = Endian_Swap16(src[i + 7]); + } + + for (; i < w; i++) + dst[i + 0] = Endian_Swap16(src[i + 0]); +} + diff --git a/xbmc/utils/EndianSwap.h b/xbmc/utils/EndianSwap.h index e9f96eeb8d94e..9538a240b96a3 100644 --- a/xbmc/utils/EndianSwap.h +++ b/xbmc/utils/EndianSwap.h @@ -19,7 +19,7 @@ * */ - /* Functions taken from SDL (SDL_endian.h) */ + /* Endian_SwapXX functions taken from SDL (SDL_endian.h) */ #ifndef __ENDIAN_SWAP_H__ #define __ENDIAN_SWAP_H__ @@ -83,6 +83,8 @@ static __inline__ uint64_t Endian_Swap64(uint64_t x) { } +void Endian_Swap16_buf(uint16_t *dst, uint16_t *src, int w); + #ifndef WORDS_BIGENDIAN #define Endian_SwapLE16(X) (X) #define Endian_SwapLE32(X) (X) diff --git a/xbmc/utils/Makefile b/xbmc/utils/Makefile index 79da051ef3042..1f7b31ab85b06 100644 --- a/xbmc/utils/Makefile +++ b/xbmc/utils/Makefile @@ -11,6 +11,7 @@ SRCS=AlarmClock.cpp \ CryptThreading.cpp \ DownloadQueue.cpp \ DownloadQueueManager.cpp \ + EndianSwap.cpp \ Fanart.cpp \ fastmemcpy.c \ fastmemcpy-arm.S \