| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 } | 100 } |
| 101 jmethodID m = GetMethodID(jni(), *j_video_capturer_class_, | 101 jmethodID m = GetMethodID(jni(), *j_video_capturer_class_, |
| 102 "stopCapture", "()V"); | 102 "stopCapture", "()V"); |
| 103 jni()->CallVoidMethod(*j_video_capturer_, m); | 103 jni()->CallVoidMethod(*j_video_capturer_, m); |
| 104 CHECK_EXCEPTION(jni()) << "error during VideoCapturer.stopCapture"; | 104 CHECK_EXCEPTION(jni()) << "error during VideoCapturer.stopCapture"; |
| 105 LOG(LS_INFO) << "AndroidVideoCapturerJni stop done"; | 105 LOG(LS_INFO) << "AndroidVideoCapturerJni stop done"; |
| 106 } | 106 } |
| 107 | 107 |
| 108 template <typename... Args> | 108 template <typename... Args> |
| 109 void AndroidVideoCapturerJni::AsyncCapturerInvoke( | 109 void AndroidVideoCapturerJni::AsyncCapturerInvoke( |
| 110 const char* method_name, | 110 const rtc::Location& posted_from, |
| 111 void (webrtc::AndroidVideoCapturer::*method)(Args...), | 111 void (webrtc::AndroidVideoCapturer::*method)(Args...), |
| 112 typename Identity<Args>::type... args) { | 112 typename Identity<Args>::type... args) { |
| 113 rtc::CritScope cs(&capturer_lock_); | 113 rtc::CritScope cs(&capturer_lock_); |
| 114 if (!invoker_) { | 114 if (!invoker_) { |
| 115 LOG(LS_WARNING) << method_name << "() called for closed capturer."; | 115 LOG(LS_WARNING) << posted_from.function_name() |
| 116 << "() called for closed capturer."; |
| 116 return; | 117 return; |
| 117 } | 118 } |
| 118 invoker_->AsyncInvoke<void>(rtc::Bind(method, capturer_, args...)); | 119 invoker_->AsyncInvoke<void>(posted_from, |
| 120 rtc::Bind(method, capturer_, args...)); |
| 119 } | 121 } |
| 120 | 122 |
| 121 std::vector<cricket::VideoFormat> | 123 std::vector<cricket::VideoFormat> |
| 122 AndroidVideoCapturerJni::GetSupportedFormats() { | 124 AndroidVideoCapturerJni::GetSupportedFormats() { |
| 123 JNIEnv* jni = AttachCurrentThreadIfNeeded(); | 125 JNIEnv* jni = AttachCurrentThreadIfNeeded(); |
| 124 jobject j_list_of_formats = jni->CallObjectMethod( | 126 jobject j_list_of_formats = jni->CallObjectMethod( |
| 125 *j_video_capturer_, | 127 *j_video_capturer_, |
| 126 GetMethodID(jni, *j_video_capturer_class_, "getSupportedFormats", | 128 GetMethodID(jni, *j_video_capturer_class_, "getSupportedFormats", |
| 127 "()Ljava/util/List;")); | 129 "()Ljava/util/List;")); |
| 128 CHECK_EXCEPTION(jni) << "error during getSupportedFormats"; | 130 CHECK_EXCEPTION(jni) << "error during getSupportedFormats"; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 155 formats.emplace_back(GetIntField(jni, j_format, j_width_field), | 157 formats.emplace_back(GetIntField(jni, j_format, j_width_field), |
| 156 GetIntField(jni, j_format, j_height_field), | 158 GetIntField(jni, j_format, j_height_field), |
| 157 frame_interval, cricket::FOURCC_NV21); | 159 frame_interval, cricket::FOURCC_NV21); |
| 158 } | 160 } |
| 159 CHECK_EXCEPTION(jni) << "error while extracting formats"; | 161 CHECK_EXCEPTION(jni) << "error while extracting formats"; |
| 160 return formats; | 162 return formats; |
| 161 } | 163 } |
| 162 | 164 |
| 163 void AndroidVideoCapturerJni::OnCapturerStarted(bool success) { | 165 void AndroidVideoCapturerJni::OnCapturerStarted(bool success) { |
| 164 LOG(LS_INFO) << "AndroidVideoCapturerJni capture started: " << success; | 166 LOG(LS_INFO) << "AndroidVideoCapturerJni capture started: " << success; |
| 165 AsyncCapturerInvoke("OnCapturerStarted", | 167 AsyncCapturerInvoke( |
| 166 &webrtc::AndroidVideoCapturer::OnCapturerStarted, | 168 RTC_FROM_HERE, &webrtc::AndroidVideoCapturer::OnCapturerStarted, success); |
| 167 success); | |
| 168 } | 169 } |
| 169 | 170 |
| 170 void AndroidVideoCapturerJni::OnMemoryBufferFrame(void* video_frame, | 171 void AndroidVideoCapturerJni::OnMemoryBufferFrame(void* video_frame, |
| 171 int length, | 172 int length, |
| 172 int width, | 173 int width, |
| 173 int height, | 174 int height, |
| 174 int rotation, | 175 int rotation, |
| 175 int64_t timestamp_ns) { | 176 int64_t timestamp_ns) { |
| 176 RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 || | 177 RTC_DCHECK(rotation == 0 || rotation == 90 || rotation == 180 || |
| 177 rotation == 270); | 178 rotation == 270); |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 NativeHandleImpl(handle.oes_texture_id, matrix)), | 302 NativeHandleImpl(handle.oes_texture_id, matrix)), |
| 302 timestamp_ns, capturer_->apply_rotation() | 303 timestamp_ns, capturer_->apply_rotation() |
| 303 ? webrtc::kVideoRotation_0 | 304 ? webrtc::kVideoRotation_0 |
| 304 : static_cast<webrtc::VideoRotation>(rotation)), | 305 : static_cast<webrtc::VideoRotation>(rotation)), |
| 305 width, height); | 306 width, height); |
| 306 } | 307 } |
| 307 | 308 |
| 308 void AndroidVideoCapturerJni::OnOutputFormatRequest(int width, | 309 void AndroidVideoCapturerJni::OnOutputFormatRequest(int width, |
| 309 int height, | 310 int height, |
| 310 int fps) { | 311 int fps) { |
| 311 AsyncCapturerInvoke("OnOutputFormatRequest", | 312 AsyncCapturerInvoke(RTC_FROM_HERE, |
| 312 &webrtc::AndroidVideoCapturer::OnOutputFormatRequest, | 313 &webrtc::AndroidVideoCapturer::OnOutputFormatRequest, |
| 313 width, height, fps); | 314 width, height, fps); |
| 314 } | 315 } |
| 315 | 316 |
| 316 JNIEnv* AndroidVideoCapturerJni::jni() { return AttachCurrentThreadIfNeeded(); } | 317 JNIEnv* AndroidVideoCapturerJni::jni() { return AttachCurrentThreadIfNeeded(); } |
| 317 | 318 |
| 318 JOW(void, | 319 JOW(void, |
| 319 VideoCapturer_00024NativeObserver_nativeOnByteBufferFrameCaptured) | 320 VideoCapturer_00024NativeObserver_nativeOnByteBufferFrameCaptured) |
| 320 (JNIEnv* jni, jclass, jlong j_capturer, jbyteArray j_frame, jint length, | 321 (JNIEnv* jni, jclass, jlong j_capturer, jbyteArray j_frame, jint length, |
| 321 jint width, jint height, jint rotation, jlong timestamp) { | 322 jint width, jint height, jint rotation, jlong timestamp) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 345 | 346 |
| 346 JOW(void, VideoCapturer_00024NativeObserver_nativeOnOutputFormatRequest) | 347 JOW(void, VideoCapturer_00024NativeObserver_nativeOnOutputFormatRequest) |
| 347 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, | 348 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, |
| 348 jint j_fps) { | 349 jint j_fps) { |
| 349 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; | 350 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; |
| 350 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( | 351 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( |
| 351 j_width, j_height, j_fps); | 352 j_width, j_height, j_fps); |
| 352 } | 353 } |
| 353 | 354 |
| 354 } // namespace webrtc_jni | 355 } // namespace webrtc_jni |
| OLD | NEW |