Skip to content

Commit

Permalink
Fix resume issue
Browse files Browse the repository at this point in the history
  • Loading branch information
firemaples committed Aug 20, 2023
1 parent 4c87c94 commit 09cfed5
Showing 1 changed file with 20 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -233,35 +233,42 @@ object ScreenExtractor {
private suspend fun ImageReader.awaitForBitmap(screenSize: Point): Bitmap? =
suspendCoroutine {
var counter = 0
val resumed = AtomicBoolean(false)
setOnImageAvailableListener({ reader ->
logger.info("onImageAvailable()")
if (resumed.get()){
reader.setOnImageAvailableListener(null, null)
return@setOnImageAvailableListener
}
var image: Image? = null
val resumed = AtomicBoolean(false)
try {
logger.info("onImageAvailable()")
image = reader.acquireLatestImage()
val bitmap = image.decodeBitmap(screenSize)
if (!bitmap.isWholeBlack()) {
reader.setOnImageAvailableListener(null, null)
if (!resumed.getAndSet(true)) {
it.resume(bitmap)
}
if (resumed.getAndSet(true))
return@setOnImageAvailableListener
logger.info("Resume #1")
it.resume(bitmap)
} else {
logger.info("Image is whole black, increase counter: $counter")
if (counter >= Constants.EXTRACT_SCREEN_MAX_RETRY) {
reader.setOnImageAvailableListener(null, null)
if (!resumed.getAndSet(true)) {
it.resume(null)
}
if (resumed.getAndSet(true))
return@setOnImageAvailableListener
logger.info("Resume #2")
it.resume(null)
} else {
counter++
}
}
} catch (e: Throwable) {
logger.warn(t = e)
if (!resumed.getAndSet(true)) {
reader.setOnImageAvailableListener(null, null)
it.resumeWithException(e)
}
logger.warn("Error when acquire image", t = e)
reader.setOnImageAvailableListener(null, null)
if (resumed.getAndSet(true))
return@setOnImageAvailableListener
logger.info("Resume #3")
it.resumeWithException(e)
} finally {
image?.close()
}
Expand Down

0 comments on commit 09cfed5

Please sign in to comment.