ffserver: dont just crash
authorMike William <mike@mikebwilliams.com>
Sat, 21 May 2011 02:50:59 +0000 (04:50 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 May 2011 02:50:59 +0000 (04:50 +0200)
With changes from ubitux.

ffmpeg.c
ffserver.c

index 38297cc..4d519c7 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -713,6 +713,8 @@ static int read_ffserver_streams(AVFormatContext *s, const char *filename)
         // FIXME: a more elegant solution is needed
         st = av_mallocz(sizeof(AVStream));
         memcpy(st, ic->streams[i], sizeof(AVStream));
+        st->info = av_malloc(sizeof(*st->info));
+        memcpy(st->info, ic->streams[i]->info, sizeof(*st->info));
         st->codec = avcodec_alloc_context();
         if (!st->codec) {
             print_error(filename, AVERROR(ENOMEM));
index 517cb6f..4c2c5cf 100644 (file)
@@ -3386,6 +3386,9 @@ static int rtp_new_av_stream(HTTPContext *c,
     if (!st)
         goto fail;
     ctx->nb_streams = 1;
+    ctx->streams = av_mallocz(sizeof(*ctx->streams) * ctx->nb_streams);
+    if (!ctx->streams)
+        goto fail;
     ctx->streams[0] = st;
 
     if (!c->stream->feed ||
@@ -3766,11 +3769,7 @@ static void build_feed_streams(void)
             }
             s->oformat = feed->fmt;
             s->nb_streams = feed->nb_streams;
-            for(i=0;i<s->nb_streams;i++) {
-                AVStream *st;
-                st = feed->streams[i];
-                s->streams[i] = st;
-            }
+            s->streams = feed->streams;
             av_set_parameters(s, NULL);
             if (av_write_header(s) < 0) {
                 http_log("Container doesn't supports the required parameters\n");