作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如@Aegonis 在此 post 中所问
我正在尝试将相机与 Android 连接以对视频帧进行编码。
问题是,在这部分尝试做与他相同的事情时,作为在他的主题中发帖的另外 2 个用户,它崩溃了:
// called from Camera.setPreviewCallbackWithBuffer(...) in other class
public void encoder(byte[] input) {
try {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);
}
...
我从 setPreviewCallbackWithBuffer 做的调用是这样的:
int bufSize= 460800;
camera.addCallbackBuffer(new byte[bufSize]);
camera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
codecs.encoder(data);
}
});
...
出现以下错误信息
03-04 20:30:46.762: E/AndroidRuntime(26196): java.nio.BufferOverflowException
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.Buffer.checkPutBounds(Buffer.java:189)
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.ReadWriteDirectByteBuffer.put(ReadWriteDirectByteBuffer.java:100)
03-04 20:30:46.762: E/AndroidRuntime(26196): at java.nio.ByteBuffer.put(ByteBuffer.java:712)
好吧,字节缓冲区太大了,但是 setPreviewCallbackWithBuffer 说你至少要使用一个大小为 460800 的缓冲区。那么......你会如何解决这个问题?
最佳答案
试试这个
Parameters camParams = camera.getParameters();
int size = imageWidth * imageHeight;
size = size * ImageFormat.getBitsPerPixel(camParams.getPreviewFormat()) / 8;
mBuffer = new byte[size]; // class variable
camera.addCallbackBuffer(mBuffer);
关于android - 连接 MediaCodec 和 Camera (setPreviewCallbackWithBuffers),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15210469/
我有一个代码可以访问来自前置摄像头的帧流,并将它们推送到处理后台线程。现在我根本没有使用任何缓冲区,一切正常(在我的手机上)。 那么对于这个特定任务,setPreviewCallback() 与 se
正如@Aegonis 在此 post 中所问 我正在尝试将相机与 Android 连接以对视频帧进行编码。 问题是,在这部分尝试做与他相同的事情时,作为在他的主题中发帖的另外 2 个用户,它崩溃了:
在CameraX或者android.hardware.camera2中有没有功能类似setPreviewCallbackWithBuffer的方法?此方法与 android.hardware.came
我是一名优秀的程序员,十分优秀!