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 25c81d31c3f801ba3d559a22c27b926ace38a7ab49Glenn Kasten#include <jni.h> 26c81d31c3f801ba3d559a22c27b926ace38a7ab49Glenn Kasten#include <JNIHelp.h> 27c81d31c3f801ba3d559a22c27b926ace38a7ab49Glenn Kasten#include <android_runtime/AndroidRuntime.h> 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29c81d31c3f801ba3d559a22c27b926ace38a7ab49Glenn Kasten#include <utils/Log.h> 30c81d31c3f801ba3d559a22c27b926ace38a7ab49Glenn Kasten#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(); 5918db49a46259020387c40fff36d92edc1087a366Glenn Kasten 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 { 693762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("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{ 8271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("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 8718db49a46259020387c40fff36d92edc1087a366Glenn Kasten 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) 90075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat env->SetLongField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, (jlong)lpJet); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 933762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_setup(): initialization failed with EAS error code %d", (int)result); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete lpJet; 95075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat env->SetLongField(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{ 10571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("android_media_JetPlayer_finalize(): entering."); 106075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 10818db49a46259020387c40fff36d92edc1087a366Glenn Kasten 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 11371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("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); 122075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat env->SetLongField(thiz, javaJetPlayerFields.nativePlayerInJavaObj, 0); 12371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("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{ 131075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1338f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim 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()"); 1368f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13869a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set up event callback function 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpJet->setEventCallback(jetPlayerEventCallback); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const char *pathStr = env->GetStringUTFChars(path, NULL); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (pathStr == NULL) { // Out of memory 1443762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_openFile(): aborting, out of memory"); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14871f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("android_media_JetPlayer_openFile(): trying to open %s", pathStr ); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->loadFromFile(pathStr); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseStringUTFChars(path, pathStr); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15218db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 15371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_openFile(): file successfully opened"); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1563762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_openFile(): failed to open file with EAS error %d", 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (int)result); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_loadFromFileD(JNIEnv *env, jobject thiz, 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jobject fileDescriptor, jlong offset, jlong length) 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 168075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 1708f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for openFile()"); 1738f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set up event callback function 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lpJet->setEventCallback(jetPlayerEventCallback); 17869a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 17971f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("android_media_JetPlayer_openFileDescr(): trying to load JET file through its fd" ); 180a3804cf77f0edd93f6247a055cdafb856b117eecElliott Hughes EAS_RESULT result = lpJet->loadFromFD(jniGetFDFromFileDescriptor(env, fileDescriptor), 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (long long)offset, (long long)length); // cast params to types used by EAS_FILE 18269a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 18318db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 18471f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("android_media_JetPlayer_openFileDescr(): file successfully opened"); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1873762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_openFileDescr(): failed to open file with EAS error %d", 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (int)result); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_closeFile(JNIEnv *env, jobject thiz) 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 198075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2008f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for closeFile()"); 2038f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 20618db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (lpJet->closeFile()==EAS_SUCCESS) { 20771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_closeFile(): file successfully closed"); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2103762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_closeFile(): failed to close file"); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_play(JNIEnv *env, jobject thiz) 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 220075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2228f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for play()"); 2258f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->play(); 22918db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 23071f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_play(): play successful"); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2333762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_play(): failed to play with EAS error code %ld", 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_pause(JNIEnv *env, jobject thiz) 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 244075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2468f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for pause()"); 2498f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->pause(); 25318db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 25471f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_pause(): pause successful"); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 25718db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_ERROR_QUEUE_IS_EMPTY) { 25871f2cf116aab893e224056c38ab146bd1538dd3eSteve Block ALOGV("android_media_JetPlayer_pause(): paused with an empty queue"); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else 2613762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_pause(): failed to pause with EAS error code %ld", 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_queueSegment(JNIEnv *env, jobject thiz, 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint segmentNum, jint libNum, jint repeatCount, jint transpose, jint muteFlags, 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbyte userID) 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 274075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 2768f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for queueSegment()"); 2798f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteFlags, userID); 28418db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 28571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_queueSegment(): segment successfully queued"); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2883762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_queueSegment(): failed with EAS error code %ld", 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_queueSegmentMuteArray(JNIEnv *env, jobject thiz, 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint segmentNum, jint libNum, jint repeatCount, jint transpose, jbooleanArray muteArray, 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbyte userID) 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 301075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 3038f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for queueSegmentMuteArray()"); 3068f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30869a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result=EAS_FAILURE; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean *muteTracks = NULL; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteTracks = env->GetBooleanArrayElements(muteArray, NULL); 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (muteTracks == NULL) { 3143762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_queueSegment(): failed to read track mute mask."); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_U32 muteMask=0; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxTracks = lpJet->getMaxTracks(); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { 32118db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = (muteMask << 1) | 0x00000001; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = muteMask << 1; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32671f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_queueSegmentMuteArray(): FINAL mute mask =0x%08lX", mask); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->queueSegment(segmentNum, libNum, repeatCount, transpose, muteMask, userID); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); 33118db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 33271f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_queueSegmentMuteArray(): segment successfully queued"); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3353762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_queueSegmentMuteArray(): failed with EAS error code %ld", 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteFlags(JNIEnv *env, jobject thiz, 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint muteFlags /*unsigned?*/, jboolean bSync) 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 347075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 3498f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteFlags()"); 3528f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->setMuteFlags(muteFlags, bSync==JNI_TRUE ? true : false); 35718db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 35871f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_setMuteFlags(): mute flags successfully updated"); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3613762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_setMuteFlags(): failed with EAS error code %ld", result); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteArray(JNIEnv *env, jobject thiz, 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jbooleanArray muteArray, jboolean bSync) 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 372075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 3748f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteArray()"); 3778f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37969a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result=EAS_FAILURE; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jboolean *muteTracks = NULL; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteTracks = env->GetBooleanArrayElements(muteArray, NULL); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (muteTracks == NULL) { 3853762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_setMuteArray(): failed to read track mute mask."); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_U32 muteMask=0; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxTracks = lpJet->getMaxTracks(); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (jint trackIndex=0; trackIndex<maxTracks; trackIndex++) { 39218db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (muteTracks[maxTracks-1-trackIndex]==JNI_TRUE) 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = (muteMask << 1) | 0x00000001; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteMask = muteMask << 1; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39771f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_setMuteArray(): FINAL mute mask =0x%08lX", muteMask); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->setMuteFlags(muteMask, bSync==JNI_TRUE ? true : false); 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->ReleaseBooleanArrayElements(muteArray, muteTracks, 0); 40218db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 40371f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_setMuteArray(): mute flags successfully updated"); 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4063762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_setMuteArray(): \ 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project failed to update mute flags with EAS error code %ld", result); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_setMuteFlag(JNIEnv *env, jobject thiz, 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jint trackId, jboolean muteFlag, jboolean bSync) 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 418075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4208f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for setMuteFlag()"); 4238f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 42769a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes result = lpJet->setMuteFlag(trackId, 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project muteFlag==JNI_TRUE ? true : false, bSync==JNI_TRUE ? true : false); 42918db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 43071f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_setMuteFlag(): mute flag successfully updated for track %d", trackId); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4333762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_setMuteFlag(): failed to update mute flag for track %d with EAS error code %ld", 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project trackId, result); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_triggerClip(JNIEnv *env, jobject thiz, jint clipId) 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 444075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4468f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for triggerClip()"); 4498f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45169a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result; 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = lpJet->triggerClip(clipId); 45418db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 45571f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_triggerClip(): triggerClip successful for clip %d", clipId); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4583762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_triggerClip(): triggerClip for clip %d failed with EAS error code %ld", 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clipId, result); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jboolean 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectandroid_media_JetPlayer_clearQueue(JNIEnv *env, jobject thiz) 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 469075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JetPlayer *lpJet = (JetPlayer *)env->GetLongField( 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project thiz, javaJetPlayerFields.nativePlayerInJavaObj); 4718f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim if (lpJet == NULL) { 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jniThrowException(env, "java/lang/IllegalStateException", 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Unable to retrieve JetPlayer pointer for clearQueue()"); 4748f5691fd92c29c1dbe9e35f39e9550ab525add07You Kim return JNI_FALSE; 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 47669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EAS_RESULT result = lpJet->clearQueue(); 47818db49a46259020387c40fff36d92edc1087a366Glenn Kasten if (result==EAS_SUCCESS) { 47971f2cf116aab893e224056c38ab146bd1538dd3eSteve Block //ALOGV("android_media_JetPlayer_clearQueue(): clearQueue successful"); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_TRUE; 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4823762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("android_media_JetPlayer_clearQueue(): clearQueue failed with EAS error code %ld", 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result); 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return JNI_FALSE; 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gMethods[] = { 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // name, signature, funcPtr 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setup", "(Ljava/lang/Object;II)Z", (void *)android_media_JetPlayer_setup}, 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_finalize", "()V", (void *)android_media_JetPlayer_finalize}, 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_release", "()V", (void *)android_media_JetPlayer_release}, 49669a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_loadJetFromFile", 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(Ljava/lang/String;)Z", (void *)android_media_JetPlayer_loadFromFile}, 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_loadJetFromFileD", "(Ljava/io/FileDescriptor;JJ)Z", 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (void *)android_media_JetPlayer_loadFromFileD}, 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_closeJetFile","()Z", (void *)android_media_JetPlayer_closeFile}, 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_playJet", "()Z", (void *)android_media_JetPlayer_play}, 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_pauseJet", "()Z", (void *)android_media_JetPlayer_pause}, 50369a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_queueJetSegment", 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(IIIIIB)Z", (void *)android_media_JetPlayer_queueSegment}, 50569a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes {"native_queueJetSegmentMuteArray", 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "(IIII[ZB)Z", (void *)android_media_JetPlayer_queueSegmentMuteArray}, 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteFlags","(IZ)Z", (void *)android_media_JetPlayer_setMuteFlags}, 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteArray","([ZZ)Z", (void *)android_media_JetPlayer_setMuteArray}, 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_setMuteFlag", "(IZZ)Z", (void *)android_media_JetPlayer_setMuteFlag}, 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_triggerClip", "(I)Z", (void *)android_media_JetPlayer_triggerClip}, 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project {"native_clearQueue", "()Z", (void *)android_media_JetPlayer_clearQueue}, 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME "mNativePlayerInJavaObj" 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME "postEventFromNative" 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_media_JetPlayer(JNIEnv *env) 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass jetPlayerClass = NULL; 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.jetClass = NULL; 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.postNativeEventInJava = NULL; 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.nativePlayerInJavaObj = NULL; 52469a017bc1d1649350f830dfada5c6ed5eac0b770Elliott Hughes 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the JetPlayer java class 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jetPlayerClass = env->FindClass(kClassPathName); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (jetPlayerClass == NULL) { 5283762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Can't find %s", kClassPathName); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.jetClass = (jclass)env->NewGlobalRef(jetPlayerClass); 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the mNativePlayerInJavaObj variable field 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.nativePlayerInJavaObj = env->GetFieldID( 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jetPlayerClass, 536075e9a19ce645752f8282bc19c91b25978a7dc52Ashok Bhat JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME, "J"); 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (javaJetPlayerFields.nativePlayerInJavaObj == NULL) { 53824c255acc6dc492ee91d0f3a9538f29e1d8977baGlenn Kasten ALOGE("Can't find JetPlayer.%s", JAVA_NATIVEJETPLAYERINJAVAOBJ_FIELD_NAME); 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Get the callback to post events from this native code to Java 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project javaJetPlayerFields.postNativeEventInJava = env->GetStaticMethodID(javaJetPlayerFields.jetClass, 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;III)V"); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (javaJetPlayerFields.postNativeEventInJava == NULL) { 5463762c311729fe9f3af085c14c5c1fb471d994c03Steve Block ALOGE("Can't find Jet.%s", JAVA_NATIVEJETPOSTEVENT_CALLBACK_NAME); 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return AndroidRuntime::registerNativeMethods(env, 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project kClassPathName, gMethods, NELEM(gMethods)); 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 553