FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavformat/dump.c
Date: 2026-04-19 20:43:40
Exec Total Coverage
Lines: 431 608 70.9%
Functions: 20 29 69.0%
Branches: 253 393 64.4%

Line Branch Exec Source
1 /*
2 * Various pretty-printing functions for use within FFmpeg
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 <stdio.h>
23 #include <stdint.h>
24
25 #include "libavutil/avstring.h"
26 #include "libavutil/channel_layout.h"
27 #include "libavutil/display.h"
28 #include "libavutil/iamf.h"
29 #include "libavutil/intreadwrite.h"
30 #include "libavutil/log.h"
31 #include "libavutil/mastering_display_metadata.h"
32 #include "libavutil/ambient_viewing_environment.h"
33 #include "libavutil/dovi_meta.h"
34 #include "libavutil/mathematics.h"
35 #include "libavutil/mem.h"
36 #include "libavutil/opt.h"
37 #include "libavutil/replaygain.h"
38 #include "libavutil/spherical.h"
39 #include "libavutil/stereo3d.h"
40 #include "libavutil/tdrdi.h"
41 #include "libavutil/timecode.h"
42
43 #include "libavcodec/avcodec.h"
44
45 #include "avformat.h"
46 #include "internal.h"
47
48 #define HEXDUMP_PRINT(...) \
49 do { \
50 if (!f) \
51 av_log(avcl, level, __VA_ARGS__); \
52 else \
53 fprintf(f, __VA_ARGS__); \
54 } while (0)
55
56 1 static void hex_dump_internal(void *avcl, FILE *f, int level,
57 const uint8_t *buf, int size)
58 {
59 int len, i, j, c;
60
61
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 1 times.
3 for (i = 0; i < size; i += 16) {
62 2 len = size - i;
63
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
2 if (len > 16)
64 1 len = 16;
65
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 HEXDUMP_PRINT("%08x ", i);
66
2/2
✓ Branch 0 taken 32 times.
✓ Branch 1 taken 2 times.
34 for (j = 0; j < 16; j++) {
67
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 8 times.
32 if (j < len)
68
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
24 HEXDUMP_PRINT(" %02x", buf[i + j]);
69 else
70
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 HEXDUMP_PRINT(" ");
71 }
72
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 HEXDUMP_PRINT(" ");
73
2/2
✓ Branch 0 taken 24 times.
✓ Branch 1 taken 2 times.
26 for (j = 0; j < len; j++) {
74 24 c = buf[i + j];
75
4/4
✓ Branch 0 taken 23 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 14 times.
✓ Branch 3 taken 9 times.
24 if (c < ' ' || c > '~')
76 15 c = '.';
77
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
24 HEXDUMP_PRINT("%c", c);
78 }
79
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 HEXDUMP_PRINT("\n");
80 }
81 1 }
82
83 void av_hex_dump(FILE *f, const uint8_t *buf, int size)
84 {
85 hex_dump_internal(NULL, f, 0, buf, size);
86 }
87
88 1 void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size)
89 {
90 1 hex_dump_internal(avcl, NULL, level, buf, size);
91 1 }
92
93 static void pkt_dump_internal(void *avcl, FILE *f, int level, const AVPacket *pkt,
94 int dump_payload, AVRational time_base)
95 {
96 HEXDUMP_PRINT("stream #%d:\n", pkt->stream_index);
97 HEXDUMP_PRINT(" keyframe=%d\n", (pkt->flags & AV_PKT_FLAG_KEY) != 0);
98 HEXDUMP_PRINT(" duration=%0.3f\n", pkt->duration * av_q2d(time_base));
99 /* DTS is _always_ valid after av_read_frame() */
100 HEXDUMP_PRINT(" dts=");
101 if (pkt->dts == AV_NOPTS_VALUE)
102 HEXDUMP_PRINT("N/A");
103 else
104 HEXDUMP_PRINT("%0.3f", pkt->dts * av_q2d(time_base));
105 /* PTS may not be known if B-frames are present. */
106 HEXDUMP_PRINT(" pts=");
107 if (pkt->pts == AV_NOPTS_VALUE)
108 HEXDUMP_PRINT("N/A");
109 else
110 HEXDUMP_PRINT("%0.3f", pkt->pts * av_q2d(time_base));
111 HEXDUMP_PRINT("\n");
112 HEXDUMP_PRINT(" size=%d\n", pkt->size);
113 if (dump_payload)
114 hex_dump_internal(avcl, f, level, pkt->data, pkt->size);
115 }
116
117 void av_pkt_dump2(FILE *f, const AVPacket *pkt, int dump_payload, const AVStream *st)
118 {
119 pkt_dump_internal(NULL, f, 0, pkt, dump_payload, st->time_base);
120 }
121
122 void av_pkt_dump_log2(void *avcl, int level, const AVPacket *pkt, int dump_payload,
123 const AVStream *st)
124 {
125 pkt_dump_internal(avcl, NULL, level, pkt, dump_payload, st->time_base);
126 }
127
128
129 32924 static void print_fps(double d, const char *postfix, int log_level)
130 {
131 32924 uint64_t v = lrintf(d * 100);
132
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32924 times.
32924 if (!v)
133 av_log(NULL, log_level, "%1.4f %s", d, postfix);
134
2/2
✓ Branch 0 taken 2054 times.
✓ Branch 1 taken 30870 times.
32924 else if (v % 100)
135 2054 av_log(NULL, log_level, "%3.2f %s", d, postfix);
136
2/2
✓ Branch 0 taken 28578 times.
✓ Branch 1 taken 2292 times.
30870 else if (v % (100 * 1000))
137 28578 av_log(NULL, log_level, "%1.0f %s", d, postfix);
138 else
139 2292 av_log(NULL, log_level, "%1.0fk %s", d / 1000, postfix);
140 32924 }
141
142 12925 static void dump_dictionary(void *ctx, const AVDictionary *m,
143 const char *name, const char *indent,
144 int log_level)
145 {
146 12925 const AVDictionaryEntry *tag = NULL;
147
148
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12925 times.
12925 if (!m)
149 return;
150
151 12925 av_log(ctx, log_level, "%s%s:\n", indent, name);
152
2/2
✓ Branch 1 taken 21822 times.
✓ Branch 2 taken 12925 times.
34747 while ((tag = av_dict_iterate(m, tag)))
153
2/2
✓ Branch 0 taken 20693 times.
✓ Branch 1 taken 1129 times.
21822 if (strcmp("language", tag->key)) {
154 20693 const char *p = tag->value;
155 20693 av_log(ctx, log_level,
156 20693 "%s %-16s: ", indent, tag->key);
157
2/2
✓ Branch 0 taken 21213 times.
✓ Branch 1 taken 20693 times.
41906 while (*p) {
158 21213 size_t len = strcspn(p, "\x8\xa\xb\xc\xd");
159
1/2
✓ Branch 0 taken 21213 times.
✗ Branch 1 not taken.
21213 av_log(ctx, log_level, "%.*s", (int)(FFMIN(255, len)), p);
160 21213 p += len;
161
2/2
✓ Branch 0 taken 280 times.
✓ Branch 1 taken 20933 times.
21213 if (*p == 0xd) av_log(ctx, log_level, " ");
162
2/2
✓ Branch 0 taken 386 times.
✓ Branch 1 taken 20827 times.
21213 if (*p == 0xa) av_log(ctx, log_level, "\n%s %-16s: ", indent, "");
163
2/2
✓ Branch 0 taken 688 times.
✓ Branch 1 taken 20525 times.
21213 if (*p) p++;
164 }
165 20693 av_log(ctx, log_level, "\n");
166 }
167 }
168
169 34117 static void dump_metadata(void *ctx, const AVDictionary *m, const char *indent,
170 int log_level)
171 {
172
6/6
✓ Branch 0 taken 13195 times.
✓ Branch 1 taken 20922 times.
✓ Branch 3 taken 10095 times.
✓ Branch 4 taken 3100 times.
✓ Branch 6 taken 9718 times.
✓ Branch 7 taken 377 times.
34117 if (m && !(av_dict_count(m) == 1 && av_dict_get(m, "language", NULL, 0)))
173 12818 dump_dictionary(ctx, m, "Metadata", indent, log_level);
174 34117 }
175
176 /* param change side data*/
177 static void dump_paramchange(void *ctx, const AVPacketSideData *sd, int log_level)
178 {
179 int size = sd->size;
180 const uint8_t *data = sd->data;
181 uint32_t flags, sample_rate, width, height;
182
183 if (!data || sd->size < 4)
184 goto fail;
185
186 flags = AV_RL32(data);
187 data += 4;
188 size -= 4;
189
190 if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
191 if (size < 4)
192 goto fail;
193 sample_rate = AV_RL32(data);
194 data += 4;
195 size -= 4;
196 av_log(ctx, log_level, "sample_rate %"PRIu32", ", sample_rate);
197 }
198 if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
199 if (size < 8)
200 goto fail;
201 width = AV_RL32(data);
202 data += 4;
203 size -= 4;
204 height = AV_RL32(data);
205 data += 4;
206 size -= 4;
207 av_log(ctx, log_level, "width %"PRIu32" height %"PRIu32, width, height);
208 }
209
210 return;
211 fail:
212 av_log(ctx, AV_LOG_ERROR, "unknown param\n");
213 }
214
215 /* replaygain side data*/
216 static void print_gain(void *ctx, const char *str, int32_t gain, int log_level)
217 {
218 av_log(ctx, log_level, "%s - ", str);
219 if (gain == INT32_MIN)
220 av_log(ctx, log_level, "unknown");
221 else
222 av_log(ctx, log_level, "%f", gain / 100000.0f);
223 av_log(ctx, log_level, ", ");
224 }
225
226 static void print_peak(void *ctx, const char *str, uint32_t peak, int log_level)
227 {
228 av_log(ctx, log_level, "%s - ", str);
229 if (!peak)
230 av_log(ctx, log_level, "unknown");
231 else
232 av_log(ctx, log_level, "%f", (float) peak / UINT32_MAX);
233 av_log(ctx, log_level, ", ");
234 }
235
236 static void dump_replaygain(void *ctx, const AVPacketSideData *sd, int log_level)
237 {
238 const AVReplayGain *rg;
239
240 if (sd->size < sizeof(*rg)) {
241 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
242 return;
243 }
244 rg = (const AVReplayGain *)sd->data;
245
246 print_gain(ctx, "track gain", rg->track_gain, log_level);
247 print_peak(ctx, "track peak", rg->track_peak, log_level);
248 print_gain(ctx, "album gain", rg->album_gain, log_level);
249 print_peak(ctx, "album peak", rg->album_peak, log_level);
250 }
251
252 471 static void dump_stereo3d(void *ctx, const AVPacketSideData *sd, int log_level)
253 {
254 const AVStereo3D *stereo;
255
256
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 471 times.
471 if (sd->size < sizeof(*stereo)) {
257 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
258 return;
259 }
260
261 471 stereo = (const AVStereo3D *)sd->data;
262
263 471 av_log(ctx, log_level, "%s, view: %s, primary eye: %s",
264 471 av_stereo3d_type_name(stereo->type), av_stereo3d_view_name(stereo->view),
265 471 av_stereo3d_primary_eye_name(stereo->primary_eye));
266
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 464 times.
471 if (stereo->baseline)
267 7 av_log(ctx, log_level, ", baseline: %"PRIu32"", stereo->baseline);
268
3/4
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 464 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
471 if (stereo->horizontal_disparity_adjustment.num && stereo->horizontal_disparity_adjustment.den)
269 7 av_log(ctx, log_level, ", horizontal_disparity_adjustment: %0.4f",
270 av_q2d(stereo->horizontal_disparity_adjustment));
271
3/4
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 464 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
471 if (stereo->horizontal_field_of_view.num && stereo->horizontal_field_of_view.den)
272 7 av_log(ctx, log_level, ", horizontal_field_of_view: %0.3f", av_q2d(stereo->horizontal_field_of_view));
273
274
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 462 times.
471 if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
275 9 av_log(ctx, log_level, " (inverted)");
276 }
277
278 12 static void dump_audioservicetype(void *ctx, const AVPacketSideData *sd, int log_level)
279 {
280 12 const enum AVAudioServiceType *ast = (const enum AVAudioServiceType *)sd->data;
281
282
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
12 if (sd->size < sizeof(*ast)) {
283 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
284 return;
285 }
286
287
1/10
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
12 switch (*ast) {
288 12 case AV_AUDIO_SERVICE_TYPE_MAIN:
289 12 av_log(ctx, log_level, "main");
290 12 break;
291 case AV_AUDIO_SERVICE_TYPE_EFFECTS:
292 av_log(ctx, log_level, "effects");
293 break;
294 case AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED:
295 av_log(ctx, log_level, "visually impaired");
296 break;
297 case AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED:
298 av_log(ctx, log_level, "hearing impaired");
299 break;
300 case AV_AUDIO_SERVICE_TYPE_DIALOGUE:
301 av_log(ctx, log_level, "dialogue");
302 break;
303 case AV_AUDIO_SERVICE_TYPE_COMMENTARY:
304 av_log(ctx, log_level, "commentary");
305 break;
306 case AV_AUDIO_SERVICE_TYPE_EMERGENCY:
307 av_log(ctx, log_level, "emergency");
308 break;
309 case AV_AUDIO_SERVICE_TYPE_VOICE_OVER:
310 av_log(ctx, log_level, "voice over");
311 break;
312 case AV_AUDIO_SERVICE_TYPE_KARAOKE:
313 av_log(ctx, log_level, "karaoke");
314 break;
315 default:
316 av_log(ctx, AV_LOG_WARNING, "unknown");
317 break;
318 }
319 }
320
321 336 static void dump_cpb(void *ctx, const AVPacketSideData *sd, int log_level)
322 {
323 336 const AVCPBProperties *cpb = (const AVCPBProperties *)sd->data;
324
325
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 336 times.
336 if (sd->size < sizeof(*cpb)) {
326 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
327 return;
328 }
329
330 336 av_log(ctx, log_level,
331 "bitrate max/min/avg: %"PRId64"/%"PRId64"/%"PRId64" buffer size: %"PRId64" ",
332 336 cpb->max_bitrate, cpb->min_bitrate, cpb->avg_bitrate,
333 336 cpb->buffer_size);
334
1/2
✓ Branch 0 taken 336 times.
✗ Branch 1 not taken.
336 if (cpb->vbv_delay == UINT64_MAX)
335 336 av_log(ctx, log_level, "vbv_delay: N/A");
336 else
337 av_log(ctx, log_level, "vbv_delay: %"PRIu64"", cpb->vbv_delay);
338 }
339
340 23 static void dump_mastering_display_metadata(void *ctx, const AVPacketSideData *sd,
341 int log_level)
342 {
343 23 const AVMasteringDisplayMetadata *metadata =
344 (const AVMasteringDisplayMetadata *)sd->data;
345 23 av_log(ctx, log_level,
346 "has_primaries:%d has_luminance:%d "
347 "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f) "
348 "min_luminance=%f, max_luminance=%f",
349 23 metadata->has_primaries, metadata->has_luminance,
350 av_q2d(metadata->display_primaries[0][0]),
351 av_q2d(metadata->display_primaries[0][1]),
352 av_q2d(metadata->display_primaries[1][0]),
353 av_q2d(metadata->display_primaries[1][1]),
354 av_q2d(metadata->display_primaries[2][0]),
355 av_q2d(metadata->display_primaries[2][1]),
356 av_q2d(metadata->white_point[0]), av_q2d(metadata->white_point[1]),
357 av_q2d(metadata->min_luminance), av_q2d(metadata->max_luminance));
358 23 }
359
360 20 static void dump_content_light_metadata(void *ctx, const AVPacketSideData *sd,
361 int log_level)
362 {
363 20 const AVContentLightMetadata *metadata =
364 (const AVContentLightMetadata *)sd->data;
365 20 av_log(ctx, log_level,
366 "MaxCLL=%d, MaxFALL=%d",
367 20 metadata->MaxCLL, metadata->MaxFALL);
368 20 }
369
370 6 static void dump_ambient_viewing_environment_metadata(void *ctx, const AVPacketSideData *sd, int log_level)
371 {
372 6 const AVAmbientViewingEnvironment *ambient =
373 (const AVAmbientViewingEnvironment *)sd->data;
374 6 av_log(ctx, log_level,
375 "ambient_illuminance=%f, ambient_light_x=%f, ambient_light_y=%f",
376 av_q2d(ambient->ambient_illuminance),
377 av_q2d(ambient->ambient_light_x),
378 av_q2d(ambient->ambient_light_y));
379 6 }
380
381 18 static void dump_spherical(void *ctx, int w, int h,
382 const AVPacketSideData *sd, int log_level)
383 {
384 18 const AVSphericalMapping *spherical = (const AVSphericalMapping *)sd->data;
385 double yaw, pitch, roll;
386
387
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
18 if (sd->size < sizeof(*spherical)) {
388 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
389 return;
390 }
391
392 18 av_log(ctx, log_level, "%s ", av_spherical_projection_name(spherical->projection));
393
394
4/6
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 11 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 7 times.
18 if (spherical->yaw || spherical->pitch || spherical->roll) {
395 11 yaw = ((double)spherical->yaw) / (1 << 16);
396 11 pitch = ((double)spherical->pitch) / (1 << 16);
397 11 roll = ((double)spherical->roll) / (1 << 16);
398 11 av_log(ctx, log_level, "(%f/%f/%f) ", yaw, pitch, roll);
399 }
400
401
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 7 times.
18 if (spherical->projection == AV_SPHERICAL_EQUIRECTANGULAR_TILE) {
402 size_t l, t, r, b;
403 11 av_spherical_tile_bounds(spherical, w, h,
404 &l, &t, &r, &b);
405 11 av_log(ctx, log_level, "[%zu, %zu, %zu, %zu] ", l, t, r, b);
406
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
7 } else if (spherical->projection == AV_SPHERICAL_CUBEMAP) {
407 av_log(ctx, log_level, "[pad %"PRIu32"] ", spherical->padding);
408 }
409 }
410
411 13 static void dump_dovi_conf(void *ctx, const AVPacketSideData *sd,
412 int log_level)
413 {
414 13 const AVDOVIDecoderConfigurationRecord *dovi =
415 (const AVDOVIDecoderConfigurationRecord *)sd->data;
416
417 13 av_log(ctx, log_level, "version: %d.%d, profile: %d, level: %d, "
418 "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d, "
419 "compression: %d",
420 13 dovi->dv_version_major, dovi->dv_version_minor,
421 13 dovi->dv_profile, dovi->dv_level,
422 13 dovi->rpu_present_flag,
423 13 dovi->el_present_flag,
424 13 dovi->bl_present_flag,
425 13 dovi->dv_bl_signal_compatibility_id,
426 13 dovi->dv_md_compression);
427 13 }
428
429 static void dump_s12m_timecode(void *ctx, AVRational avg_frame_rate, const AVPacketSideData *sd,
430 int log_level)
431 {
432 const uint32_t *tc = (const uint32_t *)sd->data;
433
434 if ((sd->size != sizeof(uint32_t) * 4) || (tc[0] > 3)) {
435 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
436 return;
437 }
438
439 for (int j = 1; j <= tc[0]; j++) {
440 char tcbuf[AV_TIMECODE_STR_SIZE];
441 av_timecode_make_smpte_tc_string2(tcbuf, avg_frame_rate, tc[j], 0, 0);
442 av_log(ctx, log_level, "timecode - %s%s", tcbuf, j != tc[0] ? ", " : "");
443 }
444 }
445
446 18 static void dump_cropping(void *ctx, const AVPacketSideData *sd, int log_level)
447 {
448 uint32_t top, bottom, left, right;
449
450
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
18 if (sd->size < sizeof(uint32_t) * 4) {
451 av_log(ctx, log_level, "invalid data\n");
452 return;
453 }
454
455 18 top = AV_RL32(sd->data + 0);
456 18 bottom = AV_RL32(sd->data + 4);
457 18 left = AV_RL32(sd->data + 8);
458 18 right = AV_RL32(sd->data + 12);
459
460 18 av_log(ctx, log_level, "%"PRIu32"/%"PRIu32"/%"PRIu32"/%"PRIu32"", left, right, top, bottom);
461 }
462
463 2 static void dump_tdrdi(void *ctx, const AVPacketSideData *sd, int log_level)
464 {
465 2 const AV3DReferenceDisplaysInfo *tdrdi =
466 (const AV3DReferenceDisplaysInfo *)sd->data;
467
468 2 av_log(ctx, log_level, "number of reference displays: %u", tdrdi->num_ref_displays);
469 2 }
470
471 17670 static void dump_sidedata(void *ctx, const AVPacketSideData *side_data, int nb_side_data,
472 int w, int h, AVRational avg_frame_rate,
473 const char *indent, int log_level)
474 {
475 int i;
476
477
2/2
✓ Branch 0 taken 923 times.
✓ Branch 1 taken 16747 times.
17670 if (nb_side_data)
478 923 av_log(ctx, log_level, "%sSide data:\n", indent);
479
480
2/2
✓ Branch 0 taken 986 times.
✓ Branch 1 taken 17670 times.
18656 for (i = 0; i < nb_side_data; i++) {
481 986 const AVPacketSideData *sd = &side_data[i];
482 986 const char *name = av_packet_side_data_name(sd->type);
483
484 986 av_log(ctx, log_level, "%s ", indent);
485
1/2
✓ Branch 0 taken 986 times.
✗ Branch 1 not taken.
986 if (name)
486 986 av_log(ctx, log_level, "%s: ", name);
487
12/16
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 34 times.
✓ Branch 3 taken 471 times.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 336 times.
✓ Branch 7 taken 23 times.
✓ Branch 8 taken 18 times.
✓ Branch 9 taken 20 times.
✓ Branch 10 taken 13 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 6 times.
✓ Branch 13 taken 18 times.
✓ Branch 14 taken 2 times.
✓ Branch 15 taken 33 times.
986 switch (sd->type) {
488 case AV_PKT_DATA_PARAM_CHANGE:
489 dump_paramchange(ctx, sd, log_level);
490 break;
491 case AV_PKT_DATA_REPLAYGAIN:
492 dump_replaygain(ctx, sd, log_level);
493 break;
494 34 case AV_PKT_DATA_DISPLAYMATRIX:
495 34 av_log(ctx, log_level, "rotation of %.2f degrees",
496 34 av_display_rotation_get((const int32_t *)sd->data));
497 34 break;
498 471 case AV_PKT_DATA_STEREO3D:
499 471 dump_stereo3d(ctx, sd, log_level);
500 471 break;
501 12 case AV_PKT_DATA_AUDIO_SERVICE_TYPE:
502 12 dump_audioservicetype(ctx, sd, log_level);
503 12 break;
504 case AV_PKT_DATA_QUALITY_STATS:
505 av_log(ctx, log_level, "%"PRId32", pict_type: %c",
506 AV_RL32(sd->data), av_get_picture_type_char(sd->data[4]));
507 break;
508 336 case AV_PKT_DATA_CPB_PROPERTIES:
509 336 dump_cpb(ctx, sd, log_level);
510 336 break;
511 23 case AV_PKT_DATA_MASTERING_DISPLAY_METADATA:
512 23 dump_mastering_display_metadata(ctx, sd, log_level);
513 23 break;
514 18 case AV_PKT_DATA_SPHERICAL:
515 18 dump_spherical(ctx, w, h, sd, log_level);
516 18 break;
517 20 case AV_PKT_DATA_CONTENT_LIGHT_LEVEL:
518 20 dump_content_light_metadata(ctx, sd, log_level);
519 20 break;
520 13 case AV_PKT_DATA_DOVI_CONF:
521 13 dump_dovi_conf(ctx, sd, log_level);
522 13 break;
523 case AV_PKT_DATA_S12M_TIMECODE:
524 dump_s12m_timecode(ctx, avg_frame_rate, sd, log_level);
525 break;
526 6 case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:
527 6 dump_ambient_viewing_environment_metadata(ctx, sd, log_level);
528 6 break;
529 18 case AV_PKT_DATA_FRAME_CROPPING:
530 18 dump_cropping(ctx, sd, log_level);
531 18 break;
532 2 case AV_PKT_DATA_3D_REFERENCE_DISPLAYS:
533 2 dump_tdrdi(ctx, sd, log_level);
534 2 break;
535 33 default:
536
1/2
✓ Branch 0 taken 33 times.
✗ Branch 1 not taken.
33 if (name)
537 33 av_log(ctx, log_level, "(%zu bytes)", sd->size);
538 else
539 av_log(ctx, log_level, "unknown side data type %d "
540 "(%zu bytes)", sd->type, sd->size);
541 33 break;
542 }
543
544 986 av_log(ctx, log_level, "\n");
545 }
546 17670 }
547
548 17771 static void dump_disposition(int disposition, int log_level)
549 {
550
2/2
✓ Branch 0 taken 1897 times.
✓ Branch 1 taken 15874 times.
17771 if (disposition & AV_DISPOSITION_DEFAULT)
551 1897 av_log(NULL, log_level, " (default)");
552
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17767 times.
17771 if (disposition & AV_DISPOSITION_DUB)
553 4 av_log(NULL, log_level, " (dub)");
554
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17767 times.
17771 if (disposition & AV_DISPOSITION_ORIGINAL)
555 4 av_log(NULL, log_level, " (original)");
556
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 17766 times.
17771 if (disposition & AV_DISPOSITION_COMMENT)
557 5 av_log(NULL, log_level, " (comment)");
558
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 17770 times.
17771 if (disposition & AV_DISPOSITION_LYRICS)
559 1 av_log(NULL, log_level, " (lyrics)");
560
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 17770 times.
17771 if (disposition & AV_DISPOSITION_KARAOKE)
561 1 av_log(NULL, log_level, " (karaoke)");
562
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 17764 times.
17771 if (disposition & AV_DISPOSITION_FORCED)
563 7 av_log(NULL, log_level, " (forced)");
564
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 17749 times.
17771 if (disposition & AV_DISPOSITION_HEARING_IMPAIRED)
565 22 av_log(NULL, log_level, " (hearing impaired)");
566
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 17755 times.
17771 if (disposition & AV_DISPOSITION_VISUAL_IMPAIRED)
567 16 av_log(NULL, log_level, " (visual impaired)");
568
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17771 times.
17771 if (disposition & AV_DISPOSITION_CLEAN_EFFECTS)
569 av_log(NULL, log_level, " (clean effects)");
570
2/2
✓ Branch 0 taken 97 times.
✓ Branch 1 taken 17674 times.
17771 if (disposition & AV_DISPOSITION_ATTACHED_PIC)
571 97 av_log(NULL, log_level, " (attached pic)");
572
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17771 times.
17771 if (disposition & AV_DISPOSITION_TIMED_THUMBNAILS)
573 av_log(NULL, log_level, " (timed thumbnails)");
574
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 17765 times.
17771 if (disposition & AV_DISPOSITION_CAPTIONS)
575 6 av_log(NULL, log_level, " (captions)");
576
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 17753 times.
17771 if (disposition & AV_DISPOSITION_DESCRIPTIONS)
577 18 av_log(NULL, log_level, " (descriptions)");
578
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17767 times.
17771 if (disposition & AV_DISPOSITION_METADATA)
579 4 av_log(NULL, log_level, " (metadata)");
580
2/2
✓ Branch 0 taken 335 times.
✓ Branch 1 taken 17436 times.
17771 if (disposition & AV_DISPOSITION_DEPENDENT)
581 335 av_log(NULL, log_level, " (dependent)");
582
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17771 times.
17771 if (disposition & AV_DISPOSITION_STILL_IMAGE)
583 av_log(NULL, log_level, " (still image)");
584
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17771 times.
17771 if (disposition & AV_DISPOSITION_NON_DIEGETIC)
585 av_log(NULL, log_level, " (non-diegetic)");
586
2/2
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 17762 times.
17771 if (disposition & AV_DISPOSITION_MULTILAYER)
587 9 av_log(NULL, log_level, " (multilayer)");
588 17771 }
589
590 /* "user interface" functions */
591 17661 static void dump_stream_format(const AVFormatContext *ic, int i,
592 int group_index, int index, int is_output,
593 int log_level)
594 {
595 char buf[256];
596
2/2
✓ Branch 0 taken 9098 times.
✓ Branch 1 taken 8563 times.
17661 int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
597 17661 const AVStream *st = ic->streams[i];
598 17661 const FFStream *const sti = cffstream(st);
599 17661 const AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0);
600 17661 const char *separator = ic->dump_separator;
601
2/2
✓ Branch 0 taken 448 times.
✓ Branch 1 taken 17213 times.
17661 const char *group_indent = group_index >= 0 ? " " : "";
602
2/2
✓ Branch 0 taken 448 times.
✓ Branch 1 taken 17213 times.
17661 const char *extra_indent = group_index >= 0 ? " " : " ";
603 AVCodecContext *avctx;
604 int ret;
605
606 17661 avctx = avcodec_alloc_context3(NULL);
607
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17661 times.
17661 if (!avctx)
608 return;
609
610 17661 ret = avcodec_parameters_to_context(avctx, st->codecpar);
611
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17661 times.
17661 if (ret < 0) {
612 avcodec_free_context(&avctx);
613 return;
614 }
615
616 // Fields which are missing from AVCodecParameters need to be taken from the AVCodecContext
617
2/2
✓ Branch 0 taken 8563 times.
✓ Branch 1 taken 9098 times.
17661 if (sti->avctx) {
618 #if FF_API_CODEC_PROPS
619 FF_DISABLE_DEPRECATION_WARNINGS
620 8563 avctx->properties = sti->avctx->properties;
621 FF_ENABLE_DEPRECATION_WARNINGS
622 #endif
623 8563 avctx->codec = sti->avctx->codec;
624 8563 avctx->qmin = sti->avctx->qmin;
625 8563 avctx->qmax = sti->avctx->qmax;
626 8563 avctx->coded_width = sti->avctx->coded_width;
627 8563 avctx->coded_height = sti->avctx->coded_height;
628 }
629
630
1/2
✓ Branch 0 taken 17661 times.
✗ Branch 1 not taken.
17661 if (separator)
631 17661 av_opt_set(avctx, "dump_separator", separator, 0);
632 17661 avcodec_string(buf, sizeof(buf), avctx, is_output);
633 17661 avcodec_free_context(&avctx);
634
635 17661 av_log(NULL, log_level, "%s Stream #%d", group_indent, index);
636 17661 av_log(NULL, log_level, ":%d", i);
637
638 /* the pid is an important information, so we display it */
639 /* XXX: add a generic system */
640
2/2
✓ Branch 0 taken 1123 times.
✓ Branch 1 taken 16538 times.
17661 if (flags & AVFMT_SHOW_IDS)
641 1123 av_log(NULL, log_level, "[0x%x]", st->id);
642
2/2
✓ Branch 0 taken 1482 times.
✓ Branch 1 taken 16179 times.
17661 if (lang)
643 1482 av_log(NULL, log_level, "(%s)", lang->value);
644 17661 av_log(NULL, AV_LOG_DEBUG, ", %d, %d/%d", sti->codec_info_nb_frames,
645 17661 st->time_base.num, st->time_base.den);
646 17661 av_log(NULL, log_level, ": %s", buf);
647
648
4/4
✓ Branch 0 taken 2578 times.
✓ Branch 1 taken 15083 times.
✓ Branch 2 taken 375 times.
✓ Branch 3 taken 2203 times.
20239 if (st->sample_aspect_ratio.num &&
649 2578 av_cmp_q(st->sample_aspect_ratio, st->codecpar->sample_aspect_ratio)) {
650 AVRational display_aspect_ratio;
651 375 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
652 375 st->codecpar->width * (int64_t)st->sample_aspect_ratio.num,
653 375 st->codecpar->height * (int64_t)st->sample_aspect_ratio.den,
654 1024 * 1024);
655 375 av_log(NULL, log_level, ", SAR %d:%d DAR %d:%d",
656 375 st->sample_aspect_ratio.num, st->sample_aspect_ratio.den,
657 display_aspect_ratio.num, display_aspect_ratio.den);
658 }
659
660
2/2
✓ Branch 0 taken 13554 times.
✓ Branch 1 taken 4107 times.
17661 if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
661
3/4
✓ Branch 0 taken 12697 times.
✓ Branch 1 taken 857 times.
✓ Branch 2 taken 12697 times.
✗ Branch 3 not taken.
13554 int fps = st->avg_frame_rate.den && st->avg_frame_rate.num;
662
3/4
✓ Branch 0 taken 6673 times.
✓ Branch 1 taken 6881 times.
✓ Branch 2 taken 6673 times.
✗ Branch 3 not taken.
13554 int tbr = st->r_frame_rate.den && st->r_frame_rate.num;
663
2/4
✓ Branch 0 taken 13554 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13554 times.
✗ Branch 3 not taken.
13554 int tbn = st->time_base.den && st->time_base.num;
664
665
5/6
✓ Branch 0 taken 857 times.
✓ Branch 1 taken 12697 times.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 837 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
13554 if (fps || tbr || tbn)
666 13554 av_log(NULL, log_level, "%s", separator);
667
668
2/2
✓ Branch 0 taken 12697 times.
✓ Branch 1 taken 857 times.
13554 if (fps)
669
3/4
✓ Branch 0 taken 6861 times.
✓ Branch 1 taken 5836 times.
✓ Branch 2 taken 6861 times.
✗ Branch 3 not taken.
12697 print_fps(av_q2d(st->avg_frame_rate), tbr || tbn ? "fps, " : "fps", log_level);
670
2/2
✓ Branch 0 taken 6673 times.
✓ Branch 1 taken 6881 times.
13554 if (tbr)
671
1/2
✓ Branch 0 taken 6673 times.
✗ Branch 1 not taken.
6673 print_fps(av_q2d(st->r_frame_rate), tbn ? "tbr, " : "tbr", log_level);
672
1/2
✓ Branch 0 taken 13554 times.
✗ Branch 1 not taken.
13554 if (tbn)
673 13554 print_fps(1 / av_q2d(st->time_base), "tbn", log_level);
674 }
675
676
6/8
✓ Branch 0 taken 6618 times.
✓ Branch 1 taken 11043 times.
✓ Branch 2 taken 398 times.
✓ Branch 3 taken 6220 times.
✓ Branch 4 taken 398 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 398 times.
✗ Branch 7 not taken.
17661 if (st->start_time != AV_NOPTS_VALUE && st->start_time != 0 && st->time_base.den && st->time_base.num) {
677 398 const double stream_start = av_q2d(st->time_base) * st->start_time;
678 398 av_log(NULL, log_level, ", start %.6f", stream_start);
679 }
680
681 17661 dump_disposition(st->disposition, log_level);
682 17661 av_log(NULL, log_level, "\n");
683
684 17661 dump_metadata(NULL, st->metadata, extra_indent, log_level);
685
686 17661 dump_sidedata(NULL, st->codecpar->coded_side_data, st->codecpar->nb_coded_side_data,
687 17661 st->codecpar->width, st->codecpar->height, st->avg_frame_rate,
688 extra_indent, log_level);
689 }
690
691 110 static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
692 int i, int index, int is_output)
693 {
694 110 const AVStreamGroup *stg = ic->stream_groups[i];
695
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 83 times.
110 int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
696 char buf[512];
697 int ret;
698
699 110 av_log(NULL, AV_LOG_INFO, " Stream group #%d:%d", index, i);
700
2/2
✓ Branch 0 taken 83 times.
✓ Branch 1 taken 27 times.
110 if (flags & AVFMT_SHOW_IDS)
701 83 av_log(NULL, AV_LOG_INFO, "[0x%"PRIx64"]", stg->id);
702 110 av_log(NULL, AV_LOG_INFO, ":");
703
704
3/5
✓ Branch 0 taken 52 times.
✓ Branch 1 taken 49 times.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
110 switch (stg->type) {
705 52 case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT: {
706 52 const AVIAMFAudioElement *audio_element = stg->params.iamf_audio_element;
707 52 av_log(NULL, AV_LOG_INFO, " IAMF Audio Element:");
708 52 dump_disposition(stg->disposition, AV_LOG_INFO);
709 52 av_log(NULL, AV_LOG_INFO, "\n");
710 52 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
711
2/2
✓ Branch 0 taken 109 times.
✓ Branch 1 taken 52 times.
161 for (int j = 0; j < audio_element->nb_layers; j++) {
712 109 const AVIAMFLayer *layer = audio_element->layers[j];
713 109 int channel_count = layer->ch_layout.nb_channels;
714 109 av_log(NULL, AV_LOG_INFO, " Layer %d:", j);
715 109 ret = av_channel_layout_describe(&layer->ch_layout, buf, sizeof(buf));
716
1/2
✓ Branch 0 taken 109 times.
✗ Branch 1 not taken.
109 if (ret >= 0)
717 109 av_log(NULL, AV_LOG_INFO, " %s", buf);
718 109 av_log(NULL, AV_LOG_INFO, "\n");
719
3/4
✓ Branch 0 taken 422 times.
✓ Branch 1 taken 109 times.
✓ Branch 2 taken 422 times.
✗ Branch 3 not taken.
531 for (int k = 0; channel_count > 0 && k < stg->nb_streams; k++) {
720 422 AVStream *st = stg->streams[k];
721 422 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
722 422 printed[st->index] = 1;
723 422 channel_count -= st->codecpar->ch_layout.nb_channels;
724 }
725 }
726 52 break;
727 }
728 49 case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION: {
729 49 const AVIAMFMixPresentation *mix_presentation = stg->params.iamf_mix_presentation;
730 49 av_log(NULL, AV_LOG_INFO, " IAMF Mix Presentation:");
731 49 dump_disposition(stg->disposition, AV_LOG_INFO);
732 49 av_log(NULL, AV_LOG_INFO, "\n");
733 49 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
734 49 dump_dictionary(NULL, mix_presentation->annotations, "Annotations", " ", AV_LOG_INFO);
735
2/2
✓ Branch 0 taken 55 times.
✓ Branch 1 taken 49 times.
104 for (int j = 0; j < mix_presentation->nb_submixes; j++) {
736 55 AVIAMFSubmix *sub_mix = mix_presentation->submixes[j];
737 55 av_log(NULL, AV_LOG_INFO, " Submix %d:\n", j);
738
2/2
✓ Branch 0 taken 58 times.
✓ Branch 1 taken 55 times.
113 for (int k = 0; k < sub_mix->nb_elements; k++) {
739 58 const AVIAMFSubmixElement *submix_element = sub_mix->elements[k];
740 58 const AVStreamGroup *audio_element = NULL;
741
1/2
✓ Branch 0 taken 61 times.
✗ Branch 1 not taken.
61 for (int l = 0; l < ic->nb_stream_groups; l++)
742
1/2
✓ Branch 0 taken 61 times.
✗ Branch 1 not taken.
61 if (ic->stream_groups[l]->type == AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT &&
743
2/2
✓ Branch 0 taken 58 times.
✓ Branch 1 taken 3 times.
61 ic->stream_groups[l]->id == submix_element->audio_element_id) {
744 58 audio_element = ic->stream_groups[l];
745 58 break;
746 }
747
1/2
✓ Branch 0 taken 58 times.
✗ Branch 1 not taken.
58 if (audio_element) {
748 58 av_log(NULL, AV_LOG_INFO, " IAMF Audio Element #%d:%d",
749 58 index, audio_element->index);
750
2/2
✓ Branch 0 taken 42 times.
✓ Branch 1 taken 16 times.
58 if (flags & AVFMT_SHOW_IDS)
751 42 av_log(NULL, AV_LOG_INFO, "[0x%"PRIx64"]", audio_element->id);
752 58 av_log(NULL, AV_LOG_INFO, "\n");
753 58 dump_dictionary(NULL, submix_element->annotations, "Annotations", " ", AV_LOG_INFO);
754 }
755 }
756
2/2
✓ Branch 0 taken 115 times.
✓ Branch 1 taken 55 times.
170 for (int k = 0; k < sub_mix->nb_layouts; k++) {
757 115 const AVIAMFSubmixLayout *submix_layout = sub_mix->layouts[k];
758 115 av_log(NULL, AV_LOG_INFO, " Layout #%d:", k);
759
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 109 times.
115 if (submix_layout->layout_type == 2 ||
760
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 submix_layout->layout_type == 3) {
761 115 ret = av_channel_layout_describe(&submix_layout->sound_system, buf, sizeof(buf));
762
1/2
✓ Branch 0 taken 115 times.
✗ Branch 1 not taken.
115 if (ret >= 0)
763 115 av_log(NULL, AV_LOG_INFO, " %s", buf);
764 }
765 115 av_log(NULL, AV_LOG_INFO, "\n");
766 }
767 }
768 49 break;
769 }
770 9 case AV_STREAM_GROUP_PARAMS_TILE_GRID: {
771 9 const AVStreamGroupTileGrid *tile_grid = stg->params.tile_grid;
772 9 AVCodecContext *avctx = avcodec_alloc_context3(NULL);
773 9 const char *ptr = NULL;
774 9 av_log(NULL, AV_LOG_INFO, " Tile Grid:");
775
3/6
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
9 if (avctx && stg->nb_streams && !avcodec_parameters_to_context(avctx, stg->streams[0]->codecpar)) {
776 9 avctx->width = tile_grid->width;
777 9 avctx->height = tile_grid->height;
778 9 avctx->coded_width = tile_grid->coded_width;
779 9 avctx->coded_height = tile_grid->coded_height;
780
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if (ic->dump_separator)
781 9 av_opt_set(avctx, "dump_separator", ic->dump_separator, 0);
782 9 buf[0] = 0;
783 9 avcodec_string(buf, sizeof(buf), avctx, is_output);
784 9 ptr = av_stristr(buf, " ");
785 }
786 9 avcodec_free_context(&avctx);
787
1/2
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
9 if (ptr)
788 9 av_log(NULL, AV_LOG_INFO, "%s", ptr);
789 9 dump_disposition(stg->disposition, AV_LOG_INFO);
790 9 av_log(NULL, AV_LOG_INFO, "\n");
791 9 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
792 9 dump_sidedata(NULL, tile_grid->coded_side_data, tile_grid->nb_coded_side_data,
793 9 tile_grid->width, tile_grid->height, (AVRational) {0,1},
794 " ", AV_LOG_INFO);
795
2/2
✓ Branch 0 taken 28 times.
✓ Branch 1 taken 9 times.
37 for (int i = 0; i < tile_grid->nb_tiles; i++) {
796 28 const AVStream *st = NULL;
797
1/2
✓ Branch 0 taken 28 times.
✗ Branch 1 not taken.
28 if (tile_grid->offsets[i].idx < stg->nb_streams)
798 28 st = stg->streams[tile_grid->offsets[i].idx];
799
3/4
✓ Branch 0 taken 28 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 2 times.
28 if (st && !printed[st->index]) {
800 26 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
801 26 printed[st->index] = 1;
802 }
803 }
804
2/2
✓ Branch 0 taken 26 times.
✓ Branch 1 taken 9 times.
35 for (int i = 0; i < stg->nb_streams; i++) {
805 26 const AVStream *st = stg->streams[i];
806
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 26 times.
26 if (!printed[st->index]) {
807 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_INFO);
808 printed[st->index] = 1;
809 }
810 }
811 9 break;
812 }
813 case AV_STREAM_GROUP_PARAMS_LCEVC: {
814 const AVStreamGroupLCEVC *lcevc = stg->params.lcevc;
815 AVCodecContext *avctx = avcodec_alloc_context3(NULL);
816 const char *ptr = NULL;
817 av_log(NULL, AV_LOG_INFO, " LCEVC:");
818 if (avctx && stg->nb_streams && !avcodec_parameters_to_context(avctx, stg->streams[0]->codecpar)) {
819 avctx->width = lcevc->width;
820 avctx->height = lcevc->height;
821 avctx->coded_width = lcevc->width;
822 avctx->coded_height = lcevc->height;
823 if (ic->dump_separator)
824 av_opt_set(avctx, "dump_separator", ic->dump_separator, 0);
825 buf[0] = 0;
826 avcodec_string(buf, sizeof(buf), avctx, is_output);
827 ptr = av_stristr(buf, " ");
828 }
829 avcodec_free_context(&avctx);
830 if (ptr)
831 av_log(NULL, AV_LOG_INFO, "%s", ptr);
832 av_log(NULL, AV_LOG_INFO, "\n");
833 for (int i = 0; i < stg->nb_streams; i++) {
834 const AVStream *st = stg->streams[i];
835 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
836 printed[st->index] = 1;
837 }
838 break;
839 }
840 default:
841 break;
842 }
843 110 }
844
845 16182 void av_dump_format(AVFormatContext *ic, int index,
846 const char *url, int is_output)
847 {
848 int i;
849
1/2
✓ Branch 0 taken 16182 times.
✗ Branch 1 not taken.
16182 uint8_t *printed = ic->nb_streams ? av_mallocz(ic->nb_streams) : NULL;
850
2/4
✓ Branch 0 taken 16182 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 16182 times.
16182 if (ic->nb_streams && !printed)
851 return;
852
853
6/6
✓ Branch 0 taken 8539 times.
✓ Branch 1 taken 7643 times.
✓ Branch 2 taken 8539 times.
✓ Branch 3 taken 7643 times.
✓ Branch 4 taken 8539 times.
✓ Branch 5 taken 7643 times.
32364 av_log(NULL, AV_LOG_INFO, "%s #%d, %s, %s '%s':\n",
854 is_output ? "Output" : "Input",
855 index,
856 16182 is_output ? ic->oformat->name : ic->iformat->name,
857 is_output ? "to" : "from", url);
858 16182 dump_metadata(NULL, ic->metadata, " ", AV_LOG_INFO);
859
860
2/2
✓ Branch 0 taken 7643 times.
✓ Branch 1 taken 8539 times.
16182 if (!is_output) {
861 7643 av_log(NULL, AV_LOG_INFO, " Duration: ");
862
2/2
✓ Branch 0 taken 6453 times.
✓ Branch 1 taken 1190 times.
7643 if (ic->duration != AV_NOPTS_VALUE) {
863 int64_t hours, mins, secs, us;
864
1/2
✓ Branch 0 taken 6453 times.
✗ Branch 1 not taken.
6453 int64_t duration = ic->duration + (ic->duration <= INT64_MAX - 5000 ? 5000 : 0);
865 6453 secs = duration / AV_TIME_BASE;
866 6453 us = duration % AV_TIME_BASE;
867 6453 mins = secs / 60;
868 6453 secs %= 60;
869 6453 hours = mins / 60;
870 6453 mins %= 60;
871 6453 av_log(NULL, AV_LOG_INFO, "%02"PRId64":%02"PRId64":%02"PRId64".%02"PRId64"", hours, mins, secs,
872 (100 * us) / AV_TIME_BASE);
873 } else {
874 1190 av_log(NULL, AV_LOG_INFO, "N/A");
875 }
876
2/2
✓ Branch 0 taken 5868 times.
✓ Branch 1 taken 1775 times.
7643 if (ic->start_time != AV_NOPTS_VALUE) {
877 int secs, us;
878 5868 av_log(NULL, AV_LOG_INFO, ", start: ");
879 5868 secs = llabs(ic->start_time / AV_TIME_BASE);
880 5868 us = llabs(ic->start_time % AV_TIME_BASE);
881 5868 av_log(NULL, AV_LOG_INFO, "%s%d.%06d",
882 5868 ic->start_time >= 0 ? "" : "-",
883 secs,
884
2/2
✓ Branch 0 taken 5866 times.
✓ Branch 1 taken 2 times.
5868 (int) av_rescale(us, 1000000, AV_TIME_BASE));
885 }
886 7643 av_log(NULL, AV_LOG_INFO, ", bitrate: ");
887
2/2
✓ Branch 0 taken 3377 times.
✓ Branch 1 taken 4266 times.
7643 if (ic->bit_rate)
888 3377 av_log(NULL, AV_LOG_INFO, "%"PRId64" kb/s", ic->bit_rate / 1000);
889 else
890 4266 av_log(NULL, AV_LOG_INFO, "N/A");
891 7643 av_log(NULL, AV_LOG_INFO, "\n");
892 }
893
894
2/2
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 16138 times.
16182 if (ic->nb_chapters)
895 44 av_log(NULL, AV_LOG_INFO, " Chapters:\n");
896
2/2
✓ Branch 0 taken 105 times.
✓ Branch 1 taken 16182 times.
16287 for (i = 0; i < ic->nb_chapters; i++) {
897 105 const AVChapter *ch = ic->chapters[i];
898 105 av_log(NULL, AV_LOG_INFO, " Chapter #%d:%d: ", index, i);
899 105 av_log(NULL, AV_LOG_INFO,
900 105 "start %f, ", ch->start * av_q2d(ch->time_base));
901 105 av_log(NULL, AV_LOG_INFO,
902 105 "end %f\n", ch->end * av_q2d(ch->time_base));
903
904 105 dump_metadata(NULL, ch->metadata, " ", AV_LOG_INFO);
905 }
906
907
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 16123 times.
16182 if (ic->nb_programs) {
908 59 int j, k, total = 0;
909
2/2
✓ Branch 0 taken 59 times.
✓ Branch 1 taken 59 times.
118 for (j = 0; j < ic->nb_programs; j++) {
910 59 const AVProgram *program = ic->programs[j];
911 59 const AVDictionaryEntry *name = av_dict_get(program->metadata,
912 "name", NULL, 0);
913
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 59 times.
59 av_log(NULL, AV_LOG_INFO, " Program %d %s\n", program->id,
914 name ? name->value : "");
915 59 dump_metadata(NULL, program->metadata, " ", AV_LOG_INFO);
916
2/2
✓ Branch 0 taken 111 times.
✓ Branch 1 taken 59 times.
170 for (k = 0; k < program->nb_stream_indexes; k++) {
917 111 dump_stream_format(ic, program->stream_index[k],
918 -1, index, is_output, AV_LOG_INFO);
919 111 printed[program->stream_index[k]] = 1;
920 }
921 59 total += program->nb_stream_indexes;
922 }
923
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 56 times.
59 if (total < ic->nb_streams)
924 3 av_log(NULL, AV_LOG_INFO, " No Program\n");
925 }
926
927
2/2
✓ Branch 0 taken 110 times.
✓ Branch 1 taken 16182 times.
16292 for (i = 0; i < ic->nb_stream_groups; i++)
928 110 dump_stream_group(ic, printed, i, index, is_output);
929
930
2/2
✓ Branch 0 taken 17474 times.
✓ Branch 1 taken 16182 times.
33656 for (i = 0; i < ic->nb_streams; i++)
931
2/2
✓ Branch 0 taken 17102 times.
✓ Branch 1 taken 372 times.
17474 if (!printed[i])
932 17102 dump_stream_format(ic, i, -1, index, is_output, AV_LOG_INFO);
933
934 16182 av_free(printed);
935 }
936