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 28 matching lines...) Expand all Loading... |
39 int AndroidVideoCapturerJni::SetAndroidObjects(JNIEnv* jni, | 39 int AndroidVideoCapturerJni::SetAndroidObjects(JNIEnv* jni, |
40 jobject appliction_context) { | 40 jobject appliction_context) { |
41 if (application_context_) { | 41 if (application_context_) { |
42 jni->DeleteGlobalRef(application_context_); | 42 jni->DeleteGlobalRef(application_context_); |
43 } | 43 } |
44 application_context_ = NewGlobalRef(jni, appliction_context); | 44 application_context_ = NewGlobalRef(jni, appliction_context); |
45 | 45 |
46 return 0; | 46 return 0; |
47 } | 47 } |
48 | 48 |
49 // static | |
50 rtc::scoped_refptr<AndroidVideoCapturerJni> | |
51 AndroidVideoCapturerJni::Create(JNIEnv* jni, | |
52 jobject j_video_capture, | |
53 jstring device_name) { | |
54 LOG(LS_INFO) << "AndroidVideoCapturerJni::Create"; | |
55 rtc::scoped_refptr<AndroidVideoCapturerJni> capturer( | |
56 new rtc::RefCountedObject<AndroidVideoCapturerJni>(jni, j_video_capture)); | |
57 | |
58 if (capturer->Init(device_name)) { | |
59 return capturer; | |
60 } | |
61 LOG(LS_ERROR) << "AndroidVideoCapturerJni init fails"; | |
62 return nullptr; | |
63 } | |
64 | |
65 AndroidVideoCapturerJni::AndroidVideoCapturerJni(JNIEnv* jni, | 49 AndroidVideoCapturerJni::AndroidVideoCapturerJni(JNIEnv* jni, |
66 jobject j_video_capturer) | 50 jobject j_video_capturer) |
67 : j_capturer_global_(jni, j_video_capturer), | 51 : j_capturer_global_(jni, j_video_capturer), |
68 j_video_capturer_class_( | 52 j_video_capturer_class_( |
69 jni, FindClass(jni, "org/webrtc/VideoCapturerAndroid")), | 53 jni, FindClass(jni, "org/webrtc/VideoCapturerAndroid")), |
70 j_observer_class_( | 54 j_observer_class_( |
71 jni, | 55 jni, |
72 FindClass(jni, | 56 FindClass(jni, |
73 "org/webrtc/VideoCapturerAndroid$NativeObserver")), | 57 "org/webrtc/VideoCapturerAndroid$NativeObserver")), |
74 capturer_(nullptr) { | 58 capturer_(nullptr) { |
75 LOG(LS_INFO) << "AndroidVideoCapturerJni ctor"; | 59 LOG(LS_INFO) << "AndroidVideoCapturerJni ctor"; |
76 thread_checker_.DetachFromThread(); | 60 thread_checker_.DetachFromThread(); |
77 } | 61 } |
78 | 62 |
79 bool AndroidVideoCapturerJni::Init(jstring device_name) { | |
80 const jmethodID m(GetMethodID( | |
81 jni(), *j_video_capturer_class_, "init", "(Ljava/lang/String;)Z")); | |
82 if (!jni()->CallBooleanMethod(*j_capturer_global_, m, device_name)) { | |
83 return false; | |
84 } | |
85 CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; | |
86 return true; | |
87 } | |
88 | |
89 AndroidVideoCapturerJni::~AndroidVideoCapturerJni() { | 63 AndroidVideoCapturerJni::~AndroidVideoCapturerJni() { |
90 LOG(LS_INFO) << "AndroidVideoCapturerJni dtor"; | 64 LOG(LS_INFO) << "AndroidVideoCapturerJni dtor"; |
91 jni()->CallVoidMethod( | 65 jni()->CallVoidMethod( |
92 *j_capturer_global_, | 66 *j_capturer_global_, |
93 GetMethodID(jni(), *j_video_capturer_class_, "release", "()V")); | 67 GetMethodID(jni(), *j_video_capturer_class_, "release", "()V")); |
94 CHECK_EXCEPTION(jni()) << "error during VideoCapturerAndroid.release()"; | 68 CHECK_EXCEPTION(jni()) << "error during VideoCapturerAndroid.release()"; |
95 } | 69 } |
96 | 70 |
97 void AndroidVideoCapturerJni::Start(int width, int height, int framerate, | 71 void AndroidVideoCapturerJni::Start(int width, int height, int framerate, |
98 webrtc::AndroidVideoCapturer* capturer) { | 72 webrtc::AndroidVideoCapturer* capturer) { |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 } | 213 } |
240 | 214 |
241 JOW(void, VideoCapturerAndroid_00024NativeObserver_nativeOnOutputFormatRequest) | 215 JOW(void, VideoCapturerAndroid_00024NativeObserver_nativeOnOutputFormatRequest) |
242 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, | 216 (JNIEnv* jni, jclass, jlong j_capturer, jint j_width, jint j_height, |
243 jint j_fps) { | 217 jint j_fps) { |
244 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; | 218 LOG(LS_INFO) << "NativeObserver_nativeOnOutputFormatRequest"; |
245 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( | 219 reinterpret_cast<AndroidVideoCapturerJni*>(j_capturer)->OnOutputFormatRequest( |
246 j_width, j_height, j_fps); | 220 j_width, j_height, j_fps); |
247 } | 221 } |
248 | 222 |
| 223 JOW(jlong, VideoCapturerAndroid_nativeCreateVideoCapturer) |
| 224 (JNIEnv* jni, jclass, jobject j_video_capturer) { |
| 225 rtc::scoped_refptr<webrtc::AndroidVideoCapturerDelegate> delegate = |
| 226 new rtc::RefCountedObject<AndroidVideoCapturerJni>(jni, j_video_capturer); |
| 227 rtc::scoped_ptr<cricket::VideoCapturer> capturer( |
| 228 new webrtc::AndroidVideoCapturer(delegate)); |
| 229 // Caller takes ownership of the cricket::VideoCapturer* pointer. |
| 230 return jlongFromPointer(capturer.release()); |
| 231 } |
| 232 |
249 } // namespace webrtc_jni | 233 } // namespace webrtc_jni |
OLD | NEW |