Coverage Report

Created: 2025-08-26 06:38

/src/rtpproxy/external/libelperiodic/src/prdic_pfd.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2014-2019 Sippy Software, Inc., http://www.sippysoft.com
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 * 1. Redistributions of source code must retain the above copyright
9
 *    notice, this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright
11
 *    notice, this list of conditions and the following disclaimer in the
12
 *    documentation and/or other materials provided with the distribution.
13
 *
14
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
 * SUCH DAMAGE.
25
 */
26
27
#include <sys/time.h>
28
#include <assert.h>
29
#include <math.h>
30
#include <string.h>
31
32
#include "prdic_math.h"
33
#include "prdic_timespecops.h"
34
#include "prdic_pfd.h"
35
36
void
37
_prdic_PFD_init(struct _prdic_PFD *pfd_p)
38
0
{
39
40
0
    memset(pfd_p, '\0', sizeof(struct _prdic_PFD));
41
0
}
42
43
double
44
_prdic_PFD_get_error(struct _prdic_PFD *pfd_p, const struct timespec *tclk)
45
0
{
46
0
    double err0r;
47
0
    struct timespec next_tclk, ttclk;
48
49
0
    SEC(&next_tclk) = SEC(tclk) + 1;
50
0
    NSEC(&next_tclk) = 0;
51
0
    if (timespeciszero(&pfd_p->target_tclk)) {
52
0
        pfd_p->target_tclk = next_tclk;
53
0
        return (0.0);
54
0
    }
55
56
0
    timespecsub2(&ttclk, &pfd_p->target_tclk, tclk);
57
0
    err0r = timespec2dtime(&ttclk);
58
59
0
    pfd_p->target_tclk = next_tclk;
60
0
    if (err0r > 0) {
61
0
        SEC(&pfd_p->target_tclk) += 1;
62
0
    }
63
64
0
    return (err0r);
65
0
}
66
67
void
68
_prdic_PFD_reset(struct _prdic_PFD *pfd_p)
69
0
{
70
71
0
    SEC(&pfd_p->target_tclk) = 0;
72
0
    NSEC(&pfd_p->target_tclk) = 0;
73
0
}