| Index: webrtc/modules/video_render/ios/video_render_ios_gles20.mm
|
| diff --git a/webrtc/modules/video_render/ios/video_render_ios_gles20.mm b/webrtc/modules/video_render/ios/video_render_ios_gles20.mm
|
| deleted file mode 100644
|
| index 6ad5db8b8cbcbc5b64b34b7cf584a7a4b71612c9..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/video_render/ios/video_render_ios_gles20.mm
|
| +++ /dev/null
|
| @@ -1,285 +0,0 @@
|
| -/*
|
| - * 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.
|
| - */
|
| -
|
| -#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| -#error "This file requires ARC support."
|
| -#endif
|
| -
|
| -#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
| -#include "webrtc/system_wrappers/include/critical_section_wrapper.h"
|
| -#include "webrtc/system_wrappers/include/event_wrapper.h"
|
| -
|
| -using namespace webrtc;
|
| -
|
| -VideoRenderIosGles20::VideoRenderIosGles20(VideoRenderIosView* view,
|
| - bool full_screen,
|
| - int render_id)
|
| - : gles_crit_sec_(CriticalSectionWrapper::CreateCriticalSection()),
|
| - screen_update_event_(0),
|
| - view_(view),
|
| - window_rect_(),
|
| - window_width_(0),
|
| - window_height_(0),
|
| - is_full_screen_(full_screen),
|
| - agl_channels_(),
|
| - z_order_to_channel_(),
|
| - gles_context_([view context]),
|
| - is_rendering_(true) {
|
| - screen_update_thread_.reset(new rtc::PlatformThread(
|
| - ScreenUpdateThreadProc, this, "ScreenUpdateGles20"));
|
| - screen_update_event_ = EventTimerWrapper::Create();
|
| - GetWindowRect(window_rect_);
|
| -}
|
| -
|
| -VideoRenderIosGles20::~VideoRenderIosGles20() {
|
| - // Signal event to exit thread, then delete it
|
| - rtc::PlatformThread* thread_wrapper = screen_update_thread_.release();
|
| -
|
| - if (thread_wrapper) {
|
| - screen_update_event_->Set();
|
| - screen_update_event_->StopTimer();
|
| -
|
| - thread_wrapper->Stop();
|
| - delete thread_wrapper;
|
| - delete screen_update_event_;
|
| - screen_update_event_ = NULL;
|
| - is_rendering_ = FALSE;
|
| - }
|
| -
|
| - // Delete all channels
|
| - std::map<int, VideoRenderIosChannel*>::iterator it = agl_channels_.begin();
|
| - while (it != agl_channels_.end()) {
|
| - delete it->second;
|
| - agl_channels_.erase(it);
|
| - it = agl_channels_.begin();
|
| - }
|
| - agl_channels_.clear();
|
| -
|
| - // Clean the zOrder map
|
| - std::multimap<int, int>::iterator z_it = z_order_to_channel_.begin();
|
| - while (z_it != z_order_to_channel_.end()) {
|
| - z_order_to_channel_.erase(z_it);
|
| - z_it = z_order_to_channel_.begin();
|
| - }
|
| - z_order_to_channel_.clear();
|
| -}
|
| -
|
| -int VideoRenderIosGles20::Init() {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - if (!view_) {
|
| - view_ = [[VideoRenderIosView alloc] init];
|
| - }
|
| -
|
| - if (![view_ createContext]) {
|
| - return -1;
|
| - }
|
| -
|
| - screen_update_thread_->Start();
|
| - screen_update_thread_->SetPriority(rtc::kRealtimePriority);
|
| -
|
| - // Start the event triggering the render process
|
| - unsigned int monitor_freq = 60;
|
| - screen_update_event_->StartTimer(true, 1000 / monitor_freq);
|
| -
|
| - window_width_ = window_rect_.right - window_rect_.left;
|
| - window_height_ = window_rect_.bottom - window_rect_.top;
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -VideoRenderIosChannel* VideoRenderIosGles20::CreateEaglChannel(int channel,
|
| - int z_order,
|
| - float left,
|
| - float top,
|
| - float right,
|
| - float bottom) {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - if (HasChannel(channel)) {
|
| - return NULL;
|
| - }
|
| -
|
| - VideoRenderIosChannel* new_eagl_channel = new VideoRenderIosChannel(view_);
|
| -
|
| - if (new_eagl_channel->SetStreamSettings(z_order, left, top, right, bottom) ==
|
| - -1) {
|
| - return NULL;
|
| - }
|
| -
|
| - agl_channels_[channel] = new_eagl_channel;
|
| - z_order_to_channel_.insert(std::pair<int, int>(z_order, channel));
|
| -
|
| - return new_eagl_channel;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::DeleteEaglChannel(int channel) {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - std::map<int, VideoRenderIosChannel*>::iterator it;
|
| - it = agl_channels_.find(channel);
|
| - if (it != agl_channels_.end()) {
|
| - delete it->second;
|
| - agl_channels_.erase(it);
|
| - } else {
|
| - return -1;
|
| - }
|
| -
|
| - std::multimap<int, int>::iterator z_it = z_order_to_channel_.begin();
|
| - while (z_it != z_order_to_channel_.end()) {
|
| - if (z_it->second == channel) {
|
| - z_order_to_channel_.erase(z_it);
|
| - break;
|
| - }
|
| - z_it++;
|
| - }
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -bool VideoRenderIosGles20::HasChannel(int channel) {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - std::map<int, VideoRenderIosChannel*>::iterator it =
|
| - agl_channels_.find(channel);
|
| -
|
| - if (it != agl_channels_.end()) {
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -// Rendering process
|
| -bool VideoRenderIosGles20::ScreenUpdateThreadProc(void* obj) {
|
| - return static_cast<VideoRenderIosGles20*>(obj)->ScreenUpdateProcess();
|
| -}
|
| -
|
| -bool VideoRenderIosGles20::ScreenUpdateProcess() {
|
| - screen_update_event_->Wait(100);
|
| -
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - if (!is_rendering_) {
|
| - return false;
|
| - }
|
| -
|
| - if (!screen_update_thread_) {
|
| - return false;
|
| - }
|
| -
|
| - if (GetWindowRect(window_rect_) == -1) {
|
| - return true;
|
| - }
|
| -
|
| - if (window_width_ != (window_rect_.right - window_rect_.left) ||
|
| - window_height_ != (window_rect_.bottom - window_rect_.top)) {
|
| - window_width_ = window_rect_.right - window_rect_.left;
|
| - window_height_ = window_rect_.bottom - window_rect_.top;
|
| - }
|
| -
|
| - // Check if there are any updated buffers
|
| - bool updated = false;
|
| -
|
| - std::map<int, VideoRenderIosChannel*>::iterator it = agl_channels_.begin();
|
| - while (it != agl_channels_.end()) {
|
| - VideoRenderIosChannel* agl_channel = it->second;
|
| -
|
| - updated = agl_channel->IsUpdated();
|
| - if (updated) {
|
| - break;
|
| - }
|
| - it++;
|
| - }
|
| -
|
| - if (updated) {
|
| - // At least one buffer has been updated, we need to repaint the texture
|
| - // Loop through all channels starting highest zOrder ending with lowest.
|
| - for (std::multimap<int, int>::reverse_iterator r_it =
|
| - z_order_to_channel_.rbegin();
|
| - r_it != z_order_to_channel_.rend();
|
| - r_it++) {
|
| - int channel_id = r_it->second;
|
| - std::map<int, VideoRenderIosChannel*>::iterator it =
|
| - agl_channels_.find(channel_id);
|
| -
|
| - VideoRenderIosChannel* agl_channel = it->second;
|
| -
|
| - agl_channel->RenderOffScreenBuffer();
|
| - }
|
| -
|
| - [view_ presentFramebuffer];
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::GetWindowRect(Rect& rect) {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - if (!view_) {
|
| - return -1;
|
| - }
|
| -
|
| - CGRect bounds = [view_ bounds];
|
| - rect.top = bounds.origin.y;
|
| - rect.left = bounds.origin.x;
|
| - rect.bottom = bounds.size.height + bounds.origin.y;
|
| - rect.right = bounds.size.width + bounds.origin.x;
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::ChangeWindow(void* new_window) {
|
| - CriticalSectionScoped cs(gles_crit_sec_.get());
|
| -
|
| - view_ = (__bridge VideoRenderIosView*)new_window;
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::StartRender() {
|
| - is_rendering_ = true;
|
| - return 0;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::StopRender() {
|
| - is_rendering_ = false;
|
| - return 0;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::GetScreenResolution(uint& screen_width,
|
| - uint& screen_height) {
|
| - screen_width = [view_ bounds].size.width;
|
| - screen_height = [view_ bounds].size.height;
|
| - return 0;
|
| -}
|
| -
|
| -int VideoRenderIosGles20::SetStreamCropping(const uint stream_id,
|
| - const float left,
|
| - const float top,
|
| - const float right,
|
| - const float bottom) {
|
| - // Check if there are any updated buffers
|
| - // bool updated = false;
|
| - uint counter = 0;
|
| -
|
| - std::map<int, VideoRenderIosChannel*>::iterator it = agl_channels_.begin();
|
| - while (it != agl_channels_.end()) {
|
| - if (counter == stream_id) {
|
| - VideoRenderIosChannel* agl_channel = it->second;
|
| - agl_channel->SetStreamSettings(0, left, top, right, bottom);
|
| - }
|
| - counter++;
|
| - it++;
|
| - }
|
| -
|
| - return 0;
|
| -}
|
|
|