diff options
author | Marco Nelissen <marcone@google.com> | 2014-12-16 12:46:34 -0800 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2014-12-16 14:06:57 -0800 |
commit | 08b9e2d113213c37506a416bc95a36789bcab4ca (patch) | |
tree | f417e27066b7ba7c59eb12606d28f1c7081e998e /media/libmediaplayerservice | |
parent | d3671c844e2592ce3a29d6d3c4fc344343783f46 (diff) | |
download | frameworks_av-08b9e2d113213c37506a416bc95a36789bcab4ca.zip frameworks_av-08b9e2d113213c37506a416bc95a36789bcab4ca.tar.gz frameworks_av-08b9e2d113213c37506a416bc95a36789bcab4ca.tar.bz2 |
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: I4d775c8458c48c591a15794c4517e006dcf034e1
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerFactory.cpp | 11 | ||||
-rw-r--r-- | media/libmediaplayerservice/MidiFile.cpp | 31 | ||||
-rw-r--r-- | media/libmediaplayerservice/MidiFile.h | 4 |
3 files changed, 12 insertions, 34 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerFactory.cpp b/media/libmediaplayerservice/MediaPlayerFactory.cpp index aeefb4c..c689470 100644 --- a/media/libmediaplayerservice/MediaPlayerFactory.cpp +++ b/media/libmediaplayerservice/MediaPlayerFactory.cpp @@ -15,11 +15,13 @@ ** limitations under the License. */ +//#define LOG_NDEBUG 0 #define LOG_TAG "MediaPlayerFactory" #include <utils/Log.h> #include <cutils/properties.h> #include <media/IMediaPlayer.h> +#include <media/MidiIoWrapper.h> #include <media/stagefright/DataSource.h> #include <media/stagefright/FileSource.h> #include <media/stagefright/foundation/ADebug.h> @@ -308,7 +310,6 @@ class SonivoxPlayerFactory : public MediaPlayerFactory::IFactory { } } } - return 0.0; } @@ -324,14 +325,10 @@ class SonivoxPlayerFactory : public MediaPlayerFactory::IFactory { // Some kind of MIDI? EAS_DATA_HANDLE easdata; + sp<MidiIoWrapper> wrapper = new MidiIoWrapper(fd, offset, length); if (EAS_Init(&easdata) == EAS_SUCCESS) { - EAS_FILE locator; - locator.path = NULL; - locator.fd = fd; - locator.offset = offset; - locator.length = length; EAS_HANDLE eashandle; - if (EAS_OpenFile(easdata, &locator, &eashandle) == EAS_SUCCESS) { + if (EAS_OpenFile(easdata, wrapper->getLocator(), &eashandle) == EAS_SUCCESS) { EAS_CloseFile(easdata, eashandle); EAS_Shutdown(easdata); return kOurScore; 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 @@ MidiFile::MidiFile() : { 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 @@ status_t MidiFile::setDataSource( } // 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 @@ status_t MidiFile::setDataSource(int fd, int64_t offset, int64_t length) } // 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 @@ status_t MidiFile::getDuration(int* duration) 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 @@ status_t MidiFile::reset_nosync() 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; diff --git a/media/libmediaplayerservice/MidiFile.h b/media/libmediaplayerservice/MidiFile.h index 82e4e88..48a42aa 100644 --- a/media/libmediaplayerservice/MidiFile.h +++ b/media/libmediaplayerservice/MidiFile.h @@ -20,6 +20,7 @@ #include <media/MediaPlayerInterface.h> #include <libsonivox/eas.h> +#include <media/MidiIoWrapper.h> namespace android { @@ -63,7 +64,6 @@ public: return INVALID_OPERATION; } - private: status_t createOutputTrack(); status_t reset_nosync(); @@ -78,7 +78,7 @@ private: EAS_I32 mPlayTime; EAS_I32 mDuration; EAS_STATE mState; - EAS_FILE mFileLocator; + sp<MidiIoWrapper> mIoWrapper; audio_stream_type_t mStreamType; bool mLoop; volatile bool mExit; |