Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.media; | 5 package org.chromium.media; |
| 6 | 6 |
| 7 import android.annotation.TargetApi; | 7 import android.annotation.TargetApi; |
| 8 import android.content.Context; | 8 import android.content.Context; |
| 9 import android.graphics.ImageFormat; | 9 import android.graphics.ImageFormat; |
| 10 import android.graphics.Rect; | 10 import android.graphics.Rect; |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 533 builder.setWhiteBalanceMode(jniWhiteBalanceMode); | 533 builder.setWhiteBalanceMode(jniWhiteBalanceMode); |
| 534 | 534 |
| 535 builder.setMinColorTemperature(COLOR_TEMPERATURES_MAP.keyAt(0)); | 535 builder.setMinColorTemperature(COLOR_TEMPERATURES_MAP.keyAt(0)); |
| 536 builder.setMaxColorTemperature( | 536 builder.setMaxColorTemperature( |
| 537 COLOR_TEMPERATURES_MAP.keyAt(COLOR_TEMPERATURES_MAP.size() - 1)) ; | 537 COLOR_TEMPERATURES_MAP.keyAt(COLOR_TEMPERATURES_MAP.size() - 1)) ; |
| 538 if (jniWhiteBalanceMode == AndroidMeteringMode.FIXED) { | 538 if (jniWhiteBalanceMode == AndroidMeteringMode.FIXED) { |
| 539 final int index = COLOR_TEMPERATURES_MAP.indexOfValue(parameters.get WhiteBalance()); | 539 final int index = COLOR_TEMPERATURES_MAP.indexOfValue(parameters.get WhiteBalance()); |
| 540 if (index >= 0) builder.setCurrentColorTemperature(COLOR_TEMPERATURE S_MAP.keyAt(index)); | 540 if (index >= 0) builder.setCurrentColorTemperature(COLOR_TEMPERATURE S_MAP.keyAt(index)); |
| 541 } | 541 } |
| 542 | 542 |
| 543 if (parameters.getSupportedFlashModes() == null) { | 543 final List<String> flashModes = parameters.getSupportedFlashModes(); |
| 544 builder.setFillLightMode(AndroidFillLightMode.NONE); | 544 if (flashModes != null) { |
| 545 } else { | 545 builder.setTorch( |
| 546 switch (parameters.getFlashMode()) { | 546 flashModes.contains(android.hardware.Camera.Parameters.FLASH _MODE_TORCH)); |
| 547 case android.hardware.Camera.Parameters.FLASH_MODE_OFF: | 547 builder.setRedEyeReduction( |
| 548 builder.setFillLightMode(AndroidFillLightMode.OFF); | 548 flashModes.contains(android.hardware.Camera.Parameters.FLASH _MODE_RED_EYE)); |
| 549 break; | 549 |
| 550 case android.hardware.Camera.Parameters.FLASH_MODE_AUTO: | 550 ArrayList<Integer> modes = new ArrayList<Integer>(0); |
| 551 builder.setFillLightMode(AndroidFillLightMode.AUTO); | 551 if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MOD E_OFF)) { |
| 552 break; | 552 modes.add(Integer.valueOf(AndroidFillLightMode.OFF)); |
| 553 case android.hardware.Camera.Parameters.FLASH_MODE_RED_EYE: | |
| 554 builder.setRedEyeReduction(true); | |
| 555 builder.setFillLightMode(AndroidFillLightMode.AUTO); | |
| 556 break; | |
| 557 case android.hardware.Camera.Parameters.FLASH_MODE_ON: | |
| 558 builder.setFillLightMode(AndroidFillLightMode.FLASH); | |
| 559 break; | |
| 560 case android.hardware.Camera.Parameters.FLASH_MODE_TORCH: | |
| 561 builder.setFillLightMode(AndroidFillLightMode.TORCH); | |
| 562 break; | |
| 563 default: | |
| 564 builder.setFillLightMode(AndroidFillLightMode.NONE); | |
| 565 } | 553 } |
| 554 if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MOD E_AUTO)) { | |
| 555 modes.add(Integer.valueOf(AndroidFillLightMode.AUTO)); | |
| 556 } | |
| 557 if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MOD E_ON)) { | |
| 558 modes.add(Integer.valueOf(AndroidFillLightMode.FLASH)); | |
| 559 } | |
| 560 | |
| 561 int[] modesAsIntArray = new int[modes.size()]; | |
| 562 for (int i = 0; i < modes.size(); i++) modesAsIntArray[i] = modes.ge t(i).intValue(); | |
| 563 builder.setFillLightModes(modesAsIntArray); | |
|
Reilly Grant (use Gerrit)
2017/03/31 20:13:09
builder.setFillLightModes(modes.toArray(new int[mo
mcasas
2017/03/31 21:14:47
I wish! toArray() would only on ArrayList<Integer>
| |
| 566 } | 564 } |
| 567 | 565 |
| 568 return builder.build(); | 566 return builder.build(); |
| 569 } | 567 } |
| 570 | 568 |
| 571 @Override | 569 @Override |
| 572 public void setPhotoOptions(double zoom, int focusMode, int exposureMode, do uble width, | 570 public void setPhotoOptions(double zoom, int focusMode, int exposureMode, do uble width, |
| 573 double height, float[] pointsOfInterest2D, boolean hasExposureCompen sation, | 571 double height, float[] pointsOfInterest2D, boolean hasExposureCompen sation, |
| 574 double exposureCompensation, int whiteBalanceMode, double iso, | 572 double exposureCompensation, int whiteBalanceMode, double iso, |
| 575 boolean hasRedEyeReduction, boolean redEyeReduction, int fillLightMo de, | 573 boolean hasRedEyeReduction, boolean redEyeReduction, int fillLightMo de, |
| 576 double colorTemperature) { | 574 boolean hasTorch, boolean torch, double colorTemperature) { |
| 577 android.hardware.Camera.Parameters parameters = getCameraParameters(mCam era); | 575 android.hardware.Camera.Parameters parameters = getCameraParameters(mCam era); |
| 578 | 576 |
| 579 if (parameters.isZoomSupported() && zoom > 0) { | 577 if (parameters.isZoomSupported() && zoom > 0) { |
| 580 // |zoomRatios| is an ordered list; need the closest zoom index for parameters.setZoom() | 578 // |zoomRatios| is an ordered list; need the closest zoom index for parameters.setZoom() |
| 581 final List<Integer> zoomRatios = parameters.getZoomRatios(); | 579 final List<Integer> zoomRatios = parameters.getZoomRatios(); |
| 582 int i = 1; | 580 int i = 1; |
| 583 for (; i < zoomRatios.size(); ++i) { | 581 for (; i < zoomRatios.size(); ++i) { |
| 584 if (zoom < zoomRatios.get(i)) { | 582 if (zoom < zoomRatios.get(i)) { |
| 585 break; | 583 break; |
| 586 } | 584 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 660 parameters.setWhiteBalance(android.hardware.Camera.Parameters.WHITE_ BALANCE_AUTO); | 658 parameters.setWhiteBalance(android.hardware.Camera.Parameters.WHITE_ BALANCE_AUTO); |
| 661 } else if (whiteBalanceMode == AndroidMeteringMode.FIXED | 659 } else if (whiteBalanceMode == AndroidMeteringMode.FIXED |
| 662 && parameters.isAutoWhiteBalanceLockSupported()) { | 660 && parameters.isAutoWhiteBalanceLockSupported()) { |
| 663 parameters.setAutoWhiteBalanceLock(true); | 661 parameters.setAutoWhiteBalanceLock(true); |
| 664 if (colorTemperature > 0.0) { | 662 if (colorTemperature > 0.0) { |
| 665 final String closestSetting = getClosestWhiteBalance((int) color Temperature); | 663 final String closestSetting = getClosestWhiteBalance((int) color Temperature); |
| 666 if (closestSetting != null) parameters.setWhiteBalance(closestSe tting); | 664 if (closestSetting != null) parameters.setWhiteBalance(closestSe tting); |
| 667 } | 665 } |
| 668 } | 666 } |
| 669 | 667 |
| 670 // NONE is only used for getting capabilities, to signify "no flash unit ". Ignore it. | |
| 671 if (parameters.getSupportedFlashModes() != null | 668 if (parameters.getSupportedFlashModes() != null |
| 672 && fillLightMode != AndroidFillLightMode.NOT_SET | 669 && fillLightMode != AndroidFillLightMode.NOT_SET) { |
| 673 && fillLightMode != AndroidFillLightMode.NONE) { | |
| 674 switch (fillLightMode) { | 670 switch (fillLightMode) { |
| 675 case AndroidFillLightMode.OFF: | 671 case AndroidFillLightMode.OFF: |
| 676 parameters.setFlashMode(android.hardware.Camera.Parameters.F LASH_MODE_OFF); | 672 parameters.setFlashMode(android.hardware.Camera.Parameters.F LASH_MODE_OFF); |
| 677 break; | 673 break; |
| 678 case AndroidFillLightMode.AUTO: | 674 case AndroidFillLightMode.AUTO: |
| 679 parameters.setFlashMode(hasRedEyeReduction && redEyeReductio n | 675 parameters.setFlashMode(hasRedEyeReduction && redEyeReductio n |
| 680 ? android.hardware.Camera.Parameters.FLASH_M ODE_RED_EYE | 676 ? android.hardware.Camera.Parameters.FLASH_M ODE_RED_EYE |
| 681 : android.hardware.Camera.Parameters.FLASH_M ODE_AUTO); | 677 : android.hardware.Camera.Parameters.FLASH_M ODE_AUTO); |
| 682 break; | 678 break; |
| 683 case AndroidFillLightMode.FLASH: | 679 case AndroidFillLightMode.FLASH: |
| 684 parameters.setFlashMode(android.hardware.Camera.Parameters.F LASH_MODE_ON); | 680 parameters.setFlashMode(android.hardware.Camera.Parameters.F LASH_MODE_ON); |
| 685 break; | 681 break; |
| 686 case AndroidFillLightMode.TORCH: | |
| 687 parameters.setFlashMode(android.hardware.Camera.Parameters.F LASH_MODE_TORCH); | |
| 688 break; | |
| 689 default: | 682 default: |
| 690 } | 683 } |
| 684 if (hasTorch && torch) { | |
| 685 parameters.setFlashMode(android.hardware.Camera.Parameters.FLASH _MODE_TORCH); | |
| 686 } | |
| 691 } | 687 } |
| 692 | 688 |
| 693 try { | 689 try { |
| 694 mCamera.setParameters(parameters); | 690 mCamera.setParameters(parameters); |
| 695 } catch (RuntimeException ex) { | 691 } catch (RuntimeException ex) { |
| 696 Log.e(TAG, "setParameters: ", ex); | 692 Log.e(TAG, "setParameters: ", ex); |
| 697 return; | 693 return; |
| 698 } | 694 } |
| 699 | 695 |
| 700 if (focusMode != AndroidMeteringMode.SINGLE_SHOT) return; | 696 if (focusMode != AndroidMeteringMode.SINGLE_SHOT) return; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 792 getCameraRotation()); | 788 getCameraRotation()); |
| 793 } | 789 } |
| 794 } finally { | 790 } finally { |
| 795 mPreviewBufferLock.unlock(); | 791 mPreviewBufferLock.unlock(); |
| 796 if (camera != null) { | 792 if (camera != null) { |
| 797 camera.addCallbackBuffer(data); | 793 camera.addCallbackBuffer(data); |
| 798 } | 794 } |
| 799 } | 795 } |
| 800 } | 796 } |
| 801 } | 797 } |
| OLD | NEW |