onPreviewFrame报GC问题解决方法
2017-04-24 10:38
471 查看
CameraPreView遇到的一些问题
1、onPreviewFrame运行一段时间后便不进入回调函数tip:1.在onPreviewFrame函数里加入mCamera.add
在调用Camera.startPreview()接口前,我们需要setPreviewCallbackWithBuffer,而setPreviewCallbackWithBuffer之前我们需要重新addCallbackBuffer,因为setPreviewCallbackWithBuffer 使用时需要指定一个字节数组作为缓冲区,用于预览图像数据 即addCallbackBuffer,然后你在onPerviewFrame中的data才会有值;
3,从上面看来,我们设置addCallbackBuffer的地方有两个,一个是在startPreview之前,一个是在onPreviewFrame中,这两个都需要调用,如果在onPreviewFrame中不调用,那么,就无法继续回调到onPreviewFrame中了。
CallbackBuffer(data);
2.surfaceChanged里加入mCamera.addCallbackBuffer(gBuffer);
mCamera.setPreviewCallbackWithBuffer(this);
3.surfaceCreated里mCamera.setPreviewDisplay(mSurfaceHolder);
gBuffer = previewBuffer();
mCamera.addCallbackBuffer(gBuffer);
mCamera.setPreviewCallbackWithBuffer(this);
4.private byte[] previewBuffer() {
Log.d("Function","previewBuffer iniciado");
int bufferSize;
byte buffer[];
int bitsPerPixel;
Camera.Parameters mParams = mCamera.getParameters();
Camera.Size mSize = mParams.getPreviewSize();
Log.d("Function","previewBuffer: preview size=" + mSize.height + " " + mSize.width);
int mImageFormat = mParams.getPreviewFormat();
if (mImageFormat == ImageFormat.YV12) {
int yStride = (int) Math.ceil(mSize.width / 16.0) * 16;
int uvStride = (int) Math.ceil((yStride / 2) / 16.0) * 16;
int ySize = yStride * mSize.height;
int uvSize = uvStride * mSize.height / 2;
bufferSize = ySize + uvSize * 2;
buffer = new byte[bufferSize];
Log.d("Function","previewBuffer: buffer size=" + Integer.toString(bufferSize));
return buffer;
}
bitsPerPixel = ImageFormat.getBitsPerPixel(mImageFormat);
bufferSize = (int) (mSize.height * mSize.width * ((bitsPerPixel / (float) 8)));
buffer = new byte[bufferSize];
Log.d("Function","previewBuffer: buffer size=" + Integer.toString(bufferSize));
return buffer;
}
5.在每次改变相机参数时,在startView之前加上mCamera.addCallbackBuffer(gBuffer);
mCamera.setPreviewCallbackWithBuffer(this);
相关文章推荐
- 增加Add-on属性支持的方法,解决某些apk不能安装的问题
- WebBrowser中解决多Frame加载问题的两种方法
- 关于gcc on windows的“拒绝访问”问题的解决方法
- Can't connect to MySQL server on 'localhost' (10048)问题解决方法
- samba 下载问题 samba not found on UART的解决方法
- Ubuntu上构建Ruby on Rails遇到的小问题和解决方法
- 编译android遇到java虚拟机堆内存不够的问题 java.lang.OutOfMemoryError: GC overhead limit exceeded 解决方法
- 解决onActivityResult方法data为空的问题
- 关于 ExtAspNet 控件 Tree 嵌套在 Region Panel 内 OnNodeCommand 无响应的问题解决方法
- No JVM could be found on your system.Please define EXE4J_JAVA_HOME问题解决方法(版本问题)
- 困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
- 关于ON_MOUSEWHEEL不响应问题解决方法
- There is no Citrix MetaFrame server configured on the specified address错误的解决方法
- Ruby on Rail 连接mysql数据库的问题和解决方法
- There is no Citrix MetaFrame server configured on the specified address错误的解决方法
- 【随】Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack 问题解决。
- select挡住div的解决方法以及frame问题和IE、FLASH与实用代码
- [Error generating final archive: Debug certificate expired on …]问题解决方法
- 困扰一天啦,求大神不吝指导,Camera的onPreviewFrame中的问题
- Presenting view controllers on detached view controllers is discouraged 我碰到这类问题的解决方法