mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-24 19:59:46 +00:00
check if feed and stream already exist before registering new one
Originally committed as revision 18057 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7349392535
commit
637af098fd
41
ffserver.c
41
ffserver.c
@ -3757,7 +3757,7 @@ static int parse_ffconfig(const char *filename)
|
||||
const char *p;
|
||||
int val, errors, line_num;
|
||||
FFStream **last_stream, *stream, *redirect;
|
||||
FFStream **last_feed, *feed;
|
||||
FFStream **last_feed, *feed, *s;
|
||||
AVCodecContext audio_enc, video_enc;
|
||||
enum CodecID audio_id, video_id;
|
||||
|
||||
@ -3865,17 +3865,19 @@ static int parse_ffconfig(const char *filename)
|
||||
filename, line_num);
|
||||
} else {
|
||||
feed = av_mallocz(sizeof(FFStream));
|
||||
/* add in stream list */
|
||||
*last_stream = feed;
|
||||
last_stream = &feed->next;
|
||||
/* add in feed list */
|
||||
*last_feed = feed;
|
||||
last_feed = &feed->next_feed;
|
||||
|
||||
get_arg(feed->filename, sizeof(feed->filename), &p);
|
||||
q = strrchr(feed->filename, '>');
|
||||
if (*q)
|
||||
*q = '\0';
|
||||
|
||||
for (s = first_feed; s; s = s->next) {
|
||||
if (!strcmp(feed->filename, s->filename)) {
|
||||
fprintf(stderr, "%s:%d: Feed '%s' already registered\n",
|
||||
filename, line_num, s->filename);
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
|
||||
feed->fmt = guess_format("ffm", NULL, NULL);
|
||||
/* defaut feed file */
|
||||
snprintf(feed->feed_filename, sizeof(feed->feed_filename),
|
||||
@ -3883,6 +3885,13 @@ static int parse_ffconfig(const char *filename)
|
||||
feed->feed_max_size = 5 * 1024 * 1024;
|
||||
feed->is_feed = 1;
|
||||
feed->feed = feed; /* self feeding :-) */
|
||||
|
||||
/* add in stream list */
|
||||
*last_stream = feed;
|
||||
last_stream = &feed->next;
|
||||
/* add in feed list */
|
||||
*last_feed = feed;
|
||||
last_feed = &feed->next_feed;
|
||||
}
|
||||
} else if (!strcasecmp(cmd, "Launch")) {
|
||||
if (feed) {
|
||||
@ -3954,15 +3963,22 @@ static int parse_ffconfig(const char *filename)
|
||||
fprintf(stderr, "%s:%d: Already in a tag\n",
|
||||
filename, line_num);
|
||||
} else {
|
||||
FFStream *s;
|
||||
const AVClass *class;
|
||||
stream = av_mallocz(sizeof(FFStream));
|
||||
*last_stream = stream;
|
||||
last_stream = &stream->next;
|
||||
|
||||
get_arg(stream->filename, sizeof(stream->filename), &p);
|
||||
q = strrchr(stream->filename, '>');
|
||||
if (*q)
|
||||
*q = '\0';
|
||||
|
||||
for (s = first_stream; s; s = s->next) {
|
||||
if (!strcmp(stream->filename, s->filename)) {
|
||||
fprintf(stderr, "%s:%d: Stream '%s' already registered\n",
|
||||
filename, line_num, s->filename);
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
|
||||
stream->fmt = guess_stream_format(NULL, stream->filename, NULL);
|
||||
/* fetch avclass so AVOption works
|
||||
* FIXME try to use avcodec_get_context_defaults2
|
||||
@ -3979,6 +3995,9 @@ static int parse_ffconfig(const char *filename)
|
||||
audio_id = stream->fmt->audio_codec;
|
||||
video_id = stream->fmt->video_codec;
|
||||
}
|
||||
|
||||
*last_stream = stream;
|
||||
last_stream = &stream->next;
|
||||
}
|
||||
} else if (!strcasecmp(cmd, "Feed")) {
|
||||
get_arg(arg, sizeof(arg), &p);
|
||||
|
Loading…
Reference in New Issue
Block a user