avformat: add ff_match_url_ext()

Match url against a list of extensions similar to av_match_ext()

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2023-05-15 00:54:50 +02:00
parent 2a74826b02
commit a7b06bfc5d
No known key found for this signature in database
GPG Key ID: B18E8928B3948D64
2 changed files with 34 additions and 0 deletions

View File

@ -50,6 +50,31 @@ int av_match_ext(const char *filename, const char *extensions)
return 0;
}
int ff_match_url_ext(const char *url, const char *extensions)
{
const char *ext;
URLComponents uc;
int ret;
char scratchpad[128];
if (!url)
return 0;
ret = ff_url_decompose(&uc, url, NULL);
if (ret < 0 || !URL_COMPONENT_HAVE(uc, scheme))
return ret;
for (ext = uc.query; *ext != '.' && ext > uc.path; ext--)
;
if (*ext != '.')
return 0;
if (uc.query - ext > sizeof(scratchpad))
return AVERROR(ENOMEM); //not enough memory in our scratchpad
av_strlcpy(scratchpad, ext + 1, FFMIN(sizeof(scratchpad), uc.query - ext));
return av_match_name(scratchpad, extensions);
}
const AVOutputFormat *av_guess_format(const char *short_name, const char *filename,
const char *mime_type)
{

View File

@ -705,6 +705,15 @@ int ff_unlock_avformat(void);
*/
void ff_format_set_url(AVFormatContext *s, char *url);
/**
* Return a positive value if the given url has one of the given
* extensions, negative AVERROR on error, 0 otherwise.
*
* @param url url to check against the given extensions
* @param extensions a comma-separated list of filename extensions
*/
int ff_match_url_ext(const char *url, const char *extensions);
struct FFOutputFormat;
void avpriv_register_devices(const struct FFOutputFormat * const o[], const AVInputFormat * const i[]);