History

lavfi/showinfo: Support AV_FRAME_DATA_DOVI_METADATA

Niklas Haas committed 4 years ago

Commit fc40f451 parent 78dc21b1 file · +108 −0Browse files

Unified · Split

libavfilter/vf_showinfo.c+108−0
@@ -27,6 +27,7 @@ · 26 unmodified lines
27#include "libavutil/bswap.h"27#include "libavutil/bswap.h"
28#include "libavutil/adler32.h"28#include "libavutil/adler32.h"
29#include "libavutil/display.h"29#include "libavutil/display.h"
30#include "libavutil/dovi_meta.h"
30#include "libavutil/imgutils.h"31#include "libavutil/imgutils.h"
31#include "libavutil/internal.h"32#include "libavutil/internal.h"
32#include "libavutil/film_grain_params.h"33#include "libavutil/film_grain_params.h"
@@ -429,6 +430,110 @@ static void dump_sei_film_grain_params_metadata(AVFilterContext *ctx, const AVFr · 396 unmodified lines
429 }430 }
430}431}
431 432
433static void dump_dovi_metadata(AVFilterContext *ctx, const AVFrameSideData *sd)
434{
435 const AVDOVIMetadata *dovi = (AVDOVIMetadata *) sd->data;
436 const AVDOVIRpuDataHeader *hdr = av_dovi_get_header(dovi);
437 const AVDOVIDataMapping *mapping = av_dovi_get_mapping(dovi);
438 const AVDOVIColorMetadata *color = av_dovi_get_color(dovi);
439
440 av_log(ctx, AV_LOG_INFO, "Dolby Vision Metadata:\n");
441 av_log(ctx, AV_LOG_INFO, " rpu_type=%"PRIu8"; ", hdr->rpu_type);
442 av_log(ctx, AV_LOG_INFO, "rpu_format=%"PRIu16"; ", hdr->rpu_format);
443 av_log(ctx, AV_LOG_INFO, "vdr_rpu_profile=%"PRIu8"; ", hdr->vdr_rpu_profile);
444 av_log(ctx, AV_LOG_INFO, "vdr_rpu_level=%"PRIu8"; ", hdr->vdr_rpu_level);
445 av_log(ctx, AV_LOG_INFO, "chroma_resampling_explicit_filter_flag=%"PRIu8"; ", hdr->chroma_resampling_explicit_filter_flag);
446 av_log(ctx, AV_LOG_INFO, "coef_data_type=%"PRIu8"; ", hdr->coef_data_type);
447 av_log(ctx, AV_LOG_INFO, "coef_log2_denom=%"PRIu8"; ", hdr->coef_log2_denom);
448 av_log(ctx, AV_LOG_INFO, "vdr_rpu_normalized_idc=%"PRIu8"; ", hdr->vdr_rpu_normalized_idc);
449 av_log(ctx, AV_LOG_INFO, "bl_video_full_range_flag=%"PRIu8"; ", hdr->bl_video_full_range_flag);
450 av_log(ctx, AV_LOG_INFO, "bl_bit_depth=%"PRIu8"; ", hdr->bl_bit_depth);
451 av_log(ctx, AV_LOG_INFO, "el_bit_depth=%"PRIu8"; ", hdr->el_bit_depth);
452 av_log(ctx, AV_LOG_INFO, "vdr_bit_depth=%"PRIu8"; ", hdr->vdr_bit_depth);
453 av_log(ctx, AV_LOG_INFO, "spatial_resampling_filter_flag=%"PRIu8"; ", hdr->spatial_resampling_filter_flag);
454 av_log(ctx, AV_LOG_INFO, "el_spatial_resampling_filter_flag=%"PRIu8"; ", hdr->el_spatial_resampling_filter_flag);
455 av_log(ctx, AV_LOG_INFO, "disable_residual_flag=%"PRIu8"\n", hdr->disable_residual_flag);
456
457 av_log(ctx, AV_LOG_INFO, " data mapping: ");
458 av_log(ctx, AV_LOG_INFO, "vdr_rpu_id=%"PRIu8"; ", mapping->vdr_rpu_id);
459 av_log(ctx, AV_LOG_INFO, "mapping_color_space=%"PRIu8"; ", mapping->mapping_color_space);
460 av_log(ctx, AV_LOG_INFO, "mapping_chroma_format_idc=%"PRIu8"; ", mapping->mapping_chroma_format_idc);
461 av_log(ctx, AV_LOG_INFO, "nlq_method_idc=%d; ", (int) mapping->nlq_method_idc);
462 av_log(ctx, AV_LOG_INFO, "num_x_partitions=%"PRIu32"; ", mapping->num_x_partitions);
463 av_log(ctx, AV_LOG_INFO, "num_y_partitions=%"PRIu32"\n", mapping->num_y_partitions);
464
465 for (int c = 0; c < 3; c++) {
466 const AVDOVIReshapingCurve *curve = &mapping->curves[c];
467 const AVDOVINLQParams *nlq = &mapping->nlq[c];
468 av_log(ctx, AV_LOG_INFO, " channel %d: ", c);
469 av_log(ctx, AV_LOG_INFO, "pivots={ ");
470 for (int i = 0; i < curve->num_pivots; i++)
471 av_log(ctx, AV_LOG_INFO, "%"PRIu16" ", curve->pivots[i]);
472 av_log(ctx, AV_LOG_INFO, "}; mapping_idc={ ");
473 for (int i = 0; i < curve->num_pivots - 1; i++)
474 av_log(ctx, AV_LOG_INFO, "%d ", (int) curve->mapping_idc[i]);
475 av_log(ctx, AV_LOG_INFO, "}; poly_order={ ");
476 for (int i = 0; i < curve->num_pivots - 1; i++)
477 av_log(ctx, AV_LOG_INFO, "%"PRIu8" ", curve->poly_order[i]);
478 av_log(ctx, AV_LOG_INFO, "}; poly_coef={ ");
479 for (int i = 0; i < curve->num_pivots - 1; i++) {
480 av_log(ctx, AV_LOG_INFO, "{%"PRIi64", %"PRIi64", %"PRIi64"} ",
481 curve->poly_coef[i][0],
482 curve->poly_coef[i][1],
483 curve->poly_coef[i][2]);
484 }
485
486 av_log(ctx, AV_LOG_INFO, "}; mmr_order={ ");
487 for (int i = 0; i < curve->num_pivots - 1; i++)
488 av_log(ctx, AV_LOG_INFO, "%"PRIu8" ", curve->mmr_order[i]);
489 av_log(ctx, AV_LOG_INFO, "}; mmr_constant={ ");
490 for (int i = 0; i < curve->num_pivots - 1; i++)
491 av_log(ctx, AV_LOG_INFO, "%"PRIi64" ", curve->mmr_constant[i]);
492 av_log(ctx, AV_LOG_INFO, "}; mmr_coef={ ");
493 for (int i = 0; i < curve->num_pivots - 1; i++) {
494 av_log(ctx, AV_LOG_INFO, "{");
495 for (int j = 0; j < curve->mmr_order[i]; j++) {
496 for (int k = 0; k < 7; k++)
497 av_log(ctx, AV_LOG_INFO, "%"PRIi64" ", curve->mmr_coef[i][j][k]);
498 }
499 av_log(ctx, AV_LOG_INFO, "} ");
500 }
501
502 av_log(ctx, AV_LOG_INFO, "}; nlq_offset=%"PRIu64"; ", nlq->nlq_offset);
503 av_log(ctx, AV_LOG_INFO, "vdr_in_max=%"PRIu64"; ", nlq->vdr_in_max);
504 switch (mapping->nlq_method_idc) {
505 case AV_DOVI_NLQ_LINEAR_DZ:
506 av_log(ctx, AV_LOG_INFO, "linear_deadzone_slope=%"PRIu64"; ", nlq->linear_deadzone_slope);
507 av_log(ctx, AV_LOG_INFO, "linear_deadzone_threshold=%"PRIu64"\n", nlq->linear_deadzone_threshold);
508 break;
509 }
510 }
511
512 av_log(ctx, AV_LOG_INFO, " color metadata: ");
513 av_log(ctx, AV_LOG_INFO, "dm_metadata_id=%"PRIu8"; ", color->dm_metadata_id);
514 av_log(ctx, AV_LOG_INFO, "scene_refresh_flag=%"PRIu8"; ", color->scene_refresh_flag);
515 av_log(ctx, AV_LOG_INFO, "ycc_to_rgb_matrix={ ");
516 for (int i = 0; i < 9; i++)
517 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->ycc_to_rgb_matrix[i]));
518 av_log(ctx, AV_LOG_INFO, "}; ycc_to_rgb_offset={ ");
519 for (int i = 0; i < 3; i++)
520 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->ycc_to_rgb_offset[i]));
521 av_log(ctx, AV_LOG_INFO, "}; rgb_to_lms_matrix={ ");
522 for (int i = 0; i < 9; i++)
523 av_log(ctx, AV_LOG_INFO, "%f ", av_q2d(color->rgb_to_lms_matrix[i]));
524 av_log(ctx, AV_LOG_INFO, "}; signal_eotf=%"PRIu16"; ", color->signal_eotf);
525 av_log(ctx, AV_LOG_INFO, "signal_eotf_param0=%"PRIu16"; ", color->signal_eotf_param0);
526 av_log(ctx, AV_LOG_INFO, "signal_eotf_param1=%"PRIu16"; ", color->signal_eotf_param1);
527 av_log(ctx, AV_LOG_INFO, "signal_eotf_param2=%"PRIu32"; ", color->signal_eotf_param2);
528 av_log(ctx, AV_LOG_INFO, "signal_bit_depth=%"PRIu8"; ", color->signal_bit_depth);
529 av_log(ctx, AV_LOG_INFO, "signal_color_space=%"PRIu8"; ", color->signal_color_space);
530 av_log(ctx, AV_LOG_INFO, "signal_chroma_format=%"PRIu8"; ", color->signal_chroma_format);
531 av_log(ctx, AV_LOG_INFO, "signal_full_range_flag=%"PRIu8"; ", color->signal_full_range_flag);
532 av_log(ctx, AV_LOG_INFO, "source_min_pq=%"PRIu16"; ", color->source_min_pq);
533 av_log(ctx, AV_LOG_INFO, "source_max_pq=%"PRIu16"; ", color->source_max_pq);
534 av_log(ctx, AV_LOG_INFO, "source_diagonal=%"PRIu16"; ", color->source_diagonal);
535}
536
432static void dump_color_property(AVFilterContext *ctx, AVFrame *frame)537static void dump_color_property(AVFilterContext *ctx, AVFrame *frame)
433{538{
434 const char *color_range_str = av_color_range_name(frame->color_range);539 const char *color_range_str = av_color_range_name(frame->color_range);
@@ -617,6 +722,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) · 182 unmodified lines
617 case AV_FRAME_DATA_FILM_GRAIN_PARAMS:722 case AV_FRAME_DATA_FILM_GRAIN_PARAMS:
618 dump_sei_film_grain_params_metadata(ctx, sd);723 dump_sei_film_grain_params_metadata(ctx, sd);
619 break;724 break;
725 case AV_FRAME_DATA_DOVI_METADATA:
726 dump_dovi_metadata(ctx, sd);
727 break;
620 default:728 default:
621 av_log(ctx, AV_LOG_WARNING, "unknown side data type %d "729 av_log(ctx, AV_LOG_WARNING, "unknown side data type %d "
622 "(%"SIZE_SPECIFIER" bytes)\n", sd->type, sd->size);730 "(%"SIZE_SPECIFIER" bytes)\n", sd->type, sd->size);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t