From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id AF317408B1 for ; Fri, 24 Dec 2021 03:10:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C483868B222; Fri, 24 Dec 2021 05:09:31 +0200 (EET) Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C3BED68B1FA for ; Fri, 24 Dec 2021 05:09:25 +0200 (EET) Received: by mail-qv1-f46.google.com with SMTP id kc16so6807631qvb.3 for ; Thu, 23 Dec 2021 19:09:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=TsA1yHdbiURyPXJAkpxs7dCHo/yQXZYKYHQjmvfB0s4=; b=J2Ix78n2Fi50bN5ld53MhHOrMrRzqK4niWAfCEXYJKZgojh/cK+UGWNvOIjg3IHnHh jxvoXq2A9HK2j0+MTPm/xPJgzfXuhQsPt4bq5cHu21L8nK8u0HTbE0j7QdFIieqn8rAs oeMpWtBLCgQZPh70it55NHgTpltsCh0NXoLrcuprg9wuxB8X25dzTQmzSXxHa5I3TSvI R/Prnl/97ZrFDCoUj7PYl2qJNxqdO+fu7b1TzBFvwR7M8wBo75D7M7h9cN8x6AaHF2HQ seNm5jvVeNPSwoikZ6EcmjFuQ0bcM6PJi7mKXs82iXAehrwFvpH/G0rNrazUEzUsjXV4 zktA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TsA1yHdbiURyPXJAkpxs7dCHo/yQXZYKYHQjmvfB0s4=; b=gwJuOoVs0vDxWYo9S8f8wmQ4ef0i07zrN7Jb4FiG+igDybkz9MunKStiCM0ABeP2/2 Rv20mpaXfkA70LekbhX85qFr0Yx7CJEPOH9RMN6V0U7rtMcp0M97APwFE/qXNORxO0CZ pw114jvyocjNryXhAqOgVYpkKmhTQShFVjeTw3mGjX9HZUmGB/wCqOrbLbNTVflsaxQf 44jCcuYijxyl3YKw/ccjfMq3jN9KKW4QLyiS+v3BcEAnTAQ+9gR7akDH2RLTbWwdb7nh WMFFCaVLPRG2vQJO0l6ARR8DutpH58L/unMlKIIF+Z1LqbqaqG2MPkt6pdnv73uCMt7A 2QJA== X-Gm-Message-State: AOAM532mkL2CjVCO+99DV+gXoOwaoxnowAR3iSDUZqUhv1qYkjJ1ouBq 7gVZ0B1wwz2acUojb5Q8bzpeI5qGrcIs708= X-Google-Smtp-Source: ABdhPJxUZFmnMZXSnVVA0EShvkcGMR/MciXwzZDF7Jl4+e91NiPw3g6JLOuG9NM9grMrsCzeKs+mFA== X-Received: by 2002:ad4:5cef:: with SMTP id iv15mr4159009qvb.82.1640315364018; Thu, 23 Dec 2021 19:09:24 -0800 (PST) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:cd8d:58a:de7b:88f1]) by smtp.gmail.com with ESMTPSA id e15sm5162479qtq.83.2021.12.23.19.09.23 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 23 Dec 2021 19:09:23 -0800 (PST) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Dec 2021 21:08:59 -0600 Message-Id: <20211224030904.1196-12-rcombs@rcombs.me> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211224030904.1196-1-rcombs@rcombs.me> References: <20211224030904.1196-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/16] lavfi/drawutils: reimplement ff_fill_rgba_map without hardcoding the list 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Same outputs, but computed instead of statically known, so new formats will be supported more easily. Asserts in place to ensure we update this if we add anything incompatible with its logic. --- libavfilter/drawutils.c | 81 ++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index 0965afb03e..e4d6ddcf4c 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -21,6 +21,7 @@ #include +#include "libavutil/avassert.h" #include "libavutil/avutil.h" #include "libavutil/colorspace.h" #include "libavutil/intreadwrite.h" @@ -32,50 +33,46 @@ enum { RED = 0, GREEN, BLUE, ALPHA }; int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt) { - switch (pix_fmt) { - case AV_PIX_FMT_0RGB: - case AV_PIX_FMT_ARGB: rgba_map[ALPHA] = 0; rgba_map[RED ] = 1; rgba_map[GREEN] = 2; rgba_map[BLUE ] = 3; break; - case AV_PIX_FMT_0BGR: - case AV_PIX_FMT_ABGR: rgba_map[ALPHA] = 0; rgba_map[BLUE ] = 1; rgba_map[GREEN] = 2; rgba_map[RED ] = 3; break; - case AV_PIX_FMT_RGB48LE: - case AV_PIX_FMT_RGB48BE: - case AV_PIX_FMT_RGBA64BE: - case AV_PIX_FMT_RGBA64LE: - case AV_PIX_FMT_RGB0: - case AV_PIX_FMT_RGBA: - case AV_PIX_FMT_RGB24: rgba_map[RED ] = 0; rgba_map[GREEN] = 1; rgba_map[BLUE ] = 2; rgba_map[ALPHA] = 3; break; - case AV_PIX_FMT_BGR48LE: - case AV_PIX_FMT_BGR48BE: - case AV_PIX_FMT_BGRA64BE: - case AV_PIX_FMT_BGRA64LE: - case AV_PIX_FMT_BGRA: - case AV_PIX_FMT_BGR0: - case AV_PIX_FMT_BGR24: rgba_map[BLUE ] = 0; rgba_map[GREEN] = 1; rgba_map[RED ] = 2; rgba_map[ALPHA] = 3; break; - case AV_PIX_FMT_GBRP9LE: - case AV_PIX_FMT_GBRP9BE: - case AV_PIX_FMT_GBRP10LE: - case AV_PIX_FMT_GBRP10BE: - case AV_PIX_FMT_GBRP12LE: - case AV_PIX_FMT_GBRP12BE: - case AV_PIX_FMT_GBRP14LE: - case AV_PIX_FMT_GBRP14BE: - case AV_PIX_FMT_GBRP16LE: - case AV_PIX_FMT_GBRP16BE: - case AV_PIX_FMT_GBRAP: - case AV_PIX_FMT_GBRAP10LE: - case AV_PIX_FMT_GBRAP10BE: - case AV_PIX_FMT_GBRAP12LE: - case AV_PIX_FMT_GBRAP12BE: - case AV_PIX_FMT_GBRAP16LE: - case AV_PIX_FMT_GBRAP16BE: - case AV_PIX_FMT_GBRPF32LE: - case AV_PIX_FMT_GBRPF32BE: - case AV_PIX_FMT_GBRAPF32LE: - case AV_PIX_FMT_GBRAPF32BE: - case AV_PIX_FMT_GBRP: rgba_map[GREEN] = 0; rgba_map[BLUE ] = 1; rgba_map[RED ] = 2; rgba_map[ALPHA] = 3; break; - default: /* unsupported */ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); + if (!(desc->flags & AV_PIX_FMT_FLAG_RGB)) return AVERROR(EINVAL); + if (desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) + return AVERROR(EINVAL); + av_assert0(desc->nb_components == 3 + !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA)); + if (desc->flags & AV_PIX_FMT_FLAG_PLANAR) { + rgba_map[RED] = desc->comp[0].plane; + rgba_map[GREEN] = desc->comp[1].plane; + rgba_map[BLUE] = desc->comp[2].plane; + rgba_map[ALPHA] = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) ? desc->comp[3].plane : 3; + } else { + int had0 = 0; + unsigned depthb = 0; + unsigned i; + for (i = 0; i < desc->nb_components; i++) { + /* all components must have same depth in bytes */ + unsigned db = (desc->comp[i].depth + 7) / 8; + unsigned pos = desc->comp[i].offset / db; + if (depthb && (depthb != db)) + return AVERROR(ENOSYS); + + if (desc->comp[i].offset % db) + return AVERROR(ENOSYS); + + had0 |= pos == 0; + rgba_map[i] = pos; + } + + if (desc->nb_components == 3) + rgba_map[ALPHA] = had0 ? 3 : 0; } + + av_assert0(rgba_map[RED] != rgba_map[GREEN]); + av_assert0(rgba_map[GREEN] != rgba_map[BLUE]); + av_assert0(rgba_map[BLUE] != rgba_map[RED]); + av_assert0(rgba_map[RED] != rgba_map[ALPHA]); + av_assert0(rgba_map[GREEN] != rgba_map[ALPHA]); + av_assert0(rgba_map[BLUE] != rgba_map[ALPHA]); + return 0; } -- 2.33.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".