Date: Thu, 27 Apr 2023 12:03:47 GMT From: Daniel Engberg <diizzy@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 685e477b807c - main - multimedia/ffmpeg: update to 6.0 Message-ID: <202304271203.33RC3lWx045938@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by diizzy: URL: https://cgit.FreeBSD.org/ports/commit/?id=685e477b807c7662670de46b042141939af7555e commit 685e477b807c7662670de46b042141939af7555e Author: Jan Beich <jbeich@FreeBSD.org> AuthorDate: 2023-04-12 21:21:46 +0000 Commit: Daniel Engberg <diizzy@FreeBSD.org> CommitDate: 2023-04-27 12:01:40 +0000 multimedia/ffmpeg: update to 6.0 * --enable-avresample is gone per https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/420cedd49745 * SHADERC replaces GLSLANG per https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/da72aca7b025 * VULKAN is enabled per https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/fa2e460f635 * LIBPLACEBO is enabled to have even more Vulkan goodies * LCMS2 is enabled for better ICC profile support * JXL is enabled for https://github.com/mpv-player/mpv/commit/1345977f9976 Changes: https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/n6.0:/Changelog PR: 261302 Reported by: Repology Exp-run by: antoine Approved by: tcberner --- multimedia/ffmpeg/Makefile | 46 +- multimedia/ffmpeg/distinfo | 6 +- multimedia/ffmpeg/files/patch-libavutil_thread.h | 14 + multimedia/ffmpeg/files/patch-svtav1 | 437 ----------- multimedia/ffmpeg/files/patch-vmaf | 951 ----------------------- multimedia/ffmpeg/pkg-plist | 77 +- 6 files changed, 93 insertions(+), 1438 deletions(-) diff --git a/multimedia/ffmpeg/Makefile b/multimedia/ffmpeg/Makefile index 031ab21961bc..e7a4c150a31a 100644 --- a/multimedia/ffmpeg/Makefile +++ b/multimedia/ffmpeg/Makefile @@ -1,6 +1,5 @@ PORTNAME= ffmpeg -PORTVERSION= 4.4.4 -PORTREVISION= 1 +PORTVERSION= 6.0 PORTEPOCH= 1 CATEGORIES= multimedia audio net MASTER_SITES= https://ffmpeg.org/releases/ @@ -28,28 +27,28 @@ USE_PERL5= build SHEBANG_FILES= doc/texi2pod.pl NOPRECIOUSMAKEVARS= yes # ARCH -PORTSCOUT= limit:^4\. +PORTSCOUT= limit:^6\. # Option CHROMAPRINT disabled, it cannot work and people are baffled. OPTIONS_DEFINE= ALSA AMR_NB AMR_WB AOM ARIBB24 ASM ASS BS2B CACA CDIO \ CODEC2 DAV1D DAVS2 DC1394 DEBUG DOCS DRM FDK_AAC FLITE \ FONTCONFIG FREETYPE FREI0R FRIBIDI GLSLANG GME GSM ICONV ILBC \ - JACK KLVANC KVAZAAR LADSPA LAME LENSFUN LIBBLURAY LIBRSVG2 \ + JACK JXL KLVANC KVAZAAR LADSPA LAME LCMS2 LENSFUN LIBBLURAY LIBPLACEBO LIBRSVG2 \ LIBXML2 LTO LV2 MODPLUG MYSOFA NETWORK NVENC OPENAL OPENCL OPENGL \ OPENH264 OPENJPEG OPENMPT OPENVINO OPTIMIZED_CFLAGS OPUS POCKETSPHINX \ - PULSEAUDIO RAV1E RABBITMQ RIST RTCPU RUBBERBAND SDL SMB SNAPPY \ + PULSEAUDIO RAV1E RABBITMQ RIST RTCPU RUBBERBAND SDL SHADERC SMB SNAPPY \ SNDIO SOXR SPEEX SRT SSH SVTAV1 SVTHEVC SVTVP9 TENSORFLOW \ TESSERACT THEORA TWOLAME UAVS3D V4L VAAPI VAPOURSYNTH VDPAU VIDSTAB \ VMAF VO_AMRWBENC VORBIS VPX VULKAN WEBP X264 X265 \ XAVS2 XCB XVID XVIDEO ZIMG ZMQ ZVBI # intel-media-sdk only for i386/amd64 -OPTIONS_DEFINE_amd64= MFX +OPTIONS_DEFINE_amd64= MFX VPL OPTIONS_DEFINE_i386= MFX OPTIONS_DEFAULT= AOM ASM ASS DAV1D DRM FONTCONFIG FREETYPE FREI0R GMP \ - GNUTLS ICONV LAME LIBXML2 NETWORK OPTIMIZED_CFLAGS OPUS \ - RTCPU SVTAV1 V4L VAAPI VDPAU VMAF VORBIS VPX WEBP X264 \ - X265 XCB + GNUTLS ICONV JXL LAME LCMS2 LIBPLACEBO LIBXML2 NETWORK \ + OPTIMIZED_CFLAGS OPUS RTCPU SVTAV1 V4L VAAPI VDPAU VMAF \ + VORBIS VPX VULKAN WEBP X264 X265 XCB OPTIONS_DEFAULT_amd64= NVENC OPTIONS_DEFAULT_i386= NVENC @@ -122,10 +121,12 @@ RIST_DESC= Reliable Internet Stream Transport protocol via librist RUBBERBAND_DESC=Time-stretching and pitch-shifting with librubberband RTCPU_DESC= Detect CPU capabilities at runtime RTMP_DESC= RTMP(T)E protocol support +SHADERC_DESC= GLSL->SPIRV compilation via libshaderc SRT_DESC= Haivision SRT protocol via libsrt SVTAV1_DESC= AV1 encoding via SVT-AV1 SVTHEVC_DESC= HEVC encoding via SVT-HEVC SVTVP9_DESC= VP9 encoding via SVT-VP9 +LIBPLACEBO_DESC=GPU filters from libplacebo LIBRTMP_DESC= ${RTMP_DESC} via librtmp TENSORFLOW_DESC=TensorFlow as a DNN module backend for DNN based filters like sr TESSERACT_DESC= Optical Character Recognition via Tesseract @@ -134,6 +135,7 @@ UAVS3D_DESC= AVS3 decoding via libuavs3d VAPOURSYNTH_DESC= VapourSynth demuxer VIDSTAB_DESC= Video stabilization filter VMAF_DESC= VMAF filter via libvmaf +VPL_DESC= Intel oneVPL (aka Quick Sync Video) VULKAN_DESC= Vulkan filters XAVS2_DESC= AVS2 encoding via libxavs2 XCB_DESC= X11 grabbing using XCB @@ -282,6 +284,10 @@ ILBC_CONFIGURE_ENABLE= libilbc JACK_LIB_DEPENDS= libjack.so:audio/jack JACK_CONFIGURE_ENABLE= libjack +# jxl +JXL_LIB_DEPENDS= libjxl.so:graphics/libjxl +JXL_CONFIGURE_ENABLE= libjxl + # klvanc KLVANC_LIB_DEPENDS= libklvanc.so:multimedia/libklvanc KLVANC_CONFIGURE_ENABLE= libklvanc @@ -299,6 +305,10 @@ LADSPA_CONFIGURE_ENABLE= ladspa LAME_LIB_DEPENDS= libmp3lame.so:audio/lame LAME_CONFIGURE_ENABLE= libmp3lame +# lcms2 +LCMS2_LIB_DEPENDS= liblcms2.so:graphics/lcms2 +LCMS2_CONFIGURE_ENABLE= lcms2 + # lensfun LENSFUN_LIB_DEPENDS= liblensfun.so:graphics/lensfun LENSFUN_CONFIGURE_ENABLE= liblensfun @@ -307,6 +317,10 @@ LENSFUN_CONFIGURE_ENABLE= liblensfun LIBBLURAY_LIB_DEPENDS= libbluray.so:multimedia/libbluray LIBBLURAY_CONFIGURE_ENABLE= libbluray +# libplacebo +LIBPLACEBO_LIB_DEPENDS= libplacebo.so:graphics/libplacebo +LIBPLACEBO_CONFIGURE_ENABLE= libplacebo + # librsvg LIBRSVG2_USES= gnome LIBRSVG2_USE= GNOME=cairo,librsvg2 @@ -351,7 +365,7 @@ MYSOFA_CONFIGURE_ENABLE= libmysofa NETWORK_CONFIGURE_ENABLE= network # nvenc -NVENC_BUILD_DEPENDS= ${LOCALBASE}/include/ffnvcodec/nvEncodeAPI.h:multimedia/ffnvcodec-headers +NVENC_BUILD_DEPENDS= ffnvcodec-headers>=11.1.5.2:multimedia/ffnvcodec-headers NVENC_CONFIGURE_ENABLE= nvenc # OpenAL @@ -433,6 +447,11 @@ SDL_USES= sdl SDL_USE= SDL=sdl2 SDL_CONFIGURE_ENABLE= sdl2 +# shaderc +SHADERC_LIB_DEPENDS= libshaderc_shared.so:graphics/shaderc +SHADERC_CONFIGURE_ENABLE= libshaderc +SHADERC_PREVENTS= GLSLANG + # smbclient SMB_USES= samba:lib SMB_CONFIGURE_ENABLE= libsmbclient @@ -536,6 +555,10 @@ VIDSTAB_CONFIGURE_ENABLE= libvidstab VORBIS_LIB_DEPENDS= libvorbisenc.so:audio/libvorbis VORBIS_CONFIGURE_ENABLE= libvorbis +# vpl +VPL_LIB_DEPENDS= libvpl.so:multimedia/onevpl +VPL_CONFIGURE_ENABLE= libvpl + # vp8 VPX_LIB_DEPENDS= libvpx.so:multimedia/libvpx VPX_CONFIGURE_ENABLE= libvpx @@ -544,7 +567,7 @@ VPX_CONFIGURE_ENABLE= libvpx VULKAN_BUILD_DEPENDS= vulkan-headers>0:graphics/vulkan-headers VULKAN_LIB_DEPENDS= libvulkan.so:graphics/vulkan-loader VULKAN_CONFIGURE_ENABLE= vulkan -VULKAN_IMPLIES= GLSLANG +VULKAN_IMPLIES= ${"${PORT_OPTIONS:MGLSLANG}":?GLSLANG:SHADERC} # webp WEBP_LIB_DEPENDS= libwebp.so:graphics/webp @@ -618,7 +641,6 @@ CONFIGURE_ARGS+=--prefix="${PREFIX}" \ --enable-shared \ --enable-pic \ --enable-gpl \ - --enable-avresample \ --cc="${CC}" \ --cxx="${CXX}" diff --git a/multimedia/ffmpeg/distinfo b/multimedia/ffmpeg/distinfo index 287f9dba3d86..4c5307165f94 100644 --- a/multimedia/ffmpeg/distinfo +++ b/multimedia/ffmpeg/distinfo @@ -1,6 +1,6 @@ -TIMESTAMP = 1681325571 -SHA256 (ffmpeg-4.4.4.tar.xz) = e80b380d595c809060f66f96a5d849511ef4a76a26b76eacf5778b94c3570309 -SIZE (ffmpeg-4.4.4.tar.xz) = 9565584 +TIMESTAMP = 1677530629 +SHA256 (ffmpeg-6.0.tar.xz) = 57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082 +SIZE (ffmpeg-6.0.tar.xz) = 10234012 SHA256 (0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch) = 376ea23e9d876390fbca936c80cb437bb9daa6232ff65df0ea91673e18b739ff SIZE (0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch) = 24259 SHA256 (0002-doc-Add-libsvt_hevc-encoder-docs.patch) = d16589efc4be2602a9f436e9938cfee0cc7b5ccd7a4a6b41c0c9a59ae0859fda diff --git a/multimedia/ffmpeg/files/patch-libavutil_thread.h b/multimedia/ffmpeg/files/patch-libavutil_thread.h new file mode 100644 index 000000000000..29ba6aa40761 --- /dev/null +++ b/multimedia/ffmpeg/files/patch-libavutil_thread.h @@ -0,0 +1,14 @@ +pthread_setname_np is implemented on top of PR_SET_NAME on Linux +and is also available on DragonFly, FreeBSD and Solaris + +--- libavutil/thread.h.orig 2023-02-27 20:43:45 UTC ++++ libavutil/thread.h +@@ -196,6 +196,8 @@ static inline int ff_thread_setname(const char *name) + { + #if HAVE_PRCTL + return AVERROR(prctl(PR_SET_NAME, name)); ++#elif HAVE_PTHREADS ++ return AVERROR(pthread_setname_np(pthread_self(), name)); + #endif + + return AVERROR(ENOSYS); diff --git a/multimedia/ffmpeg/files/patch-svtav1 b/multimedia/ffmpeg/files/patch-svtav1 deleted file mode 100644 index 5d8893a959fa..000000000000 --- a/multimedia/ffmpeg/files/patch-svtav1 +++ /dev/null @@ -1,437 +0,0 @@ -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/04b89e8ae33b -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/64e2fb3f9d89 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/0463f5d6d56d -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/c5f314309067 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/c33b4048859a -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/a2b090da7932 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/1dddb930aaf0 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/4e47ebf38b97 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/50bc87263576 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/d794b36a7788 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/51c0b9e829be -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/e3c4442b249a -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/6fd1533057ff -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/ded0334d214f -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/70887d44ffa3 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/fe100bc556d7 -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/fb70e0611bd7 - ---- configure.orig 2021-10-24 20:47:11 UTC -+++ configure -@@ -6430,7 +6430,7 @@ enabled libsrt && require_pkg_config libsrt - enabled libssh && require_pkg_config libssh libssh libssh/sftp.h sftp_init - enabled libspeex && require_pkg_config libspeex speex speex/speex.h speex_decoder_init - enabled libsrt && require_pkg_config libsrt "srt >= 1.3.0" srt/srt.h srt_socket --enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.8.4" EbSvtAv1Enc.h svt_av1_enc_init_handle -+enabled libsvtav1 && require_pkg_config libsvtav1 "SvtAv1Enc >= 0.9.0" EbSvtAv1Enc.h svt_av1_enc_init_handle - enabled libtensorflow && require libtensorflow tensorflow/c/c_api.h TF_Version -ltensorflow - enabled libtesseract && require_pkg_config libtesseract tesseract tesseract/capi.h TessBaseAPICreate - enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg ---- doc/encoders.texi.orig 2021-10-24 20:47:07 UTC -+++ doc/encoders.texi -@@ -1754,28 +1754,15 @@ Set the operating point tier. - @item tier - Set the operating point tier. - --@item rc --Set the rate control mode to use. -- --Possible modes: --@table @option --@item cqp --Constant quantizer: use fixed values of qindex (dependent on the frame type) --throughout the stream. This mode is the default. -- --@item vbr --Variable bitrate: use a target bitrate for the whole stream. -- --@item cvbr --Constrained variable bitrate: use a target bitrate for each GOP. --@end table -- - @item qmax - Set the maximum quantizer to use when using a bitrate mode. - - @item qmin - Set the minimum quantizer to use when using a bitrate mode. - -+@item crf -+Constant rate factor value used in crf rate control mode (0-63). -+ - @item qp - Set the quantizer used in cqp rate control mode (0-63). - -@@ -1786,14 +1773,18 @@ Set number of frames to look ahead (0-120). - Set number of frames to look ahead (0-120). - - @item preset --Set the quality-speed tradeoff, in the range 0 to 8. Higher values are --faster but lower quality. Defaults to 8 (highest speed). -+Set the quality-speed tradeoff, in the range 0 to 13. Higher values are -+faster but lower quality. - - @item tile_rows - Set log2 of the number of rows of tiles to use (0-6). - - @item tile_columns - Set log2 of the number of columns of tiles to use (0-4). -+ -+@item svtav1-params -+Set SVT-AV1 options using a list of @var{key}=@var{value} pairs separated -+by ":". See the SVT-AV1 encoder user guide for a list of accepted parameters. - - @end table - ---- libavcodec/libsvtav1.c.orig 2021-10-24 20:47:07 UTC -+++ libavcodec/libsvtav1.c -@@ -60,17 +60,20 @@ typedef struct SvtContext { - EOS_STATUS eos_flag; - - // User options. -+ AVDictionary *svtav1_opts; -+#if FF_API_SVTAV1_OPTS - int hierarchical_level; - int la_depth; -- int enc_mode; -- int rc_mode; - int scd; -- int qp; - - int tier; - - int tile_columns; - int tile_rows; -+#endif -+ int enc_mode; -+ int crf; -+ int qp; - } SvtContext; - - static const struct { -@@ -151,11 +154,126 @@ static int config_enc_params(EbSvtAv1EncConfiguration - { - SvtContext *svt_enc = avctx->priv_data; - const AVPixFmtDescriptor *desc; -+ AVDictionaryEntry *en = NULL; - -+ // Update param from options -+#if FF_API_SVTAV1_OPTS -+ param->hierarchical_levels = svt_enc->hierarchical_level; -+ param->tier = svt_enc->tier; -+ param->scene_change_detection = svt_enc->scd; -+ param->tile_columns = svt_enc->tile_columns; -+ param->tile_rows = svt_enc->tile_rows; -+ -+ if (svt_enc->la_depth >= 0) -+ param->look_ahead_distance = svt_enc->la_depth; -+#endif -+ -+ if (svt_enc->enc_mode >= 0) -+ param->enc_mode = svt_enc->enc_mode; -+ -+ if (avctx->bit_rate) { -+ param->target_bit_rate = avctx->bit_rate; -+ if (avctx->rc_max_rate != avctx->bit_rate) -+ param->rate_control_mode = 1; -+ else -+ param->rate_control_mode = 2; -+ -+ param->max_qp_allowed = avctx->qmax; -+ param->min_qp_allowed = avctx->qmin; -+ } -+ param->max_bit_rate = avctx->rc_max_rate; -+ param->vbv_bufsize = avctx->rc_buffer_size; -+ -+ if (svt_enc->crf > 0) { -+ param->qp = svt_enc->crf; -+ param->rate_control_mode = 0; -+ } else if (svt_enc->qp > 0) { -+ param->qp = svt_enc->qp; -+ param->rate_control_mode = 0; -+ param->enable_adaptive_quantization = 0; -+ } -+ -+ desc = av_pix_fmt_desc_get(avctx->pix_fmt); -+ param->color_primaries = avctx->color_primaries; -+ param->matrix_coefficients = (desc->flags & AV_PIX_FMT_FLAG_RGB) ? -+ AVCOL_SPC_RGB : avctx->colorspace; -+ param->transfer_characteristics = avctx->color_trc; -+ -+ if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED) -+ param->color_range = avctx->color_range == AVCOL_RANGE_JPEG; -+ else -+ param->color_range = !!(desc->flags & AV_PIX_FMT_FLAG_RGB); -+ -+#if SVT_AV1_CHECK_VERSION(1, 0, 0) -+ if (avctx->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED) { -+ const char *name = -+ av_chroma_location_name(avctx->chroma_sample_location); -+ -+ switch (avctx->chroma_sample_location) { -+ case AVCHROMA_LOC_LEFT: -+ param->chroma_sample_position = EB_CSP_VERTICAL; -+ break; -+ case AVCHROMA_LOC_TOPLEFT: -+ param->chroma_sample_position = EB_CSP_COLOCATED; -+ break; -+ default: -+ if (!name) -+ break; -+ -+ av_log(avctx, AV_LOG_WARNING, -+ "Specified chroma sample location %s is unsupported " -+ "on the AV1 bit stream level. Usage of a container that " -+ "allows passing this information - such as Matroska - " -+ "is recommended.\n", -+ name); -+ break; -+ } -+ } -+#endif -+ -+ if (avctx->profile != FF_PROFILE_UNKNOWN) -+ param->profile = avctx->profile; -+ -+ if (avctx->level != FF_LEVEL_UNKNOWN) -+ param->level = avctx->level; -+ -+ if (avctx->gop_size > 0) -+ param->intra_period_length = avctx->gop_size - 1; -+ -+ if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { -+ param->frame_rate_numerator = avctx->framerate.num; -+ param->frame_rate_denominator = avctx->framerate.den; -+ } else { -+ param->frame_rate_numerator = avctx->time_base.den; -+ param->frame_rate_denominator = avctx->time_base.num * avctx->ticks_per_frame; -+ } -+ -+ /* 2 = IDR, closed GOP, 1 = CRA, open GOP */ -+ param->intra_refresh_type = avctx->flags & AV_CODEC_FLAG_CLOSED_GOP ? 2 : 1; -+ -+#if SVT_AV1_CHECK_VERSION(0, 9, 1) -+ while ((en = av_dict_get(svt_enc->svtav1_opts, "", en, AV_DICT_IGNORE_SUFFIX))) { -+ EbErrorType ret = svt_av1_enc_parse_parameter(param, en->key, en->value); -+ if (ret != EB_ErrorNone) { -+ int level = (avctx->err_recognition & AV_EF_EXPLODE) ? AV_LOG_ERROR : AV_LOG_WARNING; -+ av_log(avctx, level, "Error parsing option %s: %s.\n", en->key, en->value); -+ if (avctx->err_recognition & AV_EF_EXPLODE) -+ return AVERROR(EINVAL); -+ } -+ } -+#else -+ if ((en = av_dict_get(svt_enc->svtav1_opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) { -+ int level = (avctx->err_recognition & AV_EF_EXPLODE) ? AV_LOG_ERROR : AV_LOG_WARNING; -+ av_log(avctx, level, "svt-params needs libavcodec to be compiled with SVT-AV1 " -+ "headers >= 0.9.1.\n"); -+ if (avctx->err_recognition & AV_EF_EXPLODE) -+ return AVERROR(ENOSYS); -+ } -+#endif -+ - param->source_width = avctx->width; - param->source_height = avctx->height; - -- desc = av_pix_fmt_desc_get(avctx->pix_fmt); - param->encoder_bit_depth = desc->comp[0].depth; - - if (desc->log2_chroma_w == 1 && desc->log2_chroma_h == 1) -@@ -169,12 +287,6 @@ static int config_enc_params(EbSvtAv1EncConfiguration - return AVERROR(EINVAL); - } - -- if (avctx->profile != FF_PROFILE_UNKNOWN) -- param->profile = avctx->profile; -- -- if (avctx->level != FF_LEVEL_UNKNOWN) -- param->level = avctx->level; -- - if ((param->encoder_color_format == EB_YUV422 || param->encoder_bit_depth > 10) - && param->profile != FF_PROFILE_AV1_PROFESSIONAL ) { - av_log(avctx, AV_LOG_WARNING, "Forcing Professional profile\n"); -@@ -184,40 +296,21 @@ static int config_enc_params(EbSvtAv1EncConfiguration - param->profile = FF_PROFILE_AV1_HIGH; - } - -- // Update param from options -- param->hierarchical_levels = svt_enc->hierarchical_level; -- param->enc_mode = svt_enc->enc_mode; -- param->tier = svt_enc->tier; -- param->rate_control_mode = svt_enc->rc_mode; -- param->scene_change_detection = svt_enc->scd; -- param->qp = svt_enc->qp; -+ avctx->bit_rate = param->rate_control_mode > 0 ? -+ param->target_bit_rate : 0; -+ avctx->rc_max_rate = param->max_bit_rate; -+ avctx->rc_buffer_size = param->vbv_bufsize; - -- param->target_bit_rate = avctx->bit_rate; -+ if (avctx->bit_rate || avctx->rc_max_rate || avctx->rc_buffer_size) { -+ AVCPBProperties *cpb_props = ff_add_cpb_side_data(avctx); -+ if (!cpb_props) -+ return AVERROR(ENOMEM); - -- if (avctx->gop_size > 0) -- param->intra_period_length = avctx->gop_size - 1; -- -- if (avctx->framerate.num > 0 && avctx->framerate.den > 0) { -- param->frame_rate_numerator = avctx->framerate.num; -- param->frame_rate_denominator = avctx->framerate.den; -- } else { -- param->frame_rate_numerator = avctx->time_base.den; -- param->frame_rate_denominator = avctx->time_base.num * avctx->ticks_per_frame; -+ cpb_props->buffer_size = avctx->rc_buffer_size; -+ cpb_props->max_bitrate = avctx->rc_max_rate; -+ cpb_props->avg_bitrate = avctx->bit_rate; - } - -- if (param->rate_control_mode) { -- param->max_qp_allowed = avctx->qmax; -- param->min_qp_allowed = avctx->qmin; -- } -- -- param->intra_refresh_type = 2; /* Real keyframes only */ -- -- if (svt_enc->la_depth >= 0) -- param->look_ahead_distance = svt_enc->la_depth; -- -- param->tile_columns = svt_enc->tile_columns; -- param->tile_rows = svt_enc->tile_rows; -- - return 0; - } - -@@ -330,11 +423,8 @@ static int eb_send_frame(AVCodecContext *avctx, const - if (svt_enc->eos_flag == EOS_SENT) - return 0; - -- headerPtrLast.n_alloc_len = 0; -- headerPtrLast.n_filled_len = 0; -- headerPtrLast.n_tick_count = 0; -- headerPtrLast.p_app_private = NULL; -- headerPtrLast.p_buffer = NULL; -+ memset(&headerPtrLast, 0, sizeof(headerPtrLast)); -+ headerPtrLast.pic_type = EB_AV1_INVALID_PICTURE; - headerPtrLast.flags = EB_BUFFERFLAG_EOS; - - svt_av1_enc_send_picture(svt_enc->svt_handle, &headerPtrLast); -@@ -350,6 +440,16 @@ static int eb_send_frame(AVCodecContext *avctx, const - headerPtr->p_app_private = NULL; - headerPtr->pts = frame->pts; - -+ switch (frame->pict_type) { -+ case AV_PICTURE_TYPE_I: -+ headerPtr->pic_type = EB_AV1_KEY_PICTURE; -+ break; -+ default: -+ // Actually means auto, or default. -+ headerPtr->pic_type = EB_AV1_INVALID_PICTURE; -+ break; -+ } -+ - svt_av1_enc_send_picture(svt_enc->svt_handle, headerPtr); - - return 0; -@@ -472,21 +572,22 @@ static const AVOption options[] = { - #define OFFSET(x) offsetof(SvtContext, x) - #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM - static const AVOption options[] = { -- { "hielevel", "Hierarchical prediction levels setting", OFFSET(hierarchical_level), -- AV_OPT_TYPE_INT, { .i64 = 4 }, 3, 4, VE , "hielevel"}, -+#if FF_API_SVTAV1_OPTS -+ { "hielevel", "Hierarchical prediction levels setting (Deprecated, use svtav1-params)", OFFSET(hierarchical_level), -+ AV_OPT_TYPE_INT, { .i64 = 4 }, 3, 4, VE | AV_OPT_FLAG_DEPRECATED , "hielevel"}, - { "3level", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, INT_MIN, INT_MAX, VE, "hielevel" }, - { "4level", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 4 }, INT_MIN, INT_MAX, VE, "hielevel" }, - -- { "la_depth", "Look ahead distance [0, 120]", OFFSET(la_depth), -- AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 120, VE }, -+ { "la_depth", "Look ahead distance [0, 120] (Deprecated, use svtav1-params)", OFFSET(la_depth), -+ AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 120, VE | AV_OPT_FLAG_DEPRECATED }, - -- { "preset", "Encoding preset [0, 8]", -- OFFSET(enc_mode), AV_OPT_TYPE_INT, { .i64 = MAX_ENC_PRESET }, 0, MAX_ENC_PRESET, VE }, -- -- { "tier", "Set operating point tier", OFFSET(tier), -- AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE, "tier" }, -+ { "tier", "Set operating point tier (Deprecated, use svtav1-params)", OFFSET(tier), -+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE | AV_OPT_FLAG_DEPRECATED, "tier" }, - { "main", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, VE, "tier" }, - { "high", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, "tier" }, -+#endif -+ { "preset", "Encoding preset", -+ OFFSET(enc_mode), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, MAX_ENC_PRESET, VE }, - - FF_AV1_PROFILE_OPTS - -@@ -518,21 +619,20 @@ static const AVOption options[] = { - { LEVEL("7.3", 73) }, - #undef LEVEL - -- { "rc", "Bit rate control mode", OFFSET(rc_mode), -- AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 3, VE , "rc"}, -- { "cqp", "Constant quantizer", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "rc" }, -- { "vbr", "Variable Bit Rate, use a target bitrate for the entire stream", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "rc" }, -- { "cvbr", "Constrained Variable Bit Rate, use a target bitrate for each GOP", 0, AV_OPT_TYPE_CONST,{ .i64 = 2 }, INT_MIN, INT_MAX, VE, "rc" }, -+ { "crf", "Constant Rate Factor value", OFFSET(crf), -+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 63, VE }, -+ { "qp", "Initial Quantizer level value", OFFSET(qp), -+ AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 63, VE }, -+#if FF_API_SVTAV1_OPTS -+ { "sc_detection", "Scene change detection (Deprecated, use svtav1-params)", OFFSET(scd), -+ AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE | AV_OPT_FLAG_DEPRECATED }, - -- { "qp", "Quantizer to use with cqp rate control mode", OFFSET(qp), -- AV_OPT_TYPE_INT, { .i64 = 50 }, 0, 63, VE }, -+ { "tile_columns", "Log2 of number of tile columns to use (Deprecated, use svtav1-params)", OFFSET(tile_columns), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 4, VE | AV_OPT_FLAG_DEPRECATED }, -+ { "tile_rows", "Log2 of number of tile rows to use (Deprecated, use svtav1-params)", OFFSET(tile_rows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 6, VE | AV_OPT_FLAG_DEPRECATED }, -+#endif - -- { "sc_detection", "Scene change detection", OFFSET(scd), -- AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, -+ { "svtav1-params", "Set the SVT-AV1 configuration using a :-separated list of key=value parameters", OFFSET(svtav1_opts), AV_OPT_TYPE_DICT, { 0 }, 0, 0, VE }, - -- { "tile_columns", "Log2 of number of tile columns to use", OFFSET(tile_columns), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 4, VE}, -- { "tile_rows", "Log2 of number of tile rows to use", OFFSET(tile_rows), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 6, VE}, -- - {NULL}, - }; - -@@ -544,9 +644,10 @@ static const AVCodecDefault eb_enc_defaults[] = { - }; - - static const AVCodecDefault eb_enc_defaults[] = { -- { "b", "7M" }, -+ { "b", "0" }, -+ { "flags", "+cgop" }, - { "g", "-1" }, -- { "qmin", "0" }, -+ { "qmin", "1" }, - { "qmax", "63" }, - { NULL }, - }; -@@ -561,12 +662,11 @@ AVCodec ff_libsvtav1_encoder = { - .receive_packet = eb_receive_packet, - .close = eb_enc_close, - .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, -- .caps_internal = FF_CODEC_CAP_AUTO_THREADS, -+ .caps_internal = FF_CODEC_CAP_AUTO_THREADS | FF_CODEC_CAP_INIT_CLEANUP, - .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, - AV_PIX_FMT_YUV420P10, - AV_PIX_FMT_NONE }, - .priv_class = &class, - .defaults = eb_enc_defaults, -- .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - .wrapper_name = "libsvtav1", - }; ---- libavcodec/version.h.orig 2021-10-24 20:47:07 UTC -+++ libavcodec/version.h -@@ -168,5 +168,8 @@ - #ifndef FF_API_INIT_PACKET - #define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) - #endif -+#ifndef FF_API_SVTAV1_OPTS -+#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 60) -+#endif - - #endif /* AVCODEC_VERSION_H */ diff --git a/multimedia/ffmpeg/files/patch-vmaf b/multimedia/ffmpeg/files/patch-vmaf deleted file mode 100644 index abe772274d3c..000000000000 --- a/multimedia/ffmpeg/files/patch-vmaf +++ /dev/null @@ -1,951 +0,0 @@ -https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff/3d29724c008d - ---- configure.orig 2021-10-24 20:47:11 UTC -+++ configure -@@ -3663,7 +3663,7 @@ vidstabtransform_filter_deps="libvidstab" - vaguedenoiser_filter_deps="gpl" - vidstabdetect_filter_deps="libvidstab" - vidstabtransform_filter_deps="libvidstab" --libvmaf_filter_deps="libvmaf pthreads" -+libvmaf_filter_deps="libvmaf" - zmq_filter_deps="libzmq" - zoompan_filter_deps="swscale" - zscale_filter_deps="libzimg const_nan" -@@ -6441,7 +6441,7 @@ enabled libvidstab && require_pkg_config libvid - enabled libuavs3d && require_pkg_config libuavs3d "uavs3d >= 1.1.41" uavs3d.h uavs3d_decode - enabled libv4l2 && require_pkg_config libv4l2 libv4l2 libv4l2.h v4l2_ioctl - enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit --enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 1.5.2" libvmaf.h compute_vmaf -+enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init - enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc - enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init && - require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init ---- doc/filters.texi.orig 2021-10-24 20:47:07 UTC -+++ doc/filters.texi -@@ -13867,66 +13867,58 @@ ffmpeg -i input.mov -vf lensfun=make=Canon:model="Cano - - @section libvmaf - --Obtain the VMAF (Video Multi-Method Assessment Fusion) --score between two input videos. -+Calulate the VMAF (Video Multi-Method Assessment Fusion) score for a -+reference/distorted pair of input videos. - - The obtained VMAF score is printed through the logging system. - - It requires Netflix's vmaf library (libvmaf) as a pre-requisite. - After installing the library it can be enabled using: - @code{./configure --enable-libvmaf}. --If no model path is specified it uses the default model: @code{vmaf_v0.6.1.pkl}. - - The filter has following options: - - @table @option -+@item model -+A `|` delimited list of vmaf models. Each model can be configured with a number of parameters. -+Default value: @code{"version=vmaf_v0.6.1"} -+ - @item model_path --Set the model path which is to be used for SVM. --Default value: @code{"/usr/local/share/model/vmaf_v0.6.1.pkl"} -+Deprecated, use model='path=...'. - --@item log_path --Set the file path to be used to store logs. -- --@item log_fmt --Set the format of the log file (csv, json or xml). -- - @item enable_transform --This option can enable/disable the @code{score_transform} applied to the final predicted VMAF score, --if you have specified score_transform option in the input parameter file passed to @code{run_vmaf_training.py} --Default value: @code{false} -+Deprecated, use model='enable_transform=true'. - - @item phone_model --Invokes the phone model which will generate VMAF scores higher than in the --regular model, which is more suitable for laptop, TV, etc. viewing conditions. --Default value: @code{false} -+Deprecated, use model='enable_transform=true'. - -+@item enable_conf_interval -+Deprecated, use model='enable_conf_interval=true'. -+ -+@item feature -+A `|` delimited list of features. Each feature can be configured with a number of parameters. -+ - @item psnr --Enables computing psnr along with vmaf. --Default value: @code{false} -+Deprecated, use feature='name=psnr'. - - @item ssim --Enables computing ssim along with vmaf. --Default value: @code{false} -+Deprecated, use feature='name=ssim'. - - @item ms_ssim --Enables computing ms_ssim along with vmaf. --Default value: @code{false} -+Deprecated, use feature='name=ms_ssim'. - --@item pool --Set the pool method to be used for computing vmaf. --Options are @code{min}, @code{harmonic_mean} or @code{mean} (default). -+@item log_path -+Set the file path to be used to store log files. - -+@item log_fmt -+Set the format of the log file (xml, json, csv, or sub). -+ - @item n_threads --Set number of threads to be used when computing vmaf. --Default value: @code{0}, which makes use of all available logical processors. -+Set number of threads to be used when initializing libvmaf. -+Default value: @code{0}, no threads. - - @item n_subsample --Set interval for frame subsampling used when computing vmaf. --Default value: @code{1} -- --@item enable_conf_interval --Enables confidence interval. --Default value: @code{false} -+Set frame subsampling interval to be used. - @end table - - This filter also supports the @ref{framesync} options. -@@ -13934,23 +13926,31 @@ This filter also supports the @ref{framesync} options. - @subsection Examples - @itemize - @item --On the below examples the input file @file{main.mpg} being processed is --compared with the reference file @file{ref.mpg}. -+In the examples below, a distorted video @file{distorted.mpg} is -+compared with a reference file @file{reference.mpg}. - -+@item -+Basic usage: - @example --ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf -f null - -+ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null - - @end example - - @item --Example with options: -+Example with multiple models: - @example --ffmpeg -i main.mpg -i ref.mpg -lavfi libvmaf="psnr=1:log_fmt=json" -f null - -+ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null - - @end example - - @item -+Example with multiple addtional features: -+@example -+ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null - -+@end example -+ -+@item - Example with options and different containers: - @example --ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=psnr=1:log_fmt=json" -f null - -+ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null - - @end example - @end itemize - ---- libavfilter/vf_libvmaf.c.orig 2021-10-24 20:47:07 UTC -+++ libavfilter/vf_libvmaf.c -@@ -24,8 +24,8 @@ - * Calculate the VMAF between two input videos. - */ - --#include <pthread.h> - #include <libvmaf.h> -+ - #include "libavutil/avstring.h" - #include "libavutil/opt.h" - #include "libavutil/pixdesc.h" -@@ -39,23 +39,9 @@ typedef struct LIBVMAFContext { - typedef struct LIBVMAFContext { - const AVClass *class; - FFFrameSync fs; -- const AVPixFmtDescriptor *desc; -- int width; -- int height; -- double vmaf_score; -- int vmaf_thread_created; -- pthread_t vmaf_thread; -- pthread_mutex_t lock; -- pthread_cond_t cond; -- int eof; -- AVFrame *gmain; -- AVFrame *gref; -- int frame_set; - char *model_path; - char *log_path; - char *log_fmt; -- int disable_clip; -- int disable_avx; - int enable_transform; - int phone_model; - int psnr; -@@ -65,185 +51,488 @@ typedef struct LIBVMAFContext { - int n_threads; - int n_subsample; - int enable_conf_interval; -- int error; -+ char *model_cfg; -+ char *feature_cfg; -+ VmafContext *vmaf; -+ VmafModel **model; -+ unsigned model_cnt; -+ unsigned frame_cnt; -+ unsigned bpc; - } LIBVMAFContext; - - #define OFFSET(x) offsetof(LIBVMAFContext, x) - #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM - - static const AVOption libvmaf_options[] = { -- {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, -- {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, -- {"log_fmt", "Set the format of the log (csv, json or xml).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, -- {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -- {"phone_model", "Invokes the phone model that will generate higher VMAF scores.", OFFSET(phone_model), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -- {"psnr", "Enables computing psnr along with vmaf.", OFFSET(psnr), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -- {"ssim", "Enables computing ssim along with vmaf.", OFFSET(ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -- {"ms_ssim", "Enables computing ms-ssim along with vmaf.", OFFSET(ms_ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -+ {"model_path", "use model='path=...'.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"log_path", "Set the file path to be used to write log.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, -+ {"log_fmt", "Set the format of the log (csv, json, xml, or sub).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str="xml"}, 0, 1, FLAGS}, -+ {"enable_transform", "use model='enable_transform=true'.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"phone_model", "use model='enable_transform=true'.", OFFSET(phone_model), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"psnr", "use feature='name=psnr'.", OFFSET(psnr), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"ssim", "use feature='name=ssim'.", OFFSET(ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"ms_ssim", "use feature='name=ms_ssim'.", OFFSET(ms_ssim), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, - {"pool", "Set the pool method to be used for computing vmaf.", OFFSET(pool), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, - {"n_threads", "Set number of threads to be used when computing vmaf.", OFFSET(n_threads), AV_OPT_TYPE_INT, {.i64=0}, 0, UINT_MAX, FLAGS}, - {"n_subsample", "Set interval for frame subsampling used when computing vmaf.", OFFSET(n_subsample), AV_OPT_TYPE_INT, {.i64=1}, 1, UINT_MAX, FLAGS}, -- {"enable_conf_interval", "Enables confidence interval.", OFFSET(enable_conf_interval), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS}, -+ {"enable_conf_interval", "model='enable_conf_interval=true'.", OFFSET(enable_conf_interval), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS|AV_OPT_FLAG_DEPRECATED}, -+ {"model", "Set the model to be used for computing vmaf.", OFFSET(model_cfg), AV_OPT_TYPE_STRING, {.str="version=vmaf_v0.6.1"}, 0, 1, FLAGS}, -+ {"feature", "Set the feature to be used for computing vmaf.", OFFSET(feature_cfg), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, - { NULL } - }; - - FRAMESYNC_DEFINE_CLASS(libvmaf, LIBVMAFContext, fs); - --#define read_frame_fn(type, bits) \ -- static int read_frame_##bits##bit(float *ref_data, float *main_data, \ -- float *temp_data, int stride, void *ctx) \ --{ \ -- LIBVMAFContext *s = (LIBVMAFContext *) ctx; \ -- int ret; \ -- \ -- pthread_mutex_lock(&s->lock); \ -- \ -- while (!s->frame_set && !s->eof) { \ -- pthread_cond_wait(&s->cond, &s->lock); \ -- } \ -- \ -- if (s->frame_set) { \ -- int ref_stride = s->gref->linesize[0]; \ -- int main_stride = s->gmain->linesize[0]; \ -- \ -- const type *ref_ptr = (const type *) s->gref->data[0]; \ -- const type *main_ptr = (const type *) s->gmain->data[0]; \ -- \ -- float *ptr = ref_data; \ -- float factor = 1.f / (1 << (bits - 8)); \ -- \ -- int h = s->height; \ -- int w = s->width; \ -- \ -- int i,j; \ -- \ -- for (i = 0; i < h; i++) { \ -- for ( j = 0; j < w; j++) { \ -- ptr[j] = ref_ptr[j] * factor; \ -- } \ -- ref_ptr += ref_stride / sizeof(*ref_ptr); \ -- ptr += stride / sizeof(*ptr); \ -- } \ -- \ -- ptr = main_data; \ -- \ -- for (i = 0; i < h; i++) { \ -- for (j = 0; j < w; j++) { \ -- ptr[j] = main_ptr[j] * factor; \ -- } \ -- main_ptr += main_stride / sizeof(*main_ptr); \ -- ptr += stride / sizeof(*ptr); \ -- } \ -- } \ -- \ -- ret = !s->frame_set; \ -- \ -- av_frame_unref(s->gref); \ -- av_frame_unref(s->gmain); \ -- s->frame_set = 0; \ -- \ -- pthread_cond_signal(&s->cond); \ -- pthread_mutex_unlock(&s->lock); \ -- \ -- if (ret) { \ -- return 2; \ -- } \ -- \ -- return 0; \ -+static enum VmafPixelFormat pix_fmt_map(enum AVPixelFormat av_pix_fmt) -+{ -+ switch (av_pix_fmt) { -+ case AV_PIX_FMT_YUV420P: -+ case AV_PIX_FMT_YUV420P10LE: -+ case AV_PIX_FMT_YUV420P12LE: -+ case AV_PIX_FMT_YUV420P16LE: -+ return VMAF_PIX_FMT_YUV420P; -+ case AV_PIX_FMT_YUV422P: -+ case AV_PIX_FMT_YUV422P10LE: -+ case AV_PIX_FMT_YUV422P12LE: -+ case AV_PIX_FMT_YUV422P16LE: -+ return VMAF_PIX_FMT_YUV422P; -+ case AV_PIX_FMT_YUV444P: -+ case AV_PIX_FMT_YUV444P10LE: -+ case AV_PIX_FMT_YUV444P12LE: -+ case AV_PIX_FMT_YUV444P16LE: -+ return VMAF_PIX_FMT_YUV444P; -+ default: -+ return VMAF_PIX_FMT_UNKNOWN; -+ } - } *** 802 LINES SKIPPED ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202304271203.33RC3lWx045938>