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, \ From patchwork Mon Feb 5 17:44: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: 46048 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:7b08:b0:19e:8a94:b663 with SMTP id s8csp907048pzh; Mon, 5 Feb 2024 09:44:36 -0800 (PST) X-Google-Smtp-Source: AGHT+IHVCv0YTi3/zXVIy3JK7JTOOGB0pfKF8jh2osY4p6eGU1UmMVG0qGpPwGi7YyXiv6ZXKOM+ X-Received: by 2002:a50:f605:0:b0:55f:c756:685d with SMTP id c5-20020a50f605000000b0055fc756685dmr7099edn.3.1707155076466; Mon, 05 Feb 2024 09:44:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1707155076; cv=none; d=google.com; s=arc-20160816; b=lhB+3IEh4r3/3R0y9Ee56mR4t3UZbX7hM8Jt+fNXkANGp+wL0NUdJ2mcuEYafrSm6R x0UYeSrxhoueWWChb/o3rdJkHmMcZpWMzzu+oJhO18+GMpTNo1dZO0aiwAAJkMMQHy+a lLTFit2kug1zhgpZpyYhl3tuChly4KtzoSSoduScRdTvMSe5CUskUwmrzOlCHZOWVYdw luYDzNyysv8SID8xlkhAUVkGjL5/bVaUFEDdl7/t57lllkmQNmC5a1oZ3NnHPFN4Y6mh lebDvcplH5kQhusSQVbHhszPQ2eXYMUtH4eRMpKX1XVdmWSAmFrOQAGRmxIeoWWTvlMe 4W0g== 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=r60YKyTvW9m2nCCa2LdxHp9ba91S79lyHY+lNJ3C/bk=; fh=XAVF57iUtl423PvZoSUxVZqhPVNC35Z/feoS17+Nc1U=; b=vFFUQXcUWIW/vLQWiuzPHQQFIIU00OeMUGmhAeZXcEhWLdRMrVxlR0chYVPRNNKpBP 1D/TCG3blbMrUk+JkXoiwZWlifHrGqtx91NlKjepuz3fbNFif9HD179XnmX0ZnhpR9p6 2rR3ur5cXJNZByGnmuXprjxPhBBM/Bp7L61ulNzAYcOnZx1Wky2nFdTV/hcxRYec4uZf Xq3dXqCwVOjKzvFd5gulJhh1+blhjreZeCjXfI0ftCZkHg/UIzgAcqvvmng63IuHIKNn tl3rKWO+jigmzuWa5DvhURmucOLxTdE+yaVo2py55gtQopL/fqUsX5hgfC1tK1/UcxHX i0DA==; 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="o2/vkDFM"; 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; AJvYcCUEdAxBLqb1jUe0lXJotIo7EUgxy+kHD4MMdF3gw+87DLRYdI02fZm5VXjN1rhb/i25jSgoAZoB7PzAE//xp2mqniJxIEd7qyXL/GgZQPC7dka0DPXSybTPl2KgBkVhciyVckkfwcrXLVCEQDyJE2Dv5jhQ7OwO8ETrFAtWPm68Skrg6ZZtpOiWsRiL/Ft/mClscrtGYipatrsqcLMO64p3gRajHfanIoqmQKtaGBTr4eosxpt3qk/nXBQ2vt03tVYt9/N1RQFIt1a75oXzvdGRgRBQgG6GwC8w9kIc+3g6PFmfJxrSsHiKeu8KO/m7T5SqM3Lm0QBADP2/pafjBBnd7E9j8XR+4DQr3JE16cdWW/Ti2vi8xFM5EGuQZpREafZwju2s3QHKShUAJ1swkXRJBUgIyw9+D57S2pgeZr2uE6ywTFU0T3VVgSBwHlng7ozmdE55IbZ36WB9K7P1dIcpQPaFRqz2yTQrJjSfX3hQl0KF6sLAGSkVFSaxzDYZ2JoreSlrvLc2DdG7rBQlwqVWlXTEDz+NUutKJ4Ze65ef0hPWQd661l90SMVxZNgy+c6v+aIkbJ5aAdGXPo9Vm9qriGkHRn+J00N4rtNrRmsMhjflJNZ+4CytI9gCYnaQtBapWW44OPCLhERRZzxGDl7pX4COU+gkX2PDZdn7YtxEzizpWxBGoJIqy07j6uplC1gDd5aUckmcbEGzmLWhTctrBrdb7V5plIDZ87dY5xfmkTlFwFQVCZgjAWU54ZGxgF2ck5wxrbEezGktzoex/XBEmpZBe6xvh0Mq1DJnIC04WKW7DvbZw4wu99XAz4K4t9OkVVaUcnqbPF8uPqRy4D25iRqFn/6T9UMMY9R8cIKFWWrsQdCqpVB56A0lSZTGgWNf6x6GbNychpnqc6pd1UgGqLgN7LctCWW+purr623c5ntSrOoU3kVH6mdrS7WVpDZem7 JFhP7y51DPWATohvKdeY9SvkBeMisi+clYyPY9Kj6+h1TLvr4PtGUld/BxtDsUHMGEvjv69x/LPQVZ/tyBs2L2cgmdCK1os915XxyAgLYjYE+iYef/CA+gfAHjias17TXweJPFoaWEgz7p/fq8wC+TxMzigWl0d/ydgPmVhsgzBgXH0/WoX6rndG+p/uLVp3lUKzHKij5WeGOpYJamTyOVbOK68HigTcUa6zv5XuRZrN5r9gq0H1vwdrI1/IT9hKL5xZmU1p5cEb0pSnkOvTLXT0cUHpSSMRuPAxH65zrlcGofJ9xX2zvLGm+RqleAgiZjZkGr1FUiJfsgU0GDNQ+rqMQ83/0imwywOonJ0k/x55vcTflyxnoY4mFEtxzkmjDDhbyZUTX66xaTxujEvyi9YUp9xDMh9FXZv7AuWm1pB4sGSul8NNAYjyFn3w4+VMIl5cgnNc4IzFR/gtkzzv3rqAjhV1rvcc/NjZbAeN5iynvSUrwwhgMxpf5FuvhegA53ukYHbeupOAtTKCbWY6OQTaIp2lwv6jK6ydQefV/kvCM0I1sPc6AaNE8tT6caGKnj9gGqF3aAp1o83WHfiPpIyrepnA== Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id cm3-20020a0564020c8300b0055c2dd404d3si112198edb.195.2024.02.05.09.44.36; Mon, 05 Feb 2024 09:44:36 -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="o2/vkDFM"; 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 03F53680BEC; Mon, 5 Feb 2024 19:44:27 +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 B9B4968D155 for ; Mon, 5 Feb 2024 19:44:18 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1707155058; bh=IbZPtNYNiAJN68hI19fNXZOATQzqWkNeu2EcTDzxPI4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o2/vkDFMIt5BwFN3niER+oevpm9nahrX8n47uNjSPa/ZmyKHs/QzeqgvLfxHb2r7L NhIE/tVQpad2leRiaIGtLGd5Dw2Lr+wojIp35xnCE1toyKKi2yufEwLdVUn5aA9+/A k1FdQX7KgrIYobtgiUhYEjP3prZtDtJITuoljovE= Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 5AC3740CCA; Mon, 5 Feb 2024 18:44:18 +0100 (CET) From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Mon, 5 Feb 2024 18:44:13 +0100 Message-ID: <20240205174413.92730-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240205174413.92730-1-ffmpeg@haasn.xyz> References: <20240205174413.92730-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec: set color_ranges for all video encoders 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: 8AKX0rwYtNRz 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 assign a list of all possible color ranges to codecs in 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 | 4 ++++ 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/utils.c | 12 ++++++++++++ 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 + 69 files changed, 95 insertions(+), 1 deletion(-) diff --git a/libavcodec/amfenc_av1.c b/libavcodec/amfenc_av1.c index 3f164ccc59..9e55508979 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, + .p.color_ranges = ff_color_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 bd544d12df..5b1ebc5637 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, + .p.color_ranges = ff_color_range_all, .p.wrapper_name = "amf", .hw_configs = ff_amfenc_hw_configs, }; diff --git a/libavcodec/amfenc_hevc.c b/libavcodec/amfenc_hevc.c index 352564a301..4f936355a2 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, + .p.color_ranges = ff_color_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 50da46738c..a1f331782d 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 }, + .p.color_ranges = ff_color_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 }, + .p.color_ranges = ff_color_range_mpeg, }; #endif diff --git a/libavcodec/avuienc.c b/libavcodec/avuienc.c index 8a093d3d19..b917caa226 100644 --- a/libavcodec/avuienc.c +++ b/libavcodec/avuienc.c @@ -99,6 +99,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 }, + .p.color_ranges = ff_color_range_mpeg, .init = avui_encode_init, FF_CODEC_ENCODE_CB(avui_encode_frame), }; diff --git a/libavcodec/cfhdenc.c b/libavcodec/cfhdenc.c index f447438491..cb8c22fc1f 100644 --- a/libavcodec/cfhdenc.c +++ b/libavcodec/cfhdenc.c @@ -872,5 +872,6 @@ const FFCodec ff_cfhd_encoder = { AV_PIX_FMT_GBRAP12, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/cljrenc.c b/libavcodec/cljrenc.c index 31ad5ce0cf..cc38b328f1 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &cljr_class, }; diff --git a/libavcodec/codec_internal.h b/libavcodec/codec_internal.h index 130a7dc3cd..f2fc8feb08 100644 --- a/libavcodec/codec_internal.h +++ b/libavcodec/codec_internal.h @@ -327,4 +327,8 @@ static av_always_inline const FFCodec *ffcodec(const AVCodec *codec) return (const FFCodec*)codec; } +extern const enum AVColorRange ff_color_range_jpeg[]; +extern const enum AVColorRange ff_color_range_mpeg[]; +extern const enum AVColorRange ff_color_range_all[]; + #endif /* AVCODEC_CODEC_INTERNAL_H */ diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index f52a2e9918..aa178dc1a2 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -1372,6 +1372,7 @@ const FFCodec ff_dnxhd_encoder = { AV_PIX_FMT_GBRP10, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_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 ce21247081..e287e23ea8 100644 --- a/libavcodec/dvenc.c +++ b/libavcodec/dvenc.c @@ -1251,5 +1251,6 @@ const FFCodec ff_dvvideo_encoder = { AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &dvvideo_encode_class, }; diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 2778c63012..48c93de325 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1304,6 +1304,7 @@ const FFCodec ff_ffv1_encoder = { AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &ffv1_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_EOF_FLUSH, }; diff --git a/libavcodec/flvenc.c b/libavcodec/flvenc.c index 6a96cb0f2f..77a6edffa8 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}, + .p.color_ranges = ff_color_range_mpeg, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/h261enc.c b/libavcodec/h261enc.c index 438ebb63d9..e8cccd6d05 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, }; diff --git a/libavcodec/huffyuvenc.c b/libavcodec/huffyuvenc.c index b02b3c7a9a..d4999573c3 100644 --- a/libavcodec/huffyuvenc.c +++ b/libavcodec/huffyuvenc.c @@ -1094,6 +1094,7 @@ const FFCodec ff_huffyuv_encoder = { AV_PIX_FMT_YUV422P, AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; @@ -1127,6 +1128,7 @@ const FFCodec ff_ffvhuff_encoder = { AV_PIX_FMT_RGB24, AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; #endif diff --git a/libavcodec/ituh263enc.c b/libavcodec/ituh263enc.c index 97abfb3f45..09241303dd 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}, + .p.color_ranges = ff_color_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 }, + .p.color_ranges = ff_color_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 5f95b772d1..abd3e229e4 100644 --- a/libavcodec/j2kenc.c +++ b/libavcodec/j2kenc.c @@ -1863,6 +1863,7 @@ const FFCodec ff_jpeg2000_encoder = { AV_PIX_FMT_PAL8, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_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 aa800834fe..03417eddf1 100644 --- a/libavcodec/libaomenc.c +++ b/libavcodec/libaomenc.c @@ -1559,6 +1559,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, + .p.color_ranges = ff_color_range_all, .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 0711d9ab38..2ff66dabde 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, + .p.color_ranges = ff_color_range_all, .p.priv_class = &class, .priv_data_size = sizeof(LibkvazaarContext), diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 6f231d22b2..8dabdafa34 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 }, + .p.color_ranges = ff_color_range_all, .defaults = svc_enc_defaults, .p.priv_class = &class, .p.wrapper_name = "libopenh264", diff --git a/libavcodec/libopenjpegenc.c b/libavcodec/libopenjpegenc.c index 009c7a4377..f471a93355 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &openjpeg_class, .p.wrapper_name = "libopenjpeg", }; diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c index 56539435a7..5565e7392b 100644 --- a/libavcodec/librav1e.c +++ b/libavcodec/librav1e.c @@ -684,6 +684,7 @@ const FFCodec ff_librav1e_encoder = { .p.priv_class = &class, .defaults = librav1e_defaults, .p.pix_fmts = librav1e_pix_fmts, + .p.color_ranges = ff_color_range_all, .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 862192945b..01cf9549a2 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -700,6 +700,7 @@ const FFCodec ff_libsvtav1_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_all, .p.priv_class = &class, .defaults = eb_enc_defaults, .p.wrapper_name = "libsvtav1", diff --git a/libavcodec/libtheoraenc.c b/libavcodec/libtheoraenc.c index 06eeaae006..cb14287bb0 100644 --- a/libavcodec/libtheoraenc.c +++ b/libavcodec/libtheoraenc.c @@ -390,5 +390,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 }, + .p.color_ranges = ff_color_range_mpeg, .p.wrapper_name = "libtheora", }; diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 80988a2608..ba37b8437b 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -2043,6 +2043,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 }, + .p.color_ranges = ff_color_range_all, .p.priv_class = &class_vp8, .defaults = defaults, .p.wrapper_name = "libvpx", @@ -2114,6 +2115,7 @@ FFCodec ff_libvpx_vp9_encoder = { .p.wrapper_name = "libvpx", .priv_data_size = sizeof(VPxContext), .init = vp9_init, + .p.color_ranges = ff_color_range_all, 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 d6edd86603..bd758d6d4c 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -94,6 +94,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, + .p.color_ranges = ff_color_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 8756231f23..e90d03e733 100644 --- a/libavcodec/libwebpenc_animencoder.c +++ b/libavcodec/libwebpenc_animencoder.c @@ -181,6 +181,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, + .p.color_ranges = ff_color_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 182e20f622..b96c91040d 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -1493,6 +1493,7 @@ FFCodec ff_libx264_encoder = { #else .p.pix_fmts = pix_fmts_all, #endif + .p.color_ranges = ff_color_range_all, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS #if X264_BUILD < 158 | FF_CODEC_CAP_NOT_INIT_THREADSAFE @@ -1550,6 +1551,7 @@ const FFCodec ff_libx262_encoder = { AV_CODEC_CAP_OTHER_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.pix_fmts = pix_fmts_8bit, + .p.color_ranges = ff_color_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 447e6da25f..8593c1c166 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -902,6 +902,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, + .p.color_ranges = ff_color_range_all, .p.priv_class = &class, .p.wrapper_name = "libx265", .init = libx265_encode_init, diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c index 6c29539f24..b53a8c24b5 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &xavs_class, .defaults = xavs_defaults, .p.wrapper_name = "libxavs", diff --git a/libavcodec/libxavs2.c b/libavcodec/libxavs2.c index c493ddc325..0e2fb597ce 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &libxavs2, .defaults = xavs2_defaults, .p.wrapper_name = "libxavs2", diff --git a/libavcodec/libxeve.c b/libavcodec/libxeve.c index c10b7de023..adee1abe24 100644 --- a/libavcodec/libxeve.c +++ b/libavcodec/libxeve.c @@ -612,5 +612,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, + .p.color_ranges = ff_color_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 aba875b6b8..c169e32edd 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 }, + .p.color_ranges = ff_color_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 aa62beac71..141a65215d 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}, + .p.color_ranges = ff_color_range_all, }; diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index ccd6a54936..a36e3833c7 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -689,5 +689,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 }, + .p.color_ranges = ff_color_range_mpeg, /* FIXME: implement tagging */ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/mediacodecenc.c b/libavcodec/mediacodecenc.c index 7eae542248..5b09f4d825 100644 --- a/libavcodec/mediacodecenc.c +++ b/libavcodec/mediacodecenc.c @@ -623,6 +623,7 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \ | AV_CODEC_CAP_HARDWARE, \ .priv_data_size = sizeof(MediaCodecEncContext), \ .p.pix_fmts = avc_pix_fmts, \ + .p.color_ranges = ff_color_range_all, \ .init = mediacodec_init, \ FF_CODEC_RECEIVE_PACKET_CB(mediacodec_encode), \ .close = mediacodec_close, \ diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c index 508772987f..eb296bd7ab 100644 --- a/libavcodec/mjpegenc.c +++ b/libavcodec/mjpegenc.c @@ -659,6 +659,7 @@ const FFCodec ff_mjpeg_encoder = { AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_all, .p.priv_class = &mjpeg_class, .p.profiles = NULL_IF_CONFIG_SMALL(ff_mjpeg_profiles), }; @@ -685,6 +686,7 @@ const FFCodec ff_amv_encoder = { .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_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 0135623c0e..0bf12c02c7 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 }, + .p.color_ranges = ff_color_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 }, + .p.color_ranges = ff_color_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 d1e50612dd..8d2b483bbf 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -1403,6 +1403,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 }, + .p.color_ranges = ff_color_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 119ea8f15e..47292fbba1 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 }, + .p.color_ranges = ff_color_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 }, + .p.color_ranges = ff_color_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 }, + .p.color_ranges = ff_color_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 9f36796c4b..04d2c2fbe8 100644 --- a/libavcodec/nvenc_av1.c +++ b/libavcodec/nvenc_av1.c @@ -185,6 +185,7 @@ const FFCodec ff_av1_nvenc_encoder = { .p.priv_class = &av1_nvenc_class, .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, + .p.color_ranges = ff_color_range_all, .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 85a13634a3..7e337ecf54 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -256,6 +256,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, + .p.color_ranges = ff_color_range_all, .p.wrapper_name = "nvenc", .hw_configs = ff_nvenc_hw_configs, }; diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 840df6da8a..98bed92fe9 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -232,6 +232,7 @@ const FFCodec ff_hevc_nvenc_encoder = { .p.priv_class = &hevc_nvenc_class, .defaults = defaults, .p.pix_fmts = ff_nvenc_pix_fmts, + .p.color_ranges = ff_color_range_all, .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 82fd492071..4cb8a9a089 100644 --- a/libavcodec/omx.c +++ b/libavcodec/omx.c @@ -947,6 +947,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, + .p.color_ranges = ff_color_range_mpeg, .p.capabilities = AV_CODEC_CAP_DELAY, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .p.priv_class = &omx_mpeg4enc_class, @@ -968,6 +969,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, + .p.color_ranges = ff_color_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 c697845d7b..b4d30ad9c3 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 }, + .p.color_ranges = ff_color_range_all, .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 071a9a79e9..0b5527100d 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 }, + .p.color_ranges = ff_color_range_all, .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 c5b7ac7cc4..99b43a4bea 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -405,6 +405,7 @@ const FFCodec ff_hevc_qsv_encoder = { AV_PIX_FMT_VUYX, AV_PIX_FMT_XV30, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_all, .p.priv_class = &class, .defaults = qsv_enc_defaults, .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | diff --git a/libavcodec/qsvenc_jpeg.c b/libavcodec/qsvenc_jpeg.c index 2add12adc9..d47cfc7e65 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 }, + .p.color_ranges = ff_color_range_all, .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 22f1ff7c0d..57f16d68ea 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 }, + .p.color_ranges = ff_color_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 d0340ef94b..f8c4bcff85 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 }, + .p.color_ranges = ff_color_range_all, .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 0933abf4f9..88ecfa1d4e 100644 --- a/libavcodec/roqvideoenc.c +++ b/libavcodec/roqvideoenc.c @@ -1127,6 +1127,7 @@ const FFCodec ff_roq_encoder = { .close = roq_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_jpeg, .p.priv_class = &roq_class, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/rv10enc.c b/libavcodec/rv10enc.c index 8a405b8686..105f7a9f08 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 }, + .p.color_ranges = ff_color_range_mpeg, }; diff --git a/libavcodec/rv20enc.c b/libavcodec/rv20enc.c index dc26877d5e..ebb209a763 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 }, + .p.color_ranges = ff_color_range_mpeg, }; diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index c215215346..ce594c3fa7 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -2142,6 +2142,7 @@ const FFCodec ff_snow_encoder = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_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 5b4ff4c139..0d0fa04d0c 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, + .p.color_ranges = ff_color_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 2e07af3688..ecd9de8269 100644 --- a/libavcodec/svq1enc.c +++ b/libavcodec/svq1enc.c @@ -758,6 +758,7 @@ const FFCodec ff_svq1_encoder = { .close = svq1_encode_end, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV410P, AV_PIX_FMT_NONE }, + .p.color_ranges = ff_color_range_mpeg, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/tiffenc.c b/libavcodec/tiffenc.c index 06d7dcc99d..a8e5c6ba84 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 }, + .p.color_ranges = ff_color_range_mpeg, .p.priv_class = &tiffenc_class, }; diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 39b83c7791..4ed3a4291b 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1100,3 +1100,15 @@ int64_t ff_guess_coded_bitrate(AVCodecContext *avctx) return bitrate; } + +const enum AVColorRange ff_color_range_jpeg[] = { + AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED +}; + +const enum AVColorRange ff_color_range_mpeg[] = { + AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED +}; + +const enum AVColorRange ff_color_range_all[] = { + AVCOL_RANGE_MPEG, AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED +}; diff --git a/libavcodec/utvideoenc.c b/libavcodec/utvideoenc.c index 1fcb6854f2..a22ba53f01 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 }, + .p.color_ranges = ff_color_range_mpeg, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c index e08db5d5d3..90598b6038 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, \ + .p.color_ranges = ff_color_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 5a9ff0f798..b1c7511100 100644 --- a/libavcodec/vaapi_encode_av1.c +++ b/libavcodec/vaapi_encode_av1.c @@ -946,6 +946,7 @@ const FFCodec ff_av1_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .p.color_ranges = ff_color_range_all, .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 57b5ea2bab..30ee07eae1 100644 --- a/libavcodec/vaapi_encode_h264.c +++ b/libavcodec/vaapi_encode_h264.c @@ -1392,6 +1392,7 @@ const FFCodec ff_h264_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .p.color_ranges = ff_color_range_all, .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 239ef2359a..aec3b9d2f7 100644 --- a/libavcodec/vaapi_encode_h265.c +++ b/libavcodec/vaapi_encode_h265.c @@ -1509,6 +1509,7 @@ const FFCodec ff_hevc_vaapi_encoder = { AV_PIX_FMT_VAAPI, AV_PIX_FMT_NONE, }, + .p.color_ranges = ff_color_range_all, .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 c17747e3a9..0a69ecfd3f 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, }, + .p.color_ranges = ff_color_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 d1904bf4f5..436b221b8d 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, }, + .p.color_ranges = ff_color_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 8a557b967e..723a9f2819 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, }, + .p.color_ranges = ff_color_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 c2a8dec71b..5d2e173d3e 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, + .p.color_ranges = ff_color_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 d978c67a3b..65b3d1e5cd 100644 --- a/libavcodec/vc2enc.c +++ b/libavcodec/vc2enc.c @@ -1237,5 +1237,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, + .p.color_ranges = ff_color_range_all, }; diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c index a7efd7ef3f..5d032a08f1 100644 --- a/libavcodec/videotoolboxenc.c +++ b/libavcodec/videotoolboxenc.c @@ -2957,6 +2957,7 @@ const FFCodec ff_hevc_videotoolbox_encoder = { AV_CODEC_CAP_HARDWARE, .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = hevc_pix_fmts, + .p.color_ranges = ff_color_range_all, .init = vtenc_init, FF_CODEC_ENCODE_CB(vtenc_frame), .close = vtenc_close, @@ -2996,6 +2997,7 @@ const FFCodec ff_prores_videotoolbox_encoder = { AV_CODEC_CAP_HARDWARE, .priv_data_size = sizeof(VTEncContext), .p.pix_fmts = prores_pix_fmts, + .p.color_ranges = ff_color_range_all, .init = vtenc_init, FF_CODEC_ENCODE_CB(vtenc_frame), .close = vtenc_close, diff --git a/libavcodec/wmv2enc.c b/libavcodec/wmv2enc.c index 8eb56444a3..6fc748548b 100644 --- a/libavcodec/wmv2enc.c +++ b/libavcodec/wmv2enc.c @@ -248,6 +248,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, + .p.color_ranges = ff_color_range_mpeg, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, };