Coverage Report

Created: 2026-01-25 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/ffmpeg/libavformat/avformat_internal.h
Line
Count
Source
1
/*
2
 * This file is part of FFmpeg.
3
 *
4
 * FFmpeg is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * FFmpeg is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public
15
 * License along with FFmpeg; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
 */
18
19
/*
20
 * APIs internal to the generic avformat layer.
21
 *
22
 * MUST NOT be included by individual muxers or demuxers.
23
 */
24
25
#ifndef AVFORMAT_AVFORMAT_INTERNAL_H
26
#define AVFORMAT_AVFORMAT_INTERNAL_H
27
28
#include <stdint.h>
29
30
#include "avformat.h"
31
#include "internal.h"
32
33
typedef struct FormatContextInternal {
34
    FFFormatContext fc;
35
36
    union {
37
        // muxing only
38
        struct {
39
            /**
40
             * Whether or not avformat_init_output has already been called
41
             */
42
            int initialized;
43
44
            /**
45
             * Whether or not avformat_init_output fully initialized streams
46
             */
47
            int streams_initialized;
48
49
50
            /**
51
             * Number of streams relevant for interleaving.
52
             * Muxing only.
53
             */
54
            int nb_interleaved_streams;
55
56
            /**
57
             * The interleavement function in use. Always set.
58
             */
59
            int (*interleave_packet)(struct AVFormatContext *s, AVPacket *pkt,
60
                                     int flush, int has_packet);
61
62
#if FF_API_COMPUTE_PKT_FIELDS2
63
            int missing_ts_warning;
64
#endif
65
        };
66
67
        // demuxing only
68
        struct {
69
            /**
70
             * Raw packets from the demuxer, prior to parsing and decoding.
71
             * This buffer is used for buffering packets until the codec can
72
             * be identified, as parsing cannot be done without knowing the
73
             * codec.
74
             */
75
            PacketList raw_packet_buffer;
76
77
            /**
78
             * Sum of the size of packets in raw_packet_buffer, in bytes.
79
             */
80
            int raw_packet_buffer_size;
81
82
            /**
83
             * Packets split by the parser get queued here.
84
             */
85
            PacketList parse_queue;
86
87
            /**
88
             * Contexts and child contexts do not contain a metadata option
89
             */
90
            int metafree;
91
92
            /**
93
             * Set if chapter ids are strictly monotonic.
94
             */
95
            int chapter_ids_monotonic;
96
        };
97
    };
98
} FormatContextInternal;
99
100
static av_always_inline FormatContextInternal *ff_fc_internal(AVFormatContext *s)
101
2.72k
{
102
2.72k
    return (FormatContextInternal*)s;
103
2.72k
}
avformat.c:ff_fc_internal
Line
Count
Source
101
1.36k
{
102
1.36k
    return (FormatContextInternal*)s;
103
1.36k
}
demux.c:ff_fc_internal
Line
Count
Source
101
1.36k
{
102
1.36k
    return (FormatContextInternal*)s;
103
1.36k
}
Unexecuted instantiation: demux_utils.c:ff_fc_internal
Unexecuted instantiation: options.c:ff_fc_internal
Unexecuted instantiation: seek.c:ff_fc_internal
Unexecuted instantiation: allformats.c:ff_fc_internal
104
105
0
#define RELATIVE_TS_BASE (INT64_MAX - (1LL << 48))
106
107
static av_always_inline int is_relative(int64_t ts)
108
0
{
109
0
    return ts > (RELATIVE_TS_BASE - (1LL << 48));
110
0
}
Unexecuted instantiation: avformat.c:is_relative
Unexecuted instantiation: demux.c:is_relative
Unexecuted instantiation: demux_utils.c:is_relative
Unexecuted instantiation: options.c:is_relative
Unexecuted instantiation: seek.c:is_relative
Unexecuted instantiation: allformats.c:is_relative
111
112
/**
113
 * Wrap a given time stamp, if there is an indication for an overflow
114
 *
115
 * @param st stream
116
 * @param timestamp the time stamp to wrap
117
 * @return resulting time stamp
118
 */
119
int64_t ff_wrap_timestamp(const AVStream *st, int64_t timestamp);
120
121
typedef struct FFStreamGroup {
122
    /**
123
     * The public context.
124
     */
125
    AVStreamGroup pub;
126
127
    AVFormatContext *fmtctx;
128
} FFStreamGroup;
129
130
static av_always_inline FFStreamGroup *ffstreamgroup(AVStreamGroup *stg)
131
0
{
132
0
    return (FFStreamGroup*)stg;
133
0
}
Unexecuted instantiation: avformat.c:ffstreamgroup
Unexecuted instantiation: demux.c:ffstreamgroup
Unexecuted instantiation: demux_utils.c:ffstreamgroup
Unexecuted instantiation: options.c:ffstreamgroup
Unexecuted instantiation: seek.c:ffstreamgroup
Unexecuted instantiation: allformats.c:ffstreamgroup
134
135
static av_always_inline const FFStreamGroup *cffstreamgroup(const AVStreamGroup *stg)
136
0
{
137
0
    return (const FFStreamGroup*)stg;
138
0
}
Unexecuted instantiation: avformat.c:cffstreamgroup
Unexecuted instantiation: demux.c:cffstreamgroup
Unexecuted instantiation: demux_utils.c:cffstreamgroup
Unexecuted instantiation: options.c:cffstreamgroup
Unexecuted instantiation: seek.c:cffstreamgroup
Unexecuted instantiation: allformats.c:cffstreamgroup
139
140
void ff_flush_packet_queue(AVFormatContext *s);
141
142
const struct AVCodec *ff_find_decoder(AVFormatContext *s, const AVStream *st,
143
                                      enum AVCodecID codec_id);
144
145
/**
146
 * Frees a stream without modifying the corresponding AVFormatContext.
147
 * Must only be called if the latter doesn't matter or if the stream
148
 * is not yet attached to an AVFormatContext.
149
 */
150
void ff_free_stream(AVStream **st);
151
152
/**
153
 * Frees a stream group without modifying the corresponding AVFormatContext.
154
 * Must only be called if the latter doesn't matter or if the stream
155
 * is not yet attached to an AVFormatContext.
156
 */
157
void ff_free_stream_group(AVStreamGroup **pstg);
158
159
int ff_is_intra_only(enum AVCodecID id);
160
161
struct FFOutputFormat;
162
struct FFInputFormat;
163
void avpriv_register_devices(const struct FFOutputFormat * const o[],
164
                             const struct FFInputFormat * const i[]);
165
166
#endif // AVFORMAT_AVFORMAT_INTERNAL_H