Use callbacks for Midi I/O
Instead of having the Sonivox engine directly open the file and
use stdio to read from it, use caller-provided callbacks.
Change-Id: Ie55129109060a4a7862fee3177f994401e00b6c1
diff --git a/media/libmediaplayerservice/MidiFile.cpp b/media/libmediaplayerservice/MidiFile.cpp
index 749ef96..205d44f 100644
--- a/media/libmediaplayerservice/MidiFile.cpp
+++ b/media/libmediaplayerservice/MidiFile.cpp
@@ -60,11 +60,6 @@
{
ALOGV("constructor");
- mFileLocator.path = NULL;
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
-
// get the library configuration and do sanity check
if (pLibConfig == NULL)
pLibConfig = EAS_Config();
@@ -126,11 +121,8 @@
}
// open file and set paused state
- mFileLocator.path = strdup(path);
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
- EAS_RESULT result = EAS_OpenFile(mEasData, &mFileLocator, &mEasHandle);
+ mIoWrapper = new MidiIoWrapper(path);
+ EAS_RESULT result = EAS_OpenFile(mEasData, mIoWrapper->getLocator(), &mEasHandle);
if (result == EAS_SUCCESS) {
updateState();
}
@@ -157,10 +149,8 @@
}
// open file and set paused state
- mFileLocator.fd = dup(fd);
- mFileLocator.offset = offset;
- mFileLocator.length = length;
- EAS_RESULT result = EAS_OpenFile(mEasData, &mFileLocator, &mEasHandle);
+ mIoWrapper = new MidiIoWrapper(fd, offset, length);
+ EAS_RESULT result = EAS_OpenFile(mEasData, mIoWrapper->getLocator(), &mEasHandle);
updateState();
if (result != EAS_SUCCESS) {
@@ -329,7 +319,7 @@
EAS_HANDLE easHandle = NULL;
EAS_RESULT result = EAS_Init(&easData);
if (result == EAS_SUCCESS) {
- result = EAS_OpenFile(easData, &mFileLocator, &easHandle);
+ result = EAS_OpenFile(easData, mIoWrapper->getLocator(), &easHandle);
}
if (result == EAS_SUCCESS) {
result = EAS_Prepare(easData, easHandle);
@@ -395,17 +385,8 @@
EAS_CloseFile(mEasData, mEasHandle);
mEasHandle = NULL;
}
- if (mFileLocator.path) {
- free((void*)mFileLocator.path);
- mFileLocator.path = NULL;
- }
- if (mFileLocator.fd >= 0) {
- close(mFileLocator.fd);
- }
- mFileLocator.fd = -1;
- mFileLocator.offset = 0;
- mFileLocator.length = 0;
+ mIoWrapper.clear();
mPlayTime = -1;
mDuration = -1;
mLoop = false;