代码之家  ›  专栏  ›  技术社区  ›  michsalv

Android 10 Camera2 API:CONTROL_EFFECT_MODE不工作

  •  0
  • michsalv  · 技术社区  · 5 年前

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

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

    它已经在Mi9t、OnePlus 7 Pro、搭载Android 10的华为P20上进行了测试,但无法正常工作。而在搭载Android 9的设备上(红米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
    
    0 回复  |  直到 5 年前
    推荐文章