FFmpeg
2.1.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
libavutil
softfloat.c
Go to the documentation of this file.
1
/*
2
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg 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
* FFmpeg 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 FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <inttypes.h>
22
#include <stdio.h>
23
#include "
softfloat.h
"
24
#include "
common.h
"
25
#include "
log.h
"
26
27
#undef printf
28
29
int
main
(
void
){
30
SoftFloat
one=
av_int2sf
(1, 0);
31
SoftFloat
sf1, sf2;
32
double
d1, d2;
33
int
i, j;
34
av_log_set_level
(
AV_LOG_DEBUG
);
35
36
d1= 1;
37
for
(i= 0; i<10; i++){
38
d1= 1/(d1+1);
39
}
40
printf(
"test1 double=%d\n"
, (
int
)(d1 * (1<<24)));
41
42
sf1= one;
43
for
(i= 0; i<10; i++){
44
sf1=
av_div_sf
(one,
av_normalize_sf
(
av_add_sf
(one, sf1)));
45
}
46
printf(
"test1 sf =%d\n"
,
av_sf2int
(sf1, 24));
47
48
49
for
(i= 0; i<100; i++){
50
START_TIMER
51
d1= i;
52
d2= i/100.0;
53
for
(j= 0; j<1000; j++){
54
d1= (d1+1)*d2;
55
}
56
STOP_TIMER
(
"float add mul"
)
57
}
58
printf(
"test2 double=%d\n"
, (
int
)(d1 * (1<<24)));
59
60
for
(i= 0; i<100; i++){
61
START_TIMER
62
sf1=
av_int2sf
(i, 0);
63
sf2=
av_div_sf
(
av_int2sf
(i, 2),
av_int2sf
(200, 3));
64
for
(j= 0; j<1000; j++){
65
sf1=
av_mul_sf
(
av_add_sf
(sf1, one),sf2);
66
}
67
STOP_TIMER
(
"softfloat add mul"
)
68
}
69
printf(
"test2 sf =%d (%d %d)\n"
,
av_sf2int
(sf1, 24), sf1.
exp
, sf1.
mant
);
70
return
0;
71
}
SoftFloat
Definition:
softfloat.h:31
av_log_set_level
void av_log_set_level(int level)
Set the log level.
Definition:
log.c:293
av_div_sf
static av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b)
b has to be normalized and not zero.
Definition:
softfloat.h:89
SoftFloat::mant
int32_t mant
Definition:
softfloat.h:33
av_normalize_sf
static av_const SoftFloat av_normalize_sf(SoftFloat a)
Definition:
softfloat.h:36
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition:
avcodec.h:4168
av_sf2int
static av_const int av_sf2int(SoftFloat v, int frac_bits)
Rounding is to -inf.
Definition:
softfloat.h:120
START_TIMER
#define START_TIMER
Definition:
timer.h:74
av_add_sf
static av_const SoftFloat av_add_sf(SoftFloat a, SoftFloat b)
Definition:
softfloat.h:101
softfloat.h
log.h
av_mul_sf
static av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b)
Definition:
softfloat.h:79
SoftFloat::exp
int32_t exp
Definition:
softfloat.h:32
STOP_TIMER
#define STOP_TIMER(id)
Definition:
timer.h:75
av_int2sf
static av_const SoftFloat av_int2sf(int v, int frac_bits)
Definition:
softfloat.h:113
main
int main(int argc, char **argv)
Definition:
main.c:22
common.h
common internal and external API header
Generated on Wed Nov 20 2013 08:50:07 for FFmpeg by
1.8.5