diff options
author | bodamnam <bodamnam@google.com> | 2022-11-28 01:26:07 +0000 |
---|---|---|
committer | Bodam Nam <bodamnam@google.com> | 2022-11-29 04:54:04 +0000 |
commit | 138e273f46181d5f0c6c73292548a579a0300ba9 (patch) | |
tree | 3a6dc22edded0cd41a3c8dabc1481e7e98e90985 /service/src/com | |
parent | e14a3ae20a2aa923ca54abbcc82276528e90a313 (diff) | |
download | ImsMedia-138e273f46181d5f0c6c73292548a579a0300ba9.tar.gz |
Fix jni interface to use session Id in listener
The current audio session response from ImsMedia native is not reached to the listener in java when the multiple sessions are created with same media type. This CL fixes it by using the session Id as a key to distinguish the sessions in listener container.
Bug: 260520127
Test: Voice multi session call, Video/Rtt call test with device, atest
ImsMediaNativeTests, ImsMediaJavaUnitTests
Change-Id: Ied1b4858c7ec145e65479e9f8192b51514628732
Diffstat (limited to 'service/src/com')
17 files changed, 92 insertions, 101 deletions
diff --git a/service/src/com/android/telephony/imsmedia/AudioListener.java b/service/src/com/android/telephony/imsmedia/AudioListener.java index f0d40672..81973c72 100644 --- a/service/src/com/android/telephony/imsmedia/AudioListener.java +++ b/service/src/com/android/telephony/imsmedia/AudioListener.java @@ -32,6 +32,7 @@ public class AudioListener implements JNIImsMediaListener { private long mNativeObject; AudioListener(final Handler handler) { + Log.d(TAG, "AudioListener() -" + AudioListener.this); mHandler = handler; } @@ -62,7 +63,7 @@ public class AudioListener implements JNIImsMediaListener { @Override public void onMessage(final Parcel parcel) { final int event = parcel.readInt(); - Log.d(TAG, "onMessage() event=" + event); + Log.d(TAG, "onMessage() -" + AudioListener.this + ", event=" + event); switch (event) { case AudioSession.EVENT_OPEN_SESSION_SUCCESS: final int sessionId = parcel.readInt(); diff --git a/service/src/com/android/telephony/imsmedia/AudioService.java b/service/src/com/android/telephony/imsmedia/AudioService.java index 15ed50bc..6f913c1c 100644 --- a/service/src/com/android/telephony/imsmedia/AudioService.java +++ b/service/src/com/android/telephony/imsmedia/AudioService.java @@ -43,7 +43,6 @@ public class AudioService { /** Sets JNI listener to get JNI callback from libimsmediajni library*/ public void setListener(final AudioListener listener) { mListener = listener; - JNIImsMediaService.setListener(mNativeObject, mListener); } /** @@ -76,9 +75,12 @@ public class AudioService { * RTP packets and RtpConfig to create session. */ public void openSession(final int sessionId, final OpenSessionParams sessionParams) { - if (sessionParams == null) return; + if (mNativeObject == 0 || sessionParams == null) { + return; + } + JNIImsMediaService.setListener(sessionId, mListener); Log.d(LOG_TAG, "openSession: sessionId = " + sessionId - + "," + sessionParams.getRtpConfig()); + + "," + sessionParams.getRtpConfig()); Parcel parcel = Parcel.obtain(); parcel.writeInt(AudioSession.CMD_OPEN_SESSION); final int socketFdRtp = sessionParams.getRtpFd().detachFd(); diff --git a/service/src/com/android/telephony/imsmedia/AudioSession.java b/service/src/com/android/telephony/imsmedia/AudioSession.java index 59d23fe3..2fc668e9 100644 --- a/service/src/com/android/telephony/imsmedia/AudioSession.java +++ b/service/src/com/android/telephony/imsmedia/AudioSession.java @@ -238,7 +238,7 @@ public final class AudioSession extends IImsAudioSession.Stub implements IMediaS @Override public void handleMessage (Message msg) { - Log.d(TAG, "handleMessage: " + msg.what); + Log.d(TAG, "handleMessage() -" + AudioSessionHandler.this + ", " + msg.what); switch(msg.what) { case CMD_OPEN_SESSION: handleOpenSession((OpenSessionParams)msg.obj); @@ -334,7 +334,6 @@ public final class AudioSession extends IImsAudioSession.Stub implements IMediaS if (isAudioOffload()) { mOffloadService.closeSession(mSessionId); } else { - Log.d(TAG, "handleCloseSession else"); mAudioService.closeSession(mSessionId); } } diff --git a/service/src/com/android/telephony/imsmedia/ImsMediaController.java b/service/src/com/android/telephony/imsmedia/ImsMediaController.java index 6b43999a..fb7fe810 100644 --- a/service/src/com/android/telephony/imsmedia/ImsMediaController.java +++ b/service/src/com/android/telephony/imsmedia/ImsMediaController.java @@ -154,6 +154,7 @@ public class ImsMediaController extends Service { mImsMediaBinder.closeSession((IBinder) mSessions.valueAt(0)); mSessions.removeAt(0); } + JNIImsMediaService.clearListener(); mSessions.clear(); } } catch (Exception e) { diff --git a/service/src/com/android/telephony/imsmedia/JNIImsMediaService.java b/service/src/com/android/telephony/imsmedia/JNIImsMediaService.java index 6bbbbb02..ca88b021 100644 --- a/service/src/com/android/telephony/imsmedia/JNIImsMediaService.java +++ b/service/src/com/android/telephony/imsmedia/JNIImsMediaService.java @@ -21,6 +21,8 @@ import android.os.Parcel; import android.util.Log; import android.view.Surface; +import androidx.annotation.VisibleForTesting; + import java.util.Hashtable; /** JNI interface class to send message to libimsmediajni */ @@ -30,8 +32,8 @@ public class JNIImsMediaService { private final Object mLock = new Object(); /** for media service based on type ex. audio, video, rtt */ - private static Hashtable<Long, JNIImsMediaListener> sListeners - = new Hashtable<Long, JNIImsMediaListener>(); + private static Hashtable<Integer, JNIImsMediaListener> sListeners = + new Hashtable<Integer, JNIImsMediaListener>(); /** * Gets instance object of BaseManager with the corresponding media type @@ -45,29 +47,29 @@ public class JNIImsMediaService { * Send message to libimsmediajni to libimsmedia library to operate with corresponding * arguments * - * @param nativeObj An unique object identifier of BaseManager to operate + * @param nativeObject An unique object identifier of BaseManager to operate * @param sessionId An unique session identifier * @param baData A parameter to operate session */ - public static native void sendMessage(long nativeObj, int sessionId, byte[] baData); + public static native void sendMessage(long nativeObject, int sessionId, byte[] baData); /** * Set preview surface to libimsmediajni and it delivers libimsmedia * - * @param nativeObj An unique object identifier of BaseManager to operate + * @param nativeObject An unique object identifier of BaseManager to operate * @param sessionId An unique session identifier * @param surface A preview surface */ - public static native void setPreviewSurface(long nativeObj, int sessionId, Surface surface); + public static native void setPreviewSurface(long nativeObject, int sessionId, Surface surface); /** * Set display surface to libimsmediajni and it delivers libimsmedia * - * @param nativeObj An unique object identifier of BaseManager to operate + * @param nativeObject An unique object identifier of BaseManager to operate * @param sessionId An unique session identifier * @param surface A display surface */ - public static native void setDisplaySurface(long nativeObj, int sessionId, Surface surface); + public static native void setDisplaySurface(long nativeObject, int sessionId, Surface surface); /** * Generates SPROP list for the given set of video configurations. @@ -108,57 +110,67 @@ public class JNIImsMediaService { /** * Sets listener to get callback from libimsmediajni * - * @param nativeObj An unique object identifier of BaseManager to use as a key to - * acquire a paired listener + * @param sessionId An unique object identifier the session to use as a key to acquire a paired + * listener * @param listener A listener to set for getting messages */ - public static void setListener(final long nativeObj, final JNIImsMediaListener listener) { - Log.d(TAG, "setListener"); - if (nativeObj == 0 || listener == null) { + public static void setListener(final int sessionId, final JNIImsMediaListener listener) { + Log.d(TAG, "setListener() - sessionId=" + sessionId); + if (listener == null) { + Log.e(TAG, "setListener() - null listener"); return; } - Long key = Long.valueOf(nativeObj); synchronized (sListeners) { - sListeners.put(key, listener); + sListeners.put(sessionId, listener); } } /** * Gets a listener with the key to match * - * @param nativeObj An unique key identifier to get the paired listener + * @param sessionId An unique key identifier to get the paired listener * @return A JNIImsMediaListener listener */ - public static JNIImsMediaListener getListener(final long nativeObj) { - Log.d(TAG, "getListener"); - if (nativeObj == 0) { - return null; - } - Long key = Long.valueOf(nativeObj); + public static JNIImsMediaListener getListener(final int sessionId) { JNIImsMediaListener listener = null; synchronized (sListeners) { - listener = sListeners.get(key); + listener = sListeners.get(sessionId); } return listener; } /** + * Clears listener container + */ + public static void clearListener() { + synchronized (sListeners) { + sListeners.clear(); + } + } + + @VisibleForTesting + public static int getListenerSize() { + return sListeners.size(); + } + + /** * Sends callback parcel message from libimsmediajni to java * - * @param nativeObj An unique key idenfier to find corresponding listener object to send message + * @param sessionId An unique key idenfier to find corresponding listener object to send message * @param baData byte array form of data to send * @return 1 if it is success to send data, -1 when it fails */ - public static int sendData2Java(final long nativeObj, final byte[] baData) { - Log.d(TAG, "sendData2Java"); - JNIImsMediaListener listener = getListener(nativeObj); - + public static int sendData2Java(final int sessionId, final byte[] baData) { + Log.d(TAG, "sendData2Java() - sessionId=" + sessionId); + JNIImsMediaListener listener = getListener(sessionId); if (listener == null) { - Log.e(TAG, "No listener :: nativeObject=" + nativeObj); + Log.e(TAG, "No listener :: sessionId=" + sessionId); + return -1; + } + if (baData == null) { return -1; } - // retrieve parcel object from pool Parcel parcel = Parcel.obtain(); parcel.unmarshall(baData, 0, baData.length); diff --git a/service/src/com/android/telephony/imsmedia/TextListener.java b/service/src/com/android/telephony/imsmedia/TextListener.java index c0182c4c..f7018962 100644 --- a/service/src/com/android/telephony/imsmedia/TextListener.java +++ b/service/src/com/android/telephony/imsmedia/TextListener.java @@ -31,6 +31,7 @@ public class TextListener implements JNIImsMediaListener { private long mNativeObject; TextListener(final Handler handler) { + Log.d(TAG, "TextListener() -" + TextListener.this); mHandler = handler; } @@ -61,7 +62,7 @@ public class TextListener implements JNIImsMediaListener { @Override public void onMessage(final Parcel parcel) { final int event = parcel.readInt(); - Log.d(TAG, "onMessage=" + event); + Log.d(TAG, "onMessage() -" + TextListener.this + ", event=" + event); switch (event) { case TextSession.EVENT_OPEN_SESSION_SUCCESS: final int sessionId = parcel.readInt(); diff --git a/service/src/com/android/telephony/imsmedia/TextService.java b/service/src/com/android/telephony/imsmedia/TextService.java index 33bd33f7..858c5c50 100644 --- a/service/src/com/android/telephony/imsmedia/TextService.java +++ b/service/src/com/android/telephony/imsmedia/TextService.java @@ -43,7 +43,6 @@ public class TextService { /** Sets JNI listener to get JNI callback from libimsmediajni library */ public void setListener(final TextListener listener) { mListener = listener; - JNIImsMediaService.setListener(mNativeObject, mListener); } /** @@ -75,9 +74,10 @@ public class TextService { * packets and RtpConfig to create session. */ public void openSession(final int sessionId, final OpenSessionParams sessionParams) { - if (sessionParams == null) { + if (mNativeObject == 0 || sessionParams == null) { return; } + JNIImsMediaService.setListener(sessionId, mListener); Log.d(LOG_TAG, "openSession: sessionId = " + sessionId + "," + sessionParams.getRtpConfig()); Parcel parcel = Parcel.obtain(); diff --git a/service/src/com/android/telephony/imsmedia/TextSession.java b/service/src/com/android/telephony/imsmedia/TextSession.java index 8accf840..15d600b1 100644 --- a/service/src/com/android/telephony/imsmedia/TextSession.java +++ b/service/src/com/android/telephony/imsmedia/TextSession.java @@ -155,7 +155,7 @@ public final class TextSession extends IImsTextSession.Stub implements IMediaSes @Override public void handleMessage(Message msg) { - Log.d(TAG, "handleMessage: " + msg.what); + Log.d(TAG, "handleMessage() -" + TextSessionHandler.this + ", " + msg.what); switch (msg.what) { case CMD_OPEN_SESSION: handleOpenSession((OpenSessionParams) msg.obj); diff --git a/service/src/com/android/telephony/imsmedia/VideoListener.java b/service/src/com/android/telephony/imsmedia/VideoListener.java index 1fe2e638..4c8a7f8d 100644 --- a/service/src/com/android/telephony/imsmedia/VideoListener.java +++ b/service/src/com/android/telephony/imsmedia/VideoListener.java @@ -31,6 +31,7 @@ public class VideoListener implements JNIImsMediaListener { private long mNativeObject; VideoListener(final Handler handler) { + Log.d(TAG, "VideoListener() -" + VideoListener.this); mHandler = handler; } @@ -61,7 +62,7 @@ public class VideoListener implements JNIImsMediaListener { @Override public void onMessage(final Parcel parcel) { final int event = parcel.readInt(); - Log.d(TAG, "onMessage() event=" + event); + Log.d(TAG, "onMessage() -" + VideoListener.this + ", event=" + event); switch (event) { case VideoSession.EVENT_OPEN_SESSION_SUCCESS: final int sessionId = parcel.readInt(); diff --git a/service/src/com/android/telephony/imsmedia/VideoService.java b/service/src/com/android/telephony/imsmedia/VideoService.java index 661f5aa9..2b6fd6c3 100644 --- a/service/src/com/android/telephony/imsmedia/VideoService.java +++ b/service/src/com/android/telephony/imsmedia/VideoService.java @@ -43,7 +43,6 @@ public class VideoService { /** Sets JNI listener to get JNI callback from libimsmediajni library*/ public void setListener(final VideoListener listener) { mListener = listener; - JNIImsMediaService.setListener(mNativeObject, mListener); } /** @@ -76,9 +75,10 @@ public class VideoService { * RTP packets and RtpConfig to create session. */ public void openSession(final int sessionId, final OpenSessionParams sessionParams) { - if (sessionParams == null) { + if (mNativeObject == 0 || sessionParams == null) { return; } + JNIImsMediaService.setListener(sessionId, mListener); Log.d(LOG_TAG, "openSession: sessionId = " + sessionId + "," + sessionParams.getRtpConfig()); Parcel parcel = Parcel.obtain(); diff --git a/service/src/com/android/telephony/imsmedia/VideoSession.java b/service/src/com/android/telephony/imsmedia/VideoSession.java index 998f080b..4450e215 100644 --- a/service/src/com/android/telephony/imsmedia/VideoSession.java +++ b/service/src/com/android/telephony/imsmedia/VideoSession.java @@ -185,7 +185,7 @@ public final class VideoSession extends IImsVideoSession.Stub implements IMediaS @Override public void handleMessage(Message msg) { - Log.d(TAG, "handleMessage: " + msg.what); + Log.d(TAG, "handleMessage() -" + VideoSessionHandler.this + ", " + msg.what); switch(msg.what) { case CMD_OPEN_SESSION: handleOpenSession((OpenSessionParams) msg.obj); diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/BaseManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/BaseManager.cpp index 551e1b82..b7ea6617 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/BaseManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/BaseManager.cpp @@ -17,8 +17,6 @@ #include <BaseManager.h> #include <ImsMediaTrace.h> -std::function<int(long, const android::Parcel&)> BaseManager::mCallback; - BaseManager::BaseManager() { mCallback = NULL; @@ -30,16 +28,16 @@ void BaseManager::setCallback(CBManager pfnCallback) { if (mCallback == NULL) { - IMLOGD0("[setCallback]"); + IMLOGI0("[setCallback]"); mCallback = std::bind(pfnCallback, std::placeholders::_1, std::placeholders::_2); } } -int BaseManager::sendResponse(long obj, const android::Parcel& parcel) +int BaseManager::sendResponse(int sessionId, const android::Parcel& parcel) { if (mCallback != NULL) { - return mCallback(obj, parcel); + return mCallback(sessionId, parcel); } return -1; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp index 0c440ac1..96f3ca5a 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/audio/AudioManager.cpp @@ -423,8 +423,7 @@ void AudioManager::ResponseHandler::processEvent( // fail reason parcel.writeInt32(static_cast<int>(paramA)); } - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); break; case kAudioModifySessionResponse: // fall through case kAudioAddConfigResponse: // fall through @@ -436,9 +435,7 @@ void AudioManager::ResponseHandler::processEvent( if (config != NULL) { config->writeToParcel(&parcel); - - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); delete config; } } @@ -450,8 +447,7 @@ void AudioManager::ResponseHandler::processEvent( if (config != NULL) { config->writeToParcel(&parcel); - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); delete config; } } @@ -462,20 +458,17 @@ void AudioManager::ResponseHandler::processEvent( case kAudioMediaInactivityInd: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); // type - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); break; case kAudioPacketLossInd: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); // loss rate - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); break; case kAudioJitterInd: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); // jitter - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); break; case kAudioTriggerAnbrQueryInd: case kAudioDtmfReceivedInd: @@ -488,9 +481,7 @@ void AudioManager::ResponseHandler::processEvent( if (quality != NULL) { quality->writeToParcel(&parcel); - - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); delete quality; } } @@ -498,8 +489,7 @@ void AudioManager::ResponseHandler::processEvent( case kAudioSessionClosed: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(sessionId)); - AudioManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(AudioManager::getInstance()), parcel); + AudioManager::getInstance()->sendResponse(sessionId, parcel); break; default: break; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/BaseManager.h b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/BaseManager.h index e732cd11..7ddb0a06 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/BaseManager.h +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/include/BaseManager.h @@ -20,7 +20,7 @@ #include <binder/Parcel.h> #include <functional> -typedef int (*CBManager)(long nativeObj, const android::Parcel& parcel); +typedef int (*CBManager)(int sessionId, const android::Parcel& parcel); class BaseManager { @@ -46,16 +46,16 @@ public: /** * @brief Send response message to assigend callback method * - * @param obj The object of the manager instance. + * @param sessionId The unique identification of the session * @param parcel The parcel object contains event message and parameter * @return int Returns -1 when it is fail invoke callback function. Returns 1 when it is * success. */ - virtual int sendResponse(long obj, const android::Parcel& parcel); + virtual int sendResponse(int sessionId, const android::Parcel& parcel); protected: virtual int getState(int sessionId) = 0; - static std::function<int(long, const android::Parcel&)> mCallback; + std::function<int(int, const android::Parcel&)> mCallback; }; #endif
\ No newline at end of file diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp index f4a72969..c8bddcdc 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/text/TextManager.cpp @@ -320,8 +320,7 @@ void TextManager::ResponseHandler::processEvent( parcel.writeInt32(static_cast<int>(paramA)); } - TextManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(TextManager::getInstance()), parcel); + TextManager::getInstance()->sendResponse(sessionId, parcel); break; case kTextModifySessionResponse: // fall through { @@ -332,8 +331,7 @@ void TextManager::ResponseHandler::processEvent( if (config != NULL) { config->writeToParcel(&parcel); - TextManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(TextManager::getInstance()), parcel); + TextManager::getInstance()->sendResponse(sessionId, parcel); delete config; } } @@ -342,8 +340,7 @@ void TextManager::ResponseHandler::processEvent( parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); // type parcel.writeInt32(static_cast<int>(paramB)); // duration - TextManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(TextManager::getInstance()), parcel); + TextManager::getInstance()->sendResponse(sessionId, parcel); break; case kTextRttReceived: { @@ -354,8 +351,7 @@ void TextManager::ResponseHandler::processEvent( { String16 rttText(*text); parcel.writeString16(rttText); - TextManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(TextManager::getInstance()), parcel); + TextManager::getInstance()->sendResponse(sessionId, parcel); delete text; } } @@ -363,8 +359,7 @@ void TextManager::ResponseHandler::processEvent( case kTextSessionClosed: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(sessionId)); - TextManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(TextManager::getInstance()), parcel); + TextManager::getInstance()->sendResponse(sessionId, parcel); break; default: break; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp index f48f0c49..297aa89d 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/core/video/VideoManager.cpp @@ -377,8 +377,7 @@ void VideoManager::ResponseHandler::processEvent( parcel.writeInt32(static_cast<int>(paramA)); } - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoModifySessionResponse: // fall through { @@ -389,23 +388,20 @@ void VideoManager::ResponseHandler::processEvent( if (config != NULL) { config->writeToParcel(&parcel); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); delete config; } } break; case kVideoFirstMediaPacketInd: parcel.writeInt32(event); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoPeerDimensionChanged: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); parcel.writeInt32(static_cast<int>(paramB)); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoRtpHeaderExtensionInd: // TODO : add implementation @@ -414,26 +410,22 @@ void VideoManager::ResponseHandler::processEvent( parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); // type parcel.writeInt32(static_cast<int>(paramB)); // duration - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoPacketLossInd: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(paramA)); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoDataUsageInd: parcel.writeInt32(event); parcel.writeInt64(static_cast<int>(paramA)); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; case kVideoSessionClosed: parcel.writeInt32(event); parcel.writeInt32(static_cast<int>(sessionId)); - VideoManager::getInstance()->sendResponse( - reinterpret_cast<uint64_t>(VideoManager::getInstance()), parcel); + VideoManager::getInstance()->sendResponse(sessionId, parcel); break; default: break; diff --git a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/jni/libimsmediajni.cpp b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/jni/libimsmediajni.cpp index 8f20ed78..a80b48f4 100644 --- a/service/src/com/android/telephony/imsmedia/lib/libimsmedia/jni/libimsmediajni.cpp +++ b/service/src/com/android/telephony/imsmedia/lib/libimsmedia/jni/libimsmediajni.cpp @@ -58,10 +58,9 @@ JNIEnv* GetJNIEnv() return env; } -static int SendData2Java(long nNativeObject, const android::Parcel& objParcel) +static int SendData2Java(int sessionId, const android::Parcel& objParcel) { JNIEnv* env; - jlong jNativeObject = nNativeObject; if ((gClass_JNIImsMediaService == NULL) || (gMethod_sendData2Java == NULL)) { @@ -85,7 +84,7 @@ static int SendData2Java(long nNativeObject, const android::Parcel& objParcel) memcpy(pBuffer, objParcel.data(), objParcel.dataSize()); env->ReleaseByteArrayElements(baData, pBuffer, 0); env->CallStaticIntMethod( - gClass_JNIImsMediaService, gMethod_sendData2Java, jNativeObject, baData); + gClass_JNIImsMediaService, gMethod_sendData2Java, sessionId, baData); } env->DeleteLocalRef(baData); @@ -223,7 +222,7 @@ jint ImsMediaServiceJni_OnLoad(JavaVM* vm, JNIEnv* env) } gMethod_sendData2Java = - env->GetStaticMethodID(gClass_JNIImsMediaService, "sendData2Java", "(J[B)I"); + env->GetStaticMethodID(gClass_JNIImsMediaService, "sendData2Java", "(I[B)I"); if (gMethod_sendData2Java == NULL) { |