2015-05-12 66 views
2

我正在使用OpenCV本機開發應用程序,並以Java打開相機。我的應用程序適用於MotoG,但是當我使用其他設備時,它會失敗。setPreviewSize僅在某些設備中不起作用

我的預覽回調發送圖像,我得到這個錯誤:

E/Camera-JNI(22013): Callback buffer was too small! Expected 3110400 bytes, but got 460800 bytes! 

我的相機使用propertly打開:

_camera.startPreview(); 
... 
for (Size s : parameters.getSupportedPreviewSizes()) 
... 
parameters.setPreviewSize(desiredSize.width, desiredSize.height); // 640x480 in runtime 

但是,錯誤意味着出事了與緩衝區。

460800 = 640x480x1.5 // width x height x YUV format, as I configured in setpreviewsize 
3110400 = 1920x1080x1.5 // other size x YUV format, I didn't do this! 

我的件,其中,不工作的一些令人不安的日誌中發現:

E/mm-camera-sensor(319): port_sensor_caps_reserve:155 ide 30002 stream type 1 w*h 1920*1080 
... 
I/QCameraParameters(303): initDefaultParameters: supported preview sizes: 1920x1080,1440x1080,1280x720,1056x864,960x720,720x480,640x480,352x288,320x240,176x144 
I/QCameraParameters(303): set Default prview sizes : 1920x1080 
I/ShotCommon(303): Preview width(1920), height(1080) 
I/ShotCommon(303): Preview color format [yuv420sp] 

因此,它似乎在某些設備上,預覽沒有與提供的分辨率打開。到底是怎麼回事?

+0

這與[jni]有什麼關係? – PJTraill

+0

我使用一個指向JNI中的圖像的指針來處理 – vgonisanz

回答

1

這似乎是Nexus設備出現故障,如果你撥打:

mCamera.setPreviewDisplay(mSurfaceHolder); 

調用之前:

Camera.Parameters parameters = mCamera.getParameters(); 
parameters.setPreviewFormat(ImageFormat.NV21); 
parameters.setPreviewSize(desiredSize.width, desiredSize.height); 
mCamera.setParameters(parameters); 

所以,如果你希望你的攝像頭能在Nexus,第一組預覽大小,然後將面持有人預覽顯示。

0

我遇到了同樣的問題。實際上固定的是撥打:

mCamera.setParameters(parameters); 

設置我自己的參數後。顯然,用這條線你可以告訴相機更新改變的參數。

相關問題