Showing the changes to libavfilter (1 of 1 file). Show all
Unified · Split
| @@ -27,6 +27,7 @@ · 26 unmodified lines | ||
| 27 | 27 | #include "libavutil/bswap.h" |
| 28 | 28 | #include "libavutil/adler32.h" |
| 29 | 29 | #include "libavutil/display.h" |
| 30 | +#include "libavutil/dovi_meta.h" | |
| 30 | 31 | #include "libavutil/imgutils.h" |
| 31 | 32 | #include "libavutil/internal.h" |
| 32 | 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 | |
| 433 | +static 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 | + | |
| 432 | 537 | static void dump_color_property(AVFilterContext *ctx, AVFrame *frame) |
| 433 | 538 | { |
| 434 | 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 | 722 | case AV_FRAME_DATA_FILM_GRAIN_PARAMS: |
| 618 | 723 | dump_sei_film_grain_params_metadata(ctx, sd); |
| 619 | 724 | break; |
| 725 | + case AV_FRAME_DATA_DOVI_METADATA: | |
| 726 | + dump_dovi_metadata(ctx, sd); | |
| 727 | + break; | |
| 620 | 728 | default: |
| 621 | 729 | av_log(ctx, AV_LOG_WARNING, "unknown side data type %d " |
| 622 | 730 | "(%"SIZE_SPECIFIER" bytes)\n", sd->type, sd->size); |