• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 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 #ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_IMPL_H_
12 #define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_IMPL_H_
13 
14 #include <jni.h>
15 
16 #include <map>
17 
18 #include "webrtc/base/platform_thread.h"
19 #include "webrtc/modules/video_render/i_video_render.h"
20 
21 
22 namespace webrtc {
23 
24 //#define ANDROID_LOG
25 
26 class CriticalSectionWrapper;
27 class EventWrapper;
28 
29 // The object a module user uses to send new frames to the java renderer
30 // Base class for android render streams.
31 
32 class AndroidStream : public VideoRenderCallback {
33  public:
34   // DeliverFrame is called from a thread connected to the Java VM.
35   // Used for Delivering frame for rendering.
36   virtual void DeliverFrame(JNIEnv* jniEnv)=0;
37 
~AndroidStream()38   virtual ~AndroidStream() {};
39 };
40 
41 class VideoRenderAndroid: IVideoRender {
42  public:
43   VideoRenderAndroid(const int32_t id,
44                      const VideoRenderType videoRenderType,
45                      void* window,
46                      const bool fullscreen);
47 
48   virtual ~VideoRenderAndroid();
49 
50   virtual int32_t Init()=0;
51 
52   virtual int32_t ChangeWindow(void* window);
53 
54   virtual VideoRenderCallback* AddIncomingRenderStream(
55       const uint32_t streamId,
56       const uint32_t zOrder,
57       const float left, const float top,
58       const float right, const float bottom);
59 
60   virtual int32_t DeleteIncomingRenderStream(
61       const uint32_t streamId);
62 
63   virtual int32_t GetIncomingRenderStreamProperties(
64       const uint32_t streamId,
65       uint32_t& zOrder,
66       float& left, float& top,
67       float& right, float& bottom) const;
68 
69   virtual int32_t StartRender();
70 
71   virtual int32_t StopRender();
72 
73   virtual void ReDraw();
74 
75   // Properties
76 
77   virtual VideoRenderType RenderType();
78 
79   virtual RawVideoType PerferedVideoType();
80 
81   virtual bool FullScreen();
82 
83   virtual int32_t GetGraphicsMemory(
84       uint64_t& totalGraphicsMemory,
85       uint64_t& availableGraphicsMemory) const;
86 
87   virtual int32_t GetScreenResolution(
88       uint32_t& screenWidth,
89       uint32_t& screenHeight) const;
90 
91   virtual uint32_t RenderFrameRate(const uint32_t streamId);
92 
93   virtual int32_t SetStreamCropping(const uint32_t streamId,
94                                     const float left, const float top,
95                                     const float right, const float bottom);
96 
97   virtual int32_t SetTransparentBackground(const bool enable);
98 
99   virtual int32_t ConfigureRenderer(const uint32_t streamId,
100                                     const unsigned int zOrder,
101                                     const float left, const float top,
102                                     const float right, const float bottom);
103 
104   virtual int32_t SetText(const uint8_t textId,
105                           const uint8_t* text,
106                           const int32_t textLength,
107                           const uint32_t textColorRef,
108                           const uint32_t backgroundColorRef,
109                           const float left, const float top,
110                           const float rigth, const float bottom);
111 
112   virtual int32_t SetBitmap(const void* bitMap,
113                             const uint8_t pictureId,
114                             const void* colorKey, const float left,
115                             const float top, const float right,
116                             const float bottom);
117   static JavaVM* g_jvm;
118 
119  protected:
120   virtual AndroidStream* CreateAndroidRenderChannel(
121       int32_t streamId,
122       int32_t zOrder,
123       const float left,
124       const float top,
125       const float right,
126       const float bottom,
127       VideoRenderAndroid& renderer) = 0;
128 
129   int32_t _id;
130   CriticalSectionWrapper& _critSect;
131   VideoRenderType _renderType;
132   jobject _ptrWindow;
133 
134  private:
135   static bool JavaRenderThreadFun(void* obj);
136   bool JavaRenderThreadProcess();
137 
138   // Map with streams to render.
139   typedef std::map<int32_t, AndroidStream*> AndroidStreamMap;
140   AndroidStreamMap _streamsMap;
141   // True if the _javaRenderThread thread shall be detached from the JVM.
142   bool _javaShutDownFlag;
143   EventWrapper& _javaShutdownEvent;
144   EventWrapper& _javaRenderEvent;
145   int64_t _lastJavaRenderEvent;
146   JNIEnv* _javaRenderJniEnv; // JNIEnv for the java render thread.
147   // TODO(pbos): Remove scoped_ptr and use the member directly.
148   rtc::scoped_ptr<rtc::PlatformThread> _javaRenderThread;
149 };
150 
151 }  // namespace webrtc
152 
153 #endif  // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_IMPL_H_
154