]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/blobdiff - libavformat/aviobuf.c
Attempt to open files with O_DIRECT
[frescor/ffmpeg.git] / libavformat / aviobuf.c
index b1e1b49a7e17d6bb44bd1c92e9890ca34dd48ba6..690ac9aac8e3ebf345956e38c4a407fcc8de3778 100644 (file)
@@ -24,6 +24,8 @@
 #include "avformat.h"
 #include "avio.h"
 #include <stdarg.h>
+#include <malloc.h>
+#include <unistd.h>
 
 #define IO_BUFFER_SIZE 32768
 
@@ -148,7 +150,7 @@ int64_t url_fseek(ByteIOContext *s, int64_t offset, int whence)
     }
     offset1 = offset - pos;
     if (!s->must_flush &&
-        offset1 >= 0 && offset1 < (s->buf_end - s->buffer)) {
+        offset1 >= 0 && offset1 <= (s->buf_end - s->buffer)) {
         /* can do the seek inside the buffer */
         s->buf_ptr = s->buffer + offset1;
     } else if(s->is_streamed && !s->write_flag &&
@@ -538,7 +540,7 @@ int url_fdopen(ByteIOContext **s, URLContext *h)
     } else {
         buffer_size = IO_BUFFER_SIZE;
     }
-    buffer = av_malloc(buffer_size);
+    buffer = memalign(sysconf(_SC_PAGESIZE), buffer_size);
     if (!buffer)
         return AVERROR(ENOMEM);
 
@@ -783,12 +785,8 @@ static int64_t dyn_buf_seek(void *opaque, int64_t offset, int whence)
 static int url_open_dyn_buf_internal(ByteIOContext **s, int max_packet_size)
 {
     DynBuffer *d;
-    int io_buffer_size, ret;
-
-    if (max_packet_size)
-        io_buffer_size = max_packet_size;
-    else
-        io_buffer_size = 1024;
+    int ret;
+    unsigned io_buffer_size = max_packet_size ? max_packet_size : 1024;
 
     if(sizeof(DynBuffer) + io_buffer_size < io_buffer_size)
         return -1;