2 * Copyright (C) 2011 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <variablespeed.h>
23 // Quick #define to make sure I get all the JNI method calls right.
24 #define JNI_METHOD(x, y) \
26 Java_com_android_ex_variablespeed_VariableSpeedNative_##x
30 explicit MethodLog(const char* name
) : name_(name
) {
33 virtual ~MethodLog() {
42 JNI_METHOD(playFileDescriptor
, void) (JNIEnv
*, jclass
, int fd
, jlong offset
,
44 MethodLog
_("playFileDescriptor");
45 AudioEngine::GetEngine()->PlayFileDescriptor(fd
, offset
, length
);
48 JNI_METHOD(playUri
, void) (JNIEnv
* env
, jclass
, jstring uri
) {
49 MethodLog
_("playUri");
50 const char* utf8
= env
->GetStringUTFChars(uri
, NULL
);
52 AudioEngine::GetEngine()->PlayUri(utf8
);
55 JNI_METHOD(setVariableSpeed
, void) (JNIEnv
*, jclass
, float speed
) {
56 MethodLog
_("setVariableSpeed");
57 AudioEngine::GetEngine()->SetVariableSpeed(speed
);
60 JNI_METHOD(startPlayback
, void) (JNIEnv
*, jclass
) {
61 MethodLog
_("startPlayback");
62 AudioEngine::GetEngine()->RequestStart();
65 JNI_METHOD(stopPlayback
, void) (JNIEnv
*, jclass
) {
66 MethodLog
_("stopPlayback");
67 AudioEngine::GetEngine()->RequestStop();
70 JNI_METHOD(getCurrentPosition
, int) (JNIEnv
*, jclass
) {
71 return AudioEngine::GetEngine()->GetCurrentPosition();
74 JNI_METHOD(getTotalDuration
, int) (JNIEnv
*, jclass
) {
75 return AudioEngine::GetEngine()->GetTotalDuration();
78 JNI_METHOD(initializeEngine
, void) (JNIEnv
*, jclass
,
79 int targetFrames
, float windowDuration
,
80 float windowOverlapDuration
, size_t maxPlayBufferCount
,
81 float initialRate
, size_t decodeInitialSize
, size_t decodeMaxSize
,
82 size_t startPositionMillis
, int audioStreamType
) {
83 MethodLog
_("initializeEngine");
84 AudioEngine::SetEngine(new AudioEngine(targetFrames
,
85 windowDuration
, windowOverlapDuration
, maxPlayBufferCount
, initialRate
,
86 decodeInitialSize
, decodeMaxSize
, startPositionMillis
, audioStreamType
));
89 JNI_METHOD(shutdownEngine
, void) (JNIEnv
*, jclass
) {
90 MethodLog
_("shutdownEngine");
91 AudioEngine::DeleteEngine();