【问题标题】:the buffer size for callbackbuffer of Android Camera need to be 8 time as big as the image?Android Camera的callbackbuffer的缓冲区大小需要是图片的8倍吗?
【发布时间】:2015-06-09 15:06:01
【问题描述】:

正如Android document所说:

对于 YV12 以外的格式,缓冲区的大小是通过将预览图像的宽度、高度和每个像素的字节数相乘来确定的。宽度和高度可以从 getPreviewSize() 中读取。可以使用来自 getPreviewFormat() 的图像格式从 getBitsPerPixel(int) / 8 计算每个像素的字节数。

但是大部分在线代码使用bitsperpixel来创建缓冲区而不是byteperpixel=bitsperpixel/8

如果我使用以下代码并使用图像的确切大小(以字节为单位),将导致错误:E/Camera-JNI(3656):回调缓冲区太小!预期为 1336320 字节,但得到了 890880 字节!这是为什么?为什么缓冲区需要是图片大小的 8 倍?

Camera.Parameters parameters=mCamera.getParameters();
parameters.setPreviewSize(width,height);
mCamera.setParameters(parameters);

int previewFormat=parameters.getPreviewFormat();
int bitsperpixel=ImageFormat.getBitsPerPixel(previewFormat);
int byteperpixel=bitsperpixel/8;
Camera.Size camerasize=parameters.getPreviewSize();
int frame_bytesize=((camerasize.width*camerasize.height)*byteperpixel);

//create buffer
byte[]frameBuffer=new byte[frame_bytesize];

//buffer registry 
mCamera.addCallbackBuffer(frameBuffer);

【问题讨论】:

    标签: android camera


    【解决方案1】:

    1336320 是 1.5 X 890880,所以我想 bitsperpixel == 12,并且在使用 int 表示 bytesperpixel 时,你会失去余数。例如

    int bytesperpixel = 12 / 8
    

    将产生 1,而不是您需要的 1.5。

    【讨论】:

      猜你喜欢
      • 2014-04-15
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      相关资源
      最近更新 更多