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 E678946AB9 for ; Sat, 2 Sep 2023 15:33:46 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E541D68C79E; Sat, 2 Sep 2023 18:33:43 +0300 (EEST) Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6D33068C59E for ; Sat, 2 Sep 2023 18:33:37 +0300 (EEST) Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-401d67434daso616155e9.2 for ; Sat, 02 Sep 2023 08:33:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693668816; x=1694273616; darn=ffmpeg.org; h=user-agent:in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:to:from:date:from:to:cc:subject :date:message-id:reply-to; bh=XqqZdwdWELgbnMpS4O8f3NJD2PiYQP2IzV3izMm+GXQ=; b=Y98r18/6zppwSoInfVOoQpUN3Thgx+B3izpOPlmLoz2gdqn+MC+eYDffvdIMtrxmte +JHfpedQyJU2KZIjIJTj1Ipm4fLRVN1+ZSBycSyzXccXZgGApnMmWZD0XImm0qOco7qb 9eQhLM7xr/Wdj3ADlg7Rwrag63xwfkaDvU63sRHua/h7lO4kxUGnKne9v2rpHi0SFFAs AvsuwWqc6jtSTYwh9WvMDnBPLvwEi1DK6zkVR5ARxQPM02s9jDRJbEWPWAOQqLXyMXmF DcpNGq82KM/Z4n+1iN2bCXKOoGbnSNV3xqDxsSJra3BXhbwi+bArpV1P1DsJFVXIZH9k ubTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693668816; x=1694273616; h=user-agent:in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:to:from:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=XqqZdwdWELgbnMpS4O8f3NJD2PiYQP2IzV3izMm+GXQ=; b=APYg6H2vV3ZRJ8F+toeul2SrSpI53mO0Mg2uPGEJRENIt6OxHD4ZdB2/SEP3kVaBn9 6EOHOTwQRRBpl1aGxLofkxijz6iSZEXNYb8b03XhTIt81ISRHixTEDRPyL7beldUQ1gE hg6Ceeo8z0gtadRc5H0JKnmSfK2FqA0s/AyLeizgIpypGuifRG2J6sRO06PbzISQB8eR xH0NL0ZcG+wrB8sEtL0de35Fxdb+kHS00EKBHeuRq3y2oTgsEudon6XyOocX4w+2VZGW RS9ttsD68Qg3bRz/IY/3qkDUptFBjIhQ9D5wLRZqGHFISTMEUtgWGIauhOui0Qs2VNEV a5Kg== X-Gm-Message-State: AOJu0YzAFjZa8TumrqPAPTKXDz8uq6eEGTvoG0I4boxSGHqMczenoj38 FHRJXuqbSwlud3OYm8JiEfn+nELUf/A= X-Google-Smtp-Source: AGHT+IH6HffcZn00bB/x5n/3yxWu108BvkeTtZTbyBPxtAJHwxJegN3lhOUGGrZX8UygdWwhmA0/pw== X-Received: by 2002:a7b:cb8f:0:b0:3fc:60:7dbf with SMTP id m15-20020a7bcb8f000000b003fc00607dbfmr4092215wmi.41.1693668815723; Sat, 02 Sep 2023 08:33:35 -0700 (PDT) Received: from mariano ([82.84.194.139]) by smtp.gmail.com with ESMTPSA id f9-20020a7bcd09000000b003fe0a0e03fcsm11355998wmj.12.2023.09.02.08.33.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 Sep 2023 08:33:34 -0700 (PDT) Received: by mariano (Postfix, from userid 1000) id E164ABFCDA; Sat, 2 Sep 2023 17:33:32 +0200 (CEST) Date: Sat, 2 Sep 2023 17:33:32 +0200 From: Stefano Sabatini To: FFmpeg development discussions and patches Message-ID: Mail-Followup-To: FFmpeg development discussions and patches References: <20230901134336.1455166-1-stefasab@gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="WR/UJhrWyi1Rz7jT" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/2.1.4 (2021-12-11) Subject: Re: [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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --WR/UJhrWyi1Rz7jT Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On date Saturday 2023-09-02 10:33:12 +0200, Andreas Rheinhardt wrote: > Stefano Sabatini: > > +static void print_frame_side_data(WriterContext *w, > > + AVFrame *frame, > > + AVStream *stream) > > I am pretty sure both frame and stream can be constified. > > > +{ > > + int i; > > We support C99 variable declarations in for loops. > > > + > > + 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]; > > This can probably be const, too. > > > + const char *name; Updated. --WR/UJhrWyi1Rz7jT Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-ffprobe-factorize-side-data-printing-to-dedicated-fu.patch" >From afa387d5d529e09f91aaa3d3b721793d919a4bc8 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Thu, 31 Aug 2023 16:52:00 +0200 Subject: [PATCH] ffprobe: factorize side data printing to dedicated function --- fftools/ffprobe.c | 161 ++++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 78 deletions(-) diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c index 4fcfe1164b..181a1e0785 100644 --- a/fftools/ffprobe.c +++ b/fftools/ffprobe.c @@ -2578,6 +2578,87 @@ static void show_subtitle(WriterContext *w, AVSubtitle *sub, AVStream *stream, fflush(stdout); } +static void print_frame_side_data(WriterContext *w, + const AVFrame *frame, + const AVStream *stream) +{ + writer_print_section_header(w, SECTION_ID_FRAME_SIDE_DATA_LIST); + + for (int i = 0; i < frame->nb_side_data; i++) { + const 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 +2666,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 +2749,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 --WR/UJhrWyi1Rz7jT Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ 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". --WR/UJhrWyi1Rz7jT--