Originally committed as revision 18057 to svn://svn.ffmpeg.org/ffmpeg/trunk
Baptiste Coudurier authored on 2009/03/20 09:55:00... | ... |
@@ -3757,7 +3757,7 @@ static int parse_ffconfig(const char *filename) |
3757 | 3757 |
const char *p; |
3758 | 3758 |
int val, errors, line_num; |
3759 | 3759 |
FFStream **last_stream, *stream, *redirect; |
3760 |
- FFStream **last_feed, *feed; |
|
3760 |
+ FFStream **last_feed, *feed, *s; |
|
3761 | 3761 |
AVCodecContext audio_enc, video_enc; |
3762 | 3762 |
enum CodecID audio_id, video_id; |
3763 | 3763 |
|
... | ... |
@@ -3865,17 +3865,19 @@ static int parse_ffconfig(const char *filename) |
3865 | 3865 |
filename, line_num); |
3866 | 3866 |
} else { |
3867 | 3867 |
feed = av_mallocz(sizeof(FFStream)); |
3868 |
- /* add in stream list */ |
|
3869 |
- *last_stream = feed; |
|
3870 |
- last_stream = &feed->next; |
|
3871 |
- /* add in feed list */ |
|
3872 |
- *last_feed = feed; |
|
3873 |
- last_feed = &feed->next_feed; |
|
3874 |
- |
|
3875 | 3868 |
get_arg(feed->filename, sizeof(feed->filename), &p); |
3876 | 3869 |
q = strrchr(feed->filename, '>'); |
3877 | 3870 |
if (*q) |
3878 | 3871 |
*q = '\0'; |
3872 |
+ |
|
3873 |
+ for (s = first_feed; s; s = s->next) { |
|
3874 |
+ if (!strcmp(feed->filename, s->filename)) { |
|
3875 |
+ fprintf(stderr, "%s:%d: Feed '%s' already registered\n", |
|
3876 |
+ filename, line_num, s->filename); |
|
3877 |
+ errors++; |
|
3878 |
+ } |
|
3879 |
+ } |
|
3880 |
+ |
|
3879 | 3881 |
feed->fmt = guess_format("ffm", NULL, NULL); |
3880 | 3882 |
/* defaut feed file */ |
3881 | 3883 |
snprintf(feed->feed_filename, sizeof(feed->feed_filename), |
... | ... |
@@ -3883,6 +3885,13 @@ static int parse_ffconfig(const char *filename) |
3883 | 3883 |
feed->feed_max_size = 5 * 1024 * 1024; |
3884 | 3884 |
feed->is_feed = 1; |
3885 | 3885 |
feed->feed = feed; /* self feeding :-) */ |
3886 |
+ |
|
3887 |
+ /* add in stream list */ |
|
3888 |
+ *last_stream = feed; |
|
3889 |
+ last_stream = &feed->next; |
|
3890 |
+ /* add in feed list */ |
|
3891 |
+ *last_feed = feed; |
|
3892 |
+ last_feed = &feed->next_feed; |
|
3886 | 3893 |
} |
3887 | 3894 |
} else if (!strcasecmp(cmd, "Launch")) { |
3888 | 3895 |
if (feed) { |
... | ... |
@@ -3954,15 +3963,22 @@ static int parse_ffconfig(const char *filename) |
3954 | 3954 |
fprintf(stderr, "%s:%d: Already in a tag\n", |
3955 | 3955 |
filename, line_num); |
3956 | 3956 |
} else { |
3957 |
+ FFStream *s; |
|
3957 | 3958 |
const AVClass *class; |
3958 | 3959 |
stream = av_mallocz(sizeof(FFStream)); |
3959 |
- *last_stream = stream; |
|
3960 |
- last_stream = &stream->next; |
|
3961 |
- |
|
3962 | 3960 |
get_arg(stream->filename, sizeof(stream->filename), &p); |
3963 | 3961 |
q = strrchr(stream->filename, '>'); |
3964 | 3962 |
if (*q) |
3965 | 3963 |
*q = '\0'; |
3964 |
+ |
|
3965 |
+ for (s = first_stream; s; s = s->next) { |
|
3966 |
+ if (!strcmp(stream->filename, s->filename)) { |
|
3967 |
+ fprintf(stderr, "%s:%d: Stream '%s' already registered\n", |
|
3968 |
+ filename, line_num, s->filename); |
|
3969 |
+ errors++; |
|
3970 |
+ } |
|
3971 |
+ } |
|
3972 |
+ |
|
3966 | 3973 |
stream->fmt = guess_stream_format(NULL, stream->filename, NULL); |
3967 | 3974 |
/* fetch avclass so AVOption works |
3968 | 3975 |
* FIXME try to use avcodec_get_context_defaults2 |
... | ... |
@@ -3979,6 +3995,9 @@ static int parse_ffconfig(const char *filename) |
3979 | 3979 |
audio_id = stream->fmt->audio_codec; |
3980 | 3980 |
video_id = stream->fmt->video_codec; |
3981 | 3981 |
} |
3982 |
+ |
|
3983 |
+ *last_stream = stream; |
|
3984 |
+ last_stream = &stream->next; |
|
3982 | 3985 |
} |
3983 | 3986 |
} else if (!strcasecmp(cmd, "Feed")) { |
3984 | 3987 |
get_arg(arg, sizeof(arg), &p); |