OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "media/capture/video/android/video_capture_device_android.h" | 5 #include "media/capture/video/android/video_capture_device_android.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/android/jni_android.h" | 10 #include "base/android/jni_android.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 using base::android::AttachCurrentThread; | 22 using base::android::AttachCurrentThread; |
23 using base::android::CheckException; | 23 using base::android::CheckException; |
24 using base::android::GetClass; | 24 using base::android::GetClass; |
25 using base::android::JavaParamRef; | 25 using base::android::JavaParamRef; |
26 using base::android::MethodID; | 26 using base::android::MethodID; |
27 using base::android::JavaRef; | 27 using base::android::JavaRef; |
28 using base::android::ScopedJavaLocalRef; | 28 using base::android::ScopedJavaLocalRef; |
29 | 29 |
30 namespace media { | 30 namespace media { |
31 | 31 |
| 32 namespace { |
| 33 |
| 34 mojom::MeteringMode ToMojomMeteringMode( |
| 35 PhotoCapabilities::AndroidMeteringMode android_mode) { |
| 36 switch (android_mode) { |
| 37 case PhotoCapabilities::AndroidMeteringMode::FIXED: |
| 38 return mojom::MeteringMode::MANUAL; |
| 39 case PhotoCapabilities::AndroidMeteringMode::SINGLE_SHOT: |
| 40 return mojom::MeteringMode::SINGLE_SHOT; |
| 41 case PhotoCapabilities::AndroidMeteringMode::CONTINUOUS: |
| 42 return mojom::MeteringMode::CONTINUOUS; |
| 43 case PhotoCapabilities::AndroidMeteringMode::UNAVAILABLE: |
| 44 return mojom::MeteringMode::UNAVAILABLE; |
| 45 case PhotoCapabilities::AndroidMeteringMode::NOT_SET: |
| 46 NOTREACHED(); |
| 47 } |
| 48 return mojom::MeteringMode::UNAVAILABLE; |
| 49 } |
| 50 |
| 51 PhotoCapabilities::AndroidMeteringMode ToAndroidMeteringMode( |
| 52 mojom::MeteringMode mojom_mode) { |
| 53 switch (mojom_mode) { |
| 54 case mojom::MeteringMode::MANUAL: |
| 55 return PhotoCapabilities::AndroidMeteringMode::FIXED; |
| 56 case mojom::MeteringMode::SINGLE_SHOT: |
| 57 return PhotoCapabilities::AndroidMeteringMode::SINGLE_SHOT; |
| 58 case mojom::MeteringMode::CONTINUOUS: |
| 59 return PhotoCapabilities::AndroidMeteringMode::CONTINUOUS; |
| 60 case mojom::MeteringMode::UNAVAILABLE: |
| 61 return PhotoCapabilities::AndroidMeteringMode::UNAVAILABLE; |
| 62 } |
| 63 NOTREACHED(); |
| 64 return PhotoCapabilities::AndroidMeteringMode::NOT_SET; |
| 65 } |
| 66 |
| 67 } // anonymous namespace |
| 68 |
32 // static | 69 // static |
33 bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) { | 70 bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) { |
34 return RegisterNativesImpl(env); | 71 return RegisterNativesImpl(env); |
35 } | 72 } |
36 | 73 |
37 VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid( | 74 VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid( |
38 const VideoCaptureDeviceDescriptor& device_descriptor) | 75 const VideoCaptureDeviceDescriptor& device_descriptor) |
39 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 76 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
40 state_(kIdle), | 77 state_(kIdle), |
41 got_first_frame_(false), | 78 got_first_frame_(false), |
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 photo_capabilities->height->max = caps.getMaxHeight(); | 464 photo_capabilities->height->max = caps.getMaxHeight(); |
428 photo_capabilities->height->min = caps.getMinHeight(); | 465 photo_capabilities->height->min = caps.getMinHeight(); |
429 photo_capabilities->width = mojom::Range::New(); | 466 photo_capabilities->width = mojom::Range::New(); |
430 photo_capabilities->width->current = caps.getCurrentWidth(); | 467 photo_capabilities->width->current = caps.getCurrentWidth(); |
431 photo_capabilities->width->max = caps.getMaxWidth(); | 468 photo_capabilities->width->max = caps.getMaxWidth(); |
432 photo_capabilities->width->min = caps.getMinWidth(); | 469 photo_capabilities->width->min = caps.getMinWidth(); |
433 photo_capabilities->zoom = mojom::Range::New(); | 470 photo_capabilities->zoom = mojom::Range::New(); |
434 photo_capabilities->zoom->current = caps.getCurrentZoom(); | 471 photo_capabilities->zoom->current = caps.getCurrentZoom(); |
435 photo_capabilities->zoom->max = caps.getMaxZoom(); | 472 photo_capabilities->zoom->max = caps.getMaxZoom(); |
436 photo_capabilities->zoom->min = caps.getMinZoom(); | 473 photo_capabilities->zoom->min = caps.getMinZoom(); |
437 switch (caps.getFocusMode()) { | 474 photo_capabilities->focus_mode = ToMojomMeteringMode(caps.getFocusMode()); |
438 case PhotoCapabilities::AndroidFocusMode::UNAVAILABLE: | 475 photo_capabilities->exposure_mode = |
439 photo_capabilities->focus_mode = mojom::FocusMode::UNAVAILABLE; | 476 ToMojomMeteringMode(caps.getExposureMode()); |
440 break; | 477 |
441 case PhotoCapabilities::AndroidFocusMode::FIXED: | |
442 photo_capabilities->focus_mode = mojom::FocusMode::MANUAL; | |
443 break; | |
444 case PhotoCapabilities::AndroidFocusMode::SINGLE_SHOT: | |
445 photo_capabilities->focus_mode = mojom::FocusMode::SINGLE_SHOT; | |
446 break; | |
447 case PhotoCapabilities::AndroidFocusMode::CONTINUOUS: | |
448 photo_capabilities->focus_mode = mojom::FocusMode::CONTINUOUS; | |
449 break; | |
450 } | |
451 callback.Run(std::move(photo_capabilities)); | 478 callback.Run(std::move(photo_capabilities)); |
452 } | 479 } |
453 | 480 |
454 void VideoCaptureDeviceAndroid::DoSetPhotoOptions( | 481 void VideoCaptureDeviceAndroid::DoSetPhotoOptions( |
455 mojom::PhotoSettingsPtr settings, | 482 mojom::PhotoSettingsPtr settings, |
456 SetPhotoOptionsCallback callback) { | 483 SetPhotoOptionsCallback callback) { |
457 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 484 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
458 #if DCHECK_IS_ON() | 485 #if DCHECK_IS_ON() |
459 { | 486 { |
460 base::AutoLock lock(lock_); | 487 base::AutoLock lock(lock_); |
461 DCHECK_EQ(kConfigured, state_); | 488 DCHECK_EQ(kConfigured, state_); |
462 DCHECK(got_first_frame_); | 489 DCHECK(got_first_frame_); |
463 } | 490 } |
464 #endif | 491 #endif |
465 JNIEnv* env = AttachCurrentThread(); | 492 JNIEnv* env = AttachCurrentThread(); |
466 | 493 |
467 const int width = settings->has_width ? settings->width : 0; | 494 const int width = settings->has_width ? settings->width : 0; |
468 const int height = settings->has_height ? settings->height : 0; | 495 const int height = settings->has_height ? settings->height : 0; |
469 const int zoom = settings->has_zoom ? settings->zoom : 0; | 496 const int zoom = settings->has_zoom ? settings->zoom : 0; |
470 | 497 |
471 PhotoCapabilities::AndroidFocusMode focus_mode = | 498 const PhotoCapabilities::AndroidMeteringMode focus_mode = |
472 PhotoCapabilities::AndroidFocusMode::UNAVAILABLE; | 499 settings->has_focus_mode |
473 if (settings->has_focus_mode) { | 500 ? ToAndroidMeteringMode(settings->focus_mode) |
474 switch (settings->focus_mode) { | 501 : PhotoCapabilities::AndroidMeteringMode::NOT_SET; |
475 case mojom::FocusMode::MANUAL: | 502 |
476 focus_mode = PhotoCapabilities::AndroidFocusMode::FIXED; | 503 const PhotoCapabilities::AndroidMeteringMode exposure_mode = |
477 break; | 504 settings->has_exposure_mode |
478 case mojom::FocusMode::SINGLE_SHOT: | 505 ? ToAndroidMeteringMode(settings->exposure_mode) |
479 focus_mode = PhotoCapabilities::AndroidFocusMode::SINGLE_SHOT; | 506 : PhotoCapabilities::AndroidMeteringMode::NOT_SET; |
480 break; | |
481 case mojom::FocusMode::CONTINUOUS: | |
482 focus_mode = PhotoCapabilities::AndroidFocusMode::CONTINUOUS; | |
483 break; | |
484 case mojom::FocusMode::UNAVAILABLE: | |
485 focus_mode = PhotoCapabilities::AndroidFocusMode::UNAVAILABLE; | |
486 break; | |
487 } | |
488 } | |
489 | 507 |
490 std::vector<float> points_of_interest_marshalled; | 508 std::vector<float> points_of_interest_marshalled; |
491 for (const auto& point : settings->points_of_interest) { | 509 for (const auto& point : settings->points_of_interest) { |
492 points_of_interest_marshalled.push_back(point->x); | 510 points_of_interest_marshalled.push_back(point->x); |
493 points_of_interest_marshalled.push_back(point->y); | 511 points_of_interest_marshalled.push_back(point->y); |
494 } | 512 } |
495 ScopedJavaLocalRef<jfloatArray> points_of_interest = | 513 ScopedJavaLocalRef<jfloatArray> points_of_interest = |
496 base::android::ToJavaFloatArray(env, points_of_interest_marshalled); | 514 base::android::ToJavaFloatArray(env, points_of_interest_marshalled); |
497 | 515 |
498 Java_VideoCapture_setPhotoOptions(env, j_capture_, zoom, | 516 Java_VideoCapture_setPhotoOptions( |
499 static_cast<int>(focus_mode), width, height, | 517 env, j_capture_, zoom, static_cast<int>(focus_mode), |
500 points_of_interest); | 518 static_cast<int>(exposure_mode), width, height, points_of_interest); |
501 | 519 |
502 callback.Run(true); | 520 callback.Run(true); |
503 } | 521 } |
504 | 522 |
505 } // namespace media | 523 } // namespace media |
OLD | NEW |