From patchwork Fri Aug 30 10:15:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51239 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304746vqb; Fri, 30 Aug 2024 03:35:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWUULJss1JCzXH9F2Xn4VKwt2q8yk/62m5sSD80wQwmAQ0zteGZj30dRFCEHjx0qi9eReknME/voN9/BZAb4U+5@gmail.com X-Google-Smtp-Source: AGHT+IExBdjR/TZlqr/O1U2mFlmqnh+H1YRtp2S8sn1JA0TN/VstQSHUqA1Rl+3i0+aR7h2fZ88O X-Received: by 2002:a17:907:724a:b0:a86:a694:aaff with SMTP id a640c23a62f3a-a89a34b4e5fmr73237966b.1.1725014113623; Fri, 30 Aug 2024 03:35:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014113; cv=none; d=google.com; s=arc-20240605; b=OFaYKQhzXCyE76KKdBFHN00Khu/6McljfEwniZkVAqmeleRblD+BT4EEhfCr1YT3wd c7ogP3mBdLkPidllSkgTPSSzdv38YgGiEv8Me1RLdxD/YeHW2hzy6fZFWo//3FT4tAXB GBdZLWMI0Neq0uRRZhpJhvxn4Bgm0rb9Vdn0apA9YrkRsnSWbwSbSTFgNFvp04vc3FLL BgT2rjoE3MO82Xcshlt6ZXac3bMBwGEbpIDU0VS7DHV64PgaMU00rQf7pi8UBcbxhD0n THfzKcDw8p8AH16q2B7LzgNN7erA9joLtXZeHZ+FC263kloy3hEr/LAImAWddyEz1kuv FGTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=hOl6L8yN3h9TAWf++q9K5c3PWlNRVUKf2fPW+MV7QgU=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=JLQGrcGFwyhWZ1eMWaKhMhKYWMOzEtCVBLjDuizawa/16jo3koAln34Rkd6qyPQs3E W6Wz6/jOfC4ZIvkCo4xz2OLQ8XcYU4ChfoCeegJGuwUmwvdwfTrtdO5DwqTznANDj51l iih/XrW6E7s60JwBJQ6X8nHaMQhHqPicKjmGp/381mM3tDLk78N3xCiKJUhWoKzgWKBM 9Tx7ixDmC3jtbqzzABOVc+W0Pw2n39DLSld0TD+OaS5AtbhsrBffbKaAOIiTfIOFY9HD k5B2McgPMMXAVNCHCD9NE1qe3+oIos4PUIxJsaU1Qb2ozgtieVsJEZkox071F2JO4jlg F3dQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=hyUj5Ega; 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-a8988f4077csi281728066b.34.2024.08.30.03.35.13; Fri, 30 Aug 2024 03:35:13 -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=@haasn.xyz header.s=mail header.b=hyUj5Ega; 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 7651F68DB90; Fri, 30 Aug 2024 13:24:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6904968DB5B for ; Fri, 30 Aug 2024 13:24:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013448; bh=Ho+dmOsH6Ok1ekr7X6H0AuuXNc2TB6BL3aTqLp3BQqs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hyUj5EgaHbwQRqH0VhNzZrlyEXxcXogQYqHsKX8Y4Z0XemGGx7Hzs4na6uWPsQ5NV OnWZPJ0XKK7sIa7EnCNmBjX4SHgNuMZVnGNbp0q7p/iB/bgQpz5h9EEGx0PnmKsk5c Pq9ih4kjc6o7WcLADL8P37suDWC6jkyCq6L+OV9g= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 0BD1C41E70; Fri, 30 Aug 2024 12:24:08 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:24 +0200 Message-ID: <20240830102402.18149-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 01/17] avcodec/internal: add FFCodec.color_ranges X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 0Blxl8Ovp33N From: Niklas Haas I went through all codecs and put them into five basic categories: 1. JPEG range only 2. MPEG range only 3. Explicitly tagged 4. Broken (codec supports both but encoder ignores tags) 5. N/A (headerless or pseudo-formats) Filters in category 5 remain untouched. The rest gain an explicit assignment of their supported color ranges, with codecs in category 4 being set to MPEG-only for safety. It might be considered redundant to distinguish between 0 (category 5) and MPEG+JPEG (category 3), but in doing so we effectively communicate that we can guarantee that these tags will be encoded, which is distinct from the situation where there are some codecs that simply don't have tagging or implied semantics (e.g. rawvideo). A full list of codecs follows: JPEG range only: - amv - roqvideo MPEG range only: - asv1, asv2 - avui - cfhd - cljr - dnxhd - dvvideo - ffv1 - flv - h261, h263, h263p - {h263,vp8}_v4l2m2m - huffyuv, ffvhuff - jpeg2000 - libopenjpeg - libtheora - libwebp, libwebp_anim - libx262 - libxavs, libxavs2 - libxvid - mpeg1video, mpeg2video - mpeg2_qsv - mpeg2_vaapi - mpeg4, msmpeg4, msmpeg4v2, wmv1, wmv2 - mpeg4_omx - rv10, rv20 - snow - speedhq - svq1 - tiff - utvideo Explicitly tagged (MPEG/JPEG): - {av1,h264,hevc}_nvenc - {av1,h264,hevc}_vaapi - {av1,h264,hevc,vp8,vp9,mpeg4}_mediacodec - {av1,h264,hevc,vp9}_qsv - h264_amf - {h264,hevc,prores}_videotoolbox - libaom-av1 - libkvazaar - libopenh264 - librav1e - libsvtav1 - libvpx, libvpx-vp9 - libx264 - libx265 - ljpeg - mjpeg - vc2 Broken (encoder ignores tags): - {av1,hevc}_amf - {h264,hevc,mpeg4}_v4l2m2m - h264_omx - libxeve - magicyuv - {vp8,vp9,mjpeg}_vaapi N/A: - ayuv, yuv4, y41p, v308, v210, v410, v408 (headerless) - pgmyuv (headerless) - prores, prores_aw, prores_ks (?) - rawvideo, bitpacked (headerless) - vnull, wrapped_avframe (pseudocodecs) --- libavcodec/amfenc_av1.c | 1 + libavcodec/amfenc_h264.c | 1 + libavcodec/amfenc_hevc.c | 1 + libavcodec/asvenc.c | 2 ++ libavcodec/avuienc.c | 1 + libavcodec/cfhdenc.c | 1 + libavcodec/cljrenc.c | 1 + libavcodec/codec_internal.h | 8 +++++++- libavcodec/dnxhdenc.c | 1 + libavcodec/dvenc.c | 1 + libavcodec/ffv1enc.c | 1 + libavcodec/flvenc.c | 1 + libavcodec/h261enc.c | 1 + libavcodec/huffyuvenc.c | 2 ++ libavcodec/ituh263enc.c | 2 ++ libavcodec/j2kenc.c | 1 + libavcodec/libaomenc.c | 1 + libavcodec/libkvazaar.c | 1 + libavcodec/libopenh264enc.c | 1 + libavcodec/libopenjpegenc.c | 1 + libavcodec/librav1e.c | 1 + libavcodec/libsvtav1.c | 1 + libavcodec/libtheoraenc.c | 1 + libavcodec/libvpxenc.c | 2 ++ libavcodec/libwebpenc.c | 1 + libavcodec/libwebpenc_animencoder.c | 1 + libavcodec/libx264.c | 2 ++ libavcodec/libx265.c | 1 + libavcodec/libxavs.c | 1 + libavcodec/libxavs2.c | 1 + libavcodec/libxeve.c | 1 + libavcodec/libxvid.c | 1 + libavcodec/ljpegenc.c | 1 + libavcodec/magicyuvenc.c | 1 + libavcodec/mediacodecenc.c | 1 + libavcodec/mjpegenc.c | 2 ++ libavcodec/mpeg12enc.c | 2 ++ libavcodec/mpeg4videoenc.c | 1 + libavcodec/msmpeg4enc.c | 3 +++ libavcodec/nvenc_av1.c | 1 + libavcodec/nvenc_h264.c | 1 + libavcodec/nvenc_hevc.c | 1 + libavcodec/omx.c | 2 ++ libavcodec/qsvenc_av1.c | 1 + libavcodec/qsvenc_h264.c | 1 + libavcodec/qsvenc_hevc.c | 1 + libavcodec/qsvenc_jpeg.c | 1 + libavcodec/qsvenc_mpeg2.c | 1 + libavcodec/qsvenc_vp9.c | 1 + libavcodec/roqvideoenc.c | 1 + libavcodec/rv10enc.c | 1 + libavcodec/rv20enc.c | 1 + libavcodec/snowenc.c | 1 + libavcodec/speedhqenc.c | 1 + libavcodec/svq1enc.c | 1 + libavcodec/tiffenc.c | 1 + libavcodec/utvideoenc.c | 1 + libavcodec/v4l2_m2m_enc.c | 1 + libavcodec/vaapi_encode_av1.c | 1 + libavcodec/vaapi_encode_h264.c | 1 + libavcodec/vaapi_encode_h265.c | 1 + libavcodec/vaapi_encode_mjpeg.c | 1 + libavcodec/vaapi_encode_mpeg2.c | 1 + libavcodec/vaapi_encode_vp8.c | 1 + libavcodec/vaapi_encode_vp9.c | 1 + libavcodec/vc2enc.c | 3 ++- libavcodec/videotoolboxenc.c | 2 ++ libavcodec/wmv2enc.c | 1 + 68 files changed, 86 insertions(+), 2 deletions(-) diff --git a/libavcodec/amfenc_av1.c b/libavcodec/amfenc_av1.c index f2ad06c083..15d2582bfd 100644 --- a/libavcodec/amfenc_av1.c +++ b/libavcodec/amfenc_av1.c @@ -603,6 +603,7 @@ const FFCodec ff_av1_amf_encoder = { AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, }; diff --git a/libavcodec/amfenc_h264.c b/libavcodec/amfenc_h264.c index c80854c5f8..e628eabef0 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -586,6 +586,7 @@ const FFCodec ff_h264_amf_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, }; diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 51fc243747..b67fadf371 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -507,6 +507,7 @@ const FFCodec ff_hevc_amf_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_amf_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, }; diff --git a/libavcodec/asvenc.c b/libavcodec/asvenc.c index 6179b50583..4f81a4015d 100644 --- a/libavcodec/asvenc.c +++ b/libavcodec/asvenc.c @@ -367,6 +367,7 @@ const FFCodec ff_asv1_encoder = { FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, }; #endif @@ -382,5 +383,6 @@ const FFCodec ff_asv2_encoder = { FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, }; #endif diff --git a/libavcodec/avuienc.c b/libavcodec/avuienc.c index 495f6d36fb..a2391b31ef 100644 --- a/libavcodec/avuienc.c +++ b/libavcodec/avuienc.c @@ -100,6 +100,7 @@ const FFCodec ff_avui_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_UYVY422, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .init = avui_encode_init, FF_CODEC_ENCODE_CB(avui_encode_frame), }; diff --git a/libavcodec/cfhdenc.c b/libavcodec/cfhdenc.c index 7084509f6e..3be6798d8d 100644 --- a/libavcodec/cfhdenc.c +++ b/libavcodec/cfhdenc.c @@ -870,5 +870,6 @@ const FFCodec ff_cfhd_encoder = { AV_PIX_FMT_GBRAP12, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/cljrenc.c b/libavcodec/cljrenc.c index 31ad5ce0cf..4698dfd725 100644 --- a/libavcodec/cljrenc.c +++ b/libavcodec/cljrenc.c @@ -118,5 +118,6 @@ const FFCodec ff_cljr_encoder = { FF_CODEC_ENCODE_CB(encode_frame), .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV411P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &cljr_class, }; diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 1cd1f684f9..6fdd261066 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -132,7 +132,13 @@ typedef struct FFCodec { /** * Internal codec capabilities FF_CODEC_CAP_*. */ - unsigned caps_internal:29; + unsigned caps_internal:27; + + /** + * This field determines the video color ranges supported by a codec. + * Should be set to a bitmask of AVCOL_RANGE_MPEG and AVCOL_RANGE_JPEG. + */ + unsigned color_ranges:2; /** * This field determines the type of the codec (decoder/encoder) diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index 62612ef6d2..ccdae09c9a 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -1367,6 +1367,7 @@ const FFCodec ff_dnxhd_encoder = { AV_PIX_FMT_GBRP10, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &dnxhd_class, .defaults = dnxhd_defaults, .p.profiles = NULL_IF_CONFIG_SMALL(ff_dnxhd_profiles), diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c index 19137e8b50..db79497b50 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -1251,5 +1251,6 @@ const FFCodec ff_dvvideo_encoder = { AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &dvvideo_encode_class, }; diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 23d757e5c6..1c37f61ada 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1309,6 +1309,7 @@ const FFCodec ff_ffv1_encoder = { AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ffv1_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_EOF_FLUSH, }; diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 6a96cb0f2f..40eec07b3e 100644 --- a/libavcodec/flvenc.c +++ b/libavcodec/flvenc.c @@ -105,5 +105,6 @@ const FFCodec ff_flv_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index a901c32e42..f417366e75 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -385,5 +385,6 @@ const FFCodec ff_h261_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index 294d6ad41c..5e8b5c0dd7 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -1026,6 +1026,7 @@ const FFCodec ff_huffyuv_encoder = { AV_PIX_FMT_YUV422P, AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; @@ -1066,6 +1067,7 @@ const FFCodec ff_ffvhuff_encoder = { AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; #endif diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 3982b1e675..8c41e45ab2 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -920,6 +920,7 @@ const FFCodec ff_h263_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_H263, .p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &h263_class, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, @@ -951,6 +952,7 @@ const FFCodec ff_h263p_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_H263P, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &h263p_class, .p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c index 91e66d8104..60cc0f3093 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -1865,6 +1865,7 @@ const FFCodec ff_jpeg2000_encoder = { AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &j2k_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index fd9bea2505..32bda992cb 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1548,6 +1548,7 @@ FFCodec ff_libaom_av1_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_ENCODER_RECON_FRAME | AV_CODEC_CAP_OTHER_THREADS, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), .p.priv_class = &class_aom, .p.wrapper_name = "libaom", diff --git a/libavcodec/libkvazaar.c b/libavcodec/libkvazaar.c index cd731ae9d0..e82be2a35f 100644 --- a/libavcodec/libkvazaar.c +++ b/libavcodec/libkvazaar.c @@ -334,6 +334,7 @@ const FFCodec ff_libkvazaar_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, .p.pix_fmts = pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .priv_data_size = sizeof(LibkvazaarContext), diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 0aa2a54e68..7107c1a679 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -445,6 +445,7 @@ const FFCodec ff_libopenh264_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .defaults = svc_enc_defaults, .p.priv_class = &class, .p.wrapper_name = "libopenh264", diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 6a4364b1fe..01b67dffda 100644 --- a/libavcodec/libopenjpegenc.c +++ b/libavcodec/libopenjpegenc.c @@ -785,6 +785,7 @@ const FFCodec ff_libopenjpeg_encoder = { AV_PIX_FMT_XYZ12, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &openjpeg_class, .p.wrapper_name = "libopenjpeg", }; diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index b83e2118ed..546d00297d 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -668,6 +668,7 @@ const FFCodec ff_librav1e_encoder = { .p.priv_class = &class, .defaults = librav1e_defaults, .p.pix_fmts = librav1e_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_RECON_FRAME | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c index e7b12fb488..79b28eb4df 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -769,6 +769,7 @@ const FFCodec ff_libsvtav1_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = eb_enc_defaults, .p.wrapper_name = "libsvtav1", diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index 58da008a82..8844f4be6a 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -391,5 +391,6 @@ const FFCodec ff_libtheora_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.wrapper_name = "libtheora", }; diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 5490246d9e..1d5e9c33e8 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -2045,6 +2045,7 @@ const FFCodec ff_libvpx_vp8_encoder = { FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class_vp8, .defaults = defaults, .p.wrapper_name = "libvpx", @@ -2116,6 +2117,7 @@ FFCodec ff_libvpx_vp9_encoder = { .p.wrapper_name = "libvpx", .priv_data_size = sizeof(VPxContext), .init = vp9_init, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, FF_CODEC_ENCODE_CB(vpx_encode), .close = vpx_free, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c index f40dd01345..670412cc6e 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -95,6 +95,7 @@ const FFCodec ff_libwebp_encoder = { .p.id = AV_CODEC_ID_WEBP, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = ff_libwebpenc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ff_libwebpenc_class, .p.wrapper_name = "libwebp", .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, diff --git a/libavcodec/libwebpenc_animencoder.c b/libavcodec/libwebpenc_animencoder.c index 6f52fa7cf1..c5361d7f92 100644 --- a/libavcodec/libwebpenc_animencoder.c +++ b/libavcodec/libwebpenc_animencoder.c @@ -168,6 +168,7 @@ const FFCodec ff_libwebp_anim_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = ff_libwebpenc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ff_libwebpenc_class, .p.wrapper_name = "libwebp", .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index d07a65a103..ff849a7ac4 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1634,6 +1634,7 @@ const FFCodec ff_libx264_encoder = { .close = X264_close, .defaults = x264_defaults, .p.pix_fmts = pix_fmts_all, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS #if X264_BUILD < 158 | FF_CODEC_CAP_NOT_INIT_THREADSAFE @@ -1691,6 +1692,7 @@ const FFCodec ff_libx262_encoder = { AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = pix_fmts_8bit, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &X262_class, .p.wrapper_name = "libx264", .priv_data_size = sizeof(X264Context), diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index dbc5b2aab1..de0ad03ee3 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -1009,6 +1009,7 @@ FFCodec ff_libx265_encoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .p.wrapper_name = "libx265", .init = libx265_encode_init, diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c index 4c7b1908cc..d0f6e141c7 100644 --- a/libavcodec/libxavs.c +++ b/libavcodec/libxavs.c @@ -435,6 +435,7 @@ const FFCodec ff_libxavs_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &xavs_class, .defaults = xavs_defaults, .p.wrapper_name = "libxavs", diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c index c493ddc325..1021d2ae2f 100644 --- a/libavcodec/libxavs2.c +++ b/libavcodec/libxavs2.c @@ -301,6 +301,7 @@ const FFCodec ff_libxavs2_encoder = { FF_CODEC_CAP_AUTO_THREADS, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &libxavs2, .defaults = xavs2_defaults, .p.wrapper_name = "libxavs2", diff --git a/libavcodec/libxeve.c b/libavcodec/libxeve.c index aca994702a..61376f3e65 100644 --- a/libavcodec/libxeve.c +++ b/libavcodec/libxeve.c @@ -614,5 +614,6 @@ const FFCodec ff_libxeve_encoder = { .p.profiles = NULL_IF_CONFIG_SMALL(ff_evc_profiles), .p.wrapper_name = "libxeve", .p.pix_fmts = supported_pixel_formats, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_NOT_INIT_THREADSAFE, }; diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index a490f16b3f..fbd33b7065 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -908,6 +908,7 @@ const FFCodec ff_libxvid_encoder = { FF_CODEC_ENCODE_CB(xvid_encode_frame), .close = xvid_encode_close, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &xvid_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.wrapper_name = "libxvid", diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index 46546e2160..927420c2d4 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -328,4 +328,5 @@ const FFCodec ff_ljpeg_encoder = { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUV420P , AV_PIX_FMT_YUV444P , AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE}, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, }; diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index 6e640d24cc..3364207f81 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -696,5 +696,6 @@ const FFCodec ff_magicyuv_encoder = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index a42270551b..6ca3968a24 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -776,6 +776,7 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \ AV_CODEC_CAP_ENCODER_FLUSH, \ .priv_data_size = sizeof(MediaCodecEncContext), \ .p.pix_fmts = avc_pix_fmts, \ + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, \ .init = mediacodec_init, \ FF_CODEC_RECEIVE_PACKET_CB(mediacodec_encode), \ .close = mediacodec_close, \ diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 9d4c3a4f41..b3bc355501 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -657,6 +657,7 @@ const FFCodec ff_mjpeg_encoder = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &mjpeg_class, .p.profiles = NULL_IF_CONFIG_SMALL(ff_mjpeg_profiles), }; @@ -683,6 +684,7 @@ const FFCodec ff_amv_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_JPEG, .p.priv_class = &amv_class, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 42c0f94930..e56571da03 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -1241,6 +1241,7 @@ const FFCodec ff_mpeg1video_encoder = { .p.supported_framerates = ff_mpeg12_frame_rate_tab + 1, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, @@ -1260,6 +1261,7 @@ const FFCodec ff_mpeg2video_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 0b18776497..98254c2c63 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -1393,6 +1393,7 @@ const FFCodec ff_mpeg4_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index 3103a73663..5ce4e6e30c 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -681,6 +681,7 @@ const FFCodec ff_msmpeg4v2_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_MSMPEG4V2, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ff_mpv_enc_class, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, @@ -696,6 +697,7 @@ const FFCodec ff_msmpeg4v3_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_MSMPEG4V3, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ff_mpv_enc_class, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, @@ -711,6 +713,7 @@ const FFCodec ff_wmv1_encoder = { .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_WMV1, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &ff_mpv_enc_class, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, diff --git a/libavcodec/nvenc_av1.c b/libavcodec/nvenc_av1.c index ca15ebddba..79253cff66 100644 --- a/libavcodec/nvenc_av1.c +++ b/libavcodec/nvenc_av1.c @@ -202,6 +202,7 @@ const FFCodec ff_av1_nvenc_encoder = { .p.priv_class = &av1_nvenc_class, .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index 4d6f968e0b..8cbe4dca39 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -265,6 +265,7 @@ const FFCodec ff_h264_nvenc_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = ff_nvenc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.wrapper_name = "nvenc", .hw_configs = ff_nvenc_hw_configs, }; diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index d54e5f2512..5696e14dd4 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -264,6 +264,7 @@ const FFCodec ff_hevc_nvenc_encoder = { .p.priv_class = &hevc_nvenc_class, .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, diff --git a/libavcodec/omx.c b/libavcodec/omx.c index 86913237b2..2c3865506f 100644 --- a/libavcodec/omx.c +++ b/libavcodec/omx.c @@ -948,6 +948,7 @@ const FFCodec ff_mpeg4_omx_encoder = { FF_CODEC_ENCODE_CB(omx_encode_frame), .close = omx_encode_end, .p.pix_fmts = omx_encoder_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, .p.capabilities = AV_CODEC_CAP_DELAY, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &omx_mpeg4enc_class, @@ -969,6 +970,7 @@ const FFCodec ff_h264_omx_encoder = { FF_CODEC_ENCODE_CB(omx_encode_frame), .close = omx_encode_end, .p.pix_fmts = omx_encoder_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .p.capabilities = AV_CODEC_CAP_DELAY, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &omx_h264enc_class, diff --git a/libavcodec/qsvenc_av1.c b/libavcodec/qsvenc_av1.c index 56002746b9..7ade962cc4 100644 --- a/libavcodec/qsvenc_av1.c +++ b/libavcodec/qsvenc_av1.c @@ -223,6 +223,7 @@ FFCodec ff_av1_qsv_encoder = { AV_PIX_FMT_P010, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index 53e4e744b2..304d1e7dcb 100644 --- a/libavcodec/qsvenc_h264.c +++ b/libavcodec/qsvenc_h264.c @@ -202,6 +202,7 @@ const FFCodec ff_h264_qsv_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index e6c038e67d..2a397a2919 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -407,6 +407,7 @@ const FFCodec ff_hevc_qsv_encoder = { AV_PIX_FMT_VUYX, AV_PIX_FMT_XV30, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c index 2add12adc9..b2458eee06 100644 --- a/libavcodec/qsvenc_jpeg.c +++ b/libavcodec/qsvenc_jpeg.c @@ -93,6 +93,7 @@ const FFCodec ff_mjpeg_qsv_encoder = { AV_PIX_FMT_BGRA, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .p.wrapper_name = "qsv", diff --git a/libavcodec/qsvenc_mpeg2.c b/libavcodec/qsvenc_mpeg2.c index fabf461fe3..ad3da6d672 100644 --- a/libavcodec/qsvenc_mpeg2.c +++ b/libavcodec/qsvenc_mpeg2.c @@ -105,6 +105,7 @@ const FFCodec ff_mpeg2_qsv_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c index a760e4932e..b247c39c86 100644 --- a/libavcodec/qsvenc_vp9.c +++ b/libavcodec/qsvenc_vp9.c @@ -117,6 +117,7 @@ const FFCodec ff_vp9_qsv_encoder = { AV_PIX_FMT_QSV, AV_PIX_FMT_XV30, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c index a6c167b1dc..7cbe820f9a 100644 --- a/libavcodec/roqvideoenc.c +++ b/libavcodec/roqvideoenc.c @@ -1128,6 +1128,7 @@ const FFCodec ff_roq_encoder = { .close = roq_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_JPEG, .p.priv_class = &roq_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 8a405b8686..2104ee0a24 100644 --- a/libavcodec/rv10enc.c +++ b/libavcodec/rv10enc.c @@ -78,4 +78,5 @@ const FFCodec ff_rv10_encoder = { .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, }; diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index dc26877d5e..d0e24f2f26 100644 --- a/libavcodec/rv20enc.c +++ b/libavcodec/rv20enc.c @@ -75,4 +75,5 @@ const FFCodec ff_rv20_encoder = { .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, }; diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index eac81d0d7c..0623c9d196 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -2146,6 +2146,7 @@ const FFCodec ff_snow_encoder = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &snowenc_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/speedhqenc.c b/libavcodec/speedhqenc.c index 4995b19f3b..81a5151b75 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -300,6 +300,7 @@ const FFCodec ff_speedhq_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .color_ranges = AVCOL_RANGE_MPEG, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c index 4065c9b21a..d969be25c1 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -747,5 +747,6 @@ const FFCodec ff_svq1_encoder = { .close = svq1_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV410P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/tiffenc.c b/libavcodec/tiffenc.c index 25539d03dc..5e65979c79 100644 --- a/libavcodec/tiffenc.c +++ b/libavcodec/tiffenc.c @@ -589,5 +589,6 @@ const FFCodec ff_tiff_encoder = { AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .p.priv_class = &tiffenc_class, }; diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c index b35b34d5a1..54b1caa9e3 100644 --- a/libavcodec/utvideoenc.c +++ b/libavcodec/utvideoenc.c @@ -675,5 +675,6 @@ const FFCodec ff_utvideo_encoder = { AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index e08db5d5d3..5770e87ea1 100644 --- a/libavcodec/v4l2_m2m_enc.c +++ b/libavcodec/v4l2_m2m_enc.c @@ -433,6 +433,7 @@ static const FFCodecDefault v4l2_m2m_defaults[] = { .close = v4l2_encode_close, \ .defaults = v4l2_m2m_defaults, \ .p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \ + .color_ranges = AVCOL_RANGE_MPEG, \ .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \ FF_CODEC_CAP_INIT_CLEANUP, \ .p.wrapper_name = "v4l2m2m", \ diff --git a/libavcodec/vaapi_encode_av1.c b/libavcodec/vaapi_encode_av1.c index 26a5707bf5..dfdb424185 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -1053,6 +1053,7 @@ const FFCodec ff_av1_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c index d156719728..84f306b95f 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -1397,6 +1397,7 @@ const FFCodec ff_h264_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_h265.c b/libavcodec/vaapi_encode_h265.c index bbd174f975..548029a645 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -1511,6 +1511,7 @@ const FFCodec ff_hevc_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_mjpeg.c b/libavcodec/vaapi_encode_mjpeg.c index 0ca8d676dd..7667845c3d 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -586,6 +586,7 @@ const FFCodec ff_mjpeg_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_mpeg2.c b/libavcodec/vaapi_encode_mpeg2.c index be801d21d2..30a333ecd4 100644 --- a/libavcodec/vaapi_encode_mpeg2.c +++ b/libavcodec/vaapi_encode_mpeg2.c @@ -710,6 +710,7 @@ const FFCodec ff_mpeg2_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG, .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_vp8.c b/libavcodec/vaapi_encode_vp8.c index 634b849cd2..b2576f4a45 100644 --- a/libavcodec/vaapi_encode_vp8.c +++ b/libavcodec/vaapi_encode_vp8.c @@ -264,6 +264,7 @@ const FFCodec ff_vp8_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .hw_configs = ff_vaapi_encode_hw_configs, .p.wrapper_name = "vaapi", }; diff --git a/libavcodec/vaapi_encode_vp9.c b/libavcodec/vaapi_encode_vp9.c index eac9be82b0..7ce24cb864 100644 --- a/libavcodec/vaapi_encode_vp9.c +++ b/libavcodec/vaapi_encode_vp9.c @@ -317,6 +317,7 @@ const FFCodec ff_vp9_vaapi_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .defaults = vaapi_encode_vp9_defaults, + .color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */ .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, diff --git a/libavcodec/vc2enc.c b/libavcodec/vc2enc.c index 7fa6ddc4ca..508defc0b9 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -1244,5 +1244,6 @@ const FFCodec ff_vc2_encoder = { FF_CODEC_ENCODE_CB(vc2_encode_frame), .p.priv_class = &vc2enc_class, .defaults = vc2enc_defaults, - .p.pix_fmts = allowed_pix_fmts + .p.pix_fmts = allowed_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, }; diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index f4070571d3..da7b291b03 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -2997,6 +2997,7 @@ const FFCodec ff_hevc_videotoolbox_encoder = { .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = hevc_pix_fmts, .defaults = vt_defaults, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .init = vtenc_init, FF_CODEC_ENCODE_CB(vtenc_frame), .close = vtenc_close, @@ -3037,6 +3038,7 @@ const FFCodec ff_prores_videotoolbox_encoder = { .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = prores_pix_fmts, .defaults = vt_defaults, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .init = vtenc_init, FF_CODEC_ENCODE_CB(vtenc_frame), .close = vtenc_close, diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 13ec2bf6ff..fded6f0e76 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -249,6 +249,7 @@ const FFCodec ff_wmv2_encoder = { FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), .close = ff_mpv_encode_end, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + .color_ranges = AVCOL_RANGE_MPEG, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, }; From patchwork Fri Aug 30 10:15:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51247 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp360072vqb; Fri, 30 Aug 2024 05:20:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWqvHYIu78B0S4ZeMp1XrWK2aVTX7Y3Viis2W8E9VjpLM2YAdfQeOVQGEbvzjYdutyXpUFFGhx8fXqlNaN/FHTS@gmail.com X-Google-Smtp-Source: AGHT+IExZr2NOu17HTFL02UqFiD/TECYJnhxEoq+oyHBFKjeorHd0g7RgCACBXC209FGFZ9nnDyl X-Received: by 2002:a2e:b8d6:0:b0:2ef:2f59:76e0 with SMTP id 38308e7fff4ca-2f61e0c2379mr7950941fa.9.1725020413856; Fri, 30 Aug 2024 05:20:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725020413; cv=none; d=google.com; s=arc-20240605; b=ZSpekmXyMHC9W7Bwkys/2eVYMBi6yusJm/AJAcZnz3UTf0WMXSf/qADFb926QB6RsN LbyFWzBHdxPTFDUDnqv0tuAm+S45HVxueOYF+LkPDNsSeJwxkr+MA8SYd+7udj+eaHFA ZpEhyeJF1tBioMa0GXVIsbDukE4RR9wdms5JCp50D/7bUpM9jBYR6lwt7GPeO5S76Jbc T0NXcQZrTGABmRK4H6jk9ztsKVwzRKlpXnBe/hLG4GyrzqR9Kj5ySJNp6MKd5hZmlntT U+Tig4pyzIM4j/Mg2FMppTPgeLMNW+2BWZ6RAxXEyVCPKAENl4KR4qa8Xf/bZOVvq2Jk MQgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=UFDkDgA+NIqY8ZaK/qnWtdGamTgBRd6Hf0gWWgfeVDo=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=gMszN1s2LBrL4z2gdmWJMhEsA/YbBigQnMQ3KDT7YScDngMubpc2n0JRZXq+Jak4KQ /7WTEWEU+S+37C7WzwqwqnfliHj3/u/GS/1Q2lM6wbu/gnSKaM0jOAPFuk9skxBC7KMg A0F0Efc84dP3IRbqam3hN475qFsAPatCo3LcTYSzkpzXsEWgEZt1w8r2OT+3joA4aZZs JO+FO1mLjLSneT2yN/5tLvcNyncICC7apnEJE6+pS7k+49+8k67HXV2LI3ojOU5+TNRJ oZDjq3nas25ryDTzne/I6seP1c5PM5A1AAf3X83KgqGYknIVaMDDIdoJemD3AkXfG6Bf su0Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Wt00Purc; 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 38308e7fff4ca-2f61516111dsi11647871fa.350.2024.08.30.05.20.12; Fri, 30 Aug 2024 05:20:13 -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=@haasn.xyz header.s=mail header.b=Wt00Purc; 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 0324068DBBC; Fri, 30 Aug 2024 13:24:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A2C9D68DB63 for ; Fri, 30 Aug 2024 13:24:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013448; bh=rmT0HDQjT7+7UHt8z12kCVqoBTbDDkjb/pWCXvovPaU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wt00PurcG2IGqK3jKSzT7Vx3h/xY4TEf3Q8oX/WdBPRYc73trNceWYNe7LYW5RJmm jBcGl+17GCaeNpnKGhyqwwkSzkL7Wb0O5mPhWejYT4cYNdAvvcsaEf7ECQIBWzaAS3 OCnzpJMXBFkLLQvi+jQORPDvavNnEEeHCoocLPYA= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4ED9442957; Fri, 30 Aug 2024 12:24:08 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:25 +0200 Message-ID: <20240830102402.18149-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 02/17] avcodec: add avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: PfQukb0FAtdd From: Niklas Haas This replaces the myriad of existing lists in AVCodec by a unified API call, allowing us to (ultimately) trim down the sizeof(AVCodec) quite substantially, while also making this more trivially extensible. In addition to the already covered lists, add two new entries for color space and color range, mirroring the newly added negotiable fields in libavfilter. Once the deprecation period passes for the existing public fields, the rough plan is to move the commonly used fields (such as pix_fmt/sample_fmt) into FFCodec, possibly as a union of audio and video configuration types, and then implement the rarely used fields with custom callbacks. --- doc/APIchanges | 5 ++ libavcodec/avcodec.c | 94 +++++++++++++++++++++++++++++++++++++ libavcodec/avcodec.h | 30 ++++++++++++ libavcodec/codec.h | 19 ++++++-- libavcodec/codec_internal.h | 27 +++++++++++ libavcodec/version.h | 2 +- 6 files changed, 172 insertions(+), 5 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 226c6f8b10..e81e8b1841 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,11 @@ The last version increases of all libraries were on 2024-03-07 API changes, most recent first: +2024-08-xx - xxxxxxxxxx - lavc 61.12.100 - avcodec.h + Add avcodec_get_supported_config() and enum AVCodecConfig; deprecate + AVCodec.pix_fmts, AVCodec.sample_fmts, AVCodec.supported_framerates, + AVCodec.supported_samplerates and AVCodec.ch_layouts. + 2024-08-xx - xxxxxxxxx - lavu 59.35.100 - opt.h Add av_opt_get_array_size() and av_opt_get_array(). diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index 6065f1b689..ad25e02613 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -28,6 +28,7 @@ #include "libavutil/avstring.h" #include "libavutil/bprint.h" #include "libavutil/channel_layout.h" +#include "libavutil/common.h" #include "libavutil/emms.h" #include "libavutil/fifo.h" #include "libavutil/imgutils.h" @@ -706,3 +707,96 @@ int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *fr return ff_decode_receive_frame(avctx, frame); return ff_encode_receive_frame(avctx, frame); } + +#define WRAP_CONFIG(allowed_type, field, terminator) \ + do { \ + static const __typeof__(*(field)) sentinel = terminator; \ + if (codec->type != (allowed_type)) \ + return AVERROR(EINVAL); \ + *out_configs = (field); \ + if (out_num_configs) { \ + for (int i = 0;; i++) { \ + if (!memcmp(&(field)[i], &sentinel, sizeof(sentinel))) { \ + *out_num_configs = i; \ + break; \ + } \ + } \ + } \ + return 0; \ + } while (0) + +static const enum AVColorRange color_range_jpeg[] = { + AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED +}; + +static const enum AVColorRange color_range_mpeg[] = { + AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED +}; + +static const enum AVColorRange color_range_all[] = { + AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED +}; + +static const enum AVColorRange *color_range_table[] = { + [AVCOL_RANGE_MPEG] = color_range_mpeg, + [AVCOL_RANGE_JPEG] = color_range_jpeg, + [AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG] = color_range_all, +}; + +int ff_default_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, + const void **out_configs, + int *out_num_configs) +{ + switch (config) { +FF_DISABLE_DEPRECATION_WARNINGS + case AV_CODEC_CONFIG_PIX_FORMAT: + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts, AV_PIX_FMT_NONE); + case AV_CODEC_CONFIG_FRAME_RATE: + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates, (AVRational){0}); + case AV_CODEC_CONFIG_SAMPLE_RATE: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates, 0); + case AV_CODEC_CONFIG_SAMPLE_FORMAT: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts, AV_SAMPLE_FMT_NONE); + case AV_CODEC_CONFIG_CHANNEL_LAYOUT: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts, (AVChannelLayout){0}); +FF_ENABLE_DEPRECATION_WARNINGS + + case AV_CODEC_CONFIG_COLOR_RANGE: + if (codec->type != AVMEDIA_TYPE_VIDEO) + return AVERROR(EINVAL); + *out_configs = color_range_table[ffcodec(codec)->color_ranges]; + if (out_num_configs) + *out_num_configs = av_popcount(ffcodec(codec)->color_ranges); + return 0; + + case AV_CODEC_CONFIG_COLOR_SPACE: + *out_configs = NULL; + if (out_num_configs) + *out_num_configs = 0; + return 0; + default: + return AVERROR(EINVAL); + } +} + +int avcodec_get_supported_config(const AVCodecContext *avctx, const AVCodec *codec, + enum AVCodecConfig config, unsigned flags, + const void **out, int *out_num) +{ + const FFCodec *codec2; + int dummy_num = 0; + if (!codec) + codec = avctx->codec; + if (!out_num) + out_num = &dummy_num; + + codec2 = ffcodec(codec); + if (codec2->get_supported_config) { + return codec2->get_supported_config(avctx, codec, config, flags, out, out_num); + } else { + return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); + } +} diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 7a67300134..376e130f7d 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2695,6 +2695,36 @@ int avcodec_get_hw_frames_parameters(AVCodecContext *avctx, enum AVPixelFormat hw_pix_fmt, AVBufferRef **out_frames_ref); +enum AVCodecConfig { + AV_CODEC_CONFIG_PIX_FORMAT, ///< AVPixelFormat, terminated by AV_PIX_FMT_NONE + AV_CODEC_CONFIG_FRAME_RATE, ///< AVRational, terminated by {0, 0} + AV_CODEC_CONFIG_SAMPLE_RATE, ///< int, terminated by 0 + AV_CODEC_CONFIG_SAMPLE_FORMAT, ///< AVSampleFormat, terminated by AV_SAMPLE_FMT_NONE + AV_CODEC_CONFIG_CHANNEL_LAYOUT, ///< AVChannelLayout, terminated by {0} + AV_CODEC_CONFIG_COLOR_RANGE, ///< AVColorRange, terminated by AVCOL_RANGE_UNSPECIFIED + AV_CODEC_CONFIG_COLOR_SPACE, ///< AVColorSpace, terminated by AVCOL_SPC_UNSPECIFIED +}; + +/** + * Retrieve a list of all supported values for a given configuration type. + * + * @param avctx An optional context to use. Values such as + * `strict_std_compliance` may affect the result. If NULL, + * default values are used. + * @param codec The codec to query, or NULL to use avctx->codec. + * @param config The configuration to query. + * @param flags Currently unused; should be set to zero. + * @param out_configs On success, set to a list of configurations, terminated + * by a config-specific terminator, or NULL if all + * possible values are supported. + * @param out_num_configs On success, set to the number of elements in + *out_configs, excluding the terminator. Optional. + */ +int avcodec_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, enum AVCodecConfig config, + unsigned flags, const void **out_configs, + int *out_num_configs); + /** diff --git a/libavcodec/codec.h b/libavcodec/codec.h index 6f9b42760d..f7541ffc42 100644 --- a/libavcodec/codec.h +++ b/libavcodec/codec.h @@ -205,10 +205,19 @@ typedef struct AVCodec { */ int capabilities; uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 + + /** + * Deprecated codec capabilities. + */ + attribute_deprecated + const AVRational *supported_framerates; ///< @deprecated use avcodec_get_supported_config() + attribute_deprecated + const enum AVPixelFormat *pix_fmts; ///< @deprecated use avcodec_get_supported_config() + attribute_deprecated + const int *supported_samplerates; ///< @deprecated use avcodec_get_supported_config() + attribute_deprecated + const enum AVSampleFormat *sample_fmts; ///< @deprecated use avcodec_get_supported_config() + const AVClass *priv_class; ///< AVClass for the private context const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN} @@ -226,7 +235,9 @@ typedef struct AVCodec { /** * Array of supported channel layouts, terminated with a zeroed layout. + * @deprecated use avcodec_get_supported_config() */ + attribute_deprecated const AVChannelLayout *ch_layouts; } AVCodec; diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 6fdd261066..84a4376753 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -22,6 +22,7 @@ #include #include "libavutil/attributes.h" +#include "avcodec.h" #include "codec.h" #include "config.h" @@ -269,8 +270,34 @@ typedef struct FFCodec { * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. */ const uint32_t *codec_tags; + + /** + * Custom callback for avcodec_get_supported_config(). If absent, + * ff_default_get_supported_config() will be used. `out_num_configs` will + * always be set to a valid pointer. + */ + int (*get_supported_config)(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, + const void **out_configs, + int *out_num_configs); } FFCodec; +/** + * Default implementation for avcodec_get_supported_config(). Will return the + * relevant fields from AVCodec if present, or NULL otherwise. + * + * For AVCODEC_CONFIG_COLOR_RANGE, the output will depend on the bitmask in + * FFCodec.color_ranges, with a value of 0 returning NULL. + */ +int ff_default_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, + const void **out_configs, + int *out_num_configs); + #if CONFIG_SMALL #define CODEC_LONG_NAME(str) .p.long_name = NULL #else diff --git a/libavcodec/version.h b/libavcodec/version.h index 8b53586be1..da2264a097 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 11 +#define LIBAVCODEC_VERSION_MINOR 12 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ From patchwork Fri Aug 30 10:15:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51233 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp299889vqb; Fri, 30 Aug 2024 03:24:54 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX/bRQSGZgB5OWiG47xMrNNM0Yr7nOugp/dpLI+LKW9w53J1DK+MWLTLRktzmliF4wLV+kDEnzLQ65vRo7NTPFB@gmail.com X-Google-Smtp-Source: AGHT+IFMsFieBpiGz9MdhiWjKkhtPEMffZfii6TIz9BIDpNS3eULw6ooMy59YPeEV6ZpEJ5c3/WT X-Received: by 2002:a05:6512:3188:b0:52e:f58b:65ee with SMTP id 2adb3069b0e04-53546bab08amr1326772e87.57.1725013494220; Fri, 30 Aug 2024 03:24:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725013494; cv=none; d=google.com; s=arc-20240605; b=EMkPba+YT8EWNVAoAZU3fBM97Va4nUe+R00k6cWiusZxJSnvkHY4TyB9CjAsgOCkV0 ViwpkeqWB6oJFL+LL2TStsbM8h3/6JfgqxTTCFTZWwSRCwzEFU/94Au7IlQxnCQ/h6mI NuA+f62pbJp4ocTRekEP0Ddli4cxmXl77ZOGK5YQhbkrEMGvqhARh7wz+eb+75GQdH+B dG0A77PGNST8kroH0lu0k8rddzsTMl6jZlVEJLnDZX00r9mE+VJZ+lJk1HI2XEVC0gAd 7VmPUNABDbP1TCsz9JHuybXcue7NHlEJWjlerFxOjeuWQJg0lThEs+zDVLTbXNIPyZ4A h7xA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=SIob+fQNlKEdzuxioQfeedCaczuZICR3bSU1CaidimM=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=CA8we8SCTSg/jKmm9hNCq33NcNwpV+DIEJOkeG0+0nrv1Rj00tnqmRdjRSM+AaExf0 nIenP/zA0G9oQbeGAuz89UNepvRBHB+ZqbzUQyLHp798lSvBsmk0vPVMeVjamyZ60c7N /p8zxTRzD/M1wxwt3H6PqEcsGFrD45HTAfsFm7a64WrOzC78/Z/0nEqRm2lU1Y1pE1CK bJC0vR9NQcRMrtHucRnMqpEfthQPvB8MxbPGzSNyu+EQLsp0F5e0zpHbpcHDOUJYMHVl PHKHKv6FojGolODpeoHJo3TU1uTGVqN+W1Kn+PD22D+2hyrmyQzz8qgcxJ0C84YL8sAs NFcw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ELA44RJO; 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-a898912d6b5si281911366b.284.2024.08.30.03.24.53; Fri, 30 Aug 2024 03:24:54 -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=@haasn.xyz header.s=mail header.b=ELA44RJO; 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 56A2768DBF4; Fri, 30 Aug 2024 13:24:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D9B2168DB63 for ; Fri, 30 Aug 2024 13:24:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013448; bh=PL//jY9jmb91knPl0XVwBFqixbZJW+F+Ai/xxGO7Sag=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ELA44RJONO/feCw+21lrgWZm/ya3WpIscmuDIVuqbKfz7B2MQ9tV3vCWoz1fVZOKs IxuXgZz3kCoX1kedeN4nxFcJshyuGFiCGOCiyUxM/rhis3tNtE6q/JB9F6/pMgvIa6 u+NBfmMuN9pyl6OHo1g/7iF0gHDsrCjd7qnt4CKk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 8C05542A6E; Fri, 30 Aug 2024 12:24:08 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:26 +0200 Message-ID: <20240830102402.18149-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 03/17] avcodec/encode: switch to avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: u7j5H8eNoKe3 From: Niklas Haas --- libavcodec/encode.c | 90 ++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 33 deletions(-) diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 34658d13d0..bc5acf985d 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -563,7 +563,8 @@ static int encode_preinit_video(AVCodecContext *avctx) { const AVCodec *c = avctx->codec; const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt); - int i; + const enum AVPixelFormat *pix_fmts; + int ret, i, num_pix_fmts; if (!av_get_pix_fmt_name(avctx->pix_fmt)) { av_log(avctx, AV_LOG_ERROR, "Invalid video pixel format: %d\n", @@ -571,28 +572,33 @@ static int encode_preinit_video(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (c->pix_fmts) { - for (i = 0; c->pix_fmts[i] != AV_PIX_FMT_NONE; i++) - if (avctx->pix_fmt == c->pix_fmts[i]) + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, + 0, (const void **) &pix_fmts, &num_pix_fmts); + if (ret < 0) + return ret; + + if (pix_fmts) { + for (i = 0; i < num_pix_fmts; i++) + if (avctx->pix_fmt == pix_fmts[i]) break; - if (c->pix_fmts[i] == AV_PIX_FMT_NONE) { + if (i == num_pix_fmts) { av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is not supported by the %s encoder.\n", av_get_pix_fmt_name(avctx->pix_fmt), c->name); av_log(avctx, AV_LOG_ERROR, "Supported pixel formats:\n"); - for (int p = 0; c->pix_fmts[p] != AV_PIX_FMT_NONE; p++) { + for (int p = 0; pix_fmts[p] != AV_PIX_FMT_NONE; p++) { av_log(avctx, AV_LOG_ERROR, " %s\n", - av_get_pix_fmt_name(c->pix_fmts[p])); + av_get_pix_fmt_name(pix_fmts[p])); } return AVERROR(EINVAL); } - if (c->pix_fmts[i] == AV_PIX_FMT_YUVJ420P || - c->pix_fmts[i] == AV_PIX_FMT_YUVJ411P || - c->pix_fmts[i] == AV_PIX_FMT_YUVJ422P || - c->pix_fmts[i] == AV_PIX_FMT_YUVJ440P || - c->pix_fmts[i] == AV_PIX_FMT_YUVJ444P) + if (pix_fmts[i] == AV_PIX_FMT_YUVJ420P || + pix_fmts[i] == AV_PIX_FMT_YUVJ411P || + pix_fmts[i] == AV_PIX_FMT_YUVJ422P || + pix_fmts[i] == AV_PIX_FMT_YUVJ440P || + pix_fmts[i] == AV_PIX_FMT_YUVJ444P) avctx->color_range = AVCOL_RANGE_JPEG; } @@ -646,7 +652,10 @@ FF_ENABLE_DEPRECATION_WARNINGS static int encode_preinit_audio(AVCodecContext *avctx) { const AVCodec *c = avctx->codec; - int i; + const enum AVSampleFormat *sample_fmts; + const int *supported_samplerates; + const AVChannelLayout *ch_layouts; + int ret, i, num_sample_fmts, num_samplerates, num_ch_layouts; if (!av_get_sample_fmt_name(avctx->sample_fmt)) { av_log(avctx, AV_LOG_ERROR, "Invalid audio sample format: %d\n", @@ -659,53 +668,68 @@ static int encode_preinit_audio(AVCodecContext *avctx) return AVERROR(EINVAL); } - if (c->sample_fmts) { - for (i = 0; c->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) { - if (avctx->sample_fmt == c->sample_fmts[i]) + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_SAMPLE_FORMAT, + 0, (const void **) &sample_fmts, + &num_sample_fmts); + if (ret < 0) + return ret; + if (sample_fmts) { + for (i = 0; i < num_sample_fmts; i++) { + if (avctx->sample_fmt == sample_fmts[i]) break; if (avctx->ch_layout.nb_channels == 1 && av_get_planar_sample_fmt(avctx->sample_fmt) == - av_get_planar_sample_fmt(c->sample_fmts[i])) { - avctx->sample_fmt = c->sample_fmts[i]; + av_get_planar_sample_fmt(sample_fmts[i])) { + avctx->sample_fmt = sample_fmts[i]; break; } } - if (c->sample_fmts[i] == AV_SAMPLE_FMT_NONE) { + if (i == num_sample_fmts) { av_log(avctx, AV_LOG_ERROR, "Specified sample format %s is not supported by the %s encoder\n", av_get_sample_fmt_name(avctx->sample_fmt), c->name); av_log(avctx, AV_LOG_ERROR, "Supported sample formats:\n"); - for (int p = 0; c->sample_fmts[p] != AV_SAMPLE_FMT_NONE; p++) { + for (int p = 0; sample_fmts[p] != AV_SAMPLE_FMT_NONE; p++) { av_log(avctx, AV_LOG_ERROR, " %s\n", - av_get_sample_fmt_name(c->sample_fmts[p])); + av_get_sample_fmt_name(sample_fmts[p])); } return AVERROR(EINVAL); } } - if (c->supported_samplerates) { - for (i = 0; c->supported_samplerates[i] != 0; i++) - if (avctx->sample_rate == c->supported_samplerates[i]) + + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_SAMPLE_RATE, + 0, (const void **) &supported_samplerates, + &num_samplerates); + if (ret < 0) + return ret; + if (supported_samplerates) { + for (i = 0; i < num_samplerates; i++) + if (avctx->sample_rate == supported_samplerates[i]) break; - if (c->supported_samplerates[i] == 0) { + if (i == num_samplerates) { av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported by the %s encoder\n", avctx->sample_rate, c->name); av_log(avctx, AV_LOG_ERROR, "Supported sample rates:\n"); - for (int p = 0; c->supported_samplerates[p]; p++) - av_log(avctx, AV_LOG_ERROR, " %d\n", c->supported_samplerates[p]); + for (int p = 0; supported_samplerates[p]; p++) + av_log(avctx, AV_LOG_ERROR, " %d\n", supported_samplerates[p]); return AVERROR(EINVAL); } } - if (c->ch_layouts) { - for (i = 0; c->ch_layouts[i].nb_channels; i++) { - if (!av_channel_layout_compare(&avctx->ch_layout, &c->ch_layouts[i])) + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_CHANNEL_LAYOUT, + 0, (const void **) &ch_layouts, &num_ch_layouts); + if (ret < 0) + return ret; + if (ch_layouts) { + for (i = 0; i < num_ch_layouts; i++) { + if (!av_channel_layout_compare(&avctx->ch_layout, &ch_layouts[i])) break; } - if (!c->ch_layouts[i].nb_channels) { + if (i == num_ch_layouts) { char buf[512]; int ret = av_channel_layout_describe(&avctx->ch_layout, buf, sizeof(buf)); av_log(avctx, AV_LOG_ERROR, @@ -713,8 +737,8 @@ static int encode_preinit_audio(AVCodecContext *avctx) ret > 0 ? buf : "?", c->name); av_log(avctx, AV_LOG_ERROR, "Supported channel layouts:\n"); - for (int p = 0; c->ch_layouts[p].nb_channels; p++) { - ret = av_channel_layout_describe(&c->ch_layouts[p], buf, sizeof(buf)); + for (int p = 0; ch_layouts[p].nb_channels; p++) { + ret = av_channel_layout_describe(&ch_layouts[p], buf, sizeof(buf)); av_log(avctx, AV_LOG_ERROR, " %s\n", ret > 0 ? buf : "?"); } return AVERROR(EINVAL); From patchwork Fri Aug 30 10:15:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51235 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp299942vqb; Fri, 30 Aug 2024 03:25:04 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVnfYrlRRIjZm810LWim6MYvVjetbQMN+r2QdTeb5/Reuim16d0gkCqyPmi3fGcrS00sAkxclbKzjTyN3HlPT1S@gmail.com X-Google-Smtp-Source: AGHT+IEs3Ggq33nUdZ7v7n8f+7D6L5BUFCGRehlJTmwNxuWtX4C7h73aUQy1wd/+lbJ4e2vOMx+r X-Received: by 2002:a2e:a983:0:b0:2ef:80:a68c with SMTP id 38308e7fff4ca-2f61e0c610bmr6414041fa.8.1725013503984; Fri, 30 Aug 2024 03:25:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725013503; cv=none; d=google.com; s=arc-20240605; b=Dq4DJkyCHCuzO8OwD6JF0yXUm/YbqBfYlrYdblD+dNnRNFqbxTFkBqqjhHKRP/BYTd 02YhE5UmScYWQLwiDnLB0hEOiBkSKyBGuV0NtzqaF8X3aejx0aaWtnv8MIigS1tdNlHg 1g1TyGGHjZng9BMkLpKM9gjQgJ9jj54D3xNISF9jMyRHanI3mUeA1nVfYlSe9IT6anAT CsXRM2PR3tWqOW3lqQe7S5dPDdHc0YHxf79Snxpf4stZ87u5BYcX84d5F45q9bt/Vuh4 49SUowbH9OTQfYDSE7Z8NVx0dAfX01XAdn5MrCp6jbB0xtu3hrre5pTPp2nFko+fe0QL iVlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=Vhw4tE1VxZHOXf3rjrZQgGxDQNJdCGzQEZgVcPTIzu4=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=TGZTx1v2kYtpoXm2FxY/EQtrtgLVNMYX7QDHqFp1pTkRS1JdgzYdY1m+HsXQZkhZjH G2FOmFa5AX8AQ5tC3qSO+YUfGvoUFzGOXKReF6sFBFCDpDhzqSoPXuge4DT8iifxDrVt 916/cPAiahhlgoPHgviDBKiP8/ncSblCIXFuzCQMt6GJOowotOfgDLMpx/WDRjqpD46T +1Mn1pXb8l6uUb6AXdCw596KDw03Bj/sDUwBtIZywUp58DvHbFmC1CR2zNhp4P/2yl/5 Npsw+w/p77IPWnt23+PXBrMhZ+Yjrl00ZojxfumkW3SGA/nYOmQ0H4KQ2aYDlj/RVowl EGcQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b="jvL2/5FI"; 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-5c226c72533si2701308a12.39.2024.08.30.03.25.03; Fri, 30 Aug 2024 03:25:03 -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=@haasn.xyz header.s=mail header.b="jvL2/5FI"; 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 7D25468DBC2; Fri, 30 Aug 2024 13:24:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1625F68DB63 for ; Fri, 30 Aug 2024 13:24:09 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013448; bh=otADzWjHmd0MuzFh6Vgaw1WIdaXk1HlZs5XbSVeJgDU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jvL2/5FIY8dklRINPO2HDkqRfAYOg0fOpa633BDNOq2nUzlH9Id5lZs+LF/k0HzQt kceiNj1n/+3Og2MA9119S0F3AdvK9VW3Rke2tLRwg9Pw0xFCvELyoT4/3yo8RDDsi7 75WgSiH/vLChNn0WzH6h+ywUTWB1FlBPwrM0/Hhk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id C7E8842B25; Fri, 30 Aug 2024 12:24:08 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:27 +0200 Message-ID: <20240830102402.18149-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 04/17] avcodec/allcodecs: add backcompat for new config API X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KT8mx2U+YLxO From: Niklas Haas In order to avoid breaking older clients not yet using the new API, we need to add backwards compatibility for codecs which have switched from init_static() to get_supported_config(). This function can be removed entirely once the deprecated static fields are removed. --- libavcodec/allcodecs.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 09385be4ee..60b1278830 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -910,8 +910,45 @@ static AVOnce av_codec_static_init = AV_ONCE_INIT; static void av_codec_init_static(void) { for (int i = 0; codec_list[i]; i++) { - if (codec_list[i]->init_static_data) - codec_list[i]->init_static_data((FFCodec*)codec_list[i]); + const FFCodec *codec = codec_list[i]; + if (codec->init_static_data) { + codec->init_static_data((FFCodec*) codec); + continue; + } + + /* Backward compatibility with deprecated public fields */ + if (!codec->get_supported_config) + continue; + +FF_DISABLE_DEPRECATION_WARNINGS + switch (codec->p.type) { + case AVMEDIA_TYPE_VIDEO: + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_PIX_FORMAT, 0, + (const void **) &codec->p.pix_fmts, NULL); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_FRAME_RATE, 0, + (const void **) &codec->p.supported_framerates, + NULL); + break; + case AVMEDIA_TYPE_AUDIO: + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, + (const void **) &codec->p.sample_fmts, + NULL); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_SAMPLE_RATE, 0, + (const void **) &codec->p.supported_samplerates, + NULL); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, + (const void **) &codec->p.ch_layouts, + NULL); + break; + default: + break; + } +FF_ENABLE_DEPRECATION_WARNINGS } } From patchwork Fri Aug 30 10:15:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51241 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304815vqb; Fri, 30 Aug 2024 03:35:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWBGTcR7G0jYAmaUWXEgmlwkRgf0e1ZiNuqTws0ok7SLvWUZ89RiU8Ati7cSauE+qIbFoGoyh2oECtVCiaBy+Jp@gmail.com X-Google-Smtp-Source: AGHT+IGOTOZwH1+G9rusYelzsyuH7djEawEs8gUx1Gpl4nmqW6Ut3pgYACzJ3Aam3XkzS000mEay X-Received: by 2002:a17:907:1c1f:b0:a7a:9e11:e875 with SMTP id a640c23a62f3a-a89a3775f6dmr68755266b.6.1725014122844; Fri, 30 Aug 2024 03:35:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014122; cv=none; d=google.com; s=arc-20240605; b=CCOajhMgjYuBLY59F+8bG1G0nNKjmqbdzzh+p0iTXhySTMAr7xpFJEx+/grQsn8KZZ cgf0VD7gDy93CZbatvI6ArrifOUw9F/OMNfYiYQWuTES0V16w7bhSsVpizGtpQvYZ8jI 5ApByMBdGU16Eczqd1JhY5IoX9zyc2eH0IkaflhCDvNJ3x2fS58F86wASiqdwZbbVXLk pjm79+9+ooKJbd8xCZBXBO7QjZkTl/ppI6gZK00yRpQz6BtH2TT0QXAgR0HJ720EnGv+ XYfRcIdNfroqpSnTZIMVrgLpSweHy/04l/GbZjljrksUtVwr69yZI1ir4dSn6+7LRXZK oh6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=Upz3shGyxKBodoz1e/5PlEzfqEVermIyE2WqKqJIY+o=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=ZRU4RU6/GY7Vr+0FjWbW9N7sAvtLOXwZTMhqCBeJ10nSDotU8OfuMF326zkx3BBIQ3 g5g/iOHNUjNb/BZXqiv0tE1hzbg0b1YKEiP87ixN8Y72s1q8HT8KkYNfL0QfLThMTkQm tTsXKMRTSmu7kZYeex+m+9kYcFzmwLs4xy2Mamoq+aW+G7vQw7AAfwug4wgY9gNferMj qUcL4uP4mZc4CPAEmPdvUVMjg+M9BUn0rriJZqujA07EO9HKse4N25weR3QLPx/W4juL B1ap3GvS86c8oa0lhAqhK40HnIx7BRA8sDfHFHfezw6KIEg1VXRETb6Ioi1rJK+MFAXz haNQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=jATcIp3l; 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-a8988f3f73esi274767666b.154.2024.08.30.03.35.22; Fri, 30 Aug 2024 03:35:22 -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=@haasn.xyz header.s=mail header.b=jATcIp3l; 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 AFF9D68DC62; Fri, 30 Aug 2024 13:24:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B847668DB79 for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013449; bh=MRT6IG8NPkXk2I6DDMH88MZutbwxDwmmHrlGAY5Aizc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jATcIp3lrCzeFUjl0IiBKnEUSgYk5lnSFUnHbEpcCJaBH8afeGofkh/vQKQscLna+ Hdq3EMsewu9zFZSX8QgJ0A9ey5K10edMzb8DX3zwOID78iIrWI6/Ovl0xivaOD0r+A QdzilvLlZyZw6CWu14JjwJY23OWWkJwH+fsjkecw= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 0DAD843374; Fri, 30 Aug 2024 12:24:09 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:28 +0200 Message-ID: <20240830102402.18149-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 05/17] avcodec/libx265: switch to get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Hulc6YwzWLti From: Niklas Haas --- libavcodec/libx265.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index de0ad03ee3..513f473307 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -949,14 +949,28 @@ static const enum AVPixelFormat x265_csp_twelve[] = { AV_PIX_FMT_NONE }; -static av_cold void libx265_encode_init_csp(FFCodec *codec) +static int libx265_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, const void **out, + int *out_num) { - if (x265_api_get(12)) - codec->p.pix_fmts = x265_csp_twelve; - else if (x265_api_get(10)) - codec->p.pix_fmts = x265_csp_ten; - else if (x265_api_get(8)) - codec->p.pix_fmts = x265_csp_eight; + if (config == AV_CODEC_CONFIG_PIX_FORMAT) { + if (x265_api_get(12)) { + *out = x265_csp_twelve; + *out_num = FF_ARRAY_ELEMS(x265_csp_twelve) - 1; + } else if (x265_api_get(10)) { + *out = x265_csp_ten; + *out_num = FF_ARRAY_ELEMS(x265_csp_ten) - 1; + } else if (x265_api_get(8)) { + *out = x265_csp_eight; + *out_num = FF_ARRAY_ELEMS(x265_csp_eight) - 1; + } else + return AVERROR_EXTERNAL; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); } #define OFFSET(x) offsetof(libx265Context, x) @@ -1013,7 +1027,7 @@ FFCodec ff_libx265_encoder = { .p.priv_class = &class, .p.wrapper_name = "libx265", .init = libx265_encode_init, - .init_static_data = libx265_encode_init_csp, + .get_supported_config = libx265_get_supported_config, FF_CODEC_ENCODE_CB(libx265_encode_frame), .close = libx265_encode_close, .priv_data_size = sizeof(libx265Context), From patchwork Fri Aug 30 10:15:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51248 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp360080vqb; Fri, 30 Aug 2024 05:20:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXGuGgpv8Pl80aU8cUfXc+R2LnuC0IlsEvc/6hDqNcCHqMzQYx9Ys6txXh66j86qdxHCtjTbE7twCzBO8iFtq2t@gmail.com X-Google-Smtp-Source: AGHT+IEfKXnZtU4tvDyofggMEEDdZs33996UlStYxBHFH5hJkV71yhCMVXyzpdBMeeEQV2ChRgsZ X-Received: by 2002:a2e:a545:0:b0:2f3:f4e2:869c with SMTP id 38308e7fff4ca-2f6108ad29dmr44496711fa.44.1725020414762; Fri, 30 Aug 2024 05:20:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725020414; cv=none; d=google.com; s=arc-20240605; b=SuwA/8UgF8ew+Zx8HwpOqQwLWgWzFzDfJclE70g3b7tzsTAdH3TAESaVcGjp+rqH/k btTLgsC9MqeJ2lAyOZ72gePW8vPjsK3QIsDka4/VVpgCYHM0F00iTOu4dLO7+101HERp lfG6fRu8VNaW1NapNXawGqaaS7UtdBsYEf+0krNZBEposSqVbaF6hPRfdh6Ffx36dHkj xo0qZpDIsBz+f1GO1Ato+2UFczzxa8PGs7ik/wQ2pYekThCVne7X7chqI2nxZxyNHsEl rCP+8re/5xmGtVnp7SfWN1fCPmK8O4w2EqcekHKu2X3O2Mz6DoSeSwwJngHvhYj9LvbD Dudw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=bqKFLR+V2pnxLfGr5U+zDRq1ISd2P66tjGSdbtaHMzQ=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=hf3oz4jOX6amgyUA8ZhBdwkVi8rV7i8mZhJ5wmyB9RFKpThNdDNFP2bOlUOv0ooaLS p+HnGrKTwqC3L6OCOSDl3FrTsuVIeigqqdalWU82okj92eQHE7aowzG1dr+38DVvQirD GqNJzS3ZWK1dqQIn/hJgtALaMuclQPu06PZuFq/PqDU+nnZeKXEiX9SaajfV5mI1EX8d 5uZDW6bVKwwph1Hvonu5kaztiL5WusBYjBvCzF3mUdqWuwSA18JBnuQLsxMGod9A+Fx+ 0c5kdFZx1KsaYUK4yjcVUaHDY4fFhODfDjomI2Da80RxETyNvle0BiqMdekKj6BBRsrf gOUA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=t5Z4Ok2L; 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 38308e7fff4ca-2f61518abb0si12542851fa.645.2024.08.30.05.20.14; Fri, 30 Aug 2024 05:20:14 -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=@haasn.xyz header.s=mail header.b=t5Z4Ok2L; 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 CBE0F68DC75; Fri, 30 Aug 2024 13:24:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B5D9A68DBCA for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013449; bh=I+77vsy/A8XtXB1zzf2JpBwljIP74Rsw11e1avpO0p4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t5Z4Ok2LOLSqTjIIgUasmaS6Fw5hk1Wiw2zpBGQnwqFsLwJxJjcV8r/PUaBdwpImG DIBZVStsOxh7jGUWSYjo98pQ2Uw6v7q+ZbRsTZZvtwQdq6iqSuropWJj19r2gqEcMD W2H+mweCRtSepMwZ/qLdswkh3NsfIYqf7ApOnqb8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 4774C43F91; Fri, 30 Aug 2024 12:24:09 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:29 +0200 Message-ID: <20240830102402.18149-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 06/17] avcodec/libvpxenc: switch to get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: M4reUwW8vJXh From: Niklas Haas --- libavcodec/libvpxenc.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 1d5e9c33e8..228ede7c84 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -2088,13 +2088,25 @@ static const enum AVPixelFormat vp9_pix_fmts_highbd[] = { AV_PIX_FMT_NONE }; -static av_cold void vp9_init_static(FFCodec *codec) +static int vp9_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, const void **out, + int *out_num) { - vpx_codec_caps_t codec_caps = vpx_codec_get_caps(vpx_codec_vp9_cx()); - if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) - codec->p.pix_fmts = vp9_pix_fmts_highbd; - else - codec->p.pix_fmts = vp9_pix_fmts_highcol; + if (config == AV_CODEC_CONFIG_PIX_FORMAT) { + vpx_codec_caps_t codec_caps = vpx_codec_get_caps(vpx_codec_vp9_cx()); + if (codec_caps & VPX_CODEC_CAP_HIGHBITDEPTH) { + *out = vp9_pix_fmts_highbd; + *out_num = FF_ARRAY_ELEMS(vp9_pix_fmts_highbd) - 1; + } else { + *out = vp9_pix_fmts_highcol; + *out_num = FF_ARRAY_ELEMS(vp9_pix_fmts_highcol) - 1; + } + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); } static const AVClass class_vp9 = { @@ -2124,6 +2136,6 @@ FFCodec ff_libvpx_vp9_encoder = { FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, .defaults = defaults, - .init_static_data = vp9_init_static, + .get_supported_config = vp9_get_supported_config, }; #endif /* CONFIG_LIBVPX_VP9_ENCODER */ From patchwork Fri Aug 30 10:15:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51244 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp311380vqb; Fri, 30 Aug 2024 03:50:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW+Yiuui+U9uOFIe4nSzAFonUbjb5vU2AmTWY9mZ7Lupn8iRPqHRmN1pVNUOvm43/nWwuITlQm/wcAh9SCntU2l@gmail.com X-Google-Smtp-Source: AGHT+IGPNdojG6w7mjSObqJVEjhVpNuafH14jwuYmo97F1DOqVN5dXsWVtIMNFwYjD21TyAA+XK8 X-Received: by 2002:a05:651c:b24:b0:2f0:25dc:186d with SMTP id 38308e7fff4ca-2f6105b5d76mr44545231fa.1.1725015023362; Fri, 30 Aug 2024 03:50:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725015023; cv=none; d=google.com; s=arc-20240605; b=ZMDf2pCVA3HuxNLEKCTXW7kOu5EaDYvBrRjnvZINb+oNEL4oGU26PUcd71bOHo3tRB yee+MtkREJnkx+lVg+ol2kJXq5bQwhgK67VfPdzAgen5uRrzgLZVP07xwCYzKvvKjmKP alo44hvXYNEt/v8M763R3bymo9brh61sBKza4PJeyheQnYRhR3eDCPM58zYKVZobNsb+ yX2F3E1HFUlL71kEwNfTKPuHo2E8My+Ca7ZzeugT4H2ObQBiv7ihMz9lxroEabXaavro gi3elrUBX6vzEdkOwm0mhLc9g8cIzp+tx5KSMNc+P8DyOaxvR6AssTQNCPPJ+iw8mfbt lEvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=mobSvPCCjmZQlXGuSpKqqhOL7+UIE2GqiAIqEizNRes=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=DnNg3Xu1BNpLaI1BlmoUq0EDGdw2NZ+jp6H5XARYw/WEIV1paf71y1hpXQ5Bb57+9s QR5cHrkL+XaU3Z966q42owRBbQ+uK9RLnbiwcgdGaU2AoNZQGFD9IUh6OExQKFYxTGDZ LF7mJ0LChgkJ+WSHd2haSNotj6s6444bsR/PMWjk4RbOevvI8rIPK7A/WYy3bdR+z4Dt VWRSGfPW54Yjxzp0zOCFphAxXawCuA5dHm7x15ngZq0b3Hgyvyi3t1wjhXc6UK5Lt1+X C3w/ZtdBQkGhKEW3mLN2Fj8IB3CCEdsilc4SqA1qKubs6BvK2tAls34EbJfjTNObhHZp zKng==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=iIwPC1XE; 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 38308e7fff4ca-2f615161e8bsi11332811fa.356.2024.08.30.03.50.22; Fri, 30 Aug 2024 03:50:23 -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=@haasn.xyz header.s=mail header.b=iIwPC1XE; 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 8198A68DC85; Fri, 30 Aug 2024 13:24:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BF5C368DBCC for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013449; bh=0Yn+CoQlaFDsoLQCU1ZdoBLFxe5IrBwVxLwJY6QD670=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iIwPC1XE7nPeYHVEtuRngz7p9pETcmPVVmjG9mGOS83w3kxGvNekvWvUuLNXAlbTc +RbZXcpqALwCOQZC9YIaHu6P0bbKL24Hc//+B6E18theU0T67hOcC86Rmcdu8DEZZM LR1rw8D06ozrJs9YNQLaBqBWyvzgpfsyv7vRnQxI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 81D8C441F2; Fri, 30 Aug 2024 12:24:09 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:30 +0200 Message-ID: <20240830102402.18149-8-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 07/17] avcodec/libaomenc: switch to get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: IzGNetWiBHqB From: Niklas Haas --- libavcodec/libaomenc.c | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 32bda992cb..0f7571ee7a 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1427,16 +1427,36 @@ static const enum AVPixelFormat av1_pix_fmts_highbd_with_gray[] = { AV_PIX_FMT_NONE }; -static av_cold void av1_init_static(FFCodec *codec) +static int av1_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, const void **out, + int *out_num) { - int supports_monochrome = aom_codec_version() >= 20001; - aom_codec_caps_t codec_caps = aom_codec_get_caps(aom_codec_av1_cx()); - if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) - codec->p.pix_fmts = supports_monochrome ? av1_pix_fmts_highbd_with_gray : - av1_pix_fmts_highbd; - else - codec->p.pix_fmts = supports_monochrome ? av1_pix_fmts_with_gray : - av1_pix_fmts; + if (config == AV_CODEC_CONFIG_PIX_FORMAT) { + int supports_monochrome = aom_codec_version() >= 20001; + aom_codec_caps_t codec_caps = aom_codec_get_caps(aom_codec_av1_cx()); + if (codec_caps & AOM_CODEC_CAP_HIGHBITDEPTH) { + if (supports_monochrome) { + *out = av1_pix_fmts_highbd_with_gray; + *out_num = FF_ARRAY_ELEMS(av1_pix_fmts_highbd_with_gray) - 1; + } else { + *out = av1_pix_fmts_highbd; + *out_num = FF_ARRAY_ELEMS(av1_pix_fmts_highbd) - 1; + } + } else { + if (supports_monochrome) { + *out = av1_pix_fmts_with_gray; + *out_num = FF_ARRAY_ELEMS(av1_pix_fmts_with_gray) - 1; + } else { + *out = av1_pix_fmts; + *out_num = FF_ARRAY_ELEMS(av1_pix_fmts) - 1; + } + } + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); } static av_cold int av1_init(AVCodecContext *avctx) @@ -1560,5 +1580,5 @@ FFCodec ff_libaom_av1_encoder = { FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS, .defaults = defaults, - .init_static_data = av1_init_static, + .get_supported_config = av1_get_supported_config, }; From patchwork Fri Aug 30 10:15:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51234 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304712vqb; Fri, 30 Aug 2024 03:35:09 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWXOvLjqLYtXNRslHw/511f8e3xr+4ZmIZWkVS2fcpMvmfKg3o+9OVATr0dCoZX7kUnLxi4n691ic5WRHrkljsL@gmail.com X-Google-Smtp-Source: AGHT+IHFRajo/HC4qpl1i4KS2ZQrx999amB1Rd66+dX0MLNrhi6SK7x6t75xU5rOtYY8PggyJSxB X-Received: by 2002:a17:907:7b94:b0:a7a:87b3:722f with SMTP id a640c23a62f3a-a89a34c8c79mr89690966b.3.1725014109123; Fri, 30 Aug 2024 03:35:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014109; cv=none; d=google.com; s=arc-20240605; b=EdrhLJare7wZ7BaDvcJpaYNzm348z6xL+BoM5PP6OMNFyIz8DQVlU9n3tbk111WJVD 8KKlcUD+TS9L/Xxcz86sqIS1JxmqPzeLfIBTtWJRfpMCoQZIQ25JrZNeRX37TCNsmBp5 9BvJ4eS00ykgojCoZvp6qYDkP2ErnDyWLHI8YOa9kysDb8RTQLwcJgCxRGKJMuTOUmSC n7+dzzXdEquJCFXaW0YfhfBkzvBckR8tj7oj52TeZzZL27N649VP7UfNbyS/JJ5nQEsE EIxvXSnP+nb0ruwfSwLNO4utDBmBQwsK20iRrIv2ChkdRR2n8ISduqyALZluqmnYFUbQ 5gXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=nbmYRd5GeCVm95kJ2zmM4HgRTxOJ4btzMmElKsnM6uo=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Yrwtc/pJjGRF3y9vdghlXnMpKSmrSXXNxJD+MQQCzfq7IY0MmXZrNq8DBW9YP64h3E 91uXbINlo4tfpwBH3vF79jDpNKmjPi6Ct6QP6DTAFldttCSqGCUPgFwU1uI4dKb+bpMG epRyX9IAZLpQE6cSIZ8jGXNK9WVtc+a3OkJwn3zyglgRXyKHFsm2CU00jX4SdGkJFpmp ZCobNAsPIqTs0GA3oF3C6/t8Me86Kn6hm9R2S3Jlr0RR9GK9AXH+zi2oYwuHGYZct5T3 q639w4sjQ9wOgvY4b22FwpytchHKjuX3Sea43sq7Du+6XuLFWGo/iAHSW3C3q/+6mKBL GG+g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=GJVaqZs1; 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-a8989215d71si296731266b.1048.2024.08.30.03.35.08; Fri, 30 Aug 2024 03:35:09 -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=@haasn.xyz header.s=mail header.b=GJVaqZs1; 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 2B31568DC7D; Fri, 30 Aug 2024 13:24:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BE46768DBA5 for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013449; bh=Yht1bLO1F9l/8pSn9fEbYfcRWrxhxmXQaCFRvnKI+B4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GJVaqZs1mALZbYfF1bXIQrqaT5T0CA8A+oYMlbSrdpu4Y/yzceG5EZICx044Oo/0l p4MZGLd1GWnyw0fehaeOLNKsV+diP3nvKzGDWJr4U+WXBfNwMMMyoail+feK0AUPK6 qHi2ZKeVaM6WUA2JLfNozsynhxAASkPLEktBOaNs= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id B9D5C445BA; Fri, 30 Aug 2024 12:24:09 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:31 +0200 Message-ID: <20240830102402.18149-9-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 08/17] avcodec/mjpegenc: switch to get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Gro0bwT7AqZd From: Niklas Haas This codec's capabilities should be set dynamically based on the value of strict_std_compliance, when available. This will allow us to finally get rid of the strictness hack in ffmpeg_filter.c. --- libavcodec/mjpegenc.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index b3bc355501..40da602a6d 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -640,7 +640,27 @@ static const AVClass mjpeg_class = { .version = LIBAVUTIL_VERSION_INT, }; -const FFCodec ff_mjpeg_encoder = { +static int mjpeg_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, const void **out, + int *out_num) +{ + if (config == AV_CODEC_CONFIG_COLOR_RANGE) { + static const enum AVColorRange mjpeg_ranges[] = { + AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED, + }; + int strict = avctx ? avctx->strict_std_compliance : 0; + int index = strict > FF_COMPLIANCE_UNOFFICIAL ? 1 : 0; + *out = &mjpeg_ranges[index]; + *out_num = FF_ARRAY_ELEMS(mjpeg_ranges) - index - 1; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out, out_num); +} + +FFCodec ff_mjpeg_encoder = { .p.name = "mjpeg", CODEC_LONG_NAME("MJPEG (Motion JPEG)"), .p.type = AVMEDIA_TYPE_VIDEO, @@ -657,9 +677,9 @@ const FFCodec ff_mjpeg_encoder = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, - .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &mjpeg_class, .p.profiles = NULL_IF_CONFIG_SMALL(ff_mjpeg_profiles), + .get_supported_config = mjpeg_get_supported_config, }; #endif From patchwork Fri Aug 30 10:15:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51243 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp311352vqb; Fri, 30 Aug 2024 03:50:20 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXA1Ba8M7n71Ul2v42kl/U5aUECB3IJp4cPJ5xQtg3nX5dXr19EONEVkx65lo7bHA4d3javedT195lBMkQFhpXl@gmail.com X-Google-Smtp-Source: AGHT+IEddStnOZscI/eEX7WLuDHTn5Pw4LOupwqCL6Fd4HR4GtMoEaCA4s2cg/0t5bE/g2Oa2rI3 X-Received: by 2002:a17:907:724a:b0:a86:a694:aaff with SMTP id a640c23a62f3a-a89a34b4e5fmr74888366b.1.1725015020496; Fri, 30 Aug 2024 03:50:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725015020; cv=none; d=google.com; s=arc-20240605; b=di0xL3nLc2vy3W86KpCCf20+sbzyg3REPcd8Bkm6phv7p+G+GGoB/5Z75rQ8kIZ7jR rs+2u8vx4o7UrJV3yeVZ+ix3xZqSe16IF17tajdk6qoBcxW+hNfxafvsitfo2z3jpP+1 HUwDiNM6ffNckcrjYVE1RKEwW+dPAxkJKGFh2UQKo6S19ehhsc9b/FjBWv2KrlXYNqu7 JieRkXyEYjVuaKFbdcgiilJuD1TuRTNrd9pcbeLSZfbzJAgWXa4HpCqSRqQwDTWXuPXv Y6EePFDhLoZ1w9wMgmoEP1jRQ+e1HeMA1Wx9JDl5ekmqCGZ7dt+QecMf9pmvGewXu1wm eLAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=XNa6Xk/KarEEBx8tdBe0VemUePamOhrpEXhR4ReqPZg=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=MJ7xH4f1f70Zo/072Md9Rvxq7zrnyYiRu9q2+nMvmPK4wzlQu2NhREjyPieFMWCiQC 0swKJibbPpbGzb7B6W3949eE7Ffh5YMdDBHhUT89BiMfn5OKkIQQGJmq8SO8ZJDYOKkn 2TvOeNk+OACi/7O7EFNVDIoPLBOgIQ77EyevxY+RSzEG6Rq6Y7nq5AIaQEx1nveKHbf+ DDPJmXNu07c5C6Tbin3VeeALoxnjdLT9XO/nfE7aC4+58c5ZQWGOr0HnN3QpOVPkn5Ih dCHsQD3wBya53VVSVO77ZtHYbsVXZRdUMZHTlLftX7hzqMf9TRbsodRkc+uuVneWdcP5 rqug==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=r86xur0i; 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-a89891f2a56si272840166b.937.2024.08.30.03.50.20; Fri, 30 Aug 2024 03:50: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=@haasn.xyz header.s=mail header.b=r86xur0i; 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 0A5C168DC94; Fri, 30 Aug 2024 13:24:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DDB6A68DBC8 for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013450; bh=O57xEMQl2B5Eudrzp66vJdKl3cE6THaL9q6/34U9q5A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r86xur0iMAXsPNgSqszeCWOOwuDy5mXdkJUMQL44ZWPFduiJH9pcbW0+rqKKHes0S K/PXlv6idJAlZlEOQliv3dXnib+/JcGyIaN2jrKlz0tCcjjUO0gD3k+vHUaNL/e0RY rma6TQ3fyrm0ZMHynm4Jw7AylCMrZWIlgdarEJqY= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 026D844607; Fri, 30 Aug 2024 12:24:09 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:32 +0200 Message-ID: <20240830102402.18149-10-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 09/17] avcodec/codec_internal: nuke init_static_data() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: LqBOwSiCC82O From: Niklas Haas All hail get_supported_config() --- libavcodec/allcodecs.c | 7 +------ libavcodec/codec_internal.h | 8 -------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 60b1278830..66ea502cf4 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -910,13 +910,8 @@ static AVOnce av_codec_static_init = AV_ONCE_INIT; static void av_codec_init_static(void) { for (int i = 0; codec_list[i]; i++) { - const FFCodec *codec = codec_list[i]; - if (codec->init_static_data) { - codec->init_static_data((FFCodec*) codec); - continue; - } - /* Backward compatibility with deprecated public fields */ + const FFCodec *codec = codec_list[i]; if (!codec->get_supported_config) continue; diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 84a4376753..8443c51d71 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -173,14 +173,6 @@ typedef struct FFCodec { */ const FFCodecDefault *defaults; - /** - * Initialize codec static data, called from av_codec_iterate(). - * - * This is not intended for time consuming operations as it is - * run for every codec regardless of that codec being used. - */ - void (*init_static_data)(struct FFCodec *codec); - int (*init)(struct AVCodecContext *); union { From patchwork Fri Aug 30 10:15:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51246 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp360068vqb; Fri, 30 Aug 2024 05:20:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXfFFiT0U/wsQgAdN4mWt0u4ZSSQ2/Ayh3NIRdGuqSi5xDfthzP7AjH5MYLLVdT0tBkGkGiyxlOpvAdqQbDSI2Z@gmail.com X-Google-Smtp-Source: AGHT+IGrbt1EBTdUgWz/1yEqAIlNn55UyrSpqmx78yl/0ya5BnE47VbF7qLPNoDj8E2Me7e3vAen X-Received: by 2002:a2e:702:0:b0:2f5:1fa7:ac3b with SMTP id 38308e7fff4ca-2f6105cce27mr35066351fa.17.1725020413667; Fri, 30 Aug 2024 05:20:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725020413; cv=none; d=google.com; s=arc-20240605; b=gG7qkBrASmaGbM9aVSyPCr2s23SiOLg4Tj2Gmueqq1JnfqLZCD4Sp+r9QQOjy5x6p2 4pWYNL2s8CoNnNDDnsWIdlCtw3j66zLuhLRBHzs8SyBrVRN83dApBiIw/DQ4jjwp0XB7 3SXFO6cjxPS06SH75dvAW4Fov+UmRbL6L6BcDLVPZmf5eP+6SfteDPFawNfcKHjQ+DbU fwGy4aKGO515tUEIXqkONE3N/XOHHCPrzCAoTsFrT31ABGMPA869m+lgxhFGy7I3N/ES UrfCAJyIC6zqN8kfLm84zIH6S6N1/D+kpvV0IVo6wj4AtxntvnFldP3qzm69X+1wcI1O SyMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=IvVRP7trVK9e6UPP0VpacW5/qG/xBDsvPd7HPcvHSE8=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=QYKPw2DaMSaKuuyl3OfCM6nMuJh6ip3mrHXpVb5B3HgGH4Jx/GMHNZWJGYLw8MMsey k4UtlyeXiAf9p1LHyTexfTMd7naAjDnMutQfgBFP/Y9kEITF5JR4INotCJN85g7FEWOJ 3/WuUEx2YSJ8wna1R9liKgv/JHf3pzHZVVjPlcm/23TYYOFB4sq97n+oiChc2HlZDSE3 4R5NJATYAoNMXcUIPA4gx/fC+eqqKjbjTOvIs8wLiQoU3WEiYDDTW2R3BGFKBHXbXIxr SXn3eEd+zVSMvPkGWVWcJNSmD72EPRzGkpQb9emaLhdgHGlvymRNj5wpNpPmtARpTrPP kyWg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Zg5ncDfL; 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-5c226c70715si2879057a12.117.2024.08.30.05.20.13; Fri, 30 Aug 2024 05:20:13 -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=@haasn.xyz header.s=mail header.b=Zg5ncDfL; 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 EABBC68DCA9; Fri, 30 Aug 2024 13:24:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E709968DBCF for ; Fri, 30 Aug 2024 13:24:13 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013450; bh=0YZeWtqTeY3zK6nfGACeZEW4hjJtYGKkqirxMTTBALM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zg5ncDfL/UXf0Ax0/L/9ie78oiLH7tBLuDvfg3+A2otrUWGcnbgEGOmHQII/RjRXk Y2I/LBEDrFkJyWCapjiYTU6SI8hOk7V81iK4xe/flGcxsVAaM/MDsUEq9JOwwSUWe/ k8+qh+JY+qSw5dtR55WsQIK07f1KjUnwHouJNCH0= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 3A7A54684B; Fri, 30 Aug 2024 12:24:10 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:33 +0200 Message-ID: <20240830102402.18149-11-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 10/17] fftools/opt_common: switch to avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: khYZIx+JNfI8 From: Niklas Haas While rewriting this macro, I decided to make it a bit more flexible so it can work for all of the fields (including future fields) in a more generic way, and to also print the channel layout using an AVBPrint to avoid hard-coding the assumption that the length is less than 128 characters. --- fftools/opt_common.c | 91 +++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 43 deletions(-) diff --git a/fftools/opt_common.c b/fftools/opt_common.c index 9d2d5184a0..f44fc4c97c 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -262,22 +262,36 @@ int show_buildconf(void *optctx, const char *opt, const char *arg) return 0; } -#define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \ - if (codec->field) { \ - const type *p = codec->field; \ - \ - printf(" Supported " list_name ":"); \ - while (*p != term) { \ - get_name(*p); \ - printf(" %s", name); \ - p++; \ - } \ - printf("\n"); \ - } \ +#define PRINT_CODEC_SUPPORTED(codec, config, type, name, elem, fmt, ...) \ + do { \ + int num = 0; \ + const type *elem = NULL; \ + avcodec_get_supported_config(NULL, codec, config, 0, \ + (const void **) &elem, &num); \ + if (elem) { \ + printf(" Supported " name ":"); \ + for (int i = 0; i < num; i++) { \ + printf(" " fmt, __VA_ARGS__); \ + elem++; \ + } \ + printf("\n"); \ + } \ + } while (0) + +static const char *get_channel_layout_desc(const AVChannelLayout *layout, AVBPrint *bp) +{ + int ret; + av_bprint_clear(bp); + ret = av_channel_layout_describe_bprint(layout, bp); + if (!av_bprint_is_complete(bp) || ret < 0) + return "unknown/invalid"; + return bp->str; +} static void print_codec(const AVCodec *c) { int encoder = av_codec_is_encoder(c); + AVBPrint desc; printf("%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name, c->long_name ? c->long_name : ""); @@ -343,35 +357,20 @@ static void print_codec(const AVCodec *c) printf("\n"); } - if (c->supported_framerates) { - const AVRational *fps = c->supported_framerates; - - printf(" Supported framerates:"); - while (fps->num) { - printf(" %d/%d", fps->num, fps->den); - fps++; - } - printf("\n"); - } - PRINT_CODEC_SUPPORTED(c, pix_fmts, enum AVPixelFormat, "pixel formats", - AV_PIX_FMT_NONE, GET_PIX_FMT_NAME); - PRINT_CODEC_SUPPORTED(c, supported_samplerates, int, "sample rates", 0, - GET_SAMPLE_RATE_NAME); - PRINT_CODEC_SUPPORTED(c, sample_fmts, enum AVSampleFormat, "sample formats", - AV_SAMPLE_FMT_NONE, GET_SAMPLE_FMT_NAME); - - if (c->ch_layouts) { - const AVChannelLayout *p = c->ch_layouts; - - printf(" Supported channel layouts:"); - while (p->nb_channels) { - char name[128]; - av_channel_layout_describe(p, name, sizeof(name)); - printf(" %s", name); - p++; - } - printf("\n"); - } + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_FRAME_RATE, AVRational, "framerates", + fps, "%d/%d", fps->num, fps->den); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_PIX_FORMAT, enum AVPixelFormat, + "pixel formats", fmt, "%s", av_get_pix_fmt_name(*fmt)); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_SAMPLE_RATE, int, "sample rates", + rate, "%d", *rate); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_SAMPLE_FORMAT, enum AVSampleFormat, + "sample formats", fmt, "%s", av_get_sample_fmt_name(*fmt)); + + av_bprint_init(&desc, 0, AV_BPRINT_SIZE_AUTOMATIC); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_CHANNEL_LAYOUT, AVChannelLayout, + "channel layouts", layout, "%s", + get_channel_layout_desc(layout, &desc)); + av_bprint_finalize(&desc, NULL); if (c->priv_class) { show_help_children(c->priv_class, @@ -566,8 +565,14 @@ static void show_help_bsf(const char *name) } printf("Bit stream filter %s\n", bsf->name); - PRINT_CODEC_SUPPORTED(bsf, codec_ids, enum AVCodecID, "codecs", - AV_CODEC_ID_NONE, GET_CODEC_NAME); + if (bsf->codec_ids) { + const enum AVCodecID *id = bsf->codec_ids; + printf(" Supported codecs:"); + while (*id != AV_CODEC_ID_NONE) { + printf(" %s", avcodec_descriptor_get(*id)->name); + id++; + } + } if (bsf->priv_class) show_help_children(bsf->priv_class, AV_OPT_FLAG_BSF_PARAM); } From patchwork Fri Aug 30 10:15:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51237 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304735vqb; Fri, 30 Aug 2024 03:35:12 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWmn8f8yQI61JXEL87Bjuw7ed5TuOmi337gzQdO6TDa2H9olZW4ePyGnlKx0K14uNllgUukPQbovIKsfe5Mlw+l@gmail.com X-Google-Smtp-Source: AGHT+IGTpUJjs+UTwQxi/5V5sErmOMJN9YBpYAzojMorjum+pkWlX1jDyzX/J2G0HsrhvjTLG4zq X-Received: by 2002:a17:907:971c:b0:a86:9e3f:fdc8 with SMTP id a640c23a62f3a-a89a35be870mr75107066b.4.1725014112454; Fri, 30 Aug 2024 03:35:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014112; cv=none; d=google.com; s=arc-20240605; b=hHhzGc8H1ZwTYXgEEla15vhmpdf1wjIUEBUKoyUInqKzs/xpvIHWGux5Q5tgAfGKLZ sDumN6MxCdh8OJPengSepVf5Feaij0+wwWSWOt+/zIa4orNuMFXemsnbuyssQ/cEtC2N UK+ooXydoC6RmiClC/NyUtCgODzeie+b9f1KDALVko8KHpyNqSp3rUAZGOrQKZIJsrgf +WzorwiqyhrJkbZsWVXfGq0Xyos+BFdo4UG9/D0NVdw/wuxNzCmK0fXYL/y1JJHw+7Qa Q+wALfcR/Z5MPfmwXb35e0mqoYIENX8g1nmWMaMp0K1ScRbjj7VS98368PHP659JwTLM KCFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=GSjxT1x+GLUCxE224DfJkyyIKRVrw9KIF5mZLyqO3X4=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=kmYCYjkR3No095ctnT5pW7WWVhzpBct/1O50HBxCmSUkxiIrsMIb+ZaGYPbJIbo7y6 amyOet1L9MOe1JVt/AzPXbXm0PSrka8USXe3C5LpM0Zcpo1FGrgS/B9pK8nTWqlp05Qb kAdEfogUBmHA6K2FlcVavO8xQs+PNW3XHK921oByI37dXeSCw5/TD8P1Yt8AGhlY0Ja3 B8Ig0m9iwo2tn4tjrxH0LnNntxsJrJcXjz+Vqftnz8EIk91dQXVA8BQpUj+1mWWdhGP0 hLbysZbr1RIDmOC1ZihL4pyFdrtUUlfuD8FWIhhoq0xtLLw+nCRoHU3GURkM2xEpu9h0 7JuQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=OHXQrr+M; 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-a89891d097csi278078666b.864.2024.08.30.03.35.12; Fri, 30 Aug 2024 03:35:12 -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=@haasn.xyz header.s=mail header.b=OHXQrr+M; 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 9F9C668DB72; Fri, 30 Aug 2024 13:24:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 257D968DB6E for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013450; bh=W+oEIfIwaCXFCkOqbW+9qjNOvXlSVMRKzKCwaCFby3o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OHXQrr+Mu9QVXse6kKY5fjnq8ldcFmLqXRylITyyfu3rg9q51UQWUUvKJ7gGuzlI/ P7OoGBI2qG92yfAZqSGcgKsdrlr2fpYXpRcs4X4Ys7HV+B3SXzfgUJzLxoLKc4yCiT WbihqEvnwafACI5Bu7tvyiuMIIofTr20MD7/R9zc= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 7344B46D34; Fri, 30 Aug 2024 12:24:10 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:34 +0200 Message-ID: <20240830102402.18149-12-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 11/17] fftools: drop unused/hacky macros X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9aeePzjX9pnK From: Niklas Haas Having macros initialize local variables seems strange to me, and there are no more current users of these macros. (The one that was commented out was incorrect anyway, since the macro has changed in the meantime) --- fftools/cmdutils.h | 13 ------------- fftools/ffmpeg_filter.c | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h index 9609c6c739..9441d5726b 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -530,19 +530,6 @@ void *allocate_array_elem(void *array, size_t elem_size, int *nb_elems); #define GROW_ARRAY(array, nb_elems)\ grow_array((void**)&array, sizeof(*array), &nb_elems, nb_elems + 1) -#define GET_PIX_FMT_NAME(pix_fmt)\ - const char *name = av_get_pix_fmt_name(pix_fmt); - -#define GET_CODEC_NAME(id)\ - const char *name = avcodec_descriptor_get(id)->name; - -#define GET_SAMPLE_FMT_NAME(sample_fmt)\ - const char *name = av_get_sample_fmt_name(sample_fmt) - -#define GET_SAMPLE_RATE_NAME(rate)\ - char name[16];\ - snprintf(name, sizeof(name), "%d", rate); - double get_rotation(const int32_t *displaymatrix); /* read file contents into a string */ diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index b562e8417c..d54beb26b7 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -416,7 +416,7 @@ static void choose_ ## name (OutputFilterPriv *ofp, AVBPrint *bprint) \ } //DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, AV_PIX_FMT_NONE, -// GET_PIX_FMT_NAME) +// av_get_pix_fmt_name) DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats, AV_SAMPLE_FMT_NONE, "%s", av_get_sample_fmt_name) From patchwork Fri Aug 30 10:15:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51242 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp311303vqb; Fri, 30 Aug 2024 03:50:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU9N0atFP5NBrbW80EziND5ijFYudHkVH5nKFhTm+IRJuUsCwT+Hi1dgUjWMaHHTJ3GCJzm1nImW0WprbWOz8R3@gmail.com X-Google-Smtp-Source: AGHT+IFSA+ae2uxc8jj1nE54KYrVGSfX0bzGyYjuBIvC3aaJtq7VNEUgKz/DRt8bv3tQ4uIiUiUh X-Received: by 2002:a05:6512:1390:b0:52e:ccf5:7c3e with SMTP id 2adb3069b0e04-53546b89e5cmr559265e87.7.1725015012893; Fri, 30 Aug 2024 03:50:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725015012; cv=none; d=google.com; s=arc-20240605; b=Tx6wBO1AbsB4OJd8Ak56FbnT96g546cqVI8QP6JGb79iRXCqi3sR44e5MGyA8rO1UI X6n7C8Prwzoa1EiSMpylm33F8yfkVz5o3ZMb6L9F5PVNGYpsLkjQj9p55H2C3azxFolh UhFgQ8EVXbO5v7Tx5AwPF9raffRy/xukO/RUsJmLKJ3PAXMIicKA5mZ243nCr2VSU2dJ JKLIPI+F84CIdR2fFVcjXS3xdYsAGKdmtc2LFLF7sGlpLqu18D4H/ObUkyhbFHN+nyrJ 7oMlKVsBILyfkNLx5FEvk6nPJX7OUPdEu3dvMEQD7NSBqjacBuYdA7wdTfFah2NchUku U3dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=Y+MZJx+D9xm4ZFFhQ5m3+Tj2siMunlyIU4xdO/U3TK0=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=KvTvtcfI6hfOS5ctPaR1t1czUHFLPuA4te9puW8LZdDMjWtP4sDVPPwRSNz5DH7rRj a8mpz3i7SSfnVET0vsqXQjgmDUirVq3ba2SybDWxIX8GZWwX8pj1y1vzphfNHZd8Az8m nUWd/QVw+zENcXjmiYexqslBT5a3q1o4BVZQYm2Ej+5oFiVrU2VV6yyuHODnKYXA1hn3 Me54s6iVa4Y6sexkvv+kaM57I2JslSrnQSFQM6o/G7KXF08gTGyTUkDQJDNHymfwUd8y 0cUIGDcGz4z8A4ahZjqmqd+SSCUdYcdGgRAHiMsvXn/EowBp35csAtqpKYoMT9TaYwuJ jFsQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=agrMaO45; 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-5354078a741si1204372e87.196.2024.08.30.03.50.12; Fri, 30 Aug 2024 03:50:12 -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=@haasn.xyz header.s=mail header.b=agrMaO45; 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 3A5C668DCB0; Fri, 30 Aug 2024 13:24:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1345B68DBED for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013450; bh=0cIpfKBdyl0bpT11PeB4XiC8V6hX5KRBhiNoH7cdO38=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=agrMaO45XQReQ9+h+cpgsxByka7Ap5lKAb4Ke+OHY5oUFnEOfKd3Ecy9mPjCPz0bu Qjyfdc57WImJnId6YHWRdgBvvtTIFdq/FvnKxcU4G6IyC2u8mO9MLNKWZtL6QF80NO Uq/0LEm+aMDZCvTDHLbKrKS9eKfztBYYO9yHEKyE= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id ADBBF47074; Fri, 30 Aug 2024 12:24:10 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:35 +0200 Message-ID: <20240830102402.18149-13-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 12/17] fftools/ffmpeg_mux_init: switch to avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DICg/L5PC6Fl From: Niklas Haas --- fftools/ffmpeg_mux_init.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index e84fa9719f..6b101dcbbc 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -511,13 +511,19 @@ static int fmt_in_list(const int *formats, int format) } static enum AVPixelFormat -choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) +choose_pixel_fmt(const AVCodecContext *avctx, enum AVPixelFormat target) { - const enum AVPixelFormat *p = codec->pix_fmts; + const enum AVPixelFormat *p; const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(target); //FIXME: This should check for AV_PIX_FMT_FLAG_ALPHA after PAL8 pixel format without alpha is implemented int has_alpha = desc ? desc->nb_components % 2 == 0 : 0; enum AVPixelFormat best= AV_PIX_FMT_NONE; + int ret; + + ret = avcodec_get_supported_config(avctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, + 0, (const void **) &p, NULL); + if (ret < 0) + return AV_PIX_FMT_NONE; for (; *p != AV_PIX_FMT_NONE; p++) { best = av_find_best_pix_fmt_of_2(best, *p, target, has_alpha, NULL); @@ -529,7 +535,7 @@ choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) av_log(NULL, AV_LOG_WARNING, "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n", av_get_pix_fmt_name(target), - codec->name, + avctx->codec->name, av_get_pix_fmt_name(best)); return best; } @@ -538,8 +544,9 @@ choose_pixel_fmt(const AVCodec *codec, enum AVPixelFormat target) static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) { - const enum AVPixelFormat *fmts = ost->enc_ctx->codec->pix_fmts; + const enum AVPixelFormat *fmts; enum AVPixelFormat fmt; + int ret; fmt = av_get_pix_fmt(name); if (fmt == AV_PIX_FMT_NONE) { @@ -547,6 +554,11 @@ static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) return AV_PIX_FMT_NONE; } + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, AV_CODEC_CONFIG_PIX_FORMAT, + 0, (const void **) &fmts, NULL); + if (ret < 0) + return AV_PIX_FMT_NONE; + /* when the user specified-format is an alias for an endianness-specific * one (e.g. rgb48 -> rgb48be/le), it gets translated into the native * endianness by av_get_pix_fmt(); @@ -574,7 +586,7 @@ static enum AVPixelFormat pix_fmt_parse(OutputStream *ost, const char *name) } if (fmts && !fmt_in_list(fmts, fmt)) - fmt = choose_pixel_fmt(ost->enc_ctx->codec, fmt); + fmt = choose_pixel_fmt(ost->enc_ctx, fmt); return fmt; } From patchwork Fri Aug 30 10:15:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51245 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp326944vqb; Fri, 30 Aug 2024 04:20:18 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXXB9eNV5SXoK+cVB5ovMgCMLglkMgSqWJVWjvsiJj/tsugZHFfDy+T2U+2b8EwtuzJF5HRT+wzBX5uqO9GE5p6@gmail.com X-Google-Smtp-Source: AGHT+IEEpoSDrNLCvvT2aRg4l5XpAH1KHkhmomOfKZq0NlB2I5ByrlvNRMrC8OCXbxpfQwjyLesU X-Received: by 2002:a05:6512:68c:b0:530:c1fb:51a1 with SMTP id 2adb3069b0e04-53546aff14dmr1291837e87.17.1725016818691; Fri, 30 Aug 2024 04:20:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725016818; cv=none; d=google.com; s=arc-20240605; b=EdgMjzYUEm4M4+6ls4zBd72sQmYqQkSifu0ZiFHWF4FgHHLj9c7hc6CbU68qqnra2P IyHgz5FpOEqvRwZQP6Oh7u68Wbf2XiBTzPkoQWx53+WQGpEzqqA20OEIF4XCeivIPeDW 5rY93xb+hH+9yGM/IGt98O/4jFsph0QjKaJZntDM1nu2Cd7IrrV3YZjf+XKP+WV0aOEt hVvVG/XpQJKZ8L6dvZogNWm2c5VMRpFTdtQ8LSVQ2LrOP8vEtmwE/e8ZGixNvpnyZAH9 i7yyc58Iy9lXmFoTbrofEg/dv8IYLlEcDffXYI3ShsVVsMW0TminCRM6HWpH9cc5BQDb 5RQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=8fZD7oMuNl8NKaX6wN9SdaUnuEojWBEhIlt78+KbOZM=; fh=tuUXnhgwUopqrbuJY3BExN6aocuFs1Cf//owLTlTyNI=; b=LSi1sWChUWpmNcG04gFiVEXPEpYFmYxMbAZQXc7JSklCgOCUQwHPFHen8aJcQW7F7y 4QMcLT1K/ogLx+UxgCvu3sBiD7h3l+gK5ZNNxh0CKh4NzA+X8sfjJyB7bq5t7xMTQ0vM 2rJmEXGM5LCwLIhzATFyiShCslWhHBre/zUv1ssvrK2KxvkGNDoQi57mZSIAtpIPu2/H YDVJwnfeYdYvwDhCw8lRBlhMvReIqqT4HySLf5PVjn7JDQnLb+LOxgoxC+AMM7P+ospy zTM2IWRFs6K3a1JsuN0Q/6xuiFNx2cICfSeozRjr4V/na6/KHvz/HO8wZpAlxH1Cy54f MEHA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=ls+SBS1c; 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-5354084efdbsi1168488e87.628.2024.08.30.04.20.17; Fri, 30 Aug 2024 04:20: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=@haasn.xyz header.s=mail header.b=ls+SBS1c; 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 C696768DBCA; Fri, 30 Aug 2024 13:24:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3EA3368DB71 for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013450; bh=JTRvErYpiBBPZFQBJ2T+wDzVCjqrlMgDbt6DsXd3gkI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ls+SBS1coOHzlI5XOTvLsCXTXhDYJJvcNiMFpvzFBkJ65Z1j8qXSKoCGcuzPYmJ5g KBZZ9LVkrgdAk7AQPv7Z2CgZ/JnNREs0Lt1b6I66L8m3IJOd+bgkJeG3FcTSyZgzpN mFd46FKvlPurPBDFVNtqr5GaoAAw5FGoFOzdFDs4= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id E66B0473C2; Fri, 30 Aug 2024 12:24:10 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:36 +0200 Message-ID: <20240830102402.18149-14-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 13/17] fftools/ffmpeg_filter: simplify choose_pix_fmts X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Anton Khirnov , Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1SFfEZvLLLRh From: Niklas Haas The only meaningful difference between choose_pix_fmts and the default code was the inclusion of an extra branch for `keep_pix_fmt` being true. However, in this case, we either: 1. Force the specific `ofp->format` that we inherited from ofilter_bind_ost, or if no format was set: 2. Print an empty format list Both of these goals can be accomplished by simply moving the decision logic to ofilter_bind_ost, to avoid setting any format list when keep_pix_fmt is enabled. This is arguably cleaner as it moves format selection logic to a single function. In the case of branch 1, nothing else needs to be done as we already force the format provided in ofp->format, if any is set. Add an assertion to verify this assumption just in case. (Side note: The "choose_*" family of functions are arguably misnomers, as they should really be called "print_*" - their current behavior is to print the relevant format lists to the `vf/af_format` filter arguments) Signed-off-by: Anton Khirnov Signed-off-by: Niklas Haas --- fftools/ffmpeg_filter.c | 49 +++++++++-------------------------------- 1 file changed, 11 insertions(+), 38 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index d54beb26b7..4411985548 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -364,35 +364,6 @@ static void sub2video_update(InputFilterPriv *ifp, int64_t heartbeat_pts, ifp->sub2video.initialize = 0; } -/* *dst may return be set to NULL (no pixel format found), a static string or a - * string backed by the bprint. Nothing has been written to the AVBPrint in case - * NULL is returned. The AVBPrint provided should be clean. */ -static int choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint, - const char **dst) -{ - OutputFilterPriv *ofp = ofp_from_ofilter(ofilter); - - *dst = NULL; - - if (ofp->flags & OFILTER_FLAG_DISABLE_CONVERT || ofp->format != AV_PIX_FMT_NONE) { - *dst = ofp->format == AV_PIX_FMT_NONE ? NULL : - av_get_pix_fmt_name(ofp->format); - } else if (ofp->formats) { - const enum AVPixelFormat *p = ofp->formats; - - for (; *p != AV_PIX_FMT_NONE; p++) { - const char *name = av_get_pix_fmt_name(*p); - av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|'); - } - if (!av_bprint_is_complete(bprint)) - return AVERROR(ENOMEM); - - *dst = bprint->str; - } - - return 0; -} - /* Define a function for appending a list of allowed formats * to an AVBPrint. If nonempty, the list will have a header. */ #define DEF_CHOOSE_FORMAT(name, type, var, supported_list, none, printf_format, get_name) \ @@ -415,8 +386,8 @@ static void choose_ ## name (OutputFilterPriv *ofp, AVBPrint *bprint) \ av_bprint_chars(bprint, ':', 1); \ } -//DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, AV_PIX_FMT_NONE, -// av_get_pix_fmt_name) +DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, + AV_PIX_FMT_NONE, "%s", av_get_pix_fmt_name) DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats, AV_SAMPLE_FMT_NONE, "%s", av_get_sample_fmt_name) @@ -850,7 +821,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->format = opts->format; } else if (opts->pix_fmts) ofp->formats = opts->pix_fmts; - else if (opts->enc) + else if (opts->enc && + !(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT)) ofp->formats = opts->enc->pix_fmts; fgp->disable_conversions |= !!(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT); @@ -1481,7 +1453,6 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, AVBPrint bprint; int pad_idx = out->pad_idx; int ret; - const char *pix_fmts; char name[255]; snprintf(name, sizeof(name), "out_%s", ofp->name); @@ -1515,17 +1486,19 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, pad_idx = 0; } + av_assert0(!(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT) || + ofp->format != AV_PIX_FMT_NONE || !ofp->formats); av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED); - ret = choose_pix_fmts(ofilter, &bprint, &pix_fmts); - if (ret < 0) - return ret; + choose_pix_fmts(ofp, &bprint); + if (!av_bprint_is_complete(&bprint)) + return AVERROR(ENOMEM); - if (pix_fmts) { + if (bprint.len) { AVFilterContext *filter; ret = avfilter_graph_create_filter(&filter, avfilter_get_by_name("format"), - "format", pix_fmts, NULL, graph); + "format", bprint.str, NULL, graph); av_bprint_finalize(&bprint, NULL); if (ret < 0) return ret; From patchwork Fri Aug 30 10:15:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51249 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp402801vqb; Fri, 30 Aug 2024 06:30:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCW2YQrjk0khu0cHbZTjCihzoGRJd99FM2zFhlZZdYHobmBnKGrHTLlv/sQmDdjf3JrFDkA4y4G+mu0CgXcrepqH@gmail.com X-Google-Smtp-Source: AGHT+IHeS+tLjec0xF6zoKYGsEj3ipW8roRd5pqsA3jIeVQpoF80BxkJGvuxSfLhtzhwcL7Qlti0 X-Received: by 2002:a05:6512:6cd:b0:52e:764b:b20d with SMTP id 2adb3069b0e04-53546b31585mr1556224e87.28.1725024613072; Fri, 30 Aug 2024 06:30:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725024613; cv=none; d=google.com; s=arc-20240605; b=Rf7FjovWWnewVPhfTG/SH7XrpHpu93HpS3KesTHSWTeOjyKmOHujEtdFtnCpbrNtKn nNw/B+XT6m/VEW6/crmnv9LDyI/7k7a+HIX8XSgvd7fw6YNHj6eYxNiA2SHQ8Gyajeps e4ATvbdEbPK30T0PXzvI4kV9um9DRZXIg+JG7K1IAdZDL+S64R1eLV5xJawddY77qMN3 +PBn5m8olwUXl7bNsHOYU3IU6KRhd+Izc8+aM5bgOw45SigMt1wrxTol9M90dXBa+dcB pxMtsEMxVq85+YNGzxWAi3xpnkVH8T/ppZNK2zMvCCl2qciRWujegfOQAL6l1m76Gv18 0sbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=6M7UHw7Nzj29Uz3pQEtggOIf3ZN9ne7YkTqzl8JKT80=; fh=Avpk+LKcNkHKoWajGZeevGRAc++LPBUE4dPECo0/YT8=; b=VKRtHtOR07CkTWdW5DgMUpy1MDEyBd0cn5UG9g4yf2B1zNBHBn1HWa+hyyi4xuAn74 VbTq0Ze3SYxV4nkDf0s4VTSY9/DCgNUpWBhdnhlLWEySO0w8fAr0MOMQWpPXTLQ+616l 1gxEDdQzCBogjUc16b4rdD3Rf3+n6mMg4qVUZv+c2w7DpsRrhROs4TFcdhd4ajKJYdvp 617cc9XuUnOlTqSN3v0CfddIsyXAiAbif0B2QfgfJqXG/hY9Z3IxXDXjXyEdVhG3/3xH ielWxwWA/eUmYI5m0riWU1FDYGfnzcTshkXEEAy9RsCXbIvhJkkoLx/mc4++Cd4excIw tOdg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Yg8J877k; 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-535407eb899si1203919e87.336.2024.08.30.06.30.12; Fri, 30 Aug 2024 06:30:13 -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=@haasn.xyz header.s=mail header.b=Yg8J877k; 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 4B71168DBDB; Fri, 30 Aug 2024 13:24:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4ADAB68DB63 for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013451; bh=UBbrQS7WNK38offINKvhxW06U8AU74L3U9jE9bJA1ZM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Yg8J877ksR68TW9H1DOHs+IhwI99uiIH6NrOOE0ysYrZBofIQqlFyUP+ewDyMrR92 cH9PuSTaxDOBLnLB7e4TqXNFdEGUzNAKxnDpp8gWKbJ/p50oX1VDcrE6Mx0K5/fQJT 44aUeKBKYQKMEBSFhM7HjXb2tnY5rwMWoTMa5g/M= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 2DB494796B; Fri, 30 Aug 2024 12:24:11 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:37 +0200 Message-ID: <20240830102402.18149-15-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 14/17] fftools/ffmpeg_mux_init: factor out binding filters to output streams X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Anton Khirnov Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: XpG6SsdKmRvy From: Anton Khirnov --- fftools/ffmpeg_mux_init.c | 137 ++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 59 deletions(-) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index 6b101dcbbc..c6dc4a0699 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -916,6 +916,82 @@ static int new_stream_subtitle(Muxer *mux, const OptionsContext *o, return 0; } +static int +ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, + const OptionsContext *o, char *filters, + AVRational enc_tb, enum VideoSyncMethod vsync_method, + int keep_pix_fmt, int autoscale, int threads_manual) +{ + OutputStream *ost = &ms->ost; + AVCodecContext *enc_ctx = ost->enc_ctx; + char name[16]; + int ret; + + OutputFilterOptions opts = { + .enc = enc_ctx->codec, + .name = name, + .format = (ost->type == AVMEDIA_TYPE_VIDEO) ? + enc_ctx->pix_fmt : enc_ctx->sample_fmt, + .width = enc_ctx->width, + .height = enc_ctx->height, + .vsync_method = vsync_method, + .sample_rate = enc_ctx->sample_rate, + .ch_layout = enc_ctx->ch_layout, + .sws_opts = o->g->sws_dict, + .swr_opts = o->g->swr_opts, + .output_tb = enc_tb, + .trim_start_us = mux->of.start_time, + .trim_duration_us = mux->of.recording_time, + .ts_offset = mux->of.start_time == AV_NOPTS_VALUE ? + 0 : mux->of.start_time, + + .flags = OFILTER_FLAG_DISABLE_CONVERT * !!keep_pix_fmt | + OFILTER_FLAG_AUTOSCALE * !!autoscale | + OFILTER_FLAG_AUDIO_24BIT * !!(av_get_exact_bits_per_sample(enc_ctx->codec_id) == 24), + }; + + snprintf(name, sizeof(name), "#%d:%d", mux->of.index, ost->index); + + // MJPEG encoder exports a full list of supported pixel formats, + // but the full-range ones are experimental-only. + // Restrict the auto-conversion list unless -strict experimental + // has been specified. + if (!strcmp(enc_ctx->codec->name, "mjpeg")) { + // FIXME: YUV420P etc. are actually supported with full color range, + // yet the latter information isn't available here. + static const enum AVPixelFormat mjpeg_formats[] = + { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, + AV_PIX_FMT_NONE }; + + if (enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) + opts.pix_fmts = mjpeg_formats; + } + + if (threads_manual) { + ret = av_opt_get(enc_ctx, "threads", 0, (uint8_t**)&opts.nb_threads); + if (ret < 0) + return ret; + } + + if (ofilter) { + ost->filter = ofilter; + ret = ofilter_bind_ost(ofilter, ost, ms->sch_idx_enc, &opts); + } else { + ret = init_simple_filtergraph(ost->ist, ost, filters, + mux->sch, ms->sch_idx_enc, &opts); + } + av_freep(&opts.nb_threads); + if (ret < 0) + return ret; + + ret = sch_connect(mux->sch, SCH_ENC(ms->sch_idx_enc), + SCH_MSTREAM(mux->sch_idx, ms->sch_idx)); + if (ret < 0) + return ret; + + return ret; +} + static int streamcopy_init(const Muxer *mux, OutputStream *ost, AVDictionary **encoder_opts) { MuxStream *ms = ms_from_ost(ost); @@ -1398,65 +1474,8 @@ static int ost_add(Muxer *mux, const OptionsContext *o, enum AVMediaType type, if (ost->enc && (type == AVMEDIA_TYPE_VIDEO || type == AVMEDIA_TYPE_AUDIO)) { - char name[16]; - OutputFilterOptions opts = { - .enc = enc, - .name = name, - .format = (type == AVMEDIA_TYPE_VIDEO) ? - ost->enc_ctx->pix_fmt : ost->enc_ctx->sample_fmt, - .width = ost->enc_ctx->width, - .height = ost->enc_ctx->height, - .vsync_method = vsync_method, - .sample_rate = ost->enc_ctx->sample_rate, - .ch_layout = ost->enc_ctx->ch_layout, - .sws_opts = o->g->sws_dict, - .swr_opts = o->g->swr_opts, - .output_tb = enc_tb, - .trim_start_us = mux->of.start_time, - .trim_duration_us = mux->of.recording_time, - .ts_offset = mux->of.start_time == AV_NOPTS_VALUE ? - 0 : mux->of.start_time, - .flags = OFILTER_FLAG_DISABLE_CONVERT * !!keep_pix_fmt | - OFILTER_FLAG_AUTOSCALE * !!autoscale | - OFILTER_FLAG_AUDIO_24BIT * !!(av_get_exact_bits_per_sample(ost->enc_ctx->codec_id) == 24), - }; - - snprintf(name, sizeof(name), "#%d:%d", mux->of.index, ost->index); - - // MJPEG encoder exports a full list of supported pixel formats, - // but the full-range ones are experimental-only. - // Restrict the auto-conversion list unless -strict experimental - // has been specified. - if (!strcmp(enc->name, "mjpeg")) { - // FIXME: YUV420P etc. are actually supported with full color range, - // yet the latter information isn't available here. - static const enum AVPixelFormat mjpeg_formats[] = - { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, - AV_PIX_FMT_NONE }; - - if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) - opts.pix_fmts = mjpeg_formats; - } - - if (threads_manual) { - ret = av_opt_get(ost->enc_ctx, "threads", 0, (uint8_t**)&opts.nb_threads); - if (ret < 0) - goto fail; - } - - if (ofilter) { - ost->filter = ofilter; - ret = ofilter_bind_ost(ofilter, ost, ms->sch_idx_enc, &opts); - } else { - ret = init_simple_filtergraph(ost->ist, ost, filters, - mux->sch, ms->sch_idx_enc, &opts); - } - av_freep(&opts.nb_threads); - if (ret < 0) - goto fail; - - ret = sch_connect(mux->sch, SCH_ENC(ms->sch_idx_enc), - SCH_MSTREAM(mux->sch_idx, ms->sch_idx)); + ret = ost_bind_filter(mux, ms, ofilter, o, filters, enc_tb, vsync_method, + keep_pix_fmt, autoscale, threads_manual); if (ret < 0) goto fail; } else if (ost->ist) { From patchwork Fri Aug 30 10:15:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51236 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp300155vqb; Fri, 30 Aug 2024 03:25:33 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWeJ3ZamCitliu+Jadg9OSmVTwgBkXP3duMt8qhCDXCu0fr/K8SRRy2F6tCyrk7KS2/S6TDsvZ3cFT5Y+XnH5b+@gmail.com X-Google-Smtp-Source: AGHT+IGqkGdPMhsMzJeJHXEvW7w43d5VcswRJLSaV81cy55jdJ3hErSB0JrojK+TbtX8rF3c4dvD X-Received: by 2002:a17:907:724a:b0:a86:a694:aaff with SMTP id a640c23a62f3a-a89a34b4e5fmr72057266b.1.1725013532937; Fri, 30 Aug 2024 03:25:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725013532; cv=none; d=google.com; s=arc-20240605; b=M+yzchzToRgqkLbz+HDeFf8xklqVgjHyVaSpoGLv1NXmttRRlkssBjCmKVO2dx9JzB sutJKxi/vtVdYt5y3V6Qb3/yaDSfzZuyFRJwFwXRj4hpyUUFgVj8qdc3Y1NXryjiZQxR GcLI2tpFNOy6b9NXd2LtsuPjQQO6Wod3Pfv2UXRT3vSeyxkdK6Ntc3r/6Yc2DeXLhysn YWKJmvk/uY5P0LW/4uA8r9VR9RWHKB8WpWebQ4b6SMWuqp+5NlYa2NIY/dabDPINq4UW P6LyPg4HHGtnUv5KbV0/KN1gsNrH9nDAPjd8GJEtEEjIUjT88zyDyjGFyLoJ1JWU9Qrt UB1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=TkJ7b0WgyfVwMfVuYdGozIxCDmFJ8EVNmV8TFdAUDw4=; fh=tuUXnhgwUopqrbuJY3BExN6aocuFs1Cf//owLTlTyNI=; b=ArtQMjtvlfBX8uo3cplURN+MA2a/JmtVpojoprcmLrcKEG4gEKWgXDOPiHIECeDuR5 s+TI3IYvM5yl3YY4JOFjo5r3bLa0m8nYXanXl/nlKSIuPPOxcISHWdSteTSFv3AHq31p NWk+lYnI8lsHmEbfljbfNo4X0Zpn/MN5Dz9GY/Moi03VouTpafNR4WJZBED9qZHTBdXn nXu1va5U+gQ1BwwM+HrbbC+m/lZQwFX7iF5uYj4sua+lojr4l9Mru+yB2xQKWczI3TTo vqTW88sCJ/oRHI3KwVj6o3AARMAFBLlshWI1qzy4owQWCt0BJJz3gIfD89iXCEyNPW3i oAfQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=Y7EEEZOB; 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-a89891d3ba6si257597566b.833.2024.08.30.03.25.32; Fri, 30 Aug 2024 03:25:32 -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=@haasn.xyz header.s=mail header.b=Y7EEEZOB; 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 086A868DBD9; Fri, 30 Aug 2024 13:24:24 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3F5B068DB72 for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013451; bh=vkZgYtBjdel0y1EWrdYPaxvTt9ahHHBBUlQH6XhLcnU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y7EEEZOB2RxP4xBTfmi2YdS9EaMus8VOQ3NLXNBHFdyw/WIzdYKaSmda5BKZYCfEz Xylk2217x+q/JdWneZLTbyyBFilXZOx3LmK9pIcpuNf+T88jfHANR59C6fXlueEgKy NlttTyEGMTLwKDi9pExrMAg9SGxQyXZovB/UjXAo= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 697A947A5B; Fri, 30 Aug 2024 12:24:11 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:38 +0200 Message-ID: <20240830102402.18149-16-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 15/17] fftools/ffmpeg_filter: switch to avcodec_get_supported_config() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Anton Khirnov , Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Qe/5Xs7vuqpj From: Niklas Haas Signed-off-by: Anton Khirnov --- fftools/ffmpeg.h | 7 +++++-- fftools/ffmpeg_filter.c | 25 ++++++++++--------------- fftools/ffmpeg_mux_init.c | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 3c5d933e17..ca24b20640 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -283,8 +283,6 @@ typedef struct OutputFilterOptions { // Codec used for encoding, may be NULL const AVCodec *enc; - // Overrides encoder pixel formats when set. - const enum AVPixelFormat *pix_fmts; int64_t trim_start_us; int64_t trim_duration_us; @@ -311,6 +309,11 @@ typedef struct OutputFilterOptions { int sample_rate; AVChannelLayout ch_layout; + + const int *formats; + const int *sample_rates; + const AVChannelLayout *ch_layouts; + const AVRational *frame_rates; } OutputFilterOptions; typedef struct InputFilter { diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 4411985548..9effa96aac 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -819,11 +819,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->height = opts->height; if (opts->format != AV_PIX_FMT_NONE) { ofp->format = opts->format; - } else if (opts->pix_fmts) - ofp->formats = opts->pix_fmts; - else if (opts->enc && - !(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT)) - ofp->formats = opts->enc->pix_fmts; + } else + ofp->formats = opts->formats; fgp->disable_conversions |= !!(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT); @@ -835,7 +832,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, 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->enc->supported_framerates; + NULL : opts->frame_rates; // reduce frame rate for mpeg4 to be within the spec limits if (opts->enc && opts->enc->id == AV_CODEC_ID_MPEG4) @@ -847,21 +844,19 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, case AVMEDIA_TYPE_AUDIO: if (opts->format != AV_SAMPLE_FMT_NONE) { ofp->format = opts->format; - } else if (opts->enc) { - ofp->formats = opts->enc->sample_fmts; + } else { + ofp->formats = opts->formats; } if (opts->sample_rate) { ofp->sample_rate = opts->sample_rate; - } else if (opts->enc) { - ofp->sample_rates = opts->enc->supported_samplerates; - } + } else + ofp->sample_rates = opts->sample_rates; if (opts->ch_layout.nb_channels) { - int ret = set_channel_layout(ofp, opts->enc ? opts->enc->ch_layouts : NULL, - &opts->ch_layout); + int ret = set_channel_layout(ofp, opts->ch_layouts, &opts->ch_layout); if (ret < 0) return ret; - } else if (opts->enc) { - ofp->ch_layouts = opts->enc->ch_layouts; + } else { + ofp->ch_layouts = opts->ch_layouts; } break; } diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index c6dc4a0699..decf63e7d5 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -952,6 +952,39 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, snprintf(name, sizeof(name), "#%d:%d", mux->of.index, ost->index); + if (ost->type == AVMEDIA_TYPE_VIDEO) { + if (!keep_pix_fmt) { + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_PIX_FORMAT, 0, + (const void **) &opts.formats, NULL); + if (ret < 0) + return ret; + } + if (!ost->force_fps) { + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_FRAME_RATE, 0, + (const void **) &opts.frame_rates, NULL); + if (ret < 0) + return ret; + } + } else { + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, + (const void **) &opts.formats, NULL); + if (ret < 0) + return ret; + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_SAMPLE_RATE, 0, + (const void **) &opts.sample_rates, NULL); + if (ret < 0) + return ret; + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, + (const void **) &opts.ch_layouts, NULL); + if (ret < 0) + return ret; + } + // MJPEG encoder exports a full list of supported pixel formats, // but the full-range ones are experimental-only. // Restrict the auto-conversion list unless -strict experimental @@ -964,7 +997,7 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, AV_PIX_FMT_NONE }; if (enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) - opts.pix_fmts = mjpeg_formats; + opts.formats = mjpeg_formats; } if (threads_manual) { From patchwork Fri Aug 30 10:15:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51240 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304782vqb; Fri, 30 Aug 2024 03:35:18 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVlr09R+HsSOtmc9AwL7H+mEf6pFruARejrMaLj5QJjQ/4ZXzvuAj39jUMQjaPjV8oDqGDd4xMh/r5ljl+ns0GP@gmail.com X-Google-Smtp-Source: AGHT+IEvUh3wBuExRlro3+MAGROnBIZNc5QF9O7eHGpCvp25iD0FM/DjYSB8ZRzlTaVs7fHVO3Ba X-Received: by 2002:a17:906:478a:b0:a7a:9144:e242 with SMTP id a640c23a62f3a-a897f83b359mr440116166b.27.1725014118507; Fri, 30 Aug 2024 03:35:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014118; cv=none; d=google.com; s=arc-20240605; b=MjltI+l/FBaklddI7Nsy7jFh/NlGK9ywKhAXMqW7E7tixvdyvVZPL7ZjwLgJa5TAvg unnVDZNG74kUIq+XNEfgfLlb4D7buU65EZTsPmm61XDiE/epaX8ZyepLPK6PsHOO7xLb khpNXo1HKGMySoZUKsy0wUpp+vHBxAcIIcTk4IxjBgM/zHUmlDisKB2swfzJQlPhH3pc ZBh+LU53EuwpcSYAtFWzDIJGqixdpPHhS9OgvQVorAABO0JBBIsRSmK8ybVyVXtJ9u4S BIG5g8744NLtmvZj73mldPOfS59HY3LCqX550otOGKc3hzeinStOCNkGQM6JSKbYICku BS6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=/+4GGwIeBDijSdCth6YZOBfk3jS+WlaN3JqQtv0MD1w=; fh=tuUXnhgwUopqrbuJY3BExN6aocuFs1Cf//owLTlTyNI=; b=azq7uQURP6d8lmYe8iNBrmDlKmLAl2O6z/mLghnk1aMa1T3gKkBPzC8rz1YmAqTEbP 2xeFL1k8SJhO9w6AoB9QVSR/lgcFLfM8C7a7tBXWHBc8izd+IVX/dP9Lqq29v8VeQFdn ygokwuHSA9khS5EqIzpaCR4hZE1ChUfCLMPXsmZqcyJkWXd7lJrDult0x8cRfOZ1/sF9 1/z2qqkGMBN4oF/UtocJD8lFzH/EGcJYoqVCiiedvSK0VyNpvDKXg05LjuS9TkkcpxwV fGBV98IjE+ZMYgBZ+gV8X5uB9CB3xzriG1nCIfgynZyNpKgqD2p/KepcTV5q+Ag0n7q4 ArDA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b="EFvzLc/h"; 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-a8988f3f656si289004066b.57.2024.08.30.03.35.18; Fri, 30 Aug 2024 03:35: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=@haasn.xyz header.s=mail header.b="EFvzLc/h"; 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 B1F6E68DC5A; Fri, 30 Aug 2024 13:24:27 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5F60568DB7E for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013451; bh=iDksPM24skfEbAgcvSsyGmZ14DqacHqUmT5Bi9QQm1w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=EFvzLc/hCO+Sod2EgnIo0jMY5f3x0C7fNAzX9LlY2HD4lbDqSDidC0V3hxO9wsPAe YtipE5taMX9Mp69J+6AOZm2RXnVFNeUSHg3D9MpfCkKKdkbRI1SeUC7XrCrYWPng3J C1V34mbCjbS7RoRZaXcJuLfO4OY2dTa3Co8pDDxI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A532348125; Fri, 30 Aug 2024 12:24:11 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:39 +0200 Message-ID: <20240830102402.18149-17-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 16/17] fftools/ffmpeg_filter: propagate codec yuv metadata to filters X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Anton Khirnov , Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Dq1eagtnY7BW From: Niklas Haas To convert between color spaces/ranges, if needed by the codec properties. Signed-off-by: Anton Khirnov --- fftools/ffmpeg.h | 4 ++++ fftools/ffmpeg_filter.c | 26 ++++++++++++++++++++++++++ fftools/ffmpeg_mux_init.c | 12 ++++++++++++ 3 files changed, 42 insertions(+) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index ca24b20640..f4a10b2a66 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -304,6 +304,8 @@ typedef struct OutputFilterOptions { int format; int width; int height; + enum AVColorSpace color_space; + enum AVColorRange color_range; enum VideoSyncMethod vsync_method; @@ -314,6 +316,8 @@ typedef struct OutputFilterOptions { const int *sample_rates; const AVChannelLayout *ch_layouts; const AVRational *frame_rates; + const enum AVColorSpace *color_spaces; + const enum AVColorRange *color_ranges; } OutputFilterOptions; typedef struct InputFilter { diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 9effa96aac..8b420e68ab 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -202,6 +202,8 @@ typedef struct OutputFilterPriv { int width, height; int sample_rate; AVChannelLayout ch_layout; + enum AVColorSpace color_space; + enum AVColorRange color_range; // time base in which the output is sent to our downstream // does not need to match the filtersink's timebase @@ -220,6 +222,8 @@ typedef struct OutputFilterPriv { const int *formats; const AVChannelLayout *ch_layouts; const int *sample_rates; + const enum AVColorSpace *color_spaces; + const enum AVColorRange *color_ranges; AVRational enc_timebase; int64_t trim_start_us; @@ -395,6 +399,12 @@ DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats, DEF_CHOOSE_FORMAT(sample_rates, int, sample_rate, sample_rates, 0, "%d", ) +DEF_CHOOSE_FORMAT(color_spaces, enum AVColorSpace, color_space, color_spaces, + AVCOL_SPC_UNSPECIFIED, "%s", av_color_space_name); + +DEF_CHOOSE_FORMAT(color_ranges, enum AVColorRange, color_range, color_ranges, + AVCOL_RANGE_UNSPECIFIED, "%s", av_color_range_name); + static void choose_channel_layouts(OutputFilterPriv *ofp, AVBPrint *bprint) { if (av_channel_layout_check(&ofp->ch_layout)) { @@ -639,6 +649,8 @@ static OutputFilter *ofilter_alloc(FilterGraph *fg, enum AVMediaType type) ofilter->graph = fg; ofilter->type = type; ofp->format = -1; + ofp->color_space = AVCOL_SPC_UNSPECIFIED; + ofp->color_range = AVCOL_RANGE_UNSPECIFIED; ofp->index = fg->nb_outputs - 1; snprintf(ofp->log_name, sizeof(ofp->log_name), "%co%d", @@ -822,6 +834,16 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, } else ofp->formats = opts->formats; + if (opts->color_space != AVCOL_SPC_UNSPECIFIED) + ofp->color_space = opts->color_space; + else + ofp->color_spaces = opts->color_spaces; + + if (opts->color_range != AVCOL_RANGE_UNSPECIFIED) + ofp->color_range = opts->color_range; + else + ofp->color_ranges = opts->color_ranges; + fgp->disable_conversions |= !!(ofp->flags & OFILTER_FLAG_DISABLE_CONVERT); ofp->fps.last_frame = av_frame_alloc(); @@ -1485,6 +1507,8 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, ofp->format != AV_PIX_FMT_NONE || !ofp->formats); av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED); choose_pix_fmts(ofp, &bprint); + choose_color_spaces(ofp, &bprint); + choose_color_ranges(ofp, &bprint); if (!av_bprint_is_complete(&bprint)) return AVERROR(ENOMEM); @@ -1907,6 +1931,8 @@ static int configure_filtergraph(FilterGraph *fg, FilterGraphThread *fgt) ofp->width = av_buffersink_get_w(sink); ofp->height = av_buffersink_get_h(sink); + ofp->color_space = av_buffersink_get_colorspace(sink); + ofp->color_range = av_buffersink_get_color_range(sink); // If the timing parameters are not locked yet, get the tentative values // here but don't lock them. They will only be used if no output frames diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index decf63e7d5..d65167bf7e 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -934,6 +934,8 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, enc_ctx->pix_fmt : enc_ctx->sample_fmt, .width = enc_ctx->width, .height = enc_ctx->height, + .color_space = enc_ctx->colorspace, + .color_range = enc_ctx->color_range, .vsync_method = vsync_method, .sample_rate = enc_ctx->sample_rate, .ch_layout = enc_ctx->ch_layout, @@ -967,6 +969,16 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, if (ret < 0) return ret; } + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_COLOR_SPACE, 0, + (const void **) &opts.color_spaces, NULL); + if (ret < 0) + return ret; + ret = avcodec_get_supported_config(enc_ctx, NULL, + AV_CODEC_CONFIG_COLOR_RANGE, 0, + (const void **) &opts.color_ranges, NULL); + if (ret < 0) + return ret; } else { ret = avcodec_get_supported_config(enc_ctx, NULL, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, From patchwork Fri Aug 30 10:15:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 51238 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:4027:b0:48e:c0f8:d0de with SMTP id ky39csp304751vqb; Fri, 30 Aug 2024 03:35:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXWnF90TTEAwxZwo1jRI3mSuH1vxWwA+1l+wbZS0Wqz1IGVeNsRVWdXhxraZqpu9gzgDEeK7s5y/9h/+tgx2/C7@gmail.com X-Google-Smtp-Source: AGHT+IEqpYmeCx3/Cej4xIUNKxmLn2DBkBtFnHcSmctKYM2cWLXFSSqVRxZZ8xyJ/A9x2JYzn206 X-Received: by 2002:a17:907:3f89:b0:a80:a193:a509 with SMTP id a640c23a62f3a-a89a34e1a7emr56865766b.2.1725014114372; Fri, 30 Aug 2024 03:35:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1725014114; cv=none; d=google.com; s=arc-20240605; b=QoFfZbTwqNxr5n9vKdMdmBzZdLNkkONF9Mat4vZd+gE++ci4tON2fE7g+Pr4qnmtQk V2a0Jgy4UahGd9E9hHWiv2lh4VVFkggGbyceyCz6z5Xjzv/g/gzoXd/QM4n9qBqYtooH FdcGZEabzegCKvWIqTC8jUlLuIKfUmtLjZHDWOO3QfkglLsh4NhevkxwnyXRPBzZszai OaoaLN2+ee+O8CIHIaySkRZlSEea7UukYmyqJttJ5BFU4O3vDYczVcaKbQihr8feqh31 h3mY1k2ZbhgAsO+e3020q8z4Bz19gtDKzohGoHi/AEFENwc3SZWI/tKHx872u4FPF0we Nh/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc: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=w/5l1C5Dv6CMmb3HAoxKG74qVQwgwSn8SngCH5adTUM=; fh=tuUXnhgwUopqrbuJY3BExN6aocuFs1Cf//owLTlTyNI=; b=abJueWm4s6Epc7sjcxhVPPHjEURMBjStwMjlmxzb48Ka5z6dKLK8TZejYl3xzKeasm s41Ns8smDx1oAD8zxISaMpt33Jeq6WqqqaAVwyQRcxtVg3pE07qoAUlOBPiaDL5rrObm ZwjkDHGo6q58qP/o327hYIQG7HrPMAnZF4j3g/LsQIw2Kg9cMxwpcCMLkmOmRt/udt+H xA54czOYdaQC7dX6H0woEd0xYtX8qpbZmszEaJJN4/aWTytjhkmDSmOzCfmyI3/lneOW ZAMC8TFxNI1fZ6r4u0WZdZGq3+ih4AvjlTLWnkb0lO0oyRP+cDCgRCOqqpQph/p15KjK Uu8w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=V8MKQe8V; 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-a8988f410d1si308490566b.86.2024.08.30.03.35.14; Fri, 30 Aug 2024 03:35:14 -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=@haasn.xyz header.s=mail header.b=V8MKQe8V; 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 7A36068DBED; Fri, 30 Aug 2024 13:24:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 582D068DB6E for ; Fri, 30 Aug 2024 13:24:14 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1725013451; bh=PLnSTlvWAZ3IPgkSlsOb5Zrh96noodhvzimRioZSFzk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V8MKQe8VMAfXq96Orw6/nvNkJ9AIN4jRHX0MmAFeXCpA20CtoVReJ0laBz1oE15qK ntCRuMkanOD3Ankr8paNwTdWPqSDxcX9xUdhqANtmUsAkGztKfqOKpSKT6zDYIN2km sManSf18O/vty+K3chnu/5ZyzDURkB9+KKWOyfXc= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id DFEF548148; Fri, 30 Aug 2024 12:24:11 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Aug 2024 12:15:40 +0200 Message-ID: <20240830102402.18149-18-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240830102402.18149-1-ffmpeg@haasn.xyz> References: <20240830102402.18149-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 17/17] fftools/ffmpeg_filter: remove YUVJ hack X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Anton Khirnov , Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: D0gh6jcCQRlL From: Niklas Haas This is no longer needed, since we now correctly negotiate the required range from the mjpeg encoder via avcodec_get_supported_config(). Signed-off-by: Anton Khirnov --- fftools/ffmpeg_mux_init.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/fftools/ffmpeg_mux_init.c b/fftools/ffmpeg_mux_init.c index d65167bf7e..b0fe4c0f7e 100644 --- a/fftools/ffmpeg_mux_init.c +++ b/fftools/ffmpeg_mux_init.c @@ -997,21 +997,6 @@ ost_bind_filter(const Muxer *mux, MuxStream *ms, OutputFilter *ofilter, return ret; } - // MJPEG encoder exports a full list of supported pixel formats, - // but the full-range ones are experimental-only. - // Restrict the auto-conversion list unless -strict experimental - // has been specified. - if (!strcmp(enc_ctx->codec->name, "mjpeg")) { - // FIXME: YUV420P etc. are actually supported with full color range, - // yet the latter information isn't available here. - static const enum AVPixelFormat mjpeg_formats[] = - { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, - AV_PIX_FMT_NONE }; - - if (enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) - opts.formats = mjpeg_formats; - } - if (threads_manual) { ret = av_opt_get(enc_ctx, "threads", 0, (uint8_t**)&opts.nb_threads); if (ret < 0)