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

Side by Side Diff: media/capture/video/chromeos/display_rotation_observer.cc

Issue 2837273004: media: add video capture device for ARC++ camera HAL v3 (Closed)
Patch Set: RELAND: media: add video capture device for ARC++ camera HAL v3 Created 3 years, 6 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/capture/video/chromeos/display_rotation_observer.h"
6
7 #include <utility>
8
9 #include "base/bind.h"
10 #include "base/threading/thread_task_runner_handle.h"
11
12 namespace media {
13
14 ScreenObserverDelegate::ScreenObserverDelegate(
15 DisplayRotationObserver* observer,
16 scoped_refptr<base::SingleThreadTaskRunner> display_task_runner)
17 : observer_(observer),
18 display_task_runner_(std::move(display_task_runner)),
19 delegate_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
20 display_task_runner_->PostTask(
21 FROM_HERE,
22 base::Bind(&ScreenObserverDelegate::AddObserverOnDisplayThread, this));
23 }
24
25 void ScreenObserverDelegate::RemoveObserver() {
26 DCHECK(delegate_task_runner_->BelongsToCurrentThread());
27 observer_ = NULL;
28 display_task_runner_->PostTask(
29 FROM_HERE,
30 base::Bind(&ScreenObserverDelegate::RemoveObserverOnDisplayThread, this));
31 }
32
33 ScreenObserverDelegate::~ScreenObserverDelegate() {
34 DCHECK(!observer_);
35 }
36
37 void ScreenObserverDelegate::OnDisplayAdded(
38 const display::Display& /*new_display*/) {}
39
40 void ScreenObserverDelegate::OnDisplayRemoved(
41 const display::Display& /*old_display*/) {}
42
43 void ScreenObserverDelegate::OnDisplayMetricsChanged(
44 const display::Display& display,
45 uint32_t metrics) {
46 DCHECK(display_task_runner_->BelongsToCurrentThread());
47 if (!(metrics & DISPLAY_METRIC_ROTATION))
48 return;
49 SendDisplayRotation(display);
50 }
51
52 void ScreenObserverDelegate::AddObserverOnDisplayThread() {
53 DCHECK(display_task_runner_->BelongsToCurrentThread());
54 display::Screen* screen = display::Screen::GetScreen();
55 if (screen) {
56 screen->AddObserver(this);
57 SendDisplayRotation(screen->GetPrimaryDisplay());
58 }
59 }
60
61 void ScreenObserverDelegate::RemoveObserverOnDisplayThread() {
62 DCHECK(display_task_runner_->BelongsToCurrentThread());
63 display::Screen* screen = display::Screen::GetScreen();
64 if (screen) {
65 screen->RemoveObserver(this);
66 }
67 }
68
69 // Post the screen rotation change from the UI thread to capture thread
70 void ScreenObserverDelegate::SendDisplayRotation(
71 const display::Display& display) {
72 DCHECK(display_task_runner_->BelongsToCurrentThread());
73 delegate_task_runner_->PostTask(
74 FROM_HERE,
75 base::Bind(&ScreenObserverDelegate::SendDisplayRotationOnCaptureThread,
76 this, display));
77 }
78
79 void ScreenObserverDelegate::SendDisplayRotationOnCaptureThread(
80 const display::Display& display) {
81 DCHECK(delegate_task_runner_->BelongsToCurrentThread());
82 if (observer_)
83 observer_->SetDisplayRotation(display);
84 }
85
86 } // namespace media
OLDNEW
« no previous file with comments | « media/capture/video/chromeos/display_rotation_observer.h ('k') | media/capture/video/chromeos/mock_camera_module.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698