summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author Matteo Bernardini2024-04-22 15:23:36 +0200
committer Matteo Bernardini2024-04-27 10:31:13 +0200
commit5272fac96dc38cb57ecce4c333d15d2ceef9093c (patch)
tree72250f5439cbce8949eb686dcea30e88ecb82402
parent68ac93024440c1dcb61e579018ce241a1ab44180 (diff)
downloadslackbuilds-avidemux.tar.gz
multimedia/avidemux: Updated for version 20240417_ac7587b.avidemux
Patch the internal ffmpeg for the newer nvcodec-headers Signed-off-by: Matteo Bernardini <ponce@slackbuilds.org>
-rw-r--r--multimedia/avidemux/0004-support-nv-codec-headers-12.2.patch292
-rw-r--r--multimedia/avidemux/avidemux.SlackBuild9
-rw-r--r--multimedia/avidemux/avidemux.info6
3 files changed, 301 insertions, 6 deletions
diff --git a/multimedia/avidemux/0004-support-nv-codec-headers-12.2.patch b/multimedia/avidemux/0004-support-nv-codec-headers-12.2.patch
new file mode 100644
index 0000000000..1f9afebba1
--- /dev/null
+++ b/multimedia/avidemux/0004-support-nv-codec-headers-12.2.patch
@@ -0,0 +1,292 @@
+diff -Naur ffmpeg-6.0.1.orig/libavcodec/nvenc.c ffmpeg-6.0.1/libavcodec/nvenc.c
+--- ffmpeg-6.0.1.orig/libavcodec/nvenc.c 2024-04-20 14:36:35.902732000 +0200
++++ ffmpeg-6.0.1/libavcodec/nvenc.c 2024-04-20 14:40:15.660732000 +0200
+@@ -233,8 +233,20 @@
+
+ static void nvenc_print_driver_requirement(AVCodecContext *avctx, int level)
+ {
+-#if NVENCAPI_CHECK_VERSION(12, 1)
++#if NVENCAPI_CHECK_VERSION(12, 3)
+ const char *minver = "(unknown)";
++#elif NVENCAPI_CHECK_VERSION(12, 2)
++# if defined(_WIN32) || defined(__CYGWIN__)
++ const char *minver = "551.76";
++# else
++ const char *minver = "550.54.14";
++# endif
++#elif NVENCAPI_CHECK_VERSION(12, 1)
++# if defined(_WIN32) || defined(__CYGWIN__)
++ const char *minver = "531.61";
++# else
++ const char *minver = "530.41.03";
++# endif
+ #elif NVENCAPI_CHECK_VERSION(12, 0)
+ # if defined(_WIN32) || defined(__CYGWIN__)
+ const char *minver = "522.25";
+@@ -585,6 +597,33 @@
+ return AVERROR(ENOSYS);
+ }
+
++#ifdef NVENC_HAVE_TEMPORAL_FILTER
++ ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_TEMPORAL_FILTER);
++ if(ctx->tf_level > 0 && ret <= 0) {
++ av_log(avctx, AV_LOG_WARNING, "Temporal filtering not supported by the device\n");
++ return AVERROR(ENOSYS);
++ }
++#endif
++
++#ifdef NVENC_HAVE_LOOKAHEAD_LEVEL
++ ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_LOOKAHEAD_LEVEL);
++ if(ctx->rc_lookahead > 0 && ctx->lookahead_level > 0 &&
++ ctx->lookahead_level != NV_ENC_LOOKAHEAD_LEVEL_AUTOSELECT &&
++ ctx->lookahead_level > ret)
++ {
++ av_log(avctx, AV_LOG_WARNING, "Lookahead level not supported. Maximum level: %d\n", ret);
++ return AVERROR(ENOSYS);
++ }
++#endif
++
++#ifdef NVENC_HAVE_UNIDIR_B
++ ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_UNIDIRECTIONAL_B);
++ if(ctx->unidir_b && ret <= 0) {
++ av_log(avctx, AV_LOG_WARNING, "Unidirectional B-Frames not supported by the device\n");
++ return AVERROR(ENOSYS);
++ }
++#endif
++
+ ctx->support_dyn_bitrate = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE);
+
+ return 0;
+@@ -978,7 +1017,7 @@
+ return 0;
+ }
+
+-static av_cold void nvenc_setup_rate_control(AVCodecContext *avctx)
++static av_cold int nvenc_setup_rate_control(AVCodecContext *avctx)
+ {
+ NvencContext *ctx = avctx->priv_data;
+
+@@ -1107,6 +1146,24 @@
+ if (ctx->encode_config.rcParams.lookaheadDepth < ctx->rc_lookahead)
+ av_log(avctx, AV_LOG_WARNING, "Clipping lookahead depth to %d (from %d) due to lack of surfaces/delay",
+ ctx->encode_config.rcParams.lookaheadDepth, ctx->rc_lookahead);
++
++#ifdef NVENC_HAVE_LOOKAHEAD_LEVEL
++ if (ctx->lookahead_level >= 0) {
++ switch (ctx->lookahead_level) {
++ case NV_ENC_LOOKAHEAD_LEVEL_0:
++ case NV_ENC_LOOKAHEAD_LEVEL_1:
++ case NV_ENC_LOOKAHEAD_LEVEL_2:
++ case NV_ENC_LOOKAHEAD_LEVEL_3:
++ case NV_ENC_LOOKAHEAD_LEVEL_AUTOSELECT:
++ break;
++ default:
++ av_log(avctx, AV_LOG_ERROR, "Invalid lookahead level.\n");
++ return AVERROR(EINVAL);
++ }
++
++ ctx->encode_config.rcParams.lookaheadLevel = ctx->lookahead_level;
++ }
++#endif
+ }
+ }
+
+@@ -1134,6 +1191,8 @@
+ ctx->encode_config.rcParams.vbvBufferSize = avctx->rc_buffer_size = 0;
+ ctx->encode_config.rcParams.maxBitRate = avctx->rc_max_rate;
+ }
++
++ return 0;
+ }
+
+ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx)
+@@ -1244,6 +1303,11 @@
+
+ h264->level = ctx->level;
+
++#ifdef NVENC_HAVE_NEW_BIT_DEPTH_API
++ h264->inputBitDepth = h264->outputBitDepth =
++ IS_10BIT(ctx->data_pix_fmt) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8;
++#endif
++
+ if (ctx->coder >= 0)
+ h264->entropyCodingMode = ctx->coder;
+
+@@ -1357,7 +1421,12 @@
+
+ hevc->chromaFormatIDC = IS_YUV444(ctx->data_pix_fmt) ? 3 : 1;
+
++#ifdef NVENC_HAVE_NEW_BIT_DEPTH_API
++ hevc->inputBitDepth = hevc->outputBitDepth =
++ IS_10BIT(ctx->data_pix_fmt) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8;
++#else
+ hevc->pixelBitDepthMinus8 = IS_10BIT(ctx->data_pix_fmt) ? 2 : 0;
++#endif
+
+ hevc->level = ctx->level;
+
+@@ -1373,6 +1442,25 @@
+ hevc->numRefL1 = avctx->refs;
+ #endif
+
++#ifdef NVENC_HAVE_TEMPORAL_FILTER
++ if (ctx->tf_level >= 0) {
++ hevc->tfLevel = ctx->tf_level;
++
++ switch (ctx->tf_level)
++ {
++ case NV_ENC_TEMPORAL_FILTER_LEVEL_0:
++ case NV_ENC_TEMPORAL_FILTER_LEVEL_4:
++ break;
++ default:
++ av_log(avctx, AV_LOG_ERROR, "Invalid temporal filtering level.\n");
++ return AVERROR(EINVAL);
++ }
++
++ if (ctx->encode_config.frameIntervalP < 5)
++ av_log(avctx, AV_LOG_WARNING, "Temporal filtering needs at least 4 B-Frames (-bf 4).\n");
++ }
++#endif
++
+ return 0;
+ }
+
+@@ -1443,8 +1531,13 @@
+
+ av1->chromaFormatIDC = IS_YUV444(ctx->data_pix_fmt) ? 3 : 1;
+
++#ifdef NVENC_HAVE_NEW_BIT_DEPTH_API
++ av1->inputBitDepth = IS_10BIT(ctx->data_pix_fmt) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8;
++ av1->outputBitDepth = (IS_10BIT(ctx->data_pix_fmt) || ctx->highbitdepth) ? NV_ENC_BIT_DEPTH_10 : NV_ENC_BIT_DEPTH_8;
++#else
+ av1->inputPixelBitDepthMinus8 = IS_10BIT(ctx->data_pix_fmt) ? 2 : 0;
+ av1->pixelBitDepthMinus8 = (IS_10BIT(ctx->data_pix_fmt) || ctx->highbitdepth) ? 2 : 0;
++#endif
+
+ if (ctx->b_ref_mode >= 0)
+ av1->useBFramesAsRef = ctx->b_ref_mode;
+@@ -1567,6 +1660,10 @@
+ ctx->init_encode_params.frameRateDen = avctx->time_base.num * avctx->ticks_per_frame;
+ }
+
++#ifdef NVENC_HAVE_UNIDIR_B
++ ctx->init_encode_params.enableUniDirectionalB = ctx->unidir_b;
++#endif
++
+ ctx->init_encode_params.enableEncodeAsync = 0;
+ ctx->init_encode_params.enablePTD = 1;
+
+@@ -1617,7 +1714,9 @@
+
+ nvenc_recalc_surfaces(avctx);
+
+- nvenc_setup_rate_control(avctx);
++ res = nvenc_setup_rate_control(avctx);
++ if (res < 0)
++ return res;
+
+ if (avctx->flags & AV_CODEC_FLAG_INTERLACED_DCT) {
+ ctx->encode_config.frameFieldMode = NV_ENC_PARAMS_FRAME_FIELD_MODE_FIELD;
+@@ -1673,16 +1772,16 @@
+ {
+ switch (pix_fmt) {
+ case AV_PIX_FMT_YUV420P:
+- // MEANX return NV_ENC_BUFFER_FORMAT_YV12_PL;
++ return NV_ENC_BUFFER_FORMAT_YV12;
+ case AV_PIX_FMT_NV12:
+- return NV_ENC_BUFFER_FORMAT_NV12_PL;
++ return NV_ENC_BUFFER_FORMAT_NV12;
+ case AV_PIX_FMT_P010:
+ case AV_PIX_FMT_P016:
+ return NV_ENC_BUFFER_FORMAT_YUV420_10BIT;
+ #if 0 /* MEANX */
+ case AV_PIX_FMT_GBRP:
+ case AV_PIX_FMT_YUV444P:
+- return NV_ENC_BUFFER_FORMAT_YUV444_PL;
++ return NV_ENC_BUFFER_FORMAT_YUV444;
+ case AV_PIX_FMT_GBRP16:
+ case AV_PIX_FMT_YUV444P16:
+ return NV_ENC_BUFFER_FORMAT_YUV444_10BIT;
+@@ -2309,12 +2408,6 @@
+ frame_data->duration = frame->duration;
+ frame_data->frame_opaque = frame->opaque;
+
+-#if FF_API_REORDERED_OPAQUE
+-FF_DISABLE_DEPRECATION_WARNINGS
+- frame_data->reordered_opaque = frame->reordered_opaque;
+-FF_ENABLE_DEPRECATION_WARNINGS
+-#endif
+-
+ ctx->frame_data_array_pos = (ctx->frame_data_array_pos + 1) % ctx->frame_data_array_nb;
+ pic_params->inputDuration = idx;
+
+@@ -2331,12 +2424,6 @@
+
+ pkt->duration = frame_data->duration;
+
+-#if FF_API_REORDERED_OPAQUE
+-FF_DISABLE_DEPRECATION_WARNINGS
+- avctx->reordered_opaque = frame_data->reordered_opaque;
+-FF_ENABLE_DEPRECATION_WARNINGS
+-#endif
+-
+ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
+ pkt->opaque = frame_data->frame_opaque;
+ pkt->opaque_ref = frame_data->frame_opaque_ref;
+@@ -2724,6 +2811,7 @@
+ pic_params.encodePicFlags = 0;
+ }
+
++ pic_params.frameIdx = ctx->frame_idx_counter++;
+ pic_params.inputTimeStamp = frame->pts;
+
+ if (ctx->extra_sei) {
+diff -Naur ffmpeg-6.0.1.orig/libavcodec/nvenc.h ffmpeg-6.0.1/libavcodec/nvenc.h
+--- ffmpeg-6.0.1.orig/libavcodec/nvenc.h 2023-11-10 01:30:25.000000000 +0100
++++ ffmpeg-6.0.1/libavcodec/nvenc.h 2024-04-20 14:42:22.556732000 +0200
+@@ -83,6 +83,15 @@
+ #define NVENC_NO_DEPRECATED_RC
+ #endif
+
++// SDK 12.2 compile time feature checks
++#if NVENCAPI_CHECK_VERSION(12, 2)
++#define NVENC_HAVE_NEW_BIT_DEPTH_API
++#define NVENC_HAVE_TEMPORAL_FILTER
++#define NVENC_HAVE_LOOKAHEAD_LEVEL
++#define NVENC_HAVE_UHQ_TUNING
++#define NVENC_HAVE_UNIDIR_B
++#endif
++
+ typedef struct NvencSurface
+ {
+ NV_ENC_INPUT_PTR input_surface;
+@@ -100,10 +109,6 @@
+ {
+ int64_t duration;
+
+-#if FF_API_REORDERED_OPAQUE
+- int64_t reordered_opaque;
+-#endif
+-
+ void *frame_opaque;
+ AVBufferRef *frame_opaque_ref;
+ } NvencFrameData;
+@@ -215,6 +220,8 @@
+
+ void *nvencoder;
+
++ uint32_t frame_idx_counter;
++
+ int preset;
+ int profile;
+ int level;
+@@ -262,6 +269,9 @@
+ int udu_sei;
+ int timing_info;
+ int highbitdepth;
++ int tf_level;
++ int lookahead_level;
++ int unidir_b;
+ } NvencContext;
+
+ int ff_nvenc_encode_init(AVCodecContext *avctx);
diff --git a/multimedia/avidemux/avidemux.SlackBuild b/multimedia/avidemux/avidemux.SlackBuild
index 37202fb9d3..15cce7f22f 100644
--- a/multimedia/avidemux/avidemux.SlackBuild
+++ b/multimedia/avidemux/avidemux.SlackBuild
@@ -5,7 +5,7 @@
# Derived from a SlackBuild by Eric Hameleers.
# Copyright 2009, 2010, 2011, 2013 Eric Hameleers, Eindhoven, NL
# Copyright 2015 John Vogel Corning, NY USA
-# Copyright 2017-2022 Matteo Bernardini, Pisa, IT
+# Copyright 2017-2024 Matteo Bernardini, Pisa, IT
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -31,7 +31,7 @@
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=avidemux
-VERSION=${VERSION:-2.8.1}
+VERSION=${VERSION:-20240417_ac7587b}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -75,7 +75,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf ${PRGNAM}_${VERSION}
-tar xvf $CWD/${PRGNAM}_${VERSION}.tar.gz
+tar xvf $CWD/${PRGNAM}_${VERSION}.tar.?z
cd ${PRGNAM}_${VERSION}
chown -R root:root .
find -L . \
@@ -90,6 +90,9 @@ find -L . \
sed -i 's|../avidemux/qt4|../avidemux/qt4 -DLRELEASE_EXECUTABLE=/usr/bin/lrelease-qt5|' bootStrap.bash || exit 1
sed -i 's|0.19|1.0|' avidemux_plugins/ADM_videoFilters6/ass/CMakeLists.txt || exit 1
+mkdir -p avidemux_core/ffmpeg_package/patches/upstream
+cp $CWD/0004-support-nv-codec-headers-12.2.patch avidemux_core/ffmpeg_package/patches/upstream
+
bash bootStrap.bash --with-core --with-cli --with-plugins
make -C buildCli DESTDIR="$PKG" install
diff --git a/multimedia/avidemux/avidemux.info b/multimedia/avidemux/avidemux.info
index 948c45dcc6..d6a3da1e89 100644
--- a/multimedia/avidemux/avidemux.info
+++ b/multimedia/avidemux/avidemux.info
@@ -1,8 +1,8 @@
PRGNAM="avidemux"
-VERSION="2.8.1"
+VERSION="20240417_ac7587b"
HOMEPAGE="http://avidemux.org"
-DOWNLOAD="http://downloads.sf.net/avidemux/avidemux_2.8.1.tar.gz"
-MD5SUM="fee41934cba460ec0fde2a453d5a6307"
+DOWNLOAD="https://ponce.cc/slackware/sources/repo/avidemux_20240417_ac7587b.tar.xz"
+MD5SUM="21dfb34ecacb4fca7d50cd2c54b3a181"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="faac faad2 libdca x264 xvidcore"