From patchwork Tue Sep 24 07:09:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51780 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp170632vqy; Tue, 24 Sep 2024 00:10:29 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWGA5DEUesOVlRP75TNYYrbClCy+rfebsbr6pQukjuHMTZ5r6UiGtfOdt17870el2Z+uwVbQY5IfdJkntJ9LMgF@gmail.com X-Google-Smtp-Source: AGHT+IGhd0uCZl19X91jeIiczY3FYT5TjG6SOEeZZkzO7nLUk0h3iOG15GV4VLmqjYE2coJwCWot X-Received: by 2002:a17:907:74c:b0:a8d:6dab:b8ee with SMTP id a640c23a62f3a-a92d55a1794mr185185666b.23.1727161828692; Tue, 24 Sep 2024 00:10:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727161828; cv=none; d=google.com; s=arc-20240605; b=iAr5SYEom7suHSY5/1R6F6k1ajOBPT7keIAIxPaZByEdj2SfH6D0qh2pJhOEFmakOd b0kkjVFGKF0U93jTW2cWsWAZJMnO8cEQrHYJHcuLR+n39ioaQ3US7uhVrfngU7Hs1mFL HxXg4kj32QF9OqMZ7xdDLgg6ki4FKHdfw8CVlGk/FR58yTNPP5OVGLUR/BAcgK9xtYPm WTI37Jrjtb3aO3i8wx6iB6G3Ih4N7OxewnWamS9N/O+4u+XlTK+ISMkOEG0Scpz64GiL hsXg5GTq24IHWjXuL4QZx84kgrax7zDZoEixBubhFpeZtN++glpYUNnA9vmySioaO/HE UGeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:message-id:date:to:from :dkim-signature:delivered-to; bh=5ZhFN1kZsKBgZ0nwHBmud5U2Hl0I3steyzGTEnr9GGM=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=VhZan0g0J5bpCnk7+/39841jprIAe0splZOdVP4My31oggOHv7yWWi3apq+3taNy7k O2Bk5N9/gWwEetKcZJJHs4qxr+hnhuwpx+fCn/KEuQFsLOu+UljRQ4PqSSDQPNfbCpgo M5xwVcy1+wY3TI6l9tQHpU7wAmzQSnYrl17jxYQ40+nTkiXH8t+fQmfDDIU4je7pe+FH ok3VAuuKMFsIDolsNgk3Kkx8pTsqNEANGrDD2bNe5n4CVQgzRTBIcWWPAb6ZA5PfuC4h OrNLAopLTAahEBbA88DItMqSGDSofBt9c85MgpiIklS8HZRZopTW4j2wlJ1uw47rVFpr Vdrw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=QlvdwOgP; 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 a640c23a62f3a-a93930be55asi54254266b.389.2024.09.24.00.10.27; Tue, 24 Sep 2024 00:10:28 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=QlvdwOgP; 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 CF3E668DADD; Tue, 24 Sep 2024 10:10:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0883E68D799 for ; Tue, 24 Sep 2024 10:10:17 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=QlvdwOgP; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 5D1E54E0F for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id I-eMAoFlmj7Q for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=DDRpAyezUdp6p7T4t5bGwj0o6dK+6Dp48fsshr0ZQAo=; h=From:To:Subject:Date:From; b=QlvdwOgPwWRnhIvvQYCltQhwPucG6IPrQhL9Ga0CnNYW/xvml2fFU2XnWmjm2zKUL bb2pb7c41bNwb3piKV6DAyOc+X5aP3HHVDSD6D8fZhCg+rON3G/9zvvFrftkDE0G3h GkPtGHtf/GWzXsC6H9YQkg2JrgVflQEdH6dRvkotrLx7bcYZqYNNBpxPMYtTzUslVQ LoQM7+0KhQ36e6epwYXq1W6dUA8rqk/jMzF93N9MW3OetuRd6um/jJAFUMTlqbFtTr YJDRx4Az4qTj8PHmiQ7feD1KOg7enzeRVSC97I/PulnCcKlNNN/QMCIFqSqgPMOxTH n2SYPHYPAT72g== 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 mail1.khirnov.net (Postfix) with ESMTPS id 4202EEE8 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id D683D3A036E for ; Tue, 24 Sep 2024 09:10:09 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:42 +0200 Message-ID: <20240924071000.11428-1-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 01/13] doc/ffmpeg; improve wording in the description section 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: gEadd2SOnshg --- doc/ffmpeg.texi | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 34007f7ea2..d43782e2a4 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -21,22 +21,24 @@ ffmpeg [@var{global_options}] @{[@var{input_file_options}] -i @file{input_url}@} inputs - including live grabbing/recording devices - filter, and transcode them into a plethora of output formats. -@command{ffmpeg} reads from an arbitrary number of input "files" (which can be regular +@command{ffmpeg} reads from an arbitrary number of inputs (which can be regular files, pipes, network streams, grabbing devices, etc.), specified by the -@code{-i} option, and writes to an arbitrary number of output "files", which are -specified by a plain output url. Anything found on the command line which -cannot be interpreted as an option is considered to be an output url. +@code{-i} option, and writes to an arbitrary number of output, which are +specified by a plain output url. Anything found on the command line which cannot +be interpreted as an option is considered to be an output url. -Each input or output url can, in principle, contain any number of streams of -different types (video/audio/subtitle/attachment/data). The allowed number and/or -types of streams may be limited by the container format. Selecting which -streams from which inputs will go into which output is either done automatically -or with the @code{-map} option (see the Stream selection chapter). +Each input or output can, in principle, contain any number of elementary streams +of different types (video/audio/subtitle/attachment/data), though the allowed +stream counts and/or types may be limited by the container format. Selecting +which streams from which inputs will go into which output is either done +automatically or with the @code{-map} option (see the @ref{Stream selection} +chapter). -To refer to input files in options, you must use their indices (0-based). E.g. -the first input file is @code{0}, the second is @code{1}, etc. Similarly, streams -within a file are referred to by their indices. E.g. @code{2:3} refers to the -fourth stream in the third input file. Also see the Stream specifiers chapter. +To refer to inputs/outputs in options, you must use their indices (0-based). +E.g. the first input is @code{0}, the second is @code{1}, etc. Similarly, +streams within an input/output are referred to by their indices. E.g. @code{2:3} +refers to the fourth stream in the third input or output. Also see the +@ref{Stream specifiers} chapter. As a general rule, options are applied to the next specified file. Therefore, order is important, and you can have the same @@ -261,6 +263,7 @@ reads an input video and @c man end DETAILED DESCRIPTION +@anchor{Stream selection} @chapter Stream selection @c man begin STREAM SELECTION From patchwork Tue Sep 24 07:09:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51781 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp170735vqy; Tue, 24 Sep 2024 00:10:43 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWrKnXhuEveNWe17Ricvxz/ed4fWBj5LiDE/oPp3SqS+TRAI7OXwlvdhFCqDhRRRrXHoh4KktfBs1BQsGJqA3d5@gmail.com X-Google-Smtp-Source: AGHT+IEgvm6cXHObi6ByoUSsyyTA+iH0hGDO+z45/BV40txaf0fSG/tZU4Kp+J0aNobg649vnyVI X-Received: by 2002:a17:907:f1a2:b0:a7a:9144:e23b with SMTP id a640c23a62f3a-a90d4fdb618mr1313073566b.19.1727161843595; Tue, 24 Sep 2024 00:10:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727161843; cv=none; d=google.com; s=arc-20240605; b=bqq6Qiji5DCPLksOLE/aZX820VKskT2IPGuh/fzn9RZ3Di2fvGJviJQqca4PiQurcg rZFckm0hGgB26z0lnWpFcZzqoi3T8fklprtAw3Qj1aDB7ghSUCVqKJnJovcG0D/55Lp/ 1aZncaSapG799SPztSlDJTGF+sc9CUhQqto79Xvy+74qMp1WJ67QeVfzVvCEvrW5hdjs c2oYebdkal652coO75XQMZ+guNww1Z/CYCvHhVBllBZBz9UPBYU4QOrMvtwdKiTjWk9F qNPFEX/7gluGbzwFNbxWyIpXiXVP43b6THhpB8ya44UXsI5p3yrFfG6kPMTsIFlnsdhI 2n2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=Gjtv607eqeruxTfz0p5kSyf0cpQ395VNccCBRj13Pzo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=XPhR6x0edtKpJLK7+iAbv17ynQFyOH3HsY9Ni+7Gw/Km1Ugnzp/mbQEU/fWCbWEVcg wc1hzDDlbaSx2ies6XQJVAPuO3ycpLeoNOOzzV1WajhX/QNoBYUjBjYFDnqcbkY/SOW4 +DZktGv23MEPd5FX3Gm3rokGwZjY0Yn/PWbB37BRjVy9WUOsdm/jfX0H+CwvroMc6RYN DcWd3H8iokFAdMRE64hibNkBlGXHbozqSNeD8pGBi49OTrJGoV4pMP8YwLwzIUpOCIvr fGB+wh0cte1OH61CPn6zdUkVkupOGqGHTLH7e5/oNb/ozm0MvMadBluo2CVo7VUGkaSx Q+eg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TjLxJlKi; 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 a640c23a62f3a-a9392f32132si55601366b.94.2024.09.24.00.10.41; Tue, 24 Sep 2024 00:10:43 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TjLxJlKi; 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 4D62F68DA4A; Tue, 24 Sep 2024 10:10:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0BD4D68DA4A for ; Tue, 24 Sep 2024 10:10:17 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=TjLxJlKi; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 4A0904E0C for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id 4RJ5OAJN5iWs for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=4whbfnSJxqaPVIsK0M5UgUBLaUviYGndCQAqkd64eGk=; h=From:To:Subject:Date:In-Reply-To:References:From; b=TjLxJlKi/1JMtkAfWYCSs5n/D0Q70yoxhxcISegdo2vSwp6wtwzUVQWGTu7K0Mkg4 kI22h8LKOVtgtChAPpPFrsAFlhjgO4d7IOBC+Gz+g7e3eEFuUnw/35EOci1effDmsG JocFnJ/PW5Xqxt8ykAgJ5INcf6Lgkk38LRSIljcwnu5MrvHZbCDDePjIjkDczwBeUi NSYCsdRc9v0Hm4R/GlGZS6+yepHJPLIB3sXqTt0lMzZ8yz9qJHQRKDV+6mAzEdUCd4 4FsIdKPDh8FNIb+sCfUbey5EP+LtbZqQDCOK3MO3cM8NINQanezCgL+qLJ9i1mFQuL A40TBwITnpihw== 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 mail1.khirnov.net (Postfix) with ESMTPS id 4344A4DE2 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id E3BC43A086F for ; Tue, 24 Sep 2024 09:10:09 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:43 +0200 Message-ID: <20240924071000.11428-2-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 02/13] fftools/ffmpeg_enc: add an AVClass to Encoder 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: EnAle+xynJos Log decoder messages to the encoder rather than OutputStream. This is a step towards decoupling encoders from muxers, similarly to what was previously done to decoders and demuxers. --- fftools/ffmpeg.h | 2 +- fftools/ffmpeg_enc.c | 62 +++++++++++++++++++++++++++------------ fftools/ffmpeg_mux_init.c | 2 +- 3 files changed, 45 insertions(+), 21 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 733d551fa4..122372440f 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -858,7 +858,7 @@ int dec_request_view(Decoder *dec, const ViewSpecifier *vs, SchedulerNode *src); int enc_alloc(Encoder **penc, const AVCodec *codec, - Scheduler *sch, unsigned sch_idx); + Scheduler *sch, unsigned sch_idx, void *log_parent); void enc_free(Encoder **penc); int enc_open(void *opaque, const AVFrame *frame); diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index c1c8aa0e78..2e1c7f27c1 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -39,6 +39,10 @@ #include "libavcodec/avcodec.h" struct Encoder { + const AVClass *class; + void *log_parent; + char log_name[32]; + // combined size of all the packets received from the encoder uint64_t data_size; @@ -68,8 +72,22 @@ void enc_free(Encoder **penc) av_freep(penc); } +static const char *enc_item_name(void *obj) +{ + const Encoder *e = obj; + + return e->log_name; +} + +static const AVClass enc_class = { + .class_name = "Encoder", + .version = LIBAVUTIL_VERSION_INT, + .parent_log_context_offset = offsetof(Encoder, log_parent), + .item_name = enc_item_name, +}; + int enc_alloc(Encoder **penc, const AVCodec *codec, - Scheduler *sch, unsigned sch_idx) + Scheduler *sch, unsigned sch_idx, void *log_parent) { Encoder *enc; @@ -79,9 +97,14 @@ int enc_alloc(Encoder **penc, const AVCodec *codec, if (!enc) return AVERROR(ENOMEM); + enc->class = &enc_class; + enc->log_parent = log_parent; + enc->sch = sch; enc->sch_idx = sch_idx; + snprintf(enc->log_name, sizeof(enc->log_name), "enc:%s", codec->name); + *penc = enc; return 0; @@ -314,14 +337,14 @@ int enc_open(void *opaque, const AVFrame *frame) ret = hw_device_setup_for_encode(ost, frame ? frame->hw_frames_ctx : NULL); if (ret < 0) { - av_log(ost, AV_LOG_ERROR, + av_log(e, AV_LOG_ERROR, "Encoding hardware device setup failed: %s\n", av_err2str(ret)); return ret; } if ((ret = avcodec_open2(ost->enc_ctx, enc, NULL)) < 0) { if (ret != AVERROR_EXPERIMENTAL) - av_log(ost, AV_LOG_ERROR, "Error while opening encoder - maybe " + av_log(e, AV_LOG_ERROR, "Error while opening encoder - maybe " "incorrect parameters such as bit_rate, rate, width or height.\n"); return ret; } @@ -333,12 +356,12 @@ int enc_open(void *opaque, const AVFrame *frame) if (ost->enc_ctx->bit_rate && ost->enc_ctx->bit_rate < 1000 && ost->enc_ctx->codec_id != AV_CODEC_ID_CODEC2 /* don't complain about 700 bit/s modes */) - av_log(ost, AV_LOG_WARNING, "The bitrate parameter is set too low." + av_log(e, AV_LOG_WARNING, "The bitrate parameter is set too low." " It takes bits/s as argument, not kbits/s\n"); ret = avcodec_parameters_from_context(ost->par_in, ost->enc_ctx); if (ret < 0) { - av_log(ost, AV_LOG_FATAL, + av_log(e, AV_LOG_FATAL, "Error initializing the output stream codec context.\n"); return ret; } @@ -375,7 +398,7 @@ static int do_subtitle_out(OutputFile *of, OutputStream *ost, const AVSubtitle * int64_t pts; if (sub->pts == AV_NOPTS_VALUE) { - av_log(ost, AV_LOG_ERROR, "Subtitle packets must have a pts\n"); + av_log(e, AV_LOG_ERROR, "Subtitle packets must have a pts\n"); return exit_on_error ? AVERROR(EINVAL) : 0; } if ((of->start_time != AV_NOPTS_VALUE && sub->pts < of->start_time)) @@ -424,7 +447,7 @@ static int do_subtitle_out(OutputFile *of, OutputStream *ost, const AVSubtitle * subtitle_out_size = avcodec_encode_subtitle(enc, pkt->data, pkt->size, &local_sub); if (subtitle_out_size < 0) { - av_log(ost, AV_LOG_FATAL, "Subtitle encoding failed\n"); + av_log(e, AV_LOG_FATAL, "Subtitle encoding failed\n"); return subtitle_out_size; } @@ -619,7 +642,7 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame, ost->samples_encoded += frame->nb_samples; if (debug_ts) { - av_log(ost, AV_LOG_INFO, "encoder <- type:%s " + av_log(e, AV_LOG_INFO, "encoder <- type:%s " "frame_pts:%s frame_pts_time:%s time_base:%d/%d\n", type_desc, av_ts2str(frame->pts), av_ts2timestr(frame->pts, &enc->time_base), @@ -634,7 +657,7 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame, ret = avcodec_send_frame(enc, frame); if (ret < 0 && !(ret == AVERROR_EOF && !frame)) { - av_log(ost, AV_LOG_ERROR, "Error submitting %s frame to the encoder\n", + av_log(e, AV_LOG_ERROR, "Error submitting %s frame to the encoder\n", type_desc); return ret; } @@ -659,7 +682,7 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame, return 0; } else if (ret < 0) { if (ret != AVERROR_EOF) - av_log(ost, AV_LOG_ERROR, "%s encoding failed\n", type_desc); + av_log(e, AV_LOG_ERROR, "%s encoding failed\n", type_desc); return ret; } @@ -693,7 +716,7 @@ static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame, e->packets_encoded); if (debug_ts) { - av_log(ost, AV_LOG_INFO, "encoder -> type:%s " + av_log(e, AV_LOG_INFO, "encoder -> type:%s " "pkt_pts:%s pkt_pts_time:%s pkt_dts:%s pkt_dts_time:%s " "duration:%s duration_time:%s\n", type_desc, @@ -764,6 +787,7 @@ force_keyframe: static int frame_encode(OutputStream *ost, AVFrame *frame, AVPacket *pkt) { + Encoder *e = ost->enc; OutputFile *of = ost->file; enum AVMediaType type = ost->type; @@ -782,7 +806,7 @@ static int frame_encode(OutputStream *ost, AVFrame *frame, AVPacket *pkt) if (type == AVMEDIA_TYPE_VIDEO) { frame->quality = ost->enc_ctx->global_quality; - frame->pict_type = forced_kf_apply(ost, &ost->kf, frame); + frame->pict_type = forced_kf_apply(e, &ost->kf, frame); #if FFMPEG_OPT_TOP if (ost->top_field_first >= 0) { @@ -793,7 +817,7 @@ static int frame_encode(OutputStream *ost, AVFrame *frame, AVPacket *pkt) } else { if (!(ost->enc_ctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE) && ost->enc_ctx->ch_layout.nb_channels != frame->ch_layout.nb_channels) { - av_log(ost, AV_LOG_ERROR, + av_log(e, AV_LOG_ERROR, "Audio channel count changed and encoder does not support parameter changes\n"); return 0; } @@ -867,14 +891,14 @@ int encoder_thread(void *arg) input_status = sch_enc_receive(e->sch, e->sch_idx, et.frame); if (input_status < 0) { if (input_status == AVERROR_EOF) { - av_log(ost, AV_LOG_VERBOSE, "Encoder thread received EOF\n"); + av_log(e, AV_LOG_VERBOSE, "Encoder thread received EOF\n"); if (e->opened) break; - av_log(ost, AV_LOG_ERROR, "Could not open encoder before EOF\n"); + av_log(e, AV_LOG_ERROR, "Could not open encoder before EOF\n"); ret = AVERROR(EINVAL); } else { - av_log(ost, AV_LOG_ERROR, "Error receiving a frame for encoding: %s\n", + av_log(e, AV_LOG_ERROR, "Error receiving a frame for encoding: %s\n", av_err2str(ret)); ret = input_status; } @@ -893,9 +917,9 @@ int encoder_thread(void *arg) if (ret < 0) { if (ret == AVERROR_EOF) - av_log(ost, AV_LOG_VERBOSE, "Encoder returned EOF, finishing\n"); + av_log(e, AV_LOG_VERBOSE, "Encoder returned EOF, finishing\n"); else - av_log(ost, AV_LOG_ERROR, "Error encoding a frame: %s\n", + av_log(e, AV_LOG_ERROR, "Error encoding a frame: %s\n", av_err2str(ret)); break; } @@ -905,7 +929,7 @@ int encoder_thread(void *arg) if (ret == 0 || ret == AVERROR_EOF) { ret = frame_encode(ost, NULL, et.pkt); if (ret < 0 && ret != AVERROR_EOF) - av_log(ost, AV_LOG_ERROR, "Error flushing encoder: %s\n", + av_log(e, AV_LOG_ERROR, "Error flushing encoder: %s\n", av_err2str(ret)); } diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 8afb018de8..1b75430e4e 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1227,7 +1227,7 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, return ret; ms->sch_idx_enc = ret; - ret = enc_alloc(&ost->enc, enc, mux->sch, ms->sch_idx_enc); + ret = enc_alloc(&ost->enc, enc, mux->sch, ms->sch_idx_enc, ost); if (ret < 0) return ret; From patchwork Tue Sep 24 07:09:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51792 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp202673vqy; Tue, 24 Sep 2024 01:29:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX5QMzV35lE1taOrgLpZE/ZYFXLM4k1QYBeIV3kF4fUsl060/7RBuz7ubRwNPbvjreSRIa89se7Dvh5hmIE/R8/@gmail.com X-Google-Smtp-Source: AGHT+IHl5kposp0aIX2fR/b3VhOKKqZPqycdi/vYdJxutHZz2CTGP7XF6sAU592VDKk1C8FLraMP X-Received: by 2002:a05:6512:3f01:b0:52c:dfa2:5ac1 with SMTP id 2adb3069b0e04-536ac2e51c8mr7724621e87.24.1727166559045; Tue, 24 Sep 2024 01:29:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727166559; cv=none; d=google.com; s=arc-20240605; b=SpMv3D6JrVQZTp5XXtNkYwy+EN25bjItyrYNgctrC4EVYpI2/6wY0QZYnChlalpkaG RzohSphL1Cqj/ySXOz8oUxM1/hIzV4Ax8XPgkjS8z4weC/LX0iQIl3SBg0w1iJ5+PlQ9 LW851jJEFvzVi6NImG5aCxp/6li9gFHDO4LMYanj/z9+egcMNtDYcU3Gcuxu+nR3X3DQ x1T3cMvnPTvOFCGaPN9Mga5v/T7a7LCYv0f+cPItS8t4ECwxVVo8lWwsJOuAoyNfcRcS EBSMVsABvNqET/crUWE6K8ddMgTZFX/CV0Drp8+ASVIISkkudNXE5TYzTJFJB9eczp2R YcuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=IRAxkc8R5NTC6D100r42txFUAihaH5FGV4UO/AO0DrY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=j8Pz+s9S9a3k3Ni4pJFzLnSK5MbRjmUVlutjbwHs3ZZPDLnOrOtSAt0NELRjYcUNbh JwSC56FaAKhHIOKt9XyEJeByUYx37OPZe/2qP/6HQtmoTG5x6C/FvgMDaz5fItAOj7Gh VEFf4i7nx7SoFfLXmU6DQDDHLsVejFELctilXNtw90hwPCQb9qnelLLZy0Ay9VSd5K0U 2Ks4+tGqnI2eDr+3T1IPKgCg4eiFObbBpZ7xtqZCNVcc6Tn5yXHlufhp7GlX1wIp/dJF wb73B9a974iAH6s9VBj0LQ47KPwnTx4Sy2OtHC3G3ZQMieMJmqCT7ogWaQrvQJh9ZKR6 yZNA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=DxmlGIBk; 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 2adb3069b0e04-537a865097bsi338784e87.595.2024.09.24.01.29.18; Tue, 24 Sep 2024 01:29:19 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=DxmlGIBk; 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 AAC9468DBA3; Tue, 24 Sep 2024 10:10:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 19E4D68DAB2 for ; Tue, 24 Sep 2024 10:10:23 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=DxmlGIBk; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id D3FA94E09 for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id NtzXW-lKQVkH for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161816; bh=l8vqaEZdb/RfECfb0OINQHt3gK3fgWbOspkGLhhTgbI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=DxmlGIBkxHjEuhPhhF/q8Mmj/uG/Ow3IzKIjt+SSgutrdaIPGSHBd83n2Q1cUqjgj K/GaCbwiydH6+MCQFEXlpP59lwEKmcJTWNsu0hIDH/y7EyDjsfRjFpqv0ZD4BBaPkI QkP9XozAxCT1cgNM6oxY1aKlWlYFk8idznDYpmYRDLOmlAKRe04VdlhOqDMGmZ+HPf tse9Xp3pJ0iNSfdmP1M6AhwJC/HcJCsVFxTeDzQd0Movx6EMfMfTgSDi3ijJvUdQUf TsRTY3HqBRGgKjLmeg26WunriDd3aMIkeTfMQ/I72G1r3oEHQv6gm6sQK8+hABXcjW 5P2swCnvBGrKA== 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 mail1.khirnov.net (Postfix) with ESMTPS id 92EF14E14 for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id EE9533A0998 for ; Tue, 24 Sep 2024 09:10:09 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:44 +0200 Message-ID: <20240924071000.11428-3-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 03/13] fftools/ffmpeg_enc: stop using OutputStream in hw_device_setup_for_encode() 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: Ks4eg449GCMz The only variable accessed from it is AVCodecContext, which we can pass directly. Also, this function currently logs into the AVCodecContext, which is wrong. Log to Encoder instead. --- fftools/ffmpeg_enc.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 2e1c7f27c1..c11ec218d7 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -110,34 +110,35 @@ int enc_alloc(Encoder **penc, const AVCodec *codec, return 0; } -static int hw_device_setup_for_encode(OutputStream *ost, AVBufferRef *frames_ref) +static int hw_device_setup_for_encode(Encoder *e, AVCodecContext *enc_ctx, + AVBufferRef *frames_ref) { const AVCodecHWConfig *config; HWDevice *dev = NULL; if (frames_ref && ((AVHWFramesContext*)frames_ref->data)->format == - ost->enc_ctx->pix_fmt) { + enc_ctx->pix_fmt) { // Matching format, will try to use hw_frames_ctx. } else { frames_ref = NULL; } for (int i = 0;; i++) { - config = avcodec_get_hw_config(ost->enc_ctx->codec, i); + config = avcodec_get_hw_config(enc_ctx->codec, i); if (!config) break; if (frames_ref && config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX && (config->pix_fmt == AV_PIX_FMT_NONE || - config->pix_fmt == ost->enc_ctx->pix_fmt)) { - av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using input " + config->pix_fmt == enc_ctx->pix_fmt)) { + av_log(e, AV_LOG_VERBOSE, "Using input " "frames context (format %s) with %s encoder.\n", - av_get_pix_fmt_name(ost->enc_ctx->pix_fmt), - ost->enc_ctx->codec->name); - ost->enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref); - if (!ost->enc_ctx->hw_frames_ctx) + av_get_pix_fmt_name(enc_ctx->pix_fmt), + enc_ctx->codec->name); + enc_ctx->hw_frames_ctx = av_buffer_ref(frames_ref); + if (!enc_ctx->hw_frames_ctx) return AVERROR(ENOMEM); return 0; } @@ -148,11 +149,11 @@ static int hw_device_setup_for_encode(OutputStream *ost, AVBufferRef *frames_ref } if (dev) { - av_log(ost->enc_ctx, AV_LOG_VERBOSE, "Using device %s " + av_log(e, AV_LOG_VERBOSE, "Using device %s " "(type %s) with %s encoder.\n", dev->name, - av_hwdevice_get_type_name(dev->type), ost->enc_ctx->codec->name); - ost->enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref); - if (!ost->enc_ctx->hw_device_ctx) + av_hwdevice_get_type_name(dev->type), enc_ctx->codec->name); + enc_ctx->hw_device_ctx = av_buffer_ref(dev->device_ref); + if (!enc_ctx->hw_device_ctx) return AVERROR(ENOMEM); } else { // No device required, or no device available. @@ -335,7 +336,7 @@ int enc_open(void *opaque, const AVFrame *frame) enc_ctx->flags |= AV_CODEC_FLAG_FRAME_DURATION; - ret = hw_device_setup_for_encode(ost, frame ? frame->hw_frames_ctx : NULL); + ret = hw_device_setup_for_encode(e, enc_ctx, frame ? frame->hw_frames_ctx : NULL); if (ret < 0) { av_log(e, AV_LOG_ERROR, "Encoding hardware device setup failed: %s\n", av_err2str(ret)); From patchwork Tue Sep 24 07:09:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51786 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp173951vqy; Tue, 24 Sep 2024 00:19:18 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXj054aE6YU8ixpo8DYFnbGOxbVD9U5sS9eIMTybcqAyvojq7lzppEzoOUGQ/ETlIpQrQTmnoATLRpc+o0w6Jg3@gmail.com X-Google-Smtp-Source: AGHT+IG9EWVSDOpN/dwiYjDR+OFyb50264lCEoZNfp0OMQG8s35GbB981VFuZ3yDkWZaiUwLoNa3 X-Received: by 2002:a17:907:c899:b0:a7a:a960:99ee with SMTP id a640c23a62f3a-a90d5033daamr1357646466b.32.1727162358323; Tue, 24 Sep 2024 00:19:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162358; cv=none; d=google.com; s=arc-20240605; b=LIeKN4p+eLgKRG7yl7cs8I6ZmV4+zIx//KT/96KtJxuZsOttrKfwGn/I8R7SNp1M2E vLo8A1TaSqTVZhbGcAOc3n6s9FoO3CgYdYCe2jEScrz/COiTHJJVIaFssq/mibCvDmK+ Gj5WccGeZKPBmKldi21v3OJTJAhF6OY+bYkBMw7YQlmyq5nbG6YROVRxunHcCvnNX92i J+Sd/tfemmVW/pIsV+sDIA38TMfcn8ToAeq1kC3afvDh0t4zbvq7BlfpOb6QrgAkXl/A S+6hxTX7OEWOsRFWuly+RpYIR6Q65YOBfBYDuOVMzDVKa+mlQqSAGnNebvZbkshwPhZZ hHyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=V6LtAWUpxbhpY1/8Pp/exgHISZZeEMBjnpGcho3bM28=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=UPblj2yAHJPWs2ONCtqQNDGz3UgeV6KKu1jJb8VpmFoJlRN/Igjja94dOS6CR0vM2k 5okaGfNzCW6PFcB0vbQelKh90oKsMrsmmgzotXCow4lra0QI+ZJr5kRwqLfP1DmhZ7C1 Nkj/bwVaZQKlRhTRmHOgyyz/HmQwj9dSLlO+FX3nP21NIO4eK5ZqowZCC5skCAY9pYZO dtOuWKyqIKMrcLGnk728BoMo7cl2oMqpoO7AKNAJl1J/M3/ad1Lsmyc6YvWqiYPydOz+ meLTq+cSY6qHQk85Pd4robMcUI7d5So86AsZuqicd8SigY8eUZHZ4g8Jzd3pelpHpaqU IxJg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=ieQ8WQY+; 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 a640c23a62f3a-a93930ef373si56019066b.640.2024.09.24.00.19.18; Tue, 24 Sep 2024 00:19:18 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=ieQ8WQY+; 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 555E868DB8F; Tue, 24 Sep 2024 10:10:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 00E6568DA68 for ; Tue, 24 Sep 2024 10:10:22 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=ieQ8WQY+; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 7D91B4E12 for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id o65lOfUMdKzi for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161816; bh=ApDmMqnk79N+qf3rlQ3CnUwCTapWl+2frdI3VG5X3k4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ieQ8WQY+QdgJCOUClnci+dY2PC+Uhzs+veQO87/GvU5xdRQOBEox6y0gYatdU2CJV zDCWRvxKF3lCbD1Tk8fIQybxSrAmPIMGLLX00t1UosmB0wmFqGUGpKSfXBOOh6+NrM gvtuZ46rbkEqgRUyD+/dgEh5TZBq3ZpF2YQhfKhaICqfL7vMkfp73O0l7+CMY8AS8Q FtVvo8UOJ6vqdmSvymxv49kmemnewzA5d0lkvQKv0vfl1tBhnNKT8ZxwFhPq30j6vx Vz5Mj+Y5JX21wX0XiStYtykk+t+AwkDlwS1UIZMcPzwgXXct7MPkChjjpDNqxF5is/ VMJNC/JQQha+A== 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 mail1.khirnov.net (Postfix) with ESMTPS id 9A7374E16 for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 066B53A0F02 for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:45 +0200 Message-ID: <20240924071000.11428-4-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 04/13] fftools/ffmpeg_enc: do not set AVStream timebase directly 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: W0JV8oDLtXvb Instead, pass the encoder context to of_stream_init() and have the muxer take the timebase from there. Note that the muxer can currently access the codec context directly, but that will change in future commits. This is a step towards decoupling encoders from muxers. --- fftools/ffmpeg.h | 3 ++- fftools/ffmpeg_enc.c | 6 +----- fftools/ffmpeg_mux.c | 9 ++++++++- fftools/ffmpeg_mux_init.c | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 122372440f..98080213fd 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -871,7 +871,8 @@ int enc_loopback(Encoder *enc); * * Open the muxer once all the streams have been initialized. */ -int of_stream_init(OutputFile *of, OutputStream *ost); +int of_stream_init(OutputFile *of, OutputStream *ost, + const AVCodecContext *enc_ctx); int of_write_trailer(OutputFile *of); int of_open(const OptionsContext *o, const char *filename, Scheduler *sch); void of_free(OutputFile **pof); diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index c11ec218d7..ba79f6a3fc 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -367,11 +367,7 @@ int enc_open(void *opaque, const AVFrame *frame) return ret; } - // copy timebase while removing common factors - if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0) - ost->st->time_base = av_add_q(ost->enc_ctx->time_base, (AVRational){0, 1}); - - ret = of_stream_init(of, ost); + ret = of_stream_init(of, ost, enc_ctx); if (ret < 0) return ret; diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index 71ff9b45ab..71a771052f 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -608,12 +608,19 @@ static int bsf_init(MuxStream *ms) return 0; } -int of_stream_init(OutputFile *of, OutputStream *ost) +int of_stream_init(OutputFile *of, OutputStream *ost, + const AVCodecContext *enc_ctx) { Muxer *mux = mux_from_of(of); MuxStream *ms = ms_from_ost(ost); int ret; + if (enc_ctx) { + // use upstream time base unless it has been overridden previously + if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0) + ost->st->time_base = av_add_q(enc_ctx->time_base, (AVRational){0, 1}); + } + /* initialize bitstream filters for the output stream * needs to be done here, because the codec id for streamcopy is not * known until now */ diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 1b75430e4e..b2351de177 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -3385,7 +3385,7 @@ int of_open(const OptionsContext *o, const char *filename, Scheduler *sch) OutputStream *ost = of->streams[i]; if (!ost->enc) { - err = of_stream_init(of, ost); + err = of_stream_init(of, ost, NULL); if (err < 0) return err; } From patchwork Tue Sep 24 07:09:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51787 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp173965vqy; Tue, 24 Sep 2024 00:19:21 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXfR3pPQB/2cv0D+20Lvz1N7VrjifXZxF6lgYS8uBdSQBPs0JsL9cG+dhTyrK77L7eudyvHzGHLy9o2qu6YGRL8@gmail.com X-Google-Smtp-Source: AGHT+IHocsL/FKW366745x7WWKuIdFy5ZqS4tSuS9VhhshIRLlvgX2lXz+ujaD4L6zjqV0NLF/Y6 X-Received: by 2002:a05:6512:ea0:b0:530:ea60:7e07 with SMTP id 2adb3069b0e04-536ac33b0e0mr6894246e87.58.1727162360767; Tue, 24 Sep 2024 00:19:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162360; cv=none; d=google.com; s=arc-20240605; b=c+8bjpSDhGKF6nGdMMMU9N+YDN0XSO67fHIRQi4w5UJE4xyt+/XPHK2G4dvgBNtEsu PtJztGiDdCHts4AUCdb4XtsgXl52Vf6IQezEwBKkjyHoNN0ycc2ZA7jChUQQIu63L3U3 ClLB/yNPlG8c+tsSHkG2dNUaD/VMvrzVpk0PP/rcF4srcegyG0WjNu8V/bRaX7P6eHYB FFza+6KXMnR/WOOlW3QJCNUk5eJOOhf+6S108+q05GxpY9x0i+9gUF8omeRo2dsYrprY pri8gWMCiKo1nXdSVvwGXhYRKsSnxl8KuXH6f3l5p2WP4NSElwPcGPehuaEl5fhprmKi 9RHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=5w9XMcK2dLYaUknUKUdpnb6sT5DTy7Gm5B05/Ny0s6A=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=gz99a8665v5o4fwfZ36h8xw6RLKQybUa1oi8Ssbl0K0iTYw2MtLB3qbI6karnnpfBV ZNcpt7K6foSwHeUzkpGi3i118JiqaE8jBTduLWHuCZjrhd3E3pf4y2Mq5lEqx/vGFER/ ylrOVtZIGETWLETkzobAyKtN39kbFZ876Su486mNXJwwj03P+0KeeYkqFO9CXCkWNPZo Wg1UE4xZwbhCVfUMQaz9y7yDW294RouX+zDTvdLxxsMvvtoC03ApR0prmuES4cZv7DiB ku1PJzi8XCYnUAZZvzm4hnR4qVgK27rKA9a6sCuUwRdJ5Ls6rUnLCDz31Z//gWpwINL3 x+eA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=Do1SFQWc; 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 2adb3069b0e04-537a8646623si293998e87.346.2024.09.24.00.19.19; Tue, 24 Sep 2024 00:19:20 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=Do1SFQWc; 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 7BB4A68DB63; Tue, 24 Sep 2024 10:10:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1CB7968DAC2 for ; Tue, 24 Sep 2024 10:10:23 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=Do1SFQWc; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 04EC64E11 for ; Tue, 24 Sep 2024 09:10:19 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id d6C7t2ygwnAA for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161816; bh=zLqI5gcojMd0o5SzftSlPcNH/j5VRlaEE7hgGNyoc3U=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Do1SFQWcvLX8/B3JkXpMzr5HXnLQZUWJ1ZvV5dPHPP+Gqgnjx3pF/FDVUIK711JnY 57IHNLg1uIgXjeGz/RXDcd0j061inQT2eG7rgACMssCzcIWxDWkl3u72jmxEtB24lZ 4+Qu8f9DwQflpF0bwKVE/GhGr7lq1ZkXJDINi2WXqXKof9zG7HpFEMjXbzaNjzKf1q XO4cYMgYTfDGnaccYNqgeTFTcW4mP/Lt0CNvLX2+Wn9osd1LMpenwfXWvBd/oT/C7/ 6Rcipi65hMfM4YI4kjTHNivcdVBbxd946a8tlY/1bVNKKY0DMDyj0ZPb1ET5rqKAvO frwq3PjU2+6FA== 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 mail1.khirnov.net (Postfix) with ESMTPS id 9CDB64E18 for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1241C3A0F41 for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:46 +0200 Message-ID: <20240924071000.11428-5-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 05/13] fftools/ffmpeg_enc: do not set output stream codec parameters directly 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: D9Xg+fKRq1vR Have the muxer code read them out of the encoder context in of_stream_init() instead. OutputStream.par_in no longer needs to be public, so can be moved to MuxStream. This is a step towards decoupling encoders from muxers. --- fftools/ffmpeg.h | 6 ------ fftools/ffmpeg_enc.c | 7 ------- fftools/ffmpeg_mux.c | 13 ++++++++++--- fftools/ffmpeg_mux.h | 6 ++++++ fftools/ffmpeg_mux_init.c | 30 +++++++++++++++++------------- 5 files changed, 33 insertions(+), 29 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 98080213fd..13be7c4872 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -594,12 +594,6 @@ typedef struct OutputStream { int index; /* stream index in the output file */ - /** - * Codec parameters for packets submitted to the muxer (i.e. before - * bitstream filtering, if any). - */ - AVCodecParameters *par_in; - /* input stream that is the source for this output stream; * may be NULL for streams with no well-defined source, e.g. * attachments or outputs from complex filtergraphs */ diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index ba79f6a3fc..796849fdb9 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -360,13 +360,6 @@ int enc_open(void *opaque, const AVFrame *frame) av_log(e, AV_LOG_WARNING, "The bitrate parameter is set too low." " It takes bits/s as argument, not kbits/s\n"); - ret = avcodec_parameters_from_context(ost->par_in, ost->enc_ctx); - if (ret < 0) { - av_log(e, AV_LOG_FATAL, - "Error initializing the output stream codec context.\n"); - return ret; - } - ret = of_stream_init(of, ost, enc_ctx); if (ret < 0) return ret; diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index 71a771052f..ea0bbeed32 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -581,9 +581,9 @@ static int bsf_init(MuxStream *ms) int ret; if (!ctx) - return avcodec_parameters_copy(ost->st->codecpar, ost->par_in); + return avcodec_parameters_copy(ost->st->codecpar, ms->par_in); - ret = avcodec_parameters_copy(ctx->par_in, ost->par_in); + ret = avcodec_parameters_copy(ctx->par_in, ms->par_in); if (ret < 0) return ret; @@ -619,6 +619,13 @@ int of_stream_init(OutputFile *of, OutputStream *ost, // use upstream time base unless it has been overridden previously if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0) ost->st->time_base = av_add_q(enc_ctx->time_base, (AVRational){0, 1}); + + ret = avcodec_parameters_from_context(ms->par_in, enc_ctx); + if (ret < 0) { + av_log(ost, AV_LOG_FATAL, + "Error initializing the output stream codec parameters.\n"); + return ret; + } } /* initialize bitstream filters for the output stream @@ -813,7 +820,7 @@ static void ost_free(OutputStream **post) ost->logfile = NULL; } - avcodec_parameters_free(&ost->par_in); + avcodec_parameters_free(&ms->par_in); av_bsf_free(&ms->bsf_ctx); av_packet_free(&ms->bsf_pkt); diff --git a/fftools/ffmpeg_mux.h b/fftools/ffmpeg_mux.h index 22d728a919..5df718faf0 100644 --- a/fftools/ffmpeg_mux.h +++ b/fftools/ffmpeg_mux.h @@ -36,6 +36,12 @@ typedef struct MuxStream { OutputStream ost; + /** + * Codec parameters for packets submitted to the muxer (i.e. before + * bitstream filtering, if any). + */ + AVCodecParameters *par_in; + // name used for logging char log_name[32]; diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index b2351de177..47d745aa65 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -67,8 +67,9 @@ static int check_opt_bitexact(void *ctx, const AVDictionary *opts, } static int choose_encoder(const OptionsContext *o, AVFormatContext *s, - OutputStream *ost, const AVCodec **enc) + MuxStream *ms, const AVCodec **enc) { + OutputStream *ost = &ms->ost; enum AVMediaType type = ost->type; const char *codec_name = NULL; @@ -90,20 +91,20 @@ static int choose_encoder(const OptionsContext *o, AVFormatContext *s, } if (!codec_name) { - ost->par_in->codec_id = av_guess_codec(s->oformat, NULL, s->url, NULL, ost->type); - *enc = avcodec_find_encoder(ost->par_in->codec_id); + ms->par_in->codec_id = av_guess_codec(s->oformat, NULL, s->url, NULL, ost->type); + *enc = avcodec_find_encoder(ms->par_in->codec_id); if (!*enc) { av_log(ost, AV_LOG_FATAL, "Automatic encoder selection failed " "Default encoder for format %s (codec %s) is " "probably disabled. Please choose an encoder manually.\n", - s->oformat->name, avcodec_get_name(ost->par_in->codec_id)); + s->oformat->name, avcodec_get_name(ms->par_in->codec_id)); return AVERROR_ENCODER_NOT_FOUND; } } else if (strcmp(codec_name, "copy")) { int ret = find_codec(ost, codec_name, ost->type, 1, enc); if (ret < 0) return ret; - ost->par_in->codec_id = (*enc)->id; + ms->par_in->codec_id = (*enc)->id; } return 0; @@ -1029,7 +1030,7 @@ static int streamcopy_init(const Muxer *mux, OutputStream *ost, AVDictionary **e const InputStream *ist = ost->ist; const InputFile *ifile = ist->file; - AVCodecParameters *par = ost->par_in; + AVCodecParameters *par = ms->par_in; uint32_t codec_tag = par->codec_tag; AVCodecContext *codec_ctx = NULL; @@ -1198,8 +1199,8 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, } } - ost->par_in = avcodec_parameters_alloc(); - if (!ost->par_in) + ms->par_in = avcodec_parameters_alloc(); + if (!ms->par_in) return AVERROR(ENOMEM); ms->last_mux_dts = AV_NOPTS_VALUE; @@ -1207,10 +1208,10 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, ost->st = st; ost->ist = ist; ost->kf.ref_pts = AV_NOPTS_VALUE; - ost->par_in->codec_type = type; + ms->par_in->codec_type = type; st->codecpar->codec_type = type; - ret = choose_encoder(o, oc, ost, &enc); + ret = choose_encoder(o, oc, ms, &enc); if (ret < 0) { av_log(ost, AV_LOG_FATAL, "Error selecting an encoder\n"); return ret; @@ -1447,7 +1448,7 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, tag = AV_RL32(buf); } ost->st->codecpar->codec_tag = tag; - ost->par_in->codec_tag = tag; + ms->par_in->codec_tag = tag; if (ost->enc_ctx) ost->enc_ctx->codec_tag = tag; } @@ -1799,6 +1800,7 @@ loop_end: static int of_add_attachments(Muxer *mux, const OptionsContext *o) { + MuxStream *ms; OutputStream *ost; int err; @@ -1866,9 +1868,11 @@ read_fail: return err; } + ms = ms_from_ost(ost); + ost->attachment_filename = attachment_filename; - ost->par_in->extradata = attachment; - ost->par_in->extradata_size = len; + ms->par_in->extradata = attachment; + ms->par_in->extradata_size = len; p = strrchr(o->attachments[i], '/'); av_dict_set(&ost->st->metadata, "filename", (p && *p) ? p + 1 : o->attachments[i], AV_DICT_DONT_OVERWRITE); From patchwork Tue Sep 24 07:09:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51782 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp170813vqy; Tue, 24 Sep 2024 00:10:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUNFPoevRBp531vdY2k4HTb+uQ/ab+6CNzT7JebUCVhmE7BElqg7a3F0KIgQpx/g+lW1nV1Bkne1HJ6bZNQ7uUh@gmail.com X-Google-Smtp-Source: AGHT+IGW8127zh3xOw6ovpdIXWAnV6w8FDIGmvQRkiAJ8C3/2V1KHqbPJKoOEFBjjZfSmqHM+FlL X-Received: by 2002:a05:6402:3509:b0:5c5:cb7f:e56a with SMTP id 4fb4d7f45d1cf-5c5cdfa0523mr2126186a12.1.1727161855077; Tue, 24 Sep 2024 00:10:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727161855; cv=none; d=google.com; s=arc-20240605; b=O93Sc4iODlAFS20QyXrwgAdMebNMUzO1P3jWRI7p7b+/lewwrcNt53SE3J2lGW+/cp F+InjJimPaRIl6WgJpqU9+vVNRyIoVgTNfZRsfpw+d6AENo+IL9Z1aW6WyMEyN8BRXeQ 8MTNzY6OyCrZo5K598aIRrYVQSJqi6uCPK/WB5reCrekDdkFAgxGoYE1XrjHDXqYWRPm t/v0RUvn1qcwo1bkJ4zT1MZRnSK4ibxlD9in7ArIUeJiiKxAceSYf9p6dIcBnKR9Nw94 6uhf2F29e9JX/N/2KYNpMI/ON2DEXeAzJhlISuZ0Q9PbvPo/X2qUNaEi4R1ZR2soWtto /lUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=aGW37XagVlXZqlV6GiSqxYKMByU48r1LjyHuclQPnfA=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=WMpTNLfELyHIVlvTTM04tXJZyXioLtIz1qYYLj+r3HdWuOX995/0muVuZfB4TYBzbE 5uZZR7XKYPgWz+kTR86Vb8OJ/1BuRD2u3gNgrnIpl4TS7CzO5qSjpmzOmX3rvsK7n0EQ GB6/0FJ6ivXaOGWrskZtcdg4sA87YSyZyFZy1AY8dWrUAp8+UEHlTVhbVByTlyH9DMr7 ME96+L6Uwju0Elnzp4dXH2LoEoPpy+pH7piNv8xA09iGpaNsE2vj4ECB/7xnM5h8Nu7c p78KE2AUSFGa3rTVvPKls4GuB0tcCUBpKGX+cFR8jbwsIGvZPke10NfBLS5aQRmZGY5b Kq/Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=EdtNUm63; 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 4fb4d7f45d1cf-5c5cf48a9a2si593547a12.76.2024.09.24.00.10.54; Tue, 24 Sep 2024 00:10:55 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=EdtNUm63; 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 6882C68DAF5; Tue, 24 Sep 2024 10:10:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5FC0968D799 for ; Tue, 24 Sep 2024 10:10:17 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=EdtNUm63; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id B031BEE8 for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id ueHfkSNZ4_o5 for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=jGC2BmdC4Kdmp5jsXfBwmcMtC/QxiE7wuAMl56K/Yjs=; h=From:To:Subject:Date:In-Reply-To:References:From; b=EdtNUm63xPU7hAtAwFmCKTYXju9DRJ4rj24KjQ7xuQ3nk17o/cqxlW5tXYUOy0E3Y g32nhWzzaozx6edd9DZXyWNmVnMXnuJy+0gz6t9dnED+uWw7AL+Xb8/8/BKJ1jd4Op LyfxqaFfHUXu9fcMIrQkNJl7y2FaMzD2s5XkMpYk4nxWa/GEC4mSlAoSvSOSPAIhVu bu9Cp+oCf+FGyxqM/djY/zwQ5QgBqzc631lVD+pdQUiAjgVZANCdo9kaIxynLDpPuZ WEsapZXXgs7REeWfdfUtsYCLlqT5670DCdQuxKDhZz6yGECOE93qhuq9PQueVp5DdH /oEMrhvDdE1eQ== 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 mail1.khirnov.net (Postfix) with ESMTPS id 58BCC4DEE for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 1DE4E3A0F6F for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:47 +0200 Message-ID: <20240924071000.11428-6-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 06/13] fftools/ffmpeg_enc: remove unnecessary pointer references from enc_open() 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: GAsUmm1dZmRP --- fftools/ffmpeg_enc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 796849fdb9..499d6ea1f3 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -343,7 +343,7 @@ int enc_open(void *opaque, const AVFrame *frame) return ret; } - if ((ret = avcodec_open2(ost->enc_ctx, enc, NULL)) < 0) { + if ((ret = avcodec_open2(enc_ctx, enc, NULL)) < 0) { if (ret != AVERROR_EXPERIMENTAL) av_log(e, AV_LOG_ERROR, "Error while opening encoder - maybe " "incorrect parameters such as bit_rate, rate, width or height.\n"); @@ -352,11 +352,11 @@ int enc_open(void *opaque, const AVFrame *frame) e->opened = 1; - if (ost->enc_ctx->frame_size) - frame_samples = ost->enc_ctx->frame_size; + if (enc_ctx->frame_size) + frame_samples = enc_ctx->frame_size; - if (ost->enc_ctx->bit_rate && ost->enc_ctx->bit_rate < 1000 && - ost->enc_ctx->codec_id != AV_CODEC_ID_CODEC2 /* don't complain about 700 bit/s modes */) + if (enc_ctx->bit_rate && enc_ctx->bit_rate < 1000 && + enc_ctx->codec_id != AV_CODEC_ID_CODEC2 /* don't complain about 700 bit/s modes */) av_log(e, AV_LOG_WARNING, "The bitrate parameter is set too low." " It takes bits/s as argument, not kbits/s\n"); From patchwork Tue Sep 24 07:09:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51791 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp184607vqy; Tue, 24 Sep 2024 00:49:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWeTRyfMpR58OrlOip4JTs1eZCZsOFBijHLF/PTwbLO23vShKcmgL7usz1fNx1Wvvyce32ec6QaIYX8tfWNqJLG@gmail.com X-Google-Smtp-Source: AGHT+IFM2raICpGNNdvfrhtJKi41kUp1PXbZBQbvFIbIcdXP7Uw7OjAPbhofFewTX5RRPuBB+AYx X-Received: by 2002:a17:906:dc8b:b0:a91:158b:1c23 with SMTP id a640c23a62f3a-a92c482b102mr234878966b.9.1727164159233; Tue, 24 Sep 2024 00:49:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727164159; cv=none; d=google.com; s=arc-20240605; b=f4md9aOtoh0sBLyDe5Vr9XWw+Yf2MDElEs5r0HzR6dwRLbcUAnJd+Oyuz3VWXzeiTa DJEs9qL/8aUjw/e7sv5bYUd1ua+KaFGXH/hxCQFF4LPBDcUrkFaa2XMqcAhYzx3Tdg7n YjvNc3QvmT9fdAjZQKehQPUX1KUFqZ8N+HHADQB4d5P4sisz5t1tCKjB+1+3jMMbnSUn xsry5OQWOSPB5+4i77L87sf1uQTrf855oTXaD0wLWJ/SIPzrchf7adMFtBdLS2D1EUpP 2UdodztfUiY1FWn977xNM9a68C2R567Xl8EKhVxtnq27SbCKIAFSakRooEyfCZDNH8Fc zOjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=kHgVVvSzWY9cSguPsFDlZ/q2sNCG+p8gvZzESkbp6XA=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Ho1dkho0CUwqdcttJvzPghY5P/I0Li7JasnQ/4uM67b+XT0UFCYBiCelM0k7Bg5AKY 3HS0nyfJ8xWThqdCUe1jCfBEP+cIgFW1tyJ1k8j+cNXHmyWoGeFrJKfDhhQs39SAjph7 9MPTKDPkbyzCbVATjpGezrTTBFd84SjE+lbeY1Q8S319IJ8Rkr9QAcNTCuTsNeT7F5xH aHwACJSxz7H3qckgLsAvfhEaSQd8BEH2fIbSJtO7dOzZbQc2Bw70A6aDayhwwnkfeUz4 j3KAQEvNk9Dno2msPmr6KGCgnNa2xL9pTu1VvyCQKGTb1m2CrfAv+fPA61iMgMpzequ2 dhaQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TdC9VS7Z; 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 a640c23a62f3a-a939315ab26si59452366b.911.2024.09.24.00.49.18; Tue, 24 Sep 2024 00:49:19 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TdC9VS7Z; 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 CE6EE68DB73; Tue, 24 Sep 2024 10:10:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C5E7B68D4E7 for ; Tue, 24 Sep 2024 10:10:17 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=TdC9VS7Z; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 533154E0A for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id jLJOdpDCLXYJ for ; Tue, 24 Sep 2024 09:10:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=gule8/RgZ+DgkOC+Se/RttUmvv6BxchxMAKjmovYKB4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=TdC9VS7Zz2GLrpi9Tjgm6qCIOmQchxvDdoxw0ikXuOx37on6OKB9ARQa08EoxvhIe i7sQpTuf5moV1hOWyy4CW/cQOw+O1cLb0t6GGDoLIJOltXOwetQ7nQyiiysk2hsejI batF96DEm7Y0/VutIa38g3MLCdtvPBijtR+0ZVNqV+dDjK7ls592tSzQihDjV4vFEB 74J7nBBqoLN+Gk0ThPCQ95at+lOmjOM7wss+m9u/5hfvBGxJTlzEP9RVwJwUSPKq2Z TBst5w8NJ2LDGA7jpPKjTwSsHA8QKIWS2qM4W3TwpldSPfn1zcbhz3D7IpycWtSfPE smqCMosc/FL8Q== 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 mail1.khirnov.net (Postfix) with ESMTPS id 632AF4E02 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 29C033A164C for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:48 +0200 Message-ID: <20240924071000.11428-7-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/13] fftools/ffmpeg_enc: move set_encoder_id() to ffmpeg_mux_init 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: 9CLy2JYi1tjK This code uses no encoder properties or state besides its name, and is mostly muxer logic, and thus belongs more properly into the muxer. The results of several test change due to different metadata tag order (the "encoder" tag is now set first). --- fftools/ffmpeg_enc.c | 29 ----------------- fftools/ffmpeg_mux_init.c | 31 +++++++++++++++++-- tests/ref/fate/ffprobe_compact | 4 +-- tests/ref/fate/ffprobe_csv | 4 +-- tests/ref/fate/ffprobe_default | 4 +-- tests/ref/fate/ffprobe_flat | 4 +-- tests/ref/fate/ffprobe_ini | 4 +-- tests/ref/fate/ffprobe_json | 8 ++--- tests/ref/fate/ffprobe_xml | 4 +-- tests/ref/fate/ffprobe_xsd | 4 +-- tests/ref/fate/matroska-encoding-delay | 2 +- .../fate/matroska-mastering-display-metadata | 2 +- tests/ref/fate/rgb24-mkv | 2 +- 13 files changed, 49 insertions(+), 53 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 499d6ea1f3..1be0a37353 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -161,31 +161,6 @@ static int hw_device_setup_for_encode(Encoder *e, AVCodecContext *enc_ctx, return 0; } -static int set_encoder_id(OutputFile *of, OutputStream *ost) -{ - const char *cname = ost->enc_ctx->codec->name; - uint8_t *encoder_string; - int encoder_string_len; - - if (av_dict_get(ost->st->metadata, "encoder", NULL, 0)) - return 0; - - encoder_string_len = sizeof(LIBAVCODEC_IDENT) + strlen(cname) + 2; - encoder_string = av_mallocz(encoder_string_len); - if (!encoder_string) - return AVERROR(ENOMEM); - - if (!of->bitexact && !ost->bitexact) - av_strlcpy(encoder_string, LIBAVCODEC_IDENT " ", encoder_string_len); - else - av_strlcpy(encoder_string, "Lavc ", encoder_string_len); - av_strlcat(encoder_string, cname, encoder_string_len); - av_dict_set(&ost->st->metadata, "encoder", encoder_string, - AV_DICT_DONT_STRDUP_VAL | AV_DICT_DONT_OVERWRITE); - - return 0; -} - int enc_open(void *opaque, const AVFrame *frame) { OutputStream *ost = opaque; @@ -224,10 +199,6 @@ int enc_open(void *opaque, const AVFrame *frame) } } - ret = set_encoder_id(of, ost); - if (ret < 0) - return ret; - if (ist) dec = ist->decoder; diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 47d745aa65..bf2c0b8f67 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1140,6 +1140,28 @@ fail: return ret; } +static int set_encoder_id(OutputStream *ost, const AVCodec *codec) +{ + const char *cname = codec->name; + uint8_t *encoder_string; + int encoder_string_len; + + encoder_string_len = sizeof(LIBAVCODEC_IDENT) + strlen(cname) + 2; + encoder_string = av_mallocz(encoder_string_len); + if (!encoder_string) + return AVERROR(ENOMEM); + + if (!ost->file->bitexact && !ost->bitexact) + av_strlcpy(encoder_string, LIBAVCODEC_IDENT " ", encoder_string_len); + else + av_strlcpy(encoder_string, "Lavc ", encoder_string_len); + av_strlcat(encoder_string, cname, encoder_string_len); + av_dict_set(&ost->st->metadata, "encoder", encoder_string, + AV_DICT_DONT_STRDUP_VAL | AV_DICT_DONT_OVERWRITE); + + return 0; +} + static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, InputStream *ist, OutputFilter *ofilter, const ViewSpecifier *vs, OutputStream **post) @@ -1406,6 +1428,12 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, ost->bitexact = !!(ost->enc_ctx->flags & AV_CODEC_FLAG_BITEXACT); } + if (enc) { + ret = set_encoder_id(ost, enc); + if (ret < 0) + return ret; + } + opt_match_per_stream_str(ost, &o->time_bases, oc, st, &time_base); if (time_base) { AVRational q; @@ -2981,9 +3009,6 @@ static int copy_meta(Muxer *mux, const OptionsContext *o) if (!ost->ist) /* this is true e.g. for attached files */ continue; av_dict_copy(&ost->st->metadata, ost->ist->st->metadata, AV_DICT_DONT_OVERWRITE); - if (ost->enc_ctx) { - av_dict_set(&ost->st->metadata, "encoder", NULL, 0); - } } return 0; diff --git a/tests/ref/fate/ffprobe_compact b/tests/ref/fate/ffprobe_compact index 25632fd179..89069792b8 100644 --- a/tests/ref/fate/ffprobe_compact +++ b/tests/ref/fate/ffprobe_compact @@ -26,7 +26,7 @@ packet|codec_type=video|stream_index=1|pts=6144|pts_time=0.120000|dts=6144|dts_t frame|media_type=video|stream_index=1|key_frame=1|pts=6144|pts_time=0.120000|pkt_dts=6144|pkt_dts_time=0.120000|best_effort_timestamp=6144|best_effort_timestamp_time=0.120000|duration=2048|duration_time=0.040000|pkt_pos=793142|pkt_size=230400|width=320|height=240|crop_top=0|crop_bottom=0|crop_left=0|crop_right=0|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|interlaced_frame=0|top_field_first=0|repeat_pict=0|color_range=unknown|color_space=unknown|color_primaries=unknown|color_transfer=unknown|chroma_location=unspecified packet|codec_type=video|stream_index=2|pts=6144|pts_time=0.120000|dts=6144|dts_time=0.120000|duration=2048|duration_time=0.040000|size=30000|pos=1023566|flags=K__ frame|media_type=video|stream_index=2|key_frame=1|pts=6144|pts_time=0.120000|pkt_dts=6144|pkt_dts_time=0.120000|best_effort_timestamp=6144|best_effort_timestamp_time=0.120000|duration=2048|duration_time=0.040000|pkt_pos=1023566|pkt_size=30000|width=100|height=100|crop_top=0|crop_bottom=0|crop_left=0|crop_right=0|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|interlaced_frame=0|top_field_first=0|repeat_pict=0|color_range=unknown|color_space=unknown|color_primaries=unknown|color_transfer=unknown|chroma_location=unspecified -stream|index=0|codec_name=pcm_s16le|profile=unknown|codec_type=audio|codec_tag_string=PSD[16]|codec_tag=0x10445350|sample_fmt=s16|sample_rate=44100|channels=1|channel_layout=unknown|bits_per_sample=16|initial_padding=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=705600|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=6|nb_read_packets=6|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:E=mc²|tag:encoder=Lavc pcm_s16le -stream|index=1|codec_name=rawvideo|profile=unknown|codec_type=video|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=320|height=240|coded_width=320|coded_height=240|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=4:3|pix_fmt=rgb24|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:title=foobar|tag:duration_ts=field-and-tags-conflict-attempt|tag:encoder=Lavc rawvideo +stream|index=0|codec_name=pcm_s16le|profile=unknown|codec_type=audio|codec_tag_string=PSD[16]|codec_tag=0x10445350|sample_fmt=s16|sample_rate=44100|channels=1|channel_layout=unknown|bits_per_sample=16|initial_padding=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=705600|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=6|nb_read_packets=6|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:encoder=Lavc pcm_s16le|tag:E=mc² +stream|index=1|codec_name=rawvideo|profile=unknown|codec_type=video|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=320|height=240|coded_width=320|coded_height=240|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=4:3|pix_fmt=rgb24|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:encoder=Lavc rawvideo|tag:title=foobar|tag:duration_ts=field-and-tags-conflict-attempt stream|index=2|codec_name=rawvideo|profile=unknown|codec_type=video|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=100|height=100|coded_width=100|coded_height=100|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=1:1|pix_fmt=rgb24|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:encoder=Lavc rawvideo format|filename=tests/data/ffprobe-test.nut|nb_streams=3|nb_programs=0|nb_stream_groups=0|format_name=nut|start_time=0.000000|duration=0.120000|size=1053646|bit_rate=70243066|probe_score=100|tag:title=ffprobe test file|tag:comment='A comment with CSV, XML & JSON special chars': |tag:comment2=I ♥ Üñîçød€ diff --git a/tests/ref/fate/ffprobe_csv b/tests/ref/fate/ffprobe_csv index defe72d4c4..8eb267fe22 100644 --- a/tests/ref/fate/ffprobe_csv +++ b/tests/ref/fate/ffprobe_csv @@ -26,7 +26,7 @@ packet,video,1,6144,0.120000,6144,0.120000,2048,0.040000,230400,793142,K__ frame,video,1,1,6144,0.120000,6144,0.120000,6144,0.120000,2048,0.040000,793142,230400,320,240,0,0,0,0,rgb24,1:1,I,0,0,0,unknown,unknown,unknown,unknown,unspecified packet,video,2,6144,0.120000,6144,0.120000,2048,0.040000,30000,1023566,K__ frame,video,2,1,6144,0.120000,6144,0.120000,6144,0.120000,2048,0.040000,1023566,30000,100,100,0,0,0,0,rgb24,1:1,I,0,0,0,unknown,unknown,unknown,unknown,unspecified -stream,0,pcm_s16le,unknown,audio,PSD[16],0x10445350,s16,44100,1,unknown,16,0,N/A,0/0,0/0,1/44100,0,0.000000,N/A,N/A,705600,N/A,N/A,N/A,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,mc²,Lavc pcm_s16le -stream,1,rawvideo,unknown,video,RGB[24],0x18424752,320,240,320,240,0,0,0,1:1,4:3,rgb24,-99,unknown,unknown,unknown,unknown,unspecified,unknown,1,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,foobar,field-and-tags-conflict-attempt,Lavc rawvideo +stream,0,pcm_s16le,unknown,audio,PSD[16],0x10445350,s16,44100,1,unknown,16,0,N/A,0/0,0/0,1/44100,0,0.000000,N/A,N/A,705600,N/A,N/A,N/A,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,Lavc pcm_s16le,mc² +stream,1,rawvideo,unknown,video,RGB[24],0x18424752,320,240,320,240,0,0,0,1:1,4:3,rgb24,-99,unknown,unknown,unknown,unknown,unspecified,unknown,1,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,Lavc rawvideo,foobar,field-and-tags-conflict-attempt stream,2,rawvideo,unknown,video,RGB[24],0x18424752,100,100,100,100,0,0,0,1:1,1:1,rgb24,-99,unknown,unknown,unknown,unknown,unspecified,unknown,1,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,Lavc rawvideo format,tests/data/ffprobe-test.nut,3,0,0,nut,0.000000,0.120000,1053646,70243066,100,ffprobe test file,"'A comment with CSV, XML & JSON special chars': ",I ♥ Üñîçød€ diff --git a/tests/ref/fate/ffprobe_default b/tests/ref/fate/ffprobe_default index ac55749295..6596a06b0c 100644 --- a/tests/ref/fate/ffprobe_default +++ b/tests/ref/fate/ffprobe_default @@ -596,8 +596,8 @@ DISPOSITION:metadata=0 DISPOSITION:dependent=0 DISPOSITION:still_image=0 DISPOSITION:multilayer=0 -TAG:E=mc² TAG:encoder=Lavc pcm_s16le +TAG:E=mc² [/STREAM] [STREAM] index=1 @@ -657,9 +657,9 @@ DISPOSITION:metadata=0 DISPOSITION:dependent=0 DISPOSITION:still_image=0 DISPOSITION:multilayer=0 +TAG:encoder=Lavc rawvideo TAG:title=foobar TAG:duration_ts=field-and-tags-conflict-attempt -TAG:encoder=Lavc rawvideo [/STREAM] [STREAM] index=2 diff --git a/tests/ref/fate/ffprobe_flat b/tests/ref/fate/ffprobe_flat index e1aefe6afb..110b06e0ea 100644 --- a/tests/ref/fate/ffprobe_flat +++ b/tests/ref/fate/ffprobe_flat @@ -539,8 +539,8 @@ streams.stream.0.disposition.metadata=0 streams.stream.0.disposition.dependent=0 streams.stream.0.disposition.still_image=0 streams.stream.0.disposition.multilayer=0 -streams.stream.0.tags.E="mc²" streams.stream.0.tags.encoder="Lavc pcm_s16le" +streams.stream.0.tags.E="mc²" streams.stream.1.index=1 streams.stream.1.codec_name="rawvideo" streams.stream.1.profile="unknown" @@ -598,9 +598,9 @@ streams.stream.1.disposition.metadata=0 streams.stream.1.disposition.dependent=0 streams.stream.1.disposition.still_image=0 streams.stream.1.disposition.multilayer=0 +streams.stream.1.tags.encoder="Lavc rawvideo" streams.stream.1.tags.title="foobar" streams.stream.1.tags.duration_ts="field-and-tags-conflict-attempt" -streams.stream.1.tags.encoder="Lavc rawvideo" streams.stream.2.index=2 streams.stream.2.codec_name="rawvideo" streams.stream.2.profile="unknown" diff --git a/tests/ref/fate/ffprobe_ini b/tests/ref/fate/ffprobe_ini index 4d046539d6..9ab4df9ddb 100644 --- a/tests/ref/fate/ffprobe_ini +++ b/tests/ref/fate/ffprobe_ini @@ -602,8 +602,8 @@ still_image=0 multilayer=0 [streams.stream.0.tags] -E=mc² encoder=Lavc pcm_s16le +E=mc² [streams.stream.1] index=1 @@ -667,9 +667,9 @@ still_image=0 multilayer=0 [streams.stream.1.tags] +encoder=Lavc rawvideo title=foobar duration_ts=field-and-tags-conflict-attempt -encoder=Lavc rawvideo [streams.stream.2] index=2 diff --git a/tests/ref/fate/ffprobe_json b/tests/ref/fate/ffprobe_json index 5583063eb4..9d497517fe 100644 --- a/tests/ref/fate/ffprobe_json +++ b/tests/ref/fate/ffprobe_json @@ -577,8 +577,8 @@ "multilayer": 0 }, "tags": { - "E": "mc²", - "encoder": "Lavc pcm_s16le" + "encoder": "Lavc pcm_s16le", + "E": "mc²" } }, { @@ -628,9 +628,9 @@ "multilayer": 0 }, "tags": { + "encoder": "Lavc rawvideo", "title": "foobar", - "duration_ts": "field-and-tags-conflict-attempt", - "encoder": "Lavc rawvideo" + "duration_ts": "field-and-tags-conflict-attempt" } }, { diff --git a/tests/ref/fate/ffprobe_xml b/tests/ref/fate/ffprobe_xml index 3b41121902..c0d41e6f20 100644 --- a/tests/ref/fate/ffprobe_xml +++ b/tests/ref/fate/ffprobe_xml @@ -35,16 +35,16 @@ - + + - diff --git a/tests/ref/fate/ffprobe_xsd b/tests/ref/fate/ffprobe_xsd index d5eb0a3a46..887f3ea1c6 100644 --- a/tests/ref/fate/ffprobe_xsd +++ b/tests/ref/fate/ffprobe_xsd @@ -35,16 +35,16 @@ - + + - diff --git a/tests/ref/fate/matroska-encoding-delay b/tests/ref/fate/matroska-encoding-delay index b828dec2e6..cfa1675b94 100644 --- a/tests/ref/fate/matroska-encoding-delay +++ b/tests/ref/fate/matroska-encoding-delay @@ -1,4 +1,4 @@ -604531e6d08cb35b2f3eec838ac45b80 *tests/data/fate/matroska-encoding-delay.matroska +ece637ed28526724c88f5c69b8bf7d6f *tests/data/fate/matroska-encoding-delay.matroska 961252 tests/data/fate/matroska-encoding-delay.matroska #extradata 0: 22, 0x32ea0490 #tb 0: 1/1000 diff --git a/tests/ref/fate/matroska-mastering-display-metadata b/tests/ref/fate/matroska-mastering-display-metadata index 53f84c1793..91ce6a0558 100644 --- a/tests/ref/fate/matroska-mastering-display-metadata +++ b/tests/ref/fate/matroska-mastering-display-metadata @@ -1,4 +1,4 @@ -9d0fb8123a2e90e85153428a91d1ee9d *tests/data/fate/matroska-mastering-display-metadata.matroska +ad5e3c4e338599c81ef7d0f9ae25f871 *tests/data/fate/matroska-mastering-display-metadata.matroska 1669589 tests/data/fate/matroska-mastering-display-metadata.matroska #extradata 0: 4, 0x040901a3 #extradata 3: 200, 0x506463a8 diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index 1cbed136dd..5f4cb78318 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,4 +1,4 @@ -7d767e8238c674ecfa80458cb281c09e *tests/data/fate/rgb24-mkv.matroska +0013b260aa50b70d1a00d9770581a177 *tests/data/fate/rgb24-mkv.matroska 58236 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video From patchwork Tue Sep 24 07:09:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51783 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp170881vqy; Tue, 24 Sep 2024 00:11:05 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWFoe1v97h3uDBWi8WP55A5MhgXfhJHFCqcWB2SEmSMeOpRCY51GkwOQPn9TYKVhmpq5PCNxmrSwv8GoZ0Kscdl@gmail.com X-Google-Smtp-Source: AGHT+IGfjCvA08zkwoDmHoPW/bA+l9TIIubtL7UKv1lgyYZKUOfWvkjK9kDXcChx+eNH3WF5kHJ4 X-Received: by 2002:a17:907:e93:b0:a8d:2624:1a87 with SMTP id a640c23a62f3a-a93910ef671mr51042266b.14.1727161865432; Tue, 24 Sep 2024 00:11:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727161865; cv=none; d=google.com; s=arc-20240605; b=gFh80T11u+GRpHS2IAVqu3mS1KO8+mCHfB5erJ7/AQyhuzU/wr/5TDgmGanL2Xa+gO fYP6r7U6yD14fyhLz7PtLozP89jLOCqQ/RzAkhhtGzQRqiZDzhNKeZyhQcqyx4wspROj OHBtWTgYmeacRfUeCQ07vWTbzkgnti3Bls91MCrM0NwdtsfGMiT6dZJV0vqvjPzRdQ3a sw6qYVT6fioHksQ3Mpe2zeN6LnIOLkCjbXsbUC6pvm/8/v55UFxRVsTL1tw/U3H7gaiU gfBHHJNGqgrGUzSqlory6j3AQFAI7I704sBkr+d0mQzKxMXar3Gy/OtcV0xVdbZaFKws jGNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=K6BTBtXG7FH9x0VVRtpA/68y38JutHmCG6g6Ddz7Yzo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=K6/hFzr52QuoHq5nYN8E/ksAE+4w9rbiA/Mu7CyOwv305jT3mVhoET/ycOLDvI5vs1 mu/Rpapk/m077VLmiAX0m/GxH2R55J/bFdxVHO0L6rLoQUDxVjAEjbf5iLheD5MPE18/ UfPaeE7I8I593u0ti7Pfk0v4GSans6zRdLo6s3B3PBxrejaN7XngWsa1Nlu0pYWrMtfj P3d/vA/8I6mDvJisR6ngK7sZbq1qdxEPwtnqVdaFfM/tMaLFrS3gXLr7mirPvpgTRsYV 0eH2PwGpm1qSsrCYNlmegfIhWZ2IhPVnsmTVq8946PmDPzTH7q8mTUvKSMxcNOTwJzuj 9TXA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TJp4W0Yu; 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 a640c23a62f3a-a93930ec21bsi58228066b.554.2024.09.24.00.11.04; Tue, 24 Sep 2024 00:11:05 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=TJp4W0Yu; 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 A94A168DB45; Tue, 24 Sep 2024 10:10:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AC12468DA4A for ; Tue, 24 Sep 2024 10:10:17 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=TJp4W0Yu; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 4F0134DE2 for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id kAKtNCzeF29t for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=/3lsWZPOav4GPTc1WU3KjtdNmv/npDLm4zdQxCcphSU=; h=From:To:Subject:Date:In-Reply-To:References:From; b=TJp4W0Yu8fJN/uFuhgRKse3YmexXZ6nZwI0eOulfP59ATTjW6aikOCdG4Nm/qmUr/ eQMHaFY8Dc8/X0Dxc/mOZV1SRJvphrRaFuK7SWtGxAJuUm4k/hCTYu1cVvjrU0IZah THMcxypzY5hDqgN95hOKhT/6bUJ5LWlGAyD7jjNNwlaVElWTdqK9D8w6klGTmKH86L ZwdYWENm59Jeb8pZxuukRoFXo5r/80YKYCj7uEDxL6n9w6Xa3fUn60a3T+SVQaibRA HhBTdRqaTmgffS4bUHaqBHXAIdVRMcORnPz6LcX1nUJQb4PdGMpFHMtRrr8U0qpzZ2 DpsqRGUQZZ1GA== 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 mail1.khirnov.net (Postfix) with ESMTPS id 6F12D4E09 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 356703A17BA for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:49 +0200 Message-ID: <20240924071000.11428-8-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 08/13] fftools/ffmpeg_enc: don't write frame rate/SAR to AVStream directly 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: 5eBMy3TZyq9y Have the muxer code read them out of the encoder context in of_stream_init() instead. This is a step towards decoupling encoders from muxers. --- fftools/ffmpeg_enc.c | 3 +-- fftools/ffmpeg_mux.c | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 1be0a37353..4b3efb8db1 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -206,7 +206,6 @@ int enc_open(void *opaque, const AVFrame *frame) if (ost->type == AVMEDIA_TYPE_AUDIO || ost->type == AVMEDIA_TYPE_VIDEO) { enc_ctx->time_base = frame->time_base; enc_ctx->framerate = fd->frame_rate_filter; - ost->st->avg_frame_rate = fd->frame_rate_filter; } switch (enc_ctx->codec_type) { @@ -233,7 +232,7 @@ int enc_open(void *opaque, const AVFrame *frame) frame->height > 0); enc_ctx->width = frame->width; enc_ctx->height = frame->height; - enc_ctx->sample_aspect_ratio = ost->st->sample_aspect_ratio = + enc_ctx->sample_aspect_ratio = ost->frame_aspect_ratio.num ? // overridden by the -aspect cli option av_mul_q(ost->frame_aspect_ratio, (AVRational){ enc_ctx->height, enc_ctx->width }) : frame->sample_aspect_ratio; diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index ea0bbeed32..d38f1ec317 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -620,6 +620,9 @@ int of_stream_init(OutputFile *of, OutputStream *ost, if (ost->st->time_base.num <= 0 || ost->st->time_base.den <= 0) ost->st->time_base = av_add_q(enc_ctx->time_base, (AVRational){0, 1}); + ost->st->avg_frame_rate = enc_ctx->framerate; + ost->st->sample_aspect_ratio = enc_ctx->sample_aspect_ratio; + ret = avcodec_parameters_from_context(ms->par_in, enc_ctx); if (ret < 0) { av_log(ost, AV_LOG_FATAL, From patchwork Tue Sep 24 07:09:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51790 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp174027vqy; Tue, 24 Sep 2024 00:19:28 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUbEOQqgSO+odIjI1qZlfiKXwm7e2Vt+5NKZDucNk6f6A3kJ9Jh0OTqw94LPuuwWVRVB/lGnuKhXgzMrQsxShXA@gmail.com X-Google-Smtp-Source: AGHT+IHU+Gk9cjLHbc8Z6ucbeZN2BMUc5F7YttMwkh3Wx9wxsIQ2PN7p539Lveg2e8RSkkqmYjVE X-Received: by 2002:a17:906:bc08:b0:a7a:a892:8e05 with SMTP id a640c23a62f3a-a90d56bcc1cmr1414284766b.33.1727162368121; Tue, 24 Sep 2024 00:19:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162368; cv=none; d=google.com; s=arc-20240605; b=JaHAGZLIX1tceX+N8eYon8UQaF5uahPTJOvqBLxPHWiiiavEUsvEu5+BWChQGbXoN5 FZnOo/0FI7vyqSg9/tOyQwyrCyR91qZLROvFBXq50Ctyi3G4FhrFjNlTvkhmKmnbpkYU yy+YTFjZUJbA6fFNX7Cleir+p/a8i2TtcShYMKOnOCc/kJANwYGnD6lgR5Df41Hqh79g yln+EmB2cZNeAiq46R65tW7qO3tcRpyleUpmMVq8w9411qvvlIYva2QqUYrOS1UPLoNA FES6Lah4fNR7t83mwaPXkJscshx8tlGyWMUkcwl5isAjykhOOEVZRW9nkj5G8FuzEBfv R+zw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=q1oOEHZspqNQEcFeEKEDQzgcUwTIysGQkTSFWFA/ee4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=GgOikNKTDgCWSTE2wcM+QQJnUBv65JquozXXvkFWWjoku5usoFwUo2bi0N2TnUZe2I QdB8D3SAfq0fM4XjtZ2rLvmQhwuefS5B8XzYaCjqP+njjgv+X8ZDc0z7kurRQGp1JUB2 105s4ZBR39TTRGpRHfZSK0gzBXvyqN0Cd2JBMzOj0iaV7nXQ1K7nAFB6L3WFpjlW8UOT kgRKoV9R1cbHGb2is/UKgEp4jfC+Rsyy80Dk8mzZR2mHBaOUeN2Hz/AIvV0/1KjJ72E1 A05SYbLDN4nLmteNUI0AAa212HeMVi1vlaurIQGoeDgaWwuf2c8Zbo6mF1TdZt/AuSSA Bywg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=E4yfbjXx; 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 a640c23a62f3a-a9392f4ea88si64885466b.237.2024.09.24.00.19.27; Tue, 24 Sep 2024 00:19:28 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=E4yfbjXx; 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 E837368DAE6; Tue, 24 Sep 2024 10:10:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6FD5A68DB4B for ; Tue, 24 Sep 2024 10:10:22 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=E4yfbjXx; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 9CF904DEE for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id r1NFzmkk7bkU for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=82cIcQyrI1M+jwJ16K7uow4SR6xE+6jJKknvSjZGygQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=E4yfbjXxNNdqtYmQr4X8AwKuwCLCAdZguJg8hO7n4BDUnmfvNcx9aryjkkGf2SsMr ZCHYr16w9tiamtJUetrLN6JCosObBHt+xaklk6wWtGAFYnkDhMBjC0C21gU/CCqDHv ToaljWRnJDL3YsDONaScIeCARGIZ4WM5mMIYE/EW1K/faw8FvC+W0XLFGkEj41nj5M 4ZIvZDrI3n4V+ejvaQbNfPToXwy1rPI/FcxyLl4PAMCEfvBhQM2pkaAo8L3RKXgkP4 FtNMpUNF8OuYQm6fGOgBeh1pZzsAJ19eau7dj1G8tmvMvdgMefbgdoGWra/cU6Mp2C jxuU/AbkB69NA== 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 mail1.khirnov.net (Postfix) with ESMTPS id 75A604E08 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 4110A3A19A6 for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:50 +0200 Message-ID: <20240924071000.11428-9-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/13] fftools/ffmpeg_filter: clarify error message 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: OwjP8v7BMlJj --- fftools/ffmpeg_filter.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 7ec328e04e..4196fd865d 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -1351,8 +1351,10 @@ static int fg_complex_bind_input(FilterGraph *fg, InputFilter *ifilter) } else { ist = ist_find_unused(type); if (!ist) { - av_log(fg, AV_LOG_FATAL, "Cannot find a matching stream for " - "unlabeled input pad %s\n", ifilter->name); + av_log(fg, AV_LOG_FATAL, + "Cannot find an unused %s input stream to feed the " + "unlabeled input pad %s.\n", + av_get_media_type_string(type), ifilter->name); return AVERROR(EINVAL); } From patchwork Tue Sep 24 07:09:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51789 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp174026vqy; Tue, 24 Sep 2024 00:19:28 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX6JVYizoZSsRpYngsaRb1vt1qUnTbAy0yA3wp0eSeg3S4KwASwYpqSBAPU+djWPCvjxbUkbTl6Hw4FrP2JaTr3@gmail.com X-Google-Smtp-Source: AGHT+IFLxbM+GdMpsTZ6Y8pga38sSbl6xHICJr10GRfj28z02XT7chBk1QIDB0b2549YXqTb0gAV X-Received: by 2002:a05:6512:3c81:b0:535:681d:34b6 with SMTP id 2adb3069b0e04-536ac34a610mr2323708e87.10.1727162367950; Tue, 24 Sep 2024 00:19:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162367; cv=none; d=google.com; s=arc-20240605; b=UO8ZJIGkwIYxl3cRNPMyHNMrrduo8tGez3KpIy1nCa0zkYML5kQD1eUxznnGlJGmI2 6KTOvDYYubQAcin9jZeF4Z0QTKlI4xJgtUgTQ2U8zWukuwnJES/yBrMN6LvNLtnUh8gn gXOfb3cSRCRzc31dK1oP38jSsiFZVsMcPLe7TSYxmgScT8CZw4n1dFOXnqXKeRfKG/qJ +8W08+8JhdS2wfl49CJR0i//j/7OuRDnCi++s+TnMWdCp/dl8RNUcULnglldNKXpTj8v pvoMcWWqLee/cmbcCUflh4/0A2jYSECNOBr0L9ACbY+hJ91XMfEG1OlclxnGUJgV4pfE DDEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=nfYeIv8uNEojE2qz1I2WiWc0nw1mqqexufILs1a644g=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=S6Zq4j/4hH7iUSq1Vxx25lKhajxMz7q9Linpc0TLLvL69uhH3xajepRXf7/Lxdbaem 18DI/iQ6XCvWupq1PK94lc87klU+BTnnIqlmn1gf9uJj9bxhBeymqNLYdbYaBvuj8dml CvS73i8Pl2roVgdV+8RFbCaWUXjOGJ6ZevLb60bJDttsZs1VHCQIokRL1q7H+4Vh6GAH sIQ5N6XCw54S7ISbXjvk9acLCMUScxx4h02V05X3PHXjZInirKx0Ciw8SyGSKIo44zE3 YYUb6mZLFJ2KrKqQu5iHpwWKVJEzpL0cgOVu8JxxmnD7YtdlyTD9GRQDrQMpCtpLsljt gJBA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b="B4dy/UiJ"; 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 2adb3069b0e04-537a863f29fsi289837e87.310.2024.09.24.00.19.27; Tue, 24 Sep 2024 00:19:27 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b="B4dy/UiJ"; 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 08F4968DBE1; Tue, 24 Sep 2024 10:10:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6FA6868DB45 for ; Tue, 24 Sep 2024 10:10:22 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=B4dy/UiJ; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id B71644E02 for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id lUbODFGugn2l for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=txQ/DIC+omS69s1QMFnGbw/uvGtqNO5eSnUFU0xI8Iw=; h=From:To:Subject:Date:In-Reply-To:References:From; b=B4dy/UiJskNRtJQGu8G8Agb+hQi3NTUsWd/xokaopjl419X2idCkBxYFRApYRVxz+ le0yHVl5N4hk2LQf42c3GbDI0p/SPolOJ0afTVPIuEqzzSZqpFkXdhvJk/wWS/3JqY JQDOwQEkjVJvAT7pkl1CO8xhzxm33wjq3Qr07OKU8mYU+oQLEI/yYMR33BheguZbnv 8ZllV5at51JYYAAbD5IoB+UWkA7cjO/xF54idOpicNRytcMC5IbWy8UvQplvu0rHhu vo3WjJAQPkK/p/1PB8TOK4xv3vjnGPXsV5kmNPm+6qGIr4Mq+NFgIIC19IxItmyURk USh2q5vrKfl6w== 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 mail1.khirnov.net (Postfix) with ESMTPS id 814DD4E0B for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 4CC083A19EA for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:51 +0200 Message-ID: <20240924071000.11428-10-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/13] fftools/ffmpeg_filter: drop a redundant check 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: WfGerDXVhuwE OutputFilterOptions.frame_rates are always NULL if the conditional is true. --- fftools/ffmpeg_filter.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 4196fd865d..7a37cb1d2d 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -856,8 +856,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->fps.vsync_method = opts->vsync_method; ofp->fps.framerate = ost->frame_rate; ofp->fps.framerate_max = ost->max_frame_rate; - ofp->fps.framerate_supported = ost->force_fps || !opts->enc ? - NULL : opts->frame_rates; + ofp->fps.framerate_supported = opts->frame_rates; // reduce frame rate for mpeg4 to be within the spec limits if (opts->enc && opts->enc->id == AV_CODEC_ID_MPEG4) From patchwork Tue Sep 24 07:09:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51788 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp173997vqy; Tue, 24 Sep 2024 00:19:25 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVYpW1xKyMB70csYS4a7xhXHoyzIU7HCXSQ5LbAm1lkMudRHg77I5hNkPssvHb4PA/yMUXe5uNvvIsrhDA3aKKP@gmail.com X-Google-Smtp-Source: AGHT+IHUA45YEjX8fxq3s7ilQzbte3lumpUu3SvrY2JLeRTC1t1SjGXvBrfP0je+cFBJvAWQMUZ+ X-Received: by 2002:a05:6512:39cc:b0:533:4108:a49e with SMTP id 2adb3069b0e04-537a6912794mr731645e87.29.1727162364919; Tue, 24 Sep 2024 00:19:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162364; cv=none; d=google.com; s=arc-20240605; b=ebX62yLdAQyGbyA7wgRRrZc284T8F8publOW/jqnVUecxuIXCQtyyFJauJbD0sz+o6 /YhdlOZlcsudjtfInyPrch8sFlTG6onM6y6XKS5+kFTnnJcEnA6IRii9//spa2kmuCh9 3aQD8I4p+rKHKwVCFHxFtdPAi0YQabeTFhkGFY1TlionVbKQRs92qUka/W9E8yKkk5Jc VF84AKjSUbqzhqC++ITEWmoHfMqAuSXT2k+mBDfvPhZUGYv1t8Zo7cdL1s1Ts9iU/zll b5RtC/6rOMxDStRNKKkMJGFAjrpcpAAeUEkms1Zfct8eJJMRTxbsogXHohi3Lxve6Fli mC4A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=GDiLbxZVEEJyQrFrdnf5W49odE7lnL/hneZaWZLhHgQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=M2waWgZE7eyCIDvs/oTtqSfVkJxjaGe3uRRJln5b6emnxH6v3zxCmFw9Wux56xixd8 B+G6paSr5BSXrhNOw4ZQRXazCbyFcNdLnheBy7HfK2LVlj3iJF7n6EVDXTX0N1NT8hjq jIfgCyo9sT2uSy5WjHiGNas0nWWVw6m1JY5wjbLhYopEKePTS81Y7rZzRmRuMnKe+FQ9 HeBlzBDRZBp5dtbKJEsfUpzZYCYUdKUYVlSGlANPLO2rGUAuvlhRTxxcZce+QvGYW75f WfnxweQskJgWFzDP9iXHEZMDa9maesfmYkL9LNi4hLZzj4tYkT4nZpl/sC22MkF/DTQc c54g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=WzKZz2EP; 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 2adb3069b0e04-537a8646249si255582e87.338.2024.09.24.00.19.23; Tue, 24 Sep 2024 00:19:24 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=WzKZz2EP; 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 A679E68DBF1; Tue, 24 Sep 2024 10:10:38 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A219A68DB4B for ; Tue, 24 Sep 2024 10:10:22 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=WzKZz2EP; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 25AFC4E07 for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id rUbINhpepnOE for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=RxVa/alDI4GlT/+QlaQ1VzsYWFokfNkoqttDJ/JwXSI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=WzKZz2EP+j6TNdz6SUPX2hE3WN30LX4+GVCic7vAo1/HMY3Tp1V3oKwFpv8kpDSqG cnerLf2Iq+fDR/3Rj7eFXlgTfJxWcVetP13e2ghdM9+rBYe37qPEymzjM8OmbatueL 282LwgGSP22s7GJqVJGr8qg8ER8YAyz2zweEuL2Gt3dFDbONxsN+Ja11LuG/c0vXns 4POlgnPnZGK5pG2R5d1+bif9rVQbEVF+e3ZIBBgvNvs/DnUXis4qVUpv4pcSfogAe2 UG0LrQDUmtzlAgCV3pz0ux3KrzNLxN2S4NCwoAvJ89elNN02/PNWTXkpvpTILQpmfz K/WSJ77vpOUjQ== 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 mail1.khirnov.net (Postfix) with ESMTPS id 89A0A4E11 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 5886D3A1A1B for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:52 +0200 Message-ID: <20240924071000.11428-11-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/13] fftools/ffmpeg_filter: stop accessing OutputStream.[max_]frame_rate 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: f0uTM48G7mll Pass them to ofilter_bind_ost() via OutputFilterOptions, as is done for most other data it needs. OutputStream.[max_]frame_rate/force_fps are no longer used outside of ffmpeg_mux*, and so can be made private. This is a step toward decoupling encoders from muxers. --- fftools/ffmpeg.h | 5 ++--- fftools/ffmpeg_filter.c | 4 ++-- fftools/ffmpeg_mux.h | 4 ++++ fftools/ffmpeg_mux_init.c | 16 +++++++++------- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 13be7c4872..29679432c6 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -328,6 +328,8 @@ typedef struct OutputFilterOptions { enum AVColorRange color_range; enum VideoSyncMethod vsync_method; + AVRational frame_rate; + AVRational max_frame_rate; int sample_rate; AVChannelLayout ch_layout; @@ -605,9 +607,6 @@ typedef struct OutputStream { AVCodecContext *enc_ctx; /* video only */ - AVRational frame_rate; - AVRational max_frame_rate; - int force_fps; #if FFMPEG_OPT_TOP int top_field_first; #endif diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 7a37cb1d2d..94b4f4bb31 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -854,8 +854,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, return AVERROR(ENOMEM); ofp->fps.vsync_method = opts->vsync_method; - ofp->fps.framerate = ost->frame_rate; - ofp->fps.framerate_max = ost->max_frame_rate; + ofp->fps.framerate = opts->frame_rate; + ofp->fps.framerate_max = opts->max_frame_rate; ofp->fps.framerate_supported = opts->frame_rates; // reduce frame rate for mpeg4 to be within the spec limits diff --git a/fftools/ffmpeg_mux.h b/fftools/ffmpeg_mux.h index 5df718faf0..f41f2c18fa 100644 --- a/fftools/ffmpeg_mux.h +++ b/fftools/ffmpeg_mux.h @@ -85,6 +85,10 @@ typedef struct MuxStream { int ts_drop; #endif + AVRational frame_rate; + AVRational max_frame_rate; + int force_fps; + const char *apad; } MuxStream; diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index bf2c0b8f67..1435d8339d 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -605,13 +605,13 @@ static int new_stream_video(Muxer *mux, const OptionsContext *o, st = ost->st; opt_match_per_stream_str(ost, &o->frame_rates, oc, st, &frame_rate); - if (frame_rate && av_parse_video_rate(&ost->frame_rate, frame_rate) < 0) { + if (frame_rate && av_parse_video_rate(&ms->frame_rate, frame_rate) < 0) { av_log(ost, AV_LOG_FATAL, "Invalid framerate value: %s\n", frame_rate); return AVERROR(EINVAL); } opt_match_per_stream_str(ost, &o->max_frame_rates, oc, st, &max_frame_rate); - if (max_frame_rate && av_parse_video_rate(&ost->max_frame_rate, max_frame_rate) < 0) { + if (max_frame_rate && av_parse_video_rate(&ms->max_frame_rate, max_frame_rate) < 0) { av_log(ost, AV_LOG_FATAL, "Invalid maximum framerate value: %s\n", max_frame_rate); return AVERROR(EINVAL); } @@ -775,7 +775,7 @@ static int new_stream_video(Muxer *mux, const OptionsContext *o, } } - opt_match_per_stream_int(ost, &o->force_fps, oc, st, &ost->force_fps); + opt_match_per_stream_int(ost, &o->force_fps, oc, st, &ms->force_fps); #if FFMPEG_OPT_TOP ost->top_field_first = -1; @@ -796,7 +796,7 @@ static int new_stream_video(Muxer *mux, const OptionsContext *o, return ret; } - if ((ost->frame_rate.num || ost->max_frame_rate.num) && + if ((ms->frame_rate.num || ms->max_frame_rate.num) && !(*vsync_method == VSYNC_AUTO || *vsync_method == VSYNC_CFR || *vsync_method == VSYNC_VSCFR)) { av_log(ost, AV_LOG_FATAL, "One of -r/-fpsmax was specified " @@ -805,7 +805,7 @@ static int new_stream_video(Muxer *mux, const OptionsContext *o, } if (*vsync_method == VSYNC_AUTO) { - if (ost->frame_rate.num || ost->max_frame_rate.num) { + if (ms->frame_rate.num || ms->max_frame_rate.num) { *vsync_method = VSYNC_CFR; } else if (!strcmp(oc->oformat->name, "avi")) { *vsync_method = VSYNC_VFR; @@ -937,6 +937,8 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, .color_space = enc_ctx->colorspace, .color_range = enc_ctx->color_range, .vsync_method = vsync_method, + .frame_rate = ms->frame_rate, + .max_frame_rate = ms->max_frame_rate, .sample_rate = enc_ctx->sample_rate, .ch_layout = enc_ctx->ch_layout, .sws_opts = o->g->sws_dict, @@ -963,7 +965,7 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, if (ret < 0) return ret; } - if (!ost->force_fps) { + if (!ms->force_fps) { ret = avcodec_get_supported_config(enc_ctx, NULL, AV_CODEC_CONFIG_FRAME_RATE, 0, (const void **) &opts.frame_rates, NULL); @@ -1035,7 +1037,7 @@ static int streamcopy_init(const Muxer *mux, OutputStream *ost, AVDictionary **e AVCodecContext *codec_ctx = NULL; - AVRational fr = ost->frame_rate; + AVRational fr = ms->frame_rate; int ret = 0; From patchwork Tue Sep 24 07:09:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51785 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp173938vqy; Tue, 24 Sep 2024 00:19:17 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVbWkS4bNGJBUaZMonb55ax7xIV2B9elCNwkuuaA15800XOfg5zfkXOE1x9goG2pyPCYrOTmEub+qjkEpseZIrU@gmail.com X-Google-Smtp-Source: AGHT+IEbzLAe1QfQyTwpmAUtulEHhbtTu5w8sjHu5JInMKIIB5srK7FQTi5mLS2AVfJiO95cMXqq X-Received: by 2002:a05:6402:4401:b0:5c5:b6f0:71cf with SMTP id 4fb4d7f45d1cf-5c5b6f07262mr8616330a12.21.1727162356727; Tue, 24 Sep 2024 00:19:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727162356; cv=none; d=google.com; s=arc-20240605; b=icigq1kdmYQQxESExA+jAXvqaUby9TJ6HvWzT0pgMkse/65uauQqXaHRio/nf05l0Y pww9tzT5j2UiNhR9kqclOSEtGvWBmSA+I0NtQGsh2/bB6oHJISnvfB42dWoqEuv5JUyM FcOl1JwfxdFTDUnz40Ku384lKjcTqCx/neKPfB9QUsJTBlYG9Q3qzxCGoO7XjG7Lsojd PiIJEgz9hw7cw5lQt3VXCAxCMA+xcVxoAB+ZmLEPxW4iIHueUIKb0qQ+wUD6/f2OfbD3 N2bOLlAzGzG3S9VrxLrO3Ays6TowoHXBRqENjKAbY/KGBipO4oislcFCnTX7OiSXaFxy ybgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=dTk3RQHwcVs+Cb4PnRbXPadKcnnUy0/DrK+OVOVcVhI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=cpu5fiy9EmJB7rng0SvNf8qdheED+Ibt2phhdGX/DwHMXrViHKO/bOiesCtqsaUTeX fylV2zzepe9yeNweG6llw/gS9gnqZ7xHlicVqcbJLQ9jRbXIC3DRP9iFjzBE5oDcRK14 kqinNvsoVrsir2hL2OGxSPSDBLyJvGrZytHP3YedQIsfDlzyd5gWOfq5ChCbNJiXEjNp lmPQE3sHmsTGxXJwiio0JHgoCEuDVf1cO1CTfk4RisrVmhBY6YVq/3Osp3j3YYIBY0jB rlvK+20XVfhchmJ+yzPxMsGOBOKWBQpgcmmSs4TlaCMqKCBa/XPeh8oxrIors4o9SM8F paOA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=d80BtSoJ; 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 4fb4d7f45d1cf-5c5cf4c4224si597738a12.209.2024.09.24.00.19.16; Tue, 24 Sep 2024 00:19:16 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=d80BtSoJ; 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 2DC5668DAB2; Tue, 24 Sep 2024 10:10:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7375C68DB57 for ; Tue, 24 Sep 2024 10:10:22 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=d80BtSoJ; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 172F74E0B for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id zfw0XxEXH6ap for ; Tue, 24 Sep 2024 09:10:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=oefIfuELdLRKz8eiD75flZU6iL96VrCsWvNjiZD92T0=; h=From:To:Subject:Date:In-Reply-To:References:From; b=d80BtSoJ8LAdHg+jH3kVZHCanhm1Luq0b/AlkDX3BZ9SA+FWLv9zcm0X0Ph//joB4 kgmG04quqWrwsK/siVxVO0wog445+Jl6sdi1XlsEihBUdqjSHfaHS221V1gIeMeWdU Rp2bRK5PEsANkwEf43T7nNLQnZ3SfkksjduGQ6g1W1dDKUfF6UhfKeA37IQ5Q5CUmX y2y6h+S93up1ypiGOfjNBQ06G1d/7vsfcK2ud8UgZDY9gn0RJ6t18gREeocCYRPt2l MRDDZw3l3izLFXg+jXXLKHmDnGpxptTiK/JlVercYxRVRYft02wCcjZ8QXF2IOMD5W fUWo820nCk+1w== 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 mail1.khirnov.net (Postfix) with ESMTPS id 8A72E4E12 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 643CE3A1A81 for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:53 +0200 Message-ID: <20240924071000.11428-12-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 12/13] fftools/ffmpeg_filter: drop the OutputStream parameter to ofilter_bind_ost() 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: e1ACWRjrjyJn It is no longer used for anything besides a sanity-checking assert. Rename the function to ofilter_bind_enc(), as it no longer has any assumptions about the target being an output stream. --- fftools/ffmpeg.h | 2 +- fftools/ffmpeg_filter.c | 8 ++++---- fftools/ffmpeg_mux_init.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 29679432c6..d20034efb0 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -772,7 +772,7 @@ const FrameData *frame_data_c(AVFrame *frame); FrameData *packet_data (AVPacket *pkt); const FrameData *packet_data_c(AVPacket *pkt); -int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, +int ofilter_bind_enc(OutputFilter *ofilter, unsigned sched_idx_enc, const OutputFilterOptions *opts); diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 94b4f4bb31..7faa666d2d 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -783,8 +783,7 @@ static int set_channel_layout(OutputFilterPriv *f, const AVChannelLayout *layout return 0; } -int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, - unsigned sched_idx_enc, +int ofilter_bind_enc(OutputFilter *ofilter, unsigned sched_idx_enc, const OutputFilterOptions *opts) { OutputFilterPriv *ofp = ofp_from_ofilter(ofilter); @@ -793,7 +792,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, int ret; av_assert0(!ofilter->bound); - av_assert0(ofilter->type == ost->type); + av_assert0(!opts->enc || + ofilter->type == opts->enc->type); ofilter->bound = 1; av_freep(&ofilter->linklabel); @@ -1222,7 +1222,7 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost, if (ret < 0) return ret; - ret = ofilter_bind_ost(fg->outputs[0], ost, sched_idx_enc, opts); + ret = ofilter_bind_enc(fg->outputs[0], sched_idx_enc, opts); if (ret < 0) return ret; diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 1435d8339d..53a17c33a6 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1008,7 +1008,7 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, if (ofilter) { ost->filter = ofilter; - ret = ofilter_bind_ost(ofilter, ost, ms->sch_idx_enc, &opts); + ret = ofilter_bind_enc(ofilter, ms->sch_idx_enc, &opts); } else { ret = init_simple_filtergraph(ost->ist, ost, filters, mux->sch, ms->sch_idx_enc, &opts); From patchwork Tue Sep 24 07:09:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 51784 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ad12:0:b0:48e:c0f8:d0de with SMTP id w18csp171055vqy; Tue, 24 Sep 2024 00:11:28 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWsNjUUXISirEAq1pyC8bIA68cCIXaDIjbKpF05Re2JqRIn7B2fRJNFk0fD1rqC+i7HPBwqAgSVZrqvQlgJbs8U@gmail.com X-Google-Smtp-Source: AGHT+IFGWxZFOdPcj5qe0rA0lJ5CYieh7HeoBRYQdIUDPMz1Lp9dbCd+FU1C1uyWQoBqIhK95cba X-Received: by 2002:a05:6512:234a:b0:530:aa6d:9ea0 with SMTP id 2adb3069b0e04-537a691476emr752616e87.22.1727161888113; Tue, 24 Sep 2024 00:11:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727161888; cv=none; d=google.com; s=arc-20240605; b=PmjKXE+1YOqRUIuXCsICp7/v1pI3lrQ5h9GrAJIa8EFWNOu2fy2rzRUk7FdshrOt/e RotOpjPeht8DXCSyikH9pwbS1gDoT5em5ntv5MctSHuLO2PX9NDqwv8eMlUIsl4hD1cj vRIMRF2iG9/ia8AR4/XxfvoLJJlIUnDQCbUkojS3rV0YnchdXuWseAlryaiSQwwbZiVD xtrAFhkXzICCpc3eoOpKC2ZpQZyL0Ub4hvur2mEnmjxwX3/GQ0Ujy//MhZthC2km83W2 L2T/LzF7ZGQ929dZ5u/J1n/n8xfnXTvgFD7WwgpIEm2hrEj8E6zya/9+VcwQAmriS5Kk RY0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:dkim-signature:delivered-to; bh=Aqz5KSOUDnmQBy/O+oiX4OgQoeL2vpy2fZFpIopl9WI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=KdPW3Pw7pbWVPWivaDwztiaGXgqMYJbwuNeD8O1h1dRngpUT/NCKKzKYLmTsr0+tme /InilVmLqf09l5yzxwHDdqgkOSEKr5Ux3hffcUjFtm0dR4VvigyPsV1YZ8uPk01Gz0TX CyNQIsZWMRCLCSmYMn7+B+ls9sMjnvTi6MyMnUEVwFImKIZyNtFy9lgFSLBr0aAPZ/eX KDAs0rtPQZImURUgn/WxZ8PDBiZcOJBfawjYU7fYi0WbNlbgm7tIgmrK29R+ePT3q+9d 2K+jnr/QDJfe+fKYstOG2hYQGw7fSdmw5Zcj89P+kxloRATaSi4MWJSOE8uW/dUV+7Bm l7Hw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=Gmpuhx9F; 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 2adb3069b0e04-537a863eb17si278167e87.197.2024.09.24.00.11.27; Tue, 24 Sep 2024 00:11:28 -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; dkim=neutral (body hash did not verify) header.i=@khirnov.net header.s=mail header.b=Gmpuhx9F; 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 243AE68DB84; Tue, 24 Sep 2024 10:10:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail1.khirnov.net (quelana.khirnov.net [94.230.150.81]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1628168DA9E for ; Tue, 24 Sep 2024 10:10:23 +0300 (EEST) Authentication-Results: mail1.khirnov.net; dkim=pass (2048-bit key; unprotected) header.d=khirnov.net header.i=@khirnov.net header.a=rsa-sha256 header.s=mail header.b=Gmpuhx9F; dkim-atps=neutral Received: from localhost (mail1.khirnov.net [IPv6:::1]) by mail1.khirnov.net (Postfix) with ESMTP id 803D74E08 for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) Received: from mail1.khirnov.net ([IPv6:::1]) by localhost (mail1.khirnov.net [IPv6:::1]) (amavis, port 10024) with ESMTP id DFA3Rw6xwcYe for ; Tue, 24 Sep 2024 09:10:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=khirnov.net; s=mail; t=1727161815; bh=5lxSbzwP/7t2K/3cOu2sDcc8ighp0uJxceV1SQaSHjQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Gmpuhx9FGrs2daREdxHb/ZcuJ2Csuwt/FPOMYsv8leWJg91g43n7xdhHWwqp1KtW1 6pwBvBmUkWZ9DOcJVkmOIFp+pPmp8REvfcRv6fwt7D5aS18cQYZMTPTe2QacfvEQRY jVh577m8tIFsoyEBHlmMtppOlB6sp5Q9VZoZagIY3G2QQ0x2jc4qAqAYac4nIq65aj A+WrzIIJaDNZFn480SPauAHUQEMjtGDK+mU8ygHLgXruW9kO6HkD6LRSXPPguR9ZQR wdhm8bLrPr1uQB3Wuq3ZKLNztwn7F4MIRafMGZV/CGZMd1v3FMV0VZI87kBFOQ62Ow kS4EBoIgyoMQg== 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 mail1.khirnov.net (Postfix) with ESMTPS id 8BA404E13 for ; Tue, 24 Sep 2024 09:10:15 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id 6FF753A1B33 for ; Tue, 24 Sep 2024 09:10:10 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Tue, 24 Sep 2024 09:09:54 +0200 Message-ID: <20240924071000.11428-13-anton@khirnov.net> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240924071000.11428-1-anton@khirnov.net> References: <20240924071000.11428-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 13/13] fftools/ffmpeg_filter: remove remaining OutputStream usage in init_simple_filtergraph() 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: tBO3gpVgfN0s With this, nothing in ffmpeg_filter acesses OutputStream anymore, thus there are no more direct ties between filtering and muxing. Rename init_simple_filtergraph() to fg_create_simple() for consistency. --- fftools/ffmpeg.h | 9 +++++---- fftools/ffmpeg_filter.c | 22 +++++++++++----------- fftools/ffmpeg_mux_init.c | 7 +++++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index d20034efb0..b5c95439e5 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -755,10 +755,11 @@ int find_codec(void *logctx, const char *name, int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_idx, int is_global); int filtergraph_is_simple(const FilterGraph *fg); -int init_simple_filtergraph(InputStream *ist, OutputStream *ost, - char *graph_desc, - Scheduler *sch, unsigned sch_idx_enc, - const OutputFilterOptions *opts); +int fg_create_simple(FilterGraph **pfg, + InputStream *ist, + char *graph_desc, + Scheduler *sch, unsigned sched_idx_enc, + const OutputFilterOptions *opts); int fg_finalise_bindings(void); /** diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 7faa666d2d..c36a3ad00a 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -1180,25 +1180,27 @@ fail: return 0; } -int init_simple_filtergraph(InputStream *ist, OutputStream *ost, - char *graph_desc, - Scheduler *sch, unsigned sched_idx_enc, - const OutputFilterOptions *opts) +int fg_create_simple(FilterGraph **pfg, + InputStream *ist, + char *graph_desc, + Scheduler *sch, unsigned sched_idx_enc, + const OutputFilterOptions *opts) { + const enum AVMediaType type = ist->par->codec_type; FilterGraph *fg; FilterGraphPriv *fgp; int ret; - ret = fg_create(&ost->fg_simple, graph_desc, sch); + ret = fg_create(pfg, graph_desc, sch); if (ret < 0) return ret; - fg = ost->fg_simple; + fg = *pfg; fgp = fgp_from_fg(fg); fgp->is_simple = 1; snprintf(fgp->log_name, sizeof(fgp->log_name), "%cf%s", - av_get_media_type_string(ost->type)[0], opts->name); + av_get_media_type_string(type)[0], opts->name); if (fg->nb_inputs != 1 || fg->nb_outputs != 1) { av_log(fg, AV_LOG_ERROR, "Simple filtergraph '%s' was expected " @@ -1208,16 +1210,14 @@ int init_simple_filtergraph(InputStream *ist, OutputStream *ost, graph_desc, fg->nb_inputs, fg->nb_outputs); return AVERROR(EINVAL); } - if (fg->outputs[0]->type != ost->type) { + if (fg->outputs[0]->type != type) { av_log(fg, AV_LOG_ERROR, "Filtergraph has a %s output, cannot connect " "it to %s output stream\n", av_get_media_type_string(fg->outputs[0]->type), - av_get_media_type_string(ost->type)); + av_get_media_type_string(type)); return AVERROR(EINVAL); } - ost->filter = fg->outputs[0]; - ret = ifilter_bind_ist(fg->inputs[0], ist, opts->vs); if (ret < 0) return ret; diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 53a17c33a6..ec9f328e90 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -1010,8 +1010,11 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, ost->filter = ofilter; ret = ofilter_bind_enc(ofilter, ms->sch_idx_enc, &opts); } else { - ret = init_simple_filtergraph(ost->ist, ost, filters, - mux->sch, ms->sch_idx_enc, &opts); + ret = fg_create_simple(&ost->fg_simple, ost->ist, filters, + mux->sch, ms->sch_idx_enc, &opts); + if (ret >= 0) + ost->filter = ost->fg_simple->outputs[0]; + } av_freep(&opts.nb_threads); if (ret < 0)