< prev index next >

modules/javafx.media/src/main/native/jfxmedia/jni/JavaPlayerEventDispatcher.cpp

Print this page
rev 10028 : 8156563: JavaFX Ensemble8 media sample hang and crash
Reviewed-by: almatvee, kcr

*** 1,7 **** /* ! * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 108,158 **** LOWLEVELPERF_EXECTIMESTART("CJavaPlayerEventDispatcher::Dispose()"); CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { pEnv->DeleteGlobalRef(m_PlayerInstance); } LOWLEVELPERF_EXECTIMESTOP("CJavaPlayerEventDispatcher::Dispose()"); } void CJavaPlayerEventDispatcher::Warning(int warningCode, const char* warningMessage) { - if (NULL == m_PlayerInstance) - return; - CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { jstring jmessage = NULL; if (warningMessage) { jmessage = pEnv->NewStringUTF(warningMessage); } ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendWarningMethod, (jint)warningCode, jmessage); if (jmessage) { pEnv->DeleteLocalRef(jmessage); } } } bool CJavaPlayerEventDispatcher::SendPlayerMediaErrorEvent(int errorCode) { ! return SendToJava_PlayerMediaErrorEvent(errorCode); } bool CJavaPlayerEventDispatcher::SendPlayerHaltEvent(const char* message, double time) { ! return SendToJava_PlayerHaltEvent(message, time); } bool CJavaPlayerEventDispatcher::SendPlayerStateEvent(int newState, double presentTime) { long newJavaState; ! switch(newState) ! { case CPipeline::Unknown: newJavaState = com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerUnknown; break; case CPipeline::Ready: newJavaState = com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerReady; --- 108,187 ---- LOWLEVELPERF_EXECTIMESTART("CJavaPlayerEventDispatcher::Dispose()"); CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { pEnv->DeleteGlobalRef(m_PlayerInstance); + m_PlayerInstance = NULL; // prevent further calls to this object } LOWLEVELPERF_EXECTIMESTOP("CJavaPlayerEventDispatcher::Dispose()"); } void CJavaPlayerEventDispatcher::Warning(int warningCode, const char* warningMessage) { CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { + jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); + if (localPlayer) { jstring jmessage = NULL; if (warningMessage) { jmessage = pEnv->NewStringUTF(warningMessage); } ! pEnv->CallVoidMethod(localPlayer, m_SendWarningMethod, (jint)warningCode, jmessage); if (jmessage) { pEnv->DeleteLocalRef(jmessage); } + pEnv->DeleteLocalRef(localPlayer); + } } } bool CJavaPlayerEventDispatcher::SendPlayerMediaErrorEvent(int errorCode) { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendPlayerMediaErrorEventMethod, errorCode); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; } bool CJavaPlayerEventDispatcher::SendPlayerHaltEvent(const char* message, double time) { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! jstring jmessage = pEnv->NewStringUTF(message); ! pEnv->CallVoidMethod(localPlayer, m_SendPlayerHaltEventMethod, jmessage, time); ! pEnv->DeleteLocalRef(jmessage); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; } bool CJavaPlayerEventDispatcher::SendPlayerStateEvent(int newState, double presentTime) { long newJavaState; ! switch(newState) { case CPipeline::Unknown: newJavaState = com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerUnknown; break; case CPipeline::Ready: newJavaState = com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerReady;
*** 177,347 **** break; default: return false; } - return SendToJava_PlayerStateEvent(newJavaState, presentTime); - } - - bool CJavaPlayerEventDispatcher::SendNewFrameEvent(CVideoFrame* pVideoFrame) - { - return SendToJava_NewFrameEvent(pVideoFrame); - } - - bool CJavaPlayerEventDispatcher::SendFrameSizeChangedEvent(int width, int height) - { - return SendToJava_FrameSizeChangedEvent(width, height); - } - - bool CJavaPlayerEventDispatcher::SendAudioTrackEvent(CAudioTrack* pTrack) - { - return SendToJava_AudioTrackEvent(pTrack); - } - - bool CJavaPlayerEventDispatcher::SendVideoTrackEvent(CVideoTrack* pTrack) - { - return SendToJava_VideoTrackEvent(pTrack); - } - - bool CJavaPlayerEventDispatcher::SendSubtitleTrackEvent(CSubtitleTrack* pTrack) - { - return SendToJava_SubtitleTrackEvent(pTrack); - } - - bool CJavaPlayerEventDispatcher::SendMarkerEvent(string name, double time) - { - return SendToJava_MarkerEvent(name, time); - } - - bool CJavaPlayerEventDispatcher::SendBufferProgressEvent(double clipDuration, int64_t start, int64_t stop, int64_t position) - { - return SendToJava_BufferProgressEvent(clipDuration, start, stop, position); - } - - bool CJavaPlayerEventDispatcher::SendDurationUpdateEvent(double time) - { - return SendToJava_DurationUpdateEvent(time); - } - - bool CJavaPlayerEventDispatcher::SendAudioSpectrumEvent(double time, double duration) - { - return SendToJava_AudioSpectrumEvent(time, duration); - } - /********************************************************************************* - * SendToJava methods section - **********************************************************************************/ - bool CJavaPlayerEventDispatcher::SendToJava_PlayerMediaErrorEvent(int errorCode) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - pEnv->CallVoidMethod(m_PlayerInstance, m_SendPlayerMediaErrorEventMethod, errorCode); - return !jenv.reportException(); - } - - return false; - } - - bool CJavaPlayerEventDispatcher::SendToJava_PlayerHaltEvent(const char* message, double time) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - jstring jmessage = pEnv->NewStringUTF(message); - pEnv->CallVoidMethod(m_PlayerInstance, m_SendPlayerHaltEventMethod, jmessage, time); - pEnv->DeleteLocalRef(jmessage); - return !jenv.reportException(); - } - - return false; - } - - bool CJavaPlayerEventDispatcher::SendToJava_PlayerStateEvent(long eventID, double presentTime) - { - if (NULL == m_PlayerInstance) - return false; - - switch(eventID) { - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerUnknown: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerReady: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerPlaying: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerPaused: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerStopped: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerFinished: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerStalled: - case com_sun_media_jfxmediaimpl_NativeMediaPlayer_eventPlayerError: - { LOWLEVELPERF_EXECTIMESTOP("gstInitPlatformToSendToJavaPlayerStateEventPaused"); LOWLEVELPERF_EXECTIMESTOP("gstPauseToSendToJavaPlayerStateEventPaused"); LOWLEVELPERF_EXECTIMESTOP("gstStopToSendToJavaPlayerStateEventStopped"); LOWLEVELPERF_EXECTIMESTOP("gstPlayToSendToJavaPlayerStateEventPlaying"); ! // Send an event only if the ID is valid. CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendPlayerStateEventMethod, eventID, presentTime); ! return !jenv.reportException(); ! } ! break; } - default: - break; } ! return false; } ! bool CJavaPlayerEventDispatcher::SendToJava_NewFrameEvent(CVideoFrame* pVideoFrame) { ! LOWLEVELPERF_EXECTIMESTART("CJavaPlayerEventDispatcher::SendToJava_NewFrameEvent()"); bool bSucceeded = false; - if (NULL == m_PlayerInstance) - return false; - CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { // SendNewFrameEvent will create the NativeVideoBuffer wrapper for the java side ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendNewFrameEventMethod, ptr_to_jlong(pVideoFrame)); bSucceeded = !jenv.reportException(); } ! LOWLEVELPERF_EXECTIMESTOP("CJavaPlayerEventDispatcher::SendToJava_NewFrameEvent()"); return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendToJava_FrameSizeChangedEvent(int width, int height) { ! if (NULL == m_PlayerInstance) ! return false; ! CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendFrameSizeChangedEventMethod, (jint)width, (jint)height); ! return !jenv.reportException(); } ! return false; } ! bool CJavaPlayerEventDispatcher::SendToJava_AudioTrackEvent(CAudioTrack* pTrack) { ! if (NULL == m_PlayerInstance) ! return false; ! CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); jstring language = pEnv->NewStringUTF(pTrack->GetLanguage().c_str()); // Translate channel mask bits from native values to Java values. int nativeChannelMask = pTrack->GetChannelMask(); --- 206,285 ---- break; default: return false; } LOWLEVELPERF_EXECTIMESTOP("gstInitPlatformToSendToJavaPlayerStateEventPaused"); LOWLEVELPERF_EXECTIMESTOP("gstPauseToSendToJavaPlayerStateEventPaused"); LOWLEVELPERF_EXECTIMESTOP("gstStopToSendToJavaPlayerStateEventStopped"); LOWLEVELPERF_EXECTIMESTOP("gstPlayToSendToJavaPlayerStateEventPlaying"); ! ! bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendPlayerStateEventMethod, newJavaState, presentTime); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); } } ! return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendNewFrameEvent(CVideoFrame* pVideoFrame) { ! LOWLEVELPERF_EXECTIMESTART("CJavaPlayerEventDispatcher::SendNewFrameEvent()"); bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { + jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); + if (localPlayer) { // SendNewFrameEvent will create the NativeVideoBuffer wrapper for the java side ! pEnv->CallVoidMethod(localPlayer, m_SendNewFrameEventMethod, ptr_to_jlong(pVideoFrame)); ! pEnv->DeleteLocalRef(localPlayer); ! bSucceeded = !jenv.reportException(); } + } ! LOWLEVELPERF_EXECTIMESTOP("CJavaPlayerEventDispatcher::SendNewFrameEvent()"); return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendFrameSizeChangedEvent(int width, int height) { ! bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendFrameSizeChangedEventMethod, (jint)width, (jint)height); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } } ! return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendAudioTrackEvent(CAudioTrack* pTrack) { ! bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { + jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); + if (localPlayer) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); jstring language = pEnv->NewStringUTF(pTrack->GetLanguage().c_str()); // Translate channel mask bits from native values to Java values. int nativeChannelMask = pTrack->GetChannelMask();
*** 359,421 **** if (nativeChannelMask & CAudioTrack::REAR_RIGHT) javaChannelMask |= com_sun_media_jfxmedia_track_AudioTrack_REAR_RIGHT; if (nativeChannelMask & CAudioTrack::REAR_CENTER) javaChannelMask |= com_sun_media_jfxmedia_track_AudioTrack_REAR_CENTER; ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendAudioTrackEventMethod, ! (jboolean)pTrack->isEnabled(), (jlong)pTrack->GetTrackID(), name, pTrack->GetEncoding(), language, ! pTrack->GetNumChannels(), javaChannelMask, pTrack->GetSampleRate()); pEnv->DeleteLocalRef(name); pEnv->DeleteLocalRef(language); ! return !jenv.reportException(); } ! return false; } ! bool CJavaPlayerEventDispatcher::SendToJava_VideoTrackEvent(CVideoTrack* pTrack) { ! if (NULL == m_PlayerInstance) ! return false; ! CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendVideoTrackEventMethod, (jboolean)pTrack->isEnabled(), (jlong)pTrack->GetTrackID(), name, pTrack->GetEncoding(), pTrack->GetWidth(), pTrack->GetHeight(), pTrack->GetFrameRate(), pTrack->HasAlphaChannel()); pEnv->DeleteLocalRef(name); ! return !jenv.reportException(); } ! return false; } ! bool CJavaPlayerEventDispatcher::SendToJava_SubtitleTrackEvent(CSubtitleTrack* pTrack) { ! if (NULL == m_PlayerInstance) ! return false; ! CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); jstring language = pEnv->NewStringUTF(pTrack->GetLanguage().c_str()); ! pEnv->CallVoidMethod(m_PlayerInstance, m_SendSubtitleTrackEventMethod, (jboolean)pTrack->isEnabled(), (jlong)pTrack->GetTrackID(), name, pTrack->GetEncoding(), language); pEnv->DeleteLocalRef(name); pEnv->DeleteLocalRef(language); ! return !jenv.reportException(); } ! return false; } /****************************************************************************************** * Creates any object with any arguments ******************************************************************************************/ --- 297,450 ---- if (nativeChannelMask & CAudioTrack::REAR_RIGHT) javaChannelMask |= com_sun_media_jfxmedia_track_AudioTrack_REAR_RIGHT; if (nativeChannelMask & CAudioTrack::REAR_CENTER) javaChannelMask |= com_sun_media_jfxmedia_track_AudioTrack_REAR_CENTER; ! pEnv->CallVoidMethod(localPlayer, ! m_SendAudioTrackEventMethod, ! (jboolean)pTrack->isEnabled(), ! (jlong)pTrack->GetTrackID(), ! name, ! pTrack->GetEncoding(), ! language, ! pTrack->GetNumChannels(), ! javaChannelMask, ! pTrack->GetSampleRate()); pEnv->DeleteLocalRef(name); pEnv->DeleteLocalRef(language); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } } ! return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendVideoTrackEvent(CVideoTrack* pTrack) { ! bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { + jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); + if (localPlayer) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); ! pEnv->CallVoidMethod(localPlayer, m_SendVideoTrackEventMethod, (jboolean)pTrack->isEnabled(), (jlong)pTrack->GetTrackID(), name, pTrack->GetEncoding(), pTrack->GetWidth(), pTrack->GetHeight(), pTrack->GetFrameRate(), pTrack->HasAlphaChannel()); pEnv->DeleteLocalRef(name); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } } ! return bSucceeded; } ! bool CJavaPlayerEventDispatcher::SendSubtitleTrackEvent(CSubtitleTrack* pTrack) { ! bool bSucceeded = false; CJavaEnvironment jenv(m_PlayerVM); JNIEnv *pEnv = jenv.getEnvironment(); if (pEnv) { + jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); + if (localPlayer) { jstring name = pEnv->NewStringUTF(pTrack->GetName().c_str()); jstring language = pEnv->NewStringUTF(pTrack->GetLanguage().c_str()); ! pEnv->CallVoidMethod(localPlayer, m_SendSubtitleTrackEventMethod, (jboolean)pTrack->isEnabled(), (jlong)pTrack->GetTrackID(), name, pTrack->GetEncoding(), language); pEnv->DeleteLocalRef(name); pEnv->DeleteLocalRef(language); + pEnv->DeleteLocalRef(localPlayer); ! bSucceeded = !jenv.reportException(); ! } } ! return bSucceeded; ! } ! ! bool CJavaPlayerEventDispatcher::SendMarkerEvent(string name, double time) ! { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! jobject jname = pEnv->NewStringUTF(name.c_str()); ! pEnv->CallVoidMethod(localPlayer, m_SendMarkerEventMethod, ! jname, time); ! pEnv->DeleteLocalRef(jname); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; ! } ! ! bool CJavaPlayerEventDispatcher::SendBufferProgressEvent(double clipDuration, int64_t start, int64_t stop, int64_t position) ! { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendBufferProgressEventMethod, clipDuration, start, stop, position); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; ! } ! ! bool CJavaPlayerEventDispatcher::SendDurationUpdateEvent(double time) ! { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendDurationUpdateEventMethod, ! (jdouble)time); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; ! } ! ! bool CJavaPlayerEventDispatcher::SendAudioSpectrumEvent(double time, double duration) ! { ! bool bSucceeded = false; ! CJavaEnvironment jenv(m_PlayerVM); ! JNIEnv *pEnv = jenv.getEnvironment(); ! if (pEnv) { ! jobject localPlayer = pEnv->NewLocalRef(m_PlayerInstance); ! if (localPlayer) { ! pEnv->CallVoidMethod(localPlayer, m_SendAudioSpectrumEventMethod, time, duration); ! pEnv->DeleteLocalRef(localPlayer); ! ! bSucceeded = !jenv.reportException(); ! } ! } ! ! return bSucceeded; } /****************************************************************************************** * Creates any object with any arguments ******************************************************************************************/
*** 510,578 **** env->DeleteLocalRef(durationClass); return result; } - - bool CJavaPlayerEventDispatcher::SendToJava_MarkerEvent(string name, double time) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - jobject jname = pEnv->NewStringUTF(name.c_str()); - pEnv->CallVoidMethod(m_PlayerInstance, m_SendMarkerEventMethod, - jname, time); - pEnv->DeleteLocalRef(jname); - return !jenv.reportException(); - } - - return false; - } - - bool CJavaPlayerEventDispatcher::SendToJava_BufferProgressEvent(double clipDuration, int64_t start, int64_t stop, int64_t position) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - pEnv->CallVoidMethod(m_PlayerInstance, m_SendBufferProgressEventMethod, clipDuration, start, stop, position); - return !jenv.reportException(); - } - - return false; - } - - bool CJavaPlayerEventDispatcher::SendToJava_DurationUpdateEvent(double time) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - pEnv->CallVoidMethod(m_PlayerInstance, m_SendDurationUpdateEventMethod, - (jdouble)time); - return !jenv.reportException(); - } - - return false; - } - - bool CJavaPlayerEventDispatcher::SendToJava_AudioSpectrumEvent(double time, double duration) - { - if (NULL == m_PlayerInstance) - return false; - - CJavaEnvironment jenv(m_PlayerVM); - JNIEnv *pEnv = jenv.getEnvironment(); - if (pEnv) { - pEnv->CallVoidMethod(m_PlayerInstance, m_SendAudioSpectrumEventMethod, time, duration); - return !jenv.reportException(); - } - - return false; - } --- 539,543 ----
< prev index next >