1. 説明
- USB カメラを使用します。通常、メーカーが提供する USB カメラには、図に示すように、複数の解像度をサポートするファームウェアが組み込まれています (通常、コンピュータに直接接続して写真やビデオの品質を確認できます)。下図: 上図からわかるように、
このカメラがサポートする最大画素数は 1.9MP (約 200 万画素) で、最大ビデオ録画は 720P をサポートします。 - adb シェルでは、次のコマンドを使用してカメラ情報を取得することもできます。
rk3288:/ $ dumpsys media.camera
Camera module HAL API version: 0x1
Camera module API version: 0x1
Camera module name: RK29_ICS_CameraHal_Module
Camera module author: RockChip
Number of camera devices: 1
Number of normal camera devices: 1
Active Camera Clients:
[]
Allowed users:
0
Vendor tags left unimplemented.
Prior client events (most recent at top):
01-01 10:56:49 : DISCONNECT device 0 client for package com.android.camera3 (PID 1959)
01-01 10:56:35 : CONNECT device 0 client for package com.android.camera3 (PID 1959)
01-01 09:22:11 : DISCONNECT device 0 client for package com.android.camera3 (PID 1462)
01-01 09:21:33 : CONNECT device 0 client for package com.android.camera3 (PID 1462)
01-01 08:00:59 : DISCONNECT device 0 client for package com.android.camera3 (PID 1462)
01-01 08:00:46 : CONNECT device 0 client for package com.android.camera3 (PID 1462)
01-01 08:00:17 : DISCONNECT device 0 client for package cameraserver (PID 234)
01-01 08:00:15 : USER_SWITCH previous allowed users: , current allowed users: 0
Camera 0 information:
Facing: BACK
Orientation: 0
Resource Cost: 100
Conflicting Devices: NONE
Device version: 0x100
Camera1 API shim is using parameters:
CameraParameters::dump: mMap.size = 50
antibanding: off
antibanding-values: off,50hz,60hz,auto
exposure-compensation: 0
exposure-compensation-step: 1
focal-length: 35
focus-distances: 0.3,50,Infinity
focus-mode: fixed
focus-mode-values: fixed
horizontal-view-angle: 10
jpeg-quality: 70
jpeg-thumbnail-height: 128
jpeg-thumbnail-quality: 50
jpeg-thumbnail-size-values: 0x0,160x128
jpeg-thumbnail-width: 160
max-exposure-compensation: 3
max-num-detected-faces-hw: 2
max-num-detected-faces-sw: 0
max-num-focus-areas: 0
max-num-metering-areas: 0
max-zoom: 40
min-exposure-compensation: -3
picture-format: jpeg
picture-format-values: jpeg
picture-size: 1600x1200
picture-size-values: 640x480,320x240,160x120,352x288,176x144,1280x1024,1600x1200
preferred-preview-size-for-video:
preview-format: yuv420sp
preview-format-values: yuv420sp,yuv420p
preview-fps-range: 5000,30000
preview-fps-range-values: (5000,30000)
preview-frame-rate: 30
preview-frame-rate-values: 30,15,7
preview-size: 640x480
preview-size-values: 640x480,320x240,160x120,352x288,176x144,1280x1024,1600x1200
recording-hint: false
rk-continous-pic-num: 1
rk-previwe-h-force: 0
rk-previwe-w-force: 0
rotation: 0
vertical-view-angle: 10
video-frame-format: yuv420sp
video-size:
video-size-values:
video-snapshot-supported: true
video-stabilization-supported: false
whitebalance: auto
whitebalance-values: auto,incandescent,fluorescent,daylight,cloudy-daylight
zoom: 0
zoom-ratios: 100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,
245,250,255,260,265,270,275,280,285,290,295,300,
zoom-supported: true
Device 0 is closed, no client instance
No active camera clients yet.
Camera traces (0):
No camera traces collected.
第二に、問題となる現象
ただし、Android システムでカメラを開くと、写真やビデオのプレビューを撮影するときにピクセルが不鮮明で、解像度がカメラがサポートする解像度に達していない場合があります。通常、プレビュー解像度は /data/camera/media_profiles.xml ( system/etc/media_profiles_default.xml)
デバイスに設定されている解像度から取得されます。
次のように、直接検証するために対応するパラメータを変更できます。
adb root
adb remount
adb Shell
Busybox vi /data/camera/media_profiles.xml (編集および変更)
:wq (終了)
再起動
3、解決策
ソースコード内で指定する必要がある場合(パスは/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
)、次のように変更できます。
- 写真を撮影するときは、デフォルトの PreviewSize プレビュー解像度と PictureSize 写真サイズを変更し、プレビュー解像度を自分でカスタマイズし、最大解像度として 1600x1200 を設定します。
diff --git a/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp b/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
index b565930a68..83a4888fa6 100755
--- a/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
+++ b/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
@@ -164,14 +164,14 @@ 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());
- if(parameterString.contains("640x480"))
- params.setPreviewSize(640,480);
+ params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, "640x480,320x240,160x120,352x288,176x144,1280x1024,1600x1200");
+ if(parameterString.contains("1600x1200"))//如果1600x1200有包含在支持分辨率KEY_SUPPORTED_PREVIEW_SIZES中为真,setPreviewSize为1600x1200;
+ params.setPreviewSize(1600,1200);
else
params.setPreviewSize(mCamDriverFrmWidthMax,mCamDriverFrmHeightMax);
/*picture size setting*/
- params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, parameterString.string());
- params.setPictureSize(mCamDriverFrmWidthMax, mCamDriverFrmHeightMax);
+ params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, "640x480,320x240,160x120,352x288,176x144,1280x1024,1600x1200");
+ params.setPictureSize(1600,1200);
/* set framerate */
struct v4l2_streamparm setfps;
- 録画するときは、デフォルトの KEY_SUPPORTED_VIDEO_SIZES を設定し、最大プレビュー解像度として 1600x1200 を設定します。
KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO: ビデオ録画時の優先プレビュー サイズを設定します。
KEY_VIDEO_SIZE: カメラのビデオ サイズを設定します。
KEY_SUPPORTED_VIDEO_SIZES: カメラでサポートされているビデオ サイズのリストを取得します。
diff --git a/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp b/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
index b565930a68..153d88407f 100755
--- a/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
+++ b/hardware/rockchip/camera/CameraHal/CameraUSBAdapter.cpp
@@ -571,15 +571,15 @@ void CameraUSBAdapter::initDefaultParameters(int camFd)
#if (CONFIG_CAMERA_SETVIDEOSIZE == 0)
if(false/*mIsCtsTest*/){
if(gCamInfos[mCamId].facing_info.facing == CAMERA_FACING_BACK){
- //back camera, may need to manually modify based on media_profiles.xml supported.
- params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,"1920x1080");
- params.set(CameraParameters::KEY_VIDEO_SIZE,"1920x1080");
- params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES,"176x144,320x240,352x288,640x480,1280x720,1920x1080");
+ //back camera(后置), may need to manually modify based on media_profiles.xml supported.
+ params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,"1600x1200");
+ params.set(CameraParameters::KEY_VIDEO_SIZE,"1600x1200");
+ params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES,"1600x1200");
}else{
- //front camera
- params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,"640x480");
- params.set(CameraParameters::KEY_VIDEO_SIZE,"640x480");
- params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES,"176x144,320x240,352x288,640x480,1280x720");
+ //front camera(前置)
+ params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,"1600x1200");
+ params.set(CameraParameters::KEY_VIDEO_SIZE,"1600x1200");
+ params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES,"1600x1200");
}
} else {
params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO,"");
上記はプレビュー解像度を 1600x1200 に設定する方法です. 他の解像度を変更したい場合は、上記の方法で指定する解像度を変更できます; 注: 必要な解像度は、必ずサポートされている解像度の中で指定してください
。 USBカメラ!