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) | |||
| OUTDEV_LIST=$(find_things outdev OUTDEV 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) | |||
| 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=" | |||
| $BSF_LIST | |||
| $DECODER_LIST | |||
| @@ -19,6 +19,7 @@ OBJS = allformats.o \ | |||
| options.o \ | |||
| os_support.o \ | |||
| qtpalette.o \ | |||
| protocols.o \ | |||
| riff.o \ | |||
| sdp.o \ | |||
| url.o \ | |||
| @@ -41,13 +41,6 @@ | |||
| #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) | |||
| { | |||
| static int initialized; | |||
| @@ -367,57 +360,9 @@ void av_register_all(void) | |||
| REGISTER_DEMUXER (IMAGE_TIFF_PIPE, image_tiff_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 */ | |||
| REGISTER_MUXER (CHROMAPRINT, chromaprint); | |||
| REGISTER_DEMUXER (LIBGME, libgme); | |||
| REGISTER_DEMUXER (LIBMODPLUG, libmodplug); | |||
| 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, | |||
| }; | |||
| URLProtocol ff_async_protocol = { | |||
| const URLProtocol ff_async_protocol = { | |||
| .name = "async", | |||
| .url_open2 = async_open, | |||
| .url_read = async_read, | |||
| @@ -489,7 +489,7 @@ URLProtocol ff_async_protocol = { | |||
| .priv_data_class = &async_context_class, | |||
| }; | |||
| #ifdef TEST | |||
| #if 0 | |||
| #define TEST_SEEK_POS (1536) | |||
| #define TEST_STREAM_SIZE (2048) | |||
| @@ -581,7 +581,7 @@ static const AVClass async_test_context_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_async_test_protocol = { | |||
| const URLProtocol ff_async_test_protocol = { | |||
| .name = "async-test", | |||
| .url_open2 = async_test_open, | |||
| .url_read = async_test_read, | |||
| @@ -31,13 +31,6 @@ | |||
| #endif | |||
| #include "url.h" | |||
| static URLProtocol *first_protocol = NULL; | |||
| URLProtocol *ffurl_protocol_next(const URLProtocol *prev) | |||
| { | |||
| return prev ? prev->next : first_protocol; | |||
| } | |||
| /** @name Logging context. */ | |||
| /*@{*/ | |||
| 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) | |||
| { | |||
| URLProtocol *p = NULL; | |||
| int i; | |||
| /* 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; | |||
| } | |||
| } | |||
| /* 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; | |||
| } | |||
| @@ -92,27 +88,20 @@ const AVClass ffurl_context_class = { | |||
| 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; | |||
| 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); | |||
| } | |||
| 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 AVIOInterruptCB *int_cb) | |||
| { | |||
| @@ -280,11 +269,12 @@ int ffurl_handshake(URLContext *c) | |||
| "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ | |||
| "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; | |||
| size_t proto_len = strspn(filename, URL_SCHEME_CHARS); | |||
| int i; | |||
| if (filename[proto_len] != ':' && | |||
| (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, '+'))) | |||
| *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)) | |||
| break; | |||
| 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, | |||
| 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); | |||
| if (p) | |||
| @@ -484,7 +470,7 @@ int ffurl_close(URLContext *h) | |||
| 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; | |||
| } | |||
| @@ -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", | |||
| .url_close = bluray_close, | |||
| .url_open = bluray_open, | |||
| @@ -312,7 +312,7 @@ static const AVClass cache_context_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_cache_protocol = { | |||
| const URLProtocol ff_cache_protocol = { | |||
| .name = "cache", | |||
| .url_open2 = cache_open, | |||
| .url_read = cache_read, | |||
| @@ -186,7 +186,7 @@ static int64_t concat_seek(URLContext *h, int64_t pos, int whence) | |||
| return result; | |||
| } | |||
| URLProtocol ff_concat_protocol = { | |||
| const URLProtocol ff_concat_protocol = { | |||
| .name = "concat", | |||
| .url_open = concat_open, | |||
| .url_read = concat_read, | |||
| @@ -284,7 +284,7 @@ static int crypto_close(URLContext *h) | |||
| return 0; | |||
| } | |||
| URLProtocol ff_crypto_protocol = { | |||
| const URLProtocol ff_crypto_protocol = { | |||
| .name = "crypto", | |||
| .url_open2 = crypto_open2, | |||
| .url_read = crypto_read, | |||
| @@ -109,7 +109,7 @@ static int data_read(URLContext *h, unsigned char *buf, int size) | |||
| return size; | |||
| } | |||
| URLProtocol ff_data_protocol = { | |||
| const URLProtocol ff_data_protocol = { | |||
| .name = "data", | |||
| .url_open = data_open, | |||
| .url_close = data_close, | |||
| @@ -329,7 +329,7 @@ static int file_close_dir(URLContext *h) | |||
| #endif /* HAVE_LSTAT */ | |||
| } | |||
| URLProtocol ff_file_protocol = { | |||
| const URLProtocol ff_file_protocol = { | |||
| .name = "file", | |||
| .url_open = file_open, | |||
| .url_read = file_read, | |||
| @@ -375,7 +375,7 @@ static int pipe_open(URLContext *h, const char *filename, int flags) | |||
| return 0; | |||
| } | |||
| URLProtocol ff_pipe_protocol = { | |||
| const URLProtocol ff_pipe_protocol = { | |||
| .name = "pipe", | |||
| .url_open = pipe_open, | |||
| .url_read = file_read, | |||
| @@ -1099,7 +1099,7 @@ cleanup: | |||
| return ret; | |||
| } | |||
| URLProtocol ff_ftp_protocol = { | |||
| const URLProtocol ff_ftp_protocol = { | |||
| .name = "ftp", | |||
| .url_open = ftp_open, | |||
| .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", | |||
| .url_open = gopher_open, | |||
| .url_read = gopher_read, | |||
| @@ -318,7 +318,7 @@ retry: | |||
| goto start; | |||
| } | |||
| URLProtocol ff_hls_protocol = { | |||
| const URLProtocol ff_hls_protocol = { | |||
| .name = "hls", | |||
| .url_open = hls_open, | |||
| .url_read = hls_read, | |||
| @@ -1508,7 +1508,7 @@ static const AVClass flavor ## _context_class = { \ | |||
| #if CONFIG_HTTP_PROTOCOL | |||
| HTTP_CLASS(http); | |||
| URLProtocol ff_http_protocol = { | |||
| const URLProtocol ff_http_protocol = { | |||
| .name = "http", | |||
| .url_open2 = http_open, | |||
| .url_accept = http_accept, | |||
| @@ -1529,7 +1529,7 @@ URLProtocol ff_http_protocol = { | |||
| #if CONFIG_HTTPS_PROTOCOL | |||
| HTTP_CLASS(https); | |||
| URLProtocol ff_https_protocol = { | |||
| const URLProtocol ff_https_protocol = { | |||
| .name = "https", | |||
| .url_open2 = http_open, | |||
| .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); | |||
| } | |||
| URLProtocol ff_httpproxy_protocol = { | |||
| const URLProtocol ff_httpproxy_protocol = { | |||
| .name = "httpproxy", | |||
| .url_open = http_proxy_open, | |||
| .url_read = http_buf_read, | |||
| @@ -209,7 +209,7 @@ static const AVClass icecast_context_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_icecast_protocol = { | |||
| const URLProtocol ff_icecast_protocol = { | |||
| .name = "icecast", | |||
| .url_open = icecast_open, | |||
| .url_write = icecast_write, | |||
| @@ -337,7 +337,7 @@ static const AVClass lib ## flavor ## _class = {\ | |||
| }; | |||
| RTMP_CLASS(rtmp) | |||
| URLProtocol ff_librtmp_protocol = { | |||
| const URLProtocol ff_librtmp_protocol = { | |||
| .name = "rtmp", | |||
| .url_open = rtmp_open, | |||
| .url_read = rtmp_read, | |||
| @@ -352,7 +352,7 @@ URLProtocol ff_librtmp_protocol = { | |||
| }; | |||
| RTMP_CLASS(rtmpt) | |||
| URLProtocol ff_librtmpt_protocol = { | |||
| const URLProtocol ff_librtmpt_protocol = { | |||
| .name = "rtmpt", | |||
| .url_open = rtmp_open, | |||
| .url_read = rtmp_read, | |||
| @@ -367,7 +367,7 @@ URLProtocol ff_librtmpt_protocol = { | |||
| }; | |||
| RTMP_CLASS(rtmpe) | |||
| URLProtocol ff_librtmpe_protocol = { | |||
| const URLProtocol ff_librtmpe_protocol = { | |||
| .name = "rtmpe", | |||
| .url_open = rtmp_open, | |||
| .url_read = rtmp_read, | |||
| @@ -382,7 +382,7 @@ URLProtocol ff_librtmpe_protocol = { | |||
| }; | |||
| RTMP_CLASS(rtmpte) | |||
| URLProtocol ff_librtmpte_protocol = { | |||
| const URLProtocol ff_librtmpte_protocol = { | |||
| .name = "rtmpte", | |||
| .url_open = rtmp_open, | |||
| .url_read = rtmp_read, | |||
| @@ -397,7 +397,7 @@ URLProtocol ff_librtmpte_protocol = { | |||
| }; | |||
| RTMP_CLASS(rtmps) | |||
| URLProtocol ff_librtmps_protocol = { | |||
| const URLProtocol ff_librtmps_protocol = { | |||
| .name = "rtmps", | |||
| .url_open = rtmp_open, | |||
| .url_read = rtmp_read, | |||
| @@ -365,7 +365,7 @@ static const AVClass libsmbclient_context_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_libsmbclient_protocol = { | |||
| const URLProtocol ff_libsmbclient_protocol = { | |||
| .name = "smb", | |||
| .url_open = libsmbc_open, | |||
| .url_read = libsmbc_read, | |||
| @@ -489,7 +489,7 @@ static const AVClass libssh_context_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_libssh_protocol = { | |||
| const URLProtocol ff_libssh_protocol = { | |||
| .name = "sftp", | |||
| .url_open = libssh_open, | |||
| .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", | |||
| .url_open = md5_open, | |||
| .url_write = md5_write, | |||
| @@ -401,7 +401,7 @@ static int64_t mmsh_seek(URLContext *h, int64_t pos, int whence) | |||
| return AVERROR(ENOSYS); | |||
| } | |||
| URLProtocol ff_mmsh_protocol = { | |||
| const URLProtocol ff_mmsh_protocol = { | |||
| .name = "mmsh", | |||
| .url_open = mmsh_open, | |||
| .url_read = mmsh_read, | |||
| @@ -629,7 +629,7 @@ static int mms_read(URLContext *h, uint8_t *buf, int size) | |||
| return result; | |||
| } | |||
| URLProtocol ff_mmst_protocol = { | |||
| const URLProtocol ff_mmst_protocol = { | |||
| .name = "mmst", | |||
| .url_open = mms_open, | |||
| .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, | |||
| }; | |||
| URLProtocol ff_ffrtmpcrypt_protocol = { | |||
| const URLProtocol ff_ffrtmpcrypt_protocol = { | |||
| .name = "ffrtmpcrypt", | |||
| .url_open = rtmpe_open, | |||
| .url_read = rtmpe_read, | |||
| @@ -265,7 +265,7 @@ static const AVClass ffrtmphttp_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_ffrtmphttp_protocol = { | |||
| const URLProtocol ff_ffrtmphttp_protocol = { | |||
| .name = "ffrtmphttp", | |||
| .url_open = rtmp_http_open, | |||
| .url_read = rtmp_http_read, | |||
| @@ -3110,7 +3110,7 @@ static const AVClass flavor##_class = { \ | |||
| .version = LIBAVUTIL_VERSION_INT, \ | |||
| }; \ | |||
| \ | |||
| URLProtocol ff_##flavor##_protocol = { \ | |||
| const URLProtocol ff_##flavor##_protocol = { \ | |||
| .name = #flavor, \ | |||
| .url_open = rtmp_open, \ | |||
| .url_read = rtmp_read, \ | |||
| @@ -605,7 +605,7 @@ static int rtp_get_multi_file_handle(URLContext *h, int **handles, | |||
| return 0; | |||
| } | |||
| URLProtocol ff_rtp_protocol = { | |||
| const URLProtocol ff_rtp_protocol = { | |||
| .name = "rtp", | |||
| .url_open = rtp_open, | |||
| .url_read = rtp_read, | |||
| @@ -359,7 +359,7 @@ static int sctp_get_file_handle(URLContext *h) | |||
| return s->fd; | |||
| } | |||
| URLProtocol ff_sctp_protocol = { | |||
| const URLProtocol ff_sctp_protocol = { | |||
| .name = "sctp", | |||
| .url_open = sctp_open, | |||
| .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); | |||
| } | |||
| URLProtocol ff_srtp_protocol = { | |||
| const URLProtocol ff_srtp_protocol = { | |||
| .name = "srtp", | |||
| .url_open = srtp_open, | |||
| .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; | |||
| } | |||
| URLProtocol ff_subfile_protocol = { | |||
| const URLProtocol ff_subfile_protocol = { | |||
| .name = "subfile", | |||
| .url_open2 = subfile_open, | |||
| .url_read = subfile_read, | |||
| @@ -255,7 +255,7 @@ static int tcp_get_file_handle(URLContext *h) | |||
| return s->fd; | |||
| } | |||
| URLProtocol ff_tcp_protocol = { | |||
| const URLProtocol ff_tcp_protocol = { | |||
| .name = "tcp", | |||
| .url_open = tcp_open, | |||
| .url_accept = tcp_accept, | |||
| @@ -247,7 +247,7 @@ static const AVClass tls_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_tls_gnutls_protocol = { | |||
| const URLProtocol ff_tls_gnutls_protocol = { | |||
| .name = "tls", | |||
| .url_open2 = tls_open, | |||
| .url_read = tls_read, | |||
| @@ -295,7 +295,7 @@ static const AVClass tls_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_tls_openssl_protocol = { | |||
| const URLProtocol ff_tls_openssl_protocol = { | |||
| .name = "tls", | |||
| .url_open2 = tls_open, | |||
| .url_read = tls_read, | |||
| @@ -589,7 +589,7 @@ static const AVClass tls_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_tls_schannel_protocol = { | |||
| const URLProtocol ff_tls_schannel_protocol = { | |||
| .name = "tls", | |||
| .url_open2 = tls_open, | |||
| .url_read = tls_read, | |||
| @@ -387,7 +387,7 @@ static const AVClass tls_class = { | |||
| .version = LIBAVUTIL_VERSION_INT, | |||
| }; | |||
| URLProtocol ff_tls_securetransport_protocol = { | |||
| const URLProtocol ff_tls_securetransport_protocol = { | |||
| .name = "tls", | |||
| .url_open2 = tls_open, | |||
| .url_read = tls_read, | |||
| @@ -983,7 +983,7 @@ static int udp_close(URLContext *h) | |||
| return 0; | |||
| } | |||
| URLProtocol ff_udp_protocol = { | |||
| const URLProtocol ff_udp_protocol = { | |||
| .name = "udp", | |||
| .url_open = udp_open, | |||
| .url_read = udp_read, | |||
| @@ -995,7 +995,7 @@ URLProtocol ff_udp_protocol = { | |||
| .flags = URL_PROTOCOL_FLAG_NETWORK, | |||
| }; | |||
| URLProtocol ff_udplite_protocol = { | |||
| const URLProtocol ff_udplite_protocol = { | |||
| .name = "udplite", | |||
| .url_open = udplite_open, | |||
| .url_read = udp_read, | |||
| @@ -140,7 +140,7 @@ static int unix_get_file_handle(URLContext *h) | |||
| return s->fd; | |||
| } | |||
| URLProtocol ff_unix_protocol = { | |||
| const URLProtocol ff_unix_protocol = { | |||
| .name = "unix", | |||
| .url_open = unix_open, | |||
| .url_read = unix_read, | |||
| @@ -37,7 +37,7 @@ extern const AVClass ffurl_context_class; | |||
| typedef struct URLContext { | |||
| const AVClass *av_class; /**< information for av_log(). Set by url_open(). */ | |||
| struct URLProtocol *prot; | |||
| const struct URLProtocol *prot; | |||
| void *priv_data; | |||
| char *filename; /**< specified URL */ | |||
| int flags; | |||
| @@ -77,7 +77,6 @@ typedef struct URLProtocol { | |||
| int (*url_write)(URLContext *h, const unsigned char *buf, int size); | |||
| int64_t (*url_seek)( URLContext *h, int64_t pos, int whence); | |||
| int (*url_close)(URLContext *h); | |||
| struct URLProtocol *next; | |||
| int (*url_read_pause)(URLContext *h, int pause); | |||
| int64_t (*url_read_seek)(URLContext *h, int stream_index, | |||
| 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); | |||
| /** | |||
| * Register the URLProtocol protocol. | |||
| */ | |||
| int ffurl_register_protocol(URLProtocol *protocol); | |||
| /** | |||
| * Check if the user has requested to interrup a blocking function | |||
| * associated with 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 */ | |||
| int ff_udp_set_remote_url(URLContext *h, const char *uri); | |||
| 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); | |||
| extern const URLProtocol *ff_url_protocols[]; | |||
| #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-noproxy: libavformat/noproxy-test$(EXESUF) | |||