Mercurial > libavformat.hg
diff rtsp.c @ 6357:b7ee8424b7e6 libavformat
get ride of MAX_STREAMS limit in RTSP
author | aurel |
---|---|
date | Mon, 09 Aug 2010 23:00:13 +0000 |
parents | aea92c85d611 |
children | f8c3cb8c503e |
line wrap: on
line diff
--- a/rtsp.c Mon Aug 09 22:58:54 2010 +0000 +++ b/rtsp.c Mon Aug 09 23:00:13 2010 +0000 @@ -1611,12 +1611,18 @@ static int rtsp_read_header(AVFormatContext *s, AVFormatParameters *ap) { + RTSPState *rt = s->priv_data; int ret; ret = ff_rtsp_connect(s); if (ret) return ret; + rt->real_setup_cache = av_mallocz(2 * s->nb_streams * sizeof(*rt->real_setup_cache)); + if (!rt->real_setup_cache) + return AVERROR(ENOMEM); + rt->real_setup = rt->real_setup_cache + s->nb_streams * sizeof(*rt->real_setup); + if (ap->initial_pause) { /* do not start immediately */ } else { @@ -1835,13 +1841,12 @@ if (rt->server_type == RTSP_SERVER_REAL) { int i; - enum AVDiscard cache[MAX_STREAMS]; for (i = 0; i < s->nb_streams; i++) - cache[i] = s->streams[i]->discard; + rt->real_setup[i] = s->streams[i]->discard; if (!rt->need_subscription) { - if (memcmp (cache, rt->real_setup_cache, + if (memcmp (rt->real_setup, rt->real_setup_cache, sizeof(enum AVDiscard) * s->nb_streams)) { snprintf(cmd, sizeof(cmd), "Unsubscribe: %s\r\n", @@ -1857,7 +1862,7 @@ if (rt->need_subscription) { int r, rule_nr, first = 1; - memcpy(rt->real_setup_cache, cache, + memcpy(rt->real_setup_cache, rt->real_setup, sizeof(enum AVDiscard) * s->nb_streams); rt->last_subscription[0] = 0; @@ -1969,6 +1974,8 @@ ff_rtsp_close_streams(s); ff_rtsp_close_connections(s); ff_network_close(); + rt->real_setup = NULL; + av_freep(&rt->real_setup_cache); return 0; }