OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 void (webrtc::AndroidVideoCapturer::*method)(Args...), | 145 void (webrtc::AndroidVideoCapturer::*method)(Args...), |
146 Args... args) { | 146 Args... args) { |
147 rtc::CritScope cs(&capturer_lock_); | 147 rtc::CritScope cs(&capturer_lock_); |
148 if (!invoker_) { | 148 if (!invoker_) { |
149 LOG(LS_WARNING) << method_name << "() called for closed capturer."; | 149 LOG(LS_WARNING) << method_name << "() called for closed capturer."; |
150 return; | 150 return; |
151 } | 151 } |
152 invoker_->AsyncInvoke<void>(rtc::Bind(method, capturer_, args...)); | 152 invoker_->AsyncInvoke<void>(rtc::Bind(method, capturer_, args...)); |
153 } | 153 } |
154 | 154 |
155 void AndroidVideoCapturerJni::ReturnBuffer(int64 time_stamp) { | 155 void AndroidVideoCapturerJni::ReturnBuffer(int64_t time_stamp) { |
156 jmethodID m = GetMethodID(jni(), *j_video_capturer_class_, | 156 jmethodID m = GetMethodID(jni(), *j_video_capturer_class_, |
157 "returnBuffer", "(J)V"); | 157 "returnBuffer", "(J)V"); |
158 jni()->CallVoidMethod(*j_capturer_global_, m, time_stamp); | 158 jni()->CallVoidMethod(*j_capturer_global_, m, time_stamp); |
159 CHECK_EXCEPTION(jni()) << "error during VideoCapturerAndroid.returnBuffer"; | 159 CHECK_EXCEPTION(jni()) << "error during VideoCapturerAndroid.returnBuffer"; |
160 } | 160 } |
161 | 161 |
162 std::string AndroidVideoCapturerJni::GetSupportedFormats() { | 162 std::string AndroidVideoCapturerJni::GetSupportedFormats() { |
163 jmethodID m = | 163 jmethodID m = |
164 GetMethodID(jni(), *j_video_capturer_class_, | 164 GetMethodID(jni(), *j_video_capturer_class_, |
165 "getSupportedFormatsAsJson", "()Ljava/lang/String;"); | 165 "getSupportedFormatsAsJson", "()Ljava/lang/String;"); |
166 jstring j_json_caps = | 166 jstring j_json_caps = |
167 (jstring) jni()->CallObjectMethod(*j_capturer_global_, m); | 167 (jstring) jni()->CallObjectMethod(*j_capturer_global_, m); |
168 CHECK_EXCEPTION(jni()) << "error during supportedFormatsAsJson"; | 168 CHECK_EXCEPTION(jni()) << "error during supportedFormatsAsJson"; |
169 return JavaToStdString(jni(), j_json_caps); | 169 return JavaToStdString(jni(), j_json_caps); |
170 } | 170 } |
171 | 171 |
172 void AndroidVideoCapturerJni::OnCapturerStarted(bool success) { | 172 void AndroidVideoCapturerJni::OnCapturerStarted(bool success) { |
173 LOG(LS_INFO) << "AndroidVideoCapturerJni capture started: " << success; | 173 LOG(LS_INFO) << "AndroidVideoCapturerJni capture started: " << success; |
174 AsyncCapturerInvoke("OnCapturerStarted", | 174 AsyncCapturerInvoke("OnCapturerStarted", |
175 &webrtc::AndroidVideoCapturer::OnCapturerStarted, | 175 &webrtc::AndroidVideoCapturer::OnCapturerStarted, |
176 success); | 176 success); |
177 } | 177 } |
178 | 178 |
179 void AndroidVideoCapturerJni::OnIncomingFrame(void* video_frame, | 179 void AndroidVideoCapturerJni::OnIncomingFrame(void* video_frame, |
180 int length, | 180 int length, |
181 int width, | 181 int width, |
182 int height, | 182 int height, |
183 int rotation, | 183 int rotation, |
184 int64 time_stamp) { | 184 int64_t time_stamp) { |
185 const uint8_t* y_plane = static_cast<uint8_t*>(video_frame); | 185 const uint8_t* y_plane = static_cast<uint8_t*>(video_frame); |
186 // Android guarantees that the stride is a multiple of 16. | 186 // Android guarantees that the stride is a multiple of 16. |
187 // http://developer.android.com/reference/android/hardware/Camera.Parameters.h
tml#setPreviewFormat%28int%29 | 187 // http://developer.android.com/reference/android/hardware/Camera.Parameters.h
tml#setPreviewFormat%28int%29 |
188 int y_stride; | 188 int y_stride; |
189 int uv_stride; | 189 int uv_stride; |
190 webrtc::Calc16ByteAlignedStride(width, &y_stride, &uv_stride); | 190 webrtc::Calc16ByteAlignedStride(width, &y_stride, &uv_stride); |
191 const uint8_t* v_plane = y_plane + y_stride * height; | 191 const uint8_t* v_plane = y_plane + y_stride * height; |
192 const uint8_t* u_plane = | 192 const uint8_t* u_plane = |
193 v_plane + uv_stride * webrtc::AlignInt(height, 2) / 2; | 193 v_plane + uv_stride * webrtc::AlignInt(height, 2) / 2; |
194 | 194 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 | 240 |
241 JOW(void, VideoCapturerAndroid_00024NativeObserver_nativeOnOutputFormatRequest) | 241 JOW(void, VideoCapturerAndroid_00024NativeObserver_nativeOnOutputFormatRequest) |
242 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, | 242 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, |
243 jint j_fps) { | 243 jint j_fps) { |
244 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; | 244 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; |
245 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( | 245 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( |
246 j_width, j_height, j_fps); | 246 j_width, j_height, j_fps); |
247 } | 247 } |
248 | 248 |
249 } // namespace webrtc_jni | 249 } // namespace webrtc_jni |
OLD | NEW |