ffserver: Fix a null pointer dereference as a result of the FF_API_MAX_STREAMS cleanup.
Fixed another dereference in the RTSP code. Removed a useless variable. Changed an unnecessary looping assignment to a simple assignment suggested by Maksym. Added fixes and tweaks suggested by Maksym Veremeyenko [verem@m1stereo.tv] and Clément B.
This commit is contained in:
parent
2341c97e8d
commit
db3262b700
1
ffmpeg.c
1
ffmpeg.c
@ -673,6 +673,7 @@ static int read_ffserver_streams(AVFormatContext *s, const char *filename)
|
|||||||
return err;
|
return err;
|
||||||
/* copy stream format */
|
/* copy stream format */
|
||||||
s->nb_streams = 0;
|
s->nb_streams = 0;
|
||||||
|
s->streams = av_mallocz(sizeof(AVStream *) * ic->nb_streams);
|
||||||
for(i=0;i<ic->nb_streams;i++) {
|
for(i=0;i<ic->nb_streams;i++) {
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
AVCodec *codec;
|
AVCodec *codec;
|
||||||
|
21
ffserver.c
21
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, "copyright", c->stream->copyright, 0);
|
||||||
av_metadata_set2(&c->fmt_ctx.metadata, "title" , c->stream->title , 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++) {
|
for(i=0;i<c->stream->nb_streams;i++) {
|
||||||
AVStream *st;
|
|
||||||
AVStream *src;
|
AVStream *src;
|
||||||
st = av_mallocz(sizeof(AVStream));
|
c->fmt_ctx.streams[i] = av_mallocz(sizeof(AVStream));
|
||||||
c->fmt_ctx.streams[i] = st;
|
|
||||||
/* if file or feed, then just take streams from FFStream struct */
|
/* if file or feed, then just take streams from FFStream struct */
|
||||||
if (!c->stream->feed ||
|
if (!c->stream->feed ||
|
||||||
c->stream->feed == c->stream)
|
c->stream->feed == c->stream)
|
||||||
@ -2241,9 +2241,9 @@ static int http_prepare_data(HTTPContext *c)
|
|||||||
else
|
else
|
||||||
src = c->stream->feed->streams[c->stream->feed_streams[i]];
|
src = c->stream->feed->streams[c->stream->feed_streams[i]];
|
||||||
|
|
||||||
*st = *src;
|
*(c->fmt_ctx.streams[i]) = *src;
|
||||||
st->priv_data = 0;
|
c->fmt_ctx.streams[i]->priv_data = 0;
|
||||||
st->codec->frame_number = 0; /* XXX: should be done in
|
c->fmt_ctx.streams[i]->codec->frame_number = 0; /* XXX: should be done in
|
||||||
AVStream, not in codec */
|
AVStream, not in codec */
|
||||||
}
|
}
|
||||||
/* set output format parameters */
|
/* set output format parameters */
|
||||||
@ -3385,6 +3385,9 @@ static int rtp_new_av_stream(HTTPContext *c,
|
|||||||
if (!st)
|
if (!st)
|
||||||
goto fail;
|
goto fail;
|
||||||
ctx->nb_streams = 1;
|
ctx->nb_streams = 1;
|
||||||
|
ctx->streams = av_mallocz(sizeof(AVStream *) * ctx->nb_streams);
|
||||||
|
if (!ctx->streams)
|
||||||
|
goto fail;
|
||||||
ctx->streams[0] = st;
|
ctx->streams[0] = st;
|
||||||
|
|
||||||
if (!c->stream->feed ||
|
if (!c->stream->feed ||
|
||||||
@ -3765,11 +3768,7 @@ static void build_feed_streams(void)
|
|||||||
}
|
}
|
||||||
s->oformat = feed->fmt;
|
s->oformat = feed->fmt;
|
||||||
s->nb_streams = feed->nb_streams;
|
s->nb_streams = feed->nb_streams;
|
||||||
for(i=0;i<s->nb_streams;i++) {
|
s->streams = feed->streams;
|
||||||
AVStream *st;
|
|
||||||
st = feed->streams[i];
|
|
||||||
s->streams[i] = st;
|
|
||||||
}
|
|
||||||
av_set_parameters(s, NULL);
|
av_set_parameters(s, NULL);
|
||||||
if (av_write_header(s) < 0) {
|
if (av_write_header(s) < 0) {
|
||||||
http_log("Container doesn't supports the required parameters\n");
|
http_log("Container doesn't supports the required parameters\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user