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

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: reillyg@ comments 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 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
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
OLDNEW
« no previous file with comments | « media/capture/video/android/photo_capabilities.cc ('k') | media/capture/video/fake_video_capture_device.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698