我有一个缓冲区,缓冲区在到达时就充满了图像位图(使用线程连续拍摄照片)。然后,我想将该位图缓冲区(此刻我有一个哈希图用于匹配键)转储到.mp4
文件中。
这是使用处理程序连续捕获图像的代码。
button.setOnClickListener {
prepareUIForCapture()
if(isRunning){
handler.removeCallbacksAndMessages(null)
Logd("Length of wide: " + MainActivity.wideBitmaps.size)
Logd("Length of normal: " + MainActivity.normalBitmaps.size)
// This is where the make video would be called => makeVideoFootage()
restartActivity()
}else{
button.text = "Stop"
handler.postDelayed(object : Runnable {
override fun run(){
twoLens.reset()
twoLens.isTwoLensShot = true
MainActivity.cameraParams.get(dualCamLogicalId).let {
if (it?.isOpen == true) {
Logd("In onClick. Taking Dual Cam Photo on logical camera: " + dualCamLogicalId)
takePicture(this@MainActivity, it)
Toast.makeText(applicationContext, "Captured", Toast.LENGTH_LONG).show()
}
}
handler.postDelayed(this, 1000)
}
}, 1000)
}
isRunning = !isRunning
}
此操作每1秒钟拍摄一次,直到按下停止按钮为止。这是提取图像并将其保存到哈希图中的函数。
val wideBuffer: ByteBuffer? = twoLens.wideImage!!.planes[0].buffer
val wideBytes = ByteArray(wideBuffer!!.remaining())
wideBuffer.get(wideBytes)
val normalBuffer: ByteBuffer? = twoLens.normalImage!!.planes[0].buffer
val normalBytes = ByteArray(normalBuffer!!.remaining())
normalBuffer.get(normalBytes)
val tempWideBitmap = BitmapFactory.decodeByteArray(wideBytes, 0, wideBytes.size, null)
val tempNormalBitmap = BitmapFactory.decodeByteArray(normalBytes, 0, normalBytes.size, null)
MainActivity.counter += 1
MainActivity.wideBitmaps.put(MainActivity.counter.toString(), tempWideBitmap)
MainActivity.normalBitmaps.put(MainActivity.counter.toString(), tempNormalBitmap)
```counter''用于匹配帧,这就是为什么我使用哈希图而不是数组的原因。我已经按照以下步骤编译了ffmpeg。
implementation 'com.writingminds:FFmpegAndroid:0.3.2'
这是正确的方法吗?
我会喜欢makeVideoFootage()
中的一些入门代码。
fun makeVideoFootage(){
// I would like to get the bitmaps from MainActivity.wideBitmaps and then dump them into a video wide.mp4.
}
任何对此的帮助,将不胜感激。
P.S。我已经阅读了现有的问题及其答案(从命令行运行),但是我不知道如何继续。