Coverage Report

Created: 2025-12-31 07:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavutil/lfg.h
Line
Count
Source
1
/*
2
 * Lagged Fibonacci PRNG
3
 * Copyright (c) 2008 Michael Niedermayer
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
22
#ifndef AVUTIL_LFG_H
23
#define AVUTIL_LFG_H
24
25
#include <stdint.h>
26
27
/**
28
 * Context structure for the Lagged Fibonacci PRNG.
29
 * The exact layout, types and content of this struct may change and should
30
 * not be accessed directly. Only its `sizeof()` is guaranteed to stay the same
31
 * to allow easy instantiation.
32
 */
33
typedef struct AVLFG {
34
    unsigned int state[64];
35
    int index;
36
} AVLFG;
37
38
void av_lfg_init(AVLFG *c, unsigned int seed);
39
40
/**
41
 * Seed the state of the ALFG using binary data.
42
 *
43
 * @return 0 on success, negative value (AVERROR) on failure.
44
 */
45
int av_lfg_init_from_data(AVLFG *c, const uint8_t *data, unsigned int length);
46
47
/**
48
 * Get the next random unsigned 32-bit number using an ALFG.
49
 *
50
 * Please also consider a simple LCG like state= state*1664525+1013904223,
51
 * it may be good enough and faster for your specific use case.
52
 */
53
375M
static inline unsigned int av_lfg_get(AVLFG *c){
54
375M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
375M
    c->index += 1U;
56
375M
    return a;
57
375M
}
Unexecuted instantiation: atrac9dec.c:av_lfg_get
lfg.c:av_lfg_get
Line
Count
Source
53
2.06M
static inline unsigned int av_lfg_get(AVLFG *c){
54
2.06M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
2.06M
    c->index += 1U;
56
2.06M
    return a;
57
2.06M
}
ac3dec_float.c:av_lfg_get
Line
Count
Source
53
50.3M
static inline unsigned int av_lfg_get(AVLFG *c){
54
50.3M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
50.3M
    c->index += 1U;
56
50.3M
    return a;
57
50.3M
}
mpc8.c:av_lfg_get
Line
Count
Source
53
3.60M
static inline unsigned int av_lfg_get(AVLFG *c){
54
3.60M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
3.60M
    c->index += 1U;
56
3.60M
    return a;
57
3.60M
}
Unexecuted instantiation: mpc.c:av_lfg_get
Unexecuted instantiation: cinepakenc.c:av_lfg_get
elbg.c:av_lfg_get
Line
Count
Source
53
7.62M
static inline unsigned int av_lfg_get(AVLFG *c){
54
7.62M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
7.62M
    c->index += 1U;
56
7.62M
    return a;
57
7.62M
}
Unexecuted instantiation: roqvideoenc.c:av_lfg_get
nellymoserdec.c:av_lfg_get
Line
Count
Source
53
42.7M
static inline unsigned int av_lfg_get(AVLFG *c){
54
42.7M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
42.7M
    c->index += 1U;
56
42.7M
    return a;
57
42.7M
}
mpc7.c:av_lfg_get
Line
Count
Source
53
2.98M
static inline unsigned int av_lfg_get(AVLFG *c){
54
2.98M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
2.98M
    c->index += 1U;
56
2.98M
    return a;
57
2.98M
}
Unexecuted instantiation: a64multienc.c:av_lfg_get
Unexecuted instantiation: msvideo1enc.c:av_lfg_get
cngdec.c:av_lfg_get
Line
Count
Source
53
129M
static inline unsigned int av_lfg_get(AVLFG *c){
54
129M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
129M
    c->index += 1U;
56
129M
    return a;
57
129M
}
ac3dec_fixed.c:av_lfg_get
Line
Count
Source
53
32.4M
static inline unsigned int av_lfg_get(AVLFG *c){
54
32.4M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
32.4M
    c->index += 1U;
56
32.4M
    return a;
57
32.4M
}
amrwbdec.c:av_lfg_get
Line
Count
Source
53
49.4M
static inline unsigned int av_lfg_get(AVLFG *c){
54
49.4M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
49.4M
    c->index += 1U;
56
49.4M
    return a;
57
49.4M
}
cook.c:av_lfg_get
Line
Count
Source
53
54.3M
static inline unsigned int av_lfg_get(AVLFG *c){
54
54.3M
    unsigned a = c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
55
54.3M
    c->index += 1U;
56
54.3M
    return a;
57
54.3M
}
58
59
/**
60
 * Get the next random unsigned 32-bit number using a MLFG.
61
 *
62
 * Please also consider av_lfg_get() above, it is faster.
63
 */
64
0
static inline unsigned int av_mlfg_get(AVLFG *c){
65
0
    unsigned int a= c->state[(c->index-55) & 63];
66
0
    unsigned int b= c->state[(c->index-24) & 63];
67
0
    a = c->state[c->index & 63] = 2*a*b+a+b;
68
0
    c->index += 1U;
69
0
    return a;
70
0
}
Unexecuted instantiation: atrac9dec.c:av_mlfg_get
Unexecuted instantiation: lfg.c:av_mlfg_get
Unexecuted instantiation: ac3dec_float.c:av_mlfg_get
Unexecuted instantiation: mpc8.c:av_mlfg_get
Unexecuted instantiation: mpc.c:av_mlfg_get
Unexecuted instantiation: cinepakenc.c:av_mlfg_get
Unexecuted instantiation: elbg.c:av_mlfg_get
Unexecuted instantiation: roqvideoenc.c:av_mlfg_get
Unexecuted instantiation: nellymoserdec.c:av_mlfg_get
Unexecuted instantiation: mpc7.c:av_mlfg_get
Unexecuted instantiation: a64multienc.c:av_mlfg_get
Unexecuted instantiation: msvideo1enc.c:av_mlfg_get
Unexecuted instantiation: cngdec.c:av_mlfg_get
Unexecuted instantiation: ac3dec_fixed.c:av_mlfg_get
Unexecuted instantiation: amrwbdec.c:av_mlfg_get
Unexecuted instantiation: cook.c:av_mlfg_get
71
72
/**
73
 * Get the next two numbers generated by a Box-Muller Gaussian
74
 * generator using the random numbers issued by lfg.
75
 *
76
 * @param lfg pointer to the context structure
77
 * @param out array where the two generated numbers are placed
78
 */
79
void av_bmg_get(AVLFG *lfg, double out[2]);
80
81
#endif /* AVUTIL_LFG_H */