Android Camera的callbackbuffer的缓冲区大小需要是图像的8倍大吗?

Wan*_*ang 3 camera android

正如Android文档所说:

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

但大多数在线代码使用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);
Run Code Online (Sandbox Code Playgroud)

Rya*_*yan 9

1336320是1.5 X 890880,所以我想象bitsperpixel == 12,并且在使用int for bytesperpixel时你会丢失余数.例如

int bytesperpixel = 12 / 8
Run Code Online (Sandbox Code Playgroud)

将导致1,而不是您需要的1.5.