summaryrefslogtreecommitdiff
path: root/indra/llaudio/llaudiodecodemgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llaudio/llaudiodecodemgr.cpp')
-rw-r--r--indra/llaudio/llaudiodecodemgr.cpp58
1 files changed, 35 insertions, 23 deletions
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index ff0aa6e76e..e7db84f6ab 100644
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -29,7 +29,7 @@
#include "llaudioengine.h"
#include "lllfsthread.h"
-#include "llfilesystem.h"
+#include "llvfile.h"
#include "llstring.h"
#include "lldir.h"
#include "llendianswizzle.h"
@@ -90,17 +90,19 @@ protected:
LLUUID mUUID;
std::vector<U8> mWAVBuffer;
+#if !defined(USE_WAV_VFILE)
std::string mOutFilename;
LLLFSThread::handle_t mFileHandle;
+#endif
- LLFileSystem *mInFilep;
+ LLVFile *mInFilep;
OggVorbis_File mVF;
S32 mCurrentSection;
};
-size_t cache_read(void *ptr, size_t size, size_t nmemb, void *datasource)
+size_t vfs_read(void *ptr, size_t size, size_t nmemb, void *datasource)
{
- LLFileSystem *file = (LLFileSystem *)datasource;
+ LLVFile *file = (LLVFile *)datasource;
if (file->read((U8*)ptr, (S32)(size * nmemb))) /*Flawfinder: ignore*/
{
@@ -113,11 +115,11 @@ size_t cache_read(void *ptr, size_t size, size_t nmemb, void *datasource)
}
}
-S32 cache_seek(void *datasource, ogg_int64_t offset, S32 whence)
+S32 vfs_seek(void *datasource, ogg_int64_t offset, S32 whence)
{
- LLFileSystem *file = (LLFileSystem *)datasource;
+ LLVFile *file = (LLVFile *)datasource;
- // cache has 31-bit files
+ // vfs has 31-bit files
if (offset > S32_MAX)
{
return -1;
@@ -135,7 +137,7 @@ S32 cache_seek(void *datasource, ogg_int64_t offset, S32 whence)
origin = -1;
break;
default:
- LL_ERRS("AudioEngine") << "Invalid whence argument to cache_seek" << LL_ENDL;
+ LL_ERRS("AudioEngine") << "Invalid whence argument to vfs_seek" << LL_ENDL;
return -1;
}
@@ -149,16 +151,16 @@ S32 cache_seek(void *datasource, ogg_int64_t offset, S32 whence)
}
}
-S32 cache_close (void *datasource)
+S32 vfs_close (void *datasource)
{
- LLFileSystem *file = (LLFileSystem *)datasource;
+ LLVFile *file = (LLVFile *)datasource;
delete file;
return 0;
}
-long cache_tell (void *datasource)
+long vfs_tell (void *datasource)
{
- LLFileSystem *file = (LLFileSystem *)datasource;
+ LLVFile *file = (LLVFile *)datasource;
return file->tell();
}
@@ -170,10 +172,11 @@ LLVorbisDecodeState::LLVorbisDecodeState(const LLUUID &uuid, const std::string &
mUUID = uuid;
mInFilep = NULL;
mCurrentSection = 0;
+#if !defined(USE_WAV_VFILE)
mOutFilename = out_filename;
mFileHandle = LLLFSThread::nullHandle();
-
- // No default value for mVF, it's an ogg structure?
+#endif
+ // No default value for mVF, it's an ogg structure?
// Hey, let's zero it anyway, for predictability.
memset(&mVF, 0, sizeof(mVF));
}
@@ -190,15 +193,15 @@ LLVorbisDecodeState::~LLVorbisDecodeState()
BOOL LLVorbisDecodeState::initDecode()
{
- ov_callbacks cache_callbacks;
- cache_callbacks.read_func = cache_read;
- cache_callbacks.seek_func = cache_seek;
- cache_callbacks.close_func = cache_close;
- cache_callbacks.tell_func = cache_tell;
+ ov_callbacks vfs_callbacks;
+ vfs_callbacks.read_func = vfs_read;
+ vfs_callbacks.seek_func = vfs_seek;
+ vfs_callbacks.close_func = vfs_close;
+ vfs_callbacks.tell_func = vfs_tell;
LL_DEBUGS("AudioEngine") << "Initing decode from vfile: " << mUUID << LL_ENDL;
- mInFilep = new LLFileSystem(mUUID, LLAssetType::AT_SOUND);
+ mInFilep = new LLVFile(gVFS, mUUID, LLAssetType::AT_SOUND);
if (!mInFilep || !mInFilep->getSize())
{
LL_WARNS("AudioEngine") << "unable to open vorbis source vfile for reading" << LL_ENDL;
@@ -207,7 +210,7 @@ BOOL LLVorbisDecodeState::initDecode()
return FALSE;
}
- S32 r = ov_open_callbacks(mInFilep, &mVF, NULL, 0, cache_callbacks);
+ S32 r = ov_open_callbacks(mInFilep, &mVF, NULL, 0, vfs_callbacks);
if(r < 0)
{
LL_WARNS("AudioEngine") << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << LL_ENDL;
@@ -367,7 +370,7 @@ BOOL LLVorbisDecodeState::decodeSection()
{
if (!mInFilep)
{
- LL_WARNS("AudioEngine") << "No cache file to decode in vorbis!" << LL_ENDL;
+ LL_WARNS("AudioEngine") << "No VFS file to decode in vorbis!" << LL_ENDL;
return TRUE;
}
if (mDone)
@@ -417,7 +420,9 @@ BOOL LLVorbisDecodeState::finishDecode()
return TRUE; // We've finished
}
+#if !defined(USE_WAV_VFILE)
if (mFileHandle == LLLFSThread::nullHandle())
+#endif
{
ov_clear(&mVF);
@@ -490,9 +495,11 @@ BOOL LLVorbisDecodeState::finishDecode()
mValid = FALSE;
return TRUE; // we've finished
}
+#if !defined(USE_WAV_VFILE)
mBytesRead = -1;
mFileHandle = LLLFSThread::sLocal->write(mOutFilename, &mWAVBuffer[0], 0, mWAVBuffer.size(),
new WriteResponder(this));
+#endif
}
if (mFileHandle != LLLFSThread::nullHandle())
@@ -514,6 +521,11 @@ BOOL LLVorbisDecodeState::finishDecode()
mDone = TRUE;
+#if defined(USE_WAV_VFILE)
+ // write the data.
+ LLVFile output(gVFS, mUUID, LLAssetType::AT_SOUND_WAV);
+ output.write(&mWAVBuffer[0], mWAVBuffer.size());
+#endif
LL_DEBUGS("AudioEngine") << "Finished decode for " << getUUID() << LL_ENDL;
return TRUE;
@@ -523,7 +535,7 @@ void LLVorbisDecodeState::flushBadFile()
{
if (mInFilep)
{
- LL_WARNS("AudioEngine") << "Flushing bad vorbis file from cache for " << mUUID << LL_ENDL;
+ LL_WARNS("AudioEngine") << "Flushing bad vorbis file from VFS for " << mUUID << LL_ENDL;
mInFilep->remove();
}
}