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

Side by Side Diff: media/capture/video/android/video_capture_device_android.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 (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 "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "jni/VideoCapture_jni.h" 10 #include "jni/VideoCapture_jni.h"
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 got_first_frame_ = false; 61 got_first_frame_ = false;
62 } 62 }
63 63
64 JNIEnv* env = AttachCurrentThread(); 64 JNIEnv* env = AttachCurrentThread();
65 65
66 jboolean ret = Java_VideoCapture_allocate( 66 jboolean ret = Java_VideoCapture_allocate(
67 env, j_capture_.obj(), params.requested_format.frame_size.width(), 67 env, j_capture_.obj(), params.requested_format.frame_size.width(),
68 params.requested_format.frame_size.height(), 68 params.requested_format.frame_size.height(),
69 params.requested_format.frame_rate); 69 params.requested_format.frame_rate);
70 if (!ret) { 70 if (!ret) {
71 SetErrorState("failed to allocate"); 71 SetErrorState(FROM_HERE, "failed to allocate");
72 return; 72 return;
73 } 73 }
74 74
75 // Store current width and height. 75 // Store current width and height.
76 capture_format_.frame_size.SetSize( 76 capture_format_.frame_size.SetSize(
77 Java_VideoCapture_queryWidth(env, j_capture_.obj()), 77 Java_VideoCapture_queryWidth(env, j_capture_.obj()),
78 Java_VideoCapture_queryHeight(env, j_capture_.obj())); 78 Java_VideoCapture_queryHeight(env, j_capture_.obj()));
79 capture_format_.frame_rate = 79 capture_format_.frame_rate =
80 Java_VideoCapture_queryFrameRate(env, j_capture_.obj()); 80 Java_VideoCapture_queryFrameRate(env, j_capture_.obj());
81 capture_format_.pixel_format = GetColorspace(); 81 capture_format_.pixel_format = GetColorspace();
82 DCHECK_NE(capture_format_.pixel_format, media::PIXEL_FORMAT_UNKNOWN); 82 DCHECK_NE(capture_format_.pixel_format, media::PIXEL_FORMAT_UNKNOWN);
83 CHECK(capture_format_.frame_size.GetArea() > 0); 83 CHECK(capture_format_.frame_size.GetArea() > 0);
84 CHECK(!(capture_format_.frame_size.width() % 2)); 84 CHECK(!(capture_format_.frame_size.width() % 2));
85 CHECK(!(capture_format_.frame_size.height() % 2)); 85 CHECK(!(capture_format_.frame_size.height() % 2));
86 86
87 if (capture_format_.frame_rate > 0) { 87 if (capture_format_.frame_rate > 0) {
88 frame_interval_ = base::TimeDelta::FromMicroseconds( 88 frame_interval_ = base::TimeDelta::FromMicroseconds(
89 (base::Time::kMicrosecondsPerSecond + capture_format_.frame_rate - 1) / 89 (base::Time::kMicrosecondsPerSecond + capture_format_.frame_rate - 1) /
90 capture_format_.frame_rate); 90 capture_format_.frame_rate);
91 } 91 }
92 92
93 DVLOG(1) << "VideoCaptureDeviceAndroid::Allocate: queried frame_size=" 93 DVLOG(1) << "VideoCaptureDeviceAndroid::Allocate: queried frame_size="
94 << capture_format_.frame_size.ToString() 94 << capture_format_.frame_size.ToString()
95 << ", frame_rate=" << capture_format_.frame_rate; 95 << ", frame_rate=" << capture_format_.frame_rate;
96 96
97 ret = Java_VideoCapture_startCapture(env, j_capture_.obj()); 97 ret = Java_VideoCapture_startCapture(env, j_capture_.obj());
98 if (!ret) { 98 if (!ret) {
99 SetErrorState("failed to start capture"); 99 SetErrorState(FROM_HERE, "failed to start capture");
100 return; 100 return;
101 } 101 }
102 102
103 { 103 {
104 base::AutoLock lock(lock_); 104 base::AutoLock lock(lock_);
105 state_ = kCapturing; 105 state_ = kCapturing;
106 } 106 }
107 } 107 }
108 108
109 void VideoCaptureDeviceAndroid::StopAndDeAllocate() { 109 void VideoCaptureDeviceAndroid::StopAndDeAllocate() {
110 DVLOG(1) << "VideoCaptureDeviceAndroid::StopAndDeAllocate"; 110 DVLOG(1) << "VideoCaptureDeviceAndroid::StopAndDeAllocate";
111 { 111 {
112 base::AutoLock lock(lock_); 112 base::AutoLock lock(lock_);
113 if (state_ != kCapturing && state_ != kError) 113 if (state_ != kCapturing && state_ != kError)
114 return; 114 return;
115 } 115 }
116 116
117 JNIEnv* env = AttachCurrentThread(); 117 JNIEnv* env = AttachCurrentThread();
118 118
119 jboolean ret = Java_VideoCapture_stopCapture(env, j_capture_.obj()); 119 jboolean ret = Java_VideoCapture_stopCapture(env, j_capture_.obj());
120 if (!ret) { 120 if (!ret) {
121 SetErrorState("failed to stop capture"); 121 SetErrorState(FROM_HERE, "failed to stop capture");
122 return; 122 return;
123 } 123 }
124 124
125 { 125 {
126 base::AutoLock lock(lock_); 126 base::AutoLock lock(lock_);
127 state_ = kIdle; 127 state_ = kIdle;
128 client_.reset(); 128 client_.reset();
129 } 129 }
130 130
131 Java_VideoCapture_deallocate(env, j_capture_.obj()); 131 Java_VideoCapture_deallocate(env, j_capture_.obj());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 capture_format_, rotation, 164 capture_format_, rotation,
165 base::TimeTicks::Now()); 165 base::TimeTicks::Now());
166 } 166 }
167 167
168 env->ReleaseByteArrayElements(data, buffer, JNI_ABORT); 168 env->ReleaseByteArrayElements(data, buffer, JNI_ABORT);
169 } 169 }
170 170
171 void VideoCaptureDeviceAndroid::OnError(JNIEnv* env, 171 void VideoCaptureDeviceAndroid::OnError(JNIEnv* env,
172 jobject obj, 172 jobject obj,
173 jstring message) { 173 jstring message) {
174 SetErrorState(base::android::ConvertJavaStringToUTF8(env, message)); 174 SetErrorState(FROM_HERE,
175 base::android::ConvertJavaStringToUTF8(env, message));
175 } 176 }
176 177
177 VideoPixelFormat VideoCaptureDeviceAndroid::GetColorspace() { 178 VideoPixelFormat VideoCaptureDeviceAndroid::GetColorspace() {
178 JNIEnv* env = AttachCurrentThread(); 179 JNIEnv* env = AttachCurrentThread();
179 const int current_capture_colorspace = 180 const int current_capture_colorspace =
180 Java_VideoCapture_getColorspace(env, j_capture_.obj()); 181 Java_VideoCapture_getColorspace(env, j_capture_.obj());
181 switch (current_capture_colorspace) { 182 switch (current_capture_colorspace) {
182 case ANDROID_IMAGE_FORMAT_YV12: 183 case ANDROID_IMAGE_FORMAT_YV12:
183 return media::PIXEL_FORMAT_YV12; 184 return media::PIXEL_FORMAT_YV12;
184 case ANDROID_IMAGE_FORMAT_YUV_420_888: 185 case ANDROID_IMAGE_FORMAT_YUV_420_888:
185 return media::PIXEL_FORMAT_I420; 186 return media::PIXEL_FORMAT_I420;
186 case ANDROID_IMAGE_FORMAT_NV21: 187 case ANDROID_IMAGE_FORMAT_NV21:
187 return media::PIXEL_FORMAT_NV21; 188 return media::PIXEL_FORMAT_NV21;
188 case ANDROID_IMAGE_FORMAT_UNKNOWN: 189 case ANDROID_IMAGE_FORMAT_UNKNOWN:
189 default: 190 default:
190 return media::PIXEL_FORMAT_UNKNOWN; 191 return media::PIXEL_FORMAT_UNKNOWN;
191 } 192 }
192 } 193 }
193 194
194 void VideoCaptureDeviceAndroid::SetErrorState(const std::string& reason) { 195 void VideoCaptureDeviceAndroid::SetErrorState(
196 const tracked_objects::Location& from_here,
197 const std::string& reason) {
195 { 198 {
196 base::AutoLock lock(lock_); 199 base::AutoLock lock(lock_);
197 state_ = kError; 200 state_ = kError;
198 } 201 }
199 client_->OnError(reason); 202 client_->OnError(from_here, reason);
200 } 203 }
201 204
202 } // namespace media 205 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698