From patchwork Thu Aug 17 21:48:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 34980 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4c9d:b0:130:ccc6:6c4b with SMTP id fq29csp2265177pzb; Thu, 17 Aug 2023 14:49:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHJLKt8uvR2/hsP0lpguneEk1AVO9I5XlHRdPhoXORUclS2Qrx87WrqF2qrTPtLoH2d2FT4 X-Received: by 2002:a05:6512:2314:b0:4fe:8ba9:4c7 with SMTP id o20-20020a056512231400b004fe8ba904c7mr480022lfu.26.1692308949684; Thu, 17 Aug 2023 14:49:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692308949; cv=none; d=google.com; s=arc-20160816; b=Kdh8jxuosRqlJYUZE5gj+j9QBXi3lWvqoU58i9WdBngjLqg37VQvrz06T+piDSoDuG gJyLSjm06YSG0zJetXP+Jp4jw/ea57yOKAgSVJFlYKU20m7ZIyG/50N69w34bq/QD//D AEH2QmcCwvBhbwAPw+1lP38UAFmv3T43/7UcQXMW4feohUgJU40zL9ORqOxltPgohhvN ua+zh48EIE0qM8g7bGU9YFjGQ9WyM9FYLxf6g8hD11/yrplED5kL1ZPQesRzj3vSdPrL q6CWjX+oroFaTt+UajDNWhJdUKGXKajBg9XRHbLksmlFcLuYPz+yB4nJ4A5SOlOe4tO2 dWfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=nN8WtYTaNHWnSwFnEqjD5Y9PRbXk5wCits8Djp3rB9M=; fh=DpbP4OnC98Ct+zBdrpJgv1NgOvKTVLIsArQu/ER33Zc=; b=lpQkZGWKObYK73PjOzIIZ/eNSwXZKheIJeKaxePYy+bCaNAf/6IzobPBHXjrOwlo64 A8TBSeeR2cei4qxe87T+H2gJG/dCnQpc3uipCb7KCSqnrUMbtOS9B2OLA2jFkvepr6pb uGWoUUU1DKozvsiYT9V2RLlrqTK4Egj3IeKAnlZNo540UkCgBDn6XwKHku/Sw3IGoW5R IPJrqeQ6c8YMxcJ5XcEvPU2hreuAMV9yWw4ZSvIiBcss2xie8B31kj38EEkMqcYbrVXg 3H6LaOH6i08gyYVe96UZn11x/FMtQCGErP3te0vX5o1VR/9LHrNdf1OY2mquQrO92zEi ckCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=GDjrIpJP; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b26-20020a056402139a00b0052545f962cbsi296332edv.640.2023.08.17.14.49.09; Thu, 17 Aug 2023 14:49:09 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=GDjrIpJP; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2127768C552; Fri, 18 Aug 2023 00:49:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 51E5568C552 for ; Fri, 18 Aug 2023 00:49:00 +0300 (EEST) Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-4fe389d6f19so276445e87.3 for ; Thu, 17 Aug 2023 14:49:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692308939; x=1692913739; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=7GPyFWa/7Az7zT2YK040qgfNOkKDFl7Vx0qIsV8tG9c=; b=GDjrIpJPXu84oM2qZ3V3X48FjT9ORTyZ3gsNUuK6jpmblPqvz/yYWhwLJfublpefG2 13Obr3Gnw762bzHcSbaOcox0fSf+OouIqbPYAojhd5eCHyjvsyWx4wyEJhbWm/4oXgQd plyzwguESpgJjtS1EliuOtQZ0Hl0AAwUr8D94GAaIRtdjZ01hfb6haxvkNUImk06/b02 APl0whqAdF0FC4tesnzZEX8Ra0A3eGXe0HeF+KG/+hdKutUcGpvsaAEYHBRYZfGt4CUB bwbvoImOJd92sXHLTy7DuFXflL0rwa8YBz9ka1tojMVFd5p6SolqWFL/S3TZQ40SghSa FjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692308939; x=1692913739; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7GPyFWa/7Az7zT2YK040qgfNOkKDFl7Vx0qIsV8tG9c=; b=TqFd0BE5juw+jodUtdRIPFygi+H0qGU9s+QyG+VjCT9X6b9Xa1LKNbkWAoIKrEgnCQ SQcJjkCCmCbdQ6lWMvN2k8T04Mx0gdLGwZlKjilT5Jk9miuNLMUyLwA6TvHLQyxWTrUY XH9/KGVWYWmWAS6WlfL2dUnYuYIQ6h2sd9v4T002hArMlvB5agXzJ0HNQsyHrNF6whI+ ZGDD/8mB3+qvPOFLGWAkgBgK5/n2RIAoIAe+11VMfrYeUBhrkvs0ucGc0N3lPt3vhKa0 Oty8qSQKQ7PMBOnNaEKUGEKbWonv7Bg+3ED28MFJJP914MSjOIkI98hZBpmElTE1lNAW BEsg== X-Gm-Message-State: AOJu0YxmX6Gm9xC6eBYo3uawffozPkFdKNebPEue02J6q+pl5qi6FBFy JoAmwEybIg02QWZ+/31B3Q0aRcfjd2I= X-Received: by 2002:a05:6512:12d4:b0:4ff:8fdd:4be4 with SMTP id p20-20020a05651212d400b004ff8fdd4be4mr419014lfg.29.1692308939303; Thu, 17 Aug 2023 14:48:59 -0700 (PDT) Received: from hifumi.mshome.net (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id w2-20020ac25982000000b004fe20d1b288sm62813lfn.159.2023.08.17.14.48.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Aug 2023 14:48:58 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 18 Aug 2023 00:48:38 +0300 Message-ID: <20230817214858.184010-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 00/12] encoder AVCodecContext configuration side 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: h+nTaIzkxBZb Differences to v2: 1. rebased on top of current master 2. addition of external encoder tests as the attached side data can now be parsed from all formats after the movement of side data from being HEVC specific to the common h2645 SEI parsing. 3. Various miscellaneous fixups/updates. This patch set I've now been working for a while since I felt like it was weird we couldn't pass through information such as static HDR metadata to encoders from decoded input. This initial version adds the necessary framework, as well as adds static HDR metadata support for libsvtav1, libx264 as well as libx265 wrappers. An alternative to this would be to make encoders only properly initialize when they receive the first AVFrame, but that seems to be a bigger, nastier change than introducing an AVFrameSideDataSet in avctx as everything seems to presume that extradata etc are available after opening the encoder. Note: Any opinions on whether FFCodec or AVCodec should have handled_side_data list, so that if format specific generic logic is added, it could be checked whether the codec itself handles this side data? This could also be utilized to list handled side data from f.ex. `ffmpeg -h encoder=libsvtav1`. Jan Jan Ekström (12): avutil/frame: add AVFrameSideDataSet for passing sets of side data avutil/frame: split side data list wiping out to non-AVFrame function avutil/frame: add helper for uninitializing side data sets avutil/frame: split side_data_from_buf to base and AVFrame func avutil/frame: add helper for adding side data to set avutil/frame: add helper for getting side data from set avutil/frame: add helper for extending a set of side data avcodec: add side data set to AVCodecContext ffmpeg: pass first video AVFrame's side data to encoder avcodec/libsvtav1: add support for writing out CLL and MDCV avcodec/libx264: add support for writing out CLL and MDCV avcodec/libx265: add support for writing out CLL and MDCV fftools/ffmpeg_enc.c | 11 +++ libavcodec/avcodec.h | 7 ++ libavcodec/libsvtav1.c | 70 ++++++++++++++++ libavcodec/libx264.c | 79 ++++++++++++++++++ libavcodec/libx265.c | 82 +++++++++++++++++++ libavcodec/options.c | 1 + libavutil/Makefile | 1 + libavutil/frame.c | 138 +++++++++++++++++++++++++++----- libavutil/frame.h | 62 ++++++++++++++ libavutil/tests/side_data_set.c | 71 ++++++++++++++++ tests/fate/enc_external.mak | 15 ++++ tests/fate/libavutil.mak | 4 + tests/ref/fate/libsvtav1-hdr10 | 14 ++++ tests/ref/fate/libx264-hdr10 | 15 ++++ tests/ref/fate/libx265-hdr10 | 16 ++++ tests/ref/fate/side_data_set | 7 ++ 16 files changed, 571 insertions(+), 22 deletions(-) create mode 100644 libavutil/tests/side_data_set.c create mode 100644 tests/ref/fate/libsvtav1-hdr10 create mode 100644 tests/ref/fate/libx264-hdr10 create mode 100644 tests/ref/fate/libx265-hdr10 create mode 100644 tests/ref/fate/side_data_set