Based on an unfinished patch by atomnuker.
---
Makefile |3 +-
configure | 12 +-
doc/APIchanges |4 +
libavcodec/.gitignore |2 +
libavcodec/allcodecs.c | 1473
libavcodec/avcodec.h | 31 +
libavcodec/parser.c| 84 ++-
libavcodec/utils.c | 112
libavcodec/version.h |3 +
9 files changed, 973 insertions(+), 751 deletions(-)
diff --git a/Makefile b/Makefile
index 9defdde..1d1c886 100644
--- a/Makefile
+++ b/Makefile
@@ -142,7 +142,8 @@ distclean:: clean
$(RM) .version avversion.h config.asm config.h mapfile \
ffbuild/.config ffbuild/config.* libavutil/avconfig.h \
version.h libavutil/ffversion.h libavcodec/codec_names.h \
- libavcodec/bsf_list.c libavformat/protocol_list.c
+ libavcodec/bsf_list.c libavformat/protocol_list.c \
+ libavcodec/codec_list.c libavcodec/parser_list.c
ifeq ($(SRC_LINK),src)
$(RM) src
endif
diff --git a/configure b/configure
index 0b01a22..e8795d8 100755
--- a/configure
+++ b/configure
@@ -3523,9 +3523,6 @@ find_things(){
sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p"
"$file"
}
-ENCODER_LIST=$(find_things encoder ENC libavcodec/allcodecs.c)
-DECODER_LIST=$(find_things decoder DEC libavcodec/allcodecs.c)
-PARSER_LIST=$(find_things parser PARSER libavcodec/allcodecs.c)
MUXER_LIST=$(find_thingsmuxer_MUX libavformat/allformats.c)
DEMUXER_LIST=$(find_things demuxer DEMUXlibavformat/allformats.c)
OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c)
@@ -3539,6 +3536,13 @@ find_things_extern(){
sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
}
+ENCODER_LIST=$(find_things_extern encoder AVCodec libavcodec/allcodecs.c)
+DECODER_LIST=$(find_things_extern decoder AVCodec libavcodec/allcodecs.c)
+CODEC_LIST="
+$ENCODER_LIST
+$DECODER_LIST
+"
+PARSER_LIST=$(find_things_extern parser AVCodecParser libavcodec/parser.c)
BSF_LIST=$(find_things_extern bsf AVBitStreamFilter
libavcodec/bitstream_filters.c)
HWACCEL_LIST=$(find_things_extern hwaccel AVHWAccel libavcodec/hwaccels.h)
PROTOCOL_LIST=$(find_things_extern protocol URLProtocol
libavformat/protocols.c)
@@ -7027,6 +7031,8 @@ print_enabled_components(){
cp_if_changed $TMPH $file
}
+print_enabled_components libavcodec/codec_list.c AVCodec codec_list $CODEC_LIST
+print_enabled_components libavcodec/parser_list.c AVCodecParser parser_list
$PARSER_LIST
print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter
bitstream_filters $BSF_LIST
print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols
$PROTOCOL_LIST
diff --git a/doc/APIchanges b/doc/APIchanges
index 6185545..77da22c 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@ libavutil: 2017-10-21
API changes, most recent first:
+2018-01-xx - xxx - lavc 58.9.100 - avcodec.h
+ Deprecate use of avcodec_register(), avcodec_register_all(), and
+ av_codec_next(). Add av_codec_iterate().
+
2018-01-xx - xxx - lavf 58.7.100 - avformat.h
Deprecate AVFormatContext filename field which had limited length, use the
new dynamically allocated url field instead.
diff --git a/libavcodec/.gitignore b/libavcodec/.gitignore
index 77a2ab1..28814f7 100644
--- a/libavcodec/.gitignore
+++ b/libavcodec/.gitignore
@@ -2,3 +2,5 @@
/*_tables.c
/*_tables.h
/bsf_list.c
+/codec_list.c
+/parser_list.c
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index ed1e7ab..c15547a 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -29,641 +29,864 @@
#include "avcodec.h"
#include "version.h"
-#define REGISTER_ENCODER(X, x) \
-{ \
-extern AVCodec ff_##x##_encoder;\
-if (CONFIG_##X##_ENCODER) \
-avcodec_register(_##x##_encoder);\
-}
+extern AVCodec ff_a64multi_encoder;
+extern AVCodec ff_a64multi5_encoder;
+extern AVCodec ff_aasc_decoder;
+extern AVCodec ff_aic_decoder;
+extern AVCodec ff_alias_pix_encoder;
+extern AVCodec ff_alias_pix_decoder;
+extern AVCodec ff_amv_encoder;
+extern AVCodec ff_amv_decoder;
+extern AVCodec ff_anm_decoder;
+extern AVCodec ff_ansi_decoder;
+extern AVCodec ff_apng_encoder;
+extern AVCodec ff_apng_decoder;
+extern AVCodec ff_asv1_encoder;
+extern AVCodec ff_asv1_decoder;
+extern AVCodec ff_asv2_encoder;
+extern AVCodec ff_asv2_decoder;
+extern AVCodec ff_aura_decoder;
+extern AVCodec ff_aura2_decoder;
+extern AVCodec ff_avrp_encoder;
+extern AVCodec ff_avrp_decoder;
+extern AVCodec ff_avrn_decoder;
+extern AVCodec ff_avs_decoder;
+extern AVCodec ff_avui_encoder;
+extern AVCodec ff_avui_decoder;
+extern AVCodec