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

Unified Diff: webrtc/api/androidvideotracksource.h

Issue 2127893002: AndroidVideoTrackSource implementation (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@magjed-init
Patch Set: Fix cpplint errors. Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/api/androidvideotracksource.h
diff --git a/webrtc/api/androidvideotracksource.h b/webrtc/api/androidvideotracksource.h
new file mode 100644
index 0000000000000000000000000000000000000000..cc6ead4014f8c8af6d54d153a847196deb080ac7
--- /dev/null
+++ b/webrtc/api/androidvideotracksource.h
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2016 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_ANDROIDVIDEOTRACKSOURCE_H_
+#define WEBRTC_API_ANDROIDVIDEOTRACKSOURCE_H_
+
+#include "webrtc/api/android/jni/native_handle_impl.h"
+#include "webrtc/api/android/jni/surfacetexturehelper_jni.h"
+#include "webrtc/api/mediastreaminterface.h"
+#include "webrtc/api/notifier.h"
+#include "webrtc/base/asyncinvoker.h"
+#include "webrtc/base/checks.h"
+#include "webrtc/base/thread_checker.h"
+#include "webrtc/base/timestampaligner.h"
+#include "webrtc/common_video/include/i420_buffer_pool.h"
+#include "webrtc/media/base/videoadapter.h"
+#include "webrtc/media/base/videobroadcaster.h"
+#include "webrtc/media/base/videosinkinterface.h"
+#include "third_party/libyuv/include/libyuv/convert.h"
+
+namespace webrtc {
+
+class AndroidVideoTrackSource : public Notifier<VideoTrackSourceInterface> {
+ public:
+ AndroidVideoTrackSource(rtc::Thread* signaling_thread,
+ JNIEnv* jni,
+ jobject j_egl_context);
+
+ // Not used on Android.
+ // TODO(sakal/magjed): Try to remove this from the interface.
+ void Stop() override { RTC_NOTREACHED(); };
+ // Not used on Android.
+ // TODO(sakal/magjed): Try to remove this from the interface.
+ void Restart() override { RTC_NOTREACHED(); }
+
+ // Currently, none of the Android implementations are screencast.
+ bool is_screencast() const override { return false; }
+
+ // Indicates that the encoder should denoise video before encoding it.
+ // If it is not set, the default configuration is used which is different
+ // depending on video codec.
+ rtc::Optional<bool> needs_denoising() const override {
+ return rtc::Optional<bool>(false);
+ }
+
+ // Returns false if no stats are available, e.g, for a remote
+ // source, or a source which has not seen its first frame yet.
+ // Should avoid blocking.
+ bool GetStats(Stats* stats) override;
+
+ // Called by the native capture observer
+ void SetState(SourceState state);
+
+ SourceState state() const override { return state_; }
+
+ bool remote() const override { return false; }
+
+ void AddOrUpdateSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink,
+ const rtc::VideoSinkWants& wants) override;
+ void RemoveSink(rtc::VideoSinkInterface<cricket::VideoFrame>* sink) override;
+
+ void OnByteBufferFrameCaptured(const void* frame_data,
+ int length,
+ int width,
+ int height,
+ int rotation,
+ int64_t timestamp_ns);
+
+ void OnTextureFrameCaptured(int width,
+ int height,
+ int rotation,
+ int64_t timestamp_ns,
+ const webrtc_jni::NativeHandleImpl& handle);
+
+ void OnOutputFormatRequest(int width, int height, int fps);
+
+ rtc::scoped_refptr<webrtc_jni::SurfaceTextureHelper>
+ surface_texture_helper() {
+ return surface_texture_helper_;
+ }
+
+ private:
+ rtc::Thread* signaling_thread_;
+ rtc::AsyncInvoker invoker_;
+ rtc::ThreadChecker worker_thread_checker_;
+ rtc::ThreadChecker camera_thread_checker_;
+ rtc::CriticalSection stats_crit_;
+ rtc::Optional<Stats> stats_ GUARDED_BY(stats_crit_);
+ SourceState state_;
+ rtc::VideoBroadcaster broadcaster_;
+ rtc::TimestampAligner timestamp_aligner_;
+ cricket::VideoAdapter video_adapter_;
+ rtc::CriticalSection apply_rotation_crit_;
+ bool apply_rotation_ GUARDED_BY(apply_rotation_crit_);
+ webrtc::I420BufferPool pre_scale_pool_;
+ webrtc::I420BufferPool post_scale_pool_;
+ rtc::scoped_refptr<webrtc_jni::SurfaceTextureHelper> surface_texture_helper_;
+
+ void OnFrame(const cricket::VideoFrame& frame, int width, int height);
+
+ void OnSinkWantsChanged(const rtc::VideoSinkWants& wants);
+
+ bool AdaptFrame(int width,
+ int height,
+ int64_t camera_time_us,
+ int* out_width,
+ int* out_height,
+ int* crop_width,
+ int* crop_height,
+ int* crop_x,
+ int* crop_y,
+ int64_t* translated_camera_time_us);
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_API_ANDROIDVIDEOTRACKSOURCE_H_
« no previous file with comments | « webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java ('k') | webrtc/api/androidvideotracksource.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698