[FFmpeg-devel] [PATCH 2/2] avformat: add av_register_one() to register one codec/parser/bsf/hwaccel/muxer/demuxer by its char* name
Michael Niedermayer
michaelni at gmx.at
Tue Sep 30 02:02:50 CEST 2014
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
libavformat/allformats.c | 44 +++++++++++++++++++++++++++++++-------------
libavformat/avformat.h | 5 +++++
2 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index d54ed9b..b613bed 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -26,37 +26,42 @@
#include "version.h"
#define REGISTER_MUXER(X, x) \
- { \
+ if (!name || !strcmp(name, AV_STRINGIFY(x##_muxer))) { \
extern AVOutputFormat ff_##x##_muxer; \
- if (CONFIG_##X##_MUXER) \
+ if (CONFIG_##X##_MUXER) { \
av_register_output_format(&ff_##x##_muxer); \
+ found++; \
+ } \
}
#define REGISTER_DEMUXER(X, x) \
- { \
+ if (!name || !strcmp(name, AV_STRINGIFY(x##_demuxer))) { \
extern AVInputFormat ff_##x##_demuxer; \
- if (CONFIG_##X##_DEMUXER) \
+ if (CONFIG_##X##_DEMUXER) { \
av_register_input_format(&ff_##x##_demuxer); \
+ found++; \
+ } \
}
#define REGISTER_MUXDEMUX(X, x) REGISTER_MUXER(X, x); REGISTER_DEMUXER(X, x)
#define REGISTER_PROTOCOL(X, x) \
- { \
+ if (!name || !strcmp(name, AV_STRINGIFY(x##_protocol))) { \
extern URLProtocol ff_##x##_protocol; \
- if (CONFIG_##X##_PROTOCOL) \
+ if (CONFIG_##X##_PROTOCOL) { \
ffurl_register_protocol(&ff_##x##_protocol); \
+ found++; \
+ } \
}
-void av_register_all(void)
+int av_register_one(const char *name)
{
- static int initialized;
-
- if (initialized)
- return;
- initialized = 1;
+ int found = 0;
- avcodec_register_all();
+ if (name) {
+ found = avcodec_register_one(name);
+ } else
+ avcodec_register_all();
/* (de)muxers */
REGISTER_MUXER (A64, a64);
@@ -383,4 +388,17 @@ void av_register_all(void)
REGISTER_PROTOCOL(LIBRTMPTE, librtmpte);
REGISTER_PROTOCOL(LIBSSH, libssh);
REGISTER_PROTOCOL(LIBSMBCLIENT, libsmbclient);
+
+ return found;
}
+
+void av_register_all(void)
+{
+ static int initialized;
+
+ if (initialized)
+ return;
+ initialized = 1;
+
+ av_register_one(NULL);
+}
\ No newline at end of file
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 78054de..902a329 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1782,6 +1782,11 @@ const char *avformat_license(void);
*/
void av_register_all(void);
+/**
+ * @returns the number of newly registered entities
+ */
+int av_register_one(const char *name);
+
void av_register_input_format(AVInputFormat *format);
void av_register_output_format(AVOutputFormat *format);
--
1.7.9.5
More information about the ffmpeg-devel
mailing list