From 6768fe0d89798a73e691f2eb648b8e268fd6dbaa Mon Sep 17 00:00:00 2001 From: David McPaul Date: Tue, 29 Dec 2009 00:41:08 +0000 Subject: [PATCH] Improve IO performance for all media files git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34793 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/media/MediaFile.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/kits/media/MediaFile.cpp b/src/kits/media/MediaFile.cpp index 51e04ca09f..8e85ae9c30 100644 --- a/src/kits/media/MediaFile.cpp +++ b/src/kits/media/MediaFile.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -432,9 +433,25 @@ BMediaFile::_InitReader(BDataIO* source, int32 flags) return; } - fSource = source; + if (dynamic_cast(source)) { + // Already buffered + fSource = source; + } else { + // Source needs to be at least a BPositionIO to wrap with a BBufferIO + if (dynamic_cast(source)) { + fSource = new(std::nothrow) BBufferIO(dynamic_cast(source), 65536, fDeleteSource); + if (fSource == NULL) { + fErr = B_NO_MEMORY; + return; + } + fDeleteSource = true; + } else { + TRACE("Unable to improve performance with a BufferIO\n"); + fSource = source; + } + } - fExtractor = new(std::nothrow) MediaExtractor(source, flags); + fExtractor = new(std::nothrow) MediaExtractor(fSource, flags); if (fExtractor == NULL) fErr = B_NO_MEMORY; else