media-libs/x265: add 4.1, add vmaf

add vmaf
add aarch64 asm dep
rebase patches

Bug: https://bugs.gentoo.org/951836
Closes: https://bugs.gentoo.org/943008
Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/44229
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Paul Zander
2024-09-21 00:52:47 +02:00
committed by Sam James
parent 72f38bc8bf
commit 18bb2d8fd5
10 changed files with 436 additions and 53 deletions

View File

@@ -1 +1,2 @@
DIST x265-3.6.tar.gz 1655889 BLAKE2B 2598421e2e21974998b0b20895dc7e12dbf6ebe1b6c23bb5a7710b575d3db773335cd1f0b3ef110b79cf4d6dd01e543e9807a0509963497edc25f617f80c29f3 SHA512 570429c3f0b560b2f946ac9baba97d66d7d6485e46eb695b17003b5913028f62d35822477633e911cd3ea60e6ce0ecc7d9d82de7d8257272f9ca7b43761438be
DIST x265-4.1.tar.gz 1725279 BLAKE2B 0957c121aea761f9dc6549b624d03f31114dfe37a947780194459c37532e2ba05d94de9484ad2233819e0431030eb0c794894030df0a3aeab73df43a3d62ad6e SHA512 5af5b958ff507f96a52813a6b72847c9fbc555bf95af287ae7f011055338266fb647dfea3b7789730c7f5c746f7e6cb7d9395ba10cbe43eb5034d3ed99730c3f

View File

@@ -1,7 +1,17 @@
Namespace functions for multi-bitdepth builds so that libraries are self-contained.
From 6500375a8b2eab7250f5ba59961f441aeaef56c1 Mon Sep 17 00:00:00 2001
From: Paul Zander <negril.nx@gmail.com>
Date: Tue, 24 Jun 2025 17:02:25 +0200
Subject: [PATCH] Namespace functions for multi-bitdepth builds
so that libraries are self-contained.
Signed-off-by: Paul Zander <negril.nx@gmail.com>
diff --git a/common/param.cpp b/common/param.cpp
index a35b063..1a3666f 100755
--- a/common/param.cpp
+++ b/common/param.cpp
@@ -102,7 +102,7 @@ x265_param *x265_param_alloc()
@@ -103,7 +103,7 @@ x265_param *x265_param_alloc()
void x265_param_free(x265_param* p)
{
@@ -10,9 +20,11 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
#ifdef SVT_HEVC
x265_free(p->svtHevcParam);
#endif
diff --git a/common/param.h b/common/param.h
index f504ec9..0d01e21 100644
--- a/common/param.h
+++ b/common/param.h
@@ -55,6 +55,18 @@ int x265_param_apply_profile(x265_param *, const char *profile);
@@ -55,6 +55,22 @@ int x265_param_apply_profile(x265_param *, const char *profile);
int x265_param_parse(x265_param *p, const char *name, const char *value);
int x265_scenecut_aware_qp_param_parse(x265_param* p, const char* name, const char* value);
int x265_zone_param_parse(x265_param* p, const char* name, const char* value);
@@ -28,9 +40,15 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
+int x265_encoder_reconfig(x265_encoder *, x265_param *);
+x265_picture *x265_picture_alloc(void);
+void x265_picture_init(x265_param *param, x265_picture *pic);
+#if ENABLE_LIBVMAF
+double x265_calculate_vmafscore(x265_param*, x265_vmaf_data*);
+double x265_calculate_vmaf_framelevelscore(x265_param*, x265_vmaf_framedata*);
+#endif
#define PARAM_NS X265_NS
#endif
}
diff --git a/common/threadpool.cpp b/common/threadpool.cpp
index b3505e5..b565093 100644
--- a/common/threadpool.cpp
+++ b/common/threadpool.cpp
@@ -25,6 +25,7 @@
@@ -42,17 +60,19 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
#include <new>
@@ -314,7 +315,7 @@ ThreadPool* ThreadPool::allocThreadPools(x265_param* p, int& numPools, bool isTh
sprintf(nextCount, "%d", cpusPerNode[i]);
snprintf(nextCount, sizeof(nextCount), "%d", cpusPerNode[i]);
strcat(poolString, nextCount);
}
- x265_param_parse(p, "pools", poolString);
+ PARAM_NS::x265_param_parse(p, "pools", poolString);
}
#endif
if (p->numaPools && *p->numaPools)
if (strlen(p->numaPools))
diff --git a/encoder/api.cpp b/encoder/api.cpp
index e89f0cf..e19c6c6 100644
--- a/encoder/api.cpp
+++ b/encoder/api.cpp
@@ -106,9 +106,9 @@ x265_encoder *x265_encoder_open(x265_param *p)
@@ -109,9 +109,9 @@ x265_encoder *x265_encoder_open(x265_param *p)
if (p->rc.zoneCount || p->rc.zonefileCount)
{
int zoneCount = p->rc.zonefileCount ? p->rc.zonefileCount : p->rc.zoneCount;
@@ -65,16 +85,16 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
x265_copy_params(param, p);
@@ -214,7 +214,7 @@ x265_encoder *x265_encoder_open(x265_param *p)
@@ -215,7 +215,7 @@ x265_encoder *x265_encoder_open(x265_param *p)
/* Try to open CSV file handle */
if (encoder->m_param->csvfn)
if (strlen(encoder->m_param->csvfn))
{
- encoder->m_param->csvfpt = x265_csvlog_open(encoder->m_param);
+ encoder->m_param->csvfpt = PARAM_NS::x265_csvlog_open(encoder->m_param);
if (!encoder->m_param->csvfpt)
{
x265_log(encoder->m_param, X265_LOG_ERROR, "Unable to open CSV log file <%s>, aborting\n", encoder->m_param->csvfn);
@@ -319,7 +319,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
@@ -321,7 +321,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
if (encoder->m_latestParam->rc.zoneCount || encoder->m_latestParam->rc.zonefileCount)
{
int zoneCount = encoder->m_latestParam->rc.zonefileCount ? encoder->m_latestParam->rc.zonefileCount : encoder->m_latestParam->rc.zoneCount;
@@ -83,16 +103,61 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
x265_copy_params(&save, encoder->m_latestParam);
int ret = encoder->reconfigureParam(encoder->m_latestParam, param_in);
@@ -604,7 +604,7 @@ fail:
@@ -329,7 +329,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
{
/* reconfigure failed, recover saved param set */
x265_copy_params(encoder->m_latestParam, &save);
- x265_zone_free(&save);
+ PARAM_NS::x265_zone_free(&save);
ret = -1;
}
else
@@ -342,7 +342,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
if (encoder->m_scalingList.parseScalingList(encoder->m_latestParam->scalingLists))
{
x265_copy_params(encoder->m_latestParam, &save);
- x265_zone_free(&save);
+ PARAM_NS::x265_zone_free(&save);
return -1;
}
encoder->m_scalingList.setupQuantMatrices(encoder->m_param->internalCsp);
@@ -351,7 +351,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
{
x265_log(encoder->m_param, X265_LOG_ERROR, "Repeat headers is turned OFF, cannot reconfigure scalinglists\n");
x265_copy_params(encoder->m_latestParam, &save);
- x265_zone_free(&save);
+ PARAM_NS::x265_zone_free(&save);
return -1;
}
}
@@ -378,7 +378,7 @@ int x265_encoder_reconfig(x265_encoder* enc, x265_param* param_in)
/* Zones support modifying num of Refs. Requires determining level at each zone start*/
if (encoder->m_param->rc.zonefileCount)
determineLevel(*encoder->m_latestParam, encoder->m_vps);
- x265_zone_free(&save);
+ PARAM_NS::x265_zone_free(&save);
return ret;
}
@@ -617,7 +617,7 @@ fail:
if (numEncoded && encoder->m_param->csvLogLevel && encoder->m_outputCount >= encoder->m_latestParam->chunkStart)
{
for (int layer = 0; layer < encoder->m_param->numLayers; layer++)
- x265_csvlog_frame(encoder->m_param, pic_out[layer]);
+ PARAM_NS::x265_csvlog_frame(encoder->m_param, pic_out[layer]);
- x265_csvlog_frame(encoder->m_param, pic_out + layer);
+ PARAM_NS::x265_csvlog_frame(encoder->m_param, pic_out + layer);
}
if (numEncoded < 0)
@@ -646,7 +646,7 @@ void x265_vmaf_encoder_log(x265_encoder* enc, int argc, char **argv, x265_param
@@ -649,7 +649,7 @@ void x265_vmaf_encoder_log(x265_encoder* enc, int argc, char **argv, x265_param
{
Encoder *encoder = static_cast<Encoder*>(enc);
x265_stats stats;
- stats.aggregateVmafScore = x265_calculate_vmafscore(param, vmafdata);
+ stats.aggregateVmafScore = PARAM_NS::x265_calculate_vmafscore(param, vmafdata);
if(vmafdata->reference_file)
fclose(vmafdata->reference_file);
if(vmafdata->distorted_file)
@@ -659,7 +659,7 @@ void x265_vmaf_encoder_log(x265_encoder* enc, int argc, char **argv, x265_param
encoder->fetchStats(&stats, sizeof(stats));
int padx = encoder->m_sps.conformanceWindow.rightOffset;
int pady = encoder->m_sps.conformanceWindow.bottomOffset;
@@ -101,7 +166,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
}
#endif
@@ -662,7 +662,7 @@ void x265_encoder_log(x265_encoder* enc, int argc, char **argv)
@@ -675,7 +675,7 @@ void x265_encoder_log(x265_encoder* enc, int argc, char **argv)
for (int layer = 0; layer < encoder->m_param->numLayers; layer++)
{
encoder->fetchStats(stats, sizeof(stats[layer]), layer);
@@ -110,7 +175,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
}
}
@@ -884,7 +884,7 @@ void x265_alloc_analysis_data(x265_param *param, x265_analysis_data* analysis)
@@ -897,7 +897,7 @@ void x265_alloc_analysis_data(x265_param *param, x265_analysis_data* analysis)
return;
fail:
@@ -119,6 +184,19 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
void x265_free_analysis_data(x265_param *param, x265_analysis_data* analysis)
@@ -1099,8 +1099,8 @@ static const x265_api libapi =
&x265_dither_image,
&x265_set_analysis_data,
#if ENABLE_LIBVMAF
- &x265_calculate_vmafscore,
- &x265_calculate_vmaf_framelevelscore,
+ &PARAM_NS::x265_calculate_vmafscore,
+ &PARAM_NS::x265_calculate_vmaf_framelevelscore,
&x265_vmaf_encoder_log,
#endif
&PARAM_NS::x265_zone_param_parse
diff --git a/encoder/encoder.cpp b/encoder/encoder.cpp
index 2e65cb1..db09b64 100644
--- a/encoder/encoder.cpp
+++ b/encoder/encoder.cpp
@@ -217,8 +217,8 @@ void Encoder::create()
@@ -132,7 +210,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_dupBuffer[i]->dupPlane = NULL;
m_dupBuffer[i]->dupPlane = X265_MALLOC(char, framesize);
m_dupBuffer[i]->dupPic->planes[0] = m_dupBuffer[i]->dupPlane;
@@ -774,7 +774,7 @@ int Encoder::setAnalysisData(x265_analysis_data *analysis_data, int poc, uint32_
@@ -779,7 +779,7 @@ int Encoder::setAnalysisData(x265_analysis_data *analysis_data, int poc, uint32_
curFrame->m_analysisData = (*analysis_data);
curFrame->m_analysisData.numCUsInFrame = widthInCU * heightInCU;
curFrame->m_analysisData.numPartitions = m_param->num4x4Partitions;
@@ -141,7 +219,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
if (m_param->maxCUSize == 16)
{
if (analysis_data->sliceType == X265_TYPE_IDR || analysis_data->sliceType == X265_TYPE_I)
@@ -881,7 +881,7 @@ void Encoder::destroy()
@@ -886,7 +886,7 @@ void Encoder::destroy()
for (uint32_t i = 0; i < DUP_BUFFER; i++)
{
X265_FREE(m_dupBuffer[i]->dupPlane);
@@ -150,34 +228,34 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
X265_FREE(m_dupBuffer[i]);
}
@@ -1491,7 +1491,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -1414,7 +1414,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
if (*m_exportedPic)
{
if (!m_param->bUseAnalysisFile && m_param->analysisSave)
if (!m_param->bUseAnalysisFile && strlen(m_param->analysisSave))
- x265_free_analysis_data(m_param, &m_exportedPic[0]->m_analysisData);
+ PARAM_NS::x265_free_analysis_data(m_param, &m_exportedPic[0]->m_analysisData);
for (int i = 0; i < m_param->numLayers; i++)
{
@@ -1973,7 +1973,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -1907,7 +1907,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
/* Free up inputPic->analysisData since it has already been used */
if ((m_param->analysisLoad && !m_param->analysisSave) || ((m_param->bAnalysisType == AVC_INFO) && slice->m_sliceType != I_SLICE))
if ((strlen(m_param->analysisLoad) && !strlen(m_param->analysisSave)) || ((m_param->bAnalysisType == AVC_INFO) && slice->m_sliceType != I_SLICE))
- x265_free_analysis_data(m_param, &outFrame->m_analysisData);
+ PARAM_NS::x265_free_analysis_data(m_param, &outFrame->m_analysisData);
if (pic_out[sLayer])
if (pic_out)
{
PicYuv* recpic = outFrame->m_reconPic[0];
@@ -2052,7 +2052,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
writeAnalysisFile(&pic_out[sLayer]->analysisData, *outFrame->m_encData);
pic_out[sLayer]->analysisData.saveParam = pic_out[sLayer]->analysisData.saveParam;
@@ -1986,7 +1986,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
writeAnalysisFile(&pic_out[sLayer].analysisData, *outFrame->m_encData);
pic_out[sLayer].analysisData.saveParam = pic_out[sLayer].analysisData.saveParam;
if (m_param->bUseAnalysisFile)
- x265_free_analysis_data(m_param, &pic_out[sLayer]->analysisData);
+ PARAM_NS::x265_free_analysis_data(m_param, &pic_out[sLayer]->analysisData);
- x265_free_analysis_data(m_param, &pic_out[sLayer].analysisData);
+ PARAM_NS::x265_free_analysis_data(m_param, &pic_out[sLayer].analysisData);
}
}
if (m_param->rc.bStatWrite && (m_param->analysisMultiPassRefine || m_param->analysisMultiPassDistortion))
@@ -2067,7 +2067,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -2001,7 +2001,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
writeAnalysisFileRefine(&outFrame->m_analysisData, *outFrame->m_encData);
}
if (m_param->analysisMultiPassRefine || m_param->analysisMultiPassDistortion)
@@ -186,7 +264,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
if (m_param->internalCsp == X265_CSP_I400)
{
if (slice->m_sliceType == P_SLICE)
@@ -2250,7 +2250,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -2186,7 +2186,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
uint32_t heightInCU = (m_param->sourceHeight + m_param->maxCUSize - 1) >> m_param->maxLog2CUSize;
frameEnc[0]->m_analysisData.numCUsInFrame = widthInCU * heightInCU;
frameEnc[0]->m_analysisData.numPartitions = m_param->num4x4Partitions;
@@ -195,7 +273,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
frameEnc[0]->m_analysisData.poc = frameEnc[0]->m_poc;
if (m_param->rc.bStatRead)
readAnalysisFile(&frameEnc[0]->m_analysisData, frameEnc[0]->m_poc, frameEnc[0]->m_lowres.sliceType);
@@ -2261,7 +2261,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -2197,7 +2197,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
for (int i = 0; i < m_param->rc.zonefileCount; i++)
{
if (m_param->rc.zones[i].startFrame == frameEnc[0]->m_poc)
@@ -204,7 +282,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
}
@@ -2408,7 +2408,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture** pic_out)
@@ -2371,7 +2371,7 @@ int Encoder::encode(const x265_picture* pic_in, x265_picture* pic_out)
analysis->numCUsInFrame = numCUsInFrame;
analysis->numCuInHeight = heightInCU;
analysis->numPartitions = m_param->num4x4Partitions;
@@ -213,7 +291,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
}
if (m_param->bEnableTemporalSubLayers > 2)
{
@@ -4711,7 +4711,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -4669,7 +4669,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
else if (fread(val, size, readSize, fileOffset) != readSize)\
{\
x265_log(NULL, X265_LOG_ERROR, "Error reading analysis data\n");\
@@ -222,7 +300,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_aborted = true;\
return;\
}\
@@ -4747,7 +4747,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -4705,7 +4705,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
if (poc != curPoc || feof(m_analysisFileIn))
{
x265_log(NULL, X265_LOG_WARNING, "Error reading analysis data: Cannot find POC %d\n", curPoc);
@@ -231,7 +309,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
return;
}
}
@@ -4781,7 +4781,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -4739,7 +4739,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
if (m_param->scaleFactor)
analysis->numPartitions *= factor;
/* Memory is allocated for inter and intra analysis data based on the slicetype */
@@ -240,7 +318,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
if (m_param->ctuDistortionRefine == CTU_DISTORTION_INTERNAL)
{
@@ -5034,7 +5034,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -4992,7 +4992,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
else if (fread(val, size, readSize, fileOffset) != readSize)\
{\
x265_log(NULL, X265_LOG_ERROR, "Error reading analysis data\n");\
@@ -249,7 +327,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_aborted = true;\
return;\
}\
@@ -5071,7 +5071,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -5029,7 +5029,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
if (poc != curPoc || feof(m_analysisFileIn))
{
x265_log(NULL, X265_LOG_WARNING, "Error reading analysis data: Cannot find POC %d\n", curPoc);
@@ -258,7 +336,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
return;
}
}
@@ -5102,7 +5102,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
@@ -5060,7 +5060,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, const x
analysis->numCuInHeight = cuLoc.heightInCU;
/* Memory is allocated for inter and intra analysis data based on the slicetype */
@@ -267,7 +345,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
if (m_param->ctuDistortionRefine == CTU_DISTORTION_INTERNAL)
{
@@ -5717,7 +5717,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, int sli
@@ -5675,7 +5675,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, int sli
if (fread(val, size, readSize, fileOffset) != readSize)\
{\
x265_log(NULL, X265_LOG_ERROR, "Error reading analysis 2 pass data\n"); \
@@ -276,7 +354,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_aborted = true; \
return; \
}\
@@ -5731,7 +5731,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, int sli
@@ -5689,7 +5689,7 @@ void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc, int sli
if (poc != curPoc || feof(m_analysisFileIn))
{
x265_log(NULL, X265_LOG_WARNING, "Error reading analysis 2 pass data: Cannot find POC %d\n", curPoc);
@@ -285,7 +363,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
return;
}
/* Now arrived at the right frame, read the record */
@@ -5838,7 +5838,7 @@ void Encoder::writeAnalysisFile(x265_analysis_data* analysis, FrameData &curEncD
@@ -5796,7 +5796,7 @@ void Encoder::writeAnalysisFile(x265_analysis_data* analysis, FrameData &curEncD
if (fwrite(val, size, writeSize, fileOffset) < writeSize)\
{\
x265_log(NULL, X265_LOG_ERROR, "Error writing analysis data\n");\
@@ -294,7 +372,7 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_aborted = true;\
return;\
}\
@@ -6060,7 +6060,7 @@ void Encoder::writeAnalysisFileRefine(x265_analysis_data* analysis, FrameData &c
@@ -6018,7 +6018,7 @@ void Encoder::writeAnalysisFileRefine(x265_analysis_data* analysis, FrameData &c
if (fwrite(val, size, writeSize, fileOffset) < writeSize)\
{\
x265_log(NULL, X265_LOG_ERROR, "Error writing analysis 2 pass data\n"); \
@@ -303,3 +381,19 @@ Namespace functions for multi-bitdepth builds so that libraries are self-contain
m_aborted = true; \
return; \
}\
diff --git a/encoder/frameencoder.cpp b/encoder/frameencoder.cpp
index 5749f99..fbd0407 100644
--- a/encoder/frameencoder.cpp
+++ b/encoder/frameencoder.cpp
@@ -2426,7 +2426,7 @@ void FrameEncoder::vmafFrameLevelScore()
vmafframedata->internalBitDepth = m_param->internalBitDepth;
vmafframedata->reference_frame = fenc;
vmafframedata->distorted_frame = recon;
- fenc->m_vmafScore = x265_calculate_vmaf_framelevelscore(m_param,vmafframedata);
+ fenc->m_vmafScore = PARAM_NS::x265_calculate_vmaf_framelevelscore(m_param,vmafframedata);
if (vmafframedata)
x265_free(vmafframedata);
--
2.50.0

View File

@@ -0,0 +1,24 @@
From 8a327700139481378a5b4d25e349c059190057c2 Mon Sep 17 00:00:00 2001
From: Paul Zander <negril.nx+gentoo@gmail.com>
Date: Sat, 21 Sep 2024 19:17:22 +0200
Subject: [PATCH] enable vmaf for shared lib
Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a203f4f..c14767f 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -814,6 +814,9 @@ if(ENABLE_SHARED)
endif()
if(EXTRA_LIB)
target_link_libraries(x265-shared ${EXTRA_LIB})
+ endif()
+ if(ENABLE_LIBVMAF)
+ target_link_libraries(x265-shared ${VMAF})
endif()
target_link_libraries(x265-shared ${PLATFORM_LIBS})
if(SVTHEVC_FOUND)
--
2.46.0

View File

@@ -8,6 +8,7 @@
<flag name="10bit">Add support for producing 10bits HEVC.</flag>
<flag name="12bit">Add support for producing 12bits HEVC.</flag>
<flag name="numa">Build with support for NUMA nodes.</flag>
<flag name="vmaf">Enable Netflix's Perceptual video quality assessment via <pkg>media-libs/libvmaf</pkg></flag>
</use>
<upstream>
<remote-id type="bitbucket">multicoreware/x265_git</remote-id>

View File

@@ -0,0 +1,226 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake-multilib flag-o-matic multibuild
DESCRIPTION="Library for encoding video streams into the H.265/HEVC format"
HOMEPAGE="https://www.x265.org/ https://bitbucket.org/multicoreware/x265_git/"
if [[ ${PV} = 9999* ]]; then
inherit git-r3
EGIT_REPO_URI="https://bitbucket.org/multicoreware/x265_git/"
MY_P="${PN}-${PV}"
else
SRC_URI="https://bitbucket.org/multicoreware/x265_git/downloads/${PN}_${PV}.tar.gz -> ${PN}-${PV}.tar.gz"
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~x86"
MY_P="${PN}_${PV}"
fi
S="${WORKDIR}/${MY_P}/source"
unset MY_P
LICENSE="GPL-2"
# subslot = libx265 soname
SLOT="0/215"
IUSE="+10bit +12bit cpu_flags_ppc_vsx2 numa test vmaf"
RESTRICT="!test? ( test )"
RDEPEND="
numa? ( >=sys-process/numactl-2.0.10-r1[${MULTILIB_USEDEP}] )
vmaf? ( media-libs/libvmaf[${MULTILIB_USEDEP}] )
"
DEPEND="${RDEPEND}"
ASM_DEPEND=">=dev-lang/nasm-2.13"
BDEPEND="
abi_x86_32? ( ${ASM_DEPEND} )
abi_x86_64? ( ${ASM_DEPEND} )
arm64? ( ${ASM_DEPEND} )
"
PATCHES=(
"${FILESDIR}/${PN}-9999-arm.patch"
"${FILESDIR}/neon.patch"
"${FILESDIR}/tests.patch"
"${FILESDIR}/${PN}-3.5-r5-cpp-std.patch"
"${FILESDIR}/${PN}-3.5-r5-gcc15.patch"
"${FILESDIR}/${PN}-3.6-cmake-cleanup.patch"
"${FILESDIR}/${PN}-4.1-test-ns.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup_2.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup_3.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup_4.patch"
"${FILESDIR}/${PN}-4.1-vmaf.patch"
)
pkg_setup() {
variants=(
$(usev 12bit "main12")
$(usev 10bit "main10")
)
}
src_prepare() {
cmake_src_prepare
sed -r -e 's/(set\(ARM_ARGS -O3)/# \1/g' -i CMakeLists.txt || die
# TODO check so_name via
# X265_BUILD 215
}
# By default, the library and the encoder is configured for only one output bit
# depth. Meaning, one has to rebuild libx265 if (s)he wants to produce HEVC
# files with a different bit depth, which is annoying. However, upstream
# supports proper namespacing for 8bits, 10bits & 12bits HEVC and linking all
# that together so that the resulting library can produce all three of them
# instead of only one.
# The API requires the bit depth parameter, so that libx265 can then chose which
# variant of the encoder to use.
# To achieve this, we have to build one (static) library for each non-main
# variant, and link it into the main library.
# Upstream documents using the 8bit variant as main library, hence we do not
# allow disabling it
x265_variant_src_configure() {
einfo "Configuring variant: ${MULTIBUILD_VARIANT} for ABI: ${ABI}"
local mycmakeargs=(
"${mycmakeargs[@]}"
-DHIGH_BIT_DEPTH=ON
-DEXPORT_C_API=OFF
-DENABLE_SHARED=OFF
-DENABLE_CLI=OFF
)
case "${MULTIBUILD_VARIANT}" in
"main12")
mycmakeargs+=(
-DMAIN12=ON
)
;;
"main10")
mycmakeargs+=(
-DENABLE_HDR10_PLUS=ON
)
;;
*)
die "Unknown variant: ${MULTIBUILD_VARIANT}";;
esac
cmake_src_configure
}
multilib_src_configure() {
# -Werror=odr
# https://bugs.gentoo.org/875854
# https://bitbucket.org/multicoreware/x265_git/issues/937/build-fails-with-lto
filter-lto
local mycmakeargs=(
-DENABLE_PIC=ON
-DENABLE_LIBNUMA="$(usex numa)"
-DENABLE_ALPHA="yes"
-DENABLE_MULTIVIEW="yes"
-DENABLE_SVT_HEVC="no" # broken
-DENABLE_SCC_EXT="yes"
-DENABLE_LIBVMAF="$(usex vmaf)"
-DENABLE_VTUNE="no" # missing Vtune
-DGIT_ARCHETYPE=1 #814116
-DLIB_INSTALL_DIR="$(get_libdir)"
)
if ! multilib_is_native_abi; then
mycmakeargs+=(
-DENABLE_CLI="no"
)
fi
# Unfortunately, the asm for x86/x32/arm isn't PIC-safe.
# x86 # Bug #528202, bug #913412
# x32 # bug #510890
if [[ ${ABI} = x86 ]] || [[ ${ABI} = x32 ]] || [[ ${ABI} = arm ]] ; then
mycmakeargs+=(
-DENABLE_ASSEMBLY=OFF
# ENABLE_TESTS requires ENABLE_ASSEMBLY=ON to be visible
# source/CMakeLists.txt:858
# -DENABLE_TESTS="no" #728748
)
else
mycmakeargs+=(
-DENABLE_TESTS="$(usex test)"
)
fi
if [[ ${ABI} = ppc* ]] ; then
# upstream uses mix of altivec + power8 vectors
# it's impossible to enable altivec without CPU_POWER8
# and it does not work on ppc32
# so we toggle both variables together
mycmakeargs+=(
-DCPU_POWER8="$(usex cpu_flags_ppc_vsx2)"
-DENABLE_ALTIVEC="$(usex cpu_flags_ppc_vsx2)"
)
fi
local MULTIBUILD_VARIANTS=( "${variants[@]}" )
if [[ "${#MULTIBUILD_VARIANTS[@]}" -gt 1 ]] ; then
multibuild_foreach_variant x265_variant_src_configure
local liblist="" v=
for v in "${MULTIBUILD_VARIANTS[@]}" ; do
ln -s "${BUILD_DIR}-${v}/libx265.a" "${BUILD_DIR}/libx265_${v}.a" || die
liblist+="libx265_${v}.a;"
done
mycmakeargs+=(
-DEXTRA_LIB="${liblist}"
-DEXTRA_LINK_FLAGS="-L${BUILD_DIR}"
-DLINKED_10BIT="$(usex 10bit)"
-DLINKED_12BIT="$(usex 12bit)"
)
fi
cmake_src_configure
}
multilib_src_compile() {
local MULTIBUILD_VARIANTS=( "${variants[@]}" )
if [[ "${#MULTIBUILD_VARIANTS[@]}" -gt 1 ]] ; then
multibuild_foreach_variant cmake_src_compile
fi
cmake_src_compile
}
x265_variant_src_test() {
if [[ -x "${BUILD_DIR}/test/TestBench" ]] ; then
"${BUILD_DIR}/test/TestBench" || die
else
einfo "Unit tests check only assembly."
einfo "You do not seem to have any for ABI=${ABI}, x265 variant=${MULTIBUILD_VARIANT}"
einfo "Skipping tests."
fi
}
multilib_src_test() {
local MULTIBUILD_VARIANTS=( "${variants[@]}" )
if [[ "${#MULTIBUILD_VARIANTS[@]}" -gt 1 ]] ; then
multibuild_foreach_variant x265_variant_src_test
fi
x265_variant_src_test
}
multilib_src_install() {
cmake_src_install
}
multilib_src_install_all() {
dodoc -r "${S}/../doc/"*
# we don't install *.a files for all variants,
# so just delete these files instead of pretending
# real USE=static-libs support
find "${ED}" -name "*.a" -delete || die
}

View File

@@ -1,9 +1,9 @@
# Copyright 1999-2024 Gentoo Authors
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake flag-o-matic multilib-minimal multibuild
inherit cmake-multilib flag-o-matic multibuild
DESCRIPTION="Library for encoding video streams into the H.265/HEVC format"
HOMEPAGE="https://www.x265.org/ https://bitbucket.org/multicoreware/x265_git/"
@@ -23,16 +23,21 @@ unset MY_P
LICENSE="GPL-2"
# subslot = libx265 soname
SLOT="0/212"
IUSE="+10bit +12bit cpu_flags_ppc_vsx2 numa test"
SLOT="0/215"
IUSE="+10bit +12bit cpu_flags_ppc_vsx2 numa test vmaf"
RESTRICT="!test? ( test )"
RDEPEND="numa? ( >=sys-process/numactl-2.0.10-r1[${MULTILIB_USEDEP}] )"
RDEPEND="
numa? ( >=sys-process/numactl-2.0.10-r1[${MULTILIB_USEDEP}] )
vmaf? ( media-libs/libvmaf[${MULTILIB_USEDEP}] )
"
DEPEND="${RDEPEND}"
ASM_DEPEND=">=dev-lang/nasm-2.13"
BDEPEND="
abi_x86_32? ( ${ASM_DEPEND} )
abi_x86_64? ( ${ASM_DEPEND} )"
abi_x86_64? ( ${ASM_DEPEND} )
arm64? ( ${ASM_DEPEND} )
"
PATCHES=(
"${FILESDIR}/${PN}-9999-arm.patch"
@@ -40,9 +45,13 @@ PATCHES=(
"${FILESDIR}/tests.patch"
"${FILESDIR}/${PN}-3.5-r5-cpp-std.patch"
"${FILESDIR}/${PN}-3.5-r5-gcc15.patch"
"${FILESDIR}/${PN}-9999-test-ns.patch"
"${FILESDIR}/${PN}-3.6-cmake-cleanup.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup.patch"
"${FILESDIR}/${PN}-4.1-test-ns.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup_2.patch"
"${FILESDIR}/${PN}-3.6-code-cleanup_3.patch"
"${FILESDIR}/${PN}-4.1-vmaf.patch"
)
pkg_setup() {
@@ -52,6 +61,15 @@ pkg_setup() {
)
}
src_prepare() {
cmake_src_prepare
sed -r -e 's/(set\(ARM_ARGS -O3)/# \1/g' -i CMakeLists.txt || die
# TODO check so_name via
# X265_BUILD 215
}
# By default, the library and the encoder is configured for only one output bit
# depth. Meaning, one has to rebuild libx265 if (s)he wants to produce HEVC
# files with a different bit depth, which is annoying. However, upstream
@@ -102,9 +120,12 @@ multilib_src_configure() {
local mycmakeargs=(
-DENABLE_PIC=ON
-DENABLE_LIBNUMA="$(usex numa)"
-DENABLE_ALPHA="yes"
-DENABLE_MULTIVIEW="yes"
-DENABLE_SVT_HEVC="no" # missing
-DENABLE_VTUNE="no" # missing
-DENABLE_SVT_HEVC="no" # broken
-DENABLE_SCC_EXT="yes"
-DENABLE_LIBVMAF="$(usex vmaf)"
-DENABLE_VTUNE="no" # missing Vtune
-DGIT_ARCHETYPE=1 #814116
-DLIB_INSTALL_DIR="$(get_libdir)"
)
@@ -154,7 +175,7 @@ multilib_src_configure() {
mycmakeargs+=(
-DEXTRA_LIB="${liblist}"
-DEXTRA_LINK_FLAGS="-L${BUILD_DIR}"
-DLINKED_10BIT"=$(usex 10bit)"
-DLINKED_10BIT="$(usex 10bit)"
-DLINKED_12BIT="$(usex 12bit)"
)
fi

View File

@@ -17,6 +17,10 @@
#--- END OF EXAMPLES ---
# Paul Zander <negril.nx+gentoo@gmail.com> (2025-06-29)
# media-libs/libvmaf is keyworded
media-libs/x265 -vmaf
# Michał Górny <mgorny@gentoo.org> (2025-09-28)
# Unmask on amd64 for wider testing.
sci-libs/flexiblas -system-blas

View File

@@ -1,6 +1,10 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Paul Zander <negril.nx+gentoo@gmail.com> (2025-10-18)
# media-libs/libvmaf is keyworded
media-libs/x265 -vmaf
# Sam James <sam@gentoo.org> (2025-10-18)
# dev-python/nvidia-ml-py is not keyworded here
sys-process/atop video_cards_nvidia

View File

@@ -1,6 +1,10 @@
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Paul Zander <negril.nx+gentoo@gmail.com> (2025-06-29)
# libvmaf has limited keywords
media-libs/x265 vmaf
# Michał Górny <mgorny@gentoo.org> (2025-09-28)
# Masked until sci-libs/flexiblas and sci-libs/blas-lapack-aux-wrappers
# are keyworded everywhere. And for some more testing.

View File

@@ -1,6 +1,10 @@
# Copyright 2019-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# Paul Zander <negril.nx+gentoo@gmail.com> (2025-06-29)
# media-libs/libvmaf is keyworded
media-libs/x265 -vmaf
# Jakov Smolić <jsmolic@gentoo.org> (2025-10-05)
# These packages are keyworded on riscv
sci-libs/flexiblas -system-blas