Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(364)

Side by Side Diff: media/capture/video/android/video_capture_device_android.cc

Issue 2270563006: ImageCapture: support exposure mode configuration (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed todo/refs to https://github.com/w3c/mediacapture-image/pull/51, closed Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 if (android_mode == PhotoCapabilities::AndroidMeteringMode::FIXED)
37 return mojom::MeteringMode::MANUAL;
38 else if (android_mode == PhotoCapabilities::AndroidMeteringMode::SINGLE_SHOT)
39 return mojom::MeteringMode::SINGLE_SHOT;
40 else if (android_mode == PhotoCapabilities::AndroidMeteringMode::CONTINUOUS)
41 return mojom::MeteringMode::CONTINUOUS;
42 return mojom::MeteringMode::UNAVAILABLE;
43 }
44
45 PhotoCapabilities::AndroidMeteringMode ToAndroidMeteringMode(
46 mojom::MeteringMode mojom_mode) {
47 if (mojom_mode == mojom::MeteringMode::MANUAL)
48 return PhotoCapabilities::AndroidMeteringMode::FIXED;
49 else if (mojom_mode == mojom::MeteringMode::SINGLE_SHOT)
50 return PhotoCapabilities::AndroidMeteringMode::SINGLE_SHOT;
51 else if (mojom_mode == mojom::MeteringMode::CONTINUOUS)
52 return PhotoCapabilities::AndroidMeteringMode::CONTINUOUS;
53 return PhotoCapabilities::AndroidMeteringMode::UNAVAILABLE;
54 }
Reilly Grant (use Gerrit) 2016/08/24 18:14:03 Use switch statements for these functions?
mcasas 2016/08/24 18:36:23 Ooops yes, done.
55
56 } // anonymous namespace
57
32 // static 58 // static
33 bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) { 59 bool VideoCaptureDeviceAndroid::RegisterVideoCaptureDevice(JNIEnv* env) {
34 return RegisterNativesImpl(env); 60 return RegisterNativesImpl(env);
35 } 61 }
36 62
37 VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid( 63 VideoCaptureDeviceAndroid::VideoCaptureDeviceAndroid(
38 const VideoCaptureDeviceDescriptor& device_descriptor) 64 const VideoCaptureDeviceDescriptor& device_descriptor)
39 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), 65 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()),
40 state_(kIdle), 66 state_(kIdle),
41 got_first_frame_(false), 67 got_first_frame_(false),
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 photo_capabilities->height->max = caps.getMaxHeight(); 453 photo_capabilities->height->max = caps.getMaxHeight();
428 photo_capabilities->height->min = caps.getMinHeight(); 454 photo_capabilities->height->min = caps.getMinHeight();
429 photo_capabilities->width = mojom::Range::New(); 455 photo_capabilities->width = mojom::Range::New();
430 photo_capabilities->width->current = caps.getCurrentWidth(); 456 photo_capabilities->width->current = caps.getCurrentWidth();
431 photo_capabilities->width->max = caps.getMaxWidth(); 457 photo_capabilities->width->max = caps.getMaxWidth();
432 photo_capabilities->width->min = caps.getMinWidth(); 458 photo_capabilities->width->min = caps.getMinWidth();
433 photo_capabilities->zoom = mojom::Range::New(); 459 photo_capabilities->zoom = mojom::Range::New();
434 photo_capabilities->zoom->current = caps.getCurrentZoom(); 460 photo_capabilities->zoom->current = caps.getCurrentZoom();
435 photo_capabilities->zoom->max = caps.getMaxZoom(); 461 photo_capabilities->zoom->max = caps.getMaxZoom();
436 photo_capabilities->zoom->min = caps.getMinZoom(); 462 photo_capabilities->zoom->min = caps.getMinZoom();
437 switch (caps.getFocusMode()) { 463 photo_capabilities->focus_mode = ToMojomMeteringMode(caps.getFocusMode());
438 case PhotoCapabilities::AndroidFocusMode::UNAVAILABLE: 464 photo_capabilities->exposure_mode =
439 photo_capabilities->focus_mode = mojom::FocusMode::UNAVAILABLE; 465 ToMojomMeteringMode(caps.getExposureMode());
440 break; 466
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)); 467 callback.Run(std::move(photo_capabilities));
452 } 468 }
453 469
454 void VideoCaptureDeviceAndroid::DoSetPhotoOptions( 470 void VideoCaptureDeviceAndroid::DoSetPhotoOptions(
455 mojom::PhotoSettingsPtr settings, 471 mojom::PhotoSettingsPtr settings,
456 SetPhotoOptionsCallback callback) { 472 SetPhotoOptionsCallback callback) {
457 DCHECK(main_task_runner_->BelongsToCurrentThread()); 473 DCHECK(main_task_runner_->BelongsToCurrentThread());
458 #if DCHECK_IS_ON() 474 #if DCHECK_IS_ON()
459 { 475 {
460 base::AutoLock lock(lock_); 476 base::AutoLock lock(lock_);
461 DCHECK_EQ(kConfigured, state_); 477 DCHECK_EQ(kConfigured, state_);
462 DCHECK(got_first_frame_); 478 DCHECK(got_first_frame_);
463 } 479 }
464 #endif 480 #endif
465 JNIEnv* env = AttachCurrentThread(); 481 JNIEnv* env = AttachCurrentThread();
466 482
467 const int width = settings->has_width ? settings->width : 0; 483 const int width = settings->has_width ? settings->width : 0;
468 const int height = settings->has_height ? settings->height : 0; 484 const int height = settings->has_height ? settings->height : 0;
469 const int zoom = settings->has_zoom ? settings->zoom : 0; 485 const int zoom = settings->has_zoom ? settings->zoom : 0;
470 486
471 PhotoCapabilities::AndroidFocusMode focus_mode = 487 const PhotoCapabilities::AndroidMeteringMode focus_mode =
472 PhotoCapabilities::AndroidFocusMode::UNAVAILABLE; 488 settings->has_focus_mode
473 if (settings->has_focus_mode) { 489 ? ToAndroidMeteringMode(settings->focus_mode)
474 switch (settings->focus_mode) { 490 : PhotoCapabilities::AndroidMeteringMode::NOT_SET;
475 case mojom::FocusMode::MANUAL: 491
476 focus_mode = PhotoCapabilities::AndroidFocusMode::FIXED; 492 const PhotoCapabilities::AndroidMeteringMode exposure_mode =
477 break; 493 settings->has_exposure_mode
478 case mojom::FocusMode::SINGLE_SHOT: 494 ? ToAndroidMeteringMode(settings->exposure_mode)
479 focus_mode = PhotoCapabilities::AndroidFocusMode::SINGLE_SHOT; 495 : 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 496
490 std::vector<float> points_of_interest_marshalled; 497 std::vector<float> points_of_interest_marshalled;
491 for (const auto& point : settings->points_of_interest) { 498 for (const auto& point : settings->points_of_interest) {
492 points_of_interest_marshalled.push_back(point->x); 499 points_of_interest_marshalled.push_back(point->x);
493 points_of_interest_marshalled.push_back(point->y); 500 points_of_interest_marshalled.push_back(point->y);
494 } 501 }
495 ScopedJavaLocalRef<jfloatArray> points_of_interest = 502 ScopedJavaLocalRef<jfloatArray> points_of_interest =
496 base::android::ToJavaFloatArray(env, points_of_interest_marshalled); 503 base::android::ToJavaFloatArray(env, points_of_interest_marshalled);
497 504
498 Java_VideoCapture_setPhotoOptions(env, j_capture_, zoom, 505 Java_VideoCapture_setPhotoOptions(
499 static_cast<int>(focus_mode), width, height, 506 env, j_capture_, zoom, static_cast<int>(focus_mode),
500 points_of_interest); 507 static_cast<int>(exposure_mode), width, height, points_of_interest);
501 508
502 callback.Run(true); 509 callback.Run(true);
503 } 510 }
504 511
505 } // namespace media 512 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698