19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17e89554b02d65eb87fb502b675b366d41abfa4979Jean-Michel Trivi//#define LOG_NDEBUG 0 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "JET_JNI" 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <fcntl.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h" 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "JNIHelp.h" 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "android_runtime/AndroidRuntime.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "utils/Log.h" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "media/JetPlayer.h" 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic const char* const kClassPathName = "android/media/JetPlayer"; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct fields_t { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // these fields provide access from C++ to the... 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass jetClass; // JetPlayer java class global ref 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jmethodID postNativeEventInJava; // java method to post events to the Java thread from native 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfieldID nativePlayerInJavaObj; // stores in Java the native JetPlayer object 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic fields_t javaJetPlayerFields; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This function is called from JetPlayer instance's render thread 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectjetPlayerEventCallback(int what, int arg1=0, int arg2=0, void* javaTarget = NULL) 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JNIEnv *env = AndroidRuntime::getJNIEnv(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(env) { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->CallStaticVoidMethod( 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.jetClass, javaJetPlayerFields.postNativeEventInJava, 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaTarget, 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project what, arg1, arg2); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (env->ExceptionCheck()) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ExceptionDescribe(); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ExceptionClear(); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("JET jetPlayerEventCallback(): No JNI env for JET event callback, can't post event."); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setup(JNIEnv *env, jobject thiz, jobject weak_this, 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint maxTracks, jint trackBufferSize) 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_setup(): entering."); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer* lpJet = new JetPlayer(env->NewGlobalRef(weak_this), maxTracks, trackBufferSize); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->init(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 8869a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes // save our newly created C++ JetPlayer in the "nativePlayerInJavaObj" field 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of the Java object (in mNativePlayerInJavaObj) 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, (int)lpJet); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_setup(): initialization failed with EAS error code %d", (int)result); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete lpJet; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(weak_this, javaJetPlayerFields.nativePlayerInJavaObj, 0); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_finalize(JNIEnv *env, jobject thiz) 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_finalize(): entering."); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(lpJet != NULL) { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpJet->release(); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete lpJet; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_finalize(): exiting."); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_release(JNIEnv *env, jobject thiz) 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project android_media_JetPlayer_finalize(env, thiz); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, 0); 12369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes LOGV("android_media_JetPlayer_release() done"); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_loadFromFile(JNIEnv *env, jobject thiz, jstring path) 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for openFile()"); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set up event callback function 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpJet->setEventCallback(jetPlayerEventCallback); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *pathStr = env->GetStringUTFChars(path, NULL); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pathStr == NULL) { // Out of memory 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_openFile(): aborting, out of memory"); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_openFile(): trying to open %s", pathStr ); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->loadFromFile(pathStr); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringUTFChars(path, pathStr); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_openFile(): file successfully opened"); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_openFile(): failed to open file with EAS error %d", 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (int)result); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz, 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jobject fileDescriptor, jlong offset, jlong length) 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for openFile()"); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set up event callback function 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpJet->setEventCallback(jetPlayerEventCallback); 17669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_openFileDescr(): trying to load JET file through its fd" ); 178a3804cf77f0edd93f6247a055cdafb856b117eecElliott Hughes EAS_RESULT result = lpJet->loadFromFD(jniGetFDFromFileDescriptor(env, fileDescriptor), 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (long long)offset, (long long)length); // cast params to types used by EAS_FILE 18069a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_openFileDescr(): file successfully opened"); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_openFileDescr(): failed to open file with EAS error %d", 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (int)result); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz) 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for closeFile()"); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20269a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if( lpJet->closeFile()==EAS_SUCCESS) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_closeFile(): file successfully closed"); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_closeFile(): failed to close file"); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_play(JNIEnv *env, jobject thiz) 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for play()"); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->play(); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if( result==EAS_SUCCESS) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_play(): play successful"); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 22969a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes LOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld", 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_pause(JNIEnv *env, jobject thiz) 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for pause()"); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->pause(); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if( result==EAS_SUCCESS) { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_pause(): pause successful"); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_ERROR_QUEUE_IS_EMPTY) { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGV("android_media_JetPlayer_pause(): paused with an empty queue"); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_pause(): failed to pause with EAS error code %ld", 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz, 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint segmentNum, jint libNum, jint repeatCount, jint transpose, jint muteFlags, 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbyte userID) 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for queueSegment()"); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteFlags, userID); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_queueSegment(): segment successfully queued"); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_queueSegment(): failed with EAS error code %ld", 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz, 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint segmentNum, jint libNum, jint repeatCount, jint transpose, jbooleanArray muteArray, 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbyte userID) 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for queueSegmentMuteArray()"); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result=EAS_FAILURE; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean *muteTracks = NULL; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteTracks = env->GetBooleanArrayElements(muteArray, NULL); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (muteTracks == NULL) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_queueSegment(): failed to read track mute mask."); 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_U32 muteMask=0; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxTracks = lpJet->getMaxTracks(); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = (muteMask << 1) | 0x00000001; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = muteMask << 1; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_queueSegmentMuteArray(): FINAL mute mask =0x%08lX", mask); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteMask, userID); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_queueSegmentMuteArray(): segment successfully queued"); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 32869a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes LOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld", 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz, 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint muteFlags /*unsigned?*/, jboolean bSync) 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteFlags()"); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->setMuteFlags(muteFlags, bSync==JNI_TRUE ? true : false); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_setMuteFlags(): mute flags successfully updated"); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_setMuteFlags(): failed with EAS error code %ld", result); 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz, 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbooleanArray muteArray, jboolean bSync) 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteArray()"); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37069a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result=EAS_FAILURE; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean *muteTracks = NULL; 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteTracks = env->GetBooleanArrayElements(muteArray, NULL); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (muteTracks == NULL) { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_setMuteArray(): failed to read track mute mask."); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_U32 muteMask=0; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxTracks = lpJet->getMaxTracks(); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = (muteMask << 1) | 0x00000001; 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = muteMask << 1; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_setMuteArray(): FINAL mute mask =0x%08lX", muteMask); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->setMuteFlags(muteMask, bSync==JNI_TRUE ? true : false); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_setMuteArray(): mute flags successfully updated"); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_setMuteArray(): \ 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failed to update mute flags with EAS error code %ld", result); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz, 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint trackId, jboolean muteFlag, jboolean bSync) 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteFlag()"); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 41769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes result = lpJet->setMuteFlag(trackId, 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteFlag==JNI_TRUE ? true : false, bSync==JNI_TRUE ? true : false); 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_setMuteFlag(): mute flag successfully updated for track %d", trackId); 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_setMuteFlag(): failed to update mute flag for track %d with EAS error code %ld", 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project trackId, result); 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId) 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for triggerClip()"); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44069a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->triggerClip(clipId); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_triggerClip(): triggerClip successful for clip %d", clipId); 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_triggerClip(): triggerClip for clip %d failed with EAS error code %ld", 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clipId, result); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz) 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JetPlayer *lpJet = (JetPlayer *)env->GetIntField( 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lpJet == NULL ) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for clearQueue()"); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 46469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->clearQueue(); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(result==EAS_SUCCESS) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //LOGV("android_media_JetPlayer_clearQueue(): clearQueue successful"); 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("android_media_JetPlayer_clearQueue(): clearQueue failed with EAS error code %ld", 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // name, signature, funcPtr 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setup", "(Ljava/lang/Object;II)Z", (void *)android_media_JetPlayer_setup}, 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_finalize", "()V", (void *)android_media_JetPlayer_finalize}, 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_release", "()V", (void *)android_media_JetPlayer_release}, 48469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_loadJetFromFile", 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(Ljava/lang/String;)Z", (void *)android_media_JetPlayer_loadFromFile}, 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_loadJetFromFileD", "(Ljava/io/FileDescriptor;JJ)Z", 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void *)android_media_JetPlayer_loadFromFileD}, 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_closeJetFile","()Z", (void *)android_media_JetPlayer_closeFile}, 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_playJet", "()Z", (void *)android_media_JetPlayer_play}, 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_pauseJet", "()Z", (void *)android_media_JetPlayer_pause}, 49169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_queueJetSegment", 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(IIIIIB)Z", (void *)android_media_JetPlayer_queueSegment}, 49369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_queueJetSegmentMuteArray", 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(IIII[ZB)Z", (void *)android_media_JetPlayer_queueSegmentMuteArray}, 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteFlags","(IZ)Z", (void *)android_media_JetPlayer_setMuteFlags}, 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteArray","([ZZ)Z", (void *)android_media_JetPlayer_setMuteArray}, 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteFlag", "(IZZ)Z", (void *)android_media_JetPlayer_setMuteFlag}, 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_triggerClip", "(I)Z", (void *)android_media_JetPlayer_triggerClip}, 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_clearQueue", "()Z", (void *)android_media_JetPlayer_clearQueue}, 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME "mNativePlayerInJavaObj" 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME "postEventFromNative" 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_JetPlayer(JNIEnv *env) 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass jetPlayerClass = NULL; 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.jetClass = NULL; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.postNativeEventInJava = NULL; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.nativePlayerInJavaObj = NULL; 51269a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the JetPlayer java class 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jetPlayerClass = env->FindClass(kClassPathName); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (jetPlayerClass == NULL) { 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("Can't find %s", kClassPathName); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.jetClass = (jclass)env->NewGlobalRef(jetPlayerClass); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the mNativePlayerInJavaObj variable field 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.nativePlayerInJavaObj = env->GetFieldID( 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jetPlayerClass, 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "I"); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) { 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("Can't find AudioTrack.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the callback to post events from this native code to Java 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.postNativeEventInJava = env->GetStaticMethodID(javaJetPlayerFields.jetClass, 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;III)V"); 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (javaJetPlayerFields.postNativeEventInJava == NULL) { 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LOGE("Can't find Jet.%s", JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kClassPathName, gMethods, NELEM(gMethods)); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 541