Coverage Summary for Class: MediaFormatExtensionsKt (com.vsevolodganin.clicktrack.utils.media)

Class Class, % Method, % Branch, % Line, % Instruction, %
MediaFormatExtensionsKt 0% (0/1) 0% (0/6) 0% (0/11) 0% (0/15) 0% (0/60)


 package com.vsevolodganin.clicktrack.utils.media
 
 import android.media.AudioFormat
 import android.media.MediaFormat
 import android.os.Build
 
 fun MediaFormat.pcmEncoding(): Int {
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
         getOptional(MediaFormat.KEY_PCM_ENCODING, MediaFormat::getInteger) ?: AudioFormat.ENCODING_PCM_16BIT
     } else {
         AudioFormat.ENCODING_PCM_16BIT
     }
 }
 
 fun MediaFormat.channelCount(): Int {
     return getInteger(MediaFormat.KEY_CHANNEL_COUNT)
 }
 
 fun MediaFormat.sampleRate(): Int {
     return getInteger(MediaFormat.KEY_SAMPLE_RATE)
 }
 
 fun MediaFormat.bytesPerSample(): Int {
     return when (val pcmEncoding = pcmEncoding()) {
         AudioFormat.ENCODING_PCM_8BIT -> 1
         AudioFormat.ENCODING_PCM_16BIT -> 2
         AudioFormat.ENCODING_PCM_24BIT_PACKED -> 3
         AudioFormat.ENCODING_PCM_32BIT,
         AudioFormat.ENCODING_PCM_FLOAT,
         -> 4
         else -> throw IllegalArgumentException("Bad audio format $pcmEncoding")
     }
 }
 
 fun MediaFormat.bytesPerSecond(): Int {
     return sampleRate() * bytesPerSample() * channelCount()
 }
 
 private fun <T> MediaFormat.getOptional(key: String, getter: MediaFormat.(String) -> T): T? {
     return if (containsKey(key)) {
         getter.invoke(this, key)
     } else {
         null
     }
 }