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