On 31-01-2020 10:41 pm, Andreas Rheinhardt wrote:
Gyan Doshi:
Allows selecting demuxer by extension which are more widely recognized
by users.
Conditional cast added since this function will usually be called after
av_find_input_format, and so matches its return type.
That's not a good point. av_demuxer_find_by_ext() already always
returns const AVInputFormat *, so you casting the const away when
returning is pointless. Furthermore, any caller that wants to use this
new function can simply use a pointer to const AVInputFormat to work
with both av_find_input_format() and av_demuxer_find_by_ext(). And
after all, adding const makes the code more future-proof
(av_find_input_format() will return const AVInputFormat * after the
next major bump).
Ok, I don't think I should add const to the pointers at the receiving
end (fftools) since they are global variables and may not be acceptable
as const. So I'll cast away the const when receiving and remove the
conditional cast.
Sounds fine?
Gyan
---
libavformat/avformat.h | 5 +++++
libavformat/format.c | 15 +++++++++++++++
libavformat/version.h | 2 +-
3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 9b9b634ec3..9172ddbc8a 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -2237,6 +2237,11 @@ int avformat_alloc_output_context2(AVFormatContext
**ctx, ff_const59 AVOutputFor
*/
ff_const59 AVInputFormat *av_find_input_format(const char *short_name);
+/**
+ * Find AVInputFormat based on an extension.
+ */
+const AVInputFormat *av_demuxer_find_by_ext(const char *extension);
+
/**
* Guess the file format.
*
diff --git a/libavformat/format.c b/libavformat/format.c
index c47490c8eb..9dda6df676 100644
--- a/libavformat/format.c
+++ b/libavformat/format.c
@@ -125,6 +125,21 @@ ff_const59 AVInputFormat *av_find_input_format(const char
*short_name)
return NULL;
}
+const AVInputFormat *av_demuxer_find_by_ext(const char *extension)
+{
+ const AVInputFormat *fmt = NULL;
+ void *i = 0;
Use NULL, it's a pointer after all (yes, I know that
av_demuxer_iterate() treats it as a uintptr_t internally).
+ while ((fmt = av_demuxer_iterate(&i)))
+ if (fmt->extensions && av_match_name(extension, fmt->extensions))
+#if FF_API_AVIOFORMAT
+ return (AVInputFormat*)fmt;
+#else
+ return fmt;
+#endif
As has been said: The first branch of the #if should be deleted (as
the #if, of course).
- Andreas
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".