--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/mmapi_akn/baseline/src/nativeplayerfactory.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2002 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 NativePlayerFactory JNI functions
+*
+*/
+
+#include <jdebug.h>
+
+#include "com_nokia_microedition_media_NativePlayerFactory.h"
+#include "cmmamanager.h"
+#include "cmmaplayer.h"
+
+/**
+ * Adds player to event source. If player could not be created
+ * handle KErrNone indicates in Java side that there wasn't suitable factory.
+ */
+LOCAL_C void HandleCreatePlayerL(CMMAPlayer* aPlayer,
+ CMMAEventSource* aEventSource,
+ TInt* aHandle)
+{
+ if (aPlayer)
+ {
+ // Player was created, add it to event source
+ CleanupStack::PushL(aPlayer);
+ aEventSource->AddPlayerL(aPlayer);
+ *aHandle = JavaMakeHandle(aPlayer);
+ CleanupStack::Pop(aPlayer);
+ }
+ else
+ {
+ // Data was not supported and there is no error.
+ // Return KErrNone to java side
+ *aHandle = KErrNone;
+ }
+}
+
+/**
+ * Local function that calls CMMAManager's CreatePlayerL method.
+ */
+LOCAL_C void CreatePlayerHeaderDataL(CMMAManager* aManager,
+ CMMAEventSource* aEventSource,
+ const TDesC8* aHeaderData,
+ TInt* aHandle)
+{
+ HandleCreatePlayerL(aManager->CreatePlayerL(*aHeaderData),
+ aEventSource,
+ aHandle);
+}
+
+/**
+ * JNI function from NativePlayerFactory class.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_NativePlayerFactory__1createPlayerHeaderData
+(JNIEnv* aJni, jclass,
+ jint aEventSourceHandle, jint aManagerHandle,
+ jbyteArray aHeaderData)
+{
+ // Development time check.
+ __ASSERT_DEBUG((aEventSourceHandle > 0) && (aManagerHandle > 0), User::Invariant());
+
+ CMMAEventSource* eventSource =
+ JavaUnhand< CMMAEventSource >(aEventSourceHandle);
+ CMMAManager* manager = JavaUnhand< CMMAManager >(aManagerHandle);
+
+ // Returning just KErrNone if there is no header data
+ TInt playerHandle = KErrNone;
+ if (aHeaderData)
+ {
+ // Get pointer to Java header data
+ jbyte* data = aJni->GetByteArrayElements(aHeaderData, NULL);
+ // if data is null Java data could not be obtained to native and
+ // KErrNoMemory is returned to Java
+ if (!data)
+ {
+ return KErrNoMemory;
+ }
+
+ TInt headerDataLength = aJni->GetArrayLength(aHeaderData);
+ TPtrC8 headerData((TUint8*)data, headerDataLength);
+ TInt err = eventSource->ExecuteTrap(&CreatePlayerHeaderDataL,
+ manager,
+ eventSource,
+ (const TDesC8*)&headerData,
+ &playerHandle);
+
+ // release bytes got with GetByteArrayElements
+ aJni->ReleaseByteArrayElements(aHeaderData,
+ data,
+ 0);
+ if (err != KErrNone)
+ {
+ // Leave occured return error code to Java
+ playerHandle = err;
+ DEBUG_INT("MMA::NativePlayerFactory createPlayerHeaderData err %d",
+ playerHandle);
+ }
+ }
+ return playerHandle;
+}
+
+/**
+ * Local function that calls CMMAManager's CreatePlayerL method.
+ */
+LOCAL_C void CreatePlayerLocatorL(CMMAManager* aManager,
+ CMMAEventSource* aEventSource,
+ const TDesC* aProtocol,
+ const TDesC* aMiddlePart,
+ const TDesC* aParameters,
+ TInt* aHandle)
+{
+ HandleCreatePlayerL(aManager->CreatePlayerL(*aProtocol,
+ *aMiddlePart,
+ *aParameters),
+ aEventSource,
+ aHandle);
+}
+
+/**
+ * JNI function from NativePlayerFactory class.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_NativePlayerFactory__1createPlayerLocator
+(JNIEnv* aJni, jclass,
+ jint aEventSourceHandle, jint aManagerHandle,
+ jstring aProtocol, jstring aMiddlePart, jstring aParameters)
+{
+ // Development time check.
+ __ASSERT_DEBUG((aEventSourceHandle > 0) && (aManagerHandle > 0), User::Invariant());
+
+ CMMAEventSource* eventSource =
+ JavaUnhand< CMMAEventSource >(aEventSourceHandle);
+ CMMAManager* manager = JavaUnhand< CMMAManager >(aManagerHandle);
+
+ // Get Java strings to native
+ RJString protocol(*aJni, aProtocol);
+ RJString middlePart(*aJni, aMiddlePart);
+
+ // If Java parameters is null, empty descriptor will be given to
+ // CreatePlayerL method.
+ TPtrC parameters(KNullDesC);
+ RJString* tmp = NULL;
+ if (aParameters != NULL)
+ {
+ tmp = new RJString(*aJni, aParameters);
+ if (tmp)
+ {
+ parameters.Set(*tmp);
+ }
+ else
+ {
+ // failed to create string
+ return KErrNoMemory;
+ }
+ }
+
+ TInt playerHandle = KErrNoMemory;
+ TInt err = eventSource->ExecuteTrap(&CreatePlayerLocatorL,
+ manager,
+ eventSource,
+ (const TDesC*)&protocol,
+ (const TDesC*)&middlePart,
+ (const TDesC*)¶meters,
+ &playerHandle);
+ delete tmp;
+ if (err != KErrNone)
+ {
+ // Leave occured return error code to Java
+ playerHandle = err;
+ DEBUG_INT("MMA::NativePlayerFactory createPlayerLocator err %d",
+ playerHandle);
+ }
+ return playerHandle;
+}
+
+/**
+ * Local function that calls CMMAManager's CreatePlayerL method.
+ */
+LOCAL_C void CreatePlayerContentTypeL(CMMAManager* aManager,
+ CMMAEventSource* aEventSource,
+ const TDesC* aContentType,
+ TInt* aHandle)
+{
+ HandleCreatePlayerL(aManager->CreatePlayerL(*aContentType),
+ aEventSource,
+ aHandle);
+}
+
+/**
+ * JNI function from NativePlayerFactory class.
+ */
+JNIEXPORT jint JNICALL Java_com_nokia_microedition_media_NativePlayerFactory__1createPlayerContentType
+(JNIEnv* aJni, jclass,
+ jint aEventSourceHandle, jint aManagerHandle,
+ jstring aContentType)
+{
+ // Development time check.
+ __ASSERT_DEBUG((aEventSourceHandle > 0) && (aManagerHandle > 0), User::Invariant());
+
+ CMMAEventSource* eventSource =
+ JavaUnhand< CMMAEventSource >(aEventSourceHandle);
+ CMMAManager* manager = JavaUnhand< CMMAManager >(aManagerHandle);
+
+ RJString contentType(*aJni, aContentType);
+ TInt playerHandle = KErrNoMemory;
+ TInt err = eventSource->ExecuteTrap(&CreatePlayerContentTypeL,
+ manager,
+ eventSource,
+ (const TDesC*)&contentType,
+ &playerHandle);
+ if (err != KErrNone)
+ {
+ // Leave occured return error code to Java
+ playerHandle = err;
+ DEBUG_INT("MMA::NativePlayerFactory createPlayerContentType err %d",
+ playerHandle);
+ }
+ return playerHandle;
+}
+
+// END OF FILE