1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_RENDERER_MEDIA_ANDROID_STREAM_TEXTURE_FACTORY_ANDROID_SYNCHRONOUS_IMPL_H_ 6#define CONTENT_RENDERER_MEDIA_ANDROID_STREAM_TEXTURE_FACTORY_ANDROID_SYNCHRONOUS_IMPL_H_ 7 8#include "base/callback.h" 9#include "base/memory/ref_counted.h" 10#include "content/renderer/media/android/stream_texture_factory_android.h" 11 12namespace gfx { 13class SurfaceTexture; 14} 15 16namespace blink { 17class WebGraphicsContext3D; 18} 19 20namespace content { 21 22// Factory for when using synchronous compositor in Android WebView. 23class StreamTextureFactorySynchronousImpl : public StreamTextureFactory { 24 public: 25 class ContextProvider : public base::RefCountedThreadSafe<ContextProvider> { 26 public: 27 virtual scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture( 28 uint32 stream_id) = 0; 29 30 virtual blink::WebGraphicsContext3D* Context3d() = 0; 31 32 protected: 33 friend class base::RefCountedThreadSafe<ContextProvider>; 34 virtual ~ContextProvider() {} 35 }; 36 37 typedef base::Callback<scoped_refptr<ContextProvider>(void)> 38 CreateContextProviderCallback; 39 40 StreamTextureFactorySynchronousImpl( 41 const CreateContextProviderCallback& try_create_callback, 42 int view_id); 43 virtual ~StreamTextureFactorySynchronousImpl(); 44 45 virtual StreamTextureProxy* CreateProxy() OVERRIDE; 46 virtual void EstablishPeer(int32 stream_id, int player_id) OVERRIDE; 47 virtual unsigned CreateStreamTexture( 48 unsigned texture_target, 49 unsigned* texture_id, 50 gpu::Mailbox* texture_mailbox, 51 unsigned* texture_mailbox_sync_point) OVERRIDE; 52 virtual void DestroyStreamTexture(unsigned texture_id) OVERRIDE; 53 virtual void SetStreamTextureSize(int32 stream_id, 54 const gfx::Size& size) OVERRIDE; 55 virtual blink::WebGraphicsContext3D* Context3d() OVERRIDE; 56 57 private: 58 CreateContextProviderCallback create_context_provider_callback_; 59 scoped_refptr<ContextProvider> context_provider_; 60 int view_id_; 61 62 DISALLOW_COPY_AND_ASSIGN(StreamTextureFactorySynchronousImpl); 63}; 64 65} // namespace content 66 67#endif // CONTENT_RENDERER_MEDIA_ANDROID_STREAM_TEXTURE_FACTORY_ANDROID_SYNCHRONOUS_IMPL_H_ 68