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

Side by Side Diff: media/capture/content/screen_capture_device_core.cc

Issue 1418263006: Extend VideoCaptureDevice::Client::OnError() to have a tracked_objects::Location param. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/content/screen_capture_device_core.h" 5 #include "media/capture/content/screen_capture_device_core.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 28 matching lines...) Expand all
39 39
40 if (state_ != kIdle) { 40 if (state_ != kIdle) {
41 DVLOG(1) << "Allocate() invoked when not in state Idle."; 41 DVLOG(1) << "Allocate() invoked when not in state Idle.";
42 return; 42 return;
43 } 43 }
44 44
45 if (!(params.requested_format.pixel_format == PIXEL_FORMAT_I420 && 45 if (!(params.requested_format.pixel_format == PIXEL_FORMAT_I420 &&
46 params.requested_format.pixel_storage == PIXEL_STORAGE_CPU) && 46 params.requested_format.pixel_storage == PIXEL_STORAGE_CPU) &&
47 !(params.requested_format.pixel_format == PIXEL_FORMAT_ARGB && 47 !(params.requested_format.pixel_format == PIXEL_FORMAT_ARGB &&
48 params.requested_format.pixel_storage == PIXEL_STORAGE_TEXTURE)) { 48 params.requested_format.pixel_storage == PIXEL_STORAGE_TEXTURE)) {
49 const std::string error_msg = base::StringPrintf( 49 client->OnError(
50 "unsupported format: %s", 50 FROM_HERE,
51 VideoCaptureFormat::ToString(params.requested_format).c_str()); 51 base::StringPrintf(
52 DVLOG(1) << error_msg; 52 "unsupported format: %s",
53 client->OnError(error_msg); 53 VideoCaptureFormat::ToString(params.requested_format).c_str()));
54 return; 54 return;
55 } 55 }
56 56
57 oracle_proxy_ = new ThreadSafeCaptureOracle( 57 oracle_proxy_ = new ThreadSafeCaptureOracle(
58 client.Pass(), params, capture_machine_->IsAutoThrottlingEnabled()); 58 client.Pass(), params, capture_machine_->IsAutoThrottlingEnabled());
59 59
60 capture_machine_->Start( 60 capture_machine_->Start(
61 oracle_proxy_, params, 61 oracle_proxy_, params,
62 base::Bind(&ScreenCaptureDeviceCore::CaptureStarted, AsWeakPtr())); 62 base::Bind(&ScreenCaptureDeviceCore::CaptureStarted, AsWeakPtr()));
63 63
64 TransitionStateTo(kCapturing); 64 TransitionStateTo(kCapturing);
65 } 65 }
66 66
67 void ScreenCaptureDeviceCore::StopAndDeAllocate() { 67 void ScreenCaptureDeviceCore::StopAndDeAllocate() {
68 DCHECK(thread_checker_.CalledOnValidThread()); 68 DCHECK(thread_checker_.CalledOnValidThread());
69 69
70 if (state_ != kCapturing) 70 if (state_ != kCapturing)
71 return; 71 return;
72 72
73 oracle_proxy_->Stop(); 73 oracle_proxy_->Stop();
74 oracle_proxy_ = NULL; 74 oracle_proxy_ = NULL;
75 75
76 TransitionStateTo(kIdle); 76 TransitionStateTo(kIdle);
77 77
78 capture_machine_->Stop(base::Bind(&base::DoNothing)); 78 capture_machine_->Stop(base::Bind(&base::DoNothing));
79 } 79 }
80 80
81 void ScreenCaptureDeviceCore::CaptureStarted(bool success) { 81 void ScreenCaptureDeviceCore::CaptureStarted(bool success) {
82 DCHECK(thread_checker_.CalledOnValidThread()); 82 DCHECK(thread_checker_.CalledOnValidThread());
83 if (!success) { 83 if (!success)
84 std::string reason("Failed to start capture machine."); 84 Error(FROM_HERE, "Failed to start capture machine.");
85 DVLOG(1) << reason;
86 Error(reason);
87 }
88 } 85 }
89 86
90 ScreenCaptureDeviceCore::ScreenCaptureDeviceCore( 87 ScreenCaptureDeviceCore::ScreenCaptureDeviceCore(
91 scoped_ptr<VideoCaptureMachine> capture_machine) 88 scoped_ptr<VideoCaptureMachine> capture_machine)
92 : state_(kIdle), capture_machine_(capture_machine.Pass()) { 89 : state_(kIdle), capture_machine_(capture_machine.Pass()) {
93 DCHECK(capture_machine_.get()); 90 DCHECK(capture_machine_.get());
94 } 91 }
95 92
96 ScreenCaptureDeviceCore::~ScreenCaptureDeviceCore() { 93 ScreenCaptureDeviceCore::~ScreenCaptureDeviceCore() {
97 DCHECK(thread_checker_.CalledOnValidThread()); 94 DCHECK(thread_checker_.CalledOnValidThread());
98 DCHECK_NE(state_, kCapturing); 95 DCHECK_NE(state_, kCapturing);
99 if (capture_machine_) { 96 if (capture_machine_) {
100 capture_machine_->Stop( 97 capture_machine_->Stop(
101 base::Bind(&DeleteCaptureMachine, base::Passed(&capture_machine_))); 98 base::Bind(&DeleteCaptureMachine, base::Passed(&capture_machine_)));
102 } 99 }
103 DVLOG(1) << "ScreenCaptureDeviceCore@" << this << " destroying."; 100 DVLOG(1) << "ScreenCaptureDeviceCore@" << this << " destroying.";
104 } 101 }
105 102
106 void ScreenCaptureDeviceCore::TransitionStateTo(State next_state) { 103 void ScreenCaptureDeviceCore::TransitionStateTo(State next_state) {
107 DCHECK(thread_checker_.CalledOnValidThread()); 104 DCHECK(thread_checker_.CalledOnValidThread());
108 105
109 #ifndef NDEBUG 106 #ifndef NDEBUG
110 static const char* kStateNames[] = { 107 static const char* kStateNames[] = {"Idle", "Capturing", "Error"};
mcasas 2015/10/29 23:06:08 |State| had only 3 entries, so I guess l.111 was s
111 "Idle", "Allocated", "Capturing", "Error"}; 108 static_assert(arraysize(kStateNames) == kLastCaptureState,
109 "Different number of states and textual descriptions");
112 DVLOG(1) << "State change: " << kStateNames[state_] << " --> " 110 DVLOG(1) << "State change: " << kStateNames[state_] << " --> "
113 << kStateNames[next_state]; 111 << kStateNames[next_state];
114 #endif 112 #endif
115 113
116 state_ = next_state; 114 state_ = next_state;
117 } 115 }
118 116
119 void ScreenCaptureDeviceCore::Error(const std::string& reason) { 117 void ScreenCaptureDeviceCore::Error(const tracked_objects::Location& from_here,
118 const std::string& reason) {
120 DCHECK(thread_checker_.CalledOnValidThread()); 119 DCHECK(thread_checker_.CalledOnValidThread());
121 120
122 if (state_ == kIdle) 121 if (state_ == kIdle)
123 return; 122 return;
124 123
125 if (oracle_proxy_.get()) 124 if (oracle_proxy_.get())
126 oracle_proxy_->ReportError(reason); 125 oracle_proxy_->ReportError(from_here, reason);
127 126
128 StopAndDeAllocate(); 127 StopAndDeAllocate();
129 TransitionStateTo(kError); 128 TransitionStateTo(kError);
130 } 129 }
131 130
132 } // namespace media 131 } // namespace media
OLDNEW
« no previous file with comments | « media/capture/content/screen_capture_device_core.h ('k') | media/capture/content/thread_safe_capture_oracle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698