Committed by
GitHub
Noisily log when a VideoRenderer is used without initializing it first (#478)
正在显示
2 个修改的文件
包含
44 行增加
和
1 行删除
| @@ -16,17 +16,45 @@ | @@ -16,17 +16,45 @@ | ||
| 16 | 16 | ||
| 17 | package io.livekit.android.renderer | 17 | package io.livekit.android.renderer |
| 18 | 18 | ||
| 19 | +import android.annotation.SuppressLint | ||
| 19 | import android.content.Context | 20 | import android.content.Context |
| 20 | import android.util.AttributeSet | 21 | import android.util.AttributeSet |
| 22 | +import android.util.Log | ||
| 21 | import android.view.View | 23 | import android.view.View |
| 22 | import io.livekit.android.room.track.video.ViewVisibility | 24 | import io.livekit.android.room.track.video.ViewVisibility |
| 25 | +import io.livekit.android.util.LKLog | ||
| 26 | +import livekit.org.webrtc.EglBase | ||
| 27 | +import livekit.org.webrtc.RendererCommon | ||
| 23 | import livekit.org.webrtc.SurfaceViewRenderer | 28 | import livekit.org.webrtc.SurfaceViewRenderer |
| 29 | +import livekit.org.webrtc.VideoFrame | ||
| 24 | 30 | ||
| 25 | open class SurfaceViewRenderer : SurfaceViewRenderer, ViewVisibility.Notifier { | 31 | open class SurfaceViewRenderer : SurfaceViewRenderer, ViewVisibility.Notifier { |
| 26 | constructor(context: Context) : super(context) | 32 | constructor(context: Context) : super(context) |
| 27 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs) | 33 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs) |
| 28 | 34 | ||
| 29 | override var viewVisibility: ViewVisibility? = null | 35 | override var viewVisibility: ViewVisibility? = null |
| 36 | + private var initialized = false | ||
| 37 | + | ||
| 38 | + override fun init(sharedContext: EglBase.Context?, rendererEvents: RendererCommon.RendererEvents?, configAttributes: IntArray?, drawer: RendererCommon.GlDrawer?) { | ||
| 39 | + if (initialized) { | ||
| 40 | + LKLog.w { "Reinitializing already initialized SurfaceViewRenderer." } | ||
| 41 | + } | ||
| 42 | + initialized = true | ||
| 43 | + super.init(sharedContext, rendererEvents, configAttributes, drawer) | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + override fun release() { | ||
| 47 | + initialized = false | ||
| 48 | + super.release() | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @SuppressLint("LogNotTimber") | ||
| 52 | + override fun onFrame(frame: VideoFrame) { | ||
| 53 | + if (!initialized) { | ||
| 54 | + Log.e("SurfaceViewRenderer", "Received frame when not initialized! You must call Room.initVideoRenderer(view) before using this view!") | ||
| 55 | + } | ||
| 56 | + super.onFrame(frame) | ||
| 57 | + } | ||
| 30 | 58 | ||
| 31 | override fun onVisibilityChanged(changedView: View, visibility: Int) { | 59 | override fun onVisibilityChanged(changedView: View, visibility: Int) { |
| 32 | super.onVisibilityChanged(changedView, visibility) | 60 | super.onVisibilityChanged(changedView, visibility) |
| @@ -9,16 +9,19 @@ | @@ -9,16 +9,19 @@ | ||
| 9 | */ | 9 | */ |
| 10 | package io.livekit.android.renderer | 10 | package io.livekit.android.renderer |
| 11 | 11 | ||
| 12 | +import android.annotation.SuppressLint | ||
| 12 | import android.content.Context | 13 | import android.content.Context |
| 13 | import android.content.res.Resources.NotFoundException | 14 | import android.content.res.Resources.NotFoundException |
| 14 | import android.graphics.Matrix | 15 | import android.graphics.Matrix |
| 15 | import android.graphics.SurfaceTexture | 16 | import android.graphics.SurfaceTexture |
| 16 | import android.os.Looper | 17 | import android.os.Looper |
| 17 | import android.util.AttributeSet | 18 | import android.util.AttributeSet |
| 19 | +import android.util.Log | ||
| 18 | import android.view.SurfaceHolder | 20 | import android.view.SurfaceHolder |
| 19 | import android.view.TextureView | 21 | import android.view.TextureView |
| 20 | import android.view.View | 22 | import android.view.View |
| 21 | import io.livekit.android.room.track.video.ViewVisibility | 23 | import io.livekit.android.room.track.video.ViewVisibility |
| 24 | +import io.livekit.android.util.LKLog | ||
| 22 | import livekit.org.webrtc.* | 25 | import livekit.org.webrtc.* |
| 23 | import livekit.org.webrtc.RendererCommon.* | 26 | import livekit.org.webrtc.RendererCommon.* |
| 24 | import java.util.concurrent.CountDownLatch | 27 | import java.util.concurrent.CountDownLatch |
| @@ -47,6 +50,7 @@ open class TextureViewRenderer : | @@ -47,6 +50,7 @@ open class TextureViewRenderer : | ||
| 47 | private var enableFixedSize = false | 50 | private var enableFixedSize = false |
| 48 | private var surfaceWidth = 0 | 51 | private var surfaceWidth = 0 |
| 49 | private var surfaceHeight = 0 | 52 | private var surfaceHeight = 0 |
| 53 | + private var initialized = false | ||
| 50 | 54 | ||
| 51 | /** | 55 | /** |
| 52 | * Standard View constructor. In order to render something, you must first call init(). | 56 | * Standard View constructor. In order to render something, you must first call init(). |
| @@ -85,6 +89,12 @@ open class TextureViewRenderer : | @@ -85,6 +89,12 @@ open class TextureViewRenderer : | ||
| 85 | drawer: GlDrawer? = GlRectDrawer(), | 89 | drawer: GlDrawer? = GlRectDrawer(), |
| 86 | ) { | 90 | ) { |
| 87 | ThreadUtils.checkIsOnMainThread() | 91 | ThreadUtils.checkIsOnMainThread() |
| 92 | + | ||
| 93 | + if (initialized) { | ||
| 94 | + LKLog.w { "Reinitializing already initialized TextureViewRenderer." } | ||
| 95 | + } | ||
| 96 | + initialized = true | ||
| 97 | + | ||
| 88 | this.rendererEvents = rendererEvents | 98 | this.rendererEvents = rendererEvents |
| 89 | rotatedFrameWidth = 0 | 99 | rotatedFrameWidth = 0 |
| 90 | rotatedFrameHeight = 0 | 100 | rotatedFrameHeight = 0 |
| @@ -98,6 +108,7 @@ open class TextureViewRenderer : | @@ -98,6 +108,7 @@ open class TextureViewRenderer : | ||
| 98 | * don't call this function, the GL resources might leak. | 108 | * don't call this function, the GL resources might leak. |
| 99 | */ | 109 | */ |
| 100 | fun release() { | 110 | fun release() { |
| 111 | + initialized = false | ||
| 101 | eglRenderer.release() | 112 | eglRenderer.release() |
| 102 | } | 113 | } |
| 103 | 114 | ||
| @@ -192,7 +203,11 @@ open class TextureViewRenderer : | @@ -192,7 +203,11 @@ open class TextureViewRenderer : | ||
| 192 | } | 203 | } |
| 193 | 204 | ||
| 194 | // VideoSink interface. | 205 | // VideoSink interface. |
| 206 | + @SuppressLint("LogNotTimber") | ||
| 195 | override fun onFrame(frame: VideoFrame) { | 207 | override fun onFrame(frame: VideoFrame) { |
| 208 | + if (!initialized) { | ||
| 209 | + Log.e("TextureViewRenderer", "Received frame when not initialized! You must call Room.initVideoRenderer(view) before using this view!") | ||
| 210 | + } | ||
| 196 | eglRenderer.onFrame(frame) | 211 | eglRenderer.onFrame(frame) |
| 197 | } | 212 | } |
| 198 | 213 | ||
| @@ -360,7 +375,7 @@ open class TextureViewRenderer : | @@ -360,7 +375,7 @@ open class TextureViewRenderer : | ||
| 360 | } | 375 | } |
| 361 | 376 | ||
| 362 | companion object { | 377 | companion object { |
| 363 | - private const val TAG = "SurfaceViewRenderer" | 378 | + private const val TAG = "TextureViewRenderer" |
| 364 | } | 379 | } |
| 365 | 380 | ||
| 366 | override var viewVisibility: ViewVisibility? = null | 381 | override var viewVisibility: ViewVisibility? = null |
-
请 注册 或 登录 后发表评论