From patchwork Mon Apr 4 11:30:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 35184 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp1914208pzb; Mon, 4 Apr 2022 04:37:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2jG029VotRIdheLY+rh7szexx2okX0MleuBSLStcz77V2c7QxlUemPLranyyi7uc1Ng0E X-Received: by 2002:a05:6402:f16:b0:419:d9f3:f8b with SMTP id i22-20020a0564020f1600b00419d9f30f8bmr32858075eda.33.1649072256076; Mon, 04 Apr 2022 04:37:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649072256; cv=none; d=google.com; s=arc-20160816; b=B6H+MsJ57iAXl3WimvE6ePp/+LrzWouI/t2LmaBtqQafHTVRbLPP/kiMZNmQxM5k4y HLTUkn3y/+iqWOcx8qVptrnZ8FO/pnLHsUOkhVCNccd+SNlOXnTKLQd5lVYkgS5yUjY8 Fw3WltbDTExCHnJoN6fv8lVgdZ/MnFeV6JylKWa2pKHQjV05jn9wCWbZMxqvExxGHwbm 0XXoSDfTwIduTV31oykqpyoqAvn8rFxiL8ILMr8pDAA5o2NMcBJbbIXwjlWDc+ySB/y3 Cw4OjGPzpZ9CjOXHq74qmCyBABBCiUpwehaWVja7UArqfKoJmPUKmYvVJC+ZQaDIWfb4 Q8mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=y4x4EZU7VXe1+xECCvxn9r0D02MOwXR/U6jY4sjy9Hw=; b=X+qKt1SHjsGVoeQSCHi9xRZSaDxdLEpjTTOXvUUnvs3d5v3ub71agOjhOmunpnkoHg NR8haZSt1NXW/RVtY9BPQ1PLYF2WOndO5ij4AK8W1+m4x8NUYZi63b7UyMWyfVLpxWPY sXShKr7HS4PA3c+chOnZtFy9UIF6pHfDSFydlcTaJH2ueycQzrtW4FdC9cSllQ1S4h5h i0wTna3B+DtDVZPAvtf7uh0sn3jsYWDj+6p2HfQk4mOD69U7NjzMko9dpuWrAdoW50dm QU7opmrUoBq21sWkyUrHWEA/ncuNIV1Tdhh3gZ0/Cz8uSGPytwPb2gKWtfoHNAF8zehG bVdA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w15-20020a05640234cf00b004193289a2dfsi6796685edc.151.2022.04.04.04.37.35; Mon, 04 Apr 2022 04:37:36 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 41BEA68B346; Mon, 4 Apr 2022 14:32:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 77D2768B120 for ; Mon, 4 Apr 2022 14:32:28 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 13433240179 for ; Mon, 4 Apr 2022 13:32:28 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id fbkR7AaL9Ipn for ; Mon, 4 Apr 2022 13:32:27 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id E4B5C240692 for ; Mon, 4 Apr 2022 13:32:15 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id 0DE163A0D17; Mon, 4 Apr 2022 13:32:12 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Apr 2022 13:30:17 +0200 Message-Id: <20220404113037.13070-30-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220404113037.13070-1-anton@khirnov.net> References: <20220404113037.13070-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/49] fftools/ffmpeg_mux: move processing AV_PKT_DATA_QUALITY_STATS to do_video_stats() 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" X-TUID: Bv9qjKpCQnTl This is a more appropriate place for this code, since the values we read from AV_PKT_DATA_QUALITY_STATS side data are primarily written into video stats. Rename the function to update_video_stats() to better reflect its new purpose. --- fftools/ffmpeg_mux.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index b7140fca5e..ccfe31e09a 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -56,13 +56,28 @@ struct Muxer { static int want_sdp = 1; -static void do_video_stats(OutputStream *ost, const AVPacket *pkt) +static void update_video_stats(OutputStream *ost, const AVPacket *pkt, int write_vstats) { + const uint8_t *sd = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, + NULL); AVCodecContext *enc = ost->enc_ctx; int frame_number; double ti1, bitrate, avg_bitrate; - /* this is executed just the first time do_video_stats is called */ + ost->quality = sd ? AV_RL32(sd) : -1; + ost->pict_type = sd ? sd[4] : AV_PICTURE_TYPE_NONE; + + for (int i = 0; i < FF_ARRAY_ELEMS(ost->error); i++) { + if (sd && i < sd[5]) + ost->error[i] = AV_RL64(sd + 8 + 8 * i); + else + ost->error[i] = -1; + } + + if (!write_vstats) + return; + + /* this is executed just the first time update_video_stats is called */ if (!vstats_file) { vstats_file = fopen(vstats_filename, "w"); if (!vstats_file) { @@ -155,19 +170,6 @@ static void write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt) pkt->pts = pkt->dts = AV_NOPTS_VALUE; if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { - int i; - uint8_t *sd = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, - NULL); - ost->quality = sd ? AV_RL32(sd) : -1; - ost->pict_type = sd ? sd[4] : AV_PICTURE_TYPE_NONE; - - for (i = 0; ierror); i++) { - if (sd && i < sd[5]) - ost->error[i] = AV_RL64(sd + 8 + 8*i); - else - ost->error[i] = -1; - } - if (ost->frame_rate.num && ost->is_cfr) { if (pkt->duration > 0) av_log(NULL, AV_LOG_WARNING, "Overriding packet duration by frame rate, this should not happen\n"); @@ -219,9 +221,8 @@ static void write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt) ost->data_size += pkt->size; ost->packets_written++; - if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && - ost->encoding_needed && vstats_filename) - do_video_stats(ost, pkt); + if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->encoding_needed) + update_video_stats(ost, pkt, !!vstats_filename); pkt->stream_index = ost->index;