OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 Logging.e(TAG, "Calling startPreviewOnCameraThread on stopped camera."); | 407 Logging.e(TAG, "Calling startPreviewOnCameraThread on stopped camera."); |
408 return; | 408 return; |
409 } | 409 } |
410 | 410 |
411 requestedWidth = width; | 411 requestedWidth = width; |
412 requestedHeight = height; | 412 requestedHeight = height; |
413 requestedFramerate = framerate; | 413 requestedFramerate = framerate; |
414 | 414 |
415 // Find closest supported format for |width| x |height| @ |framerate|. | 415 // Find closest supported format for |width| x |height| @ |framerate|. |
416 final android.hardware.Camera.Parameters parameters = camera.getParameters()
; | 416 final android.hardware.Camera.Parameters parameters = camera.getParameters()
; |
417 final List<CaptureFormat.FramerateRange> supportedFramerates = | 417 for (int[] fpsRange : parameters.getSupportedPreviewFpsRange()) { |
418 CameraEnumerator.convertFramerates(parameters.getSupportedPreviewFpsRang
e()); | 418 Logging.d(TAG, "Available fps range: " + |
419 Logging.d(TAG, "Available fps ranges: " + supportedFramerates); | 419 fpsRange[android.hardware.Camera.Parameters.PREVIEW_FPS_MIN_INDEX] + "
:" + |
420 | 420 fpsRange[android.hardware.Camera.Parameters.PREVIEW_FPS_MAX_INDEX]); |
421 final CaptureFormat.FramerateRange bestFpsRange; | |
422 if (supportedFramerates.isEmpty()) { | |
423 Logging.w(TAG, "No supported preview fps range"); | |
424 bestFpsRange = new CaptureFormat.FramerateRange(0, 0); | |
425 } else { | |
426 bestFpsRange = CameraEnumerationAndroid.getClosestSupportedFramerateRange( | |
427 supportedFramerates, framerate); | |
428 } | 421 } |
429 | 422 final int[] range = CameraEnumerationAndroid.getFramerateRange(parameters, f
ramerate * 1000); |
430 final android.hardware.Camera.Size previewSize = | 423 final android.hardware.Camera.Size previewSize = |
431 CameraEnumerationAndroid.getClosestSupportedSize( | 424 CameraEnumerationAndroid.getClosestSupportedSize( |
432 parameters.getSupportedPreviewSizes(), width, height); | 425 parameters.getSupportedPreviewSizes(), width, height); |
433 final CaptureFormat captureFormat = new CaptureFormat( | 426 final CaptureFormat captureFormat = new CaptureFormat( |
434 previewSize.width, previewSize.height, bestFpsRange); | 427 previewSize.width, previewSize.height, |
| 428 range[android.hardware.Camera.Parameters.PREVIEW_FPS_MIN_INDEX], |
| 429 range[android.hardware.Camera.Parameters.PREVIEW_FPS_MAX_INDEX]); |
435 | 430 |
436 // Check if we are already using this capture format, then we don't need to
do anything. | 431 // Check if we are already using this capture format, then we don't need to
do anything. |
437 if (captureFormat.isSameFormat(this.captureFormat)) { | 432 if (captureFormat.isSameFormat(this.captureFormat)) { |
438 return; | 433 return; |
439 } | 434 } |
440 | 435 |
441 // Update camera parameters. | 436 // Update camera parameters. |
442 Logging.d(TAG, "isVideoStabilizationSupported: " + | 437 Logging.d(TAG, "isVideoStabilizationSupported: " + |
443 parameters.isVideoStabilizationSupported()); | 438 parameters.isVideoStabilizationSupported()); |
444 if (parameters.isVideoStabilizationSupported()) { | 439 if (parameters.isVideoStabilizationSupported()) { |
445 parameters.setVideoStabilization(true); | 440 parameters.setVideoStabilization(true); |
446 } | 441 } |
447 // Note: setRecordingHint(true) actually decrease frame rate on N5. | 442 // Note: setRecordingHint(true) actually decrease frame rate on N5. |
448 // parameters.setRecordingHint(true); | 443 // parameters.setRecordingHint(true); |
449 if (captureFormat.framerate.max > 0) { | 444 if (captureFormat.maxFramerate > 0) { |
450 parameters.setPreviewFpsRange(captureFormat.framerate.min, captureFormat.f
ramerate.max); | 445 parameters.setPreviewFpsRange(captureFormat.minFramerate, captureFormat.ma
xFramerate); |
451 } | 446 } |
452 parameters.setPreviewSize(captureFormat.width, captureFormat.height); | 447 parameters.setPreviewSize(captureFormat.width, captureFormat.height); |
453 | 448 |
454 if (!isCapturingToTexture) { | 449 if (!isCapturingToTexture) { |
455 parameters.setPreviewFormat(captureFormat.imageFormat); | 450 parameters.setPreviewFormat(captureFormat.imageFormat); |
456 } | 451 } |
457 // Picture size is for taking pictures and not for preview/video, but we nee
d to set it anyway | 452 // Picture size is for taking pictures and not for preview/video, but we nee
d to set it anyway |
458 // as a workaround for an aspect ratio problem on Nexus 7. | 453 // as a workaround for an aspect ratio problem on Nexus 7. |
459 final android.hardware.Camera.Size pictureSize = | 454 final android.hardware.Camera.Size pictureSize = |
460 CameraEnumerationAndroid.getClosestSupportedSize( | 455 CameraEnumerationAndroid.getClosestSupportedSize( |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 // Undo the mirror that the OS "helps" us with. | 659 // Undo the mirror that the OS "helps" us with. |
665 // http://developer.android.com/reference/android/hardware/Camera.html#set
DisplayOrientation(int) | 660 // http://developer.android.com/reference/android/hardware/Camera.html#set
DisplayOrientation(int) |
666 transformMatrix = | 661 transformMatrix = |
667 RendererCommon.multiplyMatrices(transformMatrix, RendererCommon.horizo
ntalFlipMatrix()); | 662 RendererCommon.multiplyMatrices(transformMatrix, RendererCommon.horizo
ntalFlipMatrix()); |
668 } | 663 } |
669 cameraStatistics.addFrame(); | 664 cameraStatistics.addFrame(); |
670 frameObserver.onTextureFrameCaptured(captureFormat.width, captureFormat.heig
ht, oesTextureId, | 665 frameObserver.onTextureFrameCaptured(captureFormat.width, captureFormat.heig
ht, oesTextureId, |
671 transformMatrix, rotation, timestampNs); | 666 transformMatrix, rotation, timestampNs); |
672 } | 667 } |
673 } | 668 } |
OLD | NEW |