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 |