Moved MediaMuxer class

hh
Laurent 6 years ago
parent cf3a8b2f16
commit fb56773f64
  1. 56
      app/src/main/java/net/pokeranalytics/android/util/video/MMediaMuxer.kt

@ -1,4 +1,4 @@
package net.pokeranalytics.android.model.handhistory package net.pokeranalytics.android.util.video
import android.app.Activity import android.app.Activity
import android.app.ProgressDialog import android.app.ProgressDialog
@ -122,18 +122,26 @@ class MMediaMuxer {
private fun bufferEncoder() { private fun bufferEncoder() {
val runnable = Runnable { val runnable = Runnable {
try { try {
Logd("PrepareEncoder start") Logd(
"PrepareEncoder start"
)
PrepareEncoder() PrepareEncoder()
Logd("PrepareEncoder end") Logd(
"PrepareEncoder end"
)
} catch (e: IOException) { } catch (e: IOException) {
Loge(e.message) Loge(
e.message
)
} }
try { try {
while (mRunning) { while (mRunning) {
Encode() Encode()
} }
} finally { } finally {
Logd("release") Logd(
"release"
)
Release() Release()
HideProgressBar() HideProgressBar()
bitFirst = null bitFirst = null
@ -153,14 +161,19 @@ class MMediaMuxer {
@Throws(IOException::class) @Throws(IOException::class)
private fun PrepareEncoder() { private fun PrepareEncoder() {
val codecInfo = val codecInfo =
selectCodec(MIME_TYPE) selectCodec(
MIME_TYPE
)
if (codecInfo == null) { if (codecInfo == null) {
Loge("Unable to find an appropriate codec for $MIME_TYPE") Loge("Unable to find an appropriate codec for $MIME_TYPE")
} }
Logd("found codec: " + codecInfo!!.name) Logd("found codec: " + codecInfo!!.name)
val colorFormat: Int val colorFormat: Int
colorFormat = try { colorFormat = try {
selectColorFormat(codecInfo, MIME_TYPE) selectColorFormat(
codecInfo,
MIME_TYPE
)
} catch (e: Exception) { } catch (e: Exception) {
CodecCapabilities.COLOR_FormatYUV420SemiPlanar CodecCapabilities.COLOR_FormatYUV420SemiPlanar
} }
@ -170,8 +183,12 @@ class MMediaMuxer {
_width, _width,
_height _height
) )
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE) mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE,
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE) BIT_RATE
)
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE,
FRAME_RATE
)
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat) mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat)
mediaFormat.setInteger( mediaFormat.setInteger(
MediaFormat.KEY_I_FRAME_INTERVAL, MediaFormat.KEY_I_FRAME_INTERVAL,
@ -203,7 +220,9 @@ class MMediaMuxer {
val TIMEOUT_USEC: Long = 5000 val TIMEOUT_USEC: Long = 5000
val inputBufIndex = mediaCodec!!.dequeueInputBuffer(TIMEOUT_USEC) val inputBufIndex = mediaCodec!!.dequeueInputBuffer(TIMEOUT_USEC)
val ptsUsec = val ptsUsec =
computePresentationTime(generateIndex.toLong(), FRAME_RATE) computePresentationTime(generateIndex.toLong(),
FRAME_RATE
)
if (inputBufIndex >= 0) { if (inputBufIndex >= 0) {
val input = bitFirst!![current_index_frame] val input = bitFirst!![current_index_frame]
val inputBuffer = mediaCodec!!.getInputBuffer(inputBufIndex) val inputBuffer = mediaCodec!!.getInputBuffer(inputBufIndex)
@ -215,17 +234,23 @@ class MMediaMuxer {
val mBufferInfo = MediaCodec.BufferInfo() val mBufferInfo = MediaCodec.BufferInfo()
val encoderStatus = mediaCodec!!.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC) val encoderStatus = mediaCodec!!.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC)
if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { // no output available yet if (encoderStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { // no output available yet
Loge("No output from encoder available") Loge(
"No output from encoder available"
)
} else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { // not expected for an encoder } else if (encoderStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { // not expected for an encoder
val newFormat = mediaCodec!!.outputFormat val newFormat = mediaCodec!!.outputFormat
mTrackIndex = mediaMuxer!!.addTrack(newFormat) mTrackIndex = mediaMuxer!!.addTrack(newFormat)
mediaMuxer!!.start() mediaMuxer!!.start()
} else if (encoderStatus < 0) { } else if (encoderStatus < 0) {
Loge("unexpected result from encoder.dequeueOutputBuffer: $encoderStatus") Loge(
"unexpected result from encoder.dequeueOutputBuffer: $encoderStatus"
)
} else if (mBufferInfo.size != 0) { } else if (mBufferInfo.size != 0) {
val encodedData = mediaCodec!!.getOutputBuffer(encoderStatus) val encodedData = mediaCodec!!.getOutputBuffer(encoderStatus)
if (encodedData == null) { if (encodedData == null) {
Loge("encoderOutputBuffer $encoderStatus was null") Loge(
"encoderOutputBuffer $encoderStatus was null"
)
} else { } else {
encodedData.position(mBufferInfo.offset) encodedData.position(mBufferInfo.offset)
encodedData.limit(mBufferInfo.offset + mBufferInfo.size) encodedData.limit(mBufferInfo.offset + mBufferInfo.size)
@ -364,7 +389,10 @@ class MMediaMuxer {
.getCapabilitiesForType(mimeType) .getCapabilitiesForType(mimeType)
for (i in capabilities.colorFormats.indices) { for (i in capabilities.colorFormats.indices) {
val colorFormat = capabilities.colorFormats[i] val colorFormat = capabilities.colorFormats[i]
if (isRecognizedFormat(colorFormat)) { if (isRecognizedFormat(
colorFormat
)
) {
return colorFormat return colorFormat
} }
} }
Loading…
Cancel
Save