| Index: webrtc/api/android/jni/androidvideocapturer_jni.h
|
| diff --git a/webrtc/api/android/jni/androidvideocapturer_jni.h b/webrtc/api/android/jni/androidvideocapturer_jni.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3d8db6e285b6370c9d07b4fa7c0351b56f05e189
|
| --- /dev/null
|
| +++ b/webrtc/api/android/jni/androidvideocapturer_jni.h
|
| @@ -0,0 +1,101 @@
|
| +/*
|
| + * Copyright 2015 The WebRTC project authors. All Rights Reserved.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license
|
| + * that can be found in the LICENSE file in the root of the source
|
| + * tree. An additional intellectual property rights grant can be found
|
| + * in the file PATENTS. All contributing project authors may
|
| + * be found in the AUTHORS file in the root of the source tree.
|
| + */
|
| +
|
| +#ifndef WEBRTC_API_JAVA_JNI_ANDROIDVIDEOCAPTURER_JNI_H_
|
| +#define WEBRTC_API_JAVA_JNI_ANDROIDVIDEOCAPTURER_JNI_H_
|
| +
|
| +#include <memory>
|
| +#include <string>
|
| +
|
| +#include "webrtc/api/androidvideocapturer.h"
|
| +#include "webrtc/api/android/jni/jni_helpers.h"
|
| +#include "webrtc/base/asyncinvoker.h"
|
| +#include "webrtc/base/constructormagic.h"
|
| +#include "webrtc/base/criticalsection.h"
|
| +#include "webrtc/base/thread_checker.h"
|
| +#include "webrtc/common_video/include/i420_buffer_pool.h"
|
| +
|
| +namespace webrtc_jni {
|
| +
|
| +struct NativeHandleImpl;
|
| +class SurfaceTextureHelper;
|
| +
|
| +// AndroidVideoCapturerJni implements AndroidVideoCapturerDelegate.
|
| +// The purpose of the delegate is to hide the JNI specifics from the C++ only
|
| +// AndroidVideoCapturer.
|
| +class AndroidVideoCapturerJni : public webrtc::AndroidVideoCapturerDelegate {
|
| + public:
|
| + static int SetAndroidObjects(JNIEnv* jni, jobject appliction_context);
|
| +
|
| + AndroidVideoCapturerJni(JNIEnv* jni,
|
| + jobject j_video_capturer,
|
| + jobject j_egl_context);
|
| +
|
| + void Start(int width, int height, int framerate,
|
| + webrtc::AndroidVideoCapturer* capturer) override;
|
| + void Stop() override;
|
| +
|
| + std::vector<cricket::VideoFormat> GetSupportedFormats() override;
|
| +
|
| + // Called from VideoCapturer::NativeObserver on a Java thread.
|
| + void OnCapturerStarted(bool success);
|
| + void OnMemoryBufferFrame(void* video_frame, int length, int width,
|
| + int height, int rotation, int64_t timestamp_ns);
|
| + void OnTextureFrame(int width, int height, int rotation, int64_t timestamp_ns,
|
| + const NativeHandleImpl& handle);
|
| + void OnOutputFormatRequest(int width, int height, int fps);
|
| +
|
| + protected:
|
| + ~AndroidVideoCapturerJni();
|
| +
|
| + private:
|
| + JNIEnv* jni();
|
| +
|
| + // To avoid deducing Args from the 3rd parameter of AsyncCapturerInvoke.
|
| + template <typename T>
|
| + struct Identity {
|
| + typedef T type;
|
| + };
|
| +
|
| + // Helper function to make safe asynchronous calls to |capturer_|. The calls
|
| + // are not guaranteed to be delivered.
|
| + template <typename... Args>
|
| + void AsyncCapturerInvoke(
|
| + const rtc::Location& posted_from,
|
| + void (webrtc::AndroidVideoCapturer::*method)(Args...),
|
| + typename Identity<Args>::type... args);
|
| +
|
| + const ScopedGlobalRef<jobject> j_video_capturer_;
|
| + const ScopedGlobalRef<jclass> j_video_capturer_class_;
|
| + const ScopedGlobalRef<jclass> j_observer_class_;
|
| +
|
| + // Used on the Java thread running the camera.
|
| + webrtc::I420BufferPool pre_scale_pool_;
|
| + webrtc::I420BufferPool post_scale_pool_;
|
| + rtc::scoped_refptr<SurfaceTextureHelper> surface_texture_helper_;
|
| + rtc::ThreadChecker thread_checker_;
|
| +
|
| + // |capturer| is a guaranteed to be a valid pointer between a call to
|
| + // AndroidVideoCapturerDelegate::Start
|
| + // until AndroidVideoCapturerDelegate::Stop.
|
| + rtc::CriticalSection capturer_lock_;
|
| + webrtc::AndroidVideoCapturer* capturer_ GUARDED_BY(capturer_lock_);
|
| + // |invoker_| is used to communicate with |capturer_| on the thread Start() is
|
| + // called on.
|
| + std::unique_ptr<rtc::GuardedAsyncInvoker> invoker_ GUARDED_BY(capturer_lock_);
|
| +
|
| + static jobject application_context_;
|
| +
|
| + RTC_DISALLOW_COPY_AND_ASSIGN(AndroidVideoCapturerJni);
|
| +};
|
| +
|
| +} // namespace webrtc_jni
|
| +
|
| +#endif // WEBRTC_API_JAVA_JNI_ANDROIDVIDEOCAPTURER_JNI_H_
|
|
|