]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/avio.c
priv_data is allocated/freed internally
[ffmpeg] / libavformat / avio.c
index 7627f4a4055a00230d69f5b72211585a0b7bc17a..dc40384fc504588116593e693e5b6b57ea7726ee 100644 (file)
@@ -2,19 +2,21 @@
  * Unbuffered io for ffmpeg system
  * Copyright (c) 2001 Fabrice Bellard
  *
- * This library is free software; you can redistribute it and/or
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This library is distributed in the hope that it will be useful,
+ * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 #include "avformat.h"
 
@@ -58,7 +60,7 @@ int url_open(URLContext **puc, const char *filename, int flags)
     } else {
         *q = '\0';
     }
-    
+
     up = first_protocol;
     while (up != NULL) {
         if (!strcmp(proto_str, up->name))
@@ -95,24 +97,24 @@ int url_read(URLContext *h, unsigned char *buf, int size)
 {
     int ret;
     if (h->flags & URL_WRONLY)
-        return -EIO;
+        return AVERROR_IO;
     ret = h->prot->url_read(h, buf, size);
     return ret;
 }
 
-#ifdef CONFIG_ENCODERS
+#if defined(CONFIG_MUXERS) || defined(CONFIG_PROTOCOLS)
 int url_write(URLContext *h, unsigned char *buf, int size)
 {
     int ret;
     if (!(h->flags & (URL_WRONLY | URL_RDWR)))
-        return -EIO;
+        return AVERROR_IO;
     /* avoid sending too big packets */
     if (h->max_packet_size && size > h->max_packet_size)
-        return -EIO; 
+        return AVERROR_IO;
     ret = h->prot->url_write(h, buf, size);
     return ret;
 }
-#endif //CONFIG_ENCODERS
+#endif //CONFIG_MUXERS || CONFIG_PROTOCOLS
 
 offset_t url_seek(URLContext *h, offset_t pos, int whence)
 {
@@ -145,18 +147,21 @@ int url_exist(const char *filename)
 offset_t url_filesize(URLContext *h)
 {
     offset_t pos, size;
-    
-    pos = url_seek(h, 0, SEEK_CUR);
-    size = url_seek(h, -1, SEEK_END)+1;
-    url_seek(h, pos, SEEK_SET);
+
+    size= url_seek(h, 0, AVSEEK_SIZE);
+    if(size<0){
+        pos = url_seek(h, 0, SEEK_CUR);
+        size = url_seek(h, -1, SEEK_END)+1;
+        url_seek(h, pos, SEEK_SET);
+    }
     return size;
 }
 
-/* 
+/*
  * Return the maximum packet size associated to packetized file
  * handle. If the file is not packetized (stream like http or file on
  * disk), then 0 is returned.
- * 
+ *
  * @param h file handle
  * @return maximum packet size in bytes
  */
@@ -176,11 +181,11 @@ static int default_interrupt_cb(void)
     return 0;
 }
 
-/** 
+/**
  * The callback is called in blocking functions to test regulary if
  * asynchronous interruption is needed. -EINTR is returned in this
  * case by the interrupted function. 'NULL' means no interrupt
- * callback is given.  
+ * callback is given.
  */
 void url_set_interrupt_cb(URLInterruptCB *interrupt_cb)
 {