From patchwork Sat Feb 6 21:04:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 25470 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id C584944A204 for ; Sat, 6 Feb 2021 23:04:42 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 97C86688154; Sat, 6 Feb 2021 23:04:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 412EA688128 for ; Sat, 6 Feb 2021 23:04:36 +0200 (EET) Received: by mail-ed1-f50.google.com with SMTP id s11so13649208edd.5 for ; Sat, 06 Feb 2021 13:04:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=BB+YWMXdyjWQ5bqfQwe9Mjr4mmsUvv3mVuj7tpGyrvU=; b=SbUDop9CdW5TAL6zN6Ohw1tWvDBi21BdxJEhN3GqTU2F9KRrwGxObJEMLMI2Lz7Svd LXB/aotSR5EiXWrUNNzvg38UX5RNmzhMPxjY4hDJUeLAhGbt4noY6k4dSQc63jNDzwDN IMM7TArnm3XdSTk/wNFmIqQHRw2XihRbi02uGWGidIhFexUEpHABi7hQJPaOxEPJyunn QiugG5mIfpH8QhtkYXmi358Hz/XzxHLDd9lu07WdL8mnWPo6KhtP17xLKWhhCJTwRpvV LWb8b+YDS26chOra7dnqygE5h0uPwLMWjW4yfCm821OWDbO5zIfqh7CyZtML7OJTltz6 jWXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=BB+YWMXdyjWQ5bqfQwe9Mjr4mmsUvv3mVuj7tpGyrvU=; b=D3U0g4j3uSo7d76KcHZU5nhZjkm/y9JMJc6df5zp5Dp6DwFnAz2LiMN1WR78hJ9nMZ dyUGeX4wkK7xcwKAYiTa9tM+Tq8Qdnywxjd3MY03jF1Ms1dcKQiJe5lNcNnVKspie5hk r9quKHybCPx/qgmflYtFKKLshj/eUVDf9huK/qbz1UaC72SA7vXpTrMSoezNx5s6gqLe iOFJX8iK4bbnlQAax+FLX0Ix3PeTq7eVki4WElrEzaMhTiZ08wFqwen0raIItY9atEvw 61Z6znA7yC3/vPhMkCjbcSDQlHKTWMuG/PGDHnuYIMWSUpnZOO/Lw8NtC8+ZTO8oVizl yT9w== X-Gm-Message-State: AOAM532+Z6z4H4j7EYl7tEOQ/EZnt0bJczUoxSUe8bFTJah5eRVWR/K5 sicor3/aIamfbMjYREgp+uPHdQehltuHFQ== X-Google-Smtp-Source: ABdhPJwNwZ0IzbgHiXz/ksZ2x+8gcDaQ3TJXdYEOoBkxUesjbm95rZL+TCI5JegxWTB1x9PAzNif5A== X-Received: by 2002:aa7:c895:: with SMTP id p21mr9949598eds.165.1612645475761; Sat, 06 Feb 2021 13:04:35 -0800 (PST) Received: from localhost.localdomain ([212.15.167.195]) by smtp.gmail.com with ESMTPSA id cf25sm30249ejb.71.2021.02.06.13.04.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Feb 2021 13:04:35 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Sat, 6 Feb 2021 22:04:26 +0100 Message-Id: <20210206210426.13351-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avfilter/vf_thumbnail: add support for YUV and GBRP formats X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- libavfilter/vf_thumbnail.c | 47 ++++++++++++++++++++++++++++----- tests/ref/fate/filter-thumbnail | 2 +- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/libavfilter/vf_thumbnail.c b/libavfilter/vf_thumbnail.c index ac04615bdc..a0561683aa 100644 --- a/libavfilter/vf_thumbnail.c +++ b/libavfilter/vf_thumbnail.c @@ -28,6 +28,7 @@ */ #include "libavutil/opt.h" +#include "libavutil/pixdesc.h" #include "avfilter.h" #include "internal.h" @@ -44,6 +45,9 @@ typedef struct ThumbContext { int n_frames; ///< number of frames for analysis struct thumb_frame *frames; ///< the n_frames frames AVRational tb; ///< copy of the input timebase to ease access + + int planewidth[4]; + int planeheight[4]; } ThumbContext; #define OFFSET(x) offsetof(ThumbContext, x) @@ -140,14 +144,29 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) // keep a reference of each frame s->frames[s->n].buf = frame; - // update current frame RGB histogram - for (j = 0; j < inlink->h; j++) { - for (i = 0; i < inlink->w; i++) { - hist[0*256 + p[i*3 ]]++; - hist[1*256 + p[i*3 + 1]]++; - hist[2*256 + p[i*3 + 2]]++; + // update current frame histogram + switch (inlink->format) { + case AV_PIX_FMT_RGB24: + case AV_PIX_FMT_BGR24: + for (j = 0; j < inlink->h; j++) { + for (i = 0; i < inlink->w; i++) { + hist[0*256 + p[i*3 ]]++; + hist[1*256 + p[i*3 + 1]]++; + hist[2*256 + p[i*3 + 2]]++; + } + p += frame->linesize[0]; + } + break; + default: + for (int plane = 0; plane < 3; plane++) { + const uint8_t *p = frame->data[plane]; + for (j = 0; j < s->planeheight[plane]; j++) { + for (i = 0; i < s->planewidth[plane]; i++) + hist[256*plane + p[i]]++; + p += frame->linesize[plane]; + } } - p += frame->linesize[0]; + break; } // no selection until the buffer of N frames is filled up @@ -188,8 +207,14 @@ static int config_props(AVFilterLink *inlink) { AVFilterContext *ctx = inlink->dst; ThumbContext *s = ctx->priv; + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format); s->tb = inlink->time_base; + s->planewidth[1] = s->planewidth[2] = AV_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w); + s->planewidth[0] = s->planewidth[3] = inlink->w; + s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h); + s->planeheight[0] = s->planeheight[3] = inlink->h; + return 0; } @@ -197,6 +222,14 @@ static int query_formats(AVFilterContext *ctx) { static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, + AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, + AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, + AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P, + AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, + AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P, + AV_PIX_FMT_YUVJ411P, + AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P, + AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_NONE }; AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts); diff --git a/tests/ref/fate/filter-thumbnail b/tests/ref/fate/filter-thumbnail index 36f11f297e..4d8c5011ce 100644 --- a/tests/ref/fate/filter-thumbnail +++ b/tests/ref/fate/filter-thumbnail @@ -1 +1 @@ -thumbnail cd429b3d92c33bcc257e8e6a3284dbf7 +thumbnail 8b54dbc891b9cc05742dd0f5b74c0727