1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_SURFACE_VIEW_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_SURFACE_VIEW_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <jni.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 167e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/android/video_render_android_impl.h" 177e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/include/video_render_defines.h" 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AndroidSurfaceViewChannel : public AndroidStream { 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 25e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org AndroidSurfaceViewChannel(uint32_t streamId, 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JavaVM* jvm, 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoRenderAndroid& renderer, 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject javaRenderObj); 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~AndroidSurfaceViewChannel(); 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org int32_t Init(int32_t zOrder, const float left, const float top, 32e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float right, const float bottom); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //Implement VideoRenderCallback 35e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t RenderFrame(const uint32_t streamId, 36e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org I420VideoFrame& videoFrame); 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //Implements AndroidStream 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void DeliverFrame(JNIEnv* jniEnv); 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 42e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint32_t _id; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper& _renderCritSect; 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 453bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org I420VideoFrame _bufferToRender; 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoRenderAndroid& _renderer; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org JavaVM* _jvm; 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject _javaRenderObj; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject _javaByteBufferObj; 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned char* _directBuffer; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jmethodID _createByteBufferCid; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jmethodID _drawByteBufferCid; 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jmethodID _setCoordinatesCid; 563bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org int _bitmapWidth; 573bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org int _bitmapHeight; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AndroidSurfaceViewRenderer : private VideoRenderAndroid { 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 62e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org AndroidSurfaceViewRenderer(const int32_t id, 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const VideoRenderType videoRenderType, 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void* window, 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const bool fullscreen); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~AndroidSurfaceViewRenderer(); 67e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org int32_t Init(); 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual AndroidStream* CreateAndroidRenderChannel( 69e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org int32_t streamId, 70e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org int32_t zOrder, 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float left, 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float top, 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float right, 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float bottom, 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoRenderAndroid& renderer); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jobject _javaRenderObj; 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org jclass _javaRenderClass; 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_ANDROID_VIDEO_RENDER_ANDROID_SURFACE_VIEW_H_ 84