diff -r 2a9601315dfc -r 98ccebc37403 javauis/mmapi_qt/baseline/src/player.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/mmapi_qt/baseline/src/player.cpp Fri May 14 15:47:24 2010 +0300 @@ -0,0 +1,547 @@ +/* +* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: This class has JNI wrappers for CMMAPlayer +* +*/ + + +//#include +#include "com_nokia_microedition_media_PlayerImpl.h" + +#include "mmafunctionserver.h" +#include "cmmaplayer.h" +#include "s60commonutils.h" +#include + +using namespace java::util; + +// If eventsource is already disposed, then do nothing +#define CHECK_HANDLE(x, j) { if ( !( x ) || ( ( x )->Players().Count() == 0 ) ) { return ( j ); } } +/* + * Wrappers for calling non static methods + */ + +TInt VoidFunc(TInt aPlayer, MMAFunctionServer* aEventSource, + TInt(CMMAPlayer::*aFunc)()) +{ + CMMAPlayer* p = aEventSource->FindPlayer(aPlayer); + if (p) + { + return (p->*aFunc)(); + } + else + { + return KErrBadHandle; + } +} + +void BoolFuncL(TInt aPlayer, MMAFunctionServer* aEventSource, + void(CMMAPlayer::*aFunc)(TBool), + TBool aValue) +{ + CMMAPlayer* p = aEventSource->FindPlayer(aPlayer); + if (p) + { + (p->*aFunc)(aValue); + } + // ignore call if player is not found +} + +void VVoidFuncL(TInt aPlayer, MMAFunctionServer* aEventSource, void(CMMAPlayer::*aFunc)()) +{ + CMMAPlayer* p = aEventSource->FindPlayer(aPlayer); + if (p) + { + (p->*aFunc)(); + } + // ignore call if player is not found +} + +void IntFunc(TInt aPlayer, + MMAFunctionServer* aEventSource, + void(CMMAPlayer::*aFunc)(TInt), + TInt aData) +{ + CMMAPlayer* p = aEventSource->FindPlayer(aPlayer); + if (p) + { + (p->*aFunc)(aData); + } + // ignore call if player is not found +} + +void TInt64Func(TInt aPlayer, MMAFunctionServer* aEventSource, + void(CMMAPlayer::*aFunc)(TInt64* aData), + TInt64* aData) +{ + CMMAPlayer* p = aEventSource->FindPlayer(aPlayer); + if (p) + { + (p->*aFunc)(aData); + } + else + { + *aData = KErrBadHandle; + } +} + + + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _createPlayer + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1initPlayer +(JNIEnv* aJni, + jobject aObject, + jobject aListenerObject, + jint aEventSourceHandle, + jint aPlayerHandle) +{ + LOG(EJavaMMAPI,EInfo,"jni_PlayerImpl__1initPlayer Enter... 1"); + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle); + + CHECK_HANDLE(eventSource, KErrNone); + + CMMAPlayer* player = reinterpret_cast< CMMAPlayer* >(aPlayerHandle); + + // init player + jobject playerObject = aJni->NewWeakGlobalRef(aObject); +LOG(EJavaMMAPI,EInfo,"jni_PlayerImpl__1initPlayer Enter... 5"); + TInt err = eventSource->ExecuteTrap(&CMMAPlayer::StaticInitPlayerL, + player, + eventSource, + playerObject, + eventSource->getValidJniEnv()); + if (err != KErrNone) + { + aJni->DeleteWeakGlobalRef((jweak)playerObject); + return err; + } + + // set player listener + jobject playerListener = aJni->NewWeakGlobalRef(aListenerObject); + err = eventSource->ExecuteTrap(&CMMAPlayer::StaticSetPlayerListenerObjectL, + player, + eventSource, + playerListener, + eventSource->getValidJniEnv(), + (MMMAEventPoster*)eventSource); + if (err != KErrNone) + { + aJni->DeleteWeakGlobalRef((jweak)playerListener); + } + return err; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _start + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1start +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + LOG( EJavaMMAPI, EInfo, "jni_PlayerImpl__1start..."); + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + CHECK_HANDLE(eventSource, KErrNone); + TInt err = eventSource->ExecuteTrap(&VVoidFuncL, + aPlayer, + eventSource, + &CMMAPlayer::StartL); + LOG1(EJavaMMAPI,EInfo,"jni_PlayerImpl__1start Enter... 3, err = %d",err); + // complete java side request in case of leave. + if (err != KErrNone) + { + CMMAPlayer* p = eventSource->FindPlayer(aPlayer); + p->PostActionCompleted(err); // java start return + } + + return err; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _stop + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1stop +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt err = eventSource->ExecuteTrap(&BoolFuncL, + aPlayer, + eventSource, + &CMMAPlayer::StopL, + (TBool)ETrue); + return err; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _close + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1close +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + // if eventsource is already disposed, then do nothing + + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + LOG( EJavaMMAPI, EInfo, "jni_Player.cpp__1close before &CMMAPlayer::CloseL"); + TInt err = eventSource->ExecuteTrap(&VVoidFuncL, + aPlayer, + eventSource, + &CMMAPlayer::CloseL); + ELOG1( EJavaMMAPI, "jni_Player.cpp__1close %d", err); + return err; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _prefetch + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1prefetch +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + ELOG( EJavaMMAPI, "jni_Player.cpp__1prefetch "); + MMAFunctionServer* eventSource = + //JavaUnhand< MMAFunctionServer >(aEventSource); + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt err = eventSource->ExecuteTrap(&VVoidFuncL, aPlayer, + eventSource, + &CMMAPlayer::PrefetchL); + + ELOG1( EJavaMMAPI, "jni_Player.cpp__1prefetch %d", err); + + return err; +} + + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _realize + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1realize +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt err = eventSource->ExecuteTrap(&VVoidFuncL, + aPlayer, eventSource, + &CMMAPlayer::RealizeL); + return err; +} + + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _setLoopCount + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1setLoopCount +(JNIEnv *, jclass, jint aEventSource, jint aPlayer, jint aLoopCount) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + eventSource->ExecuteV(&IntFunc, + aPlayer, eventSource, + &CMMAPlayer::SetLoopCount, + aLoopCount); + return KErrNone; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _duration + * Signature: (II)J + */ +JNIEXPORT jlong JNICALL Java_com_nokia_microedition_media_PlayerImpl__1duration +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt64 duration(0); + + TInt err = eventSource->ExecuteTrap(&TInt64Func, + aPlayer, eventSource, + &CMMAPlayer::GetDuration, + &duration); + if (err != KErrNone) + { + return err; + } + return *reinterpret_cast< jlong* >(&duration); +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _setMediaTime + * Signature: (IIJ)J + */ +JNIEXPORT jlong JNICALL Java_com_nokia_microedition_media_PlayerImpl__1setMediaTime +(JNIEnv *, jclass, jint aEventSource, jint aPlayer, jlong aNow) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + + TInt64 time = *reinterpret_cast< TInt64* >(&aNow); + + TInt err = eventSource->ExecuteTrap(&TInt64Func, + aPlayer, eventSource, + &CMMAPlayer::SetMediaTimeL, + &time); + + if (err != KErrNone) + { + ELOG1( EJavaMMAPI, "MMA::Java_com_nokia_microedition_media_PlayerImpl__1setMediaTime error %d ", + err); + return err; + } + return *reinterpret_cast< jlong* >(&time); +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _deallocate + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1deallocate +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt err = eventSource->ExecuteTrap(&VVoidFuncL, + aPlayer, eventSource, + &CMMAPlayer::DeallocateL); + return err; +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _getMediaTime + * Signature: (II)J + */ +JNIEXPORT jlong JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getMediaTime +(JNIEnv*, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + TInt64 mediaTime(0); + + TInt err = eventSource->ExecuteTrap(&TInt64Func, aPlayer, + eventSource, + &CMMAPlayer::GetMediaTime, + &mediaTime); + if (err != KErrNone) + { + return err; + } + return *reinterpret_cast< jlong* >(&mediaTime); +} + +/* + * Class: com_nokia_microedition_media_PlayerImpl + * Method: _getState + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getState +(JNIEnv *, jclass, jint aEventSource, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + +LOG(EJavaMMAPI,EInfo,"MMA::Java_com_nokia_microedition_media_PlayerImpl__1getState before finding player "); + CMMAPlayer* player = eventSource->FindPlayer(aPlayer); +LOG(EJavaMMAPI,EInfo,"MMA::Java_com_nokia_microedition_media_PlayerImpl__1getState after finding player "); + TInt state = CMMAPlayer::EClosed; + if (player != NULL) + { + state = player->State(); + } + +LOG1(EJavaMMAPI,EInfo,"MMA::Java_com_nokia_microedition_media_PlayerImpl__1getState state %d ", + state); + return state; +} + +/* + * + */ +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1addSourceStream +(JNIEnv* aJni, jclass, jint aEventSource, jint aPlayer, jobject aReader) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSource); + + CHECK_HANDLE(eventSource, KErrNone); + + CMMAPlayer* player = eventSource->FindPlayer(aPlayer); + CMMASourceStream* sourceStream; + + jobject readerRef = aJni->NewWeakGlobalRef(aReader); + + TInt err = KErrNotFound; + if (player != NULL) + { + err = eventSource->ExecuteTrap(&CMMAPlayer::StaticAddSourceStreamL, + eventSource->getValidJniEnv(), + player, + eventSource, + readerRef, + &sourceStream); + } + if (err != KErrNone) + { + aJni->DeleteWeakGlobalRef((jweak)readerRef); + return err; + } + return reinterpret_cast(sourceStream); +} + + +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getControlsCount +(JNIEnv*, jclass, jint aEventSourceHandle, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSourceHandle); + + CHECK_HANDLE(eventSource, KErrNone); + + + TInt count = eventSource->Execute(&VoidFunc, + aPlayer, eventSource, + &CMMAPlayer::ControlCount); + return count; +} + + +JNIEXPORT jstring JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getControlClassName +(JNIEnv* aJniEnv, jclass, jint aEventSourceHandle, jint aControlHandle) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer* >(aEventSourceHandle); + + CMMAControl* control = reinterpret_cast< CMMAControl* >(aControlHandle); + + const TDesC* name = eventSource->Execute(CMMAControl::ClassNameJni, + control); + return S60CommonUtils::NativeToJavaString(*aJniEnv, *name); +} + + +JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getControlHandle +(JNIEnv*, jclass, jint aEventSourceHandle, jint aPlayer, jint aIndex) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle); + + CHECK_HANDLE(eventSource, KErrNone); + + CMMAPlayer* player = eventSource->FindPlayer(aPlayer); + CMMAControl* control = NULL; + if (player) + { + control = eventSource->Execute(CMMAPlayer::StaticControl, + player, + aIndex); + } + else + { + return KErrBadHandle; + } + + return reinterpret_cast(control); +} + +LOCAL_C void DisposePlayer(MMAFunctionServer* aEventSource, + TInt aPlayer) +{ + CMMAPlayer* player = aEventSource->FindPlayer(aPlayer); + if (player) + { + aEventSource->DisposePlayer(player); + } + // else already disposed +} + +JNIEXPORT void JNICALL Java_com_nokia_microedition_media_PlayerImpl__1dispose +(JNIEnv*, jclass, jint aEventSourceHandle, jint aPlayer) +{ + MMAFunctionServer* eventSource = + reinterpret_cast< MMAFunctionServer *>(aEventSourceHandle); + + // if eventsource is already disposed, then do nothing + if (!eventSource || eventSource->IsDisposed()) + { + return; + } + + eventSource->ExecuteV(&DisposePlayer, + eventSource, + aPlayer); +} + +JNIEXPORT jstring JNICALL Java_com_nokia_microedition_media_PlayerImpl__1getContentType +(JNIEnv* aJni, jclass, + jint aPlayerHandle) +{ + CMMAPlayer* player = reinterpret_cast< CMMAPlayer* >(aPlayerHandle); + jstring contentType = NULL; + + // if content type is null, we just return NULL to Java + if (player->ContentType()) + { + // need to create Java String object + contentType = S60CommonUtils::NativeToJavaString(*aJni, *player->ContentType()); + } + return contentType; +} + +// END OF FILE