From e8acf0edeae0b5ef53233c49015b07cc9711f20c Mon Sep 17 00:00:00 2001
From: Luca Abeni <lucabe72@email.it>
Date: Thu, 29 Nov 2007 08:35:05 +0000
Subject: [PATCH] Suppress the "redirector hack" from
 libavformat/utils.c:av_open_input_stream(), and implement the redirector
 format more properly.

Originally committed as revision 11112 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/rtsp.c  | 14 ++++++++------
 libavformat/utils.c | 10 ----------
 2 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 831ef9b26f..9af572daf2 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1435,12 +1435,12 @@ static int redir_probe(AVProbeData *pd)
     return 0;
 }
 
-/* called from utils.c */
-int redir_open(AVFormatContext **ic_ptr, ByteIOContext *f)
+static int redir_read_header(AVFormatContext *s, AVFormatParameters *ap)
 {
     char buf[4096], *q;
     int c;
     AVFormatContext *ic = NULL;
+    ByteIOContext *f = s->pb;
 
     /* parse each URL and try to open it */
     c = url_fgetc(f);
@@ -1468,11 +1468,13 @@ int redir_open(AVFormatContext **ic_ptr, ByteIOContext *f)
         if (av_open_input_file(&ic, buf, NULL, 0, NULL) == 0)
             break;
     }
-    *ic_ptr = ic;
     if (!ic)
         return AVERROR(EIO);
-    else
-        return 0;
+
+    *s = *ic;
+    url_fclose(f);
+
+    return 0;
 }
 
 AVInputFormat redir_demuxer = {
@@ -1480,7 +1482,7 @@ AVInputFormat redir_demuxer = {
     "Redirector format",
     0,
     redir_probe,
-    NULL,
+    redir_read_header,
     NULL,
     NULL,
 };
diff --git a/libavformat/utils.c b/libavformat/utils.c
index d40a5f3f41..ae1659f4c8 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -464,16 +464,6 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
         goto fail;
     }
 
-    /* XXX: suppress this hack for redirectors */
-#ifdef CONFIG_REDIR_DEMUXER
-    if (!strcmp(fmt->name, "redir")) {
-        int redir_open(AVFormatContext **ic_ptr, ByteIOContext *f);
-        err = redir_open(ic_ptr, pb);
-        url_fclose(pb);
-        return err;
-    }
-#endif
-
     /* check filename in case of an image number is expected */
     if (fmt->flags & AVFMT_NEEDNUMBER) {
         if (!av_filename_number_test(filename)) {