Make the following changes: - Declare constructors 'explicit' as recommended in go/totw/142. - Remove a set-but-not-used variable because the compiler warns about it. - Remove the default JetPlayer constructor because defining a default constructor contradicts the comment that says that there is no default constructor. Change-Id: I3b6addedc78e1efbced3e43de5c75cafd9ad24fc Signed-off-by: Bart Van Assche <bvanassche@google.com>
125 lines
3.6 KiB
C++
125 lines
3.6 KiB
C++
/*
|
|
* Copyright (C) 2008 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef JETPLAYER_H_
|
|
#define JETPLAYER_H_
|
|
|
|
#include <utils/threads.h>
|
|
|
|
#include <libsonivox/jet.h>
|
|
#include <libsonivox/eas_types.h>
|
|
#include <media/AudioTrack.h>
|
|
#include <media/MidiIoWrapper.h>
|
|
|
|
|
|
namespace android {
|
|
|
|
typedef void (*jetevent_callback)(int eventType, int val1, int val2, void *cookie);
|
|
|
|
class JetPlayer {
|
|
|
|
public:
|
|
|
|
// to keep in sync with the JetPlayer class constants
|
|
// defined in frameworks/base/media/java/android/media/JetPlayer.java
|
|
static const int JET_EVENT = 1;
|
|
static const int JET_USERID_UPDATE = 2;
|
|
static const int JET_NUMQUEUEDSEGMENT_UPDATE = 3;
|
|
static const int JET_PAUSE_UPDATE = 4;
|
|
|
|
explicit JetPlayer(void *javaJetPlayer,
|
|
int maxTracks = 32,
|
|
int trackBufferSize = 1200);
|
|
~JetPlayer();
|
|
int init();
|
|
int release();
|
|
|
|
int loadFromFile(const char* url);
|
|
int loadFromFD(const int fd, const long long offset, const long long length);
|
|
int closeFile();
|
|
int play();
|
|
int pause();
|
|
int queueSegment(int segmentNum, int libNum, int repeatCount, int transpose,
|
|
EAS_U32 muteFlags, EAS_U8 userID);
|
|
int setMuteFlags(EAS_U32 muteFlags, bool sync);
|
|
int setMuteFlag(int trackNum, bool muteFlag, bool sync);
|
|
int triggerClip(int clipId);
|
|
int clearQueue();
|
|
|
|
void setEventCallback(jetevent_callback callback);
|
|
|
|
int getMaxTracks() { return mMaxTracks; };
|
|
|
|
|
|
private:
|
|
int render();
|
|
void fireUpdateOnStatusChange();
|
|
void fireEventsFromJetQueue();
|
|
|
|
void dump();
|
|
void dumpJetStatus(S_JET_STATUS* pJetStatus);
|
|
|
|
jetevent_callback mEventCallback;
|
|
|
|
void* mJavaJetPlayerRef;
|
|
Mutex mMutex; // mutex to sync the render and playback thread with the JET calls
|
|
pid_t mTid;
|
|
Condition mCondition;
|
|
volatile bool mRender;
|
|
bool mPaused;
|
|
|
|
EAS_STATE mState;
|
|
int* mMemFailedVar;
|
|
|
|
int mMaxTracks; // max number of MIDI tracks, usually 32
|
|
EAS_DATA_HANDLE mEasData;
|
|
MidiIoWrapper* mIoWrapper;
|
|
EAS_PCM* mAudioBuffer;// EAS renders the MIDI data into this buffer,
|
|
sp<AudioTrack> mAudioTrack; // and we play it in this audio track
|
|
int mTrackBufferSize;
|
|
S_JET_STATUS mJetStatus;
|
|
S_JET_STATUS mPreviousJetStatus;
|
|
|
|
class JetPlayerThread : public Thread {
|
|
public:
|
|
explicit JetPlayerThread(JetPlayer *player) : mPlayer(player) {
|
|
}
|
|
|
|
protected:
|
|
virtual ~JetPlayerThread() {}
|
|
|
|
private:
|
|
JetPlayer *mPlayer;
|
|
|
|
bool threadLoop() {
|
|
mPlayer->render();
|
|
return false;
|
|
}
|
|
|
|
JetPlayerThread(const JetPlayerThread &);
|
|
JetPlayerThread &operator=(const JetPlayerThread &);
|
|
};
|
|
|
|
sp<JetPlayerThread> mThread;
|
|
|
|
}; // end class JetPlayer
|
|
|
|
} // end namespace android
|
|
|
|
|
|
|
|
#endif /*JETPLAYER_H_*/
|