vlx lib
utilities.cpp
- Committer:
- vijaynvr
- Date:
- 2015-02-08
- Revision:
- 0:bc9f26b5dadf
File content as of revision 0:bc9f26b5dadf:
/******************************************************************************* ################################################################################ # (C) STMicroelectronics 2014 # # This program is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License version 2 and only version 2 as # published by the Free Software Foundation. # # 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. # #------------------------------------------------------------------------------ # Imaging Division ################################################################################ ********************************************************************************/ /** * @file utilities.cpp * * Copyright (C) 2014 ST MicroElectronics * * Utilities module definition. * */ #include "utilities.h" #include "platform.h" #ifndef __KERNEL__ #include <cstring> #include <cstdlib> #include <stdio.h> #else #include <linux/kernel.h> #include <linux/string.h> #endif #ifndef __KERNEL__ int32_t roundFloatToInt(float_t floatVal) { floatVal += 0.5f; return (int32_t)floatVal; } #endif int32_t unPackBytes(int32_t data, uint8_t *byteArray, int32_t size) { const int32_t cByteBitShift = 8; const int32_t cByteMask = 0xFF; int32_t bitShift = cByteBitShift * (size - 1); int32_t byteIndex = 0; for (byteIndex = 0; byteIndex < size; byteIndex++) { int32_t mask = cByteMask << bitShift; int32_t value = (data & mask) >> bitShift; bitShift -= cByteBitShift; byteArray[byteIndex] = (uint8_t)(value); } return 0; } uint32_t packBytes(uint8_t *byteArray, uint32_t size) { const int cBitsPerByte = 8; uint32_t cBytesPerInt = 4; uint32_t data = 0; unsigned int index = 0; if(size > cBytesPerInt) { size = cBytesPerInt; } for(index = 0; index < size; index++) { if(index > 0) { data <<= cBitsPerByte; } data += byteArray[index]; } return data; } int32_t array2HexCString(uint8_t *byteArray, char *str, uint32_t count) { uint32_t i; sprintf(str, "0x"); // int32_t length = count; // for(int32_t i = 0; i < count; i++) for(i = 0; i < count; i++) { str += 2; sprintf(str, "%02X", (uint32_t)byteArray[i]); } return 0; } #ifndef __KERNEL__ uint32_t encodeTo9_7_Format(float_t value) { const float_t cShiftFactor = 128.0f; const uint32_t cMax = 65535; uint32_t encodedVal = (uint32_t)roundFloatToInt(value * cShiftFactor); if (encodedVal > cMax) { encodedVal = cMax; } return encodedVal; } float_t decodeFrom9_7_Format(uint32_t value) { const float_t cShiftFactor = 128.0f; return (float_t)value / cShiftFactor; } uint32_t encodeTo4_4_Format(float_t value) { const float_t cShiftFactor = 16.0f; const uint32_t cMax = 255; uint32_t encodedVal = (uint32_t)roundFloatToInt(value * cShiftFactor); if (encodedVal > cMax) { encodedVal = cMax; } return encodedVal; } float_t decodeFrom4_4_Format(uint32_t value) { const float_t cShiftFactor = 16.0f; return (float_t)value / cShiftFactor; } #endif