mirror of
https://github.com/librempeg/librempeg
synced 2024-11-23 11:39:47 +00:00
ffserver: fix prepare_sdp_description() to dynamically allocate streams
Originally committed as revision 25494 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
03700d399b
commit
9389b925f1
17
ffserver.c
17
ffserver.c
@ -2930,7 +2930,7 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
|
|||||||
struct in_addr my_ip)
|
struct in_addr my_ip)
|
||||||
{
|
{
|
||||||
AVFormatContext *avc;
|
AVFormatContext *avc;
|
||||||
AVStream avs[MAX_STREAMS];
|
AVStream *avs = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
avc = avformat_alloc_context();
|
avc = avformat_alloc_context();
|
||||||
@ -2948,14 +2948,29 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
|
|||||||
snprintf(avc->filename, 1024, "rtp://0.0.0.0");
|
snprintf(avc->filename, 1024, "rtp://0.0.0.0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !FF_API_MAX_STREAMS
|
||||||
|
if (avc->nb_streams >= INT_MAX/sizeof(*avc->streams) ||
|
||||||
|
!(avc->streams = av_malloc(avc->nb_streams * sizeof(*avc->streams))))
|
||||||
|
goto sdp_done;
|
||||||
|
#endif
|
||||||
|
if (avc->nb_streams >= INT_MAX/sizeof(*avs) ||
|
||||||
|
!(avs = av_malloc(avc->nb_streams * sizeof(*avs))))
|
||||||
|
goto sdp_done;
|
||||||
|
|
||||||
for(i = 0; i < stream->nb_streams; i++) {
|
for(i = 0; i < stream->nb_streams; i++) {
|
||||||
avc->streams[i] = &avs[i];
|
avc->streams[i] = &avs[i];
|
||||||
avc->streams[i]->codec = stream->streams[i]->codec;
|
avc->streams[i]->codec = stream->streams[i]->codec;
|
||||||
}
|
}
|
||||||
*pbuffer = av_mallocz(2048);
|
*pbuffer = av_mallocz(2048);
|
||||||
avf_sdp_create(&avc, 1, *pbuffer, 2048);
|
avf_sdp_create(&avc, 1, *pbuffer, 2048);
|
||||||
|
|
||||||
|
sdp_done:
|
||||||
|
#if !FF_API_MAX_STREAMS
|
||||||
|
av_free(avc->streams);
|
||||||
|
#endif
|
||||||
av_metadata_free(&avc->metadata);
|
av_metadata_free(&avc->metadata);
|
||||||
av_free(avc);
|
av_free(avc);
|
||||||
|
av_free(avs);
|
||||||
|
|
||||||
return strlen(*pbuffer);
|
return strlen(*pbuffer);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user