Message ID | 20191122085620.14296-1-lq@chinaffmpeg.org |
---|---|
State | New |
Headers | show |
Steven Liu: > Signed-off-by: Steven Liu <lq@chinaffmpeg.org> > --- > doc/APIchanges | 3 +++ > libavformat/protocols.c | 16 ++++++++++++++++ > libavformat/url.h | 9 +++++++++ > libavformat/version.h | 2 +- > 4 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 401c65a753..804a57de41 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,9 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2019-11-22 - xxxxxxxxxx - lavf 58.35.101 - url.h > + Add av_find_protocol_by_name(). > + > 2019-11-17 - 1c23abc88f - lavu 56.36.100 - eval API > Add av_expr_count_vars(). > > diff --git a/libavformat/protocols.c b/libavformat/protocols.c > index face5b29b5..d4dee23a8e 100644 > --- a/libavformat/protocols.c > +++ b/libavformat/protocols.c > @@ -107,6 +107,22 @@ const char *avio_enum_protocols(void **opaque, int output) > return avio_enum_protocols(opaque, output); > } > > +const URLProtocol *av_find_protocol_by_name(const char *name) > +{ > + int i = 0; > + const URLProtocol **protocols; > + protocols = ffurl_get_protocols(NULL, NULL); You should not call ffurl_get_protocols as you don't use its functionality (namely filtering out unwanted protocols). Instead you should simply directly search the list yourself. This way you won't have to free anything. - Andreas
> On Nov 22, 2019, at 4:56 PM, Steven Liu <lq@chinaffmpeg.org> wrote: > > Signed-off-by: Steven Liu <lq@chinaffmpeg.org> > --- > doc/APIchanges | 3 +++ > libavformat/protocols.c | 16 ++++++++++++++++ > libavformat/url.h | 9 +++++++++ > libavformat/version.h | 2 +- > 4 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 401c65a753..804a57de41 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,9 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2019-11-22 - xxxxxxxxxx - lavf 58.35.101 - url.h > + Add av_find_protocol_by_name(). > + > 2019-11-17 - 1c23abc88f - lavu 56.36.100 - eval API > Add av_expr_count_vars(). > > diff --git a/libavformat/protocols.c b/libavformat/protocols.c > index face5b29b5..d4dee23a8e 100644 > --- a/libavformat/protocols.c > +++ b/libavformat/protocols.c > @@ -107,6 +107,22 @@ const char *avio_enum_protocols(void **opaque, int output) > return avio_enum_protocols(opaque, output); > } > > +const URLProtocol *av_find_protocol_by_name(const char *name) > +{ > + int i = 0; > + const URLProtocol **protocols; > + protocols = ffurl_get_protocols(NULL, NULL); > + for (i = 0; protocols[i]; i++) { > + const URLProtocol *proto = protocols[i]; > + if (!strcmp(proto->name, name)) { > + av_freep(&protocols); > + return proto; > + } > + } > + av_freep(&protocols); > + return NULL; > +} > + No null pointer check on ‘name’. And I prefer av_free() is this case. > const URLProtocol **ffurl_get_protocols(const char *whitelist, > const char *blacklist) > { > diff --git a/libavformat/url.h b/libavformat/url.h > index 4750bfff82..fe0aa10b27 100644 > --- a/libavformat/url.h > +++ b/libavformat/url.h > @@ -322,6 +322,15 @@ void ff_make_absolute_url(char *buf, int size, const char *base, > */ > AVIODirEntry *ff_alloc_dir_entry(void); > > +/** > + * Return the URLProtocol of the protocol that will handle the passed name. > + * > + * NULL is returned if no protocol could be found for the name. > + * > + * @return URLProtocol of the protocol or NULL. > + */ > +const URLProtocol *av_find_protocol_by_name(const char *name); > + > const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); > > /** > diff --git a/libavformat/version.h b/libavformat/version.h > index bac54aed9d..213b66b45f 100644 > --- a/libavformat/version.h > +++ b/libavformat/version.h > @@ -33,7 +33,7 @@ > // Also please add any ticket numbers that you believe might be affected here > #define LIBAVFORMAT_VERSION_MAJOR 58 > #define LIBAVFORMAT_VERSION_MINOR 35 > -#define LIBAVFORMAT_VERSION_MICRO 100 > +#define LIBAVFORMAT_VERSION_MICRO 101 > > #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ > LIBAVFORMAT_VERSION_MINOR, \ > -- > 2.15.1 > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Steven Liu: > diff --git a/libavformat/url.h b/libavformat/url.h > index 4750bfff82..fe0aa10b27 100644 > --- a/libavformat/url.h > +++ b/libavformat/url.h > @@ -322,6 +322,15 @@ void ff_make_absolute_url(char *buf, int size, const char *base, > */ > AVIODirEntry *ff_alloc_dir_entry(void); > > +/** > + * Return the URLProtocol of the protocol that will handle the passed name. > + * > + * NULL is returned if no protocol could be found for the name. > + * > + * @return URLProtocol of the protocol or NULL. > + */ > +const URLProtocol *av_find_protocol_by_name(const char *name); > + > const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); > > /** And url.h is not a public header and therefore the wrong place for this; it should be avio.h (which already contains avio_enum_protocols). - Andreas
Steven Liu (12019-11-22): > Signed-off-by: Steven Liu <lq@chinaffmpeg.org> > --- > doc/APIchanges | 3 +++ > libavformat/protocols.c | 16 ++++++++++++++++ > libavformat/url.h | 9 +++++++++ > libavformat/version.h | 2 +- > 4 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 401c65a753..804a57de41 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -15,6 +15,9 @@ libavutil: 2017-10-21 > > API changes, most recent first: > > +2019-11-22 - xxxxxxxxxx - lavf 58.35.101 - url.h > + Add av_find_protocol_by_name(). > + > 2019-11-17 - 1c23abc88f - lavu 56.36.100 - eval API > Add av_expr_count_vars(). > > diff --git a/libavformat/protocols.c b/libavformat/protocols.c > index face5b29b5..d4dee23a8e 100644 > --- a/libavformat/protocols.c > +++ b/libavformat/protocols.c > @@ -107,6 +107,22 @@ const char *avio_enum_protocols(void **opaque, int output) > return avio_enum_protocols(opaque, output); > } > > +const URLProtocol *av_find_protocol_by_name(const char *name) > +{ > + int i = 0; > + const URLProtocol **protocols; > + protocols = ffurl_get_protocols(NULL, NULL); > + for (i = 0; protocols[i]; i++) { > + const URLProtocol *proto = protocols[i]; > + if (!strcmp(proto->name, name)) { > + av_freep(&protocols); > + return proto; > + } > + } > + av_freep(&protocols); > + return NULL; > +} > + > const URLProtocol **ffurl_get_protocols(const char *whitelist, > const char *blacklist) > { > diff --git a/libavformat/url.h b/libavformat/url.h > index 4750bfff82..fe0aa10b27 100644 > --- a/libavformat/url.h > +++ b/libavformat/url.h > @@ -322,6 +322,15 @@ void ff_make_absolute_url(char *buf, int size, const char *base, > */ > AVIODirEntry *ff_alloc_dir_entry(void); > > +/** > + * Return the URLProtocol of the protocol that will handle the passed name. > + * > + * NULL is returned if no protocol could be found for the name. > + * > + * @return URLProtocol of the protocol or NULL. > + */ > +const URLProtocol *av_find_protocol_by_name(const char *name); URLProtocol is not AVURLProtocol, that means it was decided that this structure was private. You can try to change that decision, but there are steps to do that, including renaming the structure in the AV namespace. But is it necessary? > + > const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); > > /** > diff --git a/libavformat/version.h b/libavformat/version.h > index bac54aed9d..213b66b45f 100644 > --- a/libavformat/version.h > +++ b/libavformat/version.h > @@ -33,7 +33,7 @@ > // Also please add any ticket numbers that you believe might be affected here > #define LIBAVFORMAT_VERSION_MAJOR 58 > #define LIBAVFORMAT_VERSION_MINOR 35 > -#define LIBAVFORMAT_VERSION_MICRO 100 > +#define LIBAVFORMAT_VERSION_MICRO 101 I think adding a public function requires minor bump. > > #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ > LIBAVFORMAT_VERSION_MINOR, \ Regards,
diff --git a/doc/APIchanges b/doc/APIchanges index 401c65a753..804a57de41 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2019-11-22 - xxxxxxxxxx - lavf 58.35.101 - url.h + Add av_find_protocol_by_name(). + 2019-11-17 - 1c23abc88f - lavu 56.36.100 - eval API Add av_expr_count_vars(). diff --git a/libavformat/protocols.c b/libavformat/protocols.c index face5b29b5..d4dee23a8e 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -107,6 +107,22 @@ const char *avio_enum_protocols(void **opaque, int output) return avio_enum_protocols(opaque, output); } +const URLProtocol *av_find_protocol_by_name(const char *name) +{ + int i = 0; + const URLProtocol **protocols; + protocols = ffurl_get_protocols(NULL, NULL); + for (i = 0; protocols[i]; i++) { + const URLProtocol *proto = protocols[i]; + if (!strcmp(proto->name, name)) { + av_freep(&protocols); + return proto; + } + } + av_freep(&protocols); + return NULL; +} + const URLProtocol **ffurl_get_protocols(const char *whitelist, const char *blacklist) { diff --git a/libavformat/url.h b/libavformat/url.h index 4750bfff82..fe0aa10b27 100644 --- a/libavformat/url.h +++ b/libavformat/url.h @@ -322,6 +322,15 @@ void ff_make_absolute_url(char *buf, int size, const char *base, */ AVIODirEntry *ff_alloc_dir_entry(void); +/** + * Return the URLProtocol of the protocol that will handle the passed name. + * + * NULL is returned if no protocol could be found for the name. + * + * @return URLProtocol of the protocol or NULL. + */ +const URLProtocol *av_find_protocol_by_name(const char *name); + const AVClass *ff_urlcontext_child_class_next(const AVClass *prev); /** diff --git a/libavformat/version.h b/libavformat/version.h index bac54aed9d..213b66b45f 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -33,7 +33,7 @@ // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 #define LIBAVFORMAT_VERSION_MINOR 35 -#define LIBAVFORMAT_VERSION_MICRO 100 +#define LIBAVFORMAT_VERSION_MICRO 101 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \
Signed-off-by: Steven Liu <lq@chinaffmpeg.org> --- doc/APIchanges | 3 +++ libavformat/protocols.c | 16 ++++++++++++++++ libavformat/url.h | 9 +++++++++ libavformat/version.h | 2 +- 4 files changed, 29 insertions(+), 1 deletion(-)