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