Home | History | Annotate | Download | only in ios
      1 /*
      2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #if !defined(__has_feature) || !__has_feature(objc_arc)
     12 #error "This file requires ARC support."
     13 #endif
     14 
     15 #include "webrtc/modules/video_render/ios/video_render_ios_impl.h"
     16 #include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
     17 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
     18 #include "webrtc/system_wrappers/include/trace.h"
     19 
     20 using namespace webrtc;
     21 
     22 #define IOS_UNSUPPORTED()                                  \
     23   WEBRTC_TRACE(kTraceError,                                \
     24                kTraceVideoRenderer,                        \
     25                id_,                                        \
     26                "%s is not supported on the iOS platform.", \
     27                __FUNCTION__);                              \
     28   return -1;
     29 
     30 VideoRenderIosImpl::VideoRenderIosImpl(const int32_t id,
     31                                        void* window,
     32                                        const bool full_screen)
     33     : id_(id),
     34       ptr_window_(window),
     35       full_screen_(full_screen),
     36       crit_sec_(CriticalSectionWrapper::CreateCriticalSection()) {}
     37 
     38 VideoRenderIosImpl::~VideoRenderIosImpl() {
     39   delete crit_sec_;
     40 }
     41 
     42 int32_t VideoRenderIosImpl::Init() {
     43   CriticalSectionScoped cs(crit_sec_);
     44 
     45   ptr_ios_render_.reset(new VideoRenderIosGles20(
     46       (__bridge VideoRenderIosView*)ptr_window_, full_screen_, id_));
     47 
     48   return ptr_ios_render_->Init();
     49   ;
     50 }
     51 
     52 int32_t VideoRenderIosImpl::ChangeWindow(void* window) {
     53   CriticalSectionScoped cs(crit_sec_);
     54   if (window == NULL) {
     55     return -1;
     56   }
     57 
     58   ptr_window_ = window;
     59 
     60   return ptr_ios_render_->ChangeWindow(ptr_window_);
     61 }
     62 
     63 VideoRenderCallback* VideoRenderIosImpl::AddIncomingRenderStream(
     64     const uint32_t stream_id,
     65     const uint32_t z_order,
     66     const float left,
     67     const float top,
     68     const float right,
     69     const float bottom) {
     70   CriticalSectionScoped cs(crit_sec_);
     71   if (!ptr_window_) {
     72     return NULL;
     73   }
     74 
     75   return ptr_ios_render_->CreateEaglChannel(
     76       stream_id, z_order, left, top, right, bottom);
     77 }
     78 
     79 int32_t VideoRenderIosImpl::DeleteIncomingRenderStream(
     80     const uint32_t stream_id) {
     81   CriticalSectionScoped cs(crit_sec_);
     82 
     83   return ptr_ios_render_->DeleteEaglChannel(stream_id);
     84 }
     85 
     86 int32_t VideoRenderIosImpl::GetIncomingRenderStreamProperties(
     87     const uint32_t stream_id,
     88     uint32_t& z_order,
     89     float& left,
     90     float& top,
     91     float& right,
     92     float& bottom) const {
     93   IOS_UNSUPPORTED();
     94 }
     95 
     96 int32_t VideoRenderIosImpl::StartRender() {
     97   return ptr_ios_render_->StartRender();
     98 }
     99 
    100 int32_t VideoRenderIosImpl::StopRender() {
    101   return ptr_ios_render_->StopRender();
    102 }
    103 
    104 VideoRenderType VideoRenderIosImpl::RenderType() { return kRenderiOS; }
    105 
    106 RawVideoType VideoRenderIosImpl::PerferedVideoType() { return kVideoI420; }
    107 
    108 bool VideoRenderIosImpl::FullScreen() { IOS_UNSUPPORTED(); }
    109 
    110 int32_t VideoRenderIosImpl::GetGraphicsMemory(
    111     uint64_t& totalGraphicsMemory,
    112     uint64_t& availableGraphicsMemory) const {
    113   IOS_UNSUPPORTED();
    114 }
    115 
    116 int32_t VideoRenderIosImpl::GetScreenResolution(uint32_t& screenWidth,
    117                                                 uint32_t& screenHeight) const {
    118   return ptr_ios_render_->GetScreenResolution(screenWidth, screenHeight);
    119 }
    120 
    121 uint32_t VideoRenderIosImpl::RenderFrameRate(const uint32_t streamId) {
    122   IOS_UNSUPPORTED();
    123 }
    124 
    125 int32_t VideoRenderIosImpl::SetStreamCropping(const uint32_t streamId,
    126                                               const float left,
    127                                               const float top,
    128                                               const float right,
    129                                               const float bottom) {
    130   return ptr_ios_render_->SetStreamCropping(streamId, left, top, right, bottom);
    131 }
    132 
    133 int32_t VideoRenderIosImpl::ConfigureRenderer(const uint32_t streamId,
    134                                               const unsigned int zOrder,
    135                                               const float left,
    136                                               const float top,
    137                                               const float right,
    138                                               const float bottom) {
    139   IOS_UNSUPPORTED();
    140 }
    141 
    142 int32_t VideoRenderIosImpl::SetTransparentBackground(const bool enable) {
    143   IOS_UNSUPPORTED();
    144 }
    145 
    146 int32_t VideoRenderIosImpl::SetText(const uint8_t textId,
    147                                     const uint8_t* text,
    148                                     const int32_t textLength,
    149                                     const uint32_t textColorRef,
    150                                     const uint32_t backgroundColorRef,
    151                                     const float left,
    152                                     const float top,
    153                                     const float right,
    154                                     const float bottom) {
    155   IOS_UNSUPPORTED();
    156 }
    157 
    158 int32_t VideoRenderIosImpl::SetBitmap(const void* bitMap,
    159                                       const uint8_t pictureId,
    160                                       const void* colorKey,
    161                                       const float left,
    162                                       const float top,
    163                                       const float right,
    164                                       const float bottom) {
    165   IOS_UNSUPPORTED();
    166 }
    167 
    168 int32_t VideoRenderIosImpl::FullScreenRender(void* window, const bool enable) {
    169   IOS_UNSUPPORTED();
    170 }
    171