1 /* 2 * Copyright (c) 2011 Mans Rullgard 3 * 4 * This file is part of Libav. 5 * 6 * Libav is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * Libav is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with Libav; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 module ffmpeg.libavutil.intfloat; 21 import std.stdint; 22 import std.math : floor; 23 24 @nogc nothrow extern(C): 25 26 union av_intfloat32 { 27 uint32_t i; 28 float f; 29 }; 30 31 union av_intfloat64 { 32 uint64_t i; 33 double f; 34 }; 35 36 /** 37 * Reinterpret a 32-bit integer as a float. 38 */ 39 static float av_int2float(uint32_t i) 40 { 41 return float(i); 42 } 43 44 /** 45 * Reinterpret a float as a 32-bit integer. 46 */ 47 static uint32_t av_float2int(float f) 48 { 49 return cast(uint32_t)floor(f); 50 } 51 52 /** 53 * Reinterpret a 64-bit integer as a double. 54 */ 55 static double av_int2double(uint64_t i) 56 { 57 return double(i); 58 } 59 60 /** 61 * Reinterpret a double as a 64-bit integer. 62 */ 63 static uint64_t av_double2int(double f) 64 { 65 return cast(uint64_t)floor(f); 66 } 67