[x265] [PATCH Alpha 1/10] Add support for Alpha channel CLI
Anusuya Kumarasamy
anusuya.kumarasamy at multicorewareinc.com
Mon Aug 5 10:48:54 UTC 2024
>From 58f011df8ce0c5ac2a333d1ee25f0843caf2ee07 Mon Sep 17 00:00:00 2001
From: AnusuyaKumarasamy <anusuya.kumarasamy at multicorewareinc.com>
Date: Fri, 5 Jul 2024 16:11:02 +0530
Subject: [PATCH] Add support for Alpha channel CLI
---
doc/reST/cli.rst | 11 +++++++++++
source/CMakeLists.txt | 2 +-
source/common/param.cpp | 16 ++++++++++++++++
source/x265.h | 4 ++++
source/x265cli.cpp | 1 +
source/x265cli.h | 1 +
6 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/doc/reST/cli.rst b/doc/reST/cli.rst
index c57491b63..4d5ac1a15 100755
--- a/doc/reST/cli.rst
+++ b/doc/reST/cli.rst
@@ -2882,4 +2882,15 @@ See section :ref:`svthevc <SvtHevc>` for more
details.
**CLI_ONLY**
+Alpha Encode Options
+===================
+
+.. option:: --alpha
+
+ Enable alpha layer encoding support in x265.This option can be enabled
+ only when ENABLE_ALPHA is set during the make of x265.When enabled
+ --alpha always expects an input file in YUVA420 format.
+
+**CLI_ONLY**
+
.. vim: noet
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index bed98bb37..9a215cbbf 100755
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -31,7 +31,7 @@ option(NATIVE_BUILD "Target the build CPU" OFF)
option(STATIC_LINK_CRT "Statically link C runtime for release builds" OFF)
mark_as_advanced(FPROFILE_USE FPROFILE_GENERATE NATIVE_BUILD)
# X265_BUILD must be incremented each time the public API is changed
-set(X265_BUILD 209)
+set(X265_BUILD 210)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
diff --git a/source/common/param.cpp b/source/common/param.cpp
index 5b2922587..e05e79eaf 100755
--- a/source/common/param.cpp
+++ b/source/common/param.cpp
@@ -392,6 +392,10 @@ void x265_param_default(x265_param* param)
param->bEnableTemporalFilter = 0;
param->temporalFilterStrength = 0.95;
+ /*Alpha Channel Encoding*/
+ param->bEnableAlpha = 0;
+ param->numScalableLayers = 1;
+
#ifdef SVT_HEVC
param->svtHevcParam = svtParam;
svt_param_default(param);
@@ -1444,6 +1448,14 @@ int x265_param_parse(x265_param* p, const char*
name, const char* value)
OPT("film-grain") p->filmGrain = (char* )value;
OPT("mcstf") p->bEnableTemporalFilter = atobool(value);
OPT("sbrc") p->bEnableSBRC = atobool(value);
+ OPT("alpha")
+ {
+ if (atobool(value))
+ {
+ p->bEnableAlpha = 1;
+ p->numScalableLayers = 2;
+ }
+ }
else
return X265_PARAM_BAD_NAME;
}
@@ -2079,6 +2091,7 @@ void x265_print_params(x265_param* param)
TOOLOPT(param->rc.bStatWrite, "stats-write");
TOOLOPT(param->rc.bStatRead, "stats-read");
TOOLOPT(param->bSingleSeiNal, "single-sei");
+ TOOLOPT(param->numScalableLayers > 1, "alpha");
#if ENABLE_HDR10_PLUS
TOOLOPT(param->toneMapFile != NULL, "dhdr10-info");
#endif
@@ -2343,6 +2356,7 @@ char *x265_param2string(x265_param* p, int padx, int
pady)
if (p->filmGrain)
s += sprintf(s, " film-grain=%s", p->filmGrain); // Film grain
characteristics model filename
BOOL(p->bEnableTemporalFilter, "mcstf");
+ BOOL(p->bEnableAlpha, "alpha");
BOOL(p->bEnableSBRC, "sbrc");
#undef BOOL
return buf;
@@ -2864,6 +2878,8 @@ void x265_copy_params(x265_param* dst, x265_param*
src)
dst->confWinRightOffset = src->confWinRightOffset;
dst->confWinBottomOffset = src->confWinBottomOffset;
dst->bliveVBV2pass = src->bliveVBV2pass;
+ dst->bEnableAlpha = src->bEnableAlpha;
+ dst->numScalableLayers = src->numScalableLayers;
if (src->videoSignalTypePreset) dst->videoSignalTypePreset =
strdup(src->videoSignalTypePreset);
else dst->videoSignalTypePreset = NULL;
diff --git a/source/x265.h b/source/x265.h
index c48b8648a..b6e410435 100644
--- a/source/x265.h
+++ b/source/x265.h
@@ -2269,6 +2269,10 @@ typedef struct x265_param
/*SBRC*/
int bEnableSBRC;
int mcstfFrameRange;
+
+ /*Alpha channel encoding*/
+ int bEnableAlpha;
+ int numScalableLayers;
} x265_param;
/* x265_param_alloc:
diff --git a/source/x265cli.cpp b/source/x265cli.cpp
index 861595a5a..2f8a150d4 100755
--- a/source/x265cli.cpp
+++ b/source/x265cli.cpp
@@ -374,6 +374,7 @@ namespace X265_NS {
H0(" --[no-]frame-dup Enable Frame duplication.
Default %s\n", OPT(param->bEnableFrameDuplication));
H0(" --dup-threshold <integer> PSNR threshold for Frame
duplication. Default %d\n", param->dupThreshold);
H0(" --[no-]mcstf Enable GOP based temporal
filter. Default %d\n", param->bEnableTemporalFilter);
+ H0(" --alpha Enable alpha channel support.
Default %d\n", param->bEnableAlpha);
#ifdef SVT_HEVC
H0(" --[no]svt Enable SVT HEVC encoder
%s\n", OPT(param->bEnableSvtHevc));
H0(" --[no-]svt-hme Enable Hierarchial motion
estimation(HME) in SVT HEVC encoder \n");
diff --git a/source/x265cli.h b/source/x265cli.h
index b5fe327a6..b4e91a137 100644
--- a/source/x265cli.h
+++ b/source/x265cli.h
@@ -358,6 +358,7 @@ static const struct option long_options[] =
{ "dup-threshold", required_argument, NULL, 0 },
{ "mcstf", no_argument, NULL, 0 },
{ "no-mcstf", no_argument, NULL, 0 },
+ { "alpha", no_argument, NULL, 0 },
#ifdef SVT_HEVC
{ "svt", no_argument, NULL, 0 },
{ "no-svt", no_argument, NULL, 0 },
--
2.36.0.windows.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20240805/fb860556/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Add-support-for-Alpha-channel-CLI.patch
Type: application/octet-stream
Size: 5663 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20240805/fb860556/attachment-0001.obj>
More information about the x265-devel
mailing list