-
-
Save deepak140596/df5e43d01132da525abbc56542bf2732 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private class LuminosityAnalyzer : ImageAnalysis.Analyzer { | |
private var lastAnalyzedTimestamp = 0L | |
/** | |
* Helper extension function used to extract a byte array from an | |
* image plane buffer | |
*/ | |
private fun ByteBuffer.toByteArray(): ByteArray { | |
rewind() // Rewind the buffer to zero | |
val data = ByteArray(remaining()) | |
get(data) // Copy the buffer into a byte array | |
return data // Return the byte array | |
} | |
override fun analyze(image: ImageProxy, rotationDegrees: Int) { | |
val currentTimestamp = System.currentTimeMillis() | |
// Calculate the average luma no more often than every second | |
if (currentTimestamp - lastAnalyzedTimestamp >= | |
TimeUnit.SECONDS.toMillis(1)) { | |
// Since format in ImageAnalysis is YUV, image.planes[0] | |
// contains the Y (luminance) plane | |
val buffer = image.planes[0].buffer | |
// Extract image data from callback object | |
val data = buffer.toByteArray() | |
// Convert the data into an array of pixel values | |
val pixels = data.map { it.toInt() and 0xFF } | |
// Compute average luminance for the image | |
val luma = pixels.average() | |
// Log the new luma value | |
Log.d("CameraXApp", "Average luminosity: $luma") | |
// Update timestamp of last analyzed frame | |
lastAnalyzedTimestamp = currentTimestamp | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment