FFmpeg
Loading...
Searching...
No Matches
vf_showinfo.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 Stefano Sabatini
3 * This file is part of FFmpeg.
4 *
5 * FFmpeg is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * FFmpeg is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with FFmpeg; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20/**
21 * @file
22 * filter for showing textual video frame information
23 */
24
25#include <ctype.h>
26#include <inttypes.h>
27
28#include "libavutil/bswap.h"
29#include "libavutil/adler32.h"
30#include "libavutil/display.h"
31#include "libavutil/dovi_meta.h"
32#include "libavutil/imgutils.h"
33#include "libavutil/internal.h"
37#include "libavutil/opt.h"
38#include "libavutil/pixdesc.h"
39#include "libavutil/spherical.h"
40#include "libavutil/stereo3d.h"
41#include "libavutil/tdrdi.h"
42#include "libavutil/timestamp.h"
43#include "libavutil/timecode.h"
48#include "libavutil/uuid.h"
49
50#include "avfilter.h"
51#include "filters.h"
52#include "video.h"
53
59
60#define OFFSET(x) offsetof(ShowInfoContext, x)
61#define VF AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
62
63static const AVOption showinfo_options[] = {
64 { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF },
65 { "udu_sei_as_ascii", "try to print user data unregistered SEI as ascii character when possible",
66 OFFSET(udu_sei_as_ascii), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VF },
67 { NULL }
68};
69
71
73{
74 const AVSphericalMapping *spherical = (const AVSphericalMapping *)sd->data;
75 double yaw, pitch, roll;
76
78
79 if (spherical->yaw || spherical->pitch || spherical->roll) {
80 yaw = ((double)spherical->yaw) / (1 << 16);
81 pitch = ((double)spherical->pitch) / (1 << 16);
82 roll = ((double)spherical->roll) / (1 << 16);
83 av_log(ctx, AV_LOG_INFO, "(%f/%f/%f) ", yaw, pitch, roll);
84 }
85
87 size_t l, t, r, b;
88 av_spherical_tile_bounds(spherical, frame->width, frame->height,
89 &l, &t, &r, &b);
90 av_log(ctx, AV_LOG_INFO, "[%zu, %zu, %zu, %zu] ",
91 l, t, r, b);
92 } else if (spherical->projection == AV_SPHERICAL_CUBEMAP) {
93 av_log(ctx, AV_LOG_INFO, "[pad %"PRIu32"] ", spherical->padding);
94 }
95}
96
98{
99 const AVStereo3D *stereo = (const AVStereo3D *)sd->data;
100
101 av_log(ctx, AV_LOG_INFO, "type - %s", av_stereo3d_type_name(stereo->type));
102
103 if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
104 av_log(ctx, AV_LOG_INFO, " (inverted)");
105
106 av_log(ctx, AV_LOG_INFO, ", view - %s, primary_eye - %s", av_stereo3d_view_name(stereo->view),
108 if (stereo->baseline)
109 av_log(ctx, AV_LOG_INFO, ", baseline: %"PRIu32"", stereo->baseline);
111 av_log(ctx, AV_LOG_INFO, ", horizontal_disparity_adjustment: %0.4f",
114 av_log(ctx, AV_LOG_INFO, ", horizontal_field_of_view: %0.3f", av_q2d(stereo->horizontal_field_of_view));
115}
116
118{
119 FilterLink *l = ff_filter_link(inlink);
120 const uint32_t *tc = (const uint32_t *)sd->data;
121
122 if ((sd->size != sizeof(uint32_t) * 4) || (tc[0] > 3)) {
123 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
124 return;
125 }
126
127 for (int j = 1; j <= tc[0]; j++) {
128 char tcbuf[AV_TIMECODE_STR_SIZE];
129 av_timecode_make_smpte_tc_string2(tcbuf, l->frame_rate, tc[j], 0, 0);
130 av_log(ctx, AV_LOG_INFO, "timecode - %s%s", tcbuf, j != tc[0] ? ", " : "");
131 }
132}
133
135{
136 int nb_rois;
137 const AVRegionOfInterest *roi;
138 uint32_t roi_size;
139
140 roi = (const AVRegionOfInterest *)sd->data;
141 roi_size = roi->self_size;
142 if (!roi_size || sd->size % roi_size != 0) {
143 av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.\n");
144 return;
145 }
146 nb_rois = sd->size / roi_size;
147
148 for (int i = 0; i < nb_rois; i++) {
149 roi = (const AVRegionOfInterest *)(sd->data + roi_size * i);
150 av_log(ctx, AV_LOG_INFO, "index: %d, region: (%d, %d) -> (%d, %d), qp offset: %d/%d.\n",
151 i, roi->left, roi->top, roi->right, roi->bottom, roi->qoffset.num, roi->qoffset.den);
152 }
153}
154
156{
157 const AV3DReferenceDisplaysInfo *tdrdi = (const AV3DReferenceDisplaysInfo *)sd->data;
158
159
160 av_log(ctx, AV_LOG_INFO, "number of reference displays: %u", tdrdi->num_ref_displays);
161}
162
164{
165 int nb_bboxes;
167 const AVDetectionBBox *bbox;
168
169 header = (const AVDetectionBBoxHeader *)sd->data;
170 nb_bboxes = header->nb_bboxes;
171 av_log(ctx, AV_LOG_INFO, "source: %s\n", header->source);
172
173 for (int i = 0; i < nb_bboxes; i++) {
175 av_log(ctx, AV_LOG_INFO, "index: %d,\tregion: (%d, %d) -> (%d, %d), label: %s, confidence: %d/%d.\n",
176 i, bbox->x, bbox->y, bbox->x + bbox->w, bbox->y + bbox->h,
178 if (bbox->classify_count > 0) {
179 for (int j = 0; j < bbox->classify_count; j++) {
180 av_log(ctx, AV_LOG_INFO, "\t\tclassify: label: %s, confidence: %d/%d.\n",
182 }
183 }
184 }
185}
186
188{
189 const AVMasteringDisplayMetadata *mastering_display;
190
191 if (sd->size < sizeof(*mastering_display)) {
192 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
193 return;
194 }
195
196 mastering_display = (const AVMasteringDisplayMetadata *)sd->data;
197
198 av_log(ctx, AV_LOG_INFO, "has_primaries:%d has_luminance:%d "
199 "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f) "
200 "min_luminance=%f, max_luminance=%f",
201 mastering_display->has_primaries, mastering_display->has_luminance,
202 av_q2d(mastering_display->display_primaries[0][0]),
203 av_q2d(mastering_display->display_primaries[0][1]),
204 av_q2d(mastering_display->display_primaries[1][0]),
205 av_q2d(mastering_display->display_primaries[1][1]),
206 av_q2d(mastering_display->display_primaries[2][0]),
207 av_q2d(mastering_display->display_primaries[2][1]),
208 av_q2d(mastering_display->white_point[0]), av_q2d(mastering_display->white_point[1]),
209 av_q2d(mastering_display->min_luminance), av_q2d(mastering_display->max_luminance));
210}
211
213{
214 AVDynamicHDRPlus *hdr_plus;
215
216 if (sd->size < sizeof(*hdr_plus)) {
217 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
218 return;
219 }
220
221 hdr_plus = (AVDynamicHDRPlus *)sd->data;
222 av_log(ctx, AV_LOG_INFO, "application version: %d, ", hdr_plus->application_version);
223 av_log(ctx, AV_LOG_INFO, "num_windows: %d, ", hdr_plus->num_windows);
224 for (int w = 1; w < hdr_plus->num_windows; w++) {
226 av_log(ctx, AV_LOG_INFO, w > 1 ? ", window %d { " : "window %d { ", w);
227 av_log(ctx, AV_LOG_INFO, "window_upper_left_corner: (%5.4f,%5.4f),",
228 av_q2d(params->window_upper_left_corner_x),
229 av_q2d(params->window_upper_left_corner_y));
230 av_log(ctx, AV_LOG_INFO, "window_lower_right_corner: (%5.4f,%5.4f), ",
231 av_q2d(params->window_lower_right_corner_x),
232 av_q2d(params->window_lower_right_corner_y));
233 av_log(ctx, AV_LOG_INFO, "window_upper_left_corner: (%5.4f, %5.4f), ",
234 av_q2d(params->window_upper_left_corner_x),
235 av_q2d(params->window_upper_left_corner_y));
236 av_log(ctx, AV_LOG_INFO, "center_of_ellipse_x: (%d,%d), ",
237 params->center_of_ellipse_x,
238 params->center_of_ellipse_y);
239 av_log(ctx, AV_LOG_INFO, "rotation_angle: %d, ",
240 params->rotation_angle);
241 av_log(ctx, AV_LOG_INFO, "semimajor_axis_internal_ellipse: %d, ",
242 params->semimajor_axis_internal_ellipse);
243 av_log(ctx, AV_LOG_INFO, "semimajor_axis_external_ellipse: %d, ",
244 params->semimajor_axis_external_ellipse);
245 av_log(ctx, AV_LOG_INFO, "semiminor_axis_external_ellipse: %d, ",
246 params->semiminor_axis_external_ellipse);
247 av_log(ctx, AV_LOG_INFO, "overlap_process_option: %d}",
248 params->overlap_process_option);
249 }
250 av_log(ctx, AV_LOG_INFO, "targeted_system_display_maximum_luminance: %9.4f, ",
253 av_log(ctx, AV_LOG_INFO, "targeted_system_display_actual_peak_luminance: {");
254 for (int i = 0; i < hdr_plus->num_rows_targeted_system_display_actual_peak_luminance; i++) {
255 av_log(ctx, AV_LOG_INFO, "(");
256 for (int j = 0; j < hdr_plus->num_cols_targeted_system_display_actual_peak_luminance; j++) {
257 av_log(ctx, AV_LOG_INFO, i ? ",%5.4f" : "%5.4f",
259 }
260 av_log(ctx, AV_LOG_INFO, ")");
261 }
262 av_log(ctx, AV_LOG_INFO, "}, ");
263 }
264
265 for (int w = 0; w < hdr_plus->num_windows; w++) {
267 av_log(ctx, AV_LOG_INFO, "window %d {maxscl: {", w);
268 for (int i = 0; i < 3; i++) {
269 av_log(ctx, AV_LOG_INFO, i ? ",%5.4f" : "%5.4f",av_q2d(params->maxscl[i]));
270 }
271 av_log(ctx, AV_LOG_INFO, "}, average_maxrgb: %5.4f, ",
272 av_q2d(params->average_maxrgb));
273 av_log(ctx, AV_LOG_INFO, "distribution_maxrgb: {");
274 for (int i = 0; i < params->num_distribution_maxrgb_percentiles; i++) {
275 av_log(ctx, AV_LOG_INFO, "(%d,%5.4f)",
276 params->distribution_maxrgb[i].percentage,
277 av_q2d(params->distribution_maxrgb[i].percentile));
278 }
279 av_log(ctx, AV_LOG_INFO, "}, fraction_bright_pixels: %5.4f",
280 av_q2d(params->fraction_bright_pixels));
281 if (params->tone_mapping_flag) {
282 av_log(ctx, AV_LOG_INFO, ", knee_point: (%5.4f,%5.4f), ", av_q2d(params->knee_point_x), av_q2d(params->knee_point_y));
283 av_log(ctx, AV_LOG_INFO, "bezier_curve_anchors: {");
284 for (int i = 0; i < params->num_bezier_curve_anchors; i++) {
285 av_log(ctx, AV_LOG_INFO, i ? ",%5.4f" : "%5.4f",
286 av_q2d(params->bezier_curve_anchors[i]));
287 }
288 av_log(ctx, AV_LOG_INFO, "}");
289 }
290 if (params->color_saturation_mapping_flag) {
291 av_log(ctx, AV_LOG_INFO, ", color_saturation_weight: %5.4f",
292 av_q2d(params->color_saturation_weight));
293 }
294 av_log(ctx, AV_LOG_INFO, "}");
295 }
296
298 av_log(ctx, AV_LOG_INFO, ", mastering_display_actual_peak_luminance: {");
299 for (int i = 0; i < hdr_plus->num_rows_mastering_display_actual_peak_luminance; i++) {
300 av_log(ctx, AV_LOG_INFO, "(");
301 for (int j = 0; j < hdr_plus->num_cols_mastering_display_actual_peak_luminance; j++) {
302 av_log(ctx, AV_LOG_INFO, i ? ",%5.4f" : "%5.4f",
304 }
305 av_log(ctx, AV_LOG_INFO, ")");
306 }
307 av_log(ctx, AV_LOG_INFO, "}");
308 }
309}
310
312{
313 AVDynamicHDRVivid *hdr_vivid;
314
315 if (sd->size < sizeof(*hdr_vivid)) {
316 av_log(ctx, AV_LOG_ERROR, "invalid hdr vivid data\n");
317 return;
318 }
319
320 hdr_vivid = (AVDynamicHDRVivid *)sd->data;
321 av_log(ctx, AV_LOG_INFO, "system_start_code: %d, ", hdr_vivid->system_start_code);
322 av_log(ctx, AV_LOG_INFO, "num_windows: %d, ", hdr_vivid->num_windows);
323 for (int w = 0; w < hdr_vivid->num_windows; w++) {
324 const AVHDRVividColorTransformParams *params = &hdr_vivid->params[w];
325
326 av_log(ctx, AV_LOG_INFO, "minimum_maxrgb[%d]: %.4f, ", w, av_q2d(params->minimum_maxrgb));
327 av_log(ctx, AV_LOG_INFO, "average_maxrgb[%d]: %.4f, ", w, av_q2d(params->average_maxrgb));
328 av_log(ctx, AV_LOG_INFO, "variance_maxrgb[%d]:%.4f, ", w, av_q2d(params->variance_maxrgb));
329 av_log(ctx, AV_LOG_INFO, "maximum_maxrgb[%d]: %.4f, ", w, av_q2d(params->maximum_maxrgb));
330 }
331
332 for (int w = 0; w < hdr_vivid->num_windows; w++) {
333 const AVHDRVividColorTransformParams *params = &hdr_vivid->params[w];
334
335 av_log(ctx, AV_LOG_INFO, "tone_mapping_mode_flag[%d]: %d, ", w, params->tone_mapping_mode_flag);
336 av_log(ctx, AV_LOG_INFO, "tone_mapping_param_num[%d]: %d, ", w, params->tone_mapping_param_num);
337 if (params->tone_mapping_mode_flag) {
338 for (int i = 0; i < params->tone_mapping_param_num; i++) {
339 const AVHDRVividColorToneMappingParams *tm_params = &params->tm_params[i];
340
341 av_log(ctx, AV_LOG_INFO, "targeted_system_display_maximum_luminance[%d][%d]: %.4f, ",
343 av_log(ctx, AV_LOG_INFO, "base_enable_flag[%d][%d]: %d, ",
344 w, i, tm_params->base_enable_flag);
345 if (tm_params->base_enable_flag) {
346 av_log(ctx, AV_LOG_INFO, "base_param_m_p[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_p));
347 av_log(ctx, AV_LOG_INFO, "base_param_m_m[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_m));
348 av_log(ctx, AV_LOG_INFO, "base_param_m_a[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_a));
349 av_log(ctx, AV_LOG_INFO, "base_param_m_b[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_b));
350 av_log(ctx, AV_LOG_INFO, "base_param_m_n[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_m_n));
351 av_log(ctx, AV_LOG_INFO, "base_param_k1[%d][%d]: %d, ", w, i, tm_params->base_param_k1);
352 av_log(ctx, AV_LOG_INFO, "base_param_k2[%d][%d]: %d, ", w, i, tm_params->base_param_k2);
353 av_log(ctx, AV_LOG_INFO, "base_param_k3[%d][%d]: %d, ", w, i, tm_params->base_param_k3);
354 av_log(ctx, AV_LOG_INFO, "base_param_Delta_enable_mode[%d][%d]: %d, ", w, i,
356 av_log(ctx, AV_LOG_INFO, "base_param_Delta[%d][%d]: %.4f, ", w, i, av_q2d(tm_params->base_param_Delta));
357 }
358 av_log(ctx, AV_LOG_INFO, "3Spline_enable_flag[%d][%d]: %d, ",
359 w, i, tm_params->three_Spline_enable_flag);
360 if (tm_params->three_Spline_enable_flag) {
361 for (int j = 0; j < tm_params->three_Spline_num; j++) {
362 const AVHDRVivid3SplineParams *three_spline = &tm_params->three_spline[j];
363 av_log(ctx, AV_LOG_INFO, "3Spline_TH_mode[%d][%d]: %d, ", w, i, three_spline->th_mode);
364 if (three_spline->th_mode == 0 || three_spline->th_mode == 2)
365 av_log(ctx, AV_LOG_INFO, "3Spline_TH_enable_MB[%d][%d][%d]: %.4f, ",
366 w, i, j, av_q2d(three_spline->th_enable_mb));
367 av_log(ctx, AV_LOG_INFO, "3Spline_TH_enable[%d][%d][%d]: %.4f, ",
368 w, i, j, av_q2d(three_spline->th_enable));
369 av_log(ctx, AV_LOG_INFO, "3Spline_TH_Delta1[%d][%d][%d]: %.4f, ",
370 w, i, j, av_q2d(three_spline->th_delta1));
371 av_log(ctx, AV_LOG_INFO, "3Spline_TH_Delta2[%d][%d][%d]: %.4f, ",
372 w, i, j, av_q2d(three_spline->th_delta2));
373 av_log(ctx, AV_LOG_INFO, "3Spline_enable_Strength[%d][%d][%d]: %.4f, ",
374 w, i, j, av_q2d(three_spline->enable_strength));
375 }
376 }
377 }
378 }
379
380 av_log(ctx, AV_LOG_INFO, "color_saturation_mapping_flag[%d]: %d",
381 w, params->color_saturation_mapping_flag);
382 if (params->color_saturation_mapping_flag) {
383 av_log(ctx, AV_LOG_INFO, ", color_saturation_num[%d]: %d",
384 w, params->color_saturation_num);
385 for (int i = 0; i < params->color_saturation_num; i++) {
386 av_log(ctx, AV_LOG_INFO, ", color_saturation_gain[%d][%d]: %.4f",
387 w, i, av_q2d(params->color_saturation_gain[i]));
388 }
389 }
390 }
391}
392
393
395{
397
399 "MaxCLL=%d, MaxFALL=%d",
400 metadata->MaxCLL, metadata->MaxFALL);
401}
402
404{
405 const AVVideoEncParams *par = (const AVVideoEncParams *)sd->data;
406 int plane, acdc;
407
408 av_log(ctx, AV_LOG_INFO, "type %d; ", par->type);
409 if (par->qp)
410 av_log(ctx, AV_LOG_INFO, "qp=%d; ", par->qp);
411 for (plane = 0; plane < FF_ARRAY_ELEMS(par->delta_qp); plane++)
412 for (acdc = 0; acdc < FF_ARRAY_ELEMS(par->delta_qp[plane]); acdc++) {
413 int delta_qp = par->delta_qp[plane][acdc];
414 if (delta_qp)
415 av_log(ctx, AV_LOG_INFO, "delta_qp[%d][%d]=%d; ",
416 plane, acdc, delta_qp);
417 }
418 if (par->nb_blocks)
419 av_log(ctx, AV_LOG_INFO, "%u blocks; ", par->nb_blocks);
420}
421
423{
424 const uint8_t *user_data = sd->data;
425 ShowInfoContext *s = ctx->priv;
426
427 if (sd->size < AV_UUID_LEN) {
428 av_log(ctx, AV_LOG_ERROR, "invalid data (%zu < UUID(%d-bytes))\n",
429 sd->size, AV_UUID_LEN);
430 return;
431 }
432
434
435 av_log(ctx, AV_LOG_INFO, "User Data=");
436 for (size_t i = 16; i < sd->size; i++) {
437 const char *format = "%02x";
438
439 if (s->udu_sei_as_ascii)
440 format = isprint(user_data[i]) ? "%c" : "\\x%02x";
442 }
443 av_log(ctx, AV_LOG_INFO, "\n");
444}
445
447{
448 const AVFilmGrainParams *fgp = (const AVFilmGrainParams *)sd->data;
449 const char *const film_grain_type_names[] = {
450 [AV_FILM_GRAIN_PARAMS_NONE] = "none",
451 [AV_FILM_GRAIN_PARAMS_AV1] = "av1",
452 [AV_FILM_GRAIN_PARAMS_H274] = "h274",
453 };
454
455 const char *color_range_str = av_color_range_name(fgp->color_range);
456 const char *color_primaries_str = av_color_primaries_name(fgp->color_primaries);
457 const char *color_trc_str = av_color_transfer_name(fgp->color_trc);
458 const char *colorspace_str = av_color_space_name(fgp->color_space);
459
460 if (fgp->type >= FF_ARRAY_ELEMS(film_grain_type_names)) {
461 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
462 return;
463 }
464
465 av_log(ctx, AV_LOG_INFO, "type %s; ", film_grain_type_names[fgp->type]);
466 av_log(ctx, AV_LOG_INFO, "seed=%"PRIu64"; ", fgp->seed);
467 av_log(ctx, AV_LOG_INFO, "width=%d; ", fgp->width);
468 av_log(ctx, AV_LOG_INFO, "height=%d; ", fgp->height);
469 av_log(ctx, AV_LOG_INFO, "subsampling_x=%d; ", fgp->subsampling_x);
470 av_log(ctx, AV_LOG_INFO, "subsampling_y=%d; ", fgp->subsampling_y);
471 av_log(ctx, AV_LOG_INFO, "color_range=%s; ", color_range_str ? color_range_str : "unknown");
472 av_log(ctx, AV_LOG_INFO, "color_primaries=%s; ", color_primaries_str ? color_primaries_str : "unknown");
473 av_log(ctx, AV_LOG_INFO, "color_trc=%s; ", color_trc_str ? color_trc_str : "unknown");
474 av_log(ctx, AV_LOG_INFO, "color_space=%s; ", colorspace_str ? colorspace_str : "unknown");
475 av_log(ctx, AV_LOG_INFO, "bit_depth_luma=%d; ", fgp->bit_depth_luma);
476 av_log(ctx, AV_LOG_INFO, "bit_depth_chroma=%d; ", fgp->bit_depth_chroma);
477
478 switch (fgp->type) {
480 break;
482 const AVFilmGrainAOMParams *aom = &fgp->codec.aom;
483 const int num_ar_coeffs_y = 2 * aom->ar_coeff_lag * (aom->ar_coeff_lag + 1);
484 const int num_ar_coeffs_uv = num_ar_coeffs_y + !!aom->num_y_points;
485 av_log(ctx, AV_LOG_INFO, "y_points={ ");
486 for (int i = 0; i < aom->num_y_points; i++)
487 av_log(ctx, AV_LOG_INFO, "(%d,%d) ", aom->y_points[i][0], aom->y_points[i][1]);
488 av_log(ctx, AV_LOG_INFO, "}; chroma_scaling_from_luma=%d; ", aom->chroma_scaling_from_luma);
489 for (int uv = 0; uv < 2; uv++) {
490 av_log(ctx, AV_LOG_INFO, "uv_points[%d]={ ", uv);
491 for (int i = 0; i < aom->num_uv_points[uv]; i++)
492 av_log(ctx, AV_LOG_INFO, "(%d,%d) ", aom->uv_points[uv][i][0], aom->uv_points[uv][i][1]);
493 av_log(ctx, AV_LOG_INFO, "}; ");
494 }
495 av_log(ctx, AV_LOG_INFO, "scaling_shift=%d; ", aom->scaling_shift);
496 av_log(ctx, AV_LOG_INFO, "ar_coeff_lag=%d; ", aom->ar_coeff_lag);
497 if (num_ar_coeffs_y) {
498 av_log(ctx, AV_LOG_INFO, "ar_coeffs_y={ ");
499 for (int i = 0; i < num_ar_coeffs_y; i++)
500 av_log(ctx, AV_LOG_INFO, "%d ", aom->ar_coeffs_y[i]);
501 av_log(ctx, AV_LOG_INFO, "}; ");
502 }
503 for (int uv = 0; num_ar_coeffs_uv && uv < 2; uv++) {
504 av_log(ctx, AV_LOG_INFO, "ar_coeffs_uv[%d]={ ", uv);
505 for (int i = 0; i < num_ar_coeffs_uv; i++)
506 av_log(ctx, AV_LOG_INFO, "%d ", aom->ar_coeffs_uv[uv][i]);
507 av_log(ctx, AV_LOG_INFO, "}; ");
508 }
509 av_log(ctx, AV_LOG_INFO, "ar_coeff_shift=%d; ", aom->ar_coeff_shift);
510 av_log(ctx, AV_LOG_INFO, "grain_scale_shift=%d; ", aom->grain_scale_shift);
511 for (int uv = 0; uv < 2; uv++) {
512 av_log(ctx, AV_LOG_INFO, "uv_mult[%d] = %d; ", uv, aom->uv_mult[uv]);
513 av_log(ctx, AV_LOG_INFO, "uv_mult_luma[%d] = %d; ", uv, aom->uv_mult_luma[uv]);
514 av_log(ctx, AV_LOG_INFO, "uv_offset[%d] = %d; ", uv, aom->uv_offset[uv]);
515 }
516 av_log(ctx, AV_LOG_INFO, "overlap_flag=%d; ", aom->overlap_flag);
517 av_log(ctx, AV_LOG_INFO, "limit_output_range=%d; ", aom->limit_output_range);
518 break;
519 }
521 const AVFilmGrainH274Params *h274 = &fgp->codec.h274;
522 av_log(ctx, AV_LOG_INFO, "model_id=%d; ", h274->model_id);
523 av_log(ctx, AV_LOG_INFO, "blending_mode_id=%d; ", h274->blending_mode_id);
524 av_log(ctx, AV_LOG_INFO, "log2_scale_factor=%d; ", h274->log2_scale_factor);
525
526 for (int c = 0; c < 3; c++)
527 if (h274->component_model_present[c] && (h274->num_model_values[c] > 6 ||
528 h274->num_intensity_intervals[c] < 1 ||
529 h274->num_intensity_intervals[c] > 256)) {
530 av_log(ctx, AV_LOG_ERROR, "invalid data\n");
531 return;
532 }
533
534 for (int c = 0; c < 3; c++) {
535 if (!h274->component_model_present[c])
536 continue;
537
538 av_log(ctx, AV_LOG_INFO, "num_intensity_intervals[%d]=%u; ", c, h274->num_intensity_intervals[c]);
539 av_log(ctx, AV_LOG_INFO, "num_model_values[%d]=%u; ", c, h274->num_model_values[c]);
540 for (int i = 0; i < h274->num_intensity_intervals[c]; i++) {
541 av_log(ctx, AV_LOG_INFO, "intensity_interval_lower_bound[%d][%d]=%u; ",
543 av_log(ctx, AV_LOG_INFO, "intensity_interval_upper_bound[%d][%d]=%u; ",
545 for (int j = 0; j < h274->num_model_values[c]; j++)
546 av_log(ctx, AV_LOG_INFO, "comp_model_value[%d][%d][%d]=%d; ",
547 c, i, j, h274->comp_model_value[c][i][j]);
548 }
549 }
550 break;
551 }
552 }
553}
554
556{
557 const AVDOVIMetadata *dovi = (AVDOVIMetadata *) sd->data;
558 const AVDOVIRpuDataHeader *hdr = av_dovi_get_header(dovi);
559 const AVDOVIDataMapping *mapping = av_dovi_get_mapping(dovi);
561
562 av_log(ctx, AV_LOG_INFO, " rpu_type=%"PRIu8"; ", hdr->rpu_type);
563 av_log(ctx, AV_LOG_INFO, "rpu_format=%"PRIu16"; ", hdr->rpu_format);
564 av_log(ctx, AV_LOG_INFO, "vdr_rpu_profile=%"PRIu8"; ", hdr->vdr_rpu_profile);
565 av_log(ctx, AV_LOG_INFO, "vdr_rpu_level=%"PRIu8"; ", hdr->vdr_rpu_level);
566 av_log(ctx, AV_LOG_INFO, "chroma_resampling_explicit_filter_flag=%"PRIu8"; ", hdr->chroma_resampling_explicit_filter_flag);
567 av_log(ctx, AV_LOG_INFO, "coef_data_type=%"PRIu8"; ", hdr->coef_data_type);
568 av_log(ctx, AV_LOG_INFO, "coef_log2_denom=%"PRIu8"; ", hdr->coef_log2_denom);
569 av_log(ctx, AV_LOG_INFO, "vdr_rpu_normalized_idc=%"PRIu8"; ", hdr->vdr_rpu_normalized_idc);
570 av_log(ctx, AV_LOG_INFO, "bl_video_full_range_flag=%"PRIu8"; ", hdr->bl_video_full_range_flag);
571 av_log(ctx, AV_LOG_INFO, "bl_bit_depth=%"PRIu8"; ", hdr->bl_bit_depth);
572 av_log(ctx, AV_LOG_INFO, "el_bit_depth=%"PRIu8"; ", hdr->el_bit_depth);
573 av_log(ctx, AV_LOG_INFO, "vdr_bit_depth=%"PRIu8"; ", hdr->vdr_bit_depth);
574 av_log(ctx, AV_LOG_INFO, "spatial_resampling_filter_flag=%"PRIu8"; ", hdr->spatial_resampling_filter_flag);
575 av_log(ctx, AV_LOG_INFO, "el_spatial_resampling_filter_flag=%"PRIu8"; ", hdr->el_spatial_resampling_filter_flag);
576 av_log(ctx, AV_LOG_INFO, "disable_residual_flag=%"PRIu8"\n", hdr->disable_residual_flag);
577
578 av_log(ctx, AV_LOG_INFO, " data mapping: ");
579 av_log(ctx, AV_LOG_INFO, "vdr_rpu_id=%"PRIu8"; ", mapping->vdr_rpu_id);
580 av_log(ctx, AV_LOG_INFO, "mapping_color_space=%"PRIu8"; ", mapping->mapping_color_space);
581 av_log(ctx, AV_LOG_INFO, "mapping_chroma_format_idc=%"PRIu8"; ", mapping->mapping_chroma_format_idc);
582 av_log(ctx, AV_LOG_INFO, "nlq_method_idc=%d; ", (int) mapping->nlq_method_idc);
583 av_log(ctx, AV_LOG_INFO, "num_x_partitions=%"PRIu32"; ", mapping->num_x_partitions);
584 av_log(ctx, AV_LOG_INFO, "num_y_partitions=%"PRIu32"\n", mapping->num_y_partitions);
585
586 for (int c = 0; c < 3; c++) {
587 const AVDOVIReshapingCurve *curve = &mapping->curves[c];
588 const AVDOVINLQParams *nlq = &mapping->nlq[c];
589 av_log(ctx, AV_LOG_INFO, " channel %d: ", c);
590 av_log(ctx, AV_LOG_INFO, "pivots={ ");
591 for (int i = 0; i < curve->num_pivots; i++)
592 av_log(ctx, AV_LOG_INFO, "%"PRIu16" ", curve->pivots[i]);
593 av_log(ctx, AV_LOG_INFO, "}; mapping_idc={ ");
594 for (int i = 0; i < curve->num_pivots - 1; i++)
595 av_log(ctx, AV_LOG_INFO, "%d ", (int) curve->mapping_idc[i]);
596 av_log(ctx, AV_LOG_INFO, "}; poly_order={ ");
597 for (int i = 0; i < curve->num_pivots - 1; i++)
598 av_log(ctx, AV_LOG_INFO, "%"PRIu8" ", curve->poly_order[i]);
599 av_log(ctx, AV_LOG_INFO, "}; poly_coef={ ");
600 for (int i = 0; i < curve->num_pivots - 1; i++) {
601 av_log(ctx, AV_LOG_INFO, "{%"PRIi64", %"PRIi64", %"PRIi64"} ",
602 curve->poly_coef[i][0],
603 curve->poly_coef[i][1],
604 curve->poly_coef[i][2]);
605 }
606
607 av_log(ctx, AV_LOG_INFO, "}; mmr_order={ ");
608 for (int i = 0; i < curve->num_pivots - 1; i++)
609 av_log(ctx, AV_LOG_INFO, "%"PRIu8" ", curve->mmr_order[i]);
610 av_log(ctx, AV_LOG_INFO, "}; mmr_constant={ ");
611 for (int i = 0; i < curve->num_pivots - 1; i++)
612 av_log(ctx, AV_LOG_INFO, "%"PRIi64" ", curve->mmr_constant[i]);
613 av_log(ctx, AV_LOG_INFO, "}; mmr_coef={ ");
614 for (int i = 0; i < curve->num_pivots - 1; i++) {
615 av_log(ctx, AV_LOG_INFO, "{");
616 for (int j = 0; j < curve->mmr_order[i]; j++) {
617 for (int k = 0; k < 7; k++)
618 av_log(ctx, AV_LOG_INFO, "%"PRIi64" ", curve->mmr_coef[i][j][k]);
619 }
620 av_log(ctx, AV_LOG_INFO, "} ");
621 }
622
623 av_log(ctx, AV_LOG_INFO, "}; nlq_offset=%"PRIu16"; ", nlq->nlq_offset);
624 av_log(ctx, AV_LOG_INFO, "vdr_in_max=%"PRIu64"; ", nlq->vdr_in_max);
625 switch (mapping->nlq_method_idc) {
627 av_log(ctx, AV_LOG_INFO, "linear_deadzone_slope=%"PRIu64"; ", nlq->linear_deadzone_slope);
628 av_log(ctx, AV_LOG_INFO, "linear_deadzone_threshold=%"PRIu64"\n", nlq->linear_deadzone_threshold);
629 break;
630 }
631 }
632
633 av_log(ctx, AV_LOG_INFO, " color metadata: ");
634 av_log(ctx, AV_LOG_INFO, "dm_metadata_id=%"PRIu8"; ", color->dm_metadata_id);
635 av_log(ctx, AV_LOG_INFO, "scene_refresh_flag=%"PRIu8"; ", color->scene_refresh_flag);
636 av_log(ctx, AV_LOG_INFO, "ycc_to_rgb_matrix={ ");
637 for (int i = 0; i < 9; i++)
638 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->ycc_to_rgb_matrix[i]));
639 av_log(ctx, AV_LOG_INFO, "}; ycc_to_rgb_offset={ ");
640 for (int i = 0; i < 3; i++)
641 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->ycc_to_rgb_offset[i]));
642 av_log(ctx, AV_LOG_INFO, "}; rgb_to_lms_matrix={ ");
643 for (int i = 0; i < 9; i++)
644 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->rgb_to_lms_matrix[i]));
645 av_log(ctx, AV_LOG_INFO, "}; signal_eotf=%"PRIu16"; ", color->signal_eotf);
646 av_log(ctx, AV_LOG_INFO, "signal_eotf_param0=%"PRIu16"; ", color->signal_eotf_param0);
647 av_log(ctx, AV_LOG_INFO, "signal_eotf_param1=%"PRIu16"; ", color->signal_eotf_param1);
648 av_log(ctx, AV_LOG_INFO, "signal_eotf_param2=%"PRIu32"; ", color->signal_eotf_param2);
649 av_log(ctx, AV_LOG_INFO, "signal_bit_depth=%"PRIu8"; ", color->signal_bit_depth);
650 av_log(ctx, AV_LOG_INFO, "signal_color_space=%"PRIu8"; ", color->signal_color_space);
651 av_log(ctx, AV_LOG_INFO, "signal_chroma_format=%"PRIu8"; ", color->signal_chroma_format);
652 av_log(ctx, AV_LOG_INFO, "signal_full_range_flag=%"PRIu8"; ", color->signal_full_range_flag);
653 av_log(ctx, AV_LOG_INFO, "source_min_pq=%"PRIu16"; ", color->source_min_pq);
654 av_log(ctx, AV_LOG_INFO, "source_max_pq=%"PRIu16"; ", color->source_max_pq);
655 av_log(ctx, AV_LOG_INFO, "source_diagonal=%"PRIu16"; ", color->source_diagonal);
656}
657
659{
660 const AVAmbientViewingEnvironment *ambient_viewing_environment =
662
663 av_log(ctx, AV_LOG_INFO, "ambient_illuminance=%f, ambient_light_x=%f, ambient_light_y=%f",
664 av_q2d(ambient_viewing_environment->ambient_illuminance),
665 av_q2d(ambient_viewing_environment->ambient_light_x),
666 av_q2d(ambient_viewing_environment->ambient_light_y));
667}
668
670{
671 const char *color_range_str = av_color_range_name(frame->color_range);
672 const char *colorspace_str = av_color_space_name(frame->colorspace);
673 const char *color_primaries_str = av_color_primaries_name(frame->color_primaries);
674 const char *color_trc_str = av_color_transfer_name(frame->color_trc);
675
676 if (!color_range_str || frame->color_range == AVCOL_RANGE_UNSPECIFIED) {
677 av_log(ctx, AV_LOG_INFO, "color_range:unknown");
678 } else {
679 av_log(ctx, AV_LOG_INFO, "color_range:%s", color_range_str);
680 }
681
682 if (!colorspace_str || frame->colorspace == AVCOL_SPC_UNSPECIFIED) {
683 av_log(ctx, AV_LOG_INFO, " color_space:unknown");
684 } else {
685 av_log(ctx, AV_LOG_INFO, " color_space:%s", colorspace_str);
686 }
687
688 if (!color_primaries_str || frame->color_primaries == AVCOL_PRI_UNSPECIFIED) {
689 av_log(ctx, AV_LOG_INFO, " color_primaries:unknown");
690 } else {
691 av_log(ctx, AV_LOG_INFO, " color_primaries:%s", color_primaries_str);
692 }
693
694 if (!color_trc_str || frame->color_trc == AVCOL_TRC_UNSPECIFIED) {
695 av_log(ctx, AV_LOG_INFO, " color_trc:unknown");
696 } else {
697 av_log(ctx, AV_LOG_INFO, " color_trc:%s", color_trc_str);
698 }
699 av_log(ctx, AV_LOG_INFO, "\n");
700}
701
702static void update_sample_stats_8(const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
703{
704 int i;
705
706 for (i = 0; i < len; i++) {
707 *sum += src[i];
708 *sum2 += src[i] * src[i];
709 }
710}
711
712static void update_sample_stats_16(int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
713{
714 const uint16_t *src1 = (const uint16_t *)src;
715 int i;
716
717 for (i = 0; i < len / 2; i++) {
718 if ((HAVE_BIGENDIAN && !be) || (!HAVE_BIGENDIAN && be)) {
719 *sum += av_bswap16(src1[i]);
720 *sum2 += (uint32_t)av_bswap16(src1[i]) * (uint32_t)av_bswap16(src1[i]);
721 } else {
722 *sum += src1[i];
723 *sum2 += (uint32_t)src1[i] * (uint32_t)src1[i];
724 }
725 }
726}
727
728static void update_sample_stats(int depth, int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
729{
730 if (depth <= 8)
731 update_sample_stats_8(src, len, sum, sum2);
732 else
733 update_sample_stats_16(be, src, len, sum, sum2);
734}
735
737{
738 FilterLink *inl = ff_filter_link(inlink);
739 AVFilterContext *ctx = inlink->dst;
740 ShowInfoContext *s = ctx->priv;
742 uint32_t plane_checksum[4] = {0}, checksum = 0;
743 int64_t sum[4] = {0}, sum2[4] = {0};
744 int32_t pixelcount[4] = {0};
745 int bitdepth = desc->comp[0].depth;
746 int be = desc->flags & AV_PIX_FMT_FLAG_BE;
747 int i, plane, vsub = desc->log2_chroma_h;
748
749 for (plane = 0; plane < 4 && s->calculate_checksums && frame->data[plane] && frame->linesize[plane]; plane++) {
750 uint8_t *data = frame->data[plane];
751 int h = plane == 1 || plane == 2 ? AV_CEIL_RSHIFT(inlink->h, vsub) : inlink->h;
752 int linesize = av_image_get_linesize(frame->format, frame->width, plane);
753 int width = linesize >> (bitdepth > 8);
754
755 if (linesize < 0)
756 return linesize;
757
758 for (i = 0; i < h; i++) {
759 plane_checksum[plane] = av_adler32_update(plane_checksum[plane], data, linesize);
760 checksum = av_adler32_update(checksum, data, linesize);
761
762 update_sample_stats(bitdepth, be, data, linesize, sum+plane, sum2+plane);
763 pixelcount[plane] += width;
764 data += frame->linesize[plane];
765 }
766 }
767
769 "n:%4"PRId64" pts:%7s pts_time:%-7s duration:%7"PRId64
770 " duration_time:%-7s "
771 "fmt:%s cl:%s sar:%d/%d s:%dx%d i:%c iskey:%d type:%c ",
772 inl->frame_count_out,
773 av_ts2str(frame->pts), av_ts2timestr(frame->pts, &inlink->time_base),
774 frame->duration, av_ts2timestr(frame->duration, &inlink->time_base),
775 desc->name, av_chroma_location_name(frame->chroma_location),
776 frame->sample_aspect_ratio.num, frame->sample_aspect_ratio.den,
777 frame->width, frame->height,
778 !(frame->flags & AV_FRAME_FLAG_INTERLACED) ? 'P' : /* Progressive */
779 (frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST) ? 'T' : 'B', /* Top / Bottom */
780 !!(frame->flags & AV_FRAME_FLAG_KEY),
781 av_get_picture_type_char(frame->pict_type));
782
783 if (s->calculate_checksums) {
785 "checksum:%08"PRIX32" plane_checksum:[%08"PRIX32,
786 checksum, plane_checksum[0]);
787
788 for (plane = 1; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
789 av_log(ctx, AV_LOG_INFO, " %08"PRIX32, plane_checksum[plane]);
790 av_log(ctx, AV_LOG_INFO, "] mean:[");
791 for (plane = 0; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
792 av_log(ctx, AV_LOG_INFO, "%s%"PRId64,
793 plane ? " ":"",
794 (sum[plane] + pixelcount[plane]/2) / pixelcount[plane]);
795 av_log(ctx, AV_LOG_INFO, "] stdev:[");
796 for (plane = 0; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
797 av_log(ctx, AV_LOG_INFO, "%s%3.1f",
798 plane ? " ":"",
799 sqrt((sum2[plane] - sum[plane]*(double)sum[plane]/pixelcount[plane])/pixelcount[plane]));
800 av_log(ctx, AV_LOG_INFO, "]");
801 }
802 av_log(ctx, AV_LOG_INFO, "\n");
803
804 for (i = 0; i < frame->nb_side_data; i++) {
805 AVFrameSideData *sd = frame->side_data[i];
806 const char *name = av_frame_side_data_name(sd->type);
807
808 av_log(ctx, AV_LOG_INFO, " side data - ");
809 if (name)
810 av_log(ctx, AV_LOG_INFO, "%s: ", name);
811 switch (sd->type) {
814 break;
816 dump_stereo3d(ctx, sd);
817 break;
819 dump_s12m_timecode(ctx, inlink, sd);
820 break;
821 }
823 av_log(ctx, AV_LOG_INFO, "rotation of %.2f degrees",
825 break;
827 av_log(ctx, AV_LOG_INFO, "value of %"PRIu8, sd->data[0]);
828 break;
830 dump_roi(ctx, sd);
831 break;
834 break;
837 break;
840 break;
843 break;
846 break;
848 char tcbuf[AV_TIMECODE_STR_SIZE];
850 av_log(ctx, AV_LOG_INFO, "%s", tcbuf);
851 break;
852 }
855 break;
858 break;
861 break;
864 break;
867 break;
869 av_log(ctx, AV_LOG_INFO, "view id: %d\n", *(int*)sd->data);
870 break;
872 dump_tdrdi(ctx, sd);
873 break;
874 default:
875 if (name)
876 av_log(ctx, AV_LOG_INFO, "(%zu bytes)", sd->size);
877 else
878 av_log(ctx, AV_LOG_WARNING, "unknown side data type %d "
879 "(%zu bytes)", sd->type, sd->size);
880 break;
881 }
882
883 av_log(ctx, AV_LOG_INFO, "\n");
884 }
885
887
888 if (desc->flags & AV_PIX_FMT_FLAG_ALPHA) {
889 const char *alpha_mode_str = av_alpha_mode_name(frame->alpha_mode);
890 if (!alpha_mode_str || frame->alpha_mode == AVALPHA_MODE_UNSPECIFIED)
891 av_log(ctx, AV_LOG_INFO, "alpha_mode:unspecified\n");
892 else
893 av_log(ctx, AV_LOG_INFO, "alpha_mode:%s\n", alpha_mode_str);
894 }
895
896 return ff_filter_frame(inlink->dst->outputs[0], frame);
897}
898
899static int config_props(AVFilterContext *ctx, AVFilterLink *link, int is_out)
900{
901 FilterLink *l = ff_filter_link(link);
902
903 av_log(ctx, AV_LOG_INFO, "config %s time_base: %d/%d, frame_rate: %d/%d\n",
904 is_out ? "out" : "in",
905 link->time_base.num, link->time_base.den,
907
908 return 0;
909}
910
912{
913 AVFilterContext *ctx = link->dst;
914 return config_props(ctx, link, 0);
915}
916
918{
919 AVFilterContext *ctx = link->src;
920 return config_props(ctx, link, 1);
921}
922
924 {
925 .name = "default",
926 .type = AVMEDIA_TYPE_VIDEO,
927 .filter_frame = filter_frame,
928 .config_props = config_props_in,
929 },
930};
931
933 {
934 .name = "default",
935 .type = AVMEDIA_TYPE_VIDEO,
936 .config_props = config_props_out,
937 },
938};
939
941 .p.name = "showinfo",
942 .p.description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."),
943 .p.priv_class = &showinfo_class,
947 .priv_size = sizeof(ShowInfoContext),
948};
SwsAArch64OpImplParams params
Definition ops.c:51
Public header for Adler-32 hash function implementation.
static const char *const format[]
Definition af_aiir.c:444
const FFFilter ff_vf_showinfo
#define bitdepth
static AVFormatContext * ctx
int32_t
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Definition avfilter.c:1068
Main libavfilter public API header.
byte swapping routines
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
static int FUNC user_data(CodedBitstreamContext *ctx, RWContext *rw, MPEG2RawUserData *current)
#define s(width, name)
Definition cbs_vp9.c:198
#define AV_CEIL_RSHIFT(a, b)
Definition common.h:60
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
static AVFrame * frame
static av_always_inline AVDetectionBBox * av_get_detection_bbox(const AVDetectionBBoxHeader *header, unsigned int idx)
Display matrix.
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
Definition dolby_e.c:1067
DOVI configuration.
static av_always_inline AVDOVIColorMetadata * av_dovi_get_color(const AVDOVIMetadata *data)
Definition dovi_meta.h:375
static av_always_inline AVDOVIRpuDataHeader * av_dovi_get_header(const AVDOVIMetadata *data)
Definition dovi_meta.h:363
@ AV_DOVI_NLQ_LINEAR_DZ
Definition dovi_meta.h:132
static av_always_inline AVDOVIDataMapping * av_dovi_get_mapping(const AVDOVIMetadata *data)
Definition dovi_meta.h:369
@ AV_FILM_GRAIN_PARAMS_H274
The union is valid when interpreted as AVFilmGrainH274Params (codec.h274)
@ AV_FILM_GRAIN_PARAMS_AV1
The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom)
@ AV_FILM_GRAIN_PARAMS_NONE
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326
#define AVFILTER_FLAG_METADATA_ONLY
The filter is a "metadata" filter - it does not modify the frame data in any way.
Definition avfilter.h:182
AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, size_t len)
Calculate the Adler32 checksum of a buffer.
Definition adler32.c:44
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
Definition frame.h:695
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
Definition frame.h:700
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition frame.h:687
const char * av_frame_side_data_name(enum AVFrameSideDataType type)
Definition side_data.c:76
@ AV_FRAME_DATA_GOP_TIMECODE
The GOP timecode in 25 bit timecode format.
Definition frame.h:125
@ AV_FRAME_DATA_DOVI_METADATA
Parsed Dolby Vision metadata, suitable for passing to a software implementation.
Definition frame.h:208
@ AV_FRAME_DATA_VIEW_ID
This side data must be associated with a video frame.
Definition frame.h:245
@ AV_FRAME_DATA_SPHERICAL
The data represents the AVSphericalMapping structure defined in libavutil/spherical....
Definition frame.h:131
@ AV_FRAME_DATA_DYNAMIC_HDR_VIVID
HDR Vivid dynamic metadata associated with a video frame.
Definition frame.h:215
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition frame.h:137
@ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition frame.h:220
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition frame.h:85
@ AV_FRAME_DATA_SEI_UNREGISTERED
User data unregistered metadata associated with a video frame.
Definition frame.h:178
@ AV_FRAME_DATA_DYNAMIC_HDR_PLUS
HDR dynamic metadata associated with a video frame.
Definition frame.h:159
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition frame.h:120
@ AV_FRAME_DATA_3D_REFERENCE_DISPLAYS
This side data contains information about the reference display width(s) and reference viewing distan...
Definition frame.h:256
@ AV_FRAME_DATA_FILM_GRAIN_PARAMS
Film grain parameters for a frame, described by AVFilmGrainParams.
Definition frame.h:188
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
Definition frame.h:170
@ AV_FRAME_DATA_DETECTION_BBOXES
Bounding boxes for object detection and classification, as described by AVDetectionBBoxHeader.
Definition frame.h:194
@ AV_FRAME_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition frame.h:90
@ AV_FRAME_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1.
Definition frame.h:152
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition frame.h:64
@ AV_FRAME_DATA_REGIONS_OF_INTEREST
Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of array element is ...
Definition frame.h:165
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_INFO
Standard information.
Definition log.h:221
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition rational.h:104
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane)
Compute the size of an image line with format pix_fmt and width width for the plane plane.
Definition imgutils.c:76
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
Definition utils.c:40
double av_display_rotation_get(const int32_t matrix[9])
Extract the rotation component of the transformation matrix.
Definition display.c:35
const char * av_spherical_projection_name(enum AVSphericalProjection projection)
Provide a human-readable name of a given AVSphericalProjection.
Definition spherical.c:69
void av_spherical_tile_bounds(const AVSphericalMapping *map, size_t width, size_t height, size_t *left, size_t *top, size_t *right, size_t *bottom)
Convert the bounding fields from an AVSphericalVideo from 0.32 fixed point to pixels.
Definition spherical.c:41
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
Definition spherical.h:68
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
Definition spherical.h:61
const char * av_stereo3d_view_name(unsigned int view)
Provide a human-readable name of a given stereo3d view.
Definition stereo3d.c:113
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
Definition stereo3d.c:93
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition stereo3d.h:194
const char * av_stereo3d_primary_eye_name(unsigned int eye)
Provide a human-readable name of a given stereo3d primary eye.
Definition stereo3d.c:133
misc image utilities
#define r
Definition input.c:42
#define b
Definition input.c:43
#define VF
Definition af_afir.c:731
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
static FilterLink * ff_filter_link(AVFilterLink *link)
Definition filters.h:199
#define AVFILTER_DEFINE_CLASS(fname)
Definition filters.h:478
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
Stereoscopic video.
const char * desc
Definition libsvtav1.c:83
uint8_t w
Definition llvidencdsp.c:39
const char data[16]
Definition mxf.c:149
AVOptions.
const char * av_color_space_name(enum AVColorSpace space)
Definition pixdesc.c:3860
const char * av_color_range_name(enum AVColorRange range)
Definition pixdesc.c:3776
const char * av_alpha_mode_name(enum AVAlphaMode mode)
Definition pixdesc.c:3925
const char * av_chroma_location_name(enum AVChromaLocation location)
Definition pixdesc.c:3881
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
Definition pixdesc.c:3827
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
Definition pixdesc.c:3794
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition pixdesc.c:3460
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
Definition pixdesc.h:147
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
Definition pixdesc.h:116
@ AVCOL_RANGE_UNSPECIFIED
Definition pixfmt.h:749
@ AVALPHA_MODE_UNSPECIFIED
Unknown alpha handling, or no alpha channel.
Definition pixfmt.h:817
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:645
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:675
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:709
const char * name
Definition qsvenc.c:142
#define av_bswap16
Definition bswap.h:28
static const uint8_t header[24]
Definition sdr2.c:68
#define FF_ARRAY_ELEMS(a)
Spherical video.
This structure describes information about the reference display width(s) and reference viewing dista...
Definition tdrdi.h:53
uint8_t num_ref_displays
The number of reference displays that are signalled in this struct.
Definition tdrdi.h:78
Ambient viewing environment metadata as defined by H.274.
AVRational ambient_illuminance
Environmental illuminance of the ambient viewing environment in lux.
AVRational ambient_light_x
Normalized x chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
AVRational ambient_light_y
Normalized y chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
Describe the class of an AVClass context structure.
Definition log.h:76
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Dolby Vision RPU colorspace metadata parameters.
Definition dovi_meta.h:171
Dolby Vision RPU data mapping parameters.
Definition dovi_meta.h:152
uint32_t num_x_partitions
Definition dovi_meta.h:160
AVDOVINLQParams nlq[3]
Definition dovi_meta.h:162
uint8_t mapping_color_space
Definition dovi_meta.h:154
uint8_t mapping_chroma_format_idc
Definition dovi_meta.h:155
AVDOVIReshapingCurve curves[3]
Definition dovi_meta.h:156
enum AVDOVINLQMethod nlq_method_idc
Definition dovi_meta.h:159
uint32_t num_y_partitions
Definition dovi_meta.h:161
Combined struct representing a combination of header, mapping and color metadata, for attaching to fr...
Definition dovi_meta.h:345
Coefficients of the non-linear inverse quantization.
Definition dovi_meta.h:139
uint64_t linear_deadzone_slope
Definition dovi_meta.h:143
uint64_t linear_deadzone_threshold
Definition dovi_meta.h:144
uint16_t nlq_offset
Definition dovi_meta.h:140
uint64_t vdr_in_max
Definition dovi_meta.h:141
uint8_t poly_order[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:122
enum AVDOVIMappingMethod mapping_idc[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:120
int64_t mmr_constant[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:126
int64_t mmr_coef[AV_DOVI_MAX_PIECES][3][7]
Definition dovi_meta.h:127
int64_t poly_coef[AV_DOVI_MAX_PIECES][3]
Definition dovi_meta.h:123
uint16_t pivots[AV_DOVI_MAX_PIECES+1]
Definition dovi_meta.h:119
uint8_t mmr_order[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:125
Dolby Vision RPU data header.
Definition dovi_meta.h:87
uint8_t vdr_rpu_profile
Definition dovi_meta.h:90
uint8_t spatial_resampling_filter_flag
Definition dovi_meta.h:100
uint8_t vdr_bit_depth
Definition dovi_meta.h:99
uint8_t el_spatial_resampling_filter_flag
Definition dovi_meta.h:101
uint8_t bl_video_full_range_flag
Definition dovi_meta.h:96
uint16_t rpu_format
Definition dovi_meta.h:89
uint8_t disable_residual_flag
Definition dovi_meta.h:102
uint8_t vdr_rpu_normalized_idc
Definition dovi_meta.h:95
uint8_t coef_log2_denom
Definition dovi_meta.h:94
uint8_t chroma_resampling_explicit_filter_flag
Definition dovi_meta.h:92
uint8_t coef_data_type
Definition dovi_meta.h:93
uint8_t vdr_rpu_level
Definition dovi_meta.h:91
char detect_label[AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE]
Detect result with confidence.
int x
Distance in pixels from the left/top edge of the frame, together with width and height,...
char classify_labels[AV_NUM_DETECTION_BBOX_CLASSIFY][AV_DETECTION_BBOX_LABEL_NAME_MAX_SIZE]
AVRational detect_confidence
AVRational classify_confidences[AV_NUM_DETECTION_BBOX_CLASSIFY]
uint32_t classify_count
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
uint8_t targeted_system_display_actual_peak_luminance_flag
This flag shall be equal to 0 in bit streams conforming to this version of this Specification.
uint8_t num_cols_targeted_system_display_actual_peak_luminance
The number of columns in the targeted_system_display_actual_peak_luminance array.
AVRational targeted_system_display_maximum_luminance
The nominal maximum display luminance of the targeted system display, in units of 0....
uint8_t mastering_display_actual_peak_luminance_flag
This flag shall be equal to 0 in bitstreams conforming to this version of this Specification.
AVHDRPlusColorTransformParams params[3]
The color transform parameters for every processing window.
uint8_t num_rows_targeted_system_display_actual_peak_luminance
The number of rows in the targeted system_display_actual_peak_luminance array.
uint8_t application_version
Application version in the application defining document in ST-2094 suite.
AVRational targeted_system_display_actual_peak_luminance[25][25]
The normalized actual peak luminance of the targeted system display.
uint8_t num_cols_mastering_display_actual_peak_luminance
The number of columns in the mastering_display_actual_peak_luminance array.
AVRational mastering_display_actual_peak_luminance[25][25]
The normalized actual peak luminance of the mastering display used for mastering the image essence.
uint8_t num_windows
The number of processing windows.
uint8_t num_rows_mastering_display_actual_peak_luminance
The number of rows in the mastering_display_actual_peak_luminance array.
This struct represents dynamic metadata for color volume transform - CUVA 005.1:2021 standard.
uint8_t num_windows
The number of processing windows.
uint8_t system_start_code
The system start code.
AVHDRVividColorTransformParams params[3]
The color transform parameters for every processing window.
This structure describes how to handle film grain synthesis for AOM codecs.
int chroma_scaling_from_luma
Signals whether to derive the chroma scaling function from the luma.
int limit_output_range
Signals to clip to limited color levels after film grain application.
int scaling_shift
Specifies the shift applied to the chroma components.
int grain_scale_shift
Signals the down shift applied to the generated gaussian numbers during synthesis.
int num_uv_points[2]
If chroma_scaling_from_luma is set to 0, signals the chroma scaling function parameters.
int overlap_flag
Signals whether to overlap film grain blocks.
int ar_coeff_lag
Specifies the auto-regression lag.
int uv_offset[2]
Offset used for component scaling function.
int ar_coeff_shift
Specifies the range of the auto-regressive coefficients.
uint8_t uv_points[2][10][2]
int8_t ar_coeffs_uv[2][25]
Chroma auto-regression coefficients.
int uv_mult[2]
Specifies the luma/chroma multipliers for the index to the component scaling function.
int8_t ar_coeffs_y[24]
Luma auto-regression coefficients.
int num_y_points
Number of points, and the scale and value for each point of the piecewise linear scaling function for...
This structure describes how to handle film grain synthesis for codecs using the ITU-T H....
uint8_t intensity_interval_upper_bound[3][256]
Specifies the upper bound of each intensity interval for which the set of model values applies for th...
int blending_mode_id
Specifies the blending mode used to blend the simulated film grain with the decoded images.
uint8_t intensity_interval_lower_bound[3][256]
Specifies the lower ounds of each intensity interval for whichthe set of model values applies for the...
int log2_scale_factor
Specifies a scale factor used in the film grain characterization equations.
int16_t comp_model_value[3][256][6]
Specifies the model values for the component for each intensity interval.
int model_id
Specifies the film grain simulation mode.
int component_model_present[3]
Indicates if the modelling of film grain for a given component is present.
uint16_t num_intensity_intervals[3]
Specifies the number of intensity intervals for which a specific set of model values has been estimat...
uint8_t num_model_values[3]
Specifies the number of model values present for each intensity interval in which the film grain has ...
This structure describes how to handle film grain synthesis in video for specific codecs.
enum AVColorPrimaries color_primaries
AVFilmGrainAOMParams aom
AVFilmGrainH274Params h274
enum AVColorRange color_range
Intended video signal characteristics.
int subsampling_x
Intended subsampling ratio, or 0 for luma-only streams.
int bit_depth_luma
Intended bit depth, or 0 for unknown/unspecified.
union AVFilmGrainParams::@177057277273004265167152242113040056044005264354 codec
Additional fields may be added both here and in any structure included.
enum AVFilmGrainParamsType type
Specifies the codec for which this structure is valid.
int width
Intended display resolution.
uint64_t seed
Seed to use for the synthesis process, if the codec allows for it.
enum AVColorTransferCharacteristic color_trc
enum AVColorSpace color_space
An instance of a filter.
Definition avfilter.h:273
AVFilterLink ** outputs
array of pointers to output links
Definition avfilter.h:285
A filter pad used for either input or output.
Definition filters.h:40
Structure to hold side data for an AVFrame.
Definition frame.h:327
enum AVFrameSideDataType type
Definition frame.h:328
size_t size
Definition frame.h:330
uint8_t * data
Definition frame.h:329
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
Color transform parameters at a processing window in a dynamic metadata for SMPTE 2094-40.
HDR Vivid three spline params.
AVRational enable_strength
3Spline_enable_Strength of three Spline.
AVRational th_delta1
3Spline_TH_Delta1 of three Spline.
int th_mode
The mode of three Spline.
AVRational th_delta2
3Spline_TH_Delta2 of three Spline.
AVRational th_enable_mb
three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive and in multiples of 1....
AVRational th_enable
3Spline_TH_enable of three Spline.
Color tone mapping parameters at a processing window in a dynamic metadata for CUVA 005....
int three_Spline_enable_flag
indicates 3Spline_enable_flag in the base parameter, This flag indicates that transfer three Spline o...
int base_param_k1
indicates k1_0 in the base parameter, base_param_k1 <= 1: k1_0 = base_param_k1 base_param_k1 > 1: res...
AVRational base_param_m_m
base_param_m_m in the base parameter, in multiples of 1.0/10.
AVRational base_param_m_p
base_param_m_p in the base parameter, in multiples of 1.0/16383.
int base_param_k3
indicates k3_0 in the base parameter, base_param_k3 == 1: k3_0 = base_param_k3 base_param_k3 == 2: k3...
AVRational base_param_m_b
base_param_m_b in the base parameter, in multiples of 1/1023.
AVRational base_param_m_a
base_param_m_a in the base parameter, in multiples of 1.0/1023.
AVRational base_param_Delta
base_param_Delta in the base parameter, in multiples of 1.0/127.
int three_Spline_num
The number of three Spline.
AVRational base_param_m_n
base_param_m_n in the base parameter, in multiples of 1.0/10.
int base_param_k2
indicates k2_0 in the base parameter, base_param_k2 <= 1: k2_0 = base_param_k2 base_param_k2 > 1: res...
AVRational targeted_system_display_maximum_luminance
The nominal maximum display luminance of the targeted system display, in multiples of 1....
int base_enable_flag
This flag indicates that transfer the base parameter(for value of 1)
int base_param_Delta_enable_mode
This flag indicates that delta mode of base parameter(for value of 1)
Color transform parameters at a processing window in a dynamic metadata for CUVA 005....
Mastering display metadata capable of representing the color volume of the display used to master the...
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
AVOption.
Definition opt.h:428
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition pixdesc.h:69
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
Structure describing a single Region Of Interest.
Definition frame.h:398
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition frame.h:403
AVRational qoffset
Quantisation offset.
Definition frame.h:440
int top
Distance in pixels from the top edge of the frame to the top and bottom edges and from the left edge ...
Definition frame.h:413
This structure describes how to handle spherical videos, outlining information about projection,...
Definition spherical.h:100
enum AVSphericalProjection projection
Projection type.
Definition spherical.h:104
int32_t pitch
Rotation around the right vector [-90, 90].
Definition spherical.h:145
int32_t roll
Rotation around the forward vector [-180, 180].
Definition spherical.h:146
int32_t yaw
Rotation around the up vector [-180, 180].
Definition spherical.h:144
uint32_t padding
Number of pixels to pad from the edge of each cube face.
Definition spherical.h:200
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition stereo3d.h:203
enum AVStereo3DType type
How views are packed within the video.
Definition stereo3d.h:207
uint32_t baseline
The distance between the centres of the lenses of the camera system, in micrometers.
Definition stereo3d.h:228
AVRational horizontal_disparity_adjustment
Relative shift of the left and right images, which changes the zero parallax plane.
Definition stereo3d.h:234
enum AVStereo3DPrimaryEye primary_eye
Which eye is the primary eye when rendering in 2D.
Definition stereo3d.h:222
int flags
Additional information about the frame packing.
Definition stereo3d.h:212
AVRational horizontal_field_of_view
Horizontal field of view, in degrees.
Definition stereo3d.h:239
enum AVStereo3DView view
Determines which views are packed.
Definition stereo3d.h:217
Video encoding parameters for a given frame.
int32_t delta_qp[4][2]
Quantisation parameter offset from the base (per-frame) qp for a given plane (first index) and AC/DC ...
enum AVVideoEncParamsType type
Type of the parameters (the codec they are used with).
unsigned int nb_blocks
Number of blocks in the array.
int32_t qp
Base quantisation parameter for the frame.
#define av_log(a,...)
Spherical video.
#define src1
Definition h264pred.c:141
#define src
Definition vp8dsp.c:248
#define width
Definition dsp.h:89
char * av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field)
Get the timecode string from the SMPTE timecode format.
Definition timecode.c:131
char * av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit)
Get the timecode string from the 25-bit timecode format (MPEG GOP format).
Definition timecode.c:147
Timecode helpers header.
#define AV_TIMECODE_STR_SIZE
Definition timecode.h:33
timestamp utils, mostly useful for debugging/logging purposes
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition timestamp.h:54
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition timestamp.h:83
UUID parsing and serialization utilities.
#define AV_UUID_LEN
Definition uuid.h:57
#define AV_UUID_ARG(x)
Definition uuid.h:51
#define AV_PRI_UUID
Definition uuid.h:39
static const AVFilterPad avfilter_vf_showinfo_outputs[]
static void dump_roi(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_content_light_metadata(AVFilterContext *ctx, AVFrameSideData *sd)
static void dump_spherical(AVFilterContext *ctx, AVFrame *frame, const AVFrameSideData *sd)
Definition vf_showinfo.c:72
static void dump_sei_unregistered_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_color_property(AVFilterContext *ctx, AVFrame *frame)
static const AVOption showinfo_options[]
Definition vf_showinfo.c:63
static void update_sample_stats_16(int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
static void dump_ambient_viewing_environment(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_tdrdi(AVFilterContext *ctx, const AVFrameSideData *sd)
static int config_props_in(AVFilterLink *link)
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
static void dump_dynamic_hdr_plus(AVFilterContext *ctx, AVFrameSideData *sd)
static void dump_sei_film_grain_params_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
static void update_sample_stats(int depth, int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
static void update_sample_stats_8(const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
static const AVFilterPad avfilter_vf_showinfo_inputs[]
static void dump_stereo3d(AVFilterContext *ctx, const AVFrameSideData *sd)
Definition vf_showinfo.c:97
static void dump_s12m_timecode(AVFilterContext *ctx, AVFilterLink *inlink, const AVFrameSideData *sd)
static int config_props_out(AVFilterLink *link)
static int config_props(AVFilterContext *ctx, AVFilterLink *link, int is_out)
static void dump_dovi_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_video_enc_params(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_detection_bbox(AVFilterContext *ctx, const AVFrameSideData *sd)
static void dump_dynamic_hdr_vivid(AVFilterContext *ctx, AVFrameSideData *sd)
static void dump_mastering_display(AVFilterContext *ctx, const AVFrameSideData *sd)
#define OFFSET(x)
Definition vf_showinfo.c:60
int len
static double c[64]