This commit also disables the async fate test, because it used internal APIs in a non-kosher way, which no longer exists. * commit '2758cdedfb7ac61f8b5e4861f99218b6fd43491d': lavf: reorganize URLProtocols Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>tags/n3.1
| @@ -3138,9 +3138,17 @@ MUXER_LIST=$(find_things muxer _MUX libavformat/allformats.c) | |||||
| DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c) | DEMUXER_LIST=$(find_things demuxer DEMUX libavformat/allformats.c) | ||||
| OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c) | OUTDEV_LIST=$(find_things outdev OUTDEV libavdevice/alldevices.c) | ||||
| INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c) | INDEV_LIST=$(find_things indev _IN libavdevice/alldevices.c) | ||||
| PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c) | |||||
| FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c) | FILTER_LIST=$(find_things filter FILTER libavfilter/allfilters.c) | ||||
| find_things_extern(){ | |||||
| thing=$1 | |||||
| pattern=$2 | |||||
| file=$source_path/$3 | |||||
| sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file" | |||||
| } | |||||
| PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c) | |||||
| ALL_COMPONENTS=" | ALL_COMPONENTS=" | ||||
| $BSF_LIST | $BSF_LIST | ||||
| $DECODER_LIST | $DECODER_LIST | ||||
| @@ -19,6 +19,7 @@ OBJS = allformats.o \ | |||||
| options.o \ | options.o \ | ||||
| os_support.o \ | os_support.o \ | ||||
| qtpalette.o \ | qtpalette.o \ | ||||
| protocols.o \ | |||||
| riff.o \ | riff.o \ | ||||
| sdp.o \ | sdp.o \ | ||||
| url.o \ | url.o \ | ||||
| @@ -41,13 +41,6 @@ | |||||
| #define REGISTER_MUXDEMUX(X, x) REGISTER_MUXER(X, x); REGISTER_DEMUXER(X, x) | #define REGISTER_MUXDEMUX(X, x) REGISTER_MUXER(X, x); REGISTER_DEMUXER(X, x) | ||||
| #define REGISTER_PROTOCOL(X, x) \ | |||||
| { \ | |||||
| extern URLProtocol ff_##x##_protocol; \ | |||||
| if (CONFIG_##X##_PROTOCOL) \ | |||||
| ffurl_register_protocol(&ff_##x##_protocol); \ | |||||
| } | |||||
| void av_register_all(void) | void av_register_all(void) | ||||
| { | { | ||||
| static int initialized; | static int initialized; | ||||
| @@ -367,57 +360,9 @@ void av_register_all(void) | |||||
| REGISTER_DEMUXER (IMAGE_TIFF_PIPE, image_tiff_pipe); | REGISTER_DEMUXER (IMAGE_TIFF_PIPE, image_tiff_pipe); | ||||
| REGISTER_DEMUXER (IMAGE_WEBP_PIPE, image_webp_pipe); | REGISTER_DEMUXER (IMAGE_WEBP_PIPE, image_webp_pipe); | ||||
| /* protocols */ | |||||
| REGISTER_PROTOCOL(ASYNC, async); | |||||
| REGISTER_PROTOCOL(BLURAY, bluray); | |||||
| REGISTER_PROTOCOL(CACHE, cache); | |||||
| REGISTER_PROTOCOL(CONCAT, concat); | |||||
| REGISTER_PROTOCOL(CRYPTO, crypto); | |||||
| REGISTER_PROTOCOL(DATA, data); | |||||
| REGISTER_PROTOCOL(FFRTMPCRYPT, ffrtmpcrypt); | |||||
| REGISTER_PROTOCOL(FFRTMPHTTP, ffrtmphttp); | |||||
| REGISTER_PROTOCOL(FILE, file); | |||||
| REGISTER_PROTOCOL(FTP, ftp); | |||||
| REGISTER_PROTOCOL(GOPHER, gopher); | |||||
| REGISTER_PROTOCOL(HLS, hls); | |||||
| REGISTER_PROTOCOL(HTTP, http); | |||||
| REGISTER_PROTOCOL(HTTPPROXY, httpproxy); | |||||
| REGISTER_PROTOCOL(HTTPS, https); | |||||
| REGISTER_PROTOCOL(ICECAST, icecast); | |||||
| REGISTER_PROTOCOL(MMSH, mmsh); | |||||
| REGISTER_PROTOCOL(MMST, mmst); | |||||
| REGISTER_PROTOCOL(MD5, md5); | |||||
| REGISTER_PROTOCOL(PIPE, pipe); | |||||
| REGISTER_PROTOCOL(RTMP, rtmp); | |||||
| REGISTER_PROTOCOL(RTMPE, rtmpe); | |||||
| REGISTER_PROTOCOL(RTMPS, rtmps); | |||||
| REGISTER_PROTOCOL(RTMPT, rtmpt); | |||||
| REGISTER_PROTOCOL(RTMPTE, rtmpte); | |||||
| REGISTER_PROTOCOL(RTMPTS, rtmpts); | |||||
| REGISTER_PROTOCOL(RTP, rtp); | |||||
| REGISTER_PROTOCOL(SCTP, sctp); | |||||
| REGISTER_PROTOCOL(SRTP, srtp); | |||||
| REGISTER_PROTOCOL(SUBFILE, subfile); | |||||
| REGISTER_PROTOCOL(TCP, tcp); | |||||
| REGISTER_PROTOCOL(TLS_SCHANNEL, tls_schannel); | |||||
| REGISTER_PROTOCOL(TLS_SECURETRANSPORT, tls_securetransport); | |||||
| REGISTER_PROTOCOL(TLS_GNUTLS, tls_gnutls); | |||||
| REGISTER_PROTOCOL(TLS_OPENSSL, tls_openssl); | |||||
| REGISTER_PROTOCOL(UDP, udp); | |||||
| REGISTER_PROTOCOL(UDPLITE, udplite); | |||||
| REGISTER_PROTOCOL(UNIX, unix); | |||||
| /* external libraries */ | /* external libraries */ | ||||
| REGISTER_MUXER (CHROMAPRINT, chromaprint); | REGISTER_MUXER (CHROMAPRINT, chromaprint); | ||||
| REGISTER_DEMUXER (LIBGME, libgme); | REGISTER_DEMUXER (LIBGME, libgme); | ||||
| REGISTER_DEMUXER (LIBMODPLUG, libmodplug); | REGISTER_DEMUXER (LIBMODPLUG, libmodplug); | ||||
| REGISTER_MUXDEMUX(LIBNUT, libnut); | REGISTER_MUXDEMUX(LIBNUT, libnut); | ||||
| REGISTER_PROTOCOL(LIBRTMP, librtmp); | |||||
| REGISTER_PROTOCOL(LIBRTMPE, librtmpe); | |||||
| REGISTER_PROTOCOL(LIBRTMPS, librtmps); | |||||
| REGISTER_PROTOCOL(LIBRTMPT, librtmpt); | |||||
| REGISTER_PROTOCOL(LIBRTMPTE, librtmpte); | |||||
| REGISTER_PROTOCOL(LIBSSH, libssh); | |||||
| REGISTER_PROTOCOL(LIBSMBCLIENT, libsmbclient); | |||||
| } | } | ||||
| @@ -479,7 +479,7 @@ static const AVClass async_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_async_protocol = { | |||||
| const URLProtocol ff_async_protocol = { | |||||
| .name = "async", | .name = "async", | ||||
| .url_open2 = async_open, | .url_open2 = async_open, | ||||
| .url_read = async_read, | .url_read = async_read, | ||||
| @@ -489,7 +489,7 @@ URLProtocol ff_async_protocol = { | |||||
| .priv_data_class = &async_context_class, | .priv_data_class = &async_context_class, | ||||
| }; | }; | ||||
| #ifdef TEST | |||||
| #if 0 | |||||
| #define TEST_SEEK_POS (1536) | #define TEST_SEEK_POS (1536) | ||||
| #define TEST_STREAM_SIZE (2048) | #define TEST_STREAM_SIZE (2048) | ||||
| @@ -581,7 +581,7 @@ static const AVClass async_test_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_async_test_protocol = { | |||||
| const URLProtocol ff_async_test_protocol = { | |||||
| .name = "async-test", | .name = "async-test", | ||||
| .url_open2 = async_test_open, | .url_open2 = async_test_open, | ||||
| .url_read = async_test_read, | .url_read = async_test_read, | ||||
| @@ -31,13 +31,6 @@ | |||||
| #endif | #endif | ||||
| #include "url.h" | #include "url.h" | ||||
| static URLProtocol *first_protocol = NULL; | |||||
| URLProtocol *ffurl_protocol_next(const URLProtocol *prev) | |||||
| { | |||||
| return prev ? prev->next : first_protocol; | |||||
| } | |||||
| /** @name Logging context. */ | /** @name Logging context. */ | ||||
| /*@{*/ | /*@{*/ | ||||
| static const char *urlcontext_to_name(void *ptr) | static const char *urlcontext_to_name(void *ptr) | ||||
| @@ -59,17 +52,20 @@ static void *urlcontext_child_next(void *obj, void *prev) | |||||
| static const AVClass *urlcontext_child_class_next(const AVClass *prev) | static const AVClass *urlcontext_child_class_next(const AVClass *prev) | ||||
| { | { | ||||
| URLProtocol *p = NULL; | |||||
| int i; | |||||
| /* find the protocol that corresponds to prev */ | /* find the protocol that corresponds to prev */ | ||||
| while (prev && (p = ffurl_protocol_next(p))) | |||||
| if (p->priv_data_class == prev) | |||||
| for (i = 0; ff_url_protocols[i]; i++) { | |||||
| if (ff_url_protocols[i]->priv_data_class == prev) { | |||||
| i++; | |||||
| break; | break; | ||||
| } | |||||
| } | |||||
| /* find next protocol with priv options */ | /* find next protocol with priv options */ | ||||
| while (p = ffurl_protocol_next(p)) | |||||
| if (p->priv_data_class) | |||||
| return p->priv_data_class; | |||||
| for (; ff_url_protocols[i]; i++) | |||||
| if (ff_url_protocols[i]->priv_data_class) | |||||
| return ff_url_protocols[i]->priv_data_class; | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| @@ -92,27 +88,20 @@ const AVClass ffurl_context_class = { | |||||
| const char *avio_enum_protocols(void **opaque, int output) | const char *avio_enum_protocols(void **opaque, int output) | ||||
| { | { | ||||
| URLProtocol *p; | |||||
| *opaque = ffurl_protocol_next(*opaque); | |||||
| if (!(p = *opaque)) | |||||
| const URLProtocol **p = *opaque; | |||||
| p = p ? p + 1 : ff_url_protocols; | |||||
| *opaque = p; | |||||
| if (!*p) { | |||||
| *opaque = NULL; | |||||
| return NULL; | return NULL; | ||||
| if ((output && p->url_write) || (!output && p->url_read)) | |||||
| return p->name; | |||||
| } | |||||
| if ((output && (*p)->url_write) || (!output && (*p)->url_read)) | |||||
| return (*p)->name; | |||||
| return avio_enum_protocols(opaque, output); | return avio_enum_protocols(opaque, output); | ||||
| } | } | ||||
| int ffurl_register_protocol(URLProtocol *protocol) | |||||
| { | |||||
| URLProtocol **p; | |||||
| p = &first_protocol; | |||||
| while (*p) | |||||
| p = &(*p)->next; | |||||
| *p = protocol; | |||||
| protocol->next = NULL; | |||||
| return 0; | |||||
| } | |||||
| static int url_alloc_for_protocol(URLContext **puc, struct URLProtocol *up, | |||||
| static int url_alloc_for_protocol(URLContext **puc, const URLProtocol *up, | |||||
| const char *filename, int flags, | const char *filename, int flags, | ||||
| const AVIOInterruptCB *int_cb) | const AVIOInterruptCB *int_cb) | ||||
| { | { | ||||
| @@ -280,11 +269,12 @@ int ffurl_handshake(URLContext *c) | |||||
| "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ | ||||
| "0123456789+-." | "0123456789+-." | ||||
| static struct URLProtocol *url_find_protocol(const char *filename) | |||||
| static const struct URLProtocol *url_find_protocol(const char *filename) | |||||
| { | { | ||||
| URLProtocol *up = NULL; | |||||
| const URLProtocol *up; | |||||
| char proto_str[128], proto_nested[128], *ptr; | char proto_str[128], proto_nested[128], *ptr; | ||||
| size_t proto_len = strspn(filename, URL_SCHEME_CHARS); | size_t proto_len = strspn(filename, URL_SCHEME_CHARS); | ||||
| int i; | |||||
| if (filename[proto_len] != ':' && | if (filename[proto_len] != ':' && | ||||
| (strncmp(filename, "subfile,", 8) || !strchr(filename + proto_len + 1, ':')) || | (strncmp(filename, "subfile,", 8) || !strchr(filename + proto_len + 1, ':')) || | ||||
| @@ -300,7 +290,8 @@ static struct URLProtocol *url_find_protocol(const char *filename) | |||||
| if ((ptr = strchr(proto_nested, '+'))) | if ((ptr = strchr(proto_nested, '+'))) | ||||
| *ptr = '\0'; | *ptr = '\0'; | ||||
| while (up = ffurl_protocol_next(up)) { | |||||
| for (i = 0; ff_url_protocols[i]; i++) { | |||||
| up = ff_url_protocols[i]; | |||||
| if (!strcmp(proto_str, up->name)) | if (!strcmp(proto_str, up->name)) | ||||
| break; | break; | ||||
| if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME && | if (up->flags & URL_PROTOCOL_FLAG_NESTED_SCHEME && | ||||
| @@ -314,12 +305,7 @@ static struct URLProtocol *url_find_protocol(const char *filename) | |||||
| int ffurl_alloc(URLContext **puc, const char *filename, int flags, | int ffurl_alloc(URLContext **puc, const char *filename, int flags, | ||||
| const AVIOInterruptCB *int_cb) | const AVIOInterruptCB *int_cb) | ||||
| { | { | ||||
| URLProtocol *p = NULL; | |||||
| if (!first_protocol) { | |||||
| av_log(NULL, AV_LOG_WARNING, "No URL Protocols are registered. " | |||||
| "Missing call to av_register_all()?\n"); | |||||
| } | |||||
| const URLProtocol *p = NULL; | |||||
| p = url_find_protocol(filename); | p = url_find_protocol(filename); | ||||
| if (p) | if (p) | ||||
| @@ -484,7 +470,7 @@ int ffurl_close(URLContext *h) | |||||
| const char *avio_find_protocol_name(const char *url) | const char *avio_find_protocol_name(const char *url) | ||||
| { | { | ||||
| URLProtocol *p = url_find_protocol(url); | |||||
| const URLProtocol *p = url_find_protocol(url); | |||||
| return p ? p->name : NULL; | return p ? p->name : NULL; | ||||
| } | } | ||||
| @@ -224,7 +224,7 @@ static int64_t bluray_seek(URLContext *h, int64_t pos, int whence) | |||||
| } | } | ||||
| URLProtocol ff_bluray_protocol = { | |||||
| const URLProtocol ff_bluray_protocol = { | |||||
| .name = "bluray", | .name = "bluray", | ||||
| .url_close = bluray_close, | .url_close = bluray_close, | ||||
| .url_open = bluray_open, | .url_open = bluray_open, | ||||
| @@ -312,7 +312,7 @@ static const AVClass cache_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_cache_protocol = { | |||||
| const URLProtocol ff_cache_protocol = { | |||||
| .name = "cache", | .name = "cache", | ||||
| .url_open2 = cache_open, | .url_open2 = cache_open, | ||||
| .url_read = cache_read, | .url_read = cache_read, | ||||
| @@ -186,7 +186,7 @@ static int64_t concat_seek(URLContext *h, int64_t pos, int whence) | |||||
| return result; | return result; | ||||
| } | } | ||||
| URLProtocol ff_concat_protocol = { | |||||
| const URLProtocol ff_concat_protocol = { | |||||
| .name = "concat", | .name = "concat", | ||||
| .url_open = concat_open, | .url_open = concat_open, | ||||
| .url_read = concat_read, | .url_read = concat_read, | ||||
| @@ -284,7 +284,7 @@ static int crypto_close(URLContext *h) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| URLProtocol ff_crypto_protocol = { | |||||
| const URLProtocol ff_crypto_protocol = { | |||||
| .name = "crypto", | .name = "crypto", | ||||
| .url_open2 = crypto_open2, | .url_open2 = crypto_open2, | ||||
| .url_read = crypto_read, | .url_read = crypto_read, | ||||
| @@ -109,7 +109,7 @@ static int data_read(URLContext *h, unsigned char *buf, int size) | |||||
| return size; | return size; | ||||
| } | } | ||||
| URLProtocol ff_data_protocol = { | |||||
| const URLProtocol ff_data_protocol = { | |||||
| .name = "data", | .name = "data", | ||||
| .url_open = data_open, | .url_open = data_open, | ||||
| .url_close = data_close, | .url_close = data_close, | ||||
| @@ -329,7 +329,7 @@ static int file_close_dir(URLContext *h) | |||||
| #endif /* HAVE_LSTAT */ | #endif /* HAVE_LSTAT */ | ||||
| } | } | ||||
| URLProtocol ff_file_protocol = { | |||||
| const URLProtocol ff_file_protocol = { | |||||
| .name = "file", | .name = "file", | ||||
| .url_open = file_open, | .url_open = file_open, | ||||
| .url_read = file_read, | .url_read = file_read, | ||||
| @@ -375,7 +375,7 @@ static int pipe_open(URLContext *h, const char *filename, int flags) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| URLProtocol ff_pipe_protocol = { | |||||
| const URLProtocol ff_pipe_protocol = { | |||||
| .name = "pipe", | .name = "pipe", | ||||
| .url_open = pipe_open, | .url_open = pipe_open, | ||||
| .url_read = file_read, | .url_read = file_read, | ||||
| @@ -1099,7 +1099,7 @@ cleanup: | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| URLProtocol ff_ftp_protocol = { | |||||
| const URLProtocol ff_ftp_protocol = { | |||||
| .name = "ftp", | .name = "ftp", | ||||
| .url_open = ftp_open, | .url_open = ftp_open, | ||||
| .url_read = ftp_read, | .url_read = ftp_read, | ||||
| @@ -114,7 +114,7 @@ static int gopher_read(URLContext *h, uint8_t *buf, int size) | |||||
| } | } | ||||
| URLProtocol ff_gopher_protocol = { | |||||
| const URLProtocol ff_gopher_protocol = { | |||||
| .name = "gopher", | .name = "gopher", | ||||
| .url_open = gopher_open, | .url_open = gopher_open, | ||||
| .url_read = gopher_read, | .url_read = gopher_read, | ||||
| @@ -318,7 +318,7 @@ retry: | |||||
| goto start; | goto start; | ||||
| } | } | ||||
| URLProtocol ff_hls_protocol = { | |||||
| const URLProtocol ff_hls_protocol = { | |||||
| .name = "hls", | .name = "hls", | ||||
| .url_open = hls_open, | .url_open = hls_open, | ||||
| .url_read = hls_read, | .url_read = hls_read, | ||||
| @@ -1508,7 +1508,7 @@ static const AVClass flavor ## _context_class = { \ | |||||
| #if CONFIG_HTTP_PROTOCOL | #if CONFIG_HTTP_PROTOCOL | ||||
| HTTP_CLASS(http); | HTTP_CLASS(http); | ||||
| URLProtocol ff_http_protocol = { | |||||
| const URLProtocol ff_http_protocol = { | |||||
| .name = "http", | .name = "http", | ||||
| .url_open2 = http_open, | .url_open2 = http_open, | ||||
| .url_accept = http_accept, | .url_accept = http_accept, | ||||
| @@ -1529,7 +1529,7 @@ URLProtocol ff_http_protocol = { | |||||
| #if CONFIG_HTTPS_PROTOCOL | #if CONFIG_HTTPS_PROTOCOL | ||||
| HTTP_CLASS(https); | HTTP_CLASS(https); | ||||
| URLProtocol ff_https_protocol = { | |||||
| const URLProtocol ff_https_protocol = { | |||||
| .name = "https", | .name = "https", | ||||
| .url_open2 = http_open, | .url_open2 = http_open, | ||||
| .url_read = http_read, | .url_read = http_read, | ||||
| @@ -1644,7 +1644,7 @@ static int http_proxy_write(URLContext *h, const uint8_t *buf, int size) | |||||
| return ffurl_write(s->hd, buf, size); | return ffurl_write(s->hd, buf, size); | ||||
| } | } | ||||
| URLProtocol ff_httpproxy_protocol = { | |||||
| const URLProtocol ff_httpproxy_protocol = { | |||||
| .name = "httpproxy", | .name = "httpproxy", | ||||
| .url_open = http_proxy_open, | .url_open = http_proxy_open, | ||||
| .url_read = http_buf_read, | .url_read = http_buf_read, | ||||
| @@ -209,7 +209,7 @@ static const AVClass icecast_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_icecast_protocol = { | |||||
| const URLProtocol ff_icecast_protocol = { | |||||
| .name = "icecast", | .name = "icecast", | ||||
| .url_open = icecast_open, | .url_open = icecast_open, | ||||
| .url_write = icecast_write, | .url_write = icecast_write, | ||||
| @@ -337,7 +337,7 @@ static const AVClass lib ## flavor ## _class = {\ | |||||
| }; | }; | ||||
| RTMP_CLASS(rtmp) | RTMP_CLASS(rtmp) | ||||
| URLProtocol ff_librtmp_protocol = { | |||||
| const URLProtocol ff_librtmp_protocol = { | |||||
| .name = "rtmp", | .name = "rtmp", | ||||
| .url_open = rtmp_open, | .url_open = rtmp_open, | ||||
| .url_read = rtmp_read, | .url_read = rtmp_read, | ||||
| @@ -352,7 +352,7 @@ URLProtocol ff_librtmp_protocol = { | |||||
| }; | }; | ||||
| RTMP_CLASS(rtmpt) | RTMP_CLASS(rtmpt) | ||||
| URLProtocol ff_librtmpt_protocol = { | |||||
| const URLProtocol ff_librtmpt_protocol = { | |||||
| .name = "rtmpt", | .name = "rtmpt", | ||||
| .url_open = rtmp_open, | .url_open = rtmp_open, | ||||
| .url_read = rtmp_read, | .url_read = rtmp_read, | ||||
| @@ -367,7 +367,7 @@ URLProtocol ff_librtmpt_protocol = { | |||||
| }; | }; | ||||
| RTMP_CLASS(rtmpe) | RTMP_CLASS(rtmpe) | ||||
| URLProtocol ff_librtmpe_protocol = { | |||||
| const URLProtocol ff_librtmpe_protocol = { | |||||
| .name = "rtmpe", | .name = "rtmpe", | ||||
| .url_open = rtmp_open, | .url_open = rtmp_open, | ||||
| .url_read = rtmp_read, | .url_read = rtmp_read, | ||||
| @@ -382,7 +382,7 @@ URLProtocol ff_librtmpe_protocol = { | |||||
| }; | }; | ||||
| RTMP_CLASS(rtmpte) | RTMP_CLASS(rtmpte) | ||||
| URLProtocol ff_librtmpte_protocol = { | |||||
| const URLProtocol ff_librtmpte_protocol = { | |||||
| .name = "rtmpte", | .name = "rtmpte", | ||||
| .url_open = rtmp_open, | .url_open = rtmp_open, | ||||
| .url_read = rtmp_read, | .url_read = rtmp_read, | ||||
| @@ -397,7 +397,7 @@ URLProtocol ff_librtmpte_protocol = { | |||||
| }; | }; | ||||
| RTMP_CLASS(rtmps) | RTMP_CLASS(rtmps) | ||||
| URLProtocol ff_librtmps_protocol = { | |||||
| const URLProtocol ff_librtmps_protocol = { | |||||
| .name = "rtmps", | .name = "rtmps", | ||||
| .url_open = rtmp_open, | .url_open = rtmp_open, | ||||
| .url_read = rtmp_read, | .url_read = rtmp_read, | ||||
| @@ -365,7 +365,7 @@ static const AVClass libsmbclient_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_libsmbclient_protocol = { | |||||
| const URLProtocol ff_libsmbclient_protocol = { | |||||
| .name = "smb", | .name = "smb", | ||||
| .url_open = libsmbc_open, | .url_open = libsmbc_open, | ||||
| .url_read = libsmbc_read, | .url_read = libsmbc_read, | ||||
| @@ -489,7 +489,7 @@ static const AVClass libssh_context_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_libssh_protocol = { | |||||
| const URLProtocol ff_libssh_protocol = { | |||||
| .name = "sftp", | .name = "sftp", | ||||
| .url_open = libssh_open, | .url_open = libssh_open, | ||||
| .url_read = libssh_read, | .url_read = libssh_read, | ||||
| @@ -87,7 +87,7 @@ static int md5_close(URLContext *h) | |||||
| } | } | ||||
| URLProtocol ff_md5_protocol = { | |||||
| const URLProtocol ff_md5_protocol = { | |||||
| .name = "md5", | .name = "md5", | ||||
| .url_open = md5_open, | .url_open = md5_open, | ||||
| .url_write = md5_write, | .url_write = md5_write, | ||||
| @@ -401,7 +401,7 @@ static int64_t mmsh_seek(URLContext *h, int64_t pos, int whence) | |||||
| return AVERROR(ENOSYS); | return AVERROR(ENOSYS); | ||||
| } | } | ||||
| URLProtocol ff_mmsh_protocol = { | |||||
| const URLProtocol ff_mmsh_protocol = { | |||||
| .name = "mmsh", | .name = "mmsh", | ||||
| .url_open = mmsh_open, | .url_open = mmsh_open, | ||||
| .url_read = mmsh_read, | .url_read = mmsh_read, | ||||
| @@ -629,7 +629,7 @@ static int mms_read(URLContext *h, uint8_t *buf, int size) | |||||
| return result; | return result; | ||||
| } | } | ||||
| URLProtocol ff_mmst_protocol = { | |||||
| const URLProtocol ff_mmst_protocol = { | |||||
| .name = "mmst", | .name = "mmst", | ||||
| .url_open = mms_open, | .url_open = mms_open, | ||||
| .url_read = mms_read, | .url_read = mms_read, | ||||
| @@ -0,0 +1,208 @@ | |||||
| /* | |||||
| * This file is part of FFmpeg. | |||||
| * | |||||
| * FFmpeg is free software; you can redistribute it and/or | |||||
| * modify it under the terms of the GNU Lesser General Public | |||||
| * License as published by the Free Software Foundation; either | |||||
| * version 2.1 of the License, or (at your option) any later version. | |||||
| * | |||||
| * FFmpeg is distributed in the hope that it will be useful, | |||||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||||
| * Lesser General Public License for more details. | |||||
| * | |||||
| * You should have received a copy of the GNU Lesser General Public | |||||
| * License along with FFmpeg; if not, write to the Free Software | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
| */ | |||||
| #include "config.h" | |||||
| #include "url.h" | |||||
| extern const URLProtocol ff_async_protocol; | |||||
| extern const URLProtocol ff_bluray_protocol; | |||||
| extern const URLProtocol ff_cache_protocol; | |||||
| extern const URLProtocol ff_concat_protocol; | |||||
| extern const URLProtocol ff_crypto_protocol; | |||||
| extern const URLProtocol ff_data_protocol; | |||||
| extern const URLProtocol ff_ffrtmpcrypt_protocol; | |||||
| extern const URLProtocol ff_ffrtmphttp_protocol; | |||||
| extern const URLProtocol ff_file_protocol; | |||||
| extern const URLProtocol ff_ftp_protocol; | |||||
| extern const URLProtocol ff_gopher_protocol; | |||||
| extern const URLProtocol ff_hls_protocol; | |||||
| extern const URLProtocol ff_http_protocol; | |||||
| extern const URLProtocol ff_httpproxy_protocol; | |||||
| extern const URLProtocol ff_https_protocol; | |||||
| extern const URLProtocol ff_icecast_protocol; | |||||
| extern const URLProtocol ff_mmsh_protocol; | |||||
| extern const URLProtocol ff_mmst_protocol; | |||||
| extern const URLProtocol ff_md5_protocol; | |||||
| extern const URLProtocol ff_pipe_protocol; | |||||
| extern const URLProtocol ff_rtmp_protocol; | |||||
| extern const URLProtocol ff_rtmpe_protocol; | |||||
| extern const URLProtocol ff_rtmps_protocol; | |||||
| extern const URLProtocol ff_rtmpt_protocol; | |||||
| extern const URLProtocol ff_rtmpte_protocol; | |||||
| extern const URLProtocol ff_rtmpts_protocol; | |||||
| extern const URLProtocol ff_rtp_protocol; | |||||
| extern const URLProtocol ff_sctp_protocol; | |||||
| extern const URLProtocol ff_srtp_protocol; | |||||
| extern const URLProtocol ff_subfile_protocol; | |||||
| extern const URLProtocol ff_tcp_protocol; | |||||
| extern const URLProtocol ff_tls_gnutls_protocol; | |||||
| extern const URLProtocol ff_tls_schannel_protocol; | |||||
| extern const URLProtocol ff_tls_securetransport_protocol; | |||||
| extern const URLProtocol ff_tls_openssl_protocol; | |||||
| extern const URLProtocol ff_udp_protocol; | |||||
| extern const URLProtocol ff_udplite_protocol; | |||||
| extern const URLProtocol ff_unix_protocol; | |||||
| extern const URLProtocol ff_librtmp_protocol; | |||||
| extern const URLProtocol ff_librtmpe_protocol; | |||||
| extern const URLProtocol ff_librtmps_protocol; | |||||
| extern const URLProtocol ff_librtmpt_protocol; | |||||
| extern const URLProtocol ff_librtmpte_protocol; | |||||
| extern const URLProtocol ff_libssh_protocol; | |||||
| extern const URLProtocol ff_libsmbclient_protocol; | |||||
| const URLProtocol *ff_url_protocols[] = { | |||||
| #if CONFIG_ASYNC_PROTOCOL | |||||
| &ff_async_protocol, | |||||
| #endif | |||||
| #if CONFIG_BLURAY_PROTOCOL | |||||
| &ff_bluray_protocol, | |||||
| #endif | |||||
| #if CONFIG_CACHE_PROTOCOL | |||||
| &ff_cache_protocol, | |||||
| #endif | |||||
| #if CONFIG_CONCAT_PROTOCOL | |||||
| &ff_concat_protocol, | |||||
| #endif | |||||
| #if CONFIG_CRYPTO_PROTOCOL | |||||
| &ff_crypto_protocol, | |||||
| #endif | |||||
| #if CONFIG_DATA_PROTOCOL | |||||
| &ff_data_protocol, | |||||
| #endif | |||||
| #if CONFIG_FFRTMPCRYPT_PROTOCOL | |||||
| &ff_ffrtmpcrypt_protocol, | |||||
| #endif | |||||
| #if CONFIG_FFRTMPHTTP_PROTOCOL | |||||
| &ff_ffrtmphttp_protocol, | |||||
| #endif | |||||
| #if CONFIG_FILE_PROTOCOL | |||||
| &ff_file_protocol, | |||||
| #endif | |||||
| #if CONFIG_FTP_PROTOCOL | |||||
| &ff_ftp_protocol, | |||||
| #endif | |||||
| #if CONFIG_GOPHER_PROTOCOL | |||||
| &ff_gopher_protocol, | |||||
| #endif | |||||
| #if CONFIG_HLS_PROTOCOL | |||||
| &ff_hls_protocol, | |||||
| #endif | |||||
| #if CONFIG_HTTP_PROTOCOL | |||||
| &ff_http_protocol, | |||||
| #endif | |||||
| #if CONFIG_HTTPPROXY_PROTOCOL | |||||
| &ff_httpproxy_protocol, | |||||
| #endif | |||||
| #if CONFIG_HTTPS_PROTOCOL | |||||
| &ff_https_protocol, | |||||
| #endif | |||||
| #if CONFIG_ICECAST_PROTOCOL | |||||
| &ff_icecast_protocol, | |||||
| #endif | |||||
| #if CONFIG_MMSH_PROTOCOL | |||||
| &ff_mmsh_protocol, | |||||
| #endif | |||||
| #if CONFIG_MMST_PROTOCOL | |||||
| &ff_mmst_protocol, | |||||
| #endif | |||||
| #if CONFIG_MD5_PROTOCOL | |||||
| &ff_md5_protocol, | |||||
| #endif | |||||
| #if CONFIG_PIPE_PROTOCOL | |||||
| &ff_pipe_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMP_PROTOCOL | |||||
| &ff_rtmp_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMPE_PROTOCOL | |||||
| &ff_rtmpe_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMPS_PROTOCOL | |||||
| &ff_rtmps_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMPT_PROTOCOL | |||||
| &ff_rtmpt_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMPTE_PROTOCOL | |||||
| &ff_rtmpte_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTMPTS_PROTOCOL | |||||
| &ff_rtmpts_protocol, | |||||
| #endif | |||||
| #if CONFIG_RTP_PROTOCOL | |||||
| &ff_rtp_protocol, | |||||
| #endif | |||||
| #if CONFIG_SCTP_PROTOCOL | |||||
| &ff_sctp_protocol, | |||||
| #endif | |||||
| #if CONFIG_SRTP_PROTOCOL | |||||
| &ff_srtp_protocol, | |||||
| #endif | |||||
| #if CONFIG_SUBFILE_PROTOCOL | |||||
| &ff_subfile_protocol, | |||||
| #endif | |||||
| #if CONFIG_TCP_PROTOCOL | |||||
| &ff_tcp_protocol, | |||||
| #endif | |||||
| #if CONFIG_TLS_GNUTLS_PROTOCOL | |||||
| &ff_tls_gnutls_protocol, | |||||
| #endif | |||||
| #if CONFIG_TLS_SCHANNEL_PROTOCOL | |||||
| &ff_tls_schannel_protocol, | |||||
| #endif | |||||
| #if CONFIG_TLS_SECURETRANSPORT_PROTOCOL | |||||
| &ff_tls_securetransport_protocol, | |||||
| #endif | |||||
| #if CONFIG_TLS_OPENSSL_PROTOCOL | |||||
| &ff_tls_openssl_protocol, | |||||
| #endif | |||||
| #if CONFIG_UDP_PROTOCOL | |||||
| &ff_udp_protocol, | |||||
| #endif | |||||
| #if CONFIG_UDPLITE_PROTOCOL | |||||
| &ff_udplite_protocol, | |||||
| #endif | |||||
| #if CONFIG_UNIX_PROTOCOL | |||||
| &ff_unix_protocol, | |||||
| #endif | |||||
| /* external libraries */ | |||||
| #if CONFIG_LIBRTMP_PROTOCOL | |||||
| &ff_librtmp_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBRTMPE_PROTOCOL | |||||
| &ff_librtmpe_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBRTMPS_PROTOCOL | |||||
| &ff_librtmps_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBRTMPT_PROTOCOL | |||||
| &ff_librtmpt_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBRTMPTE_PROTOCOL | |||||
| &ff_librtmpte_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBSSH_PROTOCOL | |||||
| &ff_libssh_protocol, | |||||
| #endif | |||||
| #if CONFIG_LIBSMBCLIENT_PROTOCOL | |||||
| &ff_libsmbclient_protocol, | |||||
| #endif | |||||
| NULL, | |||||
| }; | |||||
| @@ -325,7 +325,7 @@ static const AVClass ffrtmpcrypt_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_ffrtmpcrypt_protocol = { | |||||
| const URLProtocol ff_ffrtmpcrypt_protocol = { | |||||
| .name = "ffrtmpcrypt", | .name = "ffrtmpcrypt", | ||||
| .url_open = rtmpe_open, | .url_open = rtmpe_open, | ||||
| .url_read = rtmpe_read, | .url_read = rtmpe_read, | ||||
| @@ -265,7 +265,7 @@ static const AVClass ffrtmphttp_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_ffrtmphttp_protocol = { | |||||
| const URLProtocol ff_ffrtmphttp_protocol = { | |||||
| .name = "ffrtmphttp", | .name = "ffrtmphttp", | ||||
| .url_open = rtmp_http_open, | .url_open = rtmp_http_open, | ||||
| .url_read = rtmp_http_read, | .url_read = rtmp_http_read, | ||||
| @@ -3110,7 +3110,7 @@ static const AVClass flavor##_class = { \ | |||||
| .version = LIBAVUTIL_VERSION_INT, \ | .version = LIBAVUTIL_VERSION_INT, \ | ||||
| }; \ | }; \ | ||||
| \ | \ | ||||
| URLProtocol ff_##flavor##_protocol = { \ | |||||
| const URLProtocol ff_##flavor##_protocol = { \ | |||||
| .name = #flavor, \ | .name = #flavor, \ | ||||
| .url_open = rtmp_open, \ | .url_open = rtmp_open, \ | ||||
| .url_read = rtmp_read, \ | .url_read = rtmp_read, \ | ||||
| @@ -605,7 +605,7 @@ static int rtp_get_multi_file_handle(URLContext *h, int **handles, | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| URLProtocol ff_rtp_protocol = { | |||||
| const URLProtocol ff_rtp_protocol = { | |||||
| .name = "rtp", | .name = "rtp", | ||||
| .url_open = rtp_open, | .url_open = rtp_open, | ||||
| .url_read = rtp_read, | .url_read = rtp_read, | ||||
| @@ -359,7 +359,7 @@ static int sctp_get_file_handle(URLContext *h) | |||||
| return s->fd; | return s->fd; | ||||
| } | } | ||||
| URLProtocol ff_sctp_protocol = { | |||||
| const URLProtocol ff_sctp_protocol = { | |||||
| .name = "sctp", | .name = "sctp", | ||||
| .url_open = sctp_open, | .url_open = sctp_open, | ||||
| .url_read = sctp_read, | .url_read = sctp_read, | ||||
| @@ -132,7 +132,7 @@ static int srtp_get_multi_file_handle(URLContext *h, int **handles, | |||||
| return ffurl_get_multi_file_handle(s->rtp_hd, handles, numhandles); | return ffurl_get_multi_file_handle(s->rtp_hd, handles, numhandles); | ||||
| } | } | ||||
| URLProtocol ff_srtp_protocol = { | |||||
| const URLProtocol ff_srtp_protocol = { | |||||
| .name = "srtp", | .name = "srtp", | ||||
| .url_open = srtp_open, | .url_open = srtp_open, | ||||
| .url_read = srtp_read, | .url_read = srtp_read, | ||||
| @@ -137,7 +137,7 @@ static int64_t subfile_seek(URLContext *h, int64_t pos, int whence) | |||||
| return c->pos - c->start; | return c->pos - c->start; | ||||
| } | } | ||||
| URLProtocol ff_subfile_protocol = { | |||||
| const URLProtocol ff_subfile_protocol = { | |||||
| .name = "subfile", | .name = "subfile", | ||||
| .url_open2 = subfile_open, | .url_open2 = subfile_open, | ||||
| .url_read = subfile_read, | .url_read = subfile_read, | ||||
| @@ -255,7 +255,7 @@ static int tcp_get_file_handle(URLContext *h) | |||||
| return s->fd; | return s->fd; | ||||
| } | } | ||||
| URLProtocol ff_tcp_protocol = { | |||||
| const URLProtocol ff_tcp_protocol = { | |||||
| .name = "tcp", | .name = "tcp", | ||||
| .url_open = tcp_open, | .url_open = tcp_open, | ||||
| .url_accept = tcp_accept, | .url_accept = tcp_accept, | ||||
| @@ -247,7 +247,7 @@ static const AVClass tls_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_tls_gnutls_protocol = { | |||||
| const URLProtocol ff_tls_gnutls_protocol = { | |||||
| .name = "tls", | .name = "tls", | ||||
| .url_open2 = tls_open, | .url_open2 = tls_open, | ||||
| .url_read = tls_read, | .url_read = tls_read, | ||||
| @@ -295,7 +295,7 @@ static const AVClass tls_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_tls_openssl_protocol = { | |||||
| const URLProtocol ff_tls_openssl_protocol = { | |||||
| .name = "tls", | .name = "tls", | ||||
| .url_open2 = tls_open, | .url_open2 = tls_open, | ||||
| .url_read = tls_read, | .url_read = tls_read, | ||||
| @@ -589,7 +589,7 @@ static const AVClass tls_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_tls_schannel_protocol = { | |||||
| const URLProtocol ff_tls_schannel_protocol = { | |||||
| .name = "tls", | .name = "tls", | ||||
| .url_open2 = tls_open, | .url_open2 = tls_open, | ||||
| .url_read = tls_read, | .url_read = tls_read, | ||||
| @@ -387,7 +387,7 @@ static const AVClass tls_class = { | |||||
| .version = LIBAVUTIL_VERSION_INT, | .version = LIBAVUTIL_VERSION_INT, | ||||
| }; | }; | ||||
| URLProtocol ff_tls_securetransport_protocol = { | |||||
| const URLProtocol ff_tls_securetransport_protocol = { | |||||
| .name = "tls", | .name = "tls", | ||||
| .url_open2 = tls_open, | .url_open2 = tls_open, | ||||
| .url_read = tls_read, | .url_read = tls_read, | ||||
| @@ -983,7 +983,7 @@ static int udp_close(URLContext *h) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| URLProtocol ff_udp_protocol = { | |||||
| const URLProtocol ff_udp_protocol = { | |||||
| .name = "udp", | .name = "udp", | ||||
| .url_open = udp_open, | .url_open = udp_open, | ||||
| .url_read = udp_read, | .url_read = udp_read, | ||||
| @@ -995,7 +995,7 @@ URLProtocol ff_udp_protocol = { | |||||
| .flags = URL_PROTOCOL_FLAG_NETWORK, | .flags = URL_PROTOCOL_FLAG_NETWORK, | ||||
| }; | }; | ||||
| URLProtocol ff_udplite_protocol = { | |||||
| const URLProtocol ff_udplite_protocol = { | |||||
| .name = "udplite", | .name = "udplite", | ||||
| .url_open = udplite_open, | .url_open = udplite_open, | ||||
| .url_read = udp_read, | .url_read = udp_read, | ||||
| @@ -140,7 +140,7 @@ static int unix_get_file_handle(URLContext *h) | |||||
| return s->fd; | return s->fd; | ||||
| } | } | ||||
| URLProtocol ff_unix_protocol = { | |||||
| const URLProtocol ff_unix_protocol = { | |||||
| .name = "unix", | .name = "unix", | ||||
| .url_open = unix_open, | .url_open = unix_open, | ||||
| .url_read = unix_read, | .url_read = unix_read, | ||||
| @@ -37,7 +37,7 @@ extern const AVClass ffurl_context_class; | |||||
| typedef struct URLContext { | typedef struct URLContext { | ||||
| const AVClass *av_class; /**< information for av_log(). Set by url_open(). */ | const AVClass *av_class; /**< information for av_log(). Set by url_open(). */ | ||||
| struct URLProtocol *prot; | |||||
| const struct URLProtocol *prot; | |||||
| void *priv_data; | void *priv_data; | ||||
| char *filename; /**< specified URL */ | char *filename; /**< specified URL */ | ||||
| int flags; | int flags; | ||||
| @@ -77,7 +77,6 @@ typedef struct URLProtocol { | |||||
| int (*url_write)(URLContext *h, const unsigned char *buf, int size); | int (*url_write)(URLContext *h, const unsigned char *buf, int size); | ||||
| int64_t (*url_seek)( URLContext *h, int64_t pos, int whence); | int64_t (*url_seek)( URLContext *h, int64_t pos, int whence); | ||||
| int (*url_close)(URLContext *h); | int (*url_close)(URLContext *h); | ||||
| struct URLProtocol *next; | |||||
| int (*url_read_pause)(URLContext *h, int pause); | int (*url_read_pause)(URLContext *h, int pause); | ||||
| int64_t (*url_read_seek)(URLContext *h, int stream_index, | int64_t (*url_read_seek)(URLContext *h, int stream_index, | ||||
| int64_t timestamp, int flags); | int64_t timestamp, int flags); | ||||
| @@ -257,24 +256,12 @@ int ffurl_get_multi_file_handle(URLContext *h, int **handles, int *numhandles); | |||||
| */ | */ | ||||
| int ffurl_shutdown(URLContext *h, int flags); | int ffurl_shutdown(URLContext *h, int flags); | ||||
| /** | |||||
| * Register the URLProtocol protocol. | |||||
| */ | |||||
| int ffurl_register_protocol(URLProtocol *protocol); | |||||
| /** | /** | ||||
| * Check if the user has requested to interrup a blocking function | * Check if the user has requested to interrup a blocking function | ||||
| * associated with cb. | * associated with cb. | ||||
| */ | */ | ||||
| int ff_check_interrupt(AVIOInterruptCB *cb); | int ff_check_interrupt(AVIOInterruptCB *cb); | ||||
| /** | |||||
| * Iterate over all available protocols. | |||||
| * | |||||
| * @param prev result of the previous call to this functions or NULL. | |||||
| */ | |||||
| URLProtocol *ffurl_protocol_next(const URLProtocol *prev); | |||||
| /* udp.c */ | /* udp.c */ | ||||
| int ff_udp_set_remote_url(URLContext *h, const char *uri); | int ff_udp_set_remote_url(URLContext *h, const char *uri); | ||||
| int ff_udp_get_local_port(URLContext *h); | int ff_udp_get_local_port(URLContext *h); | ||||
| @@ -322,5 +309,6 @@ void ff_make_absolute_url(char *buf, int size, const char *base, | |||||
| */ | */ | ||||
| AVIODirEntry *ff_alloc_dir_entry(void); | AVIODirEntry *ff_alloc_dir_entry(void); | ||||
| extern const URLProtocol *ff_url_protocols[]; | |||||
| #endif /* AVFORMAT_URL_H */ | #endif /* AVFORMAT_URL_H */ | ||||
| @@ -1,6 +1,6 @@ | |||||
| FATE_LIBAVFORMAT-$(HAVE_PTHREADS) += fate-async | |||||
| fate-async: libavformat/async-test$(EXESUF) | |||||
| fate-async: CMD = run libavformat/async-test | |||||
| #FATE_LIBAVFORMAT-$(HAVE_PTHREADS) += fate-async | |||||
| #fate-async: libavformat/async-test$(EXESUF) | |||||
| #fate-async: CMD = run libavformat/async-test | |||||
| FATE_LIBAVFORMAT-$(CONFIG_NETWORK) += fate-noproxy | FATE_LIBAVFORMAT-$(CONFIG_NETWORK) += fate-noproxy | ||||
| fate-noproxy: libavformat/noproxy-test$(EXESUF) | fate-noproxy: libavformat/noproxy-test$(EXESUF) | ||||