override fun didReceiveFrame()

in amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/internal/video/DefaultVideoClientObserver.kt [135:186]


    override fun didReceiveFrame(
        client: VideoClient?,
        frame: Any?,
        profileId: String?,
        displayId: Int,
        pauseType: Int,
        videoId: Int
    ) {
        val pauseState: VideoPauseState = when (pauseType) {
            VIDEO_CLIENT_NO_PAUSE -> VideoPauseState.Unpaused
            VIDEO_CLIENT_REMOTE_PAUSED_BY_USER -> VideoPauseState.PausedByUserRequest
            VIDEO_CLIENT_REMOTE_PAUSED_BY_LOCAL_BAD_NETWORK -> VideoPauseState.PausedForPoorConnection
            else -> VideoPauseState.Unpaused
        }

        val sdkFrame = (frame as? com.xodee.client.video.VideoFrame)?.let {
            val bufferAdapter: VideoFrameBuffer = when (frame.buffer) {
                is com.xodee.client.video.VideoFrameTextureBuffer -> {
                    val buffer = frame.buffer as com.xodee.client.video.VideoFrameTextureBuffer
                    val type = when (buffer.type) {
                        com.xodee.client.video.VideoFrameTextureBuffer.Type.OES -> VideoFrameTextureBuffer.Type.TEXTURE_OES
                        com.xodee.client.video.VideoFrameTextureBuffer.Type.RGB -> VideoFrameTextureBuffer.Type.TEXTURE_2D
                        else -> throw InvalidParameterException("Unsupported texture buffer type")
                    }
                    // Retain this buffer and create a new buffer with same internals that releases the original buffer when released itself
                    buffer.retain()
                    VideoFrameTextureBuffer(buffer.width, buffer.height, buffer.textureId, buffer.transformMatrix, type, Runnable { buffer.release() })
                }
                is com.xodee.client.video.VideoFrameI420Buffer -> {
                    val buffer = frame.buffer as com.xodee.client.video.VideoFrameI420Buffer
                    // Retain this buffer and create a new buffer with same internals that releases the original buffer when released itself
                    buffer.retain()
                    VideoFrameI420Buffer(buffer.width, buffer.height, buffer.dataY, buffer.dataU, buffer.dataV, buffer.strideY, buffer.strideU, buffer.strideV, Runnable { buffer.release() })
                }
                else -> throw InvalidParameterException("Video frame must have non null I420 or texture buffer")
            }
            VideoFrame(frame.timestampNs, bufferAdapter, VideoRotation.from(frame.rotation) ?: VideoRotation.Rotation0)
        }

        notifyVideoTileObserver { observer ->
            observer.onReceiveFrame(
                sdkFrame,
                videoId,
                profileId,
                pauseState
            )
        }

        // Frames passed up have additional ref count added so we need to release when finished
        // to not leak the frame/buffer
        sdkFrame?.release()
    }