FFmpeg coverage


Directory: ../../../ffmpeg/
File: src/libavformat/dump.c
Date: 2025-10-10 03:51:19
Exec Total Coverage
Lines: 432 609 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 32563 static void print_fps(double d, const char *postfix, int log_level)
130 {
131 32563 uint64_t v = lrintf(d * 100);
132
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32563 times.
32563 if (!v)
133 av_log(NULL, log_level, "%1.4f %s", d, postfix);
134
2/2
✓ Branch 0 taken 2050 times.
✓ Branch 1 taken 30513 times.
32563 else if (v % 100)
135 2050 av_log(NULL, log_level, "%3.2f %s", d, postfix);
136
2/2
✓ Branch 0 taken 28254 times.
✓ Branch 1 taken 2259 times.
30513 else if (v % (100 * 1000))
137 28254 av_log(NULL, log_level, "%1.0f %s", d, postfix);
138 else
139 2259 av_log(NULL, log_level, "%1.0fk %s", d / 1000, postfix);
140 32563 }
141
142 12662 static void dump_dictionary(void *ctx, const AVDictionary *m,
143 const char *name, const char *indent,
144 int log_level)
145 {
146 12662 const AVDictionaryEntry *tag = NULL;
147
148
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12662 times.
12662 if (!m)
149 return;
150
151 12662 av_log(ctx, log_level, "%s%s:\n", indent, name);
152
2/2
✓ Branch 1 taken 21874 times.
✓ Branch 2 taken 12662 times.
34536 while ((tag = av_dict_iterate(m, tag)))
153
2/2
✓ Branch 0 taken 20755 times.
✓ Branch 1 taken 1119 times.
21874 if (strcmp("language", tag->key)) {
154 20755 const char *p = tag->value;
155 20755 av_log(ctx, log_level,
156 20755 "%s %-16s: ", indent, tag->key);
157
2/2
✓ Branch 0 taken 21275 times.
✓ Branch 1 taken 20755 times.
42030 while (*p) {
158 21275 size_t len = strcspn(p, "\x8\xa\xb\xc\xd");
159
1/2
✓ Branch 0 taken 21275 times.
✗ Branch 1 not taken.
21275 av_log(ctx, log_level, "%.*s", (int)(FFMIN(255, len)), p);
160 21275 p += len;
161
2/2
✓ Branch 0 taken 280 times.
✓ Branch 1 taken 20995 times.
21275 if (*p == 0xd) av_log(ctx, log_level, " ");
162
2/2
✓ Branch 0 taken 359 times.
✓ Branch 1 taken 20916 times.
21275 if (*p == 0xa) av_log(ctx, log_level, "\n%s %-16s: ", indent, "");
163
2/2
✓ Branch 0 taken 661 times.
✓ Branch 1 taken 20614 times.
21275 if (*p) p++;
164 }
165 20755 av_log(ctx, log_level, "\n");
166 }
167 }
168
169 33495 static void dump_metadata(void *ctx, const AVDictionary *m, const char *indent,
170 int log_level)
171 {
172
6/6
✓ Branch 0 taken 12945 times.
✓ Branch 1 taken 20550 times.
✓ Branch 3 taken 9899 times.
✓ Branch 4 taken 3046 times.
✓ Branch 6 taken 9531 times.
✓ Branch 7 taken 368 times.
33495 if (m && !(av_dict_count(m) == 1 && av_dict_get(m, "language", NULL, 0)))
173 12577 dump_dictionary(ctx, m, "Metadata", indent, log_level);
174 33495 }
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 476 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 476 times.
476 if (sd->size < sizeof(*stereo)) {
257 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
258 return;
259 }
260
261 476 stereo = (const AVStereo3D *)sd->data;
262
263 476 av_log(ctx, log_level, "%s, view: %s, primary eye: %s",
264 476 av_stereo3d_type_name(stereo->type), av_stereo3d_view_name(stereo->view),
265 476 av_stereo3d_primary_eye_name(stereo->primary_eye));
266
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 469 times.
476 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 469 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
476 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 469 times.
✓ Branch 2 taken 7 times.
✗ Branch 3 not taken.
476 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 467 times.
476 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 328 static void dump_cpb(void *ctx, const AVPacketSideData *sd, int log_level)
322 {
323 328 const AVCPBProperties *cpb = (const AVCPBProperties *)sd->data;
324
325
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 328 times.
328 if (sd->size < sizeof(*cpb)) {
326 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
327 return;
328 }
329
330 328 av_log(ctx, log_level,
331 "bitrate max/min/avg: %"PRId64"/%"PRId64"/%"PRId64" buffer size: %"PRId64" ",
332 328 cpb->max_bitrate, cpb->min_bitrate, cpb->avg_bitrate,
333 328 cpb->buffer_size);
334
1/2
✓ Branch 0 taken 328 times.
✗ Branch 1 not taken.
328 if (cpb->vbv_delay == UINT64_MAX)
335 328 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)
371 {
372 6 const AVAmbientViewingEnvironment *ambient =
373 (const AVAmbientViewingEnvironment *)sd->data;
374 6 av_log(ctx, AV_LOG_INFO,
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,
406 "[%"SIZE_SPECIFIER", %"SIZE_SPECIFIER", %"SIZE_SPECIFIER", %"SIZE_SPECIFIER"] ",
407 l, t, r, b);
408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 7 times.
7 } else if (spherical->projection == AV_SPHERICAL_CUBEMAP) {
409 av_log(ctx, log_level, "[pad %"PRIu32"] ", spherical->padding);
410 }
411 }
412
413 13 static void dump_dovi_conf(void *ctx, const AVPacketSideData *sd,
414 int log_level)
415 {
416 13 const AVDOVIDecoderConfigurationRecord *dovi =
417 (const AVDOVIDecoderConfigurationRecord *)sd->data;
418
419 13 av_log(ctx, log_level, "version: %d.%d, profile: %d, level: %d, "
420 "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d, "
421 "compression: %d",
422 13 dovi->dv_version_major, dovi->dv_version_minor,
423 13 dovi->dv_profile, dovi->dv_level,
424 13 dovi->rpu_present_flag,
425 13 dovi->el_present_flag,
426 13 dovi->bl_present_flag,
427 13 dovi->dv_bl_signal_compatibility_id,
428 13 dovi->dv_md_compression);
429 13 }
430
431 static void dump_s12m_timecode(void *ctx, AVRational avg_frame_rate, const AVPacketSideData *sd,
432 int log_level)
433 {
434 const uint32_t *tc = (const uint32_t *)sd->data;
435
436 if ((sd->size != sizeof(uint32_t) * 4) || (tc[0] > 3)) {
437 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
438 return;
439 }
440
441 for (int j = 1; j <= tc[0]; j++) {
442 char tcbuf[AV_TIMECODE_STR_SIZE];
443 av_timecode_make_smpte_tc_string2(tcbuf, avg_frame_rate, tc[j], 0, 0);
444 av_log(ctx, log_level, "timecode - %s%s", tcbuf, j != tc[0] ? ", " : "");
445 }
446 }
447
448 18 static void dump_cropping(void *ctx, const AVPacketSideData *sd)
449 {
450 uint32_t top, bottom, left, right;
451
452
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 18 times.
18 if (sd->size < sizeof(uint32_t) * 4) {
453 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
454 return;
455 }
456
457 18 top = AV_RL32(sd->data + 0);
458 18 bottom = AV_RL32(sd->data + 4);
459 18 left = AV_RL32(sd->data + 8);
460 18 right = AV_RL32(sd->data + 12);
461
462 18 av_log(ctx, AV_LOG_INFO, "%d/%d/%d/%d", left, right, top, bottom);
463 }
464
465 2 static void dump_tdrdi(void *ctx, const AVPacketSideData *sd)
466 {
467 2 const AV3DReferenceDisplaysInfo *tdrdi =
468 (const AV3DReferenceDisplaysInfo *)sd->data;
469
470 2 av_log(ctx, AV_LOG_INFO, "number of reference displays: %u", tdrdi->num_ref_displays);
471 2 }
472
473 17331 static void dump_sidedata(void *ctx, const AVPacketSideData *side_data, int nb_side_data,
474 int w, int h, AVRational avg_frame_rate,
475 const char *indent, int log_level)
476 {
477 int i;
478
479
2/2
✓ Branch 0 taken 918 times.
✓ Branch 1 taken 16413 times.
17331 if (nb_side_data)
480 918 av_log(ctx, log_level, "%sSide data:\n", indent);
481
482
2/2
✓ Branch 0 taken 984 times.
✓ Branch 1 taken 17331 times.
18315 for (i = 0; i < nb_side_data; i++) {
483 984 const AVPacketSideData *sd = &side_data[i];
484 984 const char *name = av_packet_side_data_name(sd->type);
485
486 984 av_log(ctx, log_level, "%s ", indent);
487
1/2
✓ Branch 0 taken 984 times.
✗ Branch 1 not taken.
984 if (name)
488 984 av_log(ctx, AV_LOG_INFO, "%s: ", name);
489
12/16
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✓ Branch 2 taken 37 times.
✓ Branch 3 taken 476 times.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 328 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 31 times.
984 switch (sd->type) {
490 case AV_PKT_DATA_PARAM_CHANGE:
491 dump_paramchange(ctx, sd, log_level);
492 break;
493 case AV_PKT_DATA_REPLAYGAIN:
494 dump_replaygain(ctx, sd, log_level);
495 break;
496 37 case AV_PKT_DATA_DISPLAYMATRIX:
497 37 av_log(ctx, log_level, "rotation of %.2f degrees",
498 37 av_display_rotation_get((const int32_t *)sd->data));
499 37 break;
500 476 case AV_PKT_DATA_STEREO3D:
501 476 dump_stereo3d(ctx, sd, log_level);
502 476 break;
503 12 case AV_PKT_DATA_AUDIO_SERVICE_TYPE:
504 12 dump_audioservicetype(ctx, sd, log_level);
505 12 break;
506 case AV_PKT_DATA_QUALITY_STATS:
507 av_log(ctx, log_level, "%"PRId32", pict_type: %c",
508 AV_RL32(sd->data), av_get_picture_type_char(sd->data[4]));
509 break;
510 328 case AV_PKT_DATA_CPB_PROPERTIES:
511 328 dump_cpb(ctx, sd, log_level);
512 328 break;
513 23 case AV_PKT_DATA_MASTERING_DISPLAY_METADATA:
514 23 dump_mastering_display_metadata(ctx, sd, log_level);
515 23 break;
516 18 case AV_PKT_DATA_SPHERICAL:
517 18 dump_spherical(ctx, w, h, sd, log_level);
518 18 break;
519 20 case AV_PKT_DATA_CONTENT_LIGHT_LEVEL:
520 20 dump_content_light_metadata(ctx, sd, log_level);
521 20 break;
522 13 case AV_PKT_DATA_DOVI_CONF:
523 13 dump_dovi_conf(ctx, sd, log_level);
524 13 break;
525 case AV_PKT_DATA_S12M_TIMECODE:
526 dump_s12m_timecode(ctx, avg_frame_rate, sd, log_level);
527 break;
528 6 case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:
529 6 dump_ambient_viewing_environment_metadata(ctx, sd);
530 6 break;
531 18 case AV_PKT_DATA_FRAME_CROPPING:
532 18 dump_cropping(ctx, sd);
533 18 break;
534 2 case AV_PKT_DATA_3D_REFERENCE_DISPLAYS:
535 2 dump_tdrdi(ctx, sd);
536 2 break;
537 31 default:
538
1/2
✓ Branch 0 taken 31 times.
✗ Branch 1 not taken.
31 if (name)
539 31 av_log(ctx, log_level,
540 31 "(%"SIZE_SPECIFIER" bytes)", sd->size);
541 else
542 av_log(ctx, log_level, "unknown side data type %d "
543 "(%"SIZE_SPECIFIER" bytes)", sd->type, sd->size);
544 31 break;
545 }
546
547 984 av_log(ctx, log_level, "\n");
548 }
549 17331 }
550
551 17410 static void dump_disposition(int disposition, int log_level)
552 {
553
2/2
✓ Branch 0 taken 1859 times.
✓ Branch 1 taken 15551 times.
17410 if (disposition & AV_DISPOSITION_DEFAULT)
554 1859 av_log(NULL, log_level, " (default)");
555
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17406 times.
17410 if (disposition & AV_DISPOSITION_DUB)
556 4 av_log(NULL, log_level, " (dub)");
557
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17406 times.
17410 if (disposition & AV_DISPOSITION_ORIGINAL)
558 4 av_log(NULL, log_level, " (original)");
559
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 17405 times.
17410 if (disposition & AV_DISPOSITION_COMMENT)
560 5 av_log(NULL, log_level, " (comment)");
561
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 17409 times.
17410 if (disposition & AV_DISPOSITION_LYRICS)
562 1 av_log(NULL, log_level, " (lyrics)");
563
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 17409 times.
17410 if (disposition & AV_DISPOSITION_KARAOKE)
564 1 av_log(NULL, log_level, " (karaoke)");
565
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 17403 times.
17410 if (disposition & AV_DISPOSITION_FORCED)
566 7 av_log(NULL, log_level, " (forced)");
567
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 17388 times.
17410 if (disposition & AV_DISPOSITION_HEARING_IMPAIRED)
568 22 av_log(NULL, log_level, " (hearing impaired)");
569
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 17394 times.
17410 if (disposition & AV_DISPOSITION_VISUAL_IMPAIRED)
570 16 av_log(NULL, log_level, " (visual impaired)");
571
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17410 times.
17410 if (disposition & AV_DISPOSITION_CLEAN_EFFECTS)
572 av_log(NULL, log_level, " (clean effects)");
573
2/2
✓ Branch 0 taken 97 times.
✓ Branch 1 taken 17313 times.
17410 if (disposition & AV_DISPOSITION_ATTACHED_PIC)
574 97 av_log(NULL, log_level, " (attached pic)");
575
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17410 times.
17410 if (disposition & AV_DISPOSITION_TIMED_THUMBNAILS)
576 av_log(NULL, log_level, " (timed thumbnails)");
577
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 17404 times.
17410 if (disposition & AV_DISPOSITION_CAPTIONS)
578 6 av_log(NULL, log_level, " (captions)");
579
2/2
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 17392 times.
17410 if (disposition & AV_DISPOSITION_DESCRIPTIONS)
580 18 av_log(NULL, log_level, " (descriptions)");
581
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 17406 times.
17410 if (disposition & AV_DISPOSITION_METADATA)
582 4 av_log(NULL, log_level, " (metadata)");
583
2/2
✓ Branch 0 taken 250 times.
✓ Branch 1 taken 17160 times.
17410 if (disposition & AV_DISPOSITION_DEPENDENT)
584 250 av_log(NULL, log_level, " (dependent)");
585
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17410 times.
17410 if (disposition & AV_DISPOSITION_STILL_IMAGE)
586 av_log(NULL, log_level, " (still image)");
587
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17410 times.
17410 if (disposition & AV_DISPOSITION_NON_DIEGETIC)
588 av_log(NULL, log_level, " (non-diegetic)");
589
2/2
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 17403 times.
17410 if (disposition & AV_DISPOSITION_MULTILAYER)
590 7 av_log(NULL, log_level, " (multilayer)");
591 17410 }
592
593 /* "user interface" functions */
594 17325 static void dump_stream_format(const AVFormatContext *ic, int i,
595 int group_index, int index, int is_output,
596 int log_level)
597 {
598 char buf[256];
599
2/2
✓ Branch 0 taken 8950 times.
✓ Branch 1 taken 8375 times.
17325 int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
600 17325 const AVStream *st = ic->streams[i];
601 17325 const FFStream *const sti = cffstream(st);
602 17325 const AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL, 0);
603 17325 const char *separator = ic->dump_separator;
604
2/2
✓ Branch 0 taken 364 times.
✓ Branch 1 taken 16961 times.
17325 const char *group_indent = group_index >= 0 ? " " : "";
605
2/2
✓ Branch 0 taken 364 times.
✓ Branch 1 taken 16961 times.
17325 const char *extra_indent = group_index >= 0 ? " " : " ";
606 AVCodecContext *avctx;
607 int ret;
608
609 17325 avctx = avcodec_alloc_context3(NULL);
610
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17325 times.
17325 if (!avctx)
611 return;
612
613 17325 ret = avcodec_parameters_to_context(avctx, st->codecpar);
614
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 17325 times.
17325 if (ret < 0) {
615 avcodec_free_context(&avctx);
616 return;
617 }
618
619 // Fields which are missing from AVCodecParameters need to be taken from the AVCodecContext
620
2/2
✓ Branch 0 taken 8375 times.
✓ Branch 1 taken 8950 times.
17325 if (sti->avctx) {
621 #if FF_API_CODEC_PROPS
622 FF_DISABLE_DEPRECATION_WARNINGS
623 8375 avctx->properties = sti->avctx->properties;
624 FF_ENABLE_DEPRECATION_WARNINGS
625 #endif
626 8375 avctx->codec = sti->avctx->codec;
627 8375 avctx->qmin = sti->avctx->qmin;
628 8375 avctx->qmax = sti->avctx->qmax;
629 8375 avctx->coded_width = sti->avctx->coded_width;
630 8375 avctx->coded_height = sti->avctx->coded_height;
631 }
632
633
1/2
✓ Branch 0 taken 17325 times.
✗ Branch 1 not taken.
17325 if (separator)
634 17325 av_opt_set(avctx, "dump_separator", separator, 0);
635 17325 avcodec_string(buf, sizeof(buf), avctx, is_output);
636 17325 avcodec_free_context(&avctx);
637
638 17325 av_log(NULL, log_level, "%s Stream #%d", group_indent, index);
639 17325 av_log(NULL, log_level, ":%d", i);
640
641 /* the pid is an important information, so we display it */
642 /* XXX: add a generic system */
643
2/2
✓ Branch 0 taken 1013 times.
✓ Branch 1 taken 16312 times.
17325 if (flags & AVFMT_SHOW_IDS)
644 1013 av_log(NULL, log_level, "[0x%x]", st->id);
645
2/2
✓ Branch 0 taken 1467 times.
✓ Branch 1 taken 15858 times.
17325 if (lang)
646 1467 av_log(NULL, log_level, "(%s)", lang->value);
647 17325 av_log(NULL, AV_LOG_DEBUG, ", %d, %d/%d", sti->codec_info_nb_frames,
648 17325 st->time_base.num, st->time_base.den);
649 17325 av_log(NULL, log_level, ": %s", buf);
650
651
4/4
✓ Branch 0 taken 2482 times.
✓ Branch 1 taken 14843 times.
✓ Branch 2 taken 375 times.
✓ Branch 3 taken 2107 times.
19807 if (st->sample_aspect_ratio.num &&
652 2482 av_cmp_q(st->sample_aspect_ratio, st->codecpar->sample_aspect_ratio)) {
653 AVRational display_aspect_ratio;
654 375 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
655 375 st->codecpar->width * (int64_t)st->sample_aspect_ratio.num,
656 375 st->codecpar->height * (int64_t)st->sample_aspect_ratio.den,
657 1024 * 1024);
658 375 av_log(NULL, log_level, ", SAR %d:%d DAR %d:%d",
659 375 st->sample_aspect_ratio.num, st->sample_aspect_ratio.den,
660 display_aspect_ratio.num, display_aspect_ratio.den);
661 }
662
663
2/2
✓ Branch 0 taken 13405 times.
✓ Branch 1 taken 3920 times.
17325 if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
664
3/4
✓ Branch 0 taken 12550 times.
✓ Branch 1 taken 855 times.
✓ Branch 2 taken 12550 times.
✗ Branch 3 not taken.
13405 int fps = st->avg_frame_rate.den && st->avg_frame_rate.num;
665
3/4
✓ Branch 0 taken 6608 times.
✓ Branch 1 taken 6797 times.
✓ Branch 2 taken 6608 times.
✗ Branch 3 not taken.
13405 int tbr = st->r_frame_rate.den && st->r_frame_rate.num;
666
2/4
✓ Branch 0 taken 13405 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 13405 times.
✗ Branch 3 not taken.
13405 int tbn = st->time_base.den && st->time_base.num;
667
668
5/6
✓ Branch 0 taken 855 times.
✓ Branch 1 taken 12550 times.
✓ Branch 2 taken 20 times.
✓ Branch 3 taken 835 times.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
13405 if (fps || tbr || tbn)
669 13405 av_log(NULL, log_level, "%s", separator);
670
671
2/2
✓ Branch 0 taken 12550 times.
✓ Branch 1 taken 855 times.
13405 if (fps)
672
3/4
✓ Branch 0 taken 6777 times.
✓ Branch 1 taken 5773 times.
✓ Branch 2 taken 6777 times.
✗ Branch 3 not taken.
12550 print_fps(av_q2d(st->avg_frame_rate), tbr || tbn ? "fps, " : "fps", log_level);
673
2/2
✓ Branch 0 taken 6608 times.
✓ Branch 1 taken 6797 times.
13405 if (tbr)
674
1/2
✓ Branch 0 taken 6608 times.
✗ Branch 1 not taken.
6608 print_fps(av_q2d(st->r_frame_rate), tbn ? "tbr, " : "tbr", log_level);
675
1/2
✓ Branch 0 taken 13405 times.
✗ Branch 1 not taken.
13405 if (tbn)
676 13405 print_fps(1 / av_q2d(st->time_base), "tbn", log_level);
677 }
678
679
6/8
✓ Branch 0 taken 6444 times.
✓ Branch 1 taken 10881 times.
✓ Branch 2 taken 331 times.
✓ Branch 3 taken 6113 times.
✓ Branch 4 taken 331 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 331 times.
✗ Branch 7 not taken.
17325 if (st->start_time != AV_NOPTS_VALUE && st->start_time != 0 && st->time_base.den && st->time_base.num) {
680 331 const double stream_start = av_q2d(st->time_base) * st->start_time;
681 331 av_log(NULL, AV_LOG_INFO, ", start %.6f", stream_start);
682 }
683
684 17325 dump_disposition(st->disposition, log_level);
685 17325 av_log(NULL, log_level, "\n");
686
687 17325 dump_metadata(NULL, st->metadata, extra_indent, log_level);
688
689 17325 dump_sidedata(NULL, st->codecpar->coded_side_data, st->codecpar->nb_coded_side_data,
690 17325 st->codecpar->width, st->codecpar->height, st->avg_frame_rate,
691 extra_indent, log_level);
692 }
693
694 85 static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
695 int i, int index, int is_output)
696 {
697 85 const AVStreamGroup *stg = ic->stream_groups[i];
698
2/2
✓ Branch 0 taken 23 times.
✓ Branch 1 taken 62 times.
85 int flags = (is_output ? ic->oformat->flags : ic->iformat->flags);
699 char buf[512];
700 int ret;
701
702 85 av_log(NULL, AV_LOG_INFO, " Stream group #%d:%d", index, i);
703
2/2
✓ Branch 0 taken 62 times.
✓ Branch 1 taken 23 times.
85 if (flags & AVFMT_SHOW_IDS)
704 62 av_log(NULL, AV_LOG_INFO, "[0x%"PRIx64"]", stg->id);
705 85 av_log(NULL, AV_LOG_INFO, ":");
706
707
3/5
✓ Branch 0 taken 41 times.
✓ Branch 1 taken 38 times.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
85 switch (stg->type) {
708 41 case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT: {
709 41 const AVIAMFAudioElement *audio_element = stg->params.iamf_audio_element;
710 41 av_log(NULL, AV_LOG_INFO, " IAMF Audio Element:");
711 41 dump_disposition(stg->disposition, AV_LOG_INFO);
712 41 av_log(NULL, AV_LOG_INFO, "\n");
713 41 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
714
2/2
✓ Branch 0 taken 92 times.
✓ Branch 1 taken 41 times.
133 for (int j = 0; j < audio_element->nb_layers; j++) {
715 92 const AVIAMFLayer *layer = audio_element->layers[j];
716 92 int channel_count = layer->ch_layout.nb_channels;
717 92 av_log(NULL, AV_LOG_INFO, " Layer %d:", j);
718 92 ret = av_channel_layout_describe(&layer->ch_layout, buf, sizeof(buf));
719
1/2
✓ Branch 0 taken 92 times.
✗ Branch 1 not taken.
92 if (ret >= 0)
720 92 av_log(NULL, AV_LOG_INFO, " %s", buf);
721 92 av_log(NULL, AV_LOG_INFO, "\n");
722
3/4
✓ Branch 0 taken 350 times.
✓ Branch 1 taken 92 times.
✓ Branch 2 taken 350 times.
✗ Branch 3 not taken.
442 for (int k = 0; channel_count > 0 && k < stg->nb_streams; k++) {
723 350 AVStream *st = stg->streams[k];
724 350 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
725 350 printed[st->index] = 1;
726 350 channel_count -= st->codecpar->ch_layout.nb_channels;
727 }
728 }
729 41 break;
730 }
731 38 case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION: {
732 38 const AVIAMFMixPresentation *mix_presentation = stg->params.iamf_mix_presentation;
733 38 av_log(NULL, AV_LOG_INFO, " IAMF Mix Presentation:");
734 38 dump_disposition(stg->disposition, AV_LOG_INFO);
735 38 av_log(NULL, AV_LOG_INFO, "\n");
736 38 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
737 38 dump_dictionary(NULL, mix_presentation->annotations, "Annotations", " ", AV_LOG_INFO);
738
2/2
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 38 times.
82 for (int j = 0; j < mix_presentation->nb_submixes; j++) {
739 44 AVIAMFSubmix *sub_mix = mix_presentation->submixes[j];
740 44 av_log(NULL, AV_LOG_INFO, " Submix %d:\n", j);
741
2/2
✓ Branch 0 taken 47 times.
✓ Branch 1 taken 44 times.
91 for (int k = 0; k < sub_mix->nb_elements; k++) {
742 47 const AVIAMFSubmixElement *submix_element = sub_mix->elements[k];
743 47 const AVStreamGroup *audio_element = NULL;
744
1/2
✓ Branch 0 taken 50 times.
✗ Branch 1 not taken.
50 for (int l = 0; l < ic->nb_stream_groups; l++)
745
1/2
✓ Branch 0 taken 50 times.
✗ Branch 1 not taken.
50 if (ic->stream_groups[l]->type == AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT &&
746
2/2
✓ Branch 0 taken 47 times.
✓ Branch 1 taken 3 times.
50 ic->stream_groups[l]->id == submix_element->audio_element_id) {
747 47 audio_element = ic->stream_groups[l];
748 47 break;
749 }
750
1/2
✓ Branch 0 taken 47 times.
✗ Branch 1 not taken.
47 if (audio_element) {
751 47 av_log(NULL, AV_LOG_INFO, " IAMF Audio Element #%d:%d",
752 47 index, audio_element->index);
753
2/2
✓ Branch 0 taken 33 times.
✓ Branch 1 taken 14 times.
47 if (flags & AVFMT_SHOW_IDS)
754 33 av_log(NULL, AV_LOG_INFO, "[0x%"PRIx64"]", audio_element->id);
755 47 av_log(NULL, AV_LOG_INFO, "\n");
756 47 dump_dictionary(NULL, submix_element->annotations, "Annotations", " ", AV_LOG_INFO);
757 }
758 }
759
2/2
✓ Branch 0 taken 98 times.
✓ Branch 1 taken 44 times.
142 for (int k = 0; k < sub_mix->nb_layouts; k++) {
760 98 const AVIAMFSubmixLayout *submix_layout = sub_mix->layouts[k];
761 98 av_log(NULL, AV_LOG_INFO, " Layout #%d:", k);
762
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 92 times.
98 if (submix_layout->layout_type == 2 ||
763
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 submix_layout->layout_type == 3) {
764 98 ret = av_channel_layout_describe(&submix_layout->sound_system, buf, sizeof(buf));
765
1/2
✓ Branch 0 taken 98 times.
✗ Branch 1 not taken.
98 if (ret >= 0)
766 98 av_log(NULL, AV_LOG_INFO, " %s", buf);
767 }
768 98 av_log(NULL, AV_LOG_INFO, "\n");
769 }
770 }
771 38 break;
772 }
773 6 case AV_STREAM_GROUP_PARAMS_TILE_GRID: {
774 6 const AVStreamGroupTileGrid *tile_grid = stg->params.tile_grid;
775 6 AVCodecContext *avctx = avcodec_alloc_context3(NULL);
776 6 const char *ptr = NULL;
777 6 av_log(NULL, AV_LOG_INFO, " Tile Grid:");
778
3/6
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
6 if (avctx && stg->nb_streams && !avcodec_parameters_to_context(avctx, stg->streams[0]->codecpar)) {
779 6 avctx->width = tile_grid->width;
780 6 avctx->height = tile_grid->height;
781 6 avctx->coded_width = tile_grid->coded_width;
782 6 avctx->coded_height = tile_grid->coded_height;
783
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 if (ic->dump_separator)
784 6 av_opt_set(avctx, "dump_separator", ic->dump_separator, 0);
785 6 buf[0] = 0;
786 6 avcodec_string(buf, sizeof(buf), avctx, is_output);
787 6 ptr = av_stristr(buf, " ");
788 }
789 6 avcodec_free_context(&avctx);
790
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
6 if (ptr)
791 6 av_log(NULL, AV_LOG_INFO, "%s", ptr);
792 6 dump_disposition(stg->disposition, AV_LOG_INFO);
793 6 av_log(NULL, AV_LOG_INFO, "\n");
794 6 dump_metadata(NULL, stg->metadata, " ", AV_LOG_INFO);
795 6 dump_sidedata(NULL, tile_grid->coded_side_data, tile_grid->nb_coded_side_data,
796 6 tile_grid->width, tile_grid->height, (AVRational) {0,1},
797 " ", AV_LOG_INFO);
798
2/2
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 6 times.
22 for (int i = 0; i < tile_grid->nb_tiles; i++) {
799 16 const AVStream *st = NULL;
800
1/2
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
16 if (tile_grid->offsets[i].idx < stg->nb_streams)
801 16 st = stg->streams[tile_grid->offsets[i].idx];
802
3/4
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 14 times.
✓ Branch 3 taken 2 times.
16 if (st && !printed[st->index]) {
803 14 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
804 14 printed[st->index] = 1;
805 }
806 }
807
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 6 times.
20 for (int i = 0; i < stg->nb_streams; i++) {
808 14 const AVStream *st = stg->streams[i];
809
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 14 times.
14 if (!printed[st->index]) {
810 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_INFO);
811 printed[st->index] = 1;
812 }
813 }
814 6 break;
815 }
816 case AV_STREAM_GROUP_PARAMS_LCEVC: {
817 const AVStreamGroupLCEVC *lcevc = stg->params.lcevc;
818 AVCodecContext *avctx = avcodec_alloc_context3(NULL);
819 const char *ptr = NULL;
820 av_log(NULL, AV_LOG_INFO, " LCEVC:");
821 if (avctx && stg->nb_streams && !avcodec_parameters_to_context(avctx, stg->streams[0]->codecpar)) {
822 avctx->width = lcevc->width;
823 avctx->height = lcevc->height;
824 avctx->coded_width = lcevc->width;
825 avctx->coded_height = lcevc->height;
826 if (ic->dump_separator)
827 av_opt_set(avctx, "dump_separator", ic->dump_separator, 0);
828 buf[0] = 0;
829 avcodec_string(buf, sizeof(buf), avctx, is_output);
830 ptr = av_stristr(buf, " ");
831 }
832 avcodec_free_context(&avctx);
833 if (ptr)
834 av_log(NULL, AV_LOG_INFO, "%s", ptr);
835 av_log(NULL, AV_LOG_INFO, "\n");
836 for (int i = 0; i < stg->nb_streams; i++) {
837 const AVStream *st = stg->streams[i];
838 dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
839 printed[st->index] = 1;
840 }
841 break;
842 }
843 default:
844 break;
845 }
846 85 }
847
848 15929 void av_dump_format(AVFormatContext *ic, int index,
849 const char *url, int is_output)
850 {
851 int i;
852
1/2
✓ Branch 0 taken 15929 times.
✗ Branch 1 not taken.
15929 uint8_t *printed = ic->nb_streams ? av_mallocz(ic->nb_streams) : NULL;
853
2/4
✓ Branch 0 taken 15929 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 15929 times.
15929 if (ic->nb_streams && !printed)
854 return;
855
856
6/6
✓ Branch 0 taken 8406 times.
✓ Branch 1 taken 7523 times.
✓ Branch 2 taken 8406 times.
✓ Branch 3 taken 7523 times.
✓ Branch 4 taken 8406 times.
✓ Branch 5 taken 7523 times.
31858 av_log(NULL, AV_LOG_INFO, "%s #%d, %s, %s '%s':\n",
857 is_output ? "Output" : "Input",
858 index,
859 15929 is_output ? ic->oformat->name : ic->iformat->name,
860 is_output ? "to" : "from", url);
861 15929 dump_metadata(NULL, ic->metadata, " ", AV_LOG_INFO);
862
863
2/2
✓ Branch 0 taken 7523 times.
✓ Branch 1 taken 8406 times.
15929 if (!is_output) {
864 7523 av_log(NULL, AV_LOG_INFO, " Duration: ");
865
2/2
✓ Branch 0 taken 6365 times.
✓ Branch 1 taken 1158 times.
7523 if (ic->duration != AV_NOPTS_VALUE) {
866 int64_t hours, mins, secs, us;
867
1/2
✓ Branch 0 taken 6365 times.
✗ Branch 1 not taken.
6365 int64_t duration = ic->duration + (ic->duration <= INT64_MAX - 5000 ? 5000 : 0);
868 6365 secs = duration / AV_TIME_BASE;
869 6365 us = duration % AV_TIME_BASE;
870 6365 mins = secs / 60;
871 6365 secs %= 60;
872 6365 hours = mins / 60;
873 6365 mins %= 60;
874 6365 av_log(NULL, AV_LOG_INFO, "%02"PRId64":%02"PRId64":%02"PRId64".%02"PRId64"", hours, mins, secs,
875 (100 * us) / AV_TIME_BASE);
876 } else {
877 1158 av_log(NULL, AV_LOG_INFO, "N/A");
878 }
879
2/2
✓ Branch 0 taken 5741 times.
✓ Branch 1 taken 1782 times.
7523 if (ic->start_time != AV_NOPTS_VALUE) {
880 int secs, us;
881 5741 av_log(NULL, AV_LOG_INFO, ", start: ");
882 5741 secs = llabs(ic->start_time / AV_TIME_BASE);
883 5741 us = llabs(ic->start_time % AV_TIME_BASE);
884 5741 av_log(NULL, AV_LOG_INFO, "%s%d.%06d",
885 5741 ic->start_time >= 0 ? "" : "-",
886 secs,
887
2/2
✓ Branch 0 taken 5730 times.
✓ Branch 1 taken 11 times.
5741 (int) av_rescale(us, 1000000, AV_TIME_BASE));
888 }
889 7523 av_log(NULL, AV_LOG_INFO, ", bitrate: ");
890
2/2
✓ Branch 0 taken 3294 times.
✓ Branch 1 taken 4229 times.
7523 if (ic->bit_rate)
891 3294 av_log(NULL, AV_LOG_INFO, "%"PRId64" kb/s", ic->bit_rate / 1000);
892 else
893 4229 av_log(NULL, AV_LOG_INFO, "N/A");
894 7523 av_log(NULL, AV_LOG_INFO, "\n");
895 }
896
897
2/2
✓ Branch 0 taken 44 times.
✓ Branch 1 taken 15885 times.
15929 if (ic->nb_chapters)
898 44 av_log(NULL, AV_LOG_INFO, " Chapters:\n");
899
2/2
✓ Branch 0 taken 105 times.
✓ Branch 1 taken 15929 times.
16034 for (i = 0; i < ic->nb_chapters; i++) {
900 105 const AVChapter *ch = ic->chapters[i];
901 105 av_log(NULL, AV_LOG_INFO, " Chapter #%d:%d: ", index, i);
902 105 av_log(NULL, AV_LOG_INFO,
903 105 "start %f, ", ch->start * av_q2d(ch->time_base));
904 105 av_log(NULL, AV_LOG_INFO,
905 105 "end %f\n", ch->end * av_q2d(ch->time_base));
906
907 105 dump_metadata(NULL, ch->metadata, " ", AV_LOG_INFO);
908 }
909
910
2/2
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 15878 times.
15929 if (ic->nb_programs) {
911 51 int j, k, total = 0;
912
2/2
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 51 times.
102 for (j = 0; j < ic->nb_programs; j++) {
913 51 const AVProgram *program = ic->programs[j];
914 51 const AVDictionaryEntry *name = av_dict_get(program->metadata,
915 "name", NULL, 0);
916
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 51 times.
51 av_log(NULL, AV_LOG_INFO, " Program %d %s\n", program->id,
917 name ? name->value : "");
918 51 dump_metadata(NULL, program->metadata, " ", AV_LOG_INFO);
919
2/2
✓ Branch 0 taken 103 times.
✓ Branch 1 taken 51 times.
154 for (k = 0; k < program->nb_stream_indexes; k++) {
920 103 dump_stream_format(ic, program->stream_index[k],
921 -1, index, is_output, AV_LOG_INFO);
922 103 printed[program->stream_index[k]] = 1;
923 }
924 51 total += program->nb_stream_indexes;
925 }
926
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 48 times.
51 if (total < ic->nb_streams)
927 3 av_log(NULL, AV_LOG_INFO, " No Program\n");
928 }
929
930
2/2
✓ Branch 0 taken 85 times.
✓ Branch 1 taken 15929 times.
16014 for (i = 0; i < ic->nb_stream_groups; i++)
931 85 dump_stream_group(ic, printed, i, index, is_output);
932
933
2/2
✓ Branch 0 taken 17160 times.
✓ Branch 1 taken 15929 times.
33089 for (i = 0; i < ic->nb_streams; i++)
934
2/2
✓ Branch 0 taken 16858 times.
✓ Branch 1 taken 302 times.
17160 if (!printed[i])
935 16858 dump_stream_format(ic, i, -1, index, is_output, AV_LOG_INFO);
936
937 15929 av_free(printed);
938 }
939