PR #23193 opened by Marvin Scholz (ePirat) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23193 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23193.patch
libcelt, which it depends on, was not updated in a very long time and is considered deprecated, as Opus exists which has a CELT mode. Therefore remove standalone CELT decoding support. It was already broken since b8604a976128ffbd316653cdec11ba487f1025bb, 11 years ago, and no one noticed and complained. >From 23a37a3ce0c0e8cac27b54d54b876eeb00e23e86 Mon Sep 17 00:00:00 2001 From: Marvin Scholz <[email protected]> Date: Thu, 21 May 2026 19:22:54 +0200 Subject: [PATCH] avcodec: remove CELT decoder libcelt, which it depends on, was not updated in a very long time and is considered deprecated, as Opus exists which has a CELT mode. Therefore remove standalone CELT decoding support. It was already broken since b8604a976128ffbd316653cdec11ba487f1025bb, 11 years ago, and no one noticed and complained. --- Changelog | 1 + configure | 6 -- doc/decoders.texi | 8 --- doc/general_contents.texi | 2 - libavcodec/Makefile | 1 - libavcodec/allcodecs.c | 1 - libavcodec/libcelt_dec.c | 142 -------------------------------------- 7 files changed, 1 insertion(+), 160 deletions(-) delete mode 100644 libavcodec/libcelt_dec.c diff --git a/Changelog b/Changelog index 6df9bed4aa..cca53d0d7c 100644 --- a/Changelog +++ b/Changelog @@ -14,6 +14,7 @@ version <next>: - APV Vulkan hwaccel - Animated WebP decoder - Animated WebP demuxer +- Remove CELT decoding support (doesn't affect Opus CELT) version 8.1: diff --git a/configure b/configure index 3ba8723856..4e42519edd 100755 --- a/configure +++ b/configure @@ -222,7 +222,6 @@ External library support: --enable-libbluray enable BluRay reading using libbluray [no] --enable-libbs2b enable bs2b DSP library [no] --enable-libcaca enable textual display using libcaca [no] - --enable-libcelt enable CELT decoding via libcelt [no] --enable-libcdio enable audio CD grabbing with libcdio [no] --enable-libcodec2 enable codec2 en/decoding using libcodec2 [no] --enable-libdav1d enable AV1 decoding via libdav1d [no] @@ -2085,7 +2084,6 @@ EXTERNAL_LIBRARY_LIST=" libbluray libbs2b libcaca - libcelt libcodec2 libdav1d libdc1394 @@ -3825,7 +3823,6 @@ libaom_av1_encoder_deps="libaom" libaom_av1_encoder_select="extract_extradata_bsf dovi_rpuenc" libaribb24_decoder_deps="libaribb24" libaribcaption_decoder_deps="libaribcaption" -libcelt_decoder_deps="libcelt" libcodec2_decoder_deps="libcodec2" libcodec2_encoder_deps="libcodec2" libdav1d_decoder_deps="libdav1d" @@ -7322,9 +7319,6 @@ enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883 enabled libass && require_pkg_config libass "libass >= 0.11.0" ass/ass.h ass_library_init enabled libbluray && require_pkg_config libbluray libbluray libbluray/bluray.h bd_open enabled libbs2b && require_pkg_config libbs2b libbs2b bs2b.h bs2b_open -enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && - { check_lib libcelt celt/celt.h celt_decoder_create_custom -lcelt0 || - die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2 enabled libdav1d && require_pkg_config libdav1d "dav1d >= 1.0.0" "dav1d/dav1d.h" dav1d_version diff --git a/doc/decoders.texi b/doc/decoders.texi index 1db297f42f..c8177c15e7 100644 --- a/doc/decoders.texi +++ b/doc/decoders.texi @@ -307,14 +307,6 @@ This decoder generates wave patterns according to predefined sequences. Its use is purely internal and the format of the data it accepts is not publicly documented. -@section libcelt - -libcelt decoder wrapper. - -libcelt allows libavcodec to decode the Xiph CELT ultra-low delay audio codec. -Requires the presence of the libcelt headers and library during configuration. -You need to explicitly configure the build with @code{--enable-libcelt}. - @section libgsm libgsm decoder wrapper. diff --git a/doc/general_contents.texi b/doc/general_contents.texi index 47ac1989f2..5fed093642 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1295,8 +1295,6 @@ following image formats are supported: @item Bink Audio @tab @tab X @tab Used in Bink and Smacker files in many games. @item Bonk audio @tab @tab X -@item CELT @tab @tab E - @tab decoding supported through external library libcelt @item codec2 @tab E @tab E @tab en/decoding supported through external library libcodec2 @item CRI HCA @tab @tab X diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 2312e7b040..c6b878207b 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -1174,7 +1174,6 @@ OBJS-$(CONFIG_LIBAOM_AV1_DECODER) += libaomdec.o libaom.o OBJS-$(CONFIG_LIBAOM_AV1_ENCODER) += libaomenc.o libaom.o OBJS-$(CONFIG_LIBARIBB24_DECODER) += libaribb24.o ass.o OBJS-$(CONFIG_LIBARIBCAPTION_DECODER) += libaribcaption.o ass.o -OBJS-$(CONFIG_LIBCELT_DECODER) += libcelt_dec.o OBJS-$(CONFIG_LIBCODEC2_DECODER) += libcodec2.o OBJS-$(CONFIG_LIBCODEC2_ENCODER) += libcodec2.o OBJS-$(CONFIG_LIBDAV1D_DECODER) += libdav1d.o av1_parse.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index e29a3a4020..0815d46f79 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -786,7 +786,6 @@ extern FFCodec ff_libaom_av1_encoder; /* preferred over libaribb24 */ extern const FFCodec ff_libaribcaption_decoder; extern const FFCodec ff_libaribb24_decoder; -extern const FFCodec ff_libcelt_decoder; extern const FFCodec ff_libcodec2_encoder; extern const FFCodec ff_libcodec2_decoder; extern const FFCodec ff_libdav1d_decoder; diff --git a/libavcodec/libcelt_dec.c b/libavcodec/libcelt_dec.c deleted file mode 100644 index fcd4fc7736..0000000000 --- a/libavcodec/libcelt_dec.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Xiph CELT decoder using libcelt - * Copyright (c) 2011 Nicolas George - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <celt/celt.h> -#include <celt/celt_header.h> -#include "avcodec.h" -#include "codec_internal.h" -#include "decode.h" -#include "libavutil/intreadwrite.h" - -struct libcelt_context { - CELTMode *mode; - CELTDecoder *dec; - int discard; -}; - -static int ff_celt_error_to_averror(int err) -{ - switch (err) { - case CELT_BAD_ARG: return AVERROR(EINVAL); -#ifdef CELT_BUFFER_TOO_SMALL - case CELT_BUFFER_TOO_SMALL: return AVERROR(ENOBUFS); -#endif - case CELT_INTERNAL_ERROR: return AVERROR(EFAULT); - case CELT_CORRUPTED_DATA: return AVERROR_INVALIDDATA; - case CELT_UNIMPLEMENTED: return AVERROR(ENOSYS); -#ifdef ENOTRECOVERABLE - case CELT_INVALID_STATE: return AVERROR(ENOTRECOVERABLE); -#endif - case CELT_ALLOC_FAIL: return AVERROR(ENOMEM); - default: return AVERROR(EINVAL); - } -} - -static int ff_celt_bitstream_version_hack(CELTMode *mode) -{ - CELTHeader header = { .version_id = 0 }; - celt_header_init(&header, mode, 960, 2); - return header.version_id; -} - -static av_cold int libcelt_dec_init(AVCodecContext *c) -{ - struct libcelt_context *celt = c->priv_data; - int err; - - if (!c->ch_layout.nb_channels || !c->frame_size || - c->frame_size > INT_MAX / sizeof(int16_t) / c->ch_layout.nb_channels) - return AVERROR(EINVAL); - celt->mode = celt_mode_create(c->sample_rate, c->frame_size, &err); - if (!celt->mode) - return ff_celt_error_to_averror(err); - celt->dec = celt_decoder_create_custom(celt->mode, c->ch_layout.nb_channels, &err); - if (!celt->dec) { - celt_mode_destroy(celt->mode); - return ff_celt_error_to_averror(err); - } - if (c->extradata_size >= 4) { - celt->discard = AV_RL32(c->extradata); - if (celt->discard < 0 || celt->discard >= c->frame_size) { - av_log(c, AV_LOG_WARNING, - "Invalid overlap (%d), ignored.\n", celt->discard); - celt->discard = 0; - } - } - if (c->extradata_size >= 8) { - unsigned version = AV_RL32(c->extradata + 4); - unsigned lib_version = ff_celt_bitstream_version_hack(celt->mode); - if (version != lib_version) - av_log(c, AV_LOG_WARNING, - "CELT bitstream version 0x%x may be " - "improperly decoded by libcelt for version 0x%x.\n", - version, lib_version); - } - c->sample_fmt = AV_SAMPLE_FMT_S16; - return 0; -} - -static av_cold int libcelt_dec_close(AVCodecContext *c) -{ - struct libcelt_context *celt = c->priv_data; - - celt_decoder_destroy(celt->dec); - celt_mode_destroy(celt->mode); - return 0; -} - -static int libcelt_dec_decode(AVCodecContext *c, AVFrame *frame, - int *got_frame_ptr, AVPacket *pkt) -{ - struct libcelt_context *celt = c->priv_data; - int err; - int16_t *pcm; - - frame->nb_samples = c->frame_size; - if ((err = ff_get_buffer(c, frame, 0)) < 0) - return err; - pcm = (int16_t *)frame->data[0]; - err = celt_decode(celt->dec, pkt->data, pkt->size, pcm, c->frame_size); - if (err < 0) - return ff_celt_error_to_averror(err); - if (celt->discard) { - frame->nb_samples -= celt->discard; - memmove(pcm, pcm + celt->discard * c->ch_layout.nb_channels, - frame->nb_samples * c->ch_layout.nb_channels * sizeof(int16_t)); - celt->discard = 0; - } - *got_frame_ptr = 1; - return pkt->size; -} - -const FFCodec ff_libcelt_decoder = { - .p.name = "libcelt", - CODEC_LONG_NAME("Xiph CELT decoder using libcelt"), - .p.type = AVMEDIA_TYPE_AUDIO, - .p.id = AV_CODEC_ID_CELT, - .p.capabilities = AV_CODEC_CAP_DR1, - .p.wrapper_name = "libcelt", - .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE, - .priv_data_size = sizeof(struct libcelt_context), - .init = libcelt_dec_init, - .close = libcelt_dec_close, - FF_CODEC_DECODE_CB(libcelt_dec_decode), -}; -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
