Browse code

check if feed and stream already exist before registering new one

Originally committed as revision 18057 to svn://svn.ffmpeg.org/ffmpeg/trunk

Baptiste Coudurier authored on 2009/03/20 09:55:00
Showing 1 changed files
... ...
@@ -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);