From patchwork Mon Feb 5 17:44: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: 46047 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7b08:b0:19e:8a94:b663 with SMTP id s8csp906978pzh; Mon, 5 Feb 2024 09:44:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IF1VfHu+OxsM6oUKB0Ln188jp8a1T2JUnEzWRW36bUZSniK3aPcCF+TJ1Zlctbf3YWp5pP9 X-Received: by 2002:a50:c052:0:b0:55f:d736:babe with SMTP id u18-20020a50c052000000b0055fd736babemr10309edd.2.1707155067596; Mon, 05 Feb 2024 09:44:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707155067; cv=none; d=google.com; s=arc-20160816; b=JK5xLoXoN2bg8EHDQlseH2auDyzCTSjDisTDh2kbexHEwxbAY5bXOjvs8ip3TpTt3p gYg+cMxzIE0WIzpkgGIdkpGgshXJNyZlifAkYdeOYYd8pynvdMmy2+y7gOfKXMEfNHcK UEFTh0ipINhCxYt4l3TCzN3Vv2VrPNjGbeLwwpHTYWH65TMToK0NX1x0EKCF3ifdjc1D 4Vt5oTlMEuUQ3tdLOtpzBONQiw2G6/sCDJpQ7U7ABDM40aoDwlmXJbKguQUbN5RRCACP 8A7wdhehzPIQoL8nKOHeOgCdWYhZW/WM0S5bDglQhevjQ/b4lgdKZ27edex1vXPYATPh MgeQ== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=8dm4W7WQQ3nePiWC3gnEi6dqTR8Af7aazJgRKcEGl+o=; fh=YomS4LJk7WUhb7x92ApJzDEJJqTuqNB0HPKT8NiEYk8=; b=h18vQhm7v5QPxl91AeYuC4qH0e/UUNWqBeQG2ktRfemhFO6cCdfAW4B5ZszQB40CpB azALL88EFmGFybXIDi8MMJfQrS89aeXTYNDZMaLsmG7lVMwDHH4N8QHIPoaiiNCS6ppT /NXuhObizCwuk7JmtJu9flGmB1hlwL07rs06PWxgdzPhypNgpkO0RC6iV2aHKPSIcNKb iCi9KFfCtGU0ynibkkQ2PWvQpsQitq5Vu14OuxiO/sq7jwmA0xt85xgbqZMG3eBomJut /GKV2vXUj6IdXP+8Qm4XPzs/cCcwoQLaMAQ3J1k5FfI06VhvmO5W62C/F06rvasydq+/ dvnw==; 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="fd/BDc+d"; 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 X-Forwarded-Encrypted: i=0; AJvYcCXMMjuiKuSnLa55UeG/ge02qNoQyGyOolVPtUtAC11U8omlXyCsHJUkZHrE2y/RUMUS1jqYTkbBGSL3Tp+cE2YRD3bAoW/PR992VvxPFzmFwXbXbmJMB8YEieMNWKoJOfDFK/Vy/ZpoRwtWERLzmyohhWxLpXYnbqt2EzTCx+DX6wT1Hnj6w2gZusdKcWspOCE8gqtGnxJDG40FPCOz4i/VHkr/03TMoUegYwtXGmsJ9ZwQ53dZ8B6CjzbsXagIb5IXRq0bZDkbbEmWmSZ324/aISzd98x9xiq3CELp27xOMcsBr8aLi2eNJAiw10duzo3RodFFyr0xNoavgxRnOpVarS8FXuGy3lCLIOx8+8ALzAPBj+52O6Ac2mB2pi599KQ5pTS8sUPcZ7X2bJtOWXvYgFfYCvvqlfMTacevCTPns2k1S/hrWyXjyA+5o3uF4HR+YkH5tUIjka2I4Nt5ho9zL+ydx8p3ugJuCMbXpLXQH+XPpkbGolj0eNRJPnITzgqGTBL9xHQtOf2TMkt/St4vbF8+smznbkzg5ebDQtus0OwpVzNO8DX2S07oe5jLD/CD0fnyiZFgQglRPwQU7hBEt+SOD+36gjFeNo1rlIXQs+L+BNd6apEpZI1JoY2pHFReionyVc+YmU6cnOWGpq6BbE1yaiTwA3lPaLxR9WR/o7F7mVp4Ue+mxcbl9Ch/e5dnkoDP7fcLhXrKh5gFFA69Mhm5azwZHrVPyF+cqhN7DRERlhoJ0zOtNdu2t8jX22MaePykK703myKv3xaMSb00ZfmIxplo4sG4dY677lCQEOZGihBs30EIVq15m6plbYtzHSvI9JBHHH2Cnjgb0FHWVNTiK8ASuUeyl8Yhg/lZggzrrly1SMwjvMyFz7sMkRe524i0KJlVZf2yPgC5M+GAqLy8VSgdaTNzDf2ZzGyx1ufWz9W+9nzljANGRqq3/qq0Az tjZq3RKjRQ64cx6kDFJcRnbXKAYO4Y7oPYMFjpGHvSsxxevL+zi/BIV3V+RDw7xKttdKvyXfnogQB7j/ogyAv09Bx4AqMyUX6yjV9GU/1r5ORm+0g0dL8gi9pPKVeL4HgiTV3rK8B4yaVE0lAAC2Z8YRzhodgv+HYTDlwu2w7fqBmC1SjHxoT34W0vplLThYe2ceLaYuTg1N4GneqtR76pN27vfBF07/k5y/EA5LXP2Fdi6K23aE7cDYfaCFemfJGV4bgS8BHdvu5EMm14D8ZSae50k5VS5ptoQJi3nK9dUmrFT4kcz+z1Dwnh8ReWP0AxBPh8KZPVJxJxmSZNiGEaYVaO131HjcIJiu9ZDb5MhCqMdBz5fExW+tRvzvvasrd1+c6i87uGCdj0UNWHwAzPaXYQJkfONMagcEQ8WJiV3rijNs5IvYlbAuu2ljY0Fd7RB3FxWoCxujkFRvJ1uRtkDxMdQQ+LDCSPlB9u7KQAri7WJusbkUZuVrDg7A6W22Y4nf6aL+BuG9wWyL7LEADvuNdY2G730dhV4pNM+GMBiG96m8+sqf2xmSjyTQ5+GEUwYYvIJvaBITlDDksbcjj4yylNg6A= Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w12-20020a056402070c00b0055feb285760si101920edx.331.2024.02.05.09.44.26; Mon, 05 Feb 2024 09:44:27 -0800 (PST) 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="fd/BDc+d"; 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 E242468D158; Mon, 5 Feb 2024 19:44:23 +0200 (EET) 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 B5E0F680BEC for ; Mon, 5 Feb 2024 19:44:17 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1707155057; bh=Bre9QV/Rj9ZCQfityOJ3ZUwKMwzySjRJRvMm64IzSJk=; h=From:To:Cc:Subject:Date:From; b=fd/BDc+dLgBbueBf+U+8XCsfemmZxUsYETdmbc3YV2vTd57aHNs2+ndi2EFCkUqYM zTxJ86OdUpqOifb28iEP7iFkkjgylTsM8TIbV97mBUxAb/wxeQQr+LY4/Q9/ThalbT KihOScEjnclnt+5Awh2QffOQwbdyfDz3HDSa8nF8= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 6471E406AC; Mon, 5 Feb 2024 18:44:17 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Feb 2024 18:44:12 +0100 Message-ID: <20240205174413.92730-1-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec: add YUV color space metadata to AVCodec 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: zrDLjQ3xT7Ax From: Niklas Haas This is motivated primarily by a desire for YUVJ removal, which will require signalling the supported color ranges as part of the codec capabilities. But since we're adding YUV range, we might as well add the YUV color matrix as well - since some codecs (e.g. VP8, JPEG) only support certain values. I decided to preserve the ambiguous and misleading "color_spaces" name, for symmetry with AVFrame.colorspace. (Though this would IMO be better called "color_matrix" or "color_system") I also decided to omit the other AVColor* fields for now, because vf_scale cannot handle auto-conversion between primaries/transfer/etc. There is little value in adding metadata we cannot do anything with, and no harm in extending the API again in the future. In theory, vf_scale can handle conversion between chroma locations, but also the signalling for this is annoying, so I'll defer it to a future commit. --- doc/APIchanges | 3 +++ libavcodec/codec.h | 6 ++++++ libavcodec/version.h | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 1f5724324a..7849ce47d9 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2024-02-xx - xxxxxxxxxx - lavc 60.40.100 - avcodec.h + Add AVCodec.color_ranges and AVCodec.color_spaces. + 2024-02-04 - xxxxxxxxxx - lavc 60.39.100 - packet.h Add AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT. diff --git a/libavcodec/codec.h b/libavcodec/codec.h index 8034f1a53c..8bd678de7a 100644 --- a/libavcodec/codec.h +++ b/libavcodec/codec.h @@ -235,6 +235,12 @@ typedef struct AVCodec { * Array of supported channel layouts, terminated with a zeroed layout. */ const AVChannelLayout *ch_layouts; + + /** + * Array of supported YUV color formats. Ignored for RGB/Gray formats. + */ + const enum AVColorRange *color_ranges; ///< terminated by AVCOL_RANGE_UNSPECIFIED + const enum AVColorSpace *color_spaces; ///< terminated by AVCOL_SPC_UNSPECIFIED } AVCodec; /** diff --git a/libavcodec/version.h b/libavcodec/version.h index f2f14eaed1..19f3f4a272 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 39 +#define LIBAVCODEC_VERSION_MINOR 40 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \