[FFmpeg-cvslog] ftp: probe seek capability

Lukasz Marek git at videolan.org
Sat Jun 8 16:05:29 CEST 2013


ffmpeg | branch: master | Lukasz Marek <lukasz.m.luki at gmail.com> | Fri Jun  7 16:27:13 2013 +0200| [89b4800eef7bef71f1c974ca751143f39407a437] | committer: Lukasz Marek

ftp: probe seek capability

Make FTP streamed when server doesn't accept REST command

Signed-off-by: Lukasz Marek <lukasz.m.luki at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=89b4800eef7bef71f1c974ca751143f39407a437
---

 libavformat/ftp.c |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/libavformat/ftp.c b/libavformat/ftp.c
index b59b5b6..5b1c425 100644
--- a/libavformat/ftp.c
+++ b/libavformat/ftp.c
@@ -417,7 +417,7 @@ static int ftp_type(FTPContext *s)
 static int ftp_restart(FTPContext *s, int64_t pos)
 {
     char command[CONTROL_BUFFER_SIZE];
-    const int rest_codes[] = {350, 501, 0}; /* 501 is incorrect code */
+    const int rest_codes[] = {350, 500, 501, 0}; /* 500, 501 are incorrect codes */
 
     snprintf(command, sizeof(command), "REST %"PRId64"\r\n", pos);
     if (ftp_send_command(s, command, rest_codes, NULL) != 350)
@@ -573,10 +573,14 @@ static int ftp_open(URLContext *h, const char *url, int flags)
         goto fail;
     av_strlcat(s->path, path, sizeof(s->path));
 
-    if (ftp_file_size(s) < 0 && flags & AVIO_FLAG_READ)
-        h->is_streamed = 1;
-    if (s->write_seekable != 1 && flags & AVIO_FLAG_WRITE)
+    if (ftp_restart(s, 0) < 0) {
         h->is_streamed = 1;
+    } else {
+        if (ftp_file_size(s) < 0 && flags & AVIO_FLAG_READ)
+            h->is_streamed = 1;
+        if (s->write_seekable != 1 && flags & AVIO_FLAG_WRITE)
+            h->is_streamed = 1;
+    }
 
     return 0;
 



More information about the ffmpeg-cvslog mailing list