Index: webrtc/modules/video_render/ios/video_render_ios_gles20.h |
diff --git a/webrtc/modules/video_render/ios/video_render_ios_gles20.h b/webrtc/modules/video_render/ios/video_render_ios_gles20.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d4e04e79d7374559a1195c3daa113c4a74557a45 |
--- /dev/null |
+++ b/webrtc/modules/video_render/ios/video_render_ios_gles20.h |
@@ -0,0 +1,87 @@ |
+/* |
+ * Copyright (c) 2013 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_MODULES_VIDEO_RENDER_IOS_VIDEO_RENDER_IOS_GLES20_H_ |
+#define WEBRTC_MODULES_VIDEO_RENDER_IOS_VIDEO_RENDER_IOS_GLES20_H_ |
+ |
+#include <list> |
+#include <map> |
+#include <memory> |
+ |
+#include "webrtc/base/platform_thread.h" |
+#include "webrtc/modules/video_render/ios/video_render_ios_channel.h" |
+#include "webrtc/modules/video_render/ios/video_render_ios_view.h" |
+ |
+namespace webrtc { |
+ |
+class CriticalSectionWrapper; |
+class EventTimerWrapper; |
+ |
+class VideoRenderIosGles20 { |
+ public: |
+ VideoRenderIosGles20(VideoRenderIosView* view, |
+ bool full_screen, |
+ int render_id); |
+ virtual ~VideoRenderIosGles20(); |
+ |
+ int Init(); |
+ VideoRenderIosChannel* CreateEaglChannel(int channel, |
+ int z_order, |
+ float left, |
+ float top, |
+ float right, |
+ float bottom); |
+ int DeleteEaglChannel(int channel); |
+ bool HasChannel(int channel); |
+ bool ScreenUpdateProcess(); |
+ int GetWindowRect(Rect& rect); // NOLINT |
+ |
+ int GetScreenResolution(uint& screen_width, uint& screen_height); // NOLINT |
+ int SetStreamCropping(const uint stream_id, |
+ const float left, |
+ const float top, |
+ const float right, |
+ const float bottom); |
+ |
+ int ChangeWindow(void* new_window); |
+ int StartRender(); |
+ int StopRender(); |
+ |
+ protected: |
+ static bool ScreenUpdateThreadProc(void* obj); |
+ |
+ private: |
+ bool RenderOffScreenBuffers(); |
+ int SwapAndDisplayBuffers(); |
+ |
+ private: |
+ std::unique_ptr<CriticalSectionWrapper> gles_crit_sec_; |
+ EventTimerWrapper* screen_update_event_; |
+ // TODO(pbos): Remove unique_ptr and use member directly. |
+ std::unique_ptr<rtc::PlatformThread> screen_update_thread_; |
+ |
+ VideoRenderIosView* view_; |
+ Rect window_rect_; |
+ int window_width_; |
+ int window_height_; |
+ bool is_full_screen_; |
+ GLint backing_width_; |
+ GLint backing_height_; |
+ GLuint view_renderbuffer_; |
+ GLuint view_framebuffer_; |
+ GLuint depth_renderbuffer_; |
+ std::map<int, VideoRenderIosChannel*> agl_channels_; |
+ std::multimap<int, int> z_order_to_channel_; |
+ EAGLContext* gles_context_; |
+ bool is_rendering_; |
+}; |
+} // namespace webrtc |
+ |
+#endif // WEBRTC_MODULES_VIDEO_RENDER_IOS_VIDEO_RENDER_IOS_GLES20_H_ |