16.05.11 23:19, Mike Williams написав(ла):

Signed-off-by: Mike Williams<[email protected]>
---
  ffserver.c |   12 ++++++------
  1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/ffserver.c b/ffserver.c
index b4613af..3550340 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -2229,11 +2229,11 @@ static int http_prepare_data(HTTPContext *c)
          av_metadata_set2(&c->fmt_ctx.metadata, "copyright", 
c->stream->copyright, 0);
          av_metadata_set2(&c->fmt_ctx.metadata, "title"    , c->stream->title  
  , 0);

+        c->fmt_ctx.streams = av_mallocz(MAX_STREAMS * sizeof(AVStream *));
+
          for(i=0;i<c->stream->nb_streams;i++) {
-            AVStream *st;
+            c->fmt_ctx.streams[i] = av_mallocz(sizeof(AVStream));
              AVStream *src;
-            st = av_mallocz(sizeof(AVStream));
-            c->fmt_ctx.streams[i] = st;
              /* if file or feed, then just take streams from FFStream struct */
              if (!c->stream->feed ||
                  c->stream->feed == c->stream)
@@ -2241,9 +2241,9 @@ static int http_prepare_data(HTTPContext *c)
              else
                  src = c->stream->feed->streams[c->stream->feed_streams[i]];

-            *st = *src;
-            st->priv_data = 0;
-            st->codec->frame_number = 0; /* XXX: should be done in
+            *(c->fmt_ctx.streams[i]) = *src;
+            c->fmt_ctx.streams[i]->priv_data = 0;
+            c->fmt_ctx.streams[i]->codec->frame_number = 0; /* XXX: should be 
done in
                                             AVStream, not in codec */
          }
          /* set output format parameters */

would not enough to add just a allocating a stream code:

diff --git a/ffserver.c b/ffserver.c
index 83f984b..7a9af4f 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -2231,6 +2231,8 @@ static int http_prepare_data(HTTPContext *c)
av_metadata_set2(&c->fmt_ctx.metadata, "copyright", c->stream->copyright, 0); av_metadata_set2(&c->fmt_ctx.metadata, "title" , c->stream->title , 0);
.
+ c->fmt_ctx.streams = av_mallocz(sizeof(AVStream*) * c->stream->nb_streams);
+
         for(i=0;i<c->stream->nb_streams;i++) {
             AVStream *st;
             AVStream *src;
--.
1.7.4.4


i think there is one more place in ffserver to fix

diff --git a/ffserver.c b/ffserver.c
index 124a715..83f984b 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -3767,11 +3767,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");
--
1.7.4.4

and ffmpeg i think must fixed also:

diff --git a/ffmpeg.c b/ffmpeg.c
index aa3c33d..ddacbea 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -708,6 +708,7 @@ static int read_ffserver_streams(AVFormatContext *s, const char *filename)
         return err;
     /* copy stream format */
     s->nb_streams = 0;
+    s->streams = av_mallocz(sizeof(AVStream*) * ic->nb_streams);
     for(i=0;i<ic->nb_streams;i++) {
         AVStream *st;
         AVCodec *codec;


--
________________________________________
Maksym Veremeyenko
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to