From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4D230466EE for ; Fri, 1 Sep 2023 13:43:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 568A368C722; Fri, 1 Sep 2023 16:43:45 +0300 (EEST) Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 80B0368C52B for ; Fri, 1 Sep 2023 16:43:39 +0300 (EEST) Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-31aeedbb264so1775473f8f.0 for ; Fri, 01 Sep 2023 06:43:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693575818; x=1694180618; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=RDy2BkvNjuB4gHN9zNh1mwjtw6krCuNWnflb8UlQxj4=; b=RYUCyMd/qQbpwR1RiJ3mZ7Mu2AT63Rhz+RxbklJdmx449GGM27QZdVdP44lWYiiOoK BySly9ArWJNwrms0OL7e8M/DxiItGlNJsv5H2/XWeikz5z8UgtpCOBWk2JDzb/uHnJU6 vFCIxU/3z48ep3S2uDZ0+NCj0UjGYRPboefTMaC0uIj1NEz1UMg3phqmFHsbdTfLK1of yzQ7sFS68SKos3ZIA0d1Q6GC0OnoyHve9SlvEeMoV/a9LHu9SioI3GP0a2I04BYNAlBe WXZc5Ll6vZ2DVtQJU7/Yj466/LyUu7HgXh0gBw4jfGBCa8PI9ctpbRQxmaDZtDQ7Wxrz Nytw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693575818; x=1694180618; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RDy2BkvNjuB4gHN9zNh1mwjtw6krCuNWnflb8UlQxj4=; b=Fk49B7dbi3u14C4unki/AwYOiaOvGSTdSuKGDQq5u76BTNZE1mN4nTQFexy29p43kR +2EgjCSYSyKrCKWAQsR84g4iEkgpShIlN2tI9NPSWQgX2VpF1BRal6LcpjSukiZmLQ5z 4e9ccV+0fCKq4NaieClZzEfgo3Ir5vpWqdOcjMiv603VW0O3WAIvCD1PQKnI5KTHzaku 7c3Wm/UyiMHS9Z0WqvI7ovUpybuXV7uDeuA2a5D476KxMpUXmUugjeUnkg7WnuOWFt3H MbUtImH47MBSaEoOcQuZpY2JBFI6tW00LBgAQazdrM8tcnjOnKRcyHcDpaWSYkxI3TIJ t74g== X-Gm-Message-State: AOJu0YwxfdJi2q1V4c0kGurfWawMH78rehEdpi7GiJkugDXuTKU+sBt6 ztJp3D1ZP1kmcBwH4qWp49oj0X3XQZI= X-Google-Smtp-Source: AGHT+IE90ZJVMRXCWhuJ/72wjmofP2oi3NpXt9hBWE0pKxJWeo5WzVJZcjGw4QrZXY2TZx9jy3kmjA== X-Received: by 2002:adf:f4cb:0:b0:314:3b1f:8ea2 with SMTP id h11-20020adff4cb000000b003143b1f8ea2mr2134136wrp.6.1693575818001; Fri, 01 Sep 2023 06:43:38 -0700 (PDT) Received: from mariano ([82.84.194.139]) by smtp.gmail.com with ESMTPSA id x18-20020adfec12000000b0031989784d96sm5292552wrn.76.2023.09.01.06.43.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 06:43:37 -0700 (PDT) Received: by mariano (Postfix, from userid 1000) id A171CBFCDA; Fri, 1 Sep 2023 15:43:36 +0200 (CEST) From: Stefano Sabatini To: FFmpeg development discussions and patches Date: Fri, 1 Sep 2023 15:43:34 +0200 Message-Id: <20230901134336.1455166-1-stefasab@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] ffprobe: factorize side data printing to dedicated function X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Stefano Sabatini Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- fftools/ffprobe.c | 163 ++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 78 deletions(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index 4fcfe1164b..547e299312 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2578,6 +2578,89 @@ static void show_subtitle(WriterContext *w, AVSubtitle *sub, AVStream *stream, fflush(stdout); } +static void print_frame_side_data(WriterContext *w, + AVFrame *frame, + AVStream *stream) +{ + int i; + + writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_LIST); + + for (i = 0; i < frame->nb_side_data; i++) { + AVFrameSideData *sd = frame->side_data[i]; + const char *name; + + writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA); + name = av_frame_side_data_name(sd->type); + print_str("side_data_type", name ? name : "unknown"); + if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) { + double rotation = av_display_rotation_get((int32_t *)sd->data); + if (isnan(rotation)) + rotation = 0; + writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1); + print_int("rotation", rotation); + } else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) { + print_int("active_format", *sd->data); + } else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) { + char tcbuf[AV_TIMECODE_STR_SIZE]; + av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data)); + print_str("timecode", tcbuf); + } else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size == 16) { + uint32_t *tc = (uint32_t*)sd->data; + int m = FFMIN(tc[0],3); + writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST); + for (int j = 1; j <= m ; j++) { + char tcbuf[AV_TIMECODE_STR_SIZE]; + av_timecode_make_smpte_tc_string2(tcbuf, stream->avg_frame_rate, tc[j], 0, 0); + writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE); + print_str("value", tcbuf); + writer_print_section_footer(w); + } + writer_print_section_footer(w); + } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) { + AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)sd->data; + + if (metadata->has_primaries) { + print_q("red_x", metadata->display_primaries[0][0], '/'); + print_q("red_y", metadata->display_primaries[0][1], '/'); + print_q("green_x", metadata->display_primaries[1][0], '/'); + print_q("green_y", metadata->display_primaries[1][1], '/'); + print_q("blue_x", metadata->display_primaries[2][0], '/'); + print_q("blue_y", metadata->display_primaries[2][1], '/'); + + print_q("white_point_x", metadata->white_point[0], '/'); + print_q("white_point_y", metadata->white_point[1], '/'); + } + + if (metadata->has_luminance) { + print_q("min_luminance", metadata->min_luminance, '/'); + print_q("max_luminance", metadata->max_luminance, '/'); + } + } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) { + AVDynamicHDRPlus *metadata = (AVDynamicHDRPlus *)sd->data; + print_dynamic_hdr10_plus(w, metadata); + } else if (sd->type == AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) { + AVContentLightMetadata *metadata = (AVContentLightMetadata *)sd->data; + print_int("max_content", metadata->MaxCLL); + print_int("max_average", metadata->MaxFALL); + } else if (sd->type == AV_FRAME_DATA_ICC_PROFILE) { + const AVDictionaryEntry *tag = av_dict_get(sd->metadata, "name", NULL, AV_DICT_MATCH_CASE); + if (tag) + print_str(tag->key, tag->value); + print_int("size", sd->size); + } else if (sd->type == AV_FRAME_DATA_DOVI_METADATA) { + print_dovi_metadata(w, (const AVDOVIMetadata *)sd->data); + } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) { + AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data; + print_dynamic_hdr_vivid(w, metadata); + } else if (sd->type == AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT) { + print_ambient_viewing_environment(w, (const AVAmbientViewingEnvironment *)sd->data); + } + writer_print_section_footer(w); + } + writer_print_section_footer(w); +} + static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx) { @@ -2585,7 +2668,6 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, AVBPrint pbuf; char val_str[128]; const char *s; - int i; av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED); @@ -2669,83 +2751,8 @@ static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, show_tags(w, frame->metadata, SECTION_ID_FRAME_TAGS); if (do_show_log) show_log(w, SECTION_ID_FRAME_LOGS, SECTION_ID_FRAME_LOG, do_show_log); - if (frame->nb_side_data) { - writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_LIST); - for (i = 0; i < frame->nb_side_data; i++) { - AVFrameSideData *sd = frame->side_data[i]; - const char *name; - - writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA); - name = av_frame_side_data_name(sd->type); - print_str("side_data_type", name ? name : "unknown"); - if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) { - double rotation = av_display_rotation_get((int32_t *)sd->data); - if (isnan(rotation)) - rotation = 0; - writer_print_integers(w, "displaymatrix", sd->data, 9, " %11d", 3, 4, 1); - print_int("rotation", rotation); - } else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) { - print_int("active_format", *sd->data); - } else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) { - char tcbuf[AV_TIMECODE_STR_SIZE]; - av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data)); - print_str("timecode", tcbuf); - } else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size == 16) { - uint32_t *tc = (uint32_t*)sd->data; - int m = FFMIN(tc[0],3); - writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST); - for (int j = 1; j <= m ; j++) { - char tcbuf[AV_TIMECODE_STR_SIZE]; - av_timecode_make_smpte_tc_string2(tcbuf, stream->avg_frame_rate, tc[j], 0, 0); - writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_TIMECODE); - print_str("value", tcbuf); - writer_print_section_footer(w); - } - writer_print_section_footer(w); - } else if (sd->type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA) { - AVMasteringDisplayMetadata *metadata = (AVMasteringDisplayMetadata *)sd->data; - - if (metadata->has_primaries) { - print_q("red_x", metadata->display_primaries[0][0], '/'); - print_q("red_y", metadata->display_primaries[0][1], '/'); - print_q("green_x", metadata->display_primaries[1][0], '/'); - print_q("green_y", metadata->display_primaries[1][1], '/'); - print_q("blue_x", metadata->display_primaries[2][0], '/'); - print_q("blue_y", metadata->display_primaries[2][1], '/'); - - print_q("white_point_x", metadata->white_point[0], '/'); - print_q("white_point_y", metadata->white_point[1], '/'); - } - - if (metadata->has_luminance) { - print_q("min_luminance", metadata->min_luminance, '/'); - print_q("max_luminance", metadata->max_luminance, '/'); - } - } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) { - AVDynamicHDRPlus *metadata = (AVDynamicHDRPlus *)sd->data; - print_dynamic_hdr10_plus(w, metadata); - } else if (sd->type == AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) { - AVContentLightMetadata *metadata = (AVContentLightMetadata *)sd->data; - print_int("max_content", metadata->MaxCLL); - print_int("max_average", metadata->MaxFALL); - } else if (sd->type == AV_FRAME_DATA_ICC_PROFILE) { - const AVDictionaryEntry *tag = av_dict_get(sd->metadata, "name", NULL, AV_DICT_MATCH_CASE); - if (tag) - print_str(tag->key, tag->value); - print_int("size", sd->size); - } else if (sd->type == AV_FRAME_DATA_DOVI_METADATA) { - print_dovi_metadata(w, (const AVDOVIMetadata *)sd->data); - } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) { - AVDynamicHDRVivid *metadata = (AVDynamicHDRVivid *)sd->data; - print_dynamic_hdr_vivid(w, metadata); - } else if (sd->type == AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT) { - print_ambient_viewing_environment( - w, (const AVAmbientViewingEnvironment *)sd->data); - } - writer_print_section_footer(w); - } - writer_print_section_footer(w); - } + if (frame->nb_side_data) + print_frame_side_data(w, frame, stream); writer_print_section_footer(w); -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".