From patchwork Mon Apr 8 12:57:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47913 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455089pzd; Mon, 8 Apr 2024 06:00:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVNCbrSqSPTDOCaEvA56zwGncvc7UdWSKhMtHYrqzRPwvIMtEGyBserNKkwn9vwuzdYZs5FtNsOkTibw01tKMKQhsKD1ztlV/7owQ== X-Google-Smtp-Source: AGHT+IGEjwsu9p0TxSxzGErKagiiJ1Ymp8jEjdmxfn3QGkfU5A/b85wjz34nEM4F79aEk+bSG1SK X-Received: by 2002:a17:907:9714:b0:a51:c1e0:2bff with SMTP id jg20-20020a170907971400b00a51c1e02bffmr4227318ejc.2.1712581219302; Mon, 08 Apr 2024 06:00:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581219; cv=none; d=google.com; s=arc-20160816; b=vMbT6XVvfTDQQLXT8Ifrg+C1GwxMZcRfsHL8xEKZF7tptYFtGOo+S2MD4V+OcFqfde RlOl2eQ8pRJs8dJpmkXjQRCIhZG8aLJ1pAGo9QX6ByeBp1WxwEMykC7UJh+GSwHvUoJ4 4+gt/zBuXSRBza+I+xycQ1M+X30PskPfzSaNwSgKh3dHYGDTCCzJ+KFkYlFadiVB6+bk GGp7zDzH7AsVhL9Hz+AdgoI2kffOb9ipV8AipTf9LaWdyptXiyf8ncqZPtvjsLjho19i 0Qww7rdGu4qREudJHhNRW5SYH9X2FQzu+YdzYQeu+r47ur83mjJX9rRuMm8/v5m5yjXx 0RWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=ObdW+2OG6xkoE2JRlrzSbcez0VCkgtAvRlRa8McBc84=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=tZOfmg98ASfwXiv4jKZdBJarumktNgVC+4t4rnWRPOu6qR3ezUiXghL2jpQ13hGTQd zzuipiMyDAlPH+/fikhtTk7E78Nwy/Ym5OzQ9kMKOdIypHvkKsiLoeugEpQ5OPpjcE6/ hnOafa50fxpA19tFC0Ee+82qOUvGBqx0v+QvYdczCtBo8izvVgjKBmgxRbel+7FRSWjo x2npjVNgE8t/uS0FGxOiQANBbRAi1MV/UME1BD4SyzDymNEFhUEbefjrI0iLAcjLWew5 Orby3MWdr33fLhgnu+IJkAti9QJT2DZ0pBAOsCWBT/NIUppxW4T0b+UxNSb9SekDowZj OrZg==; 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=KkLIv921; 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 pw1-20020a17090720a100b00a46fe9df976si3834261ejb.671.2024.04.08.06.00.18; Mon, 08 Apr 2024 06:00:19 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=KkLIv921; 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 2625768D22B; Mon, 8 Apr 2024 16:00:01 +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 E7F0968D13D for ; Mon, 8 Apr 2024 15:59:52 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581192; bh=C2YrPJzUO67Pl1kpGmrX5mhHsB45Lizm3rTeDuS61PI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KkLIv9212hUCOrXATMzt/lHt6IQFv/oJWNqGz32ceAEBtcJTfyJeyi2vDe9T0KgDt uptLntpyIk7rlfF0tLNAi8g+Q5QlqIOA1A7+6LyhglN0bFgLMssC1zKcRbIiHfC+DA DhMmVyfiQPp+cxgIobGtq28e8rHmz30wJj9Eb5p4= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A569542752; Mon, 8 Apr 2024 14:59:52 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:05 +0200 Message-ID: <20240408125950.53472-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: J99heEHMWNKe 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 9f18aac6487..c2885fe5858 100644 --- a/libavcodec/amfenc_av1.c +++ b/libavcodec/amfenc_av1.c @@ -485,6 +485,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 abfac2a90f2..1aca90ff231 100644 --- a/libavcodec/amfenc_h264.c +++ b/libavcodec/amfenc_h264.c @@ -539,6 +539,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 0a74ccd6c48..cbeca96b43b 100644 --- a/libavcodec/amfenc_hevc.c +++ b/libavcodec/amfenc_hevc.c @@ -454,6 +454,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 6179b505836..4f81a4015d6 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 495f6d36fb0..a2391b31ef6 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 5657d0f96c5..c63e6f2a301 100644 --- a/libavcodec/cfhdenc.c +++ b/libavcodec/cfhdenc.c @@ -871,5 +871,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 31ad5ce0cfe..4698dfd725d 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 d6757e2deff..2134f184094 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -133,7 +133,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 0cb25d77143..31e507a8134 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -1371,6 +1371,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 3afeedbb871..a4433edc2a8 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -1247,5 +1247,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 94d9215acd6..9a6cb4673e5 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1303,6 +1303,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 6a96cb0f2f9..40eec07b3eb 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 438ebb63d91..52bed42a7fd 100644 --- a/libavcodec/h261enc.c +++ b/libavcodec/h261enc.c @@ -413,5 +413,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 294d6ad41cf..5e8b5c0dd76 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 97abfb3f456..a3ac98b3f97 100644 --- a/libavcodec/ituh263enc.c +++ b/libavcodec/ituh263enc.c @@ -907,6 +907,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, @@ -938,6 +939,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 8cf82f7216c..8cee11a8c08 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -1864,6 +1864,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 4a71bba9c9c..5023d2fda42 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1517,6 +1517,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 0711d9ab387..8be1c8c3bff 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 0aa2a54e68b..7107c1a6799 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 6a4364b1fee..01b67dffda4 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 b83e2118edc..546d00297d9 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 105c3369c0f..f15152b5531 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -729,6 +729,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 58da008a820..8844f4be6ac 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 bcbdc4981e5..cdb83312614 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -2044,6 +2044,7 @@ const FFCodec ff_libvpx_vp8_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_YUVA420P, AV_PIX_FMT_NONE }, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .p.priv_class = &class_vp8, .defaults = defaults, .p.wrapper_name = "libvpx", @@ -2115,6 +2116,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 f40dd013453..670412cc6eb 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 6f52fa7cf1e..c5361d7f920 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 eadb20d2b39..97d1385f6ef 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1670,6 +1670,7 @@ FFCodec ff_libx264_encoder = { #else .p.pix_fmts = pix_fmts_all, #endif + .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 @@ -1727,6 +1728,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 0645cd20457..3533ac5cc1f 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -948,6 +948,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 4c7b1908cc4..d0f6e141c75 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 c493ddc325a..1021d2ae2f5 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 1d9972619da..f434737ae61 100644 --- a/libavcodec/libxeve.c +++ b/libavcodec/libxeve.c @@ -613,5 +613,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 b9ac39429de..6e6c29ee21a 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 46546e21603..927420c2d43 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 93eabb9f9a5..bc0fd9142fa 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -693,5 +693,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 b59de75b9ba..a4519bbc981 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -627,6 +627,7 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \ | AV_CODEC_CAP_HARDWARE, \ .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 b6de50edce7..137b68a98db 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 f956dde78f0..ff1119415fc 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -1245,6 +1245,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, @@ -1264,6 +1265,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 f806ad8a749..3da94401d26 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -1404,6 +1404,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 119ea8f15e3..82e64f6dc00 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -685,6 +685,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, @@ -700,6 +701,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, @@ -715,6 +717,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 d37ee07bff2..562e2bc7fef 100644 --- a/libavcodec/nvenc_av1.c +++ b/libavcodec/nvenc_av1.c @@ -194,6 +194,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 4d6f968e0b7..8cbe4dca39b 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 bd8b6153f31..0a4c36357ef 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -253,6 +253,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 86913237b27..2c3865506ff 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 33727bb07e5..30360a3651b 100644 --- a/libavcodec/qsvenc_av1.c +++ b/libavcodec/qsvenc_av1.c @@ -150,6 +150,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 53e4e744b28..304d1e7dcb2 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 2ccbe0464b2..803d1b10a1f 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -406,6 +406,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 2add12adc90..b2458eee062 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 fabf461fe32..ad3da6d6723 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 a760e4932e5..b247c39c86e 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 a6c167b1dc5..7cbe820f9a7 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 8a405b86867..2104ee0a241 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 dc26877d5e6..d0e24f2f26d 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 43ca602762d..2d767e1f0ad 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -2143,6 +2143,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 5b4ff4c139e..4a871039eab 100644 --- a/libavcodec/speedhqenc.c +++ b/libavcodec/speedhqenc.c @@ -294,6 +294,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 d71ad07b861..0499b3d3a6e 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -749,5 +749,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 25539d03dcd..5e65979c79f 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 59e198458b0..7d2572022f0 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 e08db5d5d36..5770e87ea10 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 02a31b894d6..571bf594577 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -948,6 +948,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 bf51df0f51c..12f3048a9b6 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -1391,6 +1391,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 2777632fb62..174a45dd027 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -1508,6 +1508,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 c17747e3a94..e526136fecf 100644 --- a/libavcodec/vaapi_encode_mjpeg.c +++ b/libavcodec/vaapi_encode_mjpeg.c @@ -583,6 +583,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 c9b16fbcfc0..a3da298b0e7 100644 --- a/libavcodec/vaapi_encode_mpeg2.c +++ b/libavcodec/vaapi_encode_mpeg2.c @@ -706,6 +706,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 8a557b967e6..d731febb7fb 100644 --- a/libavcodec/vaapi_encode_vp8.c +++ b/libavcodec/vaapi_encode_vp8.c @@ -261,6 +261,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 c2a8dec71b9..8d07305832b 100644 --- a/libavcodec/vaapi_encode_vp9.c +++ b/libavcodec/vaapi_encode_vp9.c @@ -314,6 +314,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 365d43146db..ee82c067927 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -1238,5 +1238,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 42065cbcb3b..656f136d472 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -2958,6 +2958,7 @@ const FFCodec ff_hevc_videotoolbox_encoder = { AV_CODEC_CAP_HARDWARE, .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = hevc_pix_fmts, + .color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, .init = vtenc_init, FF_CODEC_ENCODE_CB(vtenc_frame), .close = vtenc_close, @@ -2997,6 +2998,7 @@ const FFCodec ff_prores_videotoolbox_encoder = { AV_CODEC_CAP_HARDWARE, .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = prores_pix_fmts, + .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 13ec2bf6ff7..fded6f0e768 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 Mon Apr 8 12:57:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47914 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455273pzd; Mon, 8 Apr 2024 06:00:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWJHJ2u1K7P4QkVKqT9k/7HJDeMzOiOdYRLd1OWK/FcnbfirgW+aY8YJoMHsr/3sOgkFLNi+AeagUce4G5zA2/2Rks3TMKEZKUE4A== X-Google-Smtp-Source: AGHT+IF7xxcQNTDV2KSbL2GkpuvaZuamaYx7EnbuL83ix6YRGNHL71iko/VtAbb05uCbY94SaBzW X-Received: by 2002:a17:907:7e85:b0:a51:ab81:6062 with SMTP id qb5-20020a1709077e8500b00a51ab816062mr9772598ejc.30.1712581230072; Mon, 08 Apr 2024 06:00:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581230; cv=none; d=google.com; s=arc-20160816; b=uxlbYvrtlnxz0bhqlrw+b42AB4tyIJ5tzGd0OjyVlqE4PXG34wWq53CGelvLVSlxgk ZnuPyj7vEnPE/gfBJ88UDTLrYLj79K+Tg57PUyKhszWE/u+u/Y2RJ58QfmQur89jtHjO ETho3xL4pNOJzxURJSWFwivSyRjJrS4du9BlVZhynUQ5FYerJFvHwS+mfIs1rVf+cC93 5DBslD7qXR0RjpA8B1JhfV/luQIjMuquxYzO4THXooScx91U+ts7AbPNIy7v+gQoPK11 UIv3Wwtphorfr1f+zCMKVinjHqlIUehMo+jhPcYbrJJgVFsOeghHiHSGdKC3AfVZ/1j8 EVog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=AdKKaWkCK8FnL4NczoP4ZnyGWzeUBbd15QKxI+lnZzc=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Br12YrBrhHwXKB0/Wxiqg9sQbEatcvZviChnbDKOYR3vFEbJagn+f0ji0ksesE014k xF9Vh5bdRNTeuXYQxufKu8P6Yma76oYlOU0vnE0u6FTC14KawJEiSNbCmiLrRRlBO4k2 OilD8uAyx3tED/I2p8U0SMMgRo34v45bAy+citSL13DY9whLXdXTvjf+XyxYl9K3fKOF oVaFBoLkwUmfvD4OPqXEGlP1qkZrvyhCsny2zFvZ5wZtYSfqntYWm2cI5gs6+AikLoXs jRAFDu5qwpyFf4A27xZchSfnk0rEWs6yVlASpaVP99kOH45U8LCBqjAjv0DoMMSfnK50 V2eA==; 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=t9WxjURR; 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 du17-20020a17090772d100b00a51da29724bsi707785ejc.15.2024.04.08.06.00.29; Mon, 08 Apr 2024 06:00:30 -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=t9WxjURR; 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 6252368D1C8; Mon, 8 Apr 2024 16:00:02 +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 2A5EE68D16F for ; Mon, 8 Apr 2024 15:59:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581192; bh=GK8qfOa4ZRseTtkfqCkiFkelS3JEGMf7bziw9HD4dJ8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t9WxjURRjRK4oZt93a4hxEbzUZNGUvtyYjp33NKz7uM0DfXDvnFT8IatEd8aGvg/h dyCoRalMWW9ur6/h4g66bOJGdRl9l7SE6I09FqLwniY21cJLOS4BhdxBZvwdVYNDbZ OTmWLYRBTeLCjCp306yaQqRIZ4lLI5Rh9IrsxjYg= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id E0A5D42765; Mon, 8 Apr 2024 14:59:52 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:06 +0200 Message-ID: <20240408125950.53472-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: 39dj7ylhn/s4 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. I decided to drop the explicit length field from the API proposed by Andreas Rheinhardt, because having it in place ended up complicating both the codec side and the client side implementations, while also being strictly less flexible (it's trivial to recover a length given a terminator, but requires allocation to add a terminator given a length). Using a terminator also presents less of a porting challenge for existing users of the current API. 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 | 75 +++++++++++++++++++++++++++++++++++++ libavcodec/avcodec.h | 27 +++++++++++++ libavcodec/codec.h | 19 ++++++++-- libavcodec/codec_internal.h | 24 ++++++++++++ libavcodec/version.h | 4 +- 6 files changed, 148 insertions(+), 6 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 0a39b6d7ab8..fdeae67159d 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-04-xx - xxxxxxxxxx - lavc 59.6.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-04-03 - xxxxxxxxxx - lavu 59.13.100 - pixfmt.h Add AVCOL_SPC_IPT_C2, AVCOL_SPC_YCGCO_RE and AVCOL_SPC_YCGCO_RO to map new matrix coefficients defined by H.273 v3. diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index 525fe516bd2..96728546d6c 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -700,3 +700,78 @@ 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) \ + do { \ + if (codec->type != (allowed_type)) \ + return AVERROR(EINVAL); \ + *out_configs = (field); \ + 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) +{ + switch (config) { +FF_DISABLE_DEPRECATION_WARNINGS + case AV_CODEC_CONFIG_PIX_FORMAT: + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->pix_fmts); + case AV_CODEC_CONFIG_FRAME_RATE: + WRAP_CONFIG(AVMEDIA_TYPE_VIDEO, codec->supported_framerates); + case AV_CODEC_CONFIG_SAMPLE_RATE: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->supported_samplerates); + case AV_CODEC_CONFIG_SAMPLE_FORMAT: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->sample_fmts); + case AV_CODEC_CONFIG_CHANNEL_LAYOUT: + WRAP_CONFIG(AVMEDIA_TYPE_AUDIO, codec->ch_layouts); +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]; + return 0; + + case AV_CODEC_CONFIG_COLOR_SPACE: + *out_configs = NULL; + 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) +{ + const FFCodec *codec2; + if (!codec) + codec = avctx->codec; + codec2 = ffcodec(codec); + if (codec2->get_supported_config) { + return codec2->get_supported_config(avctx, codec, config, flags, out); + } else { + return ff_default_get_supported_config(avctx, codec, config, flags, out); + } +} diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 83dc487251c..64f31375fc6 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2690,6 +2690,33 @@ 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. + */ +int avcodec_get_supported_config(const AVCodecContext *avctx, + const AVCodec *codec, enum AVCodecConfig config, + unsigned flags, const void **out_configs); + /** diff --git a/libavcodec/codec.h b/libavcodec/codec.h index 6f9b42760d7..f7541ffc42b 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 2134f184094..bac3e30ba2c 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" @@ -270,8 +271,31 @@ 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. + */ + int (*get_supported_config)(const AVCodecContext *avctx, + const AVCodec *codec, + enum AVCodecConfig config, + unsigned flags, + const void **out_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); + #if CONFIG_SMALL #define CODEC_LONG_NAME(str) .p.long_name = NULL #else diff --git a/libavcodec/version.h b/libavcodec/version.h index 84a1c02ce4a..da54f878874 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,8 +29,8 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 5 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MINOR 6 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ From patchwork Mon Apr 8 12:57:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47915 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455445pzd; Mon, 8 Apr 2024 06:00:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWrpLMeLaBq6epN+2XAXSqWI3cDXOYYZsmxoFIC0IHl4RRDZ3rCjs9njfZ7qK5O9YjsIFWzpwNsDijZXljGt6DHSlhriydF/1W2VQ== X-Google-Smtp-Source: AGHT+IE2HVywVEmwsIWs5E2ePuE/h9AAxf7iuLXpXnKoM4bwGHedaPjyEdf2mvTZrWFwEZxavMO8 X-Received: by 2002:a50:ab51:0:b0:56e:2aef:f92e with SMTP id t17-20020a50ab51000000b0056e2aeff92emr4928665edc.17.1712581240276; Mon, 08 Apr 2024 06:00:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581240; cv=none; d=google.com; s=arc-20160816; b=j4b/Iey13gr8IATeKiMaJVLix1SZoFr/yPVoAr1C+5dNJdyE8zKGEqmmNwhGFUfB2D FAnQ8lWOz0KIJcGKNao4qZeehugHsv+/kEOHRGXF431EGLmw03SKNKfc8lQSvrZu2aXf Ou41MktIfuqN2T/y5xatPcD/SN9ncf3tQiW1vMSyWBz9aFclYqNmqBXlkJ199rBOTdVv 0TCjd3pERPVVUv2bmb2PLfXBOctNrXBLXG1RJPcACp2HPSLlzdy7wbXST5fe6Nc+TfOr DdLbg+XnnLGMHD07Xj9XvnTIX/iTa+j2s5UHCRM1PMfyO8mEBM4qvKR9QhZFdhNZEd7c CENw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=2Y202rhFJHCGUXWaGV5maD7cdvir070NX1QUL4qfv6Q=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=BRLXOvmof4tTd5kZnjx4/krMPEbsmgkrGToaGa2h7amHzpaBIUadnq5H6kt2+nDA/J WmXywAjg23VslQ80u+W+iUg0MaIyCQoJ5XTZPdikN3unv6oxCVUlhBWdSrpnflw5zgMs +5d1JNtJpMN4AgRXDJuMQHV/q3cOhtsqGz500TzXUqlBRi9tuyGW7VNmxsXIBbRvhCl2 3ZPJXt0vLfw9v8Q9pBM7hJT1wqrdNopPnMysT+CaGQSVGZDNRnduh4MvRVVMOlv5+1PL B2toeVRom1ciK6S3TDxCRCwxIXuKt0hXBR99VAxI7qixgf+0dP5vuamkiuLIfTCibgHu ay/A==; 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=f0uGnYlz; 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 i1-20020a50d741000000b0056df97dbff3si3617812edj.68.2024.04.08.06.00.39; Mon, 08 Apr 2024 06:00:40 -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=f0uGnYlz; 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 706F268D25A; Mon, 8 Apr 2024 16:00:03 +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 6076768D16F for ; Mon, 8 Apr 2024 15:59:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581193; bh=M05+RXa7tCLEcr/XD9YkzRUNJQEklDILgd6nsZaiGNU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f0uGnYlzHf9ivjha5Oi/6nLLZnbsbDFoKnSZQBgJ+OXLfeLxP3cgj8H0IrXIgPiet bi7W4f8cQOI+9CV4Rjk4UvXrIEdQmbNmreQKOmnrL+skNE6zP2sE2lC6+SxCA+zKTy sSRv2i6/OjHmlxnKZgwHnZEnApB2JmZ2qfI3tqrc= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 1F1D142B27; Mon, 8 Apr 2024 14:59:53 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:07 +0200 Message-ID: <20240408125950.53472-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: veiSdKzGaMKC From: Niklas Haas --- libavcodec/encode.c | 88 ++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 33 deletions(-) diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 34658d13d0c..d0e79379048 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; 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); + if (ret < 0) + return ret; + + if (pix_fmts) { + for (i = 0; pix_fmts[i] != AV_PIX_FMT_NONE; i++) + if (avctx->pix_fmt == pix_fmts[i]) break; - if (c->pix_fmts[i] == AV_PIX_FMT_NONE) { + if (pix_fmts[i] == AV_PIX_FMT_NONE) { 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; if (!av_get_sample_fmt_name(avctx->sample_fmt)) { av_log(avctx, AV_LOG_ERROR, "Invalid audio sample format: %d\n", @@ -659,53 +668,66 @@ 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); + if (ret < 0) + return ret; + if (sample_fmts) { + for (i = 0; sample_fmts[i] != AV_SAMPLE_FMT_NONE; 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 (sample_fmts[i] == AV_SAMPLE_FMT_NONE) { 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); + if (ret < 0) + return ret; + if (supported_samplerates) { + for (i = 0; supported_samplerates[i] != 0; i++) + if (avctx->sample_rate == supported_samplerates[i]) break; - if (c->supported_samplerates[i] == 0) { + if (supported_samplerates[i] == 0) { 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); + if (ret < 0) + return ret; + if (ch_layouts) { + for (i = 0; ch_layouts[i].nb_channels; i++) { + if (!av_channel_layout_compare(&avctx->ch_layout, &ch_layouts[i])) break; } - if (!c->ch_layouts[i].nb_channels) { + if (!ch_layouts[i].nb_channels) { char buf[512]; int ret = av_channel_layout_describe(&avctx->ch_layout, buf, sizeof(buf)); av_log(avctx, AV_LOG_ERROR, @@ -713,8 +735,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 Mon Apr 8 12:57:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47916 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455567pzd; Mon, 8 Apr 2024 06:00:50 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUy8RHMcwMHJtXxd/DYCcYw07ZOKffpIVRMNlQPppO1rd2Jeq001q8T+r7g34AqT2DAx+wAYu1+HyLlmKC/7cicFVRUaP8Nq6Tqhw== X-Google-Smtp-Source: AGHT+IFsXEuV60/WJZ8unEN/LelTTrToRFDuWGt92yUbdm8lI4AmYL1mwsuyLSRRpwlPNj/Wz42q X-Received: by 2002:a17:907:9410:b0:a51:c84b:f17b with SMTP id dk16-20020a170907941000b00a51c84bf17bmr3648297ejc.69.1712581249995; Mon, 08 Apr 2024 06:00:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581249; cv=none; d=google.com; s=arc-20160816; b=syj2GsmPW/Py7dESEkr+wvzBSX8cMShAmlmIUDAyxFNxFbrPCVbt6mFo8CVN63E5lg Z1qqICHGjkpleMiWtN7AYUN5AqlxAgyRJ57LaUciCxaKTIMOccr0hopUmJYXPCEJ/bug aWfXoLR/xeeEF2hPgpqQ/6XvRsa9HvzsTdsSMN+/xmTZdF23NnuPmRbaMNQdzzZPrAO/ zN8bsrn6NTETFbQSKbxJFhl1DksnGfyMV0ifu/58cN+ZXEctikp64NHF9dpZU4E7xArm cSNuOrfhNLX6fUyg27UjI8l/76pp5COuUpCrNQ72IPIxInXXzpzOMk1RE8lxrJsGWTi1 w2yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Iq8fU6LZBphVtmOD1rMJ2i0kQtCR03CeT9mK52K/cz0=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=XVPWGjSaRprJLY9/6sQnJn7ji8sm7CrHfPMzBn5Ub0aRNkrQbieELsJdDyggYdU75j rr1ZNJMhqj5ZB9KrkxvNPqaZY1ZnMdw0pzkm/j+5WM0XFhQ50Ls/ydkJWztVgWl0A6LF BIPSkAHc4kPGmdGMKOnI85M62wXsfu0FmAoi5g6jRczAIbodZUzu4bvkdCmCLNbDAc8M GYXGEIXXwn05LZYcgAs6723Utt7WF07xhlCGS/J5biybDzgPmO4wF9VTBYP8zowvomHk mzLE/w7O+scLPgy4mcJoj22tA4ofoJNhosNmhPoziBHj7WUifaWKGFknZ02pRWw+AmB4 I4Og==; 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=GL2pCrb4; 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 do5-20020a170906c10500b00a51e43bcb38si69386ejc.509.2024.04.08.06.00.49; Mon, 08 Apr 2024 06:00:49 -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=GL2pCrb4; 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 89C9268D26C; Mon, 8 Apr 2024 16:00:04 +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 9192068D16F for ; Mon, 8 Apr 2024 15:59:53 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581193; bh=0waB0ZRpG4JRcU/69Vg8TSniLYKB5lbR7owghTOYBJo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GL2pCrb4XfZRNdfgHYU704LnqE7adx0vgLZI5G9w9dPyaDp0FsQcQJxSyebe+cqq7 Uzwg/pMxBR9vBD2DxA3xREYKm1/+oOQKh78sxl3SrkCyjOm64mqYiswUtTu0avmhsq SQ2d4Mxad8+Cm5hgzh19c1PRiEX9biVkxmLDYFLI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 51E5B4301F; Mon, 8 Apr 2024 14:59:53 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:08 +0200 Message-ID: <20240408125950.53472-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: rw5BNSdzubmz 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 | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index f4705651fb8..a9f1797930a 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -916,8 +916,41 @@ 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); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_FRAME_RATE, 0, + (const void **) &codec->p.supported_framerates); + break; + case AVMEDIA_TYPE_AUDIO: + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, + (const void **) &codec->p.sample_fmts); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_SAMPLE_RATE, 0, + (const void **) &codec->p.supported_samplerates); + codec->get_supported_config(NULL, &codec->p, + AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, + (const void **) &codec->p.ch_layouts); + break; + default: + break; + } +FF_ENABLE_DEPRECATION_WARNINGS } } From patchwork Mon Apr 8 12:57:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47923 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456718pzd; Mon, 8 Apr 2024 06:02:08 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWfizhx8Cyl3P8ES7hb2XBI2hI5ixiyC45gzrWDeHxGc7ahUxk0JNvmhoYn0+AyNNy7oFIfI4X/yMYmsnv6Gtc7dvU9Wjg8r5V7aA== X-Google-Smtp-Source: AGHT+IGVz6yueBl1+dMeD4Ldh1ivM1WEdaYqdQxLbgjOMVE1yQNphBEIfgFN8ApPcTeKKNgZNRxe X-Received: by 2002:a50:d784:0:b0:56b:9f35:65f9 with SMTP id w4-20020a50d784000000b0056b9f3565f9mr7330886edi.0.1712581327879; Mon, 08 Apr 2024 06:02:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581327; cv=none; d=google.com; s=arc-20160816; b=knoivVImrzd36E5ZASeGYisXZv4A3vKimdPOaCETcnAHfyAHdVRu5cfic1OfgnScbu iSQkdnfW26G/Z8neAbtDqasrtqDUgYLXA3pDX1q0CIcReSbdZARHqD/igc2jGZN7XAZT 3qn+sFaUNiMh4AaORWelKoJcGFj19L0akxNYhfjIHzpguHLIm+RfCeb+EDaYGEXRtMos OqiE9kEq+mtzty9tv7zcoeJ1dMruzOPQK7VBuFZWYRNUSBA7Jhhjch0NZwGVooxUEumJ FyicxZ7FX6Wn/RIdPp5c6CddWi9mzapZZDsZKBHYfEbA3rWkzYFEYP+4cfosP3HFpd+Z xAcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=WGx39s+EQgOfx9r4p8sFyQuhTXIP/iTfb5exMgAw6cI=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=aNZzcDcP6RYq8Z2RH+d4m8Y6i6L4Zo0Ap3qgWZGbCkfgrz5nQHgwVatGSKKRlFVi47 hjmjufP8WxWBWm2XVC5S53eV5uhZ3SG3SqTwTeYNijPEa8B0V7jjGQ6YfI6mJxZqQ8f2 HUtOhD45CjZDtmlO8TuTxjHIvDj3cdFi7xT8x35I52C9kvDhB7F+kSwwmGRHk4EQRcM7 qDWO2fURgle0z4gI86vSLuy0o4TvxEnUh1t3yu6/o1ckOfYu2mhZdqptPArtwqoQwD5H TZuVsrl4t75Z4RSnvv7gfev6kBpeTOKFV2SdajBVbyYJiHbDZqYsgNJjaLThaqgGpXYr bIjQ==; 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=VUDPQhn0; 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 u26-20020a50d51a000000b0056c3c5dfca7si3673376edi.21.2024.04.08.06.02.07; Mon, 08 Apr 2024 06:02:07 -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=VUDPQhn0; 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 9F62968D2E6; Mon, 8 Apr 2024 16:00:11 +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 0E42B68D240 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581193; bh=+lICPwiAl7UATWCSFFOfYHQ3NE/QVT8DDYgWWu6L2gk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VUDPQhn0kqJOxi+/NemZN+pfJfgcWtyKilvVzFRbcVKMX7mtsKB3nZCJKMwtZEAc1 DCMIhvJUhf2SIbTT/adZyak2vJtTYC6zqtzakZfGtxt1Oo6tuwn+do/XfIwtvS/KHn InQnMry+RuS6sQL73iXZq6HZz+O0T3t1n81Hf2rQ= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 8762C4344E; Mon, 8 Apr 2024 14:59:53 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:09 +0200 Message-ID: <20240408125950.53472-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: i7Zo29Cll1La From: Niklas Haas --- libavcodec/libx265.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 3533ac5cc1f..e36a1eb9505 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -892,14 +892,24 @@ 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) { - 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; + else if (x265_api_get(10)) + *out = x265_csp_ten; + else if (x265_api_get(8)) + *out = x265_csp_eight; + else + return AVERROR_EXTERNAL; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out); } #define OFFSET(x) offsetof(libx265Context, x) @@ -952,7 +962,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 Mon Apr 8 12:57:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47924 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456922pzd; Mon, 8 Apr 2024 06:02:22 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVPi1+PaCtMwov0qcx5bsLOJKH7NkrTRC7IRfCGTHcikAYOKDsdBBpY8AKXTHbURnod278lM/QeRWiURVGLQEgzZmjMmdMiHKP4wQ== X-Google-Smtp-Source: AGHT+IH1WzXqDOqB0QIzVd6U5tyAoudYBqG7MBJ0wELKlPjFge8apYF0PUqtpivqeTevg4hgtlTJ X-Received: by 2002:a17:906:f588:b0:a51:dd26:84db with SMTP id cm8-20020a170906f58800b00a51dd2684dbmr1413150ejd.7.1712581342239; Mon, 08 Apr 2024 06:02:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581342; cv=none; d=google.com; s=arc-20160816; b=NiN9+CI0DiIYK+8Zw8ZgZ7U8ZXpt8T4OEFIPEgJDlSjcsnkE+lqixYwZrAwBZTonk1 HBwj5dxxS8/btkK6KzXKk6gGTcgEiq5eb93ZBphxWO9FSJRSjNDMuEH+9fUtjdHXXoaq 6b0XwbDr654yd4xrRrkZD3xX4d6LW9qVhPoI7Z+a0z9SsD50WDg3Zxrzh7OIuFKfYxkc W9fDI/nJCBwdjDHRFf94kOypFJ9NtMp/AMs8kN5WhwIyScq/OHrLEyKjPA8AqBqLWZKU ZGKG5oGIGho4yF/B+o4BAJg8RQ5dmr423SUiB0QwWYPEZxydd6grV3QbxV3jD9YY3dJt +qRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=gzocABhqj5Txyr4ATBXALUcLc2bxfBiUS5xon49xMMU=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=sB+WLHAMYr8m4liS+OGZ790MPhxQceJUPhAx6Nk7Sugm41clcoHnywbb43spOnzcqX TUfDeRbwO75Vic1aOA0TEWTsQkqDm1UdvRAtKoyWml4YiYxWsJesw2jchbU3R0SjlwJi MhbquH2K6dp668Owd1Y8phf7xVqiPoGs8aAquGkc9Mn71b7AFHV2hc72dRfaEZ0shtzz l22nCGOIABo3P8yXirbXnfsEZdsEyAyBI/pyujTKIfVBzsS9AjsofXtGkq8Rc4G1lHTm GS1pY57jsepB9qr5fk8pESnnFhufmF1fy6zcx7or+oB+4x6b8E5wMf3nfSBTmRQLKTwe Q9MQ==; 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=iidgHqOb; 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 dm5-20020a170907948500b00a4734b06c8csi3800781ejc.630.2024.04.08.06.02.18; Mon, 08 Apr 2024 06:02: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=iidgHqOb; 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 8C99968D2F1; Mon, 8 Apr 2024 16:00:12 +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 1661368D247 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581193; bh=YmrcSJ9TBoaegN+fuf3PImnGxSe6Tt7FLC7fpkMBQ3Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iidgHqObL05VgPJDUhvG6F7Kt5Ci1nSCMNTQPk53i0Atm/HHTtunfghfcn68Pb0Ub 76lpM8VpxSpaLKC3YTuozxnUX87bIvOI7QrUN9T97EPF7f1eSkKFOGXhFEcT9DFQyI pvu+Ol0qfwMhHzOmzF76XLc5XDCPZ+PDq+l6W6b8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id BBA4543961; Mon, 8 Apr 2024 14:59:53 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:10 +0200 Message-ID: <20240408125950.53472-7-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: fEC+7Nf/WrwJ From: Niklas Haas --- libavcodec/libvpxenc.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index cdb83312614..64dc69f8547 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -2087,13 +2087,21 @@ 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) { - 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; + else + *out = vp9_pix_fmts_highcol; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out); } static const AVClass class_vp9 = { @@ -2122,6 +2130,6 @@ FFCodec ff_libvpx_vp9_encoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | 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 Mon Apr 8 12:57:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47925 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2457036pzd; Mon, 8 Apr 2024 06:02:30 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCU5aPyPUXRaxaYXpQxSew0l9Q63uVurzQNlz14jEZuXE/ayGCvIZlSkTaKjplBodxec94fVTBIegjqaysqgXfiCbaoT1JHdMj4FBA== X-Google-Smtp-Source: AGHT+IEwxa3Nv4VI+T5RH2qZwqbkanlAKUo6jDzBWrYqxaffN1Sn2iy6Ovv2TEK+KkitFAoggUR5 X-Received: by 2002:a50:d518:0:b0:56d:fca8:d2d6 with SMTP id u24-20020a50d518000000b0056dfca8d2d6mr7516514edi.6.1712581349657; Mon, 08 Apr 2024 06:02:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581349; cv=none; d=google.com; s=arc-20160816; b=K4tDJahmQOrfCZdvAEhgcoSoNqLd5YIG7xVc0NwlXJirz2QPN3WLUPHfaYBjfl3MU4 CuAqdMvedXn33zyKILthDIiX0oL07nKiYVk0LOqI1XPc7atpsSDzhYZUuIkgC2jrr4WG fFFmlVdXz6gq5pQUOcN0ydjkBKZNflaUfv38HGu/2xXxgxa9fHjhl1z5iSCdrk7d29GC 33QdBiHxLC8KdFNucTNs+MWwdd6N1f3CsujKhAiTDMJd1EOTSLn82MeMPWtLqLrWiBvJ kK2TyoPbXRnHqxoVcWcGKo5fTUQwXdEuIar04NC8aobuo3SFdBmujrL9rvyJTdtQ4gt4 KNcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=FhFLYZKJNPeiFJqs7vwHAyV7ot08GAlah+o3BThGI9o=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=q0pOSfAFHktHxKTyB81K7Xvt9rXqMKKUYhtox6/0bpuj3YL3MbnTiAAqMtIZUGxbZQ JVWAC2g4ifqgNpPNX/qxkNz+UoZMBtTbP+IALpIRL+o6VFfp5WFiz3LG44aCfz8UVioZ T+siA/d38jeacRunG1ZAcrAxs3G0mXs5llKubxtwtQMqE2Qk+GBCqkEjX+/0R1yvp1Re cQkxI7UXZamsgLB+1Y1Di85osebzmV51uoMMo+A14UVOzPb2aFw7AEBk791au42Nez/t 1NfXh1GiiUymkO4D/rdS1NWonDdl+SdNiFY5d05A7rU3u5mzAcuBmzav1Vj+lOq0BI+j Sxhw==; 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=CijgfTAl; 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 t17-20020a50ab51000000b0056e0bad0380si3531911edc.11.2024.04.08.06.02.28; Mon, 08 Apr 2024 06:02:29 -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=CijgfTAl; 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 9A60D68D1D2; Mon, 8 Apr 2024 16:00:13 +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 3E4AA68D247 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581194; bh=HkDvjrtRNqX01zYOO2Hqr5OPSKntVuFM7y/NaZ0ryEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CijgfTAl7j57sSirtWh6npu++i6tZCb4tVS9bZ8Ku9M96wiY+Oet4oqp5E8P93TpA kjVDjEWpp/wnEVklQABWASOuzbUJOVaO8J9rbt4p+mSeF/qNbhs18PClJ1JAEZ85p5 vKdzWKBOY7rS3tqz2s4roiIBuIt2TYcQqN9z92V0= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id EFC62444D6; Mon, 8 Apr 2024 14:59:53 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:11 +0200 Message-ID: <20240408125950.53472-8-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: rFHBYbyiUiAs From: Niklas Haas --- libavcodec/libaomenc.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c index 5023d2fda42..0488e5c3c9a 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1398,16 +1398,24 @@ 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 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) + *out = supports_monochrome ? av1_pix_fmts_highbd_with_gray : + av1_pix_fmts_highbd; + else + *out = supports_monochrome ? av1_pix_fmts_with_gray : + av1_pix_fmts; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out); } static av_cold int av1_init(AVCodecContext *avctx) @@ -1529,5 +1537,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 Mon Apr 8 12:57:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47926 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2457158pzd; Mon, 8 Apr 2024 06:02:39 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVHcBlNCngiuzp4zzRpr6eh6eACCCYTiBGUNKZCoIGNZ4275HiBQhf62n37ugJlzK1KRGG6ALCIEyRMXoSlVHOPQ7375fyshCbAsQ== X-Google-Smtp-Source: AGHT+IHrvktH0lT4b5k9YfTsEzMg1SJllmBcMBSs/YlimBd7iz5vdwJYqRoODh+LR4kGBuvdr3An X-Received: by 2002:a17:907:7ba2:b0:a51:b0e1:863c with SMTP id ne34-20020a1709077ba200b00a51b0e1863cmr5921469ejc.11.1712581359420; Mon, 08 Apr 2024 06:02:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581359; cv=none; d=google.com; s=arc-20160816; b=v8o88fLBDfNRJf6G+iKXtCzjE4Fwr8Fl6uik7yXAnR5CFeQYOpHww0ye3Wc0zZ4p1O 7A9kTQQ0RzjXWbi203pFUyyTBBhZzWnrHGC3Ndp36u3D6c6t1b+sV35SqDRLjSFY/MAo htqUDPI07uHa0C1hMk8KyR/6QI47PDzdfIW6lGSNzTgVZ18TL5wyi9/2xgDBn7kNAHeY MBDc8arVb0DCwUsXmo9BNFP4tVZ84auNxxkhY0MX6VWoMe3FVqQO77YO0+MCp7WA06WV u1anl/xgfWskACMDml1RibuscmZNPdo2P5MCtZ+IdlBuk9ZdFXuaj+4i4j9gkRMN5550 X8Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=Rg4c9HPDY0pa+vM/dR0MPpLPloKjjGRErsoVTPnvQaQ=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=qEyXqZJORBEzYNzGa4KoeNrO4rF72PSk8pRnfpxML73R9twUm14ela7Oq53hoDN0cK 3XTo8rMtwK3imbZ5l/uKzrGKFazuBsIrBJKXmJVXf+ySBiAsouhZ2VMoPaDJcJMuxb6W FcItsUesfz1guL1WqURs41ohGXXPFfamK1ODUskYDQ/afdeqxmJFncGAFcbC56i3+B4E OPfhirpc9cyxNSXm5yCh4MUBU7xmPGvlxb4rLhbbOwEngVYnXSNNeQnApn3h74SZKMOh qfNzMHhSRZjNXdZHz969r0rq81eugugZkj1xaQVJkjJQI5zb4rJFKYmZVHNwBgPldaBn a/GA==; 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=E+5H3u23; 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 gb32-20020a170907962000b00a4e3a58fcf2si3785689ejc.1032.2024.04.08.06.02.38; Mon, 08 Apr 2024 06:02:39 -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=E+5H3u23; 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 AF16068D314; Mon, 8 Apr 2024 16:00:14 +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 437AD68D255 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581194; bh=sKdtiDQwwgEKlIaS8/m7JAezUoOww1eQUk5SMvYGgP4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=E+5H3u23f7QwaymDXbke1ec416Wd9ftW9Rw6sRFCdwf21b96CoJqOEPl+WWR2meVR VGz9OOAODiTssqv8MsHBM6Kx2jhyJ3wieVd+cKQW3GeDDUW51ZocB254y3KnkN45r8 kQmd0JmB9KAbV3mgXEZ2zZE3b0ovvKXjMk8ItmvY= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 2CB514684B; Mon, 8 Apr 2024 14:59:54 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:12 +0200 Message-ID: <20240408125950.53472-9-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: H0V1QHQlTim8 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 | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 137b68a98db..0473ad132ba 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -640,7 +640,24 @@ 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) +{ + 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; + *out = &mjpeg_ranges[strict > FF_COMPLIANCE_UNOFFICIAL ? 1 : 0]; + return 0; + } + + return ff_default_get_supported_config(avctx, codec, config, flags, out); +} + +FFCodec ff_mjpeg_encoder = { .p.name = "mjpeg", CODEC_LONG_NAME("MJPEG (Motion JPEG)"), .p.type = AVMEDIA_TYPE_VIDEO, @@ -657,9 +674,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 Mon Apr 8 12:57:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47927 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2457289pzd; Mon, 8 Apr 2024 06:02:49 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX8UCko9ZFkUczIvuoayg+SDOB8Xt2KgEdLjgQUj8J09sFkQelwa4VHXcMt+dRvTyNPtKf1uitwAaxQrXCvLSNrIwMCLjNyzQDjhA== X-Google-Smtp-Source: AGHT+IFs2nIMwwYIe7LHKiUqDG4fuKL5PYaBswQeiZ0O5xAewxKOMbMimWcAS1SkN5N0EWJMep0e X-Received: by 2002:a17:907:60d0:b0:a51:d49f:b6e3 with SMTP id hv16-20020a17090760d000b00a51d49fb6e3mr2146117ejc.54.1712581368732; Mon, 08 Apr 2024 06:02:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581368; cv=none; d=google.com; s=arc-20160816; b=zhHThZKRJjvZI9JDgnHZZnXumEgDxb3gpvPJ+rxGyIb36ordTTpQfYSYpJHExOsyUu oeYOiw+qDBe9gVFpdN/pmEk1CKEiRjpd9HqMq4V6hADorVVyg1GMIG0GBpDr3LoxoFid VO41XpaD05L7bbR7URQjZ9J0GqGcR6DkRQG3a0DcTrdxOBkHzfGw+vJGdowTBSq5tVTN tiUNO9EO+r6geXjwp1NbOsP7sCaomFr8UHUScACIs4nwtW7RXnkuvBBghMg0AQdjEQ67 2QKqqiSCvd30X7Jw980suaGzUGynLyDv8CVkXiduiMolof4rqLtIxjDV1nl6pD8tzNN0 uyyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=cYItbod8/iENQogQIBObo8hAuoH53dgJHP8daiPpD8Y=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Eeb8FEW0L5Hw87+DmEmyME0fDbCyTWQebjsm3mECTRGpfdJx3hWGukKvI3dG9Jh7Bo atW5PExiXPT2r8dmf+4k8oeiMgxWlQbJxKfeNOr0RaYxOp3skoUhSH9aL23LUTZCWSaU C7ZVUeK4UJESgYmVeiZlkTGYjsiRfMnQqla5pUm2b1lm27sEgUY/APFExkXXX8eRtJ8J 2hVRxC67THzHEger5HYC/9zKyzC9Sf/FWrBDvl1fd7IWJ562krV+6Z5MlbPzNxZxEUzu 8iBAlgr2czHhiZXdNlObx8mRpyeYT6LOPtR7phPuF+1MbHl2EmAmf9kBhkazwg04X/Fk erVA==; 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=reQVMhYX; 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 he39-20020a1709073da700b00a44d0209395si3760031ejc.915.2024.04.08.06.02.48; Mon, 08 Apr 2024 06:02:48 -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=reQVMhYX; 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 AFDF068D326; Mon, 8 Apr 2024 16:00: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 5176B68D208 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581194; bh=KE6FM+sgWL5IZpHrMoqrtWHn1iwrtuYEs/QdlL2BxTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=reQVMhYX19+27l44tUjwurazIQ0beMlW8aL8rWRtgb+FBk1ODhEyVJ4VaBc9W8GT+ Wa95zC2SoIUtZaOlnS7nL3pLhl1rNZxvlhN8d54jmT09f2Vmugmgp8m07M/ya2yRNZ Re/br3aF2v25/hFm/UsEEWbssPEFWP3e9uYfotEI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 5FEED46859; Mon, 8 Apr 2024 14:59:54 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:13 +0200 Message-ID: <20240408125950.53472-10-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: mKqTdQLg5IEL 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 a9f1797930a..1f22e06e710 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -916,13 +916,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 bac3e30ba2c..d3033db3375 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -174,14 +174,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 Mon Apr 8 12:57:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47928 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2457433pzd; Mon, 8 Apr 2024 06:02:58 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX6tW9VOheqjT6idmUH5bj090ZWfrsiH144nlOPw8eRm7ByySKIaodrUxxkoTezsL84ml6U7C3XGyw5tOB8LFHyJxl16lTXR6cNng== X-Google-Smtp-Source: AGHT+IEluDjQxzEowvF9SxZ9ZAFRfC5yCSHgYgxkFelzbutqwqDH9+kSSIS9/5yEMQZke677l6Oh X-Received: by 2002:a50:ccc3:0:b0:56e:309b:d6fc with SMTP id b3-20020a50ccc3000000b0056e309bd6fcmr6495365edj.10.1712581378604; Mon, 08 Apr 2024 06:02:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581378; cv=none; d=google.com; s=arc-20160816; b=aOBSs+rMxRG0D01gLRB3ki5/BIZYuaX72aJw/IWPH60cueA9vChs2deyDMV3hiiOSW q02a0WsPwjFzWn3JZ9LBLf6O6XVEAGAYSYBnrG0UOZA/SFOCpjcQaoN5yImwJ9G9mpFL /U8K4QXLrGYOgicJ/qv8DkYJHi1kph+ki1IoeEP6eMOHt5Y/t4EDP6CMyK8tuZ9+9UGM mbJm4nUNolWoCW1gtBfg0rduyVq9k71lSJs9sZxkffxevX6kY1DD/DC/IJZ2XOZzFGr3 xDOhlcvKF3dE6FLnDizOdxVfrp67a6dDMaxsVziavF3AFYLJJjo8W8cANd/a003nKAYo zlhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=bz8zWnpIvrYN0CWqMM01fuu8l1RiLum0WczWARUgSfM=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=ZVrinRl5UfifN6iPAB6TCnjK+x9a/cNp+4oki5Qwo+/01lTmZGbHsnevyreRTvECj5 IU6Ye0GUeUgw5xdmLURXLvR7JBNUJN7tkp0THesDfE9E3huU9BY3qAHl022+dXQ/yuru WAd2QKRF3nd411W+tMefWl1ObKzR3svj7upscSYD+yAYs31gNtE5DbJlmYuJuGciNL+D WjlODQmrcWmcYrSg4mLGxqH7botQSduKd/nDahn2Ez2R85CpnXXiWDcgbEPWMlRI1IFf PaqY2z9ebDVJIiHLRJVu229usxEctF3/+pGt3E7GPybIidrrPgWxgcUXaJ42zjs3Bjqh 7N6g==; 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=RDNIW1BP; 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 z62-20020a509e44000000b0056e218c2ce2si3515080ede.253.2024.04.08.06.02.58; Mon, 08 Apr 2024 06:02:58 -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=RDNIW1BP; 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 9F28768D33F; Mon, 8 Apr 2024 16:00:16 +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 6A46868D255 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581194; bh=Nf9wmgMdLqxV3c3TSnXhA8ivyH4/3UMKyI0yf+oRm7k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RDNIW1BPKcxLO6JvRcnhBv7n+6UIENnScZ/o18KIlqjtq/iu+jbxBjvVci/Iha0YD ezh1Nl5gaD0mttRg0GSaAFwKXJk5qPJciU2xHUauqqW7/pvnjrtbSciviaWEXcnrQp Aey/9za1KXNcCkCLhImNtuQ2JoFiOez6++3ogG4g= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 96E1B4721D; Mon, 8 Apr 2024 14:59:54 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:14 +0200 Message-ID: <20240408125950.53472-11-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: q7Y9yxye8jJz 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 | 92 +++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/fftools/opt_common.c b/fftools/opt_common.c index 947a226d8d1..c4d71fbe3c7 100644 --- a/fftools/opt_common.c +++ b/fftools/opt_common.c @@ -262,22 +262,35 @@ 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, cond, fmt, ...) \ + do { \ + const type *elem = NULL; \ + avcodec_get_supported_config(NULL, codec, config, 0, \ + (const void **) &elem); \ + if (elem) { \ + printf(" Supported " name ":"); \ + while (cond) { \ + 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 +356,22 @@ 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, fps->num, "%d/%d", fps->num, fps->den); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_PIX_FORMAT, enum AVPixelFormat, + "pixel formats", fmt, *fmt != AV_PIX_FMT_NONE, + "%s", av_get_pix_fmt_name(*fmt)); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_SAMPLE_RATE, int, "sample rates", + rate, *rate != 0, "%d", *rate); + PRINT_CODEC_SUPPORTED(c, AV_CODEC_CONFIG_SAMPLE_FORMAT, enum AVSampleFormat, + "sample formats", fmt, *fmt != AV_SAMPLE_FMT_NONE, + "%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, layout->nb_channels, + "%s", get_channel_layout_desc(layout, &desc)); + av_bprint_finalize(&desc, NULL); if (c->priv_class) { show_help_children(c->priv_class, @@ -566,8 +566,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 Mon Apr 8 12:57:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47929 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2457583pzd; Mon, 8 Apr 2024 06:03:08 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVyYC4FeWhhY6hv3l8840ZLeTlzC8gEU2DY1h/8weUo8j5/6vcQl6Ulk8vwAf586YiAhVHhHZAq8IgMvxEhv/eRS6td4GtmngJqFQ== X-Google-Smtp-Source: AGHT+IFEVnc5LMpYj5bZvXePl8YkKdJY2GZI8Nk573QJzf1gfDHujWc+Ytw0ZqdZ35O32EfAd6Ed X-Received: by 2002:a50:d619:0:b0:56e:3601:c761 with SMTP id x25-20020a50d619000000b0056e3601c761mr5254310edi.23.1712581388182; Mon, 08 Apr 2024 06:03:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581388; cv=none; d=google.com; s=arc-20160816; b=kQIA6y4nDshm7xeW36xU9nq6IwjKd8D2IsGNhs6wSg8uKKDzphDfAAiOwWNug4+R1h NgkuiRjuhkyQsS+XTnFpnlgP4UJxiwSWj/UhG+qxBAQJMlKedr2hJAU5OVPLrapBdx8H BCaBIVZ0VtF3Y4w82Vykb0YsRtkMN78sEplJPrTFFKzQVSP3PVUzFePlcsMY/GpWcg9O Pd9kGANRvJwfis8pwT2Wn6svtNpVI+Cv19g/5NVsjrYMeHsgG0wDCyMBh0C4UwdTaC94 mAhe8UbC4XSWlxgDzFNcEU7KjtNWtjFXVp23UYS8Xmg4k0Vvn9weKta03NRkQptM87ib nv5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=1xT1JLEjXv/pthbDq1Z0KcuNczhRiPL+RdGG0w3l7dQ=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Na7ehmHM0ul6T49IVgyCWs1xbNf2vc1qm5c17WcwMpKvhPTFZ8MrABnTKy/Pe7KKv+ J0W73ejL0mHSIXZNFIy3+lRqhZ/m4hoXHBtoRwfWykd4DewX2S8xd/vwSApJDMdpZHlG FbaB1+DswztVeSKD6PctKBlHrYuXZVEgkCxww0FN5J6mG7DOcjRWDYoUG/UTMjOJjlvh 2ys/hT8jGbuasrS1HNy+Z4hOLNqcwnc28BuaF+KAF35mV6OWJZj8JwsAft/plw0fwdw2 cgILl1PAYpmRrMu+fJc9F+85duzgI1dossFDlLGUSGpVrIR6Bk0/atyn91DPR7BGjHIi wldg==; 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=T4Wyaaub; 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 b30-20020a509f21000000b0056c2ad5d0edsi3589803edf.96.2024.04.08.06.03.07; Mon, 08 Apr 2024 06:03:08 -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=T4Wyaaub; 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 8D85768D352; Mon, 8 Apr 2024 16:00:17 +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 880F468D25B for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581194; bh=3/VAVPZZSeAp2OfHaHXLchGI9H0VELGXWZz8M97gZM8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T4WyaaubsczKGbrCqb1llpB7XdLWYXeGTaiQWM6BTKVksqhIfO3KKFevX6d7xyh5w 80m4OFkqY9Pdgv8WTBfil8cm8Juls/dsOEO3hi+vLONs0e2wjm174iztcL0h7seJnL 0opZVUzkdCBKkZuCMIsP6yfRIQzKUmhoR3DhiETk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id CA77E47293; Mon, 8 Apr 2024 14:59:54 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:15 +0200 Message-ID: <20240408125950.53472-12-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: 9nEuXLJUuoxu 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 d0c773663ba..940541b9eaf 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -465,19 +465,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 2308abf82af..ac04841a16c 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -401,7 +401,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 Mon Apr 8 12:57:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47917 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455785pzd; Mon, 8 Apr 2024 06:01:02 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWE4yJfDG6P+wF/1VCS4xpw/aHXnEAiojCOTXfveGazLsHDhZm8JdtObPNn9RcCVIwfQ8cbWXnZC3f9i9LHZrWUn1tgHhwTVQyD1w== X-Google-Smtp-Source: AGHT+IFTbtgnZAeGtMs1BrBMdlD99jUnHINMQI2ynmw5zAb6ExMJdEBSXT6IdLheg4cnSZmlm6j2 X-Received: by 2002:aa7:c2c7:0:b0:56e:5bea:56e0 with SMTP id m7-20020aa7c2c7000000b0056e5bea56e0mr1990982edp.4.1712581261829; Mon, 08 Apr 2024 06:01:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581261; cv=none; d=google.com; s=arc-20160816; b=e1FaT1j/Ty2Q1EJMv2WMZcB9CSMLYdW0RsOILIb94R6nMG/pzXYWcLALg7/D3bpKP3 B0AYO2dGIDE3i0WFL4W2YT2NA0fnfgIBFgkNW3pPoJq3svDIHJci9HuD7BfZQWQqNys3 fei34NxOqf6PzVNnsJNiAb6+60CmSGk1gQvOe8iPow9DwpH+96REG8DeUhKPdW/KklR5 0Cqm7I3BCceB9rNrObSRgu4SQGkWoN4DRjrDsbLmbUIdGgxxC7wsNqbb7i7VEAIMIALg 138UfjP8tJw94zHMzuzXf/N86SSRlpk8hfCV2v7TMm0jwGTNJ/UKxKRRfm+KHueC2CAh H+yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=ivvUzaOuqHDhaWTKa0+3Xn6iMElcDh+8RMf4HlpS3Ao=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=ezk0Xu/oJSNGp/exy54DY+tyGWz+PPz1pQqgWDAgt3C1R0i4AELl5q7C+6oc4/wfI0 wiUPkcKxYuopbbca4nWJCNHcMhlNDWkTbwu1UNwMqdRxAD3VUVsu6vt+M5Uimv4XUUqZ VmsCHvfr6ASHQtz+ZdVufuUaTa8MowFnCGbGSCOJFCrUGmrgoQLG+5X8eBLKIptqTIrO yQG/ix+e/8tnnD0sCu6opLMTeW0h3wndovWReKmuCbdyBIc00rNImE//Thn+RkPrOQ8q Fkp9ANkgyKYRRmfIQHskraLUTskFEcR7PasDBaJW5FT8sNIjEzJPzlIVWjKNmr4xI0VZ 8zbw==; 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=WyqO7DTX; 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 f18-20020a0564021e9200b0056e69cc8320si297281edf.175.2024.04.08.06.00.59; Mon, 08 Apr 2024 06:01:01 -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=WyqO7DTX; 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 6349968D20C; Mon, 8 Apr 2024 16:00:05 +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 A128F68D1C4 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=9rtmeos3z8NvXEGwyN4n9yEDTD+z77NFDT973LTHsSs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WyqO7DTXzp3LZVJl1nlgHl7BaNrFvaH7ct7C54XQXzjanddJvo/vqTmZ1cTlo0OiM aMpOCOiy4w8esqsn2Wn1fNsL52P9C5dQvTczAa8NIcWT98TNWirVGpXqvdUtvijYpN EwNUBZ2oqiQSw8YK23ePRrCG8jmwfVLL0uVpyya8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 0A64047294; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:16 +0200 Message-ID: <20240408125950.53472-13-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: h+GMo4ksIS8G 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 d3d7d022ff6..4f8c81102d3 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); + 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); + 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 Mon Apr 8 12:57:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47920 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456331pzd; Mon, 8 Apr 2024 06:01:42 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUky08yMq+B6jpa0eiPYWljYrNMfBs4qS8ji5Rythg/tUeKkfdyB9e5FfVyTSeBzI8F/hWFysLuyUCOOWni/qTZancZb3DIoHjJHw== X-Google-Smtp-Source: AGHT+IHxdD4bu8GiUMBzdEn90CX5jpwVrD3B62jTaSNSB1gKIHy8oi+KP5d1V+dNGgunfJJLMi8E X-Received: by 2002:a17:907:7e89:b0:a51:d463:3270 with SMTP id qb9-20020a1709077e8900b00a51d4633270mr2279369ejc.4.1712581281799; Mon, 08 Apr 2024 06:01:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581281; cv=none; d=google.com; s=arc-20160816; b=h24iUmnc4uXFUMxC3XscAJ07d9bVpXS9K4LvVSD3GBAZ46DABqm4gVwioYYQ1q6Sub QMF3WdFFZqF9knXQGhCMYfYCNvyyAF1j7wnB2UwIJJYphJ6SDWUzjkm9Zp/8xiL5miqt VCERI13ZVl+z+npArCqtNt6WE32SVBBX0JLSyCytM8RfAw5GdhV053QyulPA2k4OE3q4 C/K/jLk8xABQYjqIecVUSSHR6eeoGB1L8wYPpcCAgkRQehNh3RYdAcARTIL0OPZQ5XGn dcglQXR5n/7CbyKLSxsb3nngtx2IcsYhCJFIW9PQ0V8OJ22dKNQN1tsVKY1opMzsZ9kQ rw5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=nNQUVjKK5kr3DwfBCHsGxMffLyAxKnZS/gQ0nErPTJw=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=anoGTUnJ1nldQpDwxO39WETs8Dp9Qs7HgG4Jf4YVp/YBnPzyC3ZwmiFEKiB3dHkvdi l4i1xWNnmgWMtbmWvgi88GLsZHgHehQGmwfzt7r0OksoJRZQ1F/U11jlOBF461+j6K74 JiF30QzA5lqzUjTWbT8oDytoUwUGwErXtWK0VCSE/e5UBWiaLd3CAAVaFuvoaLl90BVW RI/GUXZ+hqIfzkgijOk4XZOcga+AIcrela3GCzop/KJoV8Wu9/Dw5RnDyMzAhUObO3LO G+7lhg4g+XvK1Bx7LTo+GGGtJ6vY2ZaCsST6N5dFsYbx7Vew0UwipcncEhDaw25+ba/b Tg9Q==; 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=YxeT65St; 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 gs44-20020a1709072d2c00b00a4e207ee793si3754017ejc.646.2024.04.08.06.01.20; Mon, 08 Apr 2024 06:01:21 -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=YxeT65St; 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 7629168D25E; Mon, 8 Apr 2024 16:00:07 +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 BA7E668D16F for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=DyR2H0FO6Z8vunPQHoWkJLP6TYd+3YjxwScDtdn52LU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YxeT65StnU7BxQ9rGs/8CoxtAhF9flSM6rkLhUU9EK+DeYf+1h7ly3i5LvRxwcZn7 NDyky3JjdUP6pYx3/Ph1iBVQ9jEKMvsgqY6W5NkVZArQGP+0vp2nrHehrnoXMBiLJG m3/K3UIYriEluhU1tj9aNJ42br8eVtsSUaN0TDSI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 3A4BE472A7; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:17 +0200 Message-ID: <20240408125950.53472-14-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 13/17] fftools/ffmpeg_filter: set strict_std_compliance 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: FzaZGIsfxeVs From: Niklas Haas For avcodec_get_supported_config(), which requires this value be set on the actual ost->enc_ctx being queried. --- fftools/ffmpeg_filter.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index ac04841a16c..9ff064f5f68 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -770,6 +770,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, FilterGraph *fg = ofilter->graph; FilterGraphPriv *fgp = fgp_from_fg(fg); const AVCodec *c = ost->enc_ctx->codec; + const AVDictionaryEntry *strict = av_dict_get(ost->encoder_opts, "strict", NULL, 0); int ret; av_assert0(!ofilter->ost); @@ -780,6 +781,10 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->ts_offset = of->start_time == AV_NOPTS_VALUE ? 0 : of->start_time; ofp->enc_timebase = ost->enc_timebase; + /* Ensure this is up-to-date for avcodefc_get_supported_config() */ + if (strict) + av_opt_set(ost->enc_ctx, strict->key, strict->value, 0); + switch (ost->enc_ctx->codec_type) { case AVMEDIA_TYPE_VIDEO: ofp->width = ost->enc_ctx->width; @@ -800,16 +805,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE }; - const AVDictionaryEntry *strict = av_dict_get(ost->encoder_opts, "strict", NULL, 0); - int strict_val = ost->enc_ctx->strict_std_compliance; - - if (strict) { - const AVOption *o = av_opt_find(ost->enc_ctx, strict->key, NULL, 0, 0); - av_assert0(o); - av_opt_eval_int(ost->enc_ctx, o, strict->value, &strict_val); - } - - if (strict_val > FF_COMPLIANCE_UNOFFICIAL) + if (ost->enc_ctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) ofp->formats = mjpeg_formats; } } From patchwork Mon Apr 8 12:57:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47921 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456415pzd; Mon, 8 Apr 2024 06:01:48 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUa27ISOXSR1khZCDZbbutSjM236OYoFpYhXw8TB734FT9qTKIFeZnsYV7EhXB+JE3khZEpAQ5/xd/l3+LtAuN5Bbx76BbUbULEGA== X-Google-Smtp-Source: AGHT+IHYy5mXDvLd5QMDXum3Vsl8eOS7Is5yOmO1TjHwUsIkApg83YEcah9ruu9Oo7tExLOk9k5m X-Received: by 2002:a2e:240e:0:b0:2d8:2762:54de with SMTP id k14-20020a2e240e000000b002d8276254demr6281704ljk.14.1712581307854; Mon, 08 Apr 2024 06:01:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581307; cv=none; d=google.com; s=arc-20160816; b=KwwhnHj9TMJbllnd+ZAHHTII+SyyqyZf7ieVH/BiDojnlCi3O2mqQKkez57G6yaTJI 8xhde8M7cw/and1aPtmJyYYOlU5oygofQv2AB4qyokqfM96NSUjNafP/w1/Z4OhKjG3q pWCb60ILNNiNfaN3FTEmRuDF/SxRc5gIboXfYN9K7he7JqsvLbsmsgaRCmn25OOP/NQT wFlxJZ+Orjav7COqza56fBzlKvBT6CMwov6BnYCA0qMQVb/C0QhKQyjLf+ig5/scwz1E tzUV5U6tkRdPHHzDoRcY1J9Qu/HTWW28YlfJ6fpY2mCJep8GgqrdFXzwOfJMRuIhU49S fF/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=CTY968wK0iqc5boCsjFZNwoUI/YXNNDKdX9Ws7t+arw=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=TbweYl0jd7DsNmPjhF5k4sfUFjbZLC3axBTVhhmh6wV26OW1pTWz7KxvY6ZouWnpZ4 buas+3AuWanA9NgZ/gk+lvVCXnUdc5mTy8TLvosOCyhr3dm1TSMm0dkrXQdZlkCxDUaf ZwNueSjXXd9eQeLWgzkjH41iv1ccZ51+zVRQiDQ8cTJo0vM/zI80NsxgbNTnkxvqKrdj CVjnSKsn8iP3+SX+zulWNJSBig+uys0J0OaedaGbKcCTMk0YuVIV7twD59VVBcsXriLt mvaUFGw1GTG0AdvlaCoDfL+1+eLHo1uAZkYxhXkdnP8tVU0iEvuBDarSZpA3CUtWsz57 HYlw==; 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="LJMt/peI"; 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 y35-20020a2ebba3000000b002d865b3af26si2145926lje.62.2024.04.08.06.01.45; Mon, 08 Apr 2024 06:01:47 -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="LJMt/peI"; 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 9056D68D2C1; Mon, 8 Apr 2024 16:00:09 +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 C389568D202 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=qwN5x5QoeLfzfJwSiyKcy1rJxmDae3Rb7VZ8GwF1V7E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LJMt/peIfayZ/GplD6urRy96+aV4xBVFbzwGSSUi8KP4qTql4hlYHL+G3etBPU+Fo UVacNHlmWcgbL7TDFZvS/M8PrVSZUVFrqnh7nX2ZzKKxzMl5dNxWBHvAR39GbcsnxH J9hcHO5KW23BPu2E8DeRXnyZ0RefYhCAxjKP4GMA= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 7048E47957; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:18 +0200 Message-ID: <20240408125950.53472-15-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 14/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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6FMHx7tiLaAL 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) --- fftools/ffmpeg_filter.c | 49 ++++++++--------------------------------- 1 file changed, 9 insertions(+), 40 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 9ff064f5f68..945147d6ca1 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -348,36 +348,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); - OutputStream *ost = ofilter->ost; - - *dst = NULL; - - if (ost->keep_pix_fmt || 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) \ @@ -400,8 +370,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) @@ -791,7 +761,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->height = ost->enc_ctx->height; if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) { ofp->format = ost->enc_ctx->pix_fmt; - } else { + } else if (!ost->keep_pix_fmt) { ofp->formats = c->pix_fmts; // MJPEG encoder exports a full list of supported pixel formats, @@ -1307,7 +1277,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_%d_%d", ost->file->index, ost->index); @@ -1342,17 +1311,17 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, pad_idx = 0; } + av_assert0(!ost->keep_pix_fmt || (!ofp->format && !ofp->formats)); av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED); - ret = choose_pix_fmts(ofilter, &bprint, &pix_fmts); - if (ret < 0) - return ret; - - if (pix_fmts) { + choose_pix_fmts(ofp, &bprint); + if (!av_bprint_is_complete(&bprint)) + return AVERROR(ENOMEM); + 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 Mon Apr 8 12:57:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47918 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2455903pzd; Mon, 8 Apr 2024 06:01:11 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXdD2eHapxopd7j7Fb9Nsrg7yNQoTgb2AKrGt2cW9zd5JZ60qAHuhzZOKZ9J84+ntcXvHbtvTb0Pky08viMWXC6+iSv+SSxBFogsA== X-Google-Smtp-Source: AGHT+IG66P/TfG6EaNItsu9PvDrRrdkSZ7U1eYuvUZd4l8J4prKKHBb0qqaUxUu1izmZdajh6VJy X-Received: by 2002:a19:5e51:0:b0:516:cec0:1fb8 with SMTP id z17-20020a195e51000000b00516cec01fb8mr7379433lfi.65.1712581270702; Mon, 08 Apr 2024 06:01:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581270; cv=none; d=google.com; s=arc-20160816; b=iTs0hXuw85aespt3CMB1fmEADQ/kptUIH/NfgUit+y0/3hbnKD68dslRkiwKwnpTHy DCm6Rg5B8o9RAp9ucCdxCSQo03cc3tOhOiY2jvEvtoDsTVJk0ub9Rt4wGh7wXjF5Wnqe 53Z0X1kLtsufiU33qcjx2xCLaeNz6Ku0UkzxM3k1mXEgTPGzQXsxqRJwf61+7JOrwA6c Luob16KoXTY8NbpC8dYE7/1noZwFhn8+a56YGJ3P4Fb5Po5ES+QWobh2cHfsgQdoUShs PzfT7vWszPbEijB7kg0E60QVXNNM4rue7h0SyvZa7eqlbaxPEfV5qo1XKf+RxFrMF/a+ VXvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=f4Lw46rb3hPOjtnWx0diSshxBRf6ghXqGsIb49oo4Ug=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=jA65g199RxFabkK5uErYG8LhZe9qBkIhHEBgTPxaVeFdp9/zq1mB1OewymutV+fu/O T6tdvaiSPts07+ah09dYxnYIoHnI4IeYQLTRnp94Lb4bxanWSzdR3wbS1Wm3DDzMsJ8y NsZRHxEmOUeEflek4hAbBxB0fLnnLZ2aWK5/RfmY7oKfxwZKbtl7BrIPgkHddpgYgsAw ZOOlBXm8oPFmJr1gqWRL3glZerFZ/JqPDCMHrkD5cZsXomggPZz+YbbR3lt8WOo+OV6f wwYdQxeyh7Y9SrZDImxTvwyqpFvRrqIxz5e+/niAs3YsNW3A343M9k3JQhO7DI2BRY3g s6cw==; 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=PEGLE4ZA; 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 rn21-20020a170906d93500b00a519e255f44si3634471ejb.57.2024.04.08.06.01.10; Mon, 08 Apr 2024 06:01:10 -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=PEGLE4ZA; 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 7BAE068D25F; Mon, 8 Apr 2024 16:00:06 +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 BDC1F68D1D2 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=ujFQFTZsF2BuepQbF17BRrK0c+8Y15OieQ7w0mp8T1A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PEGLE4ZAve4dwts7Oyl0wSDdyNc1fsZRecHB0ekrI/48+7ypPDJ0zqjjDP2mwJsHz LX7UeZulOxmnpLe03D29siJypdBoAMzDG9+kuyTz97ehb254gKF3XW9IUbC9xXf29h qOc1u/UyZo0Gxdj17Zo1FQhicWWuM7+VG4KNeAkI= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id A9823479E4; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:19 +0200 Message-ID: <20240408125950.53472-16-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /vgG3z6Ywcb7 From: Niklas Haas I preserved the no-op condition on `!ch_layouts`, even though I suspect it's not actually needed. --- fftools/ffmpeg_filter.c | 59 ++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 945147d6ca1..83259416a68 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -694,7 +694,7 @@ static int ifilter_bind_dec(InputFilterPriv *ifp, Decoder *dec) static int set_channel_layout(OutputFilterPriv *f, OutputStream *ost) { - const AVCodec *c = ost->enc_ctx->codec; + const AVChannelLayout *ch_layouts; int i, err; if (ost->enc_ctx->ch_layout.order != AV_CHANNEL_ORDER_UNSPEC) { @@ -705,8 +705,14 @@ static int set_channel_layout(OutputFilterPriv *f, OutputStream *ost) return 0; } + err = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, + (const void **) &ch_layouts); + if (err < 0) + return err; + /* Requested layout is of order UNSPEC */ - if (!c->ch_layouts) { + if (!ch_layouts) { /* Use the default native layout for the requested amount of channels when the encoder doesn't have a list of supported layouts */ av_channel_layout_default(&f->ch_layout, ost->enc_ctx->ch_layout.nb_channels); @@ -714,13 +720,13 @@ static int set_channel_layout(OutputFilterPriv *f, OutputStream *ost) } /* Encoder has a list of supported layouts. Pick the first layout in it with the same amount of channels as the requested layout */ - for (i = 0; c->ch_layouts[i].nb_channels; i++) { - if (c->ch_layouts[i].nb_channels == ost->enc_ctx->ch_layout.nb_channels) + for (i = 0; ch_layouts[i].nb_channels; i++) { + if (ch_layouts[i].nb_channels == ost->enc_ctx->ch_layout.nb_channels) break; } - if (c->ch_layouts[i].nb_channels) { + if (ch_layouts[i].nb_channels) { /* Use it if one is found */ - err = av_channel_layout_copy(&f->ch_layout, &c->ch_layouts[i]); + err = av_channel_layout_copy(&f->ch_layout, &ch_layouts[i]); if (err < 0) return err; return 0; @@ -762,7 +768,11 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) { ofp->format = ost->enc_ctx->pix_fmt; } else if (!ost->keep_pix_fmt) { - ofp->formats = c->pix_fmts; + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_PIX_FORMAT, 0, + (const void **) &ofp->formats); + if (ret < 0) + return ret; // MJPEG encoder exports a full list of supported pixel formats, // but the full-range ones are experimental-only. @@ -788,8 +798,16 @@ 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 ? - NULL : c->supported_framerates; + + if (ost->force_fps) { + ofp->fps.framerate_supported = NULL; + } else { + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_FRAME_RATE, 0, + (const void **) &ofp->fps.framerate_supported); + if (ret < 0) + return ret; + } // reduce frame rate for mpeg4 to be within the spec limits if (c->id == AV_CODEC_ID_MPEG4) @@ -802,19 +820,34 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, if (ost->enc_ctx->sample_fmt != AV_SAMPLE_FMT_NONE) { ofp->format = ost->enc_ctx->sample_fmt; } else { - ofp->formats = c->sample_fmts; + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, + (const void **) &ofp->formats); + if (ret < 0) + return ret; } if (ost->enc_ctx->sample_rate) { ofp->sample_rate = ost->enc_ctx->sample_rate; } else { - ofp->sample_rates = c->supported_samplerates; + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_SAMPLE_RATE, 0, + (const void **) &ofp->sample_rates); + if (ret < 0) + return ret; } if (ost->enc_ctx->ch_layout.nb_channels) { int ret = set_channel_layout(ofp, ost); if (ret < 0) return ret; - } else if (c->ch_layouts) { - ofp->ch_layouts = c->ch_layouts; + } else { + const AVChannelLayout *ch_layouts; + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, + (const void **) &ch_layouts); + if (ret < 0) + return ret; + if (ch_layouts) + ofp->ch_layouts = ch_layouts; } break; } From patchwork Mon Apr 8 12:57:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47922 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456539pzd; Mon, 8 Apr 2024 06:01:56 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXybhOaCvcHQ9/jPxN44bYZXvmmesGTfyD4nC1nhT5gFIshWuS06BlLYeNx7kBXHdNAELccOCnzecqciKTpbhd0y0s54xPYVNr47w== X-Google-Smtp-Source: AGHT+IGzUHjdeSoHeD06fw8TjTumPNVcLDMyZVd+n34Nc8sj9ZQ8O608C0XFKPSjGazo+eiN4uWO X-Received: by 2002:ac2:5612:0:b0:513:ebb5:d9b0 with SMTP id v18-20020ac25612000000b00513ebb5d9b0mr6982239lfd.52.1712581316424; Mon, 08 Apr 2024 06:01:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581316; cv=none; d=google.com; s=arc-20160816; b=SemaW2lTsuSnmWoxGM/JLDFC0m9vcb9uoQ+v01ULZb7dAB7Bb81adwJAkU7eDmED2X KTjstN+dfHJ5Q9mngjawXriWxpoTGZ0SncUtOSA4d6L/DbUc3sUVKOqQBgpWSWE1biEj lgNLQWEQCpMcGGssciOfd/AIRJ5/ceI0L9LkpomdFLXzumNyt8u66HVH4/kwXD+j2Nl2 wMJkfw9dYB2XoI3U5sgiW8BMM21khL5lBPAvYnTgArObGQ7ITVCpr7WhlFJGvCtUtrod DMPk4TJ9/1eAoq0CS+6JNJ+6+0cC2DPAr8IHWdW4zWjS3B7JEvDD8Pykx5YzAoNTyrnu 0cNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=LME+B311ZHF8MhwEzm8ijZw4XzsTFU0SHkhEZysvENY=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=O0Fl0gekR356p1KkWcsWHuZ5qveFwK7p53d49NBJcCpGFOqLDHTXDWSNIaqSyovls9 AI8vdB7qF63KmvqeKQg8p1peMSnVKtPvVfRyVvE+Ld3rqebZeGMK4/vNkpFBKCi5/45K zVl5uNkRKVZ9V0Vn07iKcPvH9CQLVGp7KOvMRep/7OYu6hZdqfvViJbkbpKR1x1zxoD7 lMcVnx/bW1Y86jubPhcHd+5vDSs6vVWtfcqTwVSKhdQ1cCK6zBDWv3gxVdz65zXcwr2B u5NcDYywz28p+3UDsEXF1SsK6ctqbpasav+s4JE9qCJsY+rksG689hkayycL3s+aXBiD JY7A==; 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=a0qTeEIE; 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 d14-20020a1709067f0e00b00a51943cb794si3637019ejr.343.2024.04.08.06.01.55; Mon, 08 Apr 2024 06:01:56 -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=a0qTeEIE; 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 9192068D2D9; Mon, 8 Apr 2024 16:00:10 +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 E2F6668D16F for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581195; bh=k6INEYxc0ZiXvX9FExKjWSZ3i/7SgcaWesIChSE/mcU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a0qTeEIEheK/WrxVgiPpADsHJAUx9ziTGTsHkqb2/wBM6w7ICGkALmlLheONof/4y GBUJ0pZD8N3CoMiZaZm6yMw+42TOpfsucZGN5if6CBBlk4rti2/JHT6wAWIje7gSzI yeECiwaAFEu7D0dXZt9q86g0GJhlaWnckA4Sl9sg= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id DA97A47ADA; Mon, 8 Apr 2024 14:59:55 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:20 +0200 Message-ID: <20240408125950.53472-17-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Xz9ljAbHy8s/ From: Niklas Haas To convert between color spaces/ranges, if needed by the codec properties. --- fftools/ffmpeg_filter.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 83259416a68..a40c6f381f2 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -193,6 +193,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 @@ -208,6 +210,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; // offset for output timestamps, in AV_TIME_BASE_Q @@ -379,6 +383,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)) { @@ -607,6 +617,8 @@ static OutputFilter *ofilter_alloc(FilterGraph *fg) ofilter->graph = fg; ofp->format = -1; ofp->index = fg->nb_outputs - 1; + ofp->color_space = AVCOL_SPC_UNSPECIFIED; + ofp->color_range = AVCOL_RANGE_UNSPECIFIED; return ofilter; } @@ -789,6 +801,24 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, ofp->formats = mjpeg_formats; } } + if (ost->enc_ctx->colorspace != AVCOL_SPC_UNSPECIFIED) { + ofp->color_space = ost->enc_ctx->colorspace; + } else { + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_COLOR_SPACE, 0, + (const void **) &ofp->color_spaces); + if (ret < 0) + return ret; + } + if (ost->enc_ctx->color_range != AVCOL_RANGE_UNSPECIFIED) { + ofp->color_range = ost->enc_ctx->color_range; + } else { + ret = avcodec_get_supported_config(ost->enc_ctx, NULL, + AV_CODEC_CONFIG_COLOR_RANGE, 0, + (const void **) &ofp->color_ranges); + if (ret < 0) + return ret; + } fgp->disable_conversions |= ost->keep_pix_fmt; @@ -1347,6 +1377,8 @@ static int configure_output_video_filter(FilterGraph *fg, AVFilterGraph *graph, av_assert0(!ost->keep_pix_fmt || (!ofp->format && !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); if (bprint.len) { @@ -1777,6 +1809,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 From patchwork Mon Apr 8 12:57:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 47919 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:24a8:b0:1a3:b6bb:3029 with SMTP id m40csp2456205pzd; Mon, 8 Apr 2024 06:01:32 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVuXiheBUj7tZkTKsnB8AYE/FiQWrByN1XCGKxQbMxzcHiGaO5U4Xn0Z0C5zJwVCUHwsi17dtgW6/DkKLKdbcJ1uE/x5sK37XnNwQ== X-Google-Smtp-Source: AGHT+IEDBnuIoyy2xGJlh2hKuRlmZaEpDaP7YPv3lYKZLFlFYJgFifrk19OHogzHKg6yAfJS3uRZ X-Received: by 2002:a17:906:7c4d:b0:a4e:7a36:4c38 with SMTP id g13-20020a1709067c4d00b00a4e7a364c38mr6248768ejp.20.1712581292528; Mon, 08 Apr 2024 06:01:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1712581292; cv=none; d=google.com; s=arc-20160816; b=YJQeupCE2y1N8EgaqCiRpr1nJj9iCXZ4ANXmnMfk67JVqvdCESVMtspUWbFt3YKUJ5 xXtS7eSatVYOXoL0wPlri2jaNH1Afy2zXNZe5UL+L4eRDYq+HAT1b3LV7gjc51IoNQVL pi4higLD38MFE3Fvx6EDPepgWJm1RKcYKyBuaMvCeh1okqqPVq9PsYyzXla7rqB+O9Gb QQYZuJdeFuS6FPzT8Hi5RXl6vUqSng4mt/ORUT4GrbIIpcxFuvjCKt7A6Fs45Ls7sJPc AK2H9nKLNKFPvzN/DHE6IkefMxIBojAMkXJz7DdcIh/S0sEN2RMcISrw8eqIIzuNPp2V 90Og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; 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=fmDqsYBOpEtYtY3zZFHHoPKg+Pq7fMIBxBGNZLM8OQw=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=BeEMcnTLqfuZHs77ceCxG5gbMXtFeDFq/igLPzplpTv+xK6EaWk0loMm5MaPX3lpHo 6/dKp5HlEvUihSt+XxGKngGWjsIhn7nVutBXyngbmg+K3QpdOYO/MWsI0BhTlObx6YVI mlZPHXd8soN2+JdcF9OVxDWGpVaPnK3KbKzwTvkHVTbT3+y0DmLDoZWJVTyJFfqExAq9 InbZZ8jv4U+KIznbmD5qLzxtlOPTOLPMquRp5oG87Ian+bmJ9RrPUqH6lBRNcJFXuiO2 wz676kvqry19DZzSfDgHM1EL7TlGyT/9W0wQyfKWwgDPYedGyUrnVz4EG77g9EB+UEeW fyXw==; 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=FocMg8qN; 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 sh34-20020a1709076ea200b00a51ad5c53d7si3300307ejc.360.2024.04.08.06.01.32; Mon, 08 Apr 2024 06:01: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=FocMg8qN; 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 75A8D68D29A; Mon, 8 Apr 2024 16:00:08 +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 D3C4768D1C4 for ; Mon, 8 Apr 2024 15:59:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1712581196; bh=PNl0bK2U34iBtgZw1Gg08ltPMeXNZMi5Sg2pM7C5vy4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FocMg8qN8RqoY0ZnNdAshVXbx19XzSte/Pk/fPEmGLYCJscyj+Ry/OYM8xdEnfwsb oOpJV+zJd/jgog8Qxs3cuX3n3h6cjhj42TX0XQ5Ig31TEFXNCIlhM1Ti0soNQfMnvZ xC3PYylCRl5H260Q8G3bbFgZWtrrQ4OpkBSegGOk= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 1C4E347BD5; Mon, 8 Apr 2024 14:59:56 +0200 (CEST) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 8 Apr 2024 14:57:21 +0200 Message-ID: <20240408125950.53472-18-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240408125950.53472-1-ffmpeg@haasn.xyz> References: <20240408125950.53472-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: pKudoNYfV4k1 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(). --- fftools/ffmpeg_filter.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index a40c6f381f2..461f2b86065 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -785,21 +785,6 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost, (const void **) &ofp->formats); 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 - // has been specified. - if (!strcmp(c->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) - ofp->formats = mjpeg_formats; - } } if (ost->enc_ctx->colorspace != AVCOL_SPC_UNSPECIFIED) { ofp->color_space = ost->enc_ctx->colorspace;