RK3288 USB UVC camera 攝像頭 VIDIOC_DQBUF Failed!!! err[I/O error]


RK3288     Android5.1   多個品牌USB攝像頭

 

同一塊主板和代碼,大部分品牌的USB攝像頭可以正常使用,只有某一款USB攝像頭不能使用。

插上攝像頭,底層可以識別到攝像頭。

<6>[ 47.479515] usb 3-1.4: new high-speed USB device number 5 using usb20_host
<6>[ 47.696548] usb 3-1.4: New USB device found, idVendor=058f, idProduct=2657
<6>[ 47.696719] usb 3-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
<6>[ 47.696825] usb 3-1.4: Product: PC Camera
<6>[ 47.696908] usb 3-1.4: Manufacturer: Alcor Micro, Corp.
<6>[ 47.708510] uvcvideo: Found UVC 1.00 device PC Camera (058f:2657)
<6>[ 47.718236] input: PC Camera as /devices/ff540000.usb/usb3/3-1/3-1.4/3-1.4:1.0/input/input5

但是每次打開攝像頭app都顯示“無法連接到相機”,上層 log 如下。

D/CameraHal(  177): setParameters(583): setParameters(583): Set preview size 800x600
... ...
D/CameraHal(  177): startPreview(177): startPreview177:preview_w = 800,preview_h = 600,drv_w = 800,drv_h = 600
D/CameraHal(  177): cameraSetSize(476): cameraSetSize(476):IN, w = 800,h = 600
... ...
E/CameraHal(  177): getFrame(614): getFrame(614): VIDIOC_DQBUF Failed!!! err[I/O error]
E/CameraHal(  177): getFrame(620): getFrame(620): camera driver or device may be error, so notify CAMERA_MSG_ERROR

 

最后官方的回復如下:

USB攝像頭800x600分辨率輸出有問題,強制使用1280x960,同時保留1280x720為錄像使用,由軟件剪切到1280x720

diff --git a/CameraHal/CameraUSBAdapter.cpp b/CameraHal/CameraUSBAdapter.cpp
index b88dd17..adb446b 100644
--- a/CameraHal/CameraUSBAdapter.cpp
+++ b/CameraHal/CameraUSBAdapter.cpp
@@ -134,8 +134,8 @@ void CameraUSBAdapter::initDefaultParameters(int camFd)

     params.set(KEY_PREVIEW_W_FORCE,"0");
     params.set(KEY_PREVIEW_H_FORCE,"0");
-    params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, parameterString.string());
-    params.setPreviewSize(640,480);
+    params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, "1280x960,1280x720");
+    params.setPreviewSize(1280, 960);
     /*picture size setting*/      
     params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, parameterString.string());        
     params.setPictureSize(mCamDriverFrmWidthMax,  mCamDriverFrmHeightMax);   

按照官方的 patch 修改后,攝像頭可以正常使用。

 

如果出現可以預覽,不能拍照的問題,還需要更改拍照的分辨率

diff --git a/CameraHal/CameraUSBAdapter.cpp b/CameraHal/CameraUSBAdapter.cpp
index b88dd17..adb446b 100644
--- a/CameraHal/CameraUSBAdapter.cpp
+++ b/CameraHal/CameraUSBAdapter.cpp
@@ -134,8 +134,8 @@ void CameraUSBAdapter::initDefaultParameters(int camFd)

     params.set(KEY_PREVIEW_W_FORCE,"0");
     params.set(KEY_PREVIEW_H_FORCE,"0");
     params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, "1280x960,1280x720");
     params.setPreviewSize(1280, 960);
     /*picture size setting*/      
-    params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, parameterString.string());        
-    params.setPictureSize(mCamDriverFrmWidthMax,  mCamDriverFrmHeightMax);
+    params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, "1280x960,1280x720");        
+    params.setPictureSize(1280, 960);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM