From patchwork Fri Sep 1 20:38:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43436 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578413pzb; Fri, 1 Sep 2023 13:38:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHi4mCL/ZtYMefYnJ0y4a4PjUK0TvKavXwePU5SGK9gble3JBqPOwzxz2U0XDnayl64h9EJ X-Received: by 2002:a05:6402:2035:b0:522:1bdd:d41a with SMTP id ay21-20020a056402203500b005221bddd41amr2733450edb.4.1693600721848; Fri, 01 Sep 2023 13:38:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600721; cv=none; d=google.com; s=arc-20160816; b=lQmj6SX5MKoeBMnVKQVcCBA3eG5yo9hUVgv9joEM1W6HU5ukFIJpLoagiHtr2qVcCa B/XqlC4orxup4nBmVubLt9CaO7TQ6prSo27z1ynWD+Udx0PN0QCvZYtBJ54RKB/sZt3a noP0IPv2kTvYW5KV9sQN3jLzygiYDH6+oXuiZi1KsydL3P4pJKfE4a3xRYcGRtdQeRVZ DrsC2MzvOh3sH0wZpjZhjPwSgA0ueiOlkAuKmyjqToTsyEVwTyFSXEfBiol89Jn0B/dz Gx1h2dava+MCIWEBMqN2YcAOsZgi7xYINebIAoTL0+KMBBhCpV3HzrmepkkF3El4PGya lMdA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=ZVFdGdbMxjKYplb+oND3sI5Yzk5+UEXASZISffWrPII=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=IDLxU46R4GYRqDsAC2+PnVssWtQoUkcAYL4nnPPb260EYOwLpvE8oneiLS9FSsufjz YVYkstUOpDw0aBxqhmTu+LkNactrxlQbtGx+wMP80eWW/CGUlXCzoz/4gfVC3/7W8Bkq +WDLlSdRecWmZhEB54MC+0rMCng6jHifJa1zW/lP3eT0/u9Z/kIIY8pzhS5j7zSAGKTl vnC5C0tVt2p2lzaC4HgSwNWsmDWW/box1pcxTcd7HJbeN4wKkj9iJnOA3sSzL6CZ7EkH UrYSWELiWuLWh1cLSfsEGEWhK3vmtnGvTdaWZl58ON5k1eY1qqMTcBYgzw1HE4Q0rkQ7 fCUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=Ir+eKREj; 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 u5-20020aa7d0c5000000b00529fb5fd3bcsi3071212edo.488.2023.09.01.13.38.41; Fri, 01 Sep 2023 13:38:41 -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=Ir+eKREj; 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 9A62568C736; Fri, 1 Sep 2023 23:38:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 538B468C580 for ; Fri, 1 Sep 2023 23:38:31 +0300 (EEST) Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-2b974031aeaso43956231fa.0 for ; Fri, 01 Sep 2023 13:38:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600710; x=1694205510; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=mqdYbvMnOaqX3WeiW7DirWy0CjxcJqLwySANfN6hPeg=; b=Ir+eKREjv2ddxYy5WX/SpntvPUy9Td5K/upF7jkoIKL9+4o5XUoZUnpXRzkKLOkYUv S1U8jrCf3bvApqCLDGft61en9Ce1d8xwcLbgHgU7g2PAzk+5i7gr7Q5o4D0D8SpQOQAG t3lAYTHLG4FPpPltcBhM7gRfSmnZBZsNBGKJQC3ovG7tLcVQBt4POvXt7yNVQ1lv+UnG +JEA7sbQpUJkfHMIWEfacqPG8blsNLpIJgSKHLa7pDlR99I4uAnDWHyqiGwEciytJ7sO VYfj2lySM4mvmZRKWCxkcRoei8qNC93nC+oGUiTNijfinIxVyL3sEvuUNcbVrwf2qzKE LfqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600710; x=1694205510; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mqdYbvMnOaqX3WeiW7DirWy0CjxcJqLwySANfN6hPeg=; b=RAbCBMm2ouGrTaQ9X4J7h4TTwkKKEdnwe7uhbzCPEpD71gFj6/TMFEvGzX3HjJ1Rta aPDbNPzK5mhEp17mMw86OLUvrdsnQeLjfT1eGlWEZgHYqfvV8fqXN4/jMW4imAj7eu9I 966BbpLP+QjbUEYzl7KPgBvM5iyIX2C0KIAtnKwL3To5EnBTon2vLA+DP0S4+7uwm3PC 7RqmJJV9LieF8kgegMXmK/t+HjNn0H4mcResa9vzzeEko/j8nbInnTzzCvpXrf7LHhwn D7l4LGjiErxeGMeiM3WNOUFFY1ow9/JkbrlilJGYDdTHAA7P7fuQnmPrQ6DKzwGRlBHU pEWA== X-Gm-Message-State: AOJu0YwDt3J7Fs2SbqnTY3jQxet6K0y9OaLC/6SvhaXG/mxxpi329dZp iCjn96BSywbt/DK8JHQtQyTEHJRSYrEtgg== X-Received: by 2002:a2e:3a19:0:b0:2b6:cb55:72bc with SMTP id h25-20020a2e3a19000000b002b6cb5572bcmr2712630lja.1.1693600710320; Fri, 01 Sep 2023 13:38:30 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:30 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:11 +0300 Message-ID: <20230901203828.275197-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 01/13] avutil/frame: add AVFrameSideDataSet for passing sets of 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: 64y7fwWQQqx+ --- libavutil/frame.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libavutil/frame.h b/libavutil/frame.h index c0c1b23db7..6155226c1d 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -251,6 +251,14 @@ typedef struct AVFrameSideData { AVBufferRef *buf; } AVFrameSideData; +/** + * Structure to hold a set of AVFrameSideData + */ +typedef struct AVFrameSideDataSet { + AVFrameSideData **sd; + int nb_sd; +} AVFrameSideDataSet; + /** * Structure describing a single Region Of Interest. * From patchwork Fri Sep 1 20:38:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43437 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578550pzb; Fri, 1 Sep 2023 13:39:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEGiOziHeBkcTiKzsVhHT7NXSHWiyJvznjA2ssf35Ab79Gvf8XP2Y0SeHXo9XMlIIp+MWXT X-Received: by 2002:a05:6512:1054:b0:500:c709:5845 with SMTP id c20-20020a056512105400b00500c7095845mr2989379lfb.4.1693600742043; Fri, 01 Sep 2023 13:39:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600742; cv=none; d=google.com; s=arc-20160816; b=ONnEg2ydGh0b7glukmeE3TCOi1vs5TjBELxUT+k/m2TEHfV54jZvU8NP+uPohkYyvy g9WqudzkR7Mendpks9bubd6ukLfekHCBGsNZUAUKpQ2psRGM0skjmBt056AXFN/xbosg dPJbuc+IiPTT+bjCyCbEiWf4MfjnyvZ2xTtRSs5xTcbKpArJE75fXMellgBmHXh57fDZ Cdj6nkasE6Yhsdeojrr3N7BCgvMHTsgo8/bBp9p218mC/ZrJJ2uXLgUSjwJLyDDhreMp 9uEEYaNRsTY7VsogtqurFdyQlkqU+MRMjN7IvHoY3M4Gv4Wt0sxlxEVsuCHaIXk2If1a 6Jpg== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=FqullwPmc3UFhz4bq4ELLlpIYz93yHeGhZ/ttYjtzas=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=i6djN0ehuGIctucMrVkyDn5FKct4ep/Im9p16oEbr18J3Vu9kinsjFEQSyXsAHxaNW vCMi6A1XTzjMVLNpHSk7rWgB6bbU6anl3FGZcigf0wK4bp4tL9dgECFS/gonV+jiMUW7 1cSQF2rnP177N21NiUNPAGGmVnD6iARA/ooI7DYiqYzNPvOdKPu+C8IXurSo4bCnXriC Jp9yCyKuCABsgMC3DuRGrPOwHqJsm3FIJmjPsElwTW9o/DN5iOcWhL6N590PAha984Ib yi2LZldkmpQdNG3SgoDnmSevZ6Q3iB8Gk8v/t4q9/B9WzdYFSCDoD15Rdd2S1MmiE0xu qjfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=Z2O8F0lA; 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 r12-20020aa7d58c000000b005236b471170si2974157edq.96.2023.09.01.13.39.01; Fri, 01 Sep 2023 13:39:02 -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=Z2O8F0lA; 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 D547768C757; Fri, 1 Sep 2023 23:38:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7F25C68C580 for ; Fri, 1 Sep 2023 23:38:31 +0300 (EEST) Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-2b974031aeaso43956441fa.0 for ; Fri, 01 Sep 2023 13:38:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600711; x=1694205511; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ogFJWMZX6zIk/onVXKv1EFunUb8leAUJGxwZxJXW2Oc=; b=Z2O8F0lAfOLqRDMwtc113bS1wYJSsSIWcUEWV1ET0E1TZ7FDuwgekw1y35k5LwLIfU LrITQM7oXgKqjs4fUaJTgBNB6tKdeeNIN5S2UnkVrlt0J24kKz9bUBxvL7Qsnv6mhAzA IEQoEqsw4HcKCZV/6FwBtJPaT9xqjxsJYBPY40RwN5FtMSlPoVF2wa90qxJRGbJsIYmY wHm39izUbdArCRKggWLweXQK1O9s53/dm4upUnzCyn2IjUUyAT6WAmfspLxpUEc04mbf TzsXUJuDWNyFcbEapmfuSpyTX1Hy8hAg7geuwjequZ5XIuo+TstigUGq7sKBSAOgp82J djXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600711; x=1694205511; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ogFJWMZX6zIk/onVXKv1EFunUb8leAUJGxwZxJXW2Oc=; b=HeBgUi5XLzcdepzpeAN9HO2NiK68BqLCGoZalpJ8q05pHOjlyeWZS2Zcgh/QN7Opel Poe3yfA6GYslHivgvQ3EonwBtCLabZM7eR3EMNX0o9e7SHHQes4wExnS0KjqK9WpTEJg 6kh/PXNX94U61X48oYPvpCi19fi5wzZ2oxJk2szALuh/rKqOTJuflId05iS9w+xE1h5X qF3HrMP4+bmmEmeoSwLl59h8OqreOxwmQQLyrDT/evUeNkkKMnQ9iL4AS1nd/8NPYIvQ OUjTTtNaQNhy9d85SpeKOUo7Jzvr1CkoIf/Q/Vav5HrDhHfiVzv/o7uB1GcslxVnCkSQ tFzg== X-Gm-Message-State: AOJu0YzycyN8xuJDPYsyoy5vMh/oLPFoWeW3pfo8hpcXzf1c1H6ecUjE 0akPJY4unJBXlsOsw92W4X5Dx3xieZie4w== X-Received: by 2002:a2e:82c3:0:b0:2bc:b70d:9cb5 with SMTP id n3-20020a2e82c3000000b002bcb70d9cb5mr2536337ljh.33.1693600710692; Fri, 01 Sep 2023 13:38:30 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:30 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:12 +0300 Message-ID: <20230901203828.275197-3-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 02/13] avutil/frame: split side data list wiping out to non-AVFrame function 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: yeWLVxPkXP7l This will make it possible to to reuse logic in further commits. --- libavutil/frame.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index b6cee2d886..4b8481b756 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -75,14 +75,19 @@ static void free_side_data(AVFrameSideData **ptr_sd) av_freep(ptr_sd); } -static void wipe_side_data(AVFrame *frame) +static void wipe_side_data(AVFrameSideData ***sd, int *nb_side_data) { - for (int i = 0; i < frame->nb_side_data; i++) { - free_side_data(&frame->side_data[i]); + for (int i = 0; i < *nb_side_data; i++) { + free_side_data(&((*sd)[i])); } - frame->nb_side_data = 0; + *nb_side_data = 0; + + av_freep(sd); +} - av_freep(&frame->side_data); +static void frame_side_data_wipe(AVFrame *frame) +{ + wipe_side_data(&frame->side_data, &frame->nb_side_data); } AVFrame *av_frame_alloc(void) @@ -337,7 +342,7 @@ FF_ENABLE_DEPRECATION_WARNINGS sd_dst = av_frame_new_side_data(dst, sd_src->type, sd_src->size); if (!sd_dst) { - wipe_side_data(dst); + frame_side_data_wipe(dst); return AVERROR(ENOMEM); } memcpy(sd_dst->data, sd_src->data, sd_src->size); @@ -346,7 +351,7 @@ FF_ENABLE_DEPRECATION_WARNINGS sd_dst = av_frame_new_side_data_from_buf(dst, sd_src->type, ref); if (!sd_dst) { av_buffer_unref(&ref); - wipe_side_data(dst); + frame_side_data_wipe(dst); return AVERROR(ENOMEM); } } @@ -525,7 +530,7 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif - wipe_side_data(dst); + frame_side_data_wipe(dst); av_dict_free(&dst->metadata); ret = frame_copy_props(dst, src, 0); if (ret < 0) @@ -624,7 +629,7 @@ void av_frame_unref(AVFrame *frame) if (!frame) return; - wipe_side_data(frame); + frame_side_data_wipe(frame); for (int i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++) av_buffer_unref(&frame->buf[i]); From patchwork Fri Sep 1 20:38:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43438 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578645pzb; Fri, 1 Sep 2023 13:39:11 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGLTlsbEbFWDYPIyHobQfDaFKNSoRrKQFpBTI+Q3JGPQrhvp0jVwHX0IdYUXTDyTtSgJ6Fc X-Received: by 2002:a17:907:a06d:b0:9a1:e8c0:7e2e with SMTP id ia13-20020a170907a06d00b009a1e8c07e2emr2588224ejc.14.1693600750868; Fri, 01 Sep 2023 13:39:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600750; cv=none; d=google.com; s=arc-20160816; b=rZkQnBGl/ZldEdBL+Ny8ZCcrf8klnNUu+YGTAl1onDgI5YTDiCX50xTM1aGXHeqgzB 9p6VwTu7ZUP9S5BmE5gJxJYtQKD2QX2UwgbQraedKbY5Qu9VhQY76xOUdgKc8XzJbZ5d c5qt5B1mNquKdAmOcG+pfxDVtD0jxU51lBZhZqQXCfVriL+zbUc7gINSKXd/phXnMHvo Pcy9WeqBX9eOJrlUaB3vcAR9/oVH8HGIQHq317pLUeSQaRyFRN8+8DP0EKA29RQrf3vT GTrHVhZYnolt3VHGUSAawOchjQRVvCHd/pm/97M8BoC36xHu5akvxVliM90ld1foLDBr XjUw== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=3nF3o8hcClAxTna11QhYVF6Iy57J8QuCo2ufxegx4PY=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=syOxosxZPztE+YhOzf7PLvWyOfVYNnz87jJyWk5EgVD76VdH+wiV5PSIeS1IY1ZJG9 LQgcpfxbM3gjgHyd09OsHofwNjrtL3+hSEXsG+76yh9n2uydkpDATX3/jkYsTRM5F+ka Pjy2dUCkzkx9I7qaV0G6uf/6C2BulbsQlt6dHpOMYyRB3FIucBg/xMo4We+JfqrcRZci yZneU8FdRMHSYDUYvBgXuAR7CIArtkiboFRCCyLzd0aJTmPnfPPaYnIYaMITcJwNhcnT Ngmm+dIucxwNuiISw/0x2nreV/E6q5bqorK12JeksSRR0nuryAX0WFmiH2B7uCbXk2iX AETw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=ZUeU4ErQ; 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 f4-20020a1709064dc400b009a257565886si2877705ejw.954.2023.09.01.13.39.10; Fri, 01 Sep 2023 13:39: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=@gmail.com header.s=20221208 header.b=ZUeU4ErQ; 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 D616E68C7A5; Fri, 1 Sep 2023 23:38:40 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 18E1768C6B7 for ; Fri, 1 Sep 2023 23:38:32 +0300 (EEST) Received: by mail-lj1-f179.google.com with SMTP id 38308e7fff4ca-2bceca8a41aso40067101fa.0 for ; Fri, 01 Sep 2023 13:38:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600711; x=1694205511; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=qX70GvrR83cVC1qnycAthXTmyKCKgAOaaeZzJi3LZps=; b=ZUeU4ErQWOgXx9IWjFd4CPz7THI9cLO+fKGOZqLcXxrx/V20aaswdX2LgIAkhoQcpU KNkLaFmhGlY/E0O0pAhAlPJmiGJnmrIR9S7Y1SFnnqgLV4udTozOOVRxkJUrpSw6Ys2U ECEdp6XkBIwrtkfiS1BEA6EKhYsRzyGseVhbWc5f6+1ZCN3dIm/13kDO/YSM1xX07hSv gniiNvGIkN/IPUuXK5m96mWFdnAUrPzXFLFIzB3pMjmm7oSfWgp56CaIr5IlOoYeGCLp aOXGoFAmq45yNpHVPlG6uNrjjWqRN54xa/AR40fp6ceypBTkqeWexF5/aau9nS4XtMtE CopA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600711; x=1694205511; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qX70GvrR83cVC1qnycAthXTmyKCKgAOaaeZzJi3LZps=; b=hdFBc7XHHhy32pd53svMrQ5p7gxGs0rltTONM7bOJndkTUvyPs4kzi50UkZepvFC+t C9IN3Vxx2WhPZVQmzSN7rbxJQh5s22K5hv3Evr1xCakgWpJV2wXoyP13zNJzKoLSlcFA +0n12DIHnKQcv0HwlLtgm7GsBGnD+56/lS5ZFnH86T0y1S952fT3U0Jo2K+rV7KcSlfR sttgyqDV3MipCxYAk7PKjVK3DenVpxCJCoND4meIzDnctKffRqeAePszxo98IqIo7YSf uGUYh9x0gDl1k2Uw+LzSbmXrmEOPp32uB0twcf1t4UX8vbyeU+upXekBT3314b+mpwnX jA4Q== X-Gm-Message-State: AOJu0Yx/ugZmTP0P3RA1bJRNR/1s3EMm7LDu+cl5Do6BZI+1CPvWEFG3 cCMgplV0Zpy4m216+wp6BcatPFjcaHOwdg== X-Received: by 2002:a2e:7207:0:b0:2bc:c490:10cf with SMTP id n7-20020a2e7207000000b002bcc49010cfmr2846815ljc.18.1693600711216; Fri, 01 Sep 2023 13:38:31 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:30 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:13 +0300 Message-ID: <20230901203828.275197-4-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 03/13] avutil/frame: add helper for uninitializing side data sets 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: Kc2EnkSl9nq2 --- libavutil/frame.c | 5 +++++ libavutil/frame.h | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/libavutil/frame.c b/libavutil/frame.c index 4b8481b756..b03f8d6c73 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -90,6 +90,11 @@ static void frame_side_data_wipe(AVFrame *frame) wipe_side_data(&frame->side_data, &frame->nb_side_data); } +void av_frame_side_data_set_uninit(AVFrameSideDataSet *set) +{ + wipe_side_data(&set->sd, &set->nb_sd); +} + AVFrame *av_frame_alloc(void) { AVFrame *frame = av_malloc(sizeof(*frame)); diff --git a/libavutil/frame.h b/libavutil/frame.h index 6155226c1d..dc87d38adc 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1057,6 +1057,14 @@ int av_frame_apply_cropping(AVFrame *frame, int flags); */ const char *av_frame_side_data_name(enum AVFrameSideDataType type); +/** + * Free all side data items and their contents, then zeroes out the + * struct values. + * + * @param set the set which should be uninitialized + */ +void av_frame_side_data_set_uninit(AVFrameSideDataSet *set); + /** * @} */ From patchwork Fri Sep 1 20:38:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43439 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578718pzb; Fri, 1 Sep 2023 13:39:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IETQhxpM2tkhYhQaj+h3sAvYtwOnAJ+Dl/I4l4vxdEyLfe3Q+rXFBppjObnwrNXwlYinkCn X-Received: by 2002:a17:906:30d9:b0:9a1:f96c:4baf with SMTP id b25-20020a17090630d900b009a1f96c4bafmr2078858ejb.5.1693600760369; Fri, 01 Sep 2023 13:39:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600760; cv=none; d=google.com; s=arc-20160816; b=WZZAehaIjmy/qzAXU52WCx+Ct9bXuQUUdEn2OsgNNCBfoBGYq9hV3dik7IGy+tmGMA kDpHG/13hKiNyp7c1gbBu7oUz8CGDnHhN9Azb+7EiUYmw5o2QIYU7UAmX/LjiRKKOOWM mFHZmvC638W4jZQcVD+ktrehH2G8Agp+Rgtpe3FmPRqIGcB6C/FmPpHM62z2L/lU8vAe 01bLsfzPiazvWOYUZpm4Z8ZFtvJ6NzsLbdJMdS6ZzABZpJrMT0dJL7eM0D7IE7RwqIB5 1o2pfsW7Q8WiFjbI5n4okL9VuNkm1AMjqIzKdzXyhrigRDngwZfv9AOXJ0DevovHq3LZ PbXQ== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=2iYrRG09PibBlbAZ9LW4HqZ4D3VvAvAss48Ugw+Smeo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=GyaPtRCbSQUvLdYCDd4H2plHoT1ZV6/OWiEg99VTWUNtWyLc461tykmYZln09OWmn2 uW3P3Ze41e2lPhg6oA5srHUWEL4MuYzg7+TsM743LrevD+gFXMWE11S7Z9njeu+E35BM bwEIEIhhxz6HAdvtYweXq22+EzjIhic3qU88Xzq6S3AocWbjXxLBG9ZdcyxuF+UAK/d9 7wf+ShH9xR85thWgLNGgnSV7hVh81Ys4rfFBub10rFT8xe4Cr3/ydyTX/YONk2XcDh/2 wROBZcCsdkEaouUcliGFCA7j5cTHJIuvGhZ1EbCjL1M1Ig+ab14uZZ/LzoJel982MuHG T4yQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=IFgsMvZ2; 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 rl25-20020a170907217900b00997c9f1bdf7si2695600ejb.407.2023.09.01.13.39.19; Fri, 01 Sep 2023 13:39:20 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=IFgsMvZ2; 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 CADA968C76C; Fri, 1 Sep 2023 23:38:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 94A7668C731 for ; Fri, 1 Sep 2023 23:38:32 +0300 (EEST) Received: by mail-lj1-f181.google.com with SMTP id 38308e7fff4ca-2bcc14ea414so41569561fa.0 for ; Fri, 01 Sep 2023 13:38:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600712; x=1694205512; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4l+4JqINwmw0tywYDIU4NN6FFosZ9InM+XuEwt65kkM=; b=IFgsMvZ2D/OpaZibSmVsqY9eCvyBY9uPp88ltrAUkhHuX+cw0JXGK3lUlivbHWnZSD QphTBbwfQi37tKtXaiU7pajzlkwWtqWCIEyHUqlFLzSwzBfsfFKcjdUUMMQ0l7NlNjgM enGMS+kBYRdpRzBbiV5te9kwWUV8s5yJigXPNIKy5ZNVyMTf0wujccz0F2z5muLw0rtQ pjJSYCALI1/EvZrZ2BgW1h6ZsPRIrMvtDn8ohazYOdvoF6P071YCE8XsxinRHsSQcAGs MzzfPNeA7BH5QXEoqsfjy6YAvdNlD4IKw7WKFw5ae9aERU3NvlYG0/H6ie86miDb/U2i h2OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600712; x=1694205512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4l+4JqINwmw0tywYDIU4NN6FFosZ9InM+XuEwt65kkM=; b=bFUdZdoF97LVDTLJPWQIWQvX5KQo/MPacHjV20+skL75KmzppkgX38pbkarJdW1l6f 7jtBR6DsbDusJif/vLq2gcglvyvK/WTbdyItGyu47u94lt5I2cffU8lM3f4F19eRp45k qy0GI5Yon87dOUV69YNDpxPx8qWgALIP8StKTQ/So9j5FU1/bveCNoEtjFHpTMmowrVL osdJpqhY6dBFgJxasdT3O+0rzk/bLdxoaDh14iULmfPIBg3gKOIgUm/GwhX3uzvT2XJO 0uSfVZ30s/wdw6fhd66rPeYRnrQxF/AdTrUla7Azol4nTHgpU+hTVk6DILS8IzCCtxeq 8yOA== X-Gm-Message-State: AOJu0YwnNNjCzRZYax3PlMzD12BqcUoMvLfoPUKZVoWdQO0JeCv1npCY xCTiW5LYhg01Xl5yjgeSlkk0BZnyDBb18A== X-Received: by 2002:a2e:6e10:0:b0:2bb:b528:87b1 with SMTP id j16-20020a2e6e10000000b002bbb52887b1mr2196508ljc.50.1693600711629; Fri, 01 Sep 2023 13:38:31 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:31 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:14 +0300 Message-ID: <20230901203828.275197-5-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 04/13] avutil/frame: split side_data_from_buf to base and AVFrame func 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: 3Fr4VTCm3zhT --- libavutil/frame.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index b03f8d6c73..9eff851d64 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -787,23 +787,22 @@ FF_ENABLE_DEPRECATION_WARNINGS return NULL; } -AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, - enum AVFrameSideDataType type, - AVBufferRef *buf) +static AVFrameSideData *add_side_data_to_set_from_buf(AVFrameSideDataSet *set, + enum AVFrameSideDataType type, + AVBufferRef *buf) { AVFrameSideData *ret, **tmp; if (!buf) return NULL; - if (frame->nb_side_data > INT_MAX / sizeof(*frame->side_data) - 1) + if (set->nb_sd > INT_MAX / sizeof(*set->sd) - 1) return NULL; - tmp = av_realloc(frame->side_data, - (frame->nb_side_data + 1) * sizeof(*frame->side_data)); + tmp = av_realloc(set->sd, (set->nb_sd + 1) * sizeof(*set->sd)); if (!tmp) return NULL; - frame->side_data = tmp; + set->sd = tmp; ret = av_mallocz(sizeof(*ret)); if (!ret) @@ -814,7 +813,23 @@ AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, ret->size = buf->size; ret->type = type; - frame->side_data[frame->nb_side_data++] = ret; + set->sd[set->nb_sd++] = ret; + + return ret; +} + +AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf) +{ + AVFrameSideDataSet set = { + .sd = frame->side_data, + .nb_sd = frame->nb_side_data, + }; + AVFrameSideData *ret = add_side_data_to_set_from_buf(&set, type, buf); + + frame->side_data = set.sd; + frame->nb_side_data = set.nb_sd; return ret; } From patchwork Fri Sep 1 20:38:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43440 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578789pzb; Fri, 1 Sep 2023 13:39:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGSV3x8pq6QYLYWIYHBm6IiLwvWXZU3Mo/nB85zZ5CFyAIpHYQ1/jsYkDKLHKAY9dhVJeDZ X-Received: by 2002:a19:690f:0:b0:500:bddc:56d5 with SMTP id e15-20020a19690f000000b00500bddc56d5mr2021317lfc.37.1693600768817; Fri, 01 Sep 2023 13:39:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600768; cv=none; d=google.com; s=arc-20160816; b=RoieH2ZgR71h/KMv6UhyORpi2uRi+/po4o2WXZs9zF/nHCqTenWR9r7kZxdswa/QQT dFuvnzjmMRP2JrZT0YYMMYFUJ0FaWQ5QXG69Hfyl55Rjl0v3JF8mPw6rzkSP8i7AeXbX 2p6xPlPJqHWRFQZkkAGa3Z8hJ/ZAG8iWmucxKVfYL+8HjiPwLuRxiBtBbhXrKRjFK5NO kWBz8EJs/cvbM5G2Yb3hv+7rZFt5mY3CiZoObVd/SWIA9pM5KiI0gdJdpftPC95NQ8sE L5/dzr25muMI26OTW3qdYWXqUxLD3MiK2wtRX4F14BRDNryQXBc5Ap50CcD1pXVKm+EI 4X7w== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=JcVKDMP/zJ3uCmFFKtzzRmx+uZ3Pau3m3bOsnXVbLI4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=hzgaVhAxmSuhfFrgHZU14Q0UFR6cThoXQixDAZJp6IOF5toN3TQF9vnIsKz5d2Jku0 IzjRDEww/90bL25ifry8ujoueZy0YRfSoTUWikdf8aOO7zqdllulf60mWKMMYfJjLVmd olmH9lhRmwuak9rAB5zZ74kje8HfhDEKL48xBnyn1VWnNgKyOqTU98rGi1Z/3Gv3LTZj ZEWB+iUXlNHsAGm3/XDEuBbU1+FuvXMzOh6LNkJGUjyJsaW3xKDtoteXmDvb7G5Hghco FE3KKyLrt9aCwmZ3FIvJl31BVLmj+NGInp3QDdiWZEmOW0jGqVs/N+k8g1gwaZ20Ca0C F8OQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=mO2oDw8J; 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 o20-20020aa7d3d4000000b00523409dcaabsi3231351edr.617.2023.09.01.13.39.28; Fri, 01 Sep 2023 13:39:28 -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=mO2oDw8J; 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 C176468C7AE; Fri, 1 Sep 2023 23:38:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f170.google.com (mail-lj1-f170.google.com [209.85.208.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E7BCF68C705 for ; Fri, 1 Sep 2023 23:38:32 +0300 (EEST) Received: by mail-lj1-f170.google.com with SMTP id 38308e7fff4ca-2bb9a063f26so42420751fa.2 for ; Fri, 01 Sep 2023 13:38:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600712; x=1694205512; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=wRgSt3iB2xo4i7BvrW+oUQgwY6uZjn9t/OXUoXPUdsA=; b=mO2oDw8J8PjeuPfuqiZ1Bp3QA2sOg9trQkK1oCGB9waLQgqeOfhYFAjKtwJr3sPtiD GQYSWDTrEE2m/tS2YTIOzdB92rPtcCS2BDMAnnoekSo3rPYY1km/tVaNDq0WnsAuo86s t+kq6VA+JWzqsiUS7rPXaEHrOVJUVBoQalgRJRxFLnoqFS2IQU0WY9Cr50rnuM+yRwrf FjYho73WjvA2fIFY+E84DMgGFACDAhfUv2kaxTBpKvL9mrzQKmAZjrc7n4UDKgd/rcTf Ix9lqd2o4V0e9aagsROHpwAppXHhGq/NfOG8hTXTN79akq5Kirgxk89N/AngyaGjIHsm 3zbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600712; x=1694205512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wRgSt3iB2xo4i7BvrW+oUQgwY6uZjn9t/OXUoXPUdsA=; b=j3xR+Aw0Ukfm7a3lwKV/XN9WU8oPJkUb6r0khaas53uunGHosIDAK/ovyFC7ng8EuH UJo4+dzCTPVXdxkmWZOJjdeCqyllu2/q2/rYsRGdwCAnAq5ngUZYWZyYghqDTJ9MrgSO NfEnWJWUI0D0OlMUUTzbYvk8j1jVDLmnCcnHvcHBrZAewgPb895yXhWEmd5sSIs7n3MA ZsRGgizc0sRpSP2FA20ENDfv22UJIyJkxqX9/oF1uLC4aPbStkouaVCF4wLOoYILz1n4 1E88/YIM5qQpch5h/JEteaDWxrUa5/FmfzqFFkuW+D+lufb1C2u/VAdSBKWpn8R7Sor5 ABTA== X-Gm-Message-State: AOJu0YyA6yVfpiwj9VvGLcjlF+hnCazVG0UOLSzF0pwSUcjm63H/oxlP 6WXQpI3nh2c6YYL9jR9S72Bx4g4bRktb4Q== X-Received: by 2002:a2e:9194:0:b0:2bd:2240:8376 with SMTP id f20-20020a2e9194000000b002bd22408376mr2628789ljg.14.1693600712076; Fri, 01 Sep 2023 13:38:32 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:31 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:15 +0300 Message-ID: <20230901203828.275197-6-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 05/13] avutil/frame: split side data removal out to non-AVFrame function 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: yHGIQTCtO0K4 This will make it possible to reuse logic in further commits. --- libavutil/frame.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index 9eff851d64..0b1a8e5244 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -95,6 +95,21 @@ void av_frame_side_data_set_uninit(AVFrameSideDataSet *set) wipe_side_data(&set->sd, &set->nb_sd); } +static void remove_side_data(AVFrameSideData ***sd, int *nb_side_data, + const enum AVFrameSideDataType type) +{ + for (int i = *nb_side_data - 1; i >= 0; i--) { + AVFrameSideData *entry = ((*sd)[i]); + if (entry->type != type) + continue; + + free_side_data(&entry); + + ((*sd)[i]) = ((*sd)[*nb_side_data - 1]); + (*nb_side_data)--; + } +} + AVFrame *av_frame_alloc(void) { AVFrame *frame = av_malloc(sizeof(*frame)); @@ -945,14 +960,7 @@ FF_ENABLE_DEPRECATION_WARNINGS void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type) { - for (int i = frame->nb_side_data - 1; i >= 0; i--) { - AVFrameSideData *sd = frame->side_data[i]; - if (sd->type == type) { - free_side_data(&frame->side_data[i]); - frame->side_data[i] = frame->side_data[frame->nb_side_data - 1]; - frame->nb_side_data--; - } - } + remove_side_data(&frame->side_data, &frame->nb_side_data, type); } const char *av_frame_side_data_name(enum AVFrameSideDataType type) From patchwork Fri Sep 1 20:38:16 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: 43441 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578867pzb; Fri, 1 Sep 2023 13:39:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE75I6bIiFLDxnqRQ6X3dvBGmiZ3mr8bhS+ughyekGjre0eMcxM5pQfMdLt2jnS1Off8d4R X-Received: by 2002:a17:906:53:b0:9a1:649b:46f9 with SMTP id 19-20020a170906005300b009a1649b46f9mr2583946ejg.74.1693600778198; Fri, 01 Sep 2023 13:39:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600778; cv=none; d=google.com; s=arc-20160816; b=WiqCOEhBepM1a+J1WYw/Uy6S/WAiaUJETcoGJarutUtlLXURZQ3vMd8tBtaEfTlRf3 ZO1A52ICO5VllBexrotvihHszSk/hWqDo1RYoBmKxtKHx1xRCx9n49hbqW/+zatwwBYS HagVouekuLmFEEQ7z+vKw0tP/jsA46v7jt7WxHkkNTO66WXZ1IcvXNx7w7HOqU17E9FG 140usO15Le4vWLBzO2wzmpwGplvojbx3five5QQrmrGwO7/kN2o+ndGPet/9QGPinbcp TWJABH88eCABXdZLPq4UjyURm4oJoabGfKOISWhUEhbVOBpGbM8t7Fm1x3j6mIeRyxKC mC5g== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=liTSvswBrPI/gEh9HFSBj/p096QJka5kXQGTWlkFLkI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=s0yBuWXTAx7VynDwC5vrbvp1Cco0TqRE5p3G1VmggmZpgBaOSZpLYd2HgOixf7xTkv vj907kd7xANy3mTUDZlDRzBUoSxipVuILGTvayx7N/Ibty/eMIM0Intc3+VYcaiP1SU/ DUrSz4B49snWvkSerzyTrMZKJUiRaGyReMXeAtvyooKOw0gJ89m1Wf73/0CWHF3loY6n dJ8XcFpC2nMkW1ZDeu7vjHDQ+9aYwyect/hQf1zcFL9e4bYHee3IaLtv1E5X+6cW0kia bbkCics8s9Myv/EhWgaSFB5aRc5Iz/m4T35eyW60ZdytP0KalO071q3txli0NtyEzRof uruQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=HQTkyflg; 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 ti8-20020a170907c20800b00991df86ac0fsi3010802ejc.290.2023.09.01.13.39.37; Fri, 01 Sep 2023 13:39:38 -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=HQTkyflg; 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 C6D3268C7CA; Fri, 1 Sep 2023 23:38:43 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7C99968C743 for ; Fri, 1 Sep 2023 23:38:33 +0300 (EEST) Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-2bcbfb3705dso41200511fa.1 for ; Fri, 01 Sep 2023 13:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600713; x=1694205513; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=x4UYZZcAkf1ZY5qzjG+700nlJDAWr7q0cKTnViAK6ZI=; b=HQTkyflgx9UvOrACQQ+5j58die5RQOc62cprFeMLr+YAmJ55xvd+6mKU53cyO4FFDw vnQjvdiPgR2N9jxo4RhpcKlNqAfD3bdZydOUm88uffTudKjjlyY4wGvrLVFV3m1s6Hn3 DB8m4z7LQYPFbUIDLaNxDq+iznn1lvFUOA/guKNZEAnKg3htNU772KVe1rwUPX6ie7nF K0BDxmZP2yi972d6fTE+EU2w6nv3dgWz4VjTQ68O6SH46UNGDNtHoR1MBouugvYE0vGk OMSun5axWITpI/LdbaFix/abUslW3GocEPOTRJ+Bs6+/CMpAiQnA3yecG5cPKpadVAdw LeqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600713; x=1694205513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=x4UYZZcAkf1ZY5qzjG+700nlJDAWr7q0cKTnViAK6ZI=; b=jYl6n9McB6Di0O1BzeodeDpi8PpV5wZJXlTf767kVHGn4peC+b7zmw1usIGnvV3H+w WwgqIt6GyRO01sORN3oagcD4ICTxT6FMoBLLByugli/xeJL3HIwf60p2eQGMDLZOtUjM RRi8f0vlSpLMl9HjGDSkNH4MQfgLZnh+tMCDXx0VMqix+ReKHj4mD6s/47DE/bxgAnLM TYvSiuhKtXnM17oupQfEiZkYA0bpqwFgKUool4Wajk4Tv425gX1ZLLcVY86zTg4jlgH8 cE6fqV+KHMXSrRAN7oDSKQJ9RNkftZFMe6ETdJveX/dhHaWTROK6rKKZ6yeCI4s2CiNM R+Gg== X-Gm-Message-State: AOJu0YzYcymsEoYfVPjHljPCYaEdBT4X3HlyoDVXc4z8ZCGWJanC/xqY oExdmAFycxIgkhmW4HrN5McAZMMG7I/mdA== X-Received: by 2002:a05:651c:210:b0:2b9:5fd2:763a with SMTP id y16-20020a05651c021000b002b95fd2763amr2448708ljn.35.1693600712513; Fri, 01 Sep 2023 13:38:32 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:32 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:16 +0300 Message-ID: <20230901203828.275197-7-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 06/13] avutil/frame: add helper for adding side data to set 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: fRbLufNgOc4b Additionally, add an API test to check that the no-duplicates addition works after duplicates have been inserted. --- libavutil/Makefile | 1 + libavutil/frame.c | 18 ++++++ libavutil/frame.h | 20 +++++++ libavutil/tests/side_data_set.c | 97 +++++++++++++++++++++++++++++++++ tests/fate/libavutil.mak | 4 ++ tests/ref/fate/side_data_set | 14 +++++ 6 files changed, 154 insertions(+) create mode 100644 libavutil/tests/side_data_set.c create mode 100644 tests/ref/fate/side_data_set diff --git a/libavutil/Makefile b/libavutil/Makefile index 7828c94dc5..339eaf3539 100644 --- a/libavutil/Makefile +++ b/libavutil/Makefile @@ -264,6 +264,7 @@ TESTPROGS = adler32 \ ripemd \ sha \ sha512 \ + side_data_set \ softfloat \ tree \ twofish \ diff --git a/libavutil/frame.c b/libavutil/frame.c index 0b1a8e5244..f64ddb3645 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -861,6 +861,24 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, return ret; } +AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, + enum AVFrameSideDataType type, + size_t size, + unsigned int flags) +{ + AVBufferRef *buf = av_buffer_alloc(size); + AVFrameSideData *ret = NULL; + + if (flags & AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES) + remove_side_data(&set->sd, &set->nb_sd, type); + + ret = add_side_data_to_set_from_buf(set, type, buf); + if (!ret) + av_buffer_unref(&buf); + + return ret; +} + AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type) { diff --git a/libavutil/frame.h b/libavutil/frame.h index dc87d38adc..5aed08b796 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1065,6 +1065,26 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type); */ void av_frame_side_data_set_uninit(AVFrameSideDataSet *set); +#define AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES (1 << 0) + +/** + * Add a new side data entry to a set. + * + * @param set a set to which the side data should be added + * @param type type of the added side data + * @param size size of the side data + * @param flags Some combination of AV_FRAME_SIDE_DATA_SET_FLAG_* flags, or 0. + * + * @return newly added side data on success, NULL on error. In case of + * AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES being set, entries + * of matching AVFrameSideDataType will be removed before the + * addition is attempted. + */ +AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, + enum AVFrameSideDataType type, + size_t size, + unsigned int flags); + /** * @} */ diff --git a/libavutil/tests/side_data_set.c b/libavutil/tests/side_data_set.c new file mode 100644 index 0000000000..056d79f655 --- /dev/null +++ b/libavutil/tests/side_data_set.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2023 Jan Ekström + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include "libavutil/frame.c" +#include "libavutil/mastering_display_metadata.h" + +static void print_clls(const AVFrameSideDataSet set) +{ + for (int i = 0; i < set.nb_sd; i++) { + AVFrameSideData *sd = set.sd[i]; + + printf("sd %d, %s", + i, av_frame_side_data_name(sd->type)); + + if (sd->type != AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) { + putchar('\n'); + continue; + } + + printf(": MaxCLL: %u\n", + ((AVContentLightMetadata *)sd->data)->MaxCLL); + } +} + +int main(void) +{ + AVFrameSideDataSet set = { 0 }; + + av_assert0( + av_frame_side_data_set_new_item( + &set, AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, 0, 0)); + + // test entries in the middle + for (int value = 1; value < 4; value++) { + AVFrameSideData *sd = av_frame_side_data_set_new_item( + &set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, + sizeof(AVContentLightMetadata), 0); + + av_assert0(sd); + + ((AVContentLightMetadata *)sd->data)->MaxCLL = value; + } + + av_assert0( + av_frame_side_data_set_new_item( + &set, AV_FRAME_DATA_SPHERICAL, 0, 0)); + + // test entries at the end + for (int value = 1; value < 4; value++) { + AVFrameSideData *sd = av_frame_side_data_set_new_item( + &set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, + sizeof(AVContentLightMetadata), 0); + + av_assert0(sd); + + ((AVContentLightMetadata *)sd->data)->MaxCLL = value + 3; + } + + puts("Initial addition results with duplicates:"); + print_clls(set); + + { + AVFrameSideData *sd = av_frame_side_data_set_new_item( + &set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, + sizeof(AVContentLightMetadata), + AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES); + + av_assert0(sd); + + ((AVContentLightMetadata *)sd->data)->MaxCLL = 1337; + } + + puts("\nFinal state after a single 'no-duplicates' addition:"); + print_clls(set); + + av_frame_side_data_set_uninit(&set); + + return 0; +} diff --git a/tests/fate/libavutil.mak b/tests/fate/libavutil.mak index 80153f4395..6864ea9c03 100644 --- a/tests/fate/libavutil.mak +++ b/tests/fate/libavutil.mak @@ -148,6 +148,10 @@ FATE_LIBAVUTIL += fate-sha512 fate-sha512: libavutil/tests/sha512$(EXESUF) fate-sha512: CMD = run libavutil/tests/sha512$(EXESUF) +FATE_LIBAVUTIL += fate-side_data_set +fate-side_data_set: libavutil/tests/side_data_set$(EXESUF) +fate-side_data_set: CMD = run libavutil/tests/side_data_set$(EXESUF) + FATE_LIBAVUTIL += fate-tree fate-tree: libavutil/tests/tree$(EXESUF) fate-tree: CMD = run libavutil/tests/tree$(EXESUF) diff --git a/tests/ref/fate/side_data_set b/tests/ref/fate/side_data_set new file mode 100644 index 0000000000..7d8c684d8f --- /dev/null +++ b/tests/ref/fate/side_data_set @@ -0,0 +1,14 @@ +Initial addition results with duplicates: +sd 0, Ambient viewing environment +sd 1, Content light level metadata: MaxCLL: 1 +sd 2, Content light level metadata: MaxCLL: 2 +sd 3, Content light level metadata: MaxCLL: 3 +sd 4, Spherical Mapping +sd 5, Content light level metadata: MaxCLL: 4 +sd 6, Content light level metadata: MaxCLL: 5 +sd 7, Content light level metadata: MaxCLL: 6 + +Final state after a single 'no-duplicates' addition: +sd 0, Ambient viewing environment +sd 1, Spherical Mapping +sd 2, Content light level metadata: MaxCLL: 1337 From patchwork Fri Sep 1 20:38:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43442 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp578940pzb; Fri, 1 Sep 2023 13:39:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IESavqU8U7C8/e2NZ82YAjUnvE3Ly2BpkJiHvuGx7rSOGadqzG9IVq6a6m0A16Spra9qEtS X-Received: by 2002:a05:6512:348c:b0:4ff:87f2:2236 with SMTP id v12-20020a056512348c00b004ff87f22236mr2216602lfr.37.1693600786791; Fri, 01 Sep 2023 13:39:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600786; cv=none; d=google.com; s=arc-20160816; b=GKNXFo/ugj7kNvaUb8qlXnk/BrxapwRgfxuNVuPYJ/N5vAMpNjhIjWCbAvwpm6vVTj 8F0wJtZfSNeVY0yvrjwPmYVKmyGJJfiozTgBtkj4udvWDSqRGC2wPTucuJ4A1EDvf+r0 q2ACiRhJwJ22c3vmbJ+3Uxd8lusXGzmGSUyuGBpc1Q+PUyZ0Z+UqLTBDmuwV8GwUfP4z qahgK4qL34FwHxacDCxTTdvI8mJJiKao1ibtgTeFHHMxF7wOd4yBl2g0XskrXe0LtFMu toFw9E5z3McWl2YrC/wAxC4APg/JItZKLnwMJuk152CrSxtkvPif0lRVhESr1mfIaCBS ngmw== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=dGllFANDVixXVa/TRX5+e6wDtW2xEu7Zn1uaZ7hXQhQ=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=UzifWYGuttVf373ZDmcFFlrB4YnhCY+/EpeC2Wv4VufK4+s2MQb/PbvjmzwkBAJpn8 pVpYSpqB73PsW9Ss9WviUkKdpyykV6aANU2/u8amROcWpKQpos4Dpyn00m2EXHjOIgpb Ry9c0tDFfMnMa1gnfXiBpKdOyk7XHepGtUJPKGtrJyNdowhbcyYBvqeTltLrbcCI9vfH 9Q6GG3VBfPHjLTin0qafWO9vsxpKlmBdaFtWWa6Uf9R3H+zwq8GfxymTrbXBBG9N3lSe eV/88jeZENMtSioBUErqyJ4O9Cx/sC46qALXdgowvvw/SHwDvrKkNutw/cjYmZ+aVmic h7BQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=FfHzR3Wc; 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 w10-20020aa7dcca000000b00527238b5c7csi3127550edu.510.2023.09.01.13.39.46; Fri, 01 Sep 2023 13:39:46 -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=FfHzR3Wc; 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 E3AE468C7E1; Fri, 1 Sep 2023 23:38:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8D0B68C759 for ; Fri, 1 Sep 2023 23:38:33 +0300 (EEST) Received: by mail-lj1-f177.google.com with SMTP id 38308e7fff4ca-2b703a0453fso41151731fa.3 for ; Fri, 01 Sep 2023 13:38:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600713; x=1694205513; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=LJPm6LG4AOUJ7L6gjlRxq4ydLTc6ptQh6sXOCqqoYcY=; b=FfHzR3Wcykq76UnSHZMcOxSDH3JHgtBZXkp5ouzuEGms6BvKkzdiIHbWbRSGOAT/hr pQsL2HU775XwzWvq5ouJMeeExjKzSn0/BReCKdQiKSd5lzy4akZQ3cPvNiQnBU7pFROw aI3E+sq7X62ksgj4UFkfqwr1uoMR1M06AtEli2G+vPvJRgBMv4RdlCkQFuehFbAnSIi6 vAAU8N8KqOJbqEDgCo0JGl23NcbC0IesFFbqyB8HvwYUeN72o/gkygjL76Ey0OZskerY QiSour+ITR42HimhtpYxXcMVrNLWTLwX/tiG8NVLooksstK+CYFTtj+0ZfyNipuacyIQ gxUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600713; x=1694205513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LJPm6LG4AOUJ7L6gjlRxq4ydLTc6ptQh6sXOCqqoYcY=; b=CcmX35SP7O2EVnTDWGfIEP4cGggjnDXoosz9XmRzYlSFO8b+pUrc1zXsL9HRlF7KTN 0hErnzNg5R1OlkFL7HRX5YV3ggzdm0hSpdGXWZ7UD+P7DBxGUQS6UerRacIBYsyyAERi HdGo/XITS9PTwJgAzflk0353dpTF4don6a1dP0lnNbuTUwMIdwUUnU5KVJXNOde4RkR+ eL6wdLeRxKs+qYS4Zby/Nvt5Wi9qtVcjJ2udk2yAfW1PeRnfpuhJY5e/lFumgFSrvKeU TfEz9qo8SpMGPfE+6L6SgEl+spPbrsLfJaPSzq5O2ulZ82bdgmU+Z3h31QA7rNnFTA1y LSSQ== X-Gm-Message-State: AOJu0YycRVS6IWZMfau7BJv+ASuMS9RGRg4EKmGx/KvW3yhMR8nVgE+X 6nNAsMHzoGJFyU0n8t4DuOYCYGStTr4lnw== X-Received: by 2002:a2e:9086:0:b0:2bc:d7cb:8283 with SMTP id l6-20020a2e9086000000b002bcd7cb8283mr2625784ljg.40.1693600712946; Fri, 01 Sep 2023 13:38:32 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:32 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:17 +0300 Message-ID: <20230901203828.275197-8-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 07/13] avutil/frame: add helper for getting side data from set 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: Ukx+jkBS34o4 --- libavutil/frame.c | 22 +++++++++++++++++----- libavutil/frame.h | 12 ++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index f64ddb3645..5f74e0172b 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -879,16 +879,28 @@ AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, return ret; } -AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, - enum AVFrameSideDataType type) +AVFrameSideData *av_frame_side_data_set_get_item(const AVFrameSideDataSet set, + enum AVFrameSideDataType type) { - for (int i = 0; i < frame->nb_side_data; i++) { - if (frame->side_data[i]->type == type) - return frame->side_data[i]; + for (int i = 0; i < set.nb_sd; i++) { + if (set.sd[i]->type == type) + return set.sd[i]; } return NULL; } +AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, + enum AVFrameSideDataType type) +{ + return av_frame_side_data_set_get_item( + (const AVFrameSideDataSet){ + .sd = frame->side_data, + .nb_sd = frame->nb_side_data + }, + type + ); +} + static int frame_copy_video(AVFrame *dst, const AVFrame *src) { const uint8_t *src_data[4]; diff --git a/libavutil/frame.h b/libavutil/frame.h index 5aed08b796..8ecdf82f33 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1085,6 +1085,18 @@ AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, size_t size, unsigned int flags); +/** + * Get a side data entry of a specific type from a set. + * + * @param set the set from which side data should be queried from + * @param type type of side data to be queried + * + * @return a pointer to the side data of a given type on success, NULL if there + * is no side data with such type in this set. + */ +AVFrameSideData *av_frame_side_data_set_get_item(const AVFrameSideDataSet set, + enum AVFrameSideDataType type); + /** * @} */ From patchwork Fri Sep 1 20:38:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43443 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579004pzb; Fri, 1 Sep 2023 13:39:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEKsNod1PGl/Eesp52n1TSX2JMNwh83A/aV8OlycQQ27ReU1DqfQ1cGR1nYpaBYcTAAUYde X-Received: by 2002:a17:906:30d9:b0:9a1:f96c:4baf with SMTP id b25-20020a17090630d900b009a1f96c4bafmr2079471ejb.5.1693600795768; Fri, 01 Sep 2023 13:39:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600795; cv=none; d=google.com; s=arc-20160816; b=CCRdeuauTEGrRR7WmCnc622pasAOqXS6ZYBBwZYdrS9Qa5gsOBuV5W8JyKp+atVQPs Yfxupc8D2n67R3dbjN82ev7t3YPEHBKi23G86tqLQd01XJJH/MBLpZ+rFszsVTDXeGGQ DB5ytNjtvegWk1QyVakuBKwyU1woF+oN8WvVO3+WAYL1cIHyuaym60/KlQygYlptBTAO wSisrezdC3OYLJthXKsYyWHhXd4AbpwOqUBtCprjGsu357d0/JP+f/4qceFmQGdZX1Vk JD9ATggzKP5SSuPusZzJ9rK0IUN0depgLIqG0000Z3StxX+e+Vqt9a8XSQjSaZoMpItq LvTw== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=FHPX4Z63NffYRMqhCE+dbb1Yr0xotuFM1aRlW+iGkw0=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=MtFMM1PTZHZu2sBRGp1Fkgo6p0EFAEEDHCEmUDhUbOi8gaMddi4EXTjoW/iDLvn/Ye x175cEOKNq/rt0bEKl+AiGHGIJ+ZI1xOZOFcMh28I5zj2pdM+roWDI/BJJGCG1aNkSrX cp7+jDIuITL8v4A5x8x8+1OKgtixUA3pgliVcEthBQ22D8rMqVBkXCM6ho9iWmrq0kQv T82IAJV0HzWByzyWRmhu7+gaqB3aYpyvypSX2x7my4Z6amR65XrdNhYbiSU/tPoOAxJy mmLjzrwLwX1EOmPHod22u4APN5hEWRPz6fhBYzMq/pdNirek6Hmqc+Y5sXSWjTGJmsv2 tpZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=ctNUCCMQ; 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 f9-20020a1709062c4900b00992f45c9350si2846018ejh.1018.2023.09.01.13.39.55; Fri, 01 Sep 2023 13:39:55 -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=ctNUCCMQ; 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 F01F068C7F6; Fri, 1 Sep 2023 23:38:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A26268C717 for ; Fri, 1 Sep 2023 23:38:34 +0300 (EEST) Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2bcc14ea414so41569811fa.0 for ; Fri, 01 Sep 2023 13:38:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600713; x=1694205513; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Pl9fn19vRJwoPm3d7pSncDTPrtwww01HG7nGRkiF9jg=; b=ctNUCCMQ3mzHImEY5K8MQrhaZacFx67+gmAkSl2KV7Ml4a8P4ZxUWz5YM7lxvYpGTg 3/31r6VbzV1flv9X/hEzYnwlYF/wjoDXJUjuR0aeuyG+N1qFoNjPTns1KK5QXqZhA0nP RGHvSUPjAPr4XfOoEqAO2Uo6OVXP75ZoU1+75ZTET7zyhf0Gu+zY95WnycON8w3grcF6 reWjMfa5of4eLo/pJzj50Jruww8Rqzf37SYAyVU0qlAHMjWjJzxOXqLvBJrCNJmunbQU pTlVUyR+HMxP1z4wHn8pCJm2QbPG1akZv2RR712Leiav4XFyFwYtFUYsYjLevKAURSv9 GJzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600713; x=1694205513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Pl9fn19vRJwoPm3d7pSncDTPrtwww01HG7nGRkiF9jg=; b=ieo+L7FiBQEyFsa1H+P92WWFF4uiHVF9lyiZMw/qdgTL7TPwgY3pe281kxVzRly5Ug yoHuMfdF5gTAsi2h7Ux494419xCCcTydgIt2s65hUVkBGB+NYH2TpfNLQOtlG/PdRZ8I LDwSsh44gWl7pHsq0l2k/2M5nrhiiJP5Ydtvc+q39eKekVUJo/uLftYd3X5VZddfiZns vI2CrTPLpzjU5boRAlP+JIZLxKJZQFrYnuQsE2aqnbJkKTy4yfV17bBPzOFndteA+2zI ZT5Q9CGd9olDFCP/F8eP+97OmBn8925qYGgIwOk1ZbGXBV7emTvxkIKXlDIortB18++Q rfNg== X-Gm-Message-State: AOJu0YzrqEXqhUpD+tIHFJn9xwkrYFYaQKnVuhX2g7tzO4TU10oGoPZS A2UT+ei7Nl4sOQUOQrgvri9H+2CfMtnFHg== X-Received: by 2002:a2e:7207:0:b0:2b6:9fdf:d8f4 with SMTP id n7-20020a2e7207000000b002b69fdfd8f4mr2497445ljc.29.1693600713386; Fri, 01 Sep 2023 13:38:33 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:33 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:18 +0300 Message-ID: <20230901203828.275197-9-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 08/13] avutil/frame: add helper for extending a set of 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: jTWuLOTHVf1q Additionally, extend the side data set FATE test to check for the invalid use case of extending a set by itself. --- libavutil/frame.c | 32 ++++++++++++++++++++++++++++++++ libavutil/frame.h | 15 +++++++++++++++ libavutil/tests/side_data_set.c | 16 ++++++++++++++++ tests/ref/fate/side_data_set | 7 +++++++ 4 files changed, 70 insertions(+) diff --git a/libavutil/frame.c b/libavutil/frame.c index 5f74e0172b..898c749631 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -879,6 +879,38 @@ AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, return ret; } +int av_frame_side_data_set_extend(AVFrameSideDataSet *dst, + const AVFrameSideDataSet src, + unsigned int flags) +{ + if (src.nb_sd > 0 && src.nb_sd == dst->nb_sd && + src.sd == dst->sd) + return AVERROR(EINVAL); + + for (int i = 0; i < src.nb_sd; i++) { + const AVFrameSideData *sd_src = src.sd[i]; + AVBufferRef *buf = av_buffer_ref(sd_src->buf); + AVFrameSideData *sd_dst = + add_side_data_to_set_from_buf(dst, sd_src->type, buf); + if (!sd_dst) { + av_buffer_unref(&buf); + av_frame_side_data_set_uninit(dst); + return AVERROR(ENOMEM); + } + + { + int ret = av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); + if (ret < 0) { + av_frame_side_data_set_uninit(dst); + return ret; + } + } + + } + + return 0; +} + AVFrameSideData *av_frame_side_data_set_get_item(const AVFrameSideDataSet set, enum AVFrameSideDataType type) { diff --git a/libavutil/frame.h b/libavutil/frame.h index 8ecdf82f33..e16941c5a5 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -1085,6 +1085,21 @@ AVFrameSideData *av_frame_side_data_set_new_item(AVFrameSideDataSet *set, size_t size, unsigned int flags); +/** + * Add multiple side data entries to a set in one go. + * + * @param dst a set to which the side data should be added + * @param src a set from which the side data should be copied from + * @param flags Some combination of AV_FRAME_SIDE_DATA_SET_FLAG_* flags, or 0. + * + * @return negative error code on failure, >=0 on success. + * + * @see av_frame_side_data_set_new_item regarding the flags. + */ +int av_frame_side_data_set_extend(AVFrameSideDataSet *dst, + const AVFrameSideDataSet src, + unsigned int flags); + /** * Get a side data entry of a specific type from a set. * diff --git a/libavutil/tests/side_data_set.c b/libavutil/tests/side_data_set.c index 056d79f655..0c9ceed962 100644 --- a/libavutil/tests/side_data_set.c +++ b/libavutil/tests/side_data_set.c @@ -91,6 +91,22 @@ int main(void) puts("\nFinal state after a single 'no-duplicates' addition:"); print_clls(set); + { + AVFrameSideDataSet dst_set = { 0 }; + av_assert0(av_frame_side_data_set_extend(&dst_set, set, 0) >= 0); + + puts("\nState of the copied set:"); + print_clls(dst_set); + + av_frame_side_data_set_uninit(&dst_set); + } + + { + int ret = av_frame_side_data_set_extend(&set, set, 0); + printf("\nResult of trying to extend a set by itself: %s\n", + av_err2str(ret)); + } + av_frame_side_data_set_uninit(&set); return 0; diff --git a/tests/ref/fate/side_data_set b/tests/ref/fate/side_data_set index 7d8c684d8f..3050b31014 100644 --- a/tests/ref/fate/side_data_set +++ b/tests/ref/fate/side_data_set @@ -12,3 +12,10 @@ Final state after a single 'no-duplicates' addition: sd 0, Ambient viewing environment sd 1, Spherical Mapping sd 2, Content light level metadata: MaxCLL: 1337 + +State of the copied set: +sd 0, Ambient viewing environment +sd 1, Spherical Mapping +sd 2, Content light level metadata: MaxCLL: 1337 + +Result of trying to extend a set by itself: Invalid argument From patchwork Fri Sep 1 20:38:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43444 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579066pzb; Fri, 1 Sep 2023 13:40:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFQ3rw8rlYimrywYAsuaOqIRGDrViNJAxEzsRcleouOX9ZKA9WlShr1ZPWqRhXVK/EVysKn X-Received: by 2002:aa7:c1c6:0:b0:52a:1d54:2534 with SMTP id d6-20020aa7c1c6000000b0052a1d542534mr2689847edp.25.1693600804505; Fri, 01 Sep 2023 13:40:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600804; cv=none; d=google.com; s=arc-20160816; b=eubFH+vl2UXTucJZC8x9mdwnfDrRAZyyDtqRrKmxu+HvVIAGAz4s3hp09KTOr2um7R ahXZkVpy2zBjQRiRiHIVqX0fspZcukDUWvJEeKGLkc/OI0twXp47F9pZ7hpXRuAb1HF1 zxb6G8nfcgpCN9CaYwn1n/CkmUIe+3dFIf7RQwF8oGpNFJMIkau5sg+GiqZ87n3xlJIm CPFpeAUJQJOgfnArkl4n80RH9Wii1QIfiPPxLvXx+ry1lZD7hwdPUnsPtjhT55Vwd2x9 L/nfXlXUNFK6G4WJB3EazI4N+/RwCwGy/zUdzig52X+gUzSoHNFuZSWdngMs7LjgrXCU q//Q== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=nfi+ycYQU05xYjY4yPY4ZJ6KKuGF8SfixNdOGtRG5wI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=wwT2EbS4JNW6ekWbe3d63PZmvkHEpdBqnmwRu7s4/uT5GWCdDPKrs9xZzS1XqcHqcG 0ygR+clLpys8h7Qo0qUHO+zAAj5woCe3Zsyfq5vcbwx67LKGMSElwgtpuoOkHhfLnaH4 6h1Lpee8DNY3/bqs/2jsJgmxPnFCD+JJzQFSWUZBdjlybcprmHSX4sd4GR1b926FQlGV 0NNvQ9iqFfy6GCcnuEf1A+BjjyhkIZQT4kZ7dJRakBrr0WZcJEuOF/YlQu/R/WyOdZ5q WnjDC2C/iefLTkdpI+goaWINTPF4Jo8ymlYpNdOspJCQh0L4SvCR+SVcMJy5V2fa58Eu M+hg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=lm4TjW+A; 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 w13-20020a50fa8d000000b005257593d3e3si3040530edr.308.2023.09.01.13.40.03; Fri, 01 Sep 2023 13:40:04 -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=lm4TjW+A; 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 1B9C068C7E2; Fri, 1 Sep 2023 23:38:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ACAAA68C580 for ; Fri, 1 Sep 2023 23:38:34 +0300 (EEST) Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-2b703a0453fso41151861fa.3 for ; Fri, 01 Sep 2023 13:38:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600714; x=1694205514; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JaXffTaWMiTiSKbt2QsX2cNs4fyq/bn9v3n4ZuA7fJ0=; b=lm4TjW+AERE9Kaxf5PyJJQcBsE8fHGSmoMmvODSSTIgz2n2hunp2ezZEfZtRe+G7Wv re8nRB1gk0kJyqpxucUXDFCxTGDcsklI7y9QRaD6C6NcSdxNv8oTG4NPVt+Isarpagwn 2pKS7czssQUsBu7amgq0o5vpooQ87dXd6N1b3eWnUdq2WlvQJUe8FJBXw7R+hXaTlrni QgBI2ZhXmkUMSh0KGCiZTQRy2/RTlIYerJS7/o8OWDOQpiDZAJLTP++6CRBuVpHIM7lX 2Om/Iboi5Dx1lflExPD1cuy1Qn58h1cen+mb9CBuVgWLy5lNLEtHE/mqdwhQH6WJ3FRz daKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600714; x=1694205514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JaXffTaWMiTiSKbt2QsX2cNs4fyq/bn9v3n4ZuA7fJ0=; b=BIfjgK5SQ3V2s44OGzzPdEPdkUx9wWwVDA8cGzl3cbMSKdMkOPDC1zIQv9NE9DZ+V1 6Jr+7e2oFhE5pCLRJ/m2vT5SIhWWP7VH+WAioH9hNtR7euIpVrzrjfhK6/dUwuAfXzLn YJzdgwdyvPeQsfmOAt59i9QnnSmmaaTGav7uHHHWeIjOrVhzz+CuKp6TY6/Wydl3+CQ2 1Hhiwj3wPI5/CgxK7euR6IzKN5UiVihHI4XuHO/CIW3NwpdWkqKtGcX8Dnmgk0aWbHem jQg4Qd/JDhrYWdA2Kzma7mHlcadG93oje3iSRCO8D8mneGccQU/w4I66dlLaBfG/PUpf fGKQ== X-Gm-Message-State: AOJu0YzwlnM3F9LXQFbkQUhE7Wc06QPlYgUB7lhns6SCR9vn0UCDN+Nu opJkiw9fv2E/Y1hP+7uiYTS2TFuhtLt2Rw== X-Received: by 2002:a2e:9c90:0:b0:2bd:16ed:517f with SMTP id x16-20020a2e9c90000000b002bd16ed517fmr2484818lji.4.1693600713826; Fri, 01 Sep 2023 13:38:33 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:33 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:19 +0300 Message-ID: <20230901203828.275197-10-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 09/13] avcodec: add side data set to AVCodecContext 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: 3qpDg++IZ/nE This allows configuring an encoder by using AVFrameSideData. --- libavcodec/avcodec.h | 7 +++++++ libavcodec/options.c | 1 + 2 files changed, 8 insertions(+) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 649411ac79..ce673a4e65 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -2100,6 +2100,13 @@ typedef struct AVCodecContext { * an error. */ int64_t frame_num; + + /** + * Set containing static side data, such as HDR10 CLL / MDCV structures. + * - encoding: set by user + * - decoding: unused + */ + AVFrameSideDataSet frame_sd_set; } AVCodecContext; /** diff --git a/libavcodec/options.c b/libavcodec/options.c index a9b35ee1c3..e42a29e834 100644 --- a/libavcodec/options.c +++ b/libavcodec/options.c @@ -180,6 +180,7 @@ void avcodec_free_context(AVCodecContext **pavctx) av_freep(&avctx->inter_matrix); av_freep(&avctx->rc_override); av_channel_layout_uninit(&avctx->ch_layout); + av_frame_side_data_set_uninit(&avctx->frame_sd_set); av_freep(pavctx); } From patchwork Fri Sep 1 20:38:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43445 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579152pzb; Fri, 1 Sep 2023 13:40:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHQkmQ3s9wENVtlKMdtX2gXDWclwpVT/HtaVDTuNYhkJ8OOjIJ7dXMMLNbyUXmaTNr/eVac X-Received: by 2002:aa7:d8cb:0:b0:523:2e23:a0bf with SMTP id k11-20020aa7d8cb000000b005232e23a0bfmr4566139eds.11.1693600812767; Fri, 01 Sep 2023 13:40:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600812; cv=none; d=google.com; s=arc-20160816; b=GGwv2IXyFheQHSaSMJ/mnSsYeGKzZQULo5/277c2vBJLnDgvbT82wrUvKVMEf7x08T mS6EJFSmYvcsKnlRRDMURGNf5ypkucyVfiDH0uIEslZKxdaxgkEDLNTNABHJINl3Rxrk W4LYhRsXvNqF7oBQjQoe6ch3t3ZHB/49sHhMo8otXvcaw2O3hO9riifoJ99P0zqu3Xhq dyOF62KPgS2IFyh5nFVWkWqJJ7uoELIdPdIdIEr7lq8Or9tE07AlaTRjAjQRo3x1FWgn aESDO3Zv+rB4HAzgXD3zxtWqZO2z47V6Qz3HDo1d2TN7QK07cmzM4+fgmqfdgwXR8q6s VKOA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=uu35xY+LTssmxj4MZoENdCpALwmJVBcNiUKqUs8PX/Y=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=pkH0v0Fz2ogzmfFQLfaDQIajwJA0xKzSryYWVKeWv/UFTrRrQBe2c8D0YNWb44x1MZ jZ4c0LkhAeyp67qVBd1gP0QhCpxn0AIoy07PQ1PFF2hLcYqKU0yutneWpg8qo7LUnwmt a3BfQl55IIV0r5/X45nZXlmhTAjTVvc9XyvzKF05h765cMGN4Un7N9CtyGRhclqmozel /joNHbJO8EA8nl+3ajCTIj8nMrZtnVLVj7ZYm56geOPLwAr6Qu1SLHnPcu1IwqT7aaTi A4LoGcVdY9mG0p90umdwQedIGhusdnF5aNAIAru0od8Qm+QraqbKwZh6nJ2pWPeDuGjc CS0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b="n47XXxv/"; 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 m21-20020a50ef15000000b00522278e9bc4si3043343eds.651.2023.09.01.13.40.12; Fri, 01 Sep 2023 13:40:12 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b="n47XXxv/"; 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 19D9168C810; Fri, 1 Sep 2023 23:38:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1919C68C795 for ; Fri, 1 Sep 2023 23:38:35 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2bcda0aaf47so4492501fa.1 for ; Fri, 01 Sep 2023 13:38:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600714; x=1694205514; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=GBPMA1CTjYmKFgB7zp2e2wquuKZfiQxo0Uv0jnvD0Fk=; b=n47XXxv/8JfnF5IoNtXUpvzJI6TVVq/hnU72N/LW8W6P0PJRTX5t/43SnDKTg0Xh8J AXdv962Vyq6i/pxzmDGfr3M9lU4H31wncd1AaCkpWddWF+Q8yQLAIbzQpeoQjHfscG7x VKoR+GCMOynnTJHayoIpjYStKCZSSEx8LeXAmhx4YSo7/9VOF6NVirSKcPVA2STvDB71 8MTz0kWqtLiCsjA4/Z1R7I1vc6apxRbwfqKHWd5xkCeZqDFqB2zceDInQpBqcuaiu/If IPTKaSu97q7cNzNCg3NDFS3E9NXRfb+rT0kQpkygy2LgpnrZ4Vt5SHiJ8Do9EauMt56M uicA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600714; x=1694205514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GBPMA1CTjYmKFgB7zp2e2wquuKZfiQxo0Uv0jnvD0Fk=; b=SBAOR5mYV+0hOn2KUNxefyrv0gKntrq0/AHoF9hjpLmbhGXeITc9pOZYA3oZ7cuXfM +Q+iSPwUVZCfEnPLrmLuRtMBJfNXaV8+qh5S6fthVzz0n9HoEvvB7Kvl8msNtSb+8Tfl Yq/RY3OrpU8yApsecAckSMhIY3H5fnrV2CoW+YAOPe6PG2q8T/xQypPP0s6OwFOS03oM GHdiHXY5A8MRtWV53bEY6/1ctC1NZ55uXDp3WdD80Zqk8jA0TYP2vYxtUkpDgdGjuOu6 bLAUJEqR2gatzb++HUyFxQrK2RevN6CGe0RXti44WRdXM7mlHBZuMlgYcEW1nfZuFsbl bhbw== X-Gm-Message-State: AOJu0YwEG4U42GogopxgZnhqHDHH3l8LQ0gl8dwKMCo+pnwv0QZt/Go6 Hf6k/XqvcGXaGPmMNtd9Iw7xopBtylTkHQ== X-Received: by 2002:a2e:8718:0:b0:2bc:bc6f:e296 with SMTP id m24-20020a2e8718000000b002bcbc6fe296mr1504679lji.13.1693600714230; Fri, 01 Sep 2023 13:38:34 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:33 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:20 +0300 Message-ID: <20230901203828.275197-11-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 10/13] ffmpeg: pass first video AVFrame's side data to encoder 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: jSPOnGNDdLVD This enables further configuration of output based on the results of input decoding and filtering in a similar manner as the color information. --- fftools/ffmpeg_enc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index f28884e50c..0d022700cf 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -356,6 +356,19 @@ int enc_open(OutputStream *ost, AVFrame *frame) enc_ctx->colorspace = frame->colorspace; enc_ctx->chroma_sample_location = frame->chroma_location; + ret = av_frame_side_data_set_extend( + &enc_ctx->frame_sd_set, + (const AVFrameSideDataSet){ + .sd = frame->side_data, + .nb_sd = frame->nb_side_data + }, + AV_FRAME_SIDE_DATA_SET_FLAG_NO_DUPLICATES); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "failed to configure video encoder: %s!\n", + av_err2str(ret)); + return ret; + } + // Field order: autodetection if (enc_ctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) && ost->top_field_first >= 0) From patchwork Fri Sep 1 20:38:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43446 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579225pzb; Fri, 1 Sep 2023 13:40:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGyzVOnen5Te6AfMGBc/TzMqP6nKkl5C9E2EoyIFkp9D4fs3zhSLVHLIx8d5Uf9dkMJHAP1 X-Received: by 2002:a2e:8093:0:b0:2ba:8127:a2c3 with SMTP id i19-20020a2e8093000000b002ba8127a2c3mr2482648ljg.34.1693600821440; Fri, 01 Sep 2023 13:40:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600821; cv=none; d=google.com; s=arc-20160816; b=LjeeVzk9ZKMXE/iYIqqBqy+UTo56WGFi8G5VA4UYhbQFs7f7dyiBK1Y/p/Qvy/kfms rDyAbbbTpLuRfxlSlBPNkTDdujaLhLDlcabOYOtppf8WailBaTMgZa+DjZS+ctyV20ek 6Pb5p8W0FD7CL5GoU8OPAcUyQpbOch9dN7TAOsuK1QQDf5D24w+t8UtnauqrVrDx9Wfs /p2mniHn6hnpgbGwvtAE3W6AvdydJjMGSoX8swW52ugpB9PMgu+NklgaBYqtrbZe30mL EHNqVTyzB9Csv1PCn2RcomlOUhTMymlEEYG/QI2+1SG17y7O+jC5hLi3ehDczf9XDX3v HxkA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=EkhJIsEKHMzHgDvEuqHwtHtssnaitGcjIVOeBsHH4j4=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=WGvfWX/hmRqGSOTFkSoXZ2efQGNyrZiH0rI9NLk14vJLl2rMeJFTmNAeCH0L3cFag0 Foz8VkX3R64+9G+YzBHsjcr/E3Ked3/g4MaAwmiPnDfyi2PlGiAvl6RifS+v8Kxn+fdi T8btSQ2q+gB958oh6SydNfmML7/YnZGYEMm0RFFpcdmpOOdCwE30cwOY0Uay0gg+07JY oWRX7BaqDHVj+r4n2Fmtz2CmNo8QqIuZwN/qOVeuMg6pIGN4fSCWmcvvyyFphr4HYBbE TAsAoAHbPaEmKHhP+6ziLRObuliUQq3vOBw3/aQxxREQapqPxWBOu3pe/PTFM+cW0Wbm xo0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=aMAH9bnK; 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 rv20-20020a17090710d400b009a59b604305si3065106ejb.406.2023.09.01.13.40.21; Fri, 01 Sep 2023 13:40: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=@gmail.com header.s=20221208 header.b=aMAH9bnK; 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 064B868C81A; Fri, 1 Sep 2023 23:38:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f173.google.com (mail-lj1-f173.google.com [209.85.208.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B65EF68C7A5 for ; Fri, 1 Sep 2023 23:38:35 +0300 (EEST) Received: by mail-lj1-f173.google.com with SMTP id 38308e7fff4ca-2bcd7a207f7so39698741fa.3 for ; Fri, 01 Sep 2023 13:38:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600715; x=1694205515; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=zN1Z0tqen+NGVbiHCNmuyAY6q6iGG1mRWkxABcn625U=; b=aMAH9bnKcLV+9yUAYULHfrTObef1//oyQXvy7e8HEme9VgE6fGpNC0/TwGS0e6s5zy HP0brPs2c8fhrRWgQRmBKqbqErBOxuNfDnGTcKu0qcF/FyEIbXBPU34K+qYnNHnjKOw1 3/n/eiVa2t8j+7cFQWStr++2MPojNTLodyjtKoY60M+88NG7q517GFmcB69R2/IjjSEB 68yRZEHsILH0XtzKEulvDXqj3KEbuU7W/eMQ5820pfeJNQ2ALiQ7NhVC/plqZ9ciEkQq AEIpjBhOPYZQXYyOSIpSfSr8HlYZ/VxoGAchUFhPC7O/7Al9rNU6fkf+oQ5GCAP8y+oM g9aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600715; x=1694205515; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zN1Z0tqen+NGVbiHCNmuyAY6q6iGG1mRWkxABcn625U=; b=gyDeON7vKF0WJmRGiJGVYhGQucvo7dSS3JVAGhu8NXzbufYHbrt1xfK7l6cZKQzHpa U2AdhRG6nFqLhwVE6sy8HVFZtj7tD4aYmOGUpTrSO6+9zdSNxrvW5WjWmoK9DVCrW7vm 9kXuCFJf4b3daQro8gnT5FysGmnNrbM4JoYXUn5xMwtPld9DEc2n/ZVYUG+vD7PB6uZi vlE/td24tfU1O3SJyfLvQ/ZwmOT4FlVZ/yUpactUFouGinZUZojOgVqahUbqF+BQ2M7K 8Gn0SuKOovDonokM50rxghEXIE2+lnngu7o27rfE72xnHMIKN0pVX9DrtGAaiC1Z1UvY FFRg== X-Gm-Message-State: AOJu0YyQ2Brj/glBWaox1Xe8lHLUYeLSFAjtyblUzSF1Kg/1DErXl10n 3JN8d28HcWb6bghBCvEgaKCg/qcut8lzCw== X-Received: by 2002:a2e:8093:0:b0:2ba:8127:a2c3 with SMTP id i19-20020a2e8093000000b002ba8127a2c3mr2480667ljg.34.1693600714692; Fri, 01 Sep 2023 13:38:34 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:34 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:21 +0300 Message-ID: <20230901203828.275197-12-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 11/13] avcodec/libsvtav1: add support for writing out CLL and MDCV 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: dksxNch4O4qv These two were added in 28e23d7f348c78d49a726c7469f9d4e38edec341 and 3558c1f2e97455e0b89edef31b9a72ab7fa30550 for version 0.9.0 of SVT-AV1, which is also our minimum requirement right now. In other words, no additional version limiting conditions seem to be required. Additionally, add a FATE test which verifies that pass-through of the MDCV/CLL side data is working during encoding. --- libavcodec/libsvtav1.c | 67 ++++++++++++++++++++++++++++++++++ tests/fate/enc_external.mak | 5 +++ tests/ref/fate/libsvtav1-hdr10 | 14 +++++++ 3 files changed, 86 insertions(+) create mode 100644 tests/ref/fate/libsvtav1-hdr10 diff --git a/libavcodec/libsvtav1.c b/libavcodec/libsvtav1.c index f2b73361d8..a56845c078 100644 --- a/libavcodec/libsvtav1.c +++ b/libavcodec/libsvtav1.c @@ -27,6 +27,8 @@ #include "libavutil/common.h" #include "libavutil/frame.h" #include "libavutil/imgutils.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/mastering_display_metadata.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/avassert.h" @@ -146,6 +148,69 @@ static int alloc_buffer(EbSvtAv1EncConfiguration *config, SvtContext *svt_enc) } +static void handle_mdcv(struct EbSvtAv1MasteringDisplayInfo *dst, + const AVMasteringDisplayMetadata *mdcv) +{ + if (mdcv->has_primaries) { + const struct EbSvtAv1ChromaPoints *const points[] = { + &dst->r, + &dst->g, + &dst->b, + }; + + for (int i = 0; i < 3; i++) { + const struct EbSvtAv1ChromaPoints *dst = points[i]; + const AVRational *src = mdcv->display_primaries[i]; + + AV_WB16(&dst->x, + av_rescale_q(1, src[0], (AVRational){ 1, (1 << 16) })); + AV_WB16(&dst->y, + av_rescale_q(1, src[1], (AVRational){ 1, (1 << 16) })); + } + + AV_WB16(&dst->white_point.x, + av_rescale_q(1, mdcv->white_point[0], + (AVRational){ 1, (1 << 16) })); + AV_WB16(&dst->white_point.y, + av_rescale_q(1, mdcv->white_point[1], + (AVRational){ 1, (1 << 16) })); + } + + if (mdcv->has_luminance) { + AV_WB32(&dst->max_luma, + av_rescale_q(1, mdcv->max_luminance, + (AVRational){ 1, (1 << 8) })); + AV_WB32(&dst->min_luma, + av_rescale_q(1, mdcv->min_luminance, + (AVRational){ 1, (1 << 14) })); + } +} + +static void handle_side_data(AVCodecContext *avctx, + EbSvtAv1EncConfiguration *param) +{ + const AVFrameSideDataSet set = avctx->frame_sd_set; + const AVFrameSideData *cll_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); + const AVFrameSideData *mdcv_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); + + if (cll_sd) { + const AVContentLightMetadata *cll = + (AVContentLightMetadata *)cll_sd->data; + + AV_WB16(¶m->content_light_level.max_cll, cll->MaxCLL); + AV_WB16(¶m->content_light_level.max_fall, cll->MaxFALL); + } + + if (mdcv_sd) { + handle_mdcv(¶m->mastering_display, + (AVMasteringDisplayMetadata *)mdcv_sd->data); + } +} + static int config_enc_params(EbSvtAv1EncConfiguration *param, AVCodecContext *avctx) { @@ -273,6 +338,8 @@ FF_ENABLE_DEPRECATION_WARNINGS /* 2 = IDR, closed GOP, 1 = CRA, open GOP */ param->intra_refresh_type = avctx->flags & AV_CODEC_FLAG_CLOSED_GOP ? 2 : 1; + handle_side_data(avctx, param); + #if SVT_AV1_CHECK_VERSION(0, 9, 1) while ((en = av_dict_get(svt_enc->svtav1_opts, "", en, AV_DICT_IGNORE_SUFFIX))) { EbErrorType ret = svt_av1_enc_parse_parameter(param, en->key, en->value); diff --git a/tests/fate/enc_external.mak b/tests/fate/enc_external.mak index 7eabebcc51..d787941c16 100644 --- a/tests/fate/enc_external.mak +++ b/tests/fate/enc_external.mak @@ -2,5 +2,10 @@ FATE_ENC_EXTERNAL-$(call ENCDEC, LIBX264 H264, MOV, H264_DEMUXER) += fate-libx26 fate-libx264-simple: CMD = enc_external $(TARGET_SAMPLES)/h264-conformance/BA1_Sony_D.jsv \ mp4 "-c:v libx264" "-show_entries frame=width,height,pix_fmt,pts,pkt_dts -of flat" +# test for SVT-AV1 MDCV and CLL passthrough during encoding +FATE_ENC_EXTERNAL-$(call ENCDEC, LIBSVTAV1 HEVC, MOV, HEVC_DEMUXER LIBDAV1D_DECODER) += fate-libsvtav1-hdr10 +fate-libsvtav1-hdr10: CMD = enc_external $(TARGET_SAMPLES)/hevc/hdr10_plus_h265_sample.hevc \ + mp4 "-c:v libsvtav1" "-show_frames -show_entries frame=side_data_list -of flat" + FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_ENC_EXTERNAL-yes) fate-enc-external: $(FATE_ENC_EXTERNAL-yes) diff --git a/tests/ref/fate/libsvtav1-hdr10 b/tests/ref/fate/libsvtav1-hdr10 new file mode 100644 index 0000000000..6f0d34903b --- /dev/null +++ b/tests/ref/fate/libsvtav1-hdr10 @@ -0,0 +1,14 @@ +frames.frame.0.side_data_list.side_data.0.side_data_type="Mastering display metadata" +frames.frame.0.side_data_list.side_data.0.red_x="17367/65536" +frames.frame.0.side_data_list.side_data.0.red_y="45220/65536" +frames.frame.0.side_data_list.side_data.0.green_x="9830/65536" +frames.frame.0.side_data_list.side_data.0.green_y="3932/65536" +frames.frame.0.side_data_list.side_data.0.blue_x="44564/65536" +frames.frame.0.side_data_list.side_data.0.blue_y="20972/65536" +frames.frame.0.side_data_list.side_data.0.white_point_x="20493/65536" +frames.frame.0.side_data_list.side_data.0.white_point_y="21561/65536" +frames.frame.0.side_data_list.side_data.0.min_luminance="82/16384" +frames.frame.0.side_data_list.side_data.0.max_luminance="256000/256" +frames.frame.0.side_data_list.side_data.1.side_data_type="Content light level metadata" +frames.frame.0.side_data_list.side_data.1.max_content=1000 +frames.frame.0.side_data_list.side_data.1.max_average=200 From patchwork Fri Sep 1 20:38:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43447 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579299pzb; Fri, 1 Sep 2023 13:40:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGG9HlpYLPv0JRjIGxjpcKe5xkutKxUxesovSQkvoSONwk0rLGkTtoJvu0YXHD3QPnXGF28 X-Received: by 2002:a05:6402:27d4:b0:527:1855:be59 with SMTP id c20-20020a05640227d400b005271855be59mr8426184ede.3.1693600830021; Fri, 01 Sep 2023 13:40:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600830; cv=none; d=google.com; s=arc-20160816; b=tt0HvDjhnlQdO1ApvECfr5SEc7E9JQ2hzM4f+7AMwZxw6E1ZTuaMyL+BYqTuDMnNzJ p6jnazsEgdzkHnFKZ/RkA3LK8Gc1lCGQcmLiKZLkm9FfCf5HJ5OrmMPXXyh1SK/hQg4O uAx/yE05IdwQ0Rz9/ZsaazV+pyBN7uHmyumLqVjGfNmrmyPJA+mof61KAzJ044TsOphi iWnp14TCOsdpEssddfpKed5cco7V8wA6JL9Ds4MYd7RyfWTGkEILna46tBYBtBiH29Ff CI+QSKOLhIktUB6U43UKA6+Q3xUMVGevZ1ZiLmI3LJM5afM5llY0jGWKIa4eYgit5pXL eCaA== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=YdNPSG4jke2P5GJLCKAcpVX0AcZA6IokKJgDmeZQFbk=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=u4JCOlTe0HbOxdfgy99nxxGX3UX6qiW0EZN19ykD++PZrU99TcOepZZ+f+aOK3wSOP IuITsiqI5SjCz4VS5zgpHxqnJZTaIYPBhgF1uNvbMhyf15r0r09JDxNSZQglKtE7yU0h OjABhdmtdD7F9BEjIFZvV1WRw9gs6yg3l7aiX4rNy2lFDBkWrKimQr7emaPMq/2dVZnZ iDPkz5/ivPPfL1Xc2vb0ezBU5W9+yeVeGXUTXLyHns4caYAke14xZuYudSKOxHgkUbk5 pZjfN6CMmIVgUgkxtEkTG7X8yzR0Rbx6xObzBCbbVu77qyVM/jtuKOYSTnyzP2yADuAM rLow== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=kZVIMkMd; 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 y16-20020aa7d510000000b005255f4c64bfsi3155318edq.297.2023.09.01.13.40.29; Fri, 01 Sep 2023 13:40: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=@gmail.com header.s=20221208 header.b=kZVIMkMd; 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 E203068C822; Fri, 1 Sep 2023 23:38:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 176BC68C7A7 for ; Fri, 1 Sep 2023 23:38:36 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2b72161c6e9so4749191fa.0 for ; Fri, 01 Sep 2023 13:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600715; x=1694205515; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4ydPkGzZpGCNzehsaLIebqpxxMt59nSKWdqjAxQ4OF8=; b=kZVIMkMdPRwXawGLNmDTCjTtNcZBUFamTAIttXT+fwyd9u0ke00OgGONKDd3yMpY1V KnRXKPos0kUpg9uYJonjDS5A+g0grOkt2Br8bP/WpkfWfkbqt1HaN6RmMXJKiWJufyy8 EUszDpAw48RU0eBvLufAyQpnqB6+g260MnsVGLSLFlOh/U/NdxzjhhB+sOlFd3SGaEOe EMeweBIxQvQw5Vb00NxT5xragKKF6gi1wlb2w8ubxExStQyzOZQUydgGjd2BWbyCXSZW DOPbJd0m/cTrAosFHD+fIaKmYlcsWsSmM2CqNs8xTOUUSpz0zknJ0vvn0xPs4Bz4mzqi tLxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600715; x=1694205515; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4ydPkGzZpGCNzehsaLIebqpxxMt59nSKWdqjAxQ4OF8=; b=ZSf0H1s4m6tzu5qjtFucIkrrxKkrCxzwcS8mYUqjvOq6OdY/RqgE1FhZr+RxxmGZTR YFXAr5aRt2+KNBaxbXCQr/x8T1P2SWlKHc+OwhypKRPw0ZrFUhdSwjsMVQd39G+YAxoh ro9pQCKJ+NEDyHlhzKyYL2Ojv2IX8o833KpjULOD5yBFeKlQCmG8iFXOneOQpG7nVzPe 6EL6Ho9NnaiUQao+5S8wl3b/mylOmGeydbrXbntVCEAMOIxKYmUsX865pgH5hLER9Xt9 iwlzHoBBb93XDx77cbi+oLcO6WoCYuLi6tera7l/FdE9EWWy8yNQMCtS+mBj5n2BvRTk Vf5A== X-Gm-Message-State: AOJu0YyxsxWcHVP/qEgrahAh20rly6R6LNtVrwH647ECPu+TVnqV//dN 1FavabPHy1k0dTaO32soKHj7sPlMOSBVUw== X-Received: by 2002:a2e:7c09:0:b0:2bc:c4fa:489c with SMTP id x9-20020a2e7c09000000b002bcc4fa489cmr1300844ljc.8.1693600715255; Fri, 01 Sep 2023 13:38:35 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:34 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:22 +0300 Message-ID: <20230901203828.275197-13-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 12/13] avcodec/libx264: add support for writing out CLL and MDCV 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: a/GplT3nJq13 Both of these two structures were first available with X264_BUILD 163, so make relevant functionality conditional on the version being at least such. Keep handle_side_data available in all cases as this way X264_init does not require additional version based conditions within it. Finally, add a FATE test which verifies that pass-through of the MDCV/CLL side data is working during encoding. --- configure | 2 + libavcodec/libx264.c | 78 ++++++++++++++++++++++++++++++++++++ tests/fate/enc_external.mak | 5 +++ tests/ref/fate/libx264-hdr10 | 15 +++++++ 4 files changed, 100 insertions(+) create mode 100644 tests/ref/fate/libx264-hdr10 diff --git a/configure b/configure index bd7f7697c8..432f2f8144 100755 --- a/configure +++ b/configure @@ -2518,6 +2518,7 @@ CONFIG_EXTRA=" jpegtables lgplv3 libx262 + libx264_hdr10 llauddsp llviddsp llvidencdsp @@ -6844,6 +6845,7 @@ enabled libx264 && require_pkg_config libx264 x264 "stdint.h x264.h" x require_cpp_condition libx264 x264.h "X264_BUILD >= 122" && { [ "$toolchain" != "msvc" ] || require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } && + check_cpp_condition libx264_hdr10 x264.h "X264_BUILD >= 163" && check_cpp_condition libx262 x264.h "X264_MPEG2" enabled libx265 && require_pkg_config libx265 x265 x265.h x265_api_get && require_cpp_condition libx265 x265.h "X265_BUILD >= 89" diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index ce849d6c9a..f311c7b087 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -25,6 +25,7 @@ #include "libavutil/eval.h" #include "libavutil/internal.h" #include "libavutil/opt.h" +#include "libavutil/mastering_display_metadata.h" #include "libavutil/mem.h" #include "libavutil/pixdesc.h" #include "libavutil/stereo3d.h" @@ -842,6 +843,81 @@ static int convert_pix_fmt(enum AVPixelFormat pix_fmt) return AVERROR(EINVAL);\ } +#if CONFIG_LIBX264_HDR10 +static void handle_mdcv(x264_param_t *params, + const AVMasteringDisplayMetadata *mdcv) +{ + if (!mdcv->has_primaries && !mdcv->has_luminance) + return; + + params->mastering_display.b_mastering_display = 1; + + if (mdcv->has_primaries) { + int *const points[][2] = { + { + ¶ms->mastering_display.i_red_x, + ¶ms->mastering_display.i_red_y + }, + { + ¶ms->mastering_display.i_green_x, + ¶ms->mastering_display.i_green_y + }, + { + ¶ms->mastering_display.i_blue_x, + ¶ms->mastering_display.i_blue_y + }, + }; + + for (int i = 0; i < 3; i++) { + const AVRational *src = mdcv->display_primaries[i]; + int *dst[2] = { points[i][0], points[i][1] }; + + *dst[0] = av_rescale_q(1, src[0], (AVRational){ 1, 50000 }); + *dst[1] = av_rescale_q(1, src[1], (AVRational){ 1, 50000 }); + } + + params->mastering_display.i_white_x = + av_rescale_q(1, mdcv->white_point[0], (AVRational){ 1, 50000 }); + params->mastering_display.i_white_y = + av_rescale_q(1, mdcv->white_point[1], (AVRational){ 1, 50000 }); + } + + if (mdcv->has_luminance) { + params->mastering_display.i_display_max = + av_rescale_q(1, mdcv->max_luminance, (AVRational){ 1, 10000 }); + params->mastering_display.i_display_min = + av_rescale_q(1, mdcv->min_luminance, (AVRational){ 1, 10000 }); + } +} +#endif // CONFIG_LIBX264_HDR10 + +static void handle_side_data(AVCodecContext *avctx, x264_param_t *params) +{ +#if CONFIG_LIBX264_HDR10 + const AVFrameSideDataSet set = avctx->frame_sd_set; + const AVFrameSideData *cll_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); + const AVFrameSideData *mdcv_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); + + if (cll_sd) { + const AVContentLightMetadata *cll = + (AVContentLightMetadata *)cll_sd->data; + + params->content_light_level.i_max_cll = cll->MaxCLL; + params->content_light_level.i_max_fall = cll->MaxFALL; + + params->content_light_level.b_cll = 1; + } + + if (mdcv_sd) { + handle_mdcv(params, (AVMasteringDisplayMetadata *)mdcv_sd->data); + } +#endif // CONFIG_LIBX264_HDR10 +} + static av_cold int X264_init(AVCodecContext *avctx) { X264Context *x4 = avctx->priv_data; @@ -1142,6 +1218,8 @@ FF_ENABLE_DEPRECATION_WARNINGS if (avctx->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED) x4->params.vui.i_chroma_loc = avctx->chroma_sample_location - 1; + handle_side_data(avctx, &x4->params); + if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) x4->params.b_repeat_headers = 0; diff --git a/tests/fate/enc_external.mak b/tests/fate/enc_external.mak index d787941c16..4095a4b51a 100644 --- a/tests/fate/enc_external.mak +++ b/tests/fate/enc_external.mak @@ -7,5 +7,10 @@ FATE_ENC_EXTERNAL-$(call ENCDEC, LIBSVTAV1 HEVC, MOV, HEVC_DEMUXER LIBDAV1D_DECO fate-libsvtav1-hdr10: CMD = enc_external $(TARGET_SAMPLES)/hevc/hdr10_plus_h265_sample.hevc \ mp4 "-c:v libsvtav1" "-show_frames -show_entries frame=side_data_list -of flat" +# test for x264 MDCV and CLL passthrough during encoding +FATE_ENC_EXTERNAL-$(call ENCDEC, LIBX264 HEVC, MOV, LIBX264_HDR10 HEVC_DEMUXER H264_DECODER) += fate-libx264-hdr10 +fate-libx264-hdr10: CMD = enc_external $(TARGET_SAMPLES)/hevc/hdr10_plus_h265_sample.hevc \ + mp4 "-c:v libx264" "-show_frames -show_entries frame=side_data_list -of flat" + FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_ENC_EXTERNAL-yes) fate-enc-external: $(FATE_ENC_EXTERNAL-yes) diff --git a/tests/ref/fate/libx264-hdr10 b/tests/ref/fate/libx264-hdr10 new file mode 100644 index 0000000000..99c11677f0 --- /dev/null +++ b/tests/ref/fate/libx264-hdr10 @@ -0,0 +1,15 @@ +frames.frame.0.side_data_list.side_data.0.side_data_type="H.26[45] User Data Unregistered SEI message" +frames.frame.0.side_data_list.side_data.1.side_data_type="Mastering display metadata" +frames.frame.0.side_data_list.side_data.1.red_x="13250/50000" +frames.frame.0.side_data_list.side_data.1.red_y="34500/50000" +frames.frame.0.side_data_list.side_data.1.green_x="7500/50000" +frames.frame.0.side_data_list.side_data.1.green_y="3000/50000" +frames.frame.0.side_data_list.side_data.1.blue_x="34000/50000" +frames.frame.0.side_data_list.side_data.1.blue_y="16000/50000" +frames.frame.0.side_data_list.side_data.1.white_point_x="15635/50000" +frames.frame.0.side_data_list.side_data.1.white_point_y="16450/50000" +frames.frame.0.side_data_list.side_data.1.min_luminance="50/10000" +frames.frame.0.side_data_list.side_data.1.max_luminance="10000000/10000" +frames.frame.0.side_data_list.side_data.2.side_data_type="Content light level metadata" +frames.frame.0.side_data_list.side_data.2.max_content=1000 +frames.frame.0.side_data_list.side_data.2.max_average=200 From patchwork Fri Sep 1 20:38:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43448 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:1a81:b0:149:dfde:5c0a with SMTP id ci1csp579395pzb; Fri, 1 Sep 2023 13:40:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGBs1etOMAki3BQZVZj8wU3gRWy6rdCKYDEeI+E5j4qK8I4NGLRohmN8mM/f4izMyMAtuk3 X-Received: by 2002:a17:906:291:b0:99d:d4ec:6c5d with SMTP id 17-20020a170906029100b0099dd4ec6c5dmr2499721ejf.73.1693600838325; Fri, 01 Sep 2023 13:40:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1693600838; cv=none; d=google.com; s=arc-20160816; b=udKTdcPQ3AXiYsHQGmIxZ52e6xlEPw+xZpoj6Zd6D3QH9wreRaj271xORSggx+ZiFQ SbZcNysLqjPSXvFGq9H7u7Zq9ytc2dzcS4l39H1E9t6ffv07TxdtmgTzgyvBBtui6+4V kCyqcvI7GW/oKUQVD2hEDsDaIRU0UCn0AT4YRb08CC9ORGOzDd8v6Ql//Iz2ZJbLVkHB e9k6HVKOcO3gMo9MJeNW1afhEIqOrCoCT7cfLinC542wz/GS9yTeTTz/E00lgPcsmO5T UbrNBps+XD4ztTLE7ZX6Dgaf2bQpDvEIEro/90AhlTi0486LO7u0wUOPvdxMp77Q7qFd at2w== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=2A+4x8zUZv5I61mNn/jyvZW08QjjtIULv8MtVBqRLCo=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=b8HwEFGWK4xd25wEovtR0Hp8a8+clrx2zUqlbwNfuGfSEta4VN/aUyrYn2YoN0uuJm TRfUzrh+M2nLxmlktdADoFotLCjT/Sy+7ZBb7NgAOK3wgg4Wf4LzGQbbBLLI0jAn9MQC xHHc4qMj/wadT240GGgwMJ2Nbcl2q8/ynBpiBh5GORXhZRpnbvEUCSj/M2Go3YGB7H/L j2hXE1hs9d/gj9QVDrTyjk7VndGbg4/bCChS/RH7ZLB+y05j2uu9UXVqM5j71xWNentE Ci1e5oPBaUSzWLseHbNtQjK09r7FUkyU2aQmmED26PzoZjDpXpfrmi+jcy5N7O6Prgdp DtpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=h4YJS+IE; 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 gx17-20020a170906f1d100b009a168973e11si2917748ejb.574.2023.09.01.13.40.38; Fri, 01 Sep 2023 13:40:38 -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=h4YJS+IE; 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 D6BF068C82A; Fri, 1 Sep 2023 23:38:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8884368C756 for ; Fri, 1 Sep 2023 23:38:36 +0300 (EEST) Received: by mail-lj1-f181.google.com with SMTP id 38308e7fff4ca-2bce552508fso39593081fa.1 for ; Fri, 01 Sep 2023 13:38:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693600716; x=1694205516; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Zp+sFP5TM9lE9BIXcX5O9Gf1mAUd4dukIGAc7N8ohis=; b=h4YJS+IE6gGkqVydVhSp/AhhodwA6cRfIOVOzZgtvP3BiwQd5g5zwObcbTFIECEqrA /S120QYWbhPMtCjd7YUVwwe+1rDaqEmvOjsx0o73hfC+xdLhO7sJEpM+SpsX6FE6T+jZ MsOm0PR/Hpww/ONlrfyg8eEKxg/5Kc3CSAENym14TLvzoKt38TwfHHOd1ImArDMJIC9y eLtr013BHNNoPe2aP7gERM+D5TE1R00okl8V4fgG45hBfep2LTt5Ce1Tqfl7VmMGg9uS BErY5Ic20+j3BogKQmuemW05DmAw9MF2TSlXTizHrs/GbzBKl/FWMhZHu9Wy97oZQ1Ru OiOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693600716; x=1694205516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Zp+sFP5TM9lE9BIXcX5O9Gf1mAUd4dukIGAc7N8ohis=; b=iGCmZMvK2+KmLwzWlr3AVsDI94Te8RWyWAYrY1ljmZCgDibIS9efYZCB/sjVQF2X/1 QLtBo0jCCCYXXiDVSOEybC1bVDTeLwVUFk7A4WZ4EHHTpRuvi1E9Ccihuh6FbrTsimdo zSDeccIDZkhuAiZneL5JhlvLPmGEdLCE4zamMXqwtIQn3PrDVh2Jb1Xonymtyz46N9J4 XUoV1SJt9J345vGtP0PBgOe+p6kztA1f0Vt40/wm8wmeOTxe7THTZPCnMa685hKHC5Nj +iGkZQw209M+MVA37auDk2tCoZ0E+UjfkpRa6GWAlqDWNN6QWZcht6xknVAuXzeUQBT3 nrQQ== X-Gm-Message-State: AOJu0Yx3hADKqaJpCt1E7xD8465q6P94EFEMs6II0Qf2sjXmeU9iM8EX ANBBLVIQtAhws/Hy3jmGIE3ZIqKGZ6mCOQ== X-Received: by 2002:a2e:910b:0:b0:2bc:b9c7:7ba3 with SMTP id m11-20020a2e910b000000b002bcb9c77ba3mr2506932ljg.12.1693600715691; Fri, 01 Sep 2023 13:38:35 -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 k17-20020a2e9211000000b002b9a1e9ba68sm907954ljg.136.2023.09.01.13.38.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Sep 2023 13:38:35 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 1 Sep 2023 23:38:23 +0300 Message-ID: <20230901203828.275197-14-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230901203828.275197-1-jeebjp@gmail.com> References: <20230901203828.275197-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 13/13] avcodec/libx265: add support for writing out CLL and MDCV 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: QA6SIut5S0Ma The newer of these two are the separate integers for content light level, introduced in 3952bf3e98c76c31594529a3fe34e056d3e3e2ea , with X265_BUILD 75. As we already require X265_BUILD of at least 89, no further conditions are required. --- libavcodec/libx265.c | 87 ++++++++++++++++++++++++++++++++++++ tests/fate/enc_external.mak | 5 +++ tests/ref/fate/libx265-hdr10 | 16 +++++++ 3 files changed, 108 insertions(+) create mode 100644 tests/ref/fate/libx265-hdr10 diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c index 873b3021ee..eb4a42b06c 100644 --- a/libavcodec/libx265.c +++ b/libavcodec/libx265.c @@ -28,9 +28,11 @@ #include #include "libavutil/avassert.h" +#include "libavutil/bprint.h" #include "libavutil/buffer.h" #include "libavutil/internal.h" #include "libavutil/common.h" +#include "libavutil/mastering_display_metadata.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "avcodec.h" @@ -179,6 +181,84 @@ static av_cold int libx265_param_parse_int(AVCodecContext *avctx, return 0; } +static int handle_mdcv(const AVClass **avcl, const x265_api *api, + x265_param *params, + const AVMasteringDisplayMetadata *mdcv) +{ + int ret = AVERROR_BUG; + AVBPrint buf; + av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC); + + // G(%hu,%hu)B(%hu,%hu)R(%hu,%hu)WP(%hu,%hu)L(%u,%u) + av_bprintf( + &buf, + "G(%"PRId64",%"PRId64")B(%"PRId64",%"PRId64")R(%"PRId64",%"PRId64")" + "WP(%"PRId64",%"PRId64")L(%"PRId64",%"PRId64")", + av_rescale_q(1, mdcv->display_primaries[1][0], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->display_primaries[1][1], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->display_primaries[2][0], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->display_primaries[2][1], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->display_primaries[0][0], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->display_primaries[0][1], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->white_point[0], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->white_point[1], (AVRational){ 1, 50000 }), + av_rescale_q(1, mdcv->max_luminance, (AVRational){ 1, 10000 }), + av_rescale_q(1, mdcv->min_luminance, (AVRational){ 1, 10000 })); + + if (!av_bprint_is_complete(&buf)) { + av_log(avcl, AV_LOG_ERROR, + "MDCV string too long for its available space!\n"); + ret = AVERROR(ENOMEM); + goto end; + } + + if (api->param_parse(params, "master-display", buf.str) == + X265_PARAM_BAD_VALUE) { + av_log(avcl, AV_LOG_ERROR, + "Invalid value \"%s\" for param \"master-display\".\n", + buf.str); + ret = AVERROR(EINVAL); + goto end; + } + + ret = 0; + +end: + av_bprint_finalize(&buf, NULL); + + return ret; +} + +static int handle_side_data(AVCodecContext *avctx, const x265_api *api, + x265_param *params) +{ + const AVFrameSideDataSet set = avctx->frame_sd_set; + const AVFrameSideData *cll_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL); + const AVFrameSideData *mdcv_sd = + av_frame_side_data_set_get_item( + set, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA); + + if (cll_sd) { + const AVContentLightMetadata *cll = + (AVContentLightMetadata *)cll_sd->data; + + params->maxCLL = cll->MaxCLL; + params->maxFALL = cll->MaxFALL; + } + + if (mdcv_sd) { + int ret = handle_mdcv( + &avctx->av_class, api, params, + (AVMasteringDisplayMetadata *)mdcv_sd->data); + if (ret < 0) + return ret; + } + + return 0; +} + static av_cold int libx265_encode_init(AVCodecContext *avctx) { libx265Context *ctx = avctx->priv_data; @@ -339,6 +419,13 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR_BUG; } + ret = handle_side_data(avctx, ctx->api, ctx->params); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed handling side data! (%s)\n", + av_err2str(ret)); + return ret; + } + if (ctx->crf >= 0) { char crf[6]; diff --git a/tests/fate/enc_external.mak b/tests/fate/enc_external.mak index 4095a4b51a..30021efbcd 100644 --- a/tests/fate/enc_external.mak +++ b/tests/fate/enc_external.mak @@ -12,5 +12,10 @@ FATE_ENC_EXTERNAL-$(call ENCDEC, LIBX264 HEVC, MOV, LIBX264_HDR10 HEVC_DEMUXER H fate-libx264-hdr10: CMD = enc_external $(TARGET_SAMPLES)/hevc/hdr10_plus_h265_sample.hevc \ mp4 "-c:v libx264" "-show_frames -show_entries frame=side_data_list -of flat" +# test for x265 MDCV and CLL passthrough during encoding +FATE_ENC_EXTERNAL-$(call ENCDEC, LIBX265 HEVC, MOV, HEVC_DEMUXER) += fate-libx265-hdr10 +fate-libx265-hdr10: CMD = enc_external $(TARGET_SAMPLES)/hevc/hdr10_plus_h265_sample.hevc \ + mp4 "-c:v libx265" "-show_frames -show_entries frame=side_data_list -of flat" + FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_ENC_EXTERNAL-yes) fate-enc-external: $(FATE_ENC_EXTERNAL-yes) diff --git a/tests/ref/fate/libx265-hdr10 b/tests/ref/fate/libx265-hdr10 new file mode 100644 index 0000000000..571c837cac --- /dev/null +++ b/tests/ref/fate/libx265-hdr10 @@ -0,0 +1,16 @@ +frames.frame.0.side_data_list.side_data.0.side_data_type="H.26[45] User Data Unregistered SEI message" +frames.frame.0.side_data_list.side_data.1.side_data_type="H.26[45] User Data Unregistered SEI message" +frames.frame.0.side_data_list.side_data.2.side_data_type="Mastering display metadata" +frames.frame.0.side_data_list.side_data.2.red_x="13250/50000" +frames.frame.0.side_data_list.side_data.2.red_y="34500/50000" +frames.frame.0.side_data_list.side_data.2.green_x="7500/50000" +frames.frame.0.side_data_list.side_data.2.green_y="3000/50000" +frames.frame.0.side_data_list.side_data.2.blue_x="34000/50000" +frames.frame.0.side_data_list.side_data.2.blue_y="16000/50000" +frames.frame.0.side_data_list.side_data.2.white_point_x="15635/50000" +frames.frame.0.side_data_list.side_data.2.white_point_y="16450/50000" +frames.frame.0.side_data_list.side_data.2.min_luminance="50/10000" +frames.frame.0.side_data_list.side_data.2.max_luminance="10000000/10000" +frames.frame.0.side_data_list.side_data.3.side_data_type="Content light level metadata" +frames.frame.0.side_data_list.side_data.3.max_content=1000 +frames.frame.0.side_data_list.side_data.3.max_average=200