Improve android threading, https://github.com/rustdesk/rustdesk/issues/4118#issuecomment-1515666629
todo: should we add some condition to assure imageReader not be closed while callback is running?
This commit is contained in:
parent
edb5529df3
commit
ae23f0de03
@ -338,8 +338,11 @@ class MainService : Service() {
|
|||||||
).apply {
|
).apply {
|
||||||
setOnImageAvailableListener({ imageReader: ImageReader ->
|
setOnImageAvailableListener({ imageReader: ImageReader ->
|
||||||
try {
|
try {
|
||||||
|
if (!isStart) {
|
||||||
|
return@setOnImageAvailableListener
|
||||||
|
}
|
||||||
imageReader.acquireLatestImage().use { image ->
|
imageReader.acquireLatestImage().use { image ->
|
||||||
if (image == null) return@setOnImageAvailableListener
|
if (image == null || !isStart) return@setOnImageAvailableListener
|
||||||
val planes = image.planes
|
val planes = image.planes
|
||||||
val buffer = planes[0].buffer
|
val buffer = planes[0].buffer
|
||||||
buffer.rewind()
|
buffer.rewind()
|
||||||
@ -390,8 +393,11 @@ class MainService : Service() {
|
|||||||
_isStart = false
|
_isStart = false
|
||||||
// release video
|
// release video
|
||||||
virtualDisplay?.release()
|
virtualDisplay?.release()
|
||||||
surface?.release()
|
|
||||||
imageReader?.close()
|
imageReader?.close()
|
||||||
|
imageReader = null
|
||||||
|
// suface needs to be release after imageReader.close to imageReader access released surface
|
||||||
|
// https://github.com/rustdesk/rustdesk/issues/4118#issuecomment-1515666629
|
||||||
|
surface?.release()
|
||||||
videoEncoder?.let {
|
videoEncoder?.let {
|
||||||
it.signalEndOfInputStream()
|
it.signalEndOfInputStream()
|
||||||
it.stop()
|
it.stop()
|
||||||
@ -402,9 +408,6 @@ class MainService : Service() {
|
|||||||
|
|
||||||
// release audio
|
// release audio
|
||||||
audioRecordStat = false
|
audioRecordStat = false
|
||||||
audioRecorder?.release()
|
|
||||||
audioRecorder = null
|
|
||||||
minBufferSize = 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun destroy() {
|
fun destroy() {
|
||||||
@ -412,8 +415,6 @@ class MainService : Service() {
|
|||||||
_isReady = false
|
_isReady = false
|
||||||
|
|
||||||
stopCapture()
|
stopCapture()
|
||||||
imageReader?.close()
|
|
||||||
imageReader = null
|
|
||||||
|
|
||||||
mediaProjection = null
|
mediaProjection = null
|
||||||
checkMediaPermission()
|
checkMediaPermission()
|
||||||
@ -524,6 +525,10 @@ class MainService : Service() {
|
|||||||
FFI.onAudioFrameUpdate(it)
|
FFI.onAudioFrameUpdate(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// let's release here rather than onDestroy to avoid threading issue
|
||||||
|
audioRecorder?.release()
|
||||||
|
audioRecorder = null
|
||||||
|
minBufferSize = 0
|
||||||
Log.d(logTag, "Exit audio thread")
|
Log.d(logTag, "Exit audio thread")
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user