189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/* 289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Copyright 2008, The Android Open Source Project 489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** you may not use this file except in compliance with the License. 789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** You may obtain a copy of the License at 889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** 1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** See the License for the specific language governing permissions and 1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project** limitations under the License. 1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project*/ 1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_MIDIFILE_H 1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_MIDIFILE_H 2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/MediaPlayerInterface.h> 2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <libsonivox/eas.h> 2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android { 2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 2690100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten// Note that the name MidiFile is misleading; this actually represents a MIDI file player 2789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MidiFile : public MediaPlayerInterface { 2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic: 2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project MidiFile(); 3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ~MidiFile(); 3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t initCheck(); 332db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 342db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber virtual status_t setDataSource( 352db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber const char* path, const KeyedVector<String8, String8> *headers); 362db8455d8f4468a637109d31f319ce02d9d743ecAndreas Huber 3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setDataSource(int fd, int64_t offset, int64_t length); 381173118eace0e9e347cb007f0da817cee87579edGlenn Kasten virtual status_t setVideoSurfaceTexture( 391173118eace0e9e347cb007f0da817cee87579edGlenn Kasten const sp<ISurfaceTexture>& surfaceTexture) 401173118eace0e9e347cb007f0da817cee87579edGlenn Kasten { return UNKNOWN_ERROR; } 4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepare(); 4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t prepareAsync(); 4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t start(); 4489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t stop(); 4589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t seekTo(int msec); 4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t pause(); 4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual bool isPlaying(); 4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getCurrentPosition(int* msec); 4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t getDuration(int* msec); 5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t release(); 5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t reset(); 5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual status_t setLooping(int loop); 5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project virtual player_type playerType() { return SONIVOX_PLAYER; } 54d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko virtual status_t invoke(const Parcel& request, Parcel *reply) { 55d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko return INVALID_OPERATION; 56d608a813a9d2cbc6e2a5ea81d78d4a9044090c4cniko } 574f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t setParameter(int key, const Parcel &request) { 584f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return INVALID_OPERATION; 594f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 604f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang virtual status_t getParameter(int key, Parcel *reply) { 614f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang return INVALID_OPERATION; 624f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang } 634f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang 6489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 6589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate: 6689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t createOutputTrack(); 6789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project status_t reset_nosync(); 6889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project int render(); 6989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project void updateState(){ EAS_State(mEasData, mEasHandle, &mState); } 7089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 7189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Mutex mMutex; 7289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project Condition mCondition; 7389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_DATA_HANDLE mEasData; 7489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_HANDLE mEasHandle; 7589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_PCM* mAudioBuffer; 7689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_I32 mPlayTime; 7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_I32 mDuration; 7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_STATE mState; 7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project EAS_FILE mFileLocator; 80fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten audio_stream_type_t mStreamType; 8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mLoop; 8289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile bool mExit; 8389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project bool mPaused; 8489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project volatile bool mRender; 8589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project pid_t mTid; 8690100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 8790100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten class MidiFileThread : public Thread { 8890100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten public: 8990100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten MidiFileThread(MidiFile *midiPlayer) : mMidiFile(midiPlayer) { 9090100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten } 9190100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 9290100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten protected: 9390100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten virtual ~MidiFileThread() {} 9490100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 9590100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten private: 9690100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten MidiFile *mMidiFile; 9790100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 9890100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten bool threadLoop() { 9990100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten int result; 10090100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten result = mMidiFile->render(); 10190100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten return false; 10290100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten } 10390100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 10490100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten MidiFileThread(const MidiFileThread &); 10590100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten MidiFileThread &operator=(const MidiFileThread &); 10690100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten }; 10790100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten 10890100b5573f95e8404c6e2917520e090fe8b49fdGlenn Kasten sp<MidiFileThread> mThread; 10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; 11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android 11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project 11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MIDIFILE_H 114