From patchwork Tue Jul 18 13:50:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vittorio Giovara X-Patchwork-Id: 4353 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.1.76 with SMTP id 73csp1604602vsb; Tue, 18 Jul 2017 06:58:04 -0700 (PDT) X-Received: by 10.28.18.194 with SMTP id 185mr1938141wms.19.1500386283998; Tue, 18 Jul 2017 06:58:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500386283; cv=none; d=google.com; s=arc-20160816; b=IiMMQw56cXbaBhxSF/2jLexICQ1lcEO6hIzZM4KAa10oC6c6wGK9TK/6QcfeGVXwDE 89lcmfYpY/l3E5KhA/k5OtEdLGNqmLnCf0cDD2CZlH7JdfQbbpfz9gVr8oV25QT1MaO7 MyIG2VOk7p4mPefKELHwBbpDnbx1gOJh1hB44WOp5XQCtqD9zw0udHa7WAwrM7P59OS6 7QEzEK58cgaLVg9UBG4P9VCmjplyFRzCQW27aKey0Ju5wBczSxbVilh0kQoT8u7CoVk1 1ha1glgXQxLZqD7iTMTr1+XRA3LCcfWMHKjDIrPgnajclilqfn4hI+FJCuvLbISHCl+s PokQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=YBG2lzbU/EdktBBb340nwGWbD7qTllecCcWxys8QZ30=; b=E5vL1RBkbz48d1nB7Py/I60NZAX6Bpy45ZfQI5uyqbYwjxvAtiHSrvMCq43vIsyutb g4g/V14iX9O89VP3UX1tjRfIfukz6PrYuh/uN+fBj3Azb4Uz3UpUeW2zLazO1hGkp2rh 9zhMWhuzfbEJVY87Ydv48JdcleQ8RnNG52P8H6p+EvDw6VrHXShLdOzzmHqoMPdqwRVz M+a3dHA5bJvkAnn8ft4jOCsPnhx5eES4fobD27KG64rqiAAfdba9ujpaXkyseD3lLeqY 2c5A/VXoSizCXETAfDFS9sKMgmHfDMExEx9St9C7JRLsxSfmsfK3yIXzgoODo+SB3As3 tJtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.b=vQR70iGv; 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=NONE 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 d26si1722091wra.72.2017.07.18.06.58.03; Tue, 18 Jul 2017 06:58:03 -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.b=vQR70iGv; 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=NONE 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 4B32D6883E9; Tue, 18 Jul 2017 16:57:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A3A46805FB for ; Tue, 18 Jul 2017 16:57:47 +0300 (EEST) Received: by mail-qt0-f195.google.com with SMTP id p25so1316230qtp.2 for ; Tue, 18 Jul 2017 06:57:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=en0FicyITxkY1MCmMXj3C1eQ3mDc02iVoOSkCWKMiO8=; b=vQR70iGv39uMHakPHJvr0je8dXHUvpJ8ZVCklTyMX8PceOi4LGtgIyHOP/BVVHVMUE gp95824gPL72TDT8aYOkVdWA8VsS5ne8o+FWxT+UMQcyTmovasZ6WX62gtImdgkCHE2P 6cdvdc2SaGxpFAArACpB+Oy1F7o/Wm94SxRy0usSLsA8gcRY64S/S9SXgy5C0fQ/MxU5 pOSNYS2pBt7BWCy6/5Y0heWqN5CaUjRh/KN1okiGg9JS1/Fc7/ipsZkbsEmKFcGVav1W 4CzA51LoB0TUQz0hdijAs0/D+ezOR4cMi99EaLqYtxcJjmeFR8yAki3c6mhz4oi4A+C4 0OLQ== 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=en0FicyITxkY1MCmMXj3C1eQ3mDc02iVoOSkCWKMiO8=; b=J+iSWcoEYRSyJEWhUzCWQnelRH6yVznW0mZ3lDJ/f+I+8SxhmxRimX5yrioeyoGF28 S1oOxsDCrIHBeIHgwgnjJJFIhcTD/VnQFfgcP6HKKhXsCJSsovH+HFkpH0/vWOzlAhHN ukqw+wQq9IkIZPmFCENGYL8uUgILKG5htek7qjA13rr2PdeiurkERpEFOkJBmeJyMhD0 qY/bpsPH3u2kmjdWIsOfL3jCruZTJevgCvTXg7u2qw1aDa9YsVACc9L5YVzD1ToK1YkY rXU52YCh73b244okgys0ZeM/v4FPxvmtyIVpQDcy1l1HMFgEc68dAIVc7U4C7qFh7yhg QmaQ== X-Gm-Message-State: AIVw112EtuQMaXUXwZpM0cepxH14E7hS921uqRM1uWyLviD8b/F+Ldxn Jq2gxRgg29lEvEiz X-Received: by 10.200.4.140 with SMTP id s12mr1990858qtg.35.1500385822645; Tue, 18 Jul 2017 06:50:22 -0700 (PDT) Received: from vimacbookpro.vimeo.iac.corp (93-40-167-184.ip39.fastwebnet.it. [93.40.167.184]) by smtp.gmail.com with ESMTPSA id j39sm1767590qtj.19.2017.07.18.06.50.18 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 18 Jul 2017 06:50:21 -0700 (PDT) From: Vittorio Giovara To: ffmpeg-devel@ffmpeg.org Date: Tue, 18 Jul 2017 15:50:11 +0200 Message-Id: <20170718135015.52683-1-vittorio.giovara@gmail.com> X-Mailer: git-send-email 2.13.2 Subject: [FFmpeg-devel] [PATCH 1/5] Add YUV444 32bit floating point pixel format 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" With and without alpha. --- TODO: version bump I am aware support for bpp > 2 is not present but the scope of these formats is limited to a specific usecase, and contained in libavfilter only. Suggestions for reflecting this in documentation are welcome. Cheers, Vittorio libavutil/pixdesc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ libavutil/pixdesc.h | 5 +++++ libavutil/pixfmt.h | 7 +++++++ libswscale/utils.c | 4 ++++ 4 files changed, 67 insertions(+) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 46a7eff06d..a61ce3c5ac 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -2162,6 +2162,57 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { .name = "d3d11", .flags = AV_PIX_FMT_FLAG_HWACCEL, }, + [AV_PIX_FMT_YUV444F32LE] = { + .name = "yuv444f32le", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_YUV444F32BE] = { + .name = "yuv444f32be", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_YUVA444F32LE] = { + .name = "yuva444f32le", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, + }, + [AV_PIX_FMT_YUVA444F32BE] = { + .name = "yuva444f32be", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* U */ + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* V */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, + }, }; #if FF_API_PLUS1_MINUS1 FF_ENABLE_DEPRECATION_WARNINGS diff --git a/libavutil/pixdesc.h b/libavutil/pixdesc.h index c3a6f27f49..294555260a 100644 --- a/libavutil/pixdesc.h +++ b/libavutil/pixdesc.h @@ -178,6 +178,11 @@ typedef struct AVPixFmtDescriptor { #define AV_PIX_FMT_FLAG_BAYER (1 << 8) /** + * The pixel format contains IEEE-754 single precision floating point values. + */ +#define AV_PIX_FMT_FLAG_FLOAT (1 << 10) + +/** * Return the number of bits per pixel used by the pixel format * described by pixdesc. Note that this is not the same as the number * of bits per sample. diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index e1e4074bee..d6a874da15 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -326,6 +326,11 @@ enum AVPixelFormat { */ AV_PIX_FMT_D3D11, + AV_PIX_FMT_YUV444F32LE, ///< IEEE-754 single precision planar YUV 4:4:4, 96bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444F32BE, ///< IEEE-754 single precision planar YUV 4:4:4, 96bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUVA444F32LE, ///< IEEE-754 single precision planar YUV 4:4:4, 128bpp, (1 Cr & Cb sample per 1x1 Y & A sample), little-endian + AV_PIX_FMT_YUVA444F32BE, ///< IEEE-754 single precision planar YUV 4:4:4, 128bpp, (1 Cr & Cb sample per 1x1 Y & A sample), big-endian + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -389,6 +394,8 @@ enum AVPixelFormat { #define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) #define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) +#define AV_PIX_FMT_YUV444F32 AV_PIX_FMT_NE(YUV444F32BE, YUV444F32LE) +#define AV_PIX_FMT_YUVA444F32 AV_PIX_FMT_NE(YUVA444F32BE, YUVA444F32LE) #define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) #define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) diff --git a/libswscale/utils.c b/libswscale/utils.c index 17c996734a..892b219049 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -254,6 +254,10 @@ static const FormatEntry format_entries[AV_PIX_FMT_NB] = { [AV_PIX_FMT_P010BE] = { 1, 1 }, [AV_PIX_FMT_P016LE] = { 1, 0 }, [AV_PIX_FMT_P016BE] = { 1, 0 }, + [AV_PIX_FMT_YUV444F32LE] = { 0, 0 }, + [AV_PIX_FMT_YUV444F32BE] = { 0, 0 }, + [AV_PIX_FMT_YUVA444F32LE] = { 0, 0 }, + [AV_PIX_FMT_YUVA444F32BE] = { 0, 0 }, }; int sws_isSupportedInput(enum AVPixelFormat pix_fmt)