amazon-chime-sdk-android: Crash: Fatal Exception: java.lang.RuntimeException: Failed to query context

Describe the bug I am seeing these crashes. Looking at the source code seems like it gets triggered when eglQueryContext returns false. However, I don’t have clear steps to reproduce this. Generally happens when there are multiple renderviews triggered on screen.

To Reproduce

No clear steps. Expected behavior A clear and concise description of what you expected to happen.

Logs Fatal Exception: java.lang.RuntimeException: Failed to query context at com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.DefaultEglCore.<init>(DefaultEglCore.kt:55) at com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.DefaultEglCoreFactory.createEglCore(DefaultEglCoreFactory.kt:32) at com.amazonaws.services.chime.sdk.meetings.internal.video.gl.DefaultEglRenderer$init$1.invokeSuspend(DefaultEglRenderer.kt:72) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.os.HandlerThread.run(HandlerThread.java:67)

Screenshots If applicable, add screenshots to help explain your problem.

Test environment Info (please complete the following information):

  • Device: Pixel 3
  • OS: Android 11
  • Version amazon-chime-sdk: 0.9.0
  • Version amazon-chime-sdk-media: 0.9.0

Additional context Add any other context about the problem here.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 3
  • Comments: 24 (12 by maintainers)

Most upvoted comments

I also have the same problem when there are multiple renderviews triggered on screen. Fatal Exception: java.lang.RuntimeException: Failed to query context at com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.DefaultEglCore.(DefaultEglCore.kt:55) at com.amazonaws.services.chime.sdk.meetings.audiovideo.video.gl.DefaultEglCoreFactory.createEglCore(DefaultEglCoreFactory.kt:32) at com.amazonaws.services.chime.sdk.meetings.internal.video.gl.DefaultEglRenderer$init$1.invokeSuspend(DefaultEglRenderer.kt:72) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:56) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.os.HandlerThread.run(HandlerThread.java:67)

Test environment Info Device: AQUOS zero OS: Android 9 Version amazon-chime-sdk: 0.13.1 Version amazon-chime-sdk-media: 0.13.1

I see. So basically you just display the available videos of attendees in the meeting. Instead of creating render views for each attendee upon attendee presence events (join/leave), do you think you can maintain the bound video view collection and only create view when new video added? Something like:

val remoteVideoTiles = mutableMap<Int, VideoRenderView>()

 override fun onVideoTileAdded(tileState: VideoTileState) {
    // Once new video tile available, bind the view and add to the collection
   val renderView = /* Create a new render view */
   audioVideo.bindVideoView(renderView, videoTileState.tileId)
   remoteVideoTiles[videoTileState.tileId] = renderView
}

override fun onVideoTileRemoved(tileState: VideoTileState) {
    // Unbind and clean the collection
    audioVideo.unbindVideoView(videoTileState.tileId)
   remoteVideoTiles.remove(videoTileState.tileId)
}

// Any scenarios you need re-order the video tiles, only operate on remoteVideoTiles