../../../ffmpeg/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
176 / 205
85.9%
Branches:
130 / 174
74.7%
Functions:
10 / 11
90.9%

libavformat/format.c
Line Branch Exec Source
1 /*
2 * Format register and lookup
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
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 #include "config_components.h"
23
24 #include "libavutil/avstring.h"
25 #include "libavutil/mem.h"
26 #include "libavutil/opt.h"
27
28 #include "avio_internal.h"
29 #include "avformat.h"
30 #include "demux.h"
31 #include "id3v2.h"
32 #include "internal.h"
33 #include "url.h"
34
35
36 /**
37 * @file
38 * Format register and lookup
39 */
40
41 1547270 int av_match_ext(const char *filename, const char *extensions)
42 {
43 const char *ext;
44
45
2/2
✓ Branch 2 → 3 taken 621720 times.
✓ Branch 2 → 4 taken 925550 times.
1547270 if (!filename)
46 621720 return 0;
47
48 925550 ext = strrchr(filename, '.');
49
2/2
✓ Branch 4 → 5 taken 908319 times.
✓ Branch 4 → 7 taken 17231 times.
925550 if (ext)
50 908319 return av_match_name(ext + 1, extensions);
51 17231 return 0;
52 }
53
54 500 int ff_match_url_ext(const char *url, const char *extensions)
55 {
56 const char *ext;
57 URLComponents uc;
58 int ret;
59 char scratchpad[128];
60
61
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 500 times.
500 if (!url)
62 ✗ return 0;
63
64 500 ret = ff_url_decompose(&uc, url, NULL);
65
2/4
✓ Branch 5 → 6 taken 500 times.
✗ Branch 5 → 7 not taken.
✓ Branch 6 → 7 taken 500 times.
✗ Branch 6 → 8 not taken.
500 if (ret < 0 || !URL_COMPONENT_HAVE(uc, scheme))
66 500 return ret;
67
0/4
✗ Branch 10 → 11 not taken.
✗ Branch 10 → 12 not taken.
✗ Branch 11 → 9 not taken.
✗ Branch 11 → 12 not taken.
✗ for (ext = uc.query; *ext != '.' && ext > uc.path; ext--)
68 ;
69
70
0/2
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
✗ if (*ext != '.')
71 ✗ return 0;
72
0/2
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 16 not taken.
✗ if (uc.query - ext > sizeof(scratchpad))
73 ✗ return AVERROR(ENOMEM); //not enough memory in our scratchpad
74 ✗ av_strlcpy(scratchpad, ext + 1, uc.query - ext);
75
76 ✗ return av_match_name(scratchpad, extensions);
77 }
78
79 9312 const AVOutputFormat *av_guess_format(const char *short_name, const char *filename,
80 const char *mime_type)
81 {
82 9312 const AVOutputFormat *fmt = NULL;
83 9312 const AVOutputFormat *fmt_found = NULL;
84 9312 void *i = 0;
85 int score_max, score;
86
87 /* specific test for image sequences */
88 #if CONFIG_IMAGE2_MUXER
89
5/6
✓ Branch 2 → 3 taken 217 times.
✓ Branch 2 → 10 taken 9095 times.
✓ Branch 3 → 4 taken 217 times.
✗ Branch 3 → 10 not taken.
✓ Branch 5 → 6 taken 57 times.
✓ Branch 5 → 10 taken 160 times.
9529 if (!short_name && filename &&
90
2/2
✓ Branch 7 → 8 taken 52 times.
✓ Branch 7 → 10 taken 5 times.
274 av_filename_number_test(filename) &&
91 57 ff_guess_image2_codec(filename) != AV_CODEC_ID_NONE) {
92 52 return av_guess_format("image2", NULL, NULL);
93 }
94 #endif
95 /* Find the proper file type. */
96 9260 score_max = 0;
97
2/2
✓ Branch 32 → 11 taken 1777740 times.
✓ Branch 32 → 33 taken 9260 times.
1787000 while ((fmt = av_muxer_iterate(&i))) {
98
1/4
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 14 taken 1777740 times.
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 14 not taken.
1777740 if (fmt->flags & AVFMT_EXPERIMENTAL && !short_name)
99 ✗ continue;
100 1777740 score = 0;
101
5/6
✓ Branch 14 → 15 taken 1777740 times.
✗ Branch 14 → 19 not taken.
✓ Branch 15 → 16 taken 1746060 times.
✓ Branch 15 → 19 taken 31680 times.
✓ Branch 17 → 18 taken 9138 times.
✓ Branch 17 → 19 taken 1736922 times.
1777740 if (fmt->name && short_name && av_match_name(short_name, fmt->name))
102 9138 score += 100;
103
3/6
✓ Branch 19 → 20 taken 703760 times.
✓ Branch 19 → 23 taken 1073980 times.
✗ Branch 20 → 21 not taken.
✓ Branch 20 → 23 taken 703760 times.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 23 not taken.
1777740 if (fmt->mime_type && mime_type && !strcmp(fmt->mime_type, mime_type))
104 ✗ score += 10;
105
6/6
✓ Branch 23 → 24 taken 32064 times.
✓ Branch 23 → 28 taken 1745676 times.
✓ Branch 24 → 25 taken 23547 times.
✓ Branch 24 → 28 taken 8517 times.
✓ Branch 26 → 27 taken 183 times.
✓ Branch 26 → 28 taken 23364 times.
1801287 if (filename && fmt->extensions &&
106 23547 av_match_ext(filename, fmt->extensions)) {
107 183 score += 5;
108 }
109
2/2
✓ Branch 28 → 29 taken 9260 times.
✓ Branch 28 → 30 taken 1768480 times.
1777740 if (score > score_max) {
110 9260 score_max = score;
111 9260 fmt_found = fmt;
112 }
113 }
114 9260 return fmt_found;
115 }
116
117 29260 enum AVCodecID av_guess_codec(const AVOutputFormat *fmt, const char *short_name,
118 const char *filename, const char *mime_type,
119 enum AVMediaType type)
120 {
121
2/4
✓ Branch 3 → 4 taken 29260 times.
✗ Branch 3 → 6 not taken.
✗ Branch 5 → 6 not taken.
✓ Branch 5 → 9 taken 29260 times.
29260 if (av_match_name("segment", fmt->name) || av_match_name("ssegment", fmt->name)) {
122 ✗ const AVOutputFormat *fmt2 = av_guess_format(NULL, filename, NULL);
123
0/2
✗ Branch 7 → 8 not taken.
✗ Branch 7 → 9 not taken.
✗ if (fmt2)
124 ✗ fmt = fmt2;
125 }
126
127
2/2
✓ Branch 9 → 10 taken 10987 times.
✓ Branch 9 → 16 taken 18273 times.
29260 if (type == AVMEDIA_TYPE_VIDEO) {
128 10987 enum AVCodecID codec_id = AV_CODEC_ID_NONE;
129
130 #if CONFIG_IMAGE2_MUXER || CONFIG_IMAGE2PIPE_MUXER
131
4/4
✓ Branch 10 → 11 taken 10872 times.
✓ Branch 10 → 12 taken 115 times.
✓ Branch 11 → 12 taken 13 times.
✓ Branch 11 → 13 taken 10859 times.
10987 if (!strcmp(fmt->name, "image2") || !strcmp(fmt->name, "image2pipe")) {
132 128 codec_id = ff_guess_image2_codec(filename);
133 }
134 #endif
135
2/2
✓ Branch 13 → 14 taken 10867 times.
✓ Branch 13 → 15 taken 120 times.
10987 if (codec_id == AV_CODEC_ID_NONE)
136 10867 codec_id = fmt->video_codec;
137 10987 return codec_id;
138
2/2
✓ Branch 16 → 17 taken 9394 times.
✓ Branch 16 → 18 taken 8879 times.
18273 } else if (type == AVMEDIA_TYPE_AUDIO)
139 9394 return fmt->audio_codec;
140
2/2
✓ Branch 18 → 19 taken 34 times.
✓ Branch 18 → 20 taken 8845 times.
8879 else if (type == AVMEDIA_TYPE_SUBTITLE)
141 34 return fmt->subtitle_codec;
142 else
143 8845 return AV_CODEC_ID_NONE;
144 }
145
146 4151 const AVInputFormat *av_find_input_format(const char *short_name)
147 {
148 4151 const AVInputFormat *fmt = NULL;
149 4151 void *i = 0;
150
1/2
✓ Branch 8 → 3 taken 650979 times.
✗ Branch 8 → 9 not taken.
650979 while ((fmt = av_demuxer_iterate(&i)))
151
2/2
✓ Branch 4 → 5 taken 4151 times.
✓ Branch 4 → 6 taken 646828 times.
650979 if (av_match_name(short_name, fmt->name))
152 4151 return fmt;
153 ✗ return NULL;
154 }
155
156 static const AVInputFormat *
157 12998 probe_input_format_internal(const AVProbeData *pd, int is_opened,
158 int *score_ret, int *undecided)
159 {
160 12998 AVProbeData lpd = *pd;
161 12998 const AVInputFormat *fmt1 = NULL;
162 12998 const AVInputFormat *fmt = NULL;
163 12998 int score, score_max = 0;
164 12998 void *i = 0;
165 const static uint8_t zerobuffer[AVPROBE_PADDING_SIZE];
166 enum nodat {
167 NO_ID3,
168 ID3_ALMOST_GREATER_PROBE,
169 ID3_GREATER_PROBE,
170 ID3_GREATER_MAX_PROBE,
171 12998 } nodat = NO_ID3;
172
173
2/2
✓ Branch 2 → 3 taken 4542 times.
✓ Branch 2 → 4 taken 8456 times.
12998 if (!lpd.buf)
174 4542 lpd.buf = (unsigned char *) zerobuffer;
175
176
4/4
✓ Branch 13 → 14 taken 8556 times.
✓ Branch 13 → 16 taken 4548 times.
✓ Branch 15 → 5 taken 156 times.
✓ Branch 15 → 16 taken 8400 times.
13104 while (lpd.buf_size > 10 && ff_id3v2_match(lpd.buf, ID3v2_DEFAULT_MAGIC)) {
177 156 int id3len = ff_id3v2_tag_len(lpd.buf);
178
2/2
✓ Branch 6 → 7 taken 106 times.
✓ Branch 6 → 10 taken 50 times.
156 if (lpd.buf_size > id3len + 16) {
179
2/2
✓ Branch 7 → 8 taken 40 times.
✓ Branch 7 → 9 taken 66 times.
106 if (lpd.buf_size < 2LL*id3len + 16)
180 40 nodat = ID3_ALMOST_GREATER_PROBE;
181 106 lpd.buf += id3len;
182 106 lpd.buf_size -= id3len;
183
2/2
✓ Branch 10 → 11 taken 1 time.
✓ Branch 10 → 12 taken 49 times.
50 } else if (id3len >= PROBE_BUF_MAX) {
184 1 nodat = ID3_GREATER_MAX_PROBE;
185 1 break;
186 } else {
187 49 nodat = ID3_GREATER_PROBE;
188 49 break;
189 }
190 }
191
192
2/2
✓ Branch 56 → 17 taken 4819906 times.
✓ Branch 56 → 57 taken 12998 times.
4832904 while ((fmt1 = av_demuxer_iterate(&i))) {
193
1/2
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 4819906 times.
4819906 if (fmt1->flags & AVFMT_EXPERIMENTAL)
194 ✗ continue;
195
4/4
✓ Branch 19 → 20 taken 1726813 times.
✓ Branch 19 → 22 taken 3093093 times.
✓ Branch 20 → 21 taken 1718357 times.
✓ Branch 20 → 22 taken 8456 times.
4819906 if (!is_opened == !(fmt1->flags & AVFMT_NOFILE) && strcmp(fmt1->name, "image2"))
196 1718357 continue;
197 3101549 score = 0;
198
2/2
✓ Branch 23 → 24 taken 2660835 times.
✓ Branch 23 → 41 taken 440714 times.
3101549 if (ffifmt(fmt1)->read_probe) {
199 2660835 score = ffifmt(fmt1)->read_probe(&lpd);
200
2/2
✓ Branch 26 → 27 taken 10 times.
✓ Branch 26 → 31 taken 2660825 times.
2660835 if (score == AVERROR(EAGAIN)) {
201 10 av_log(NULL, AV_LOG_TRACE, "Probing %s score:undecided size:%d\n",
202 10 fmt1->name, lpd.buf_size);
203
1/2
✓ Branch 28 → 29 taken 10 times.
✗ Branch 28 → 30 not taken.
10 if (undecided)
204 10 *undecided = 1;
205 10 score = 0;
206
2/2
✓ Branch 31 → 32 taken 8404 times.
✓ Branch 31 → 33 taken 2652421 times.
2660825 } else if (score)
207 8404 av_log(NULL, AV_LOG_TRACE, "Probing %s score:%d size:%d\n", fmt1->name, score, lpd.buf_size);
208
4/4
✓ Branch 33 → 34 taken 1268400 times.
✓ Branch 33 → 40 taken 1392435 times.
✓ Branch 35 → 36 taken 3036 times.
✓ Branch 35 → 40 taken 1265364 times.
2660835 if (fmt1->extensions && av_match_ext(lpd.filename, fmt1->extensions)) {
209
3/4
✓ Branch 36 → 37 taken 2957 times.
✓ Branch 36 → 38 taken 78 times.
✓ Branch 36 → 39 taken 1 time.
✗ Branch 36 → 40 not taken.
3036 switch (nodat) {
210 2957 case NO_ID3:
211 2957 score = FFMAX(score, 1);
212 2957 break;
213 78 case ID3_GREATER_PROBE:
214 case ID3_ALMOST_GREATER_PROBE:
215 78 score = FFMAX(score, AVPROBE_SCORE_EXTENSION / 2 - 1);
216 78 break;
217 1 case ID3_GREATER_MAX_PROBE:
218 1 score = FFMAX(score, AVPROBE_SCORE_EXTENSION);
219 1 break;
220 }
221 }
222
2/2
✓ Branch 41 → 42 taken 228312 times.
✓ Branch 41 → 45 taken 212402 times.
440714 } else if (fmt1->extensions) {
223
2/2
✓ Branch 43 → 44 taken 35 times.
✓ Branch 43 → 45 taken 228277 times.
228312 if (av_match_ext(lpd.filename, fmt1->extensions))
224 35 score = AVPROBE_SCORE_EXTENSION;
225 }
226
1/2
✗ Branch 46 → 47 not taken.
✓ Branch 46 → 50 taken 3101549 times.
3101549 if (av_match_name(lpd.mime_type, fmt1->mime_type)) {
227 ✗ int old_score = score;
228 ✗ score += AVPROBE_SCORE_MIME_BONUS;
229
0/2
✗ Branch 47 → 48 not taken.
✗ Branch 47 → 49 not taken.
✗ if (score > AVPROBE_SCORE_MAX) score = AVPROBE_SCORE_MAX;
230 ✗ av_log(NULL, AV_LOG_DEBUG, "Probing %s score:%d increased to %d due to MIME type\n", fmt1->name, old_score, score);
231 }
232
2/2
✓ Branch 50 → 51 taken 7732 times.
✓ Branch 50 → 52 taken 3093817 times.
3101549 if (score > score_max) {
233 7732 score_max = score;
234 7732 fmt = fmt1;
235
2/2
✓ Branch 52 → 53 taken 1584438 times.
✓ Branch 52 → 54 taken 1509379 times.
3093817 } else if (score == score_max)
236 1584438 fmt = NULL;
237 }
238
2/2
✓ Branch 57 → 58 taken 49 times.
✓ Branch 57 → 59 taken 12949 times.
12998 if (nodat == ID3_GREATER_PROBE)
239 49 score_max = FFMIN(AVPROBE_SCORE_EXTENSION / 2 - 1, score_max);
240 12998 *score_ret = score_max;
241
242 12998 return fmt;
243 }
244
245 3454 const AVInputFormat *av_probe_input_format3(const AVProbeData *pd,
246 int is_opened, int *score_ret)
247 {
248 3454 return probe_input_format_internal(pd, is_opened, score_ret, NULL);
249 }
250
251 4542 const AVInputFormat *av_probe_input_format2(const AVProbeData *pd,
252 int is_opened, int *score_max)
253 {
254 int score_ret;
255 const AVInputFormat *fmt;
256 4542 fmt = probe_input_format_internal(pd, is_opened, &score_ret, NULL);
257
2/2
✓ Branch 3 → 4 taken 199 times.
✓ Branch 3 → 5 taken 4343 times.
4542 if (score_ret > *score_max) {
258 199 *score_max = score_ret;
259 199 return fmt;
260 } else
261 4343 return NULL;
262 }
263
264 ✗ const AVInputFormat *av_probe_input_format(const AVProbeData *pd, int is_opened)
265 {
266 ✗ int score = 0;
267 ✗ return probe_input_format_internal(pd, is_opened, &score, NULL);
268 }
269
270 4379 int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt,
271 const char *filename, void *logctx,
272 unsigned int offset, unsigned int max_probe_size)
273 {
274
1/2
✓ Branch 2 → 3 taken 4379 times.
✗ Branch 2 → 4 not taken.
4379 AVProbeData pd = { filename ? filename : "" };
275 4379 uint8_t *buf = NULL;
276 4379 int ret = 0, probe_size, buf_offset = 0;
277 4379 int score = 0;
278 int ret2;
279 4379 int eof = 0;
280
281
2/2
✓ Branch 5 → 6 taken 36 times.
✓ Branch 5 → 7 taken 4343 times.
4379 if (!max_probe_size)
282 36 max_probe_size = PROBE_BUF_MAX;
283
1/2
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 10 taken 4343 times.
4343 else if (max_probe_size < PROBE_BUF_MIN) {
284 ✗ av_log(logctx, AV_LOG_ERROR,
285 "Specified probe size value %u cannot be < %u\n", max_probe_size, PROBE_BUF_MIN);
286 ✗ return AVERROR(EINVAL);
287 }
288
289
1/2
✗ Branch 10 → 11 not taken.
✓ Branch 10 → 12 taken 4379 times.
4379 if (offset >= max_probe_size)
290 ✗ return AVERROR(EINVAL);
291
292
2/2
✓ Branch 12 → 13 taken 4343 times.
✓ Branch 12 → 20 taken 36 times.
4379 if (pb->av_class) {
293 4343 uint8_t *mime_type_opt = NULL;
294 char *semi;
295 4343 av_opt_get(pb, "mime_type", AV_OPT_SEARCH_CHILDREN, &mime_type_opt);
296 4343 pd.mime_type = (const char *)mime_type_opt;
297
1/2
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 16 taken 4343 times.
4343 semi = pd.mime_type ? strchr(mime_type_opt, ';') : NULL;
298
1/2
✗ Branch 17 → 18 not taken.
✓ Branch 17 → 19 taken 4343 times.
4343 if (semi) {
299 ✗ *semi = '\0';
300 }
301 }
302
303
5/6
✓ Branch 49 → 50 taken 9379 times.
✓ Branch 49 → 52 taken 2 times.
✓ Branch 50 → 51 taken 5002 times.
✓ Branch 50 → 52 taken 4377 times.
✓ Branch 51 → 21 taken 5002 times.
✗ Branch 51 → 52 not taken.
9381 for (probe_size = PROBE_BUF_MIN; probe_size <= max_probe_size && !*fmt && !eof;
304 5002 probe_size = FFMIN(probe_size << 1,
305 FFMAX(max_probe_size, probe_size + 1))) {
306
2/2
✓ Branch 21 → 22 taken 5000 times.
✓ Branch 21 → 23 taken 2 times.
5002 score = probe_size < max_probe_size ? AVPROBE_SCORE_RETRY : 0;
307
308 /* Read probe data. */
309
1/2
✗ Branch 25 → 26 not taken.
✓ Branch 25 → 27 taken 5002 times.
5002 if ((ret = av_reallocp(&buf, probe_size + AVPROBE_PADDING_SIZE)) < 0)
310 ✗ goto fail;
311
2/2
✓ Branch 28 → 29 taken 12 times.
✓ Branch 28 → 32 taken 4990 times.
5002 if ((ret = avio_read(pb, buf + buf_offset,
312 probe_size - buf_offset)) < 0) {
313 /* Fail if error was not end of file, otherwise, lower score. */
314
1/2
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 12 times.
12 if (ret != AVERROR_EOF)
315 ✗ goto fail;
316
317 12 score = 0;
318 12 ret = 0; /* error was end of file, nothing read */
319 12 eof = 1;
320 }
321 5002 buf_offset += ret;
322
1/2
✗ Branch 32 → 33 not taken.
✓ Branch 32 → 34 taken 5002 times.
5002 if (buf_offset < offset)
323 10 continue;
324 5002 pd.buf_size = buf_offset - offset;
325 5002 pd.buf = &buf[offset];
326
327 5002 memset(pd.buf + pd.buf_size, 0, AVPROBE_PADDING_SIZE);
328
329 /* Guess file format. */
330 5002 int score_new, undecided = 0;
331 const AVInputFormat *fmt_new;
332 5002 fmt_new = probe_input_format_internal(&pd, 1, &score_new, &undecided);
333
334 /* Retry undecided formats as long as we have more data to feed */
335
4/6
✓ Branch 35 → 36 taken 10 times.
✓ Branch 35 → 39 taken 4992 times.
✓ Branch 36 → 37 taken 10 times.
✗ Branch 36 → 39 not taken.
✓ Branch 37 → 38 taken 10 times.
✗ Branch 37 → 39 not taken.
5002 if (undecided && probe_size < max_probe_size && !eof) {
336 10 continue;
337
2/2
✓ Branch 39 → 40 taken 4379 times.
✓ Branch 39 → 41 taken 613 times.
4992 } else if (score_new > score) {
338 4379 score = score_new;
339 4379 *fmt = fmt_new;
340 }
341
342
2/2
✓ Branch 41 → 42 taken 4379 times.
✓ Branch 41 → 45 taken 613 times.
4992 if (*fmt) {
343 /* This can only be true in the last iteration. */
344
2/2
✓ Branch 42 → 43 taken 14 times.
✓ Branch 42 → 44 taken 4365 times.
4379 if (score <= AVPROBE_SCORE_RETRY) {
345 14 av_log(logctx, AV_LOG_WARNING,
346 "Format %s detected only with low score of %d, "
347 14 "misdetection possible!\n", (*fmt)->name, score);
348 } else
349 4365 av_log(logctx, AV_LOG_DEBUG,
350 "Format %s probed with size=%d and score=%d\n",
351 4365 (*fmt)->name, probe_size, score);
352 #if 0
353 FILE *f = fopen("probestat.tmp", "ab");
354 fprintf(f, "probe_size:%d format:%s score:%d filename:%s\n", probe_size, (*fmt)->name, score, filename);
355 fclose(f);
356 #endif
357 }
358 }
359
360
1/2
✓ Branch 52 → 53 taken 4379 times.
✗ Branch 52 → 54 not taken.
4379 if (!*fmt)
361 ✗ ret = AVERROR_INVALIDDATA;
362
363 4379 fail:
364 /* Rewind. Reuse probe buffer to avoid seeking. */
365 4379 ret2 = ffio_rewind_with_probe_data(pb, &buf, buf_offset);
366
1/2
✓ Branch 56 → 57 taken 4379 times.
✗ Branch 56 → 58 not taken.
4379 if (ret >= 0)
367 4379 ret = ret2;
368
369 4379 av_freep(&pd.mime_type);
370
1/2
✗ Branch 59 → 60 not taken.
✓ Branch 59 → 61 taken 4379 times.
4379 return ret < 0 ? ret : score;
371 }
372
373 36 int av_probe_input_buffer(AVIOContext *pb, const AVInputFormat **fmt,
374 const char *filename, void *logctx,
375 unsigned int offset, unsigned int max_probe_size)
376 {
377 36 int ret = av_probe_input_buffer2(pb, fmt, filename, logctx, offset, max_probe_size);
378 36 return ret < 0 ? ret : 0;
379 }
380