1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2011 Mans Rullgard 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVUTIL_INTFLOAT_H 22cabdff1aSopenharmony_ci#define AVUTIL_INTFLOAT_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include <stdint.h> 25cabdff1aSopenharmony_ci#include "attributes.h" 26cabdff1aSopenharmony_ci 27cabdff1aSopenharmony_ciunion av_intfloat32 { 28cabdff1aSopenharmony_ci uint32_t i; 29cabdff1aSopenharmony_ci float f; 30cabdff1aSopenharmony_ci}; 31cabdff1aSopenharmony_ci 32cabdff1aSopenharmony_ciunion av_intfloat64 { 33cabdff1aSopenharmony_ci uint64_t i; 34cabdff1aSopenharmony_ci double f; 35cabdff1aSopenharmony_ci}; 36cabdff1aSopenharmony_ci 37cabdff1aSopenharmony_ci/** 38cabdff1aSopenharmony_ci * Reinterpret a 32-bit integer as a float. 39cabdff1aSopenharmony_ci */ 40cabdff1aSopenharmony_cistatic av_always_inline float av_int2float(uint32_t i) 41cabdff1aSopenharmony_ci{ 42cabdff1aSopenharmony_ci union av_intfloat32 v; 43cabdff1aSopenharmony_ci v.i = i; 44cabdff1aSopenharmony_ci return v.f; 45cabdff1aSopenharmony_ci} 46cabdff1aSopenharmony_ci 47cabdff1aSopenharmony_ci/** 48cabdff1aSopenharmony_ci * Reinterpret a float as a 32-bit integer. 49cabdff1aSopenharmony_ci */ 50cabdff1aSopenharmony_cistatic av_always_inline uint32_t av_float2int(float f) 51cabdff1aSopenharmony_ci{ 52cabdff1aSopenharmony_ci union av_intfloat32 v; 53cabdff1aSopenharmony_ci v.f = f; 54cabdff1aSopenharmony_ci return v.i; 55cabdff1aSopenharmony_ci} 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_ci/** 58cabdff1aSopenharmony_ci * Reinterpret a 64-bit integer as a double. 59cabdff1aSopenharmony_ci */ 60cabdff1aSopenharmony_cistatic av_always_inline double av_int2double(uint64_t i) 61cabdff1aSopenharmony_ci{ 62cabdff1aSopenharmony_ci union av_intfloat64 v; 63cabdff1aSopenharmony_ci v.i = i; 64cabdff1aSopenharmony_ci return v.f; 65cabdff1aSopenharmony_ci} 66cabdff1aSopenharmony_ci 67cabdff1aSopenharmony_ci/** 68cabdff1aSopenharmony_ci * Reinterpret a double as a 64-bit integer. 69cabdff1aSopenharmony_ci */ 70cabdff1aSopenharmony_cistatic av_always_inline uint64_t av_double2int(double f) 71cabdff1aSopenharmony_ci{ 72cabdff1aSopenharmony_ci union av_intfloat64 v; 73cabdff1aSopenharmony_ci v.f = f; 74cabdff1aSopenharmony_ci return v.i; 75cabdff1aSopenharmony_ci} 76cabdff1aSopenharmony_ci 77cabdff1aSopenharmony_ci#endif /* AVUTIL_INTFLOAT_H */ 78