首页 > 解决方案 > Android 10 Camera2 API:CONTROL_EFFECT_MODE 不起作用

问题描述

我在我的应用程序中实现了以下代码。

previewRequestBuilder.set(CaptureRequest.CONTROL_EFFECT_MODE,CameraMetadata.CONTROL_EFFECT_MODE_NEGATIVE);

它已在 Mi9t、OnePlus 7 Pro、带有 Android 10 的华为 P20 上进行了测试,但无法正常工作。在搭载 Android 9(Redmi 5 和 OnePlus 5T)的设备上。它没有向我显示对预览的负面影响。我错过了什么吗?

编辑:当单击菜单项时,两个捕获请求都会更新。它可以在装有 Android 9 的设备上完美运行。

public class MainActivity extends AppCompatActivity{
private static final CaptureRequest.Key<Integer> EFFECT = CaptureRequest.CONTROL_EFFECT_MODE;
....


 public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.negative:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_NEGATIVE);
                return true;
            case R.id.aqua:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_AQUA);
                return true;
            case R.id.solarize:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_SOLARIZE);
                return true;
            case R.id.blackboard:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_BLACKBOARD);
                return true;
            case R.id.sepia:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_SEPIA);
                return true;
            case R.id.posterize:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_POSTERIZE);
                return true;
            case R.id.whiteboard:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_WHITEBOARD);
                return true;
            case R.id.effectOff:
                setCameraPreference(EFFECT,CameraMetadata.CONTROL_EFFECT_MODE_OFF);
        }


        return false;
    }

private void setCameraPreference(CaptureRequest.Key<Integer> key,int value){
    previewRequestBuilder.set(key,value);
    pictureRequestBuilder.set(key,value);
    updatePreview();
}
 protected void updatePreview() {
   if (null == cameraDevice) {
    }
    try {
        captureSession.setRepeatingRequest(previewRequestBuilder.build(), null, null); 
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

以下方法仅在按下按钮时和捕获请求更新后调用。

protected void takePicture() { 
    if (null == cameraDevice) {
        return;
    }
    int rotation = getWindowManager().getDefaultDisplay().getRotation();
    manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 

    try {
        characteristics = manager.getCameraCharacteristics(cameraDevice.getId()); 
        pictureRequestBuilder.addTarget(imageReader.getSurface());
        pictureRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, CameraTools.getJpegOrientation(characteristics, rotation));
        file = CameraTools.createFilePhoto(folder); 
        imageReader.setOnImageAvailableListener(imageListener, null);
        captureSession.capture(pictureRequestBuilder.build(), captureCallback, null);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

EDIT2:我检查了我的设备槽的可用效果:

int effects[] = characteristics.get(CameraCharacteristics.CONTROL_AVAILABLE_EFFECTS);
    for (int effect : effects){
        Log.d("camera2d", "Effects available: "+effect);

结果:

2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 0
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 1
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 2
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 3
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 4
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 5
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 8
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 7
2020-05-06 11:41:44.998 24702-24702/it.runningexamples.recamera2 D/camera2d: Effects available: 6

标签: javaandroidandroid-camera2android-10.0

解决方案


推荐阅读