1 // Copyright (c) 2012 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 PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ 6 #define PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ 7 8 #include <map> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "ppapi/c/dev/ppb_video_decoder_dev.h" 14 #include "ppapi/shared_impl/resource.h" 15 #include "ppapi/shared_impl/tracked_callback.h" 16 #include "ppapi/thunk/ppb_video_decoder_api.h" 17 18 namespace gpu { 19 namespace gles2 { 20 class GLES2Implementation; 21 } // namespace gles2 22 } // namespace gpu 23 24 namespace ppapi { 25 26 // Implements the logic to set and run callbacks for various video decoder 27 // events. Both the proxy and the renderer implementation share this code. 28 class PPAPI_SHARED_EXPORT PPB_VideoDecoder_Shared 29 : public Resource, 30 NON_EXPORTED_BASE(public thunk::PPB_VideoDecoder_API) { 31 public: 32 explicit PPB_VideoDecoder_Shared(PP_Instance instance); 33 explicit PPB_VideoDecoder_Shared(const HostResource& host_resource); 34 virtual ~PPB_VideoDecoder_Shared(); 35 36 // Resource overrides. 37 virtual thunk::PPB_VideoDecoder_API* AsPPB_VideoDecoder_API() OVERRIDE; 38 39 // PPB_VideoDecoder_API implementation. 40 virtual void Destroy() OVERRIDE; 41 42 protected: 43 bool SetFlushCallback(scoped_refptr<TrackedCallback> callback); 44 bool SetResetCallback(scoped_refptr<TrackedCallback> callback); 45 bool SetBitstreamBufferCallback(int32 bitstream_buffer_id, 46 scoped_refptr<TrackedCallback> callback); 47 48 void RunFlushCallback(int32 result); 49 void RunResetCallback(int32 result); 50 void RunBitstreamBufferCallback(int32 bitstream_buffer_id, int32 result); 51 52 // Tell command buffer to process all commands it has received so far. 53 void FlushCommandBuffer(); 54 55 // Initialize the underlying decoder. 56 void InitCommon(PP_Resource graphics_context, 57 gpu::gles2::GLES2Implementation* gles2_impl); 58 59 private: 60 // Key: bitstream_buffer_id, value: callback to run when bitstream decode is 61 // done. 62 typedef std::map<int32, scoped_refptr<TrackedCallback> > CallbackById; 63 64 scoped_refptr<TrackedCallback> flush_callback_; 65 scoped_refptr<TrackedCallback> reset_callback_; 66 CallbackById bitstream_buffer_callbacks_; 67 68 // The resource ID of the underlying Graphics3D object being used. Used only 69 // for reference counting to keep it alive for the lifetime of |*this|. 70 PP_Resource graphics_context_; 71 72 // Reference to the GLES2Implementation owned by |graphics_context_|. 73 // Graphics3D is guaranteed to be alive for the lifetime of this class. 74 // In the out-of-process case, Graphics3D's gles2_impl() exists in the plugin 75 // process only, so gles2_impl_ is NULL in that case. 76 gpu::gles2::GLES2Implementation* gles2_impl_; 77 78 DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared); 79 }; 80 81 } // namespace ppapi 82 83 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ 84