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_dev_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_Dev_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_Dev_API* AsPPB_VideoDecoder_Dev_API() 38 OVERRIDE; 39 40 // PPB_VideoDecoder_Dev_API implementation. 41 virtual void Destroy() OVERRIDE; 42 43 protected: 44 bool SetFlushCallback(scoped_refptr<TrackedCallback> callback); 45 bool SetResetCallback(scoped_refptr<TrackedCallback> callback); 46 bool SetBitstreamBufferCallback(int32 bitstream_buffer_id, 47 scoped_refptr<TrackedCallback> callback); 48 49 void RunFlushCallback(int32 result); 50 void RunResetCallback(int32 result); 51 void RunBitstreamBufferCallback(int32 bitstream_buffer_id, int32 result); 52 53 // Tell command buffer to process all commands it has received so far. 54 void FlushCommandBuffer(); 55 56 // Initialize the underlying decoder. 57 void InitCommon(PP_Resource graphics_context, 58 gpu::gles2::GLES2Implementation* gles2_impl); 59 60 private: 61 // Key: bitstream_buffer_id, value: callback to run when bitstream decode is 62 // done. 63 typedef std::map<int32, scoped_refptr<TrackedCallback> > CallbackById; 64 65 scoped_refptr<TrackedCallback> flush_callback_; 66 scoped_refptr<TrackedCallback> reset_callback_; 67 CallbackById bitstream_buffer_callbacks_; 68 69 // The resource ID of the underlying Graphics3D object being used. Used only 70 // for reference counting to keep it alive for the lifetime of |*this|. 71 PP_Resource graphics_context_; 72 73 // Reference to the GLES2Implementation owned by |graphics_context_|. 74 // Graphics3D is guaranteed to be alive for the lifetime of this class. 75 // In the out-of-process case, Graphics3D's gles2_impl() exists in the plugin 76 // process only, so gles2_impl_ is NULL in that case. 77 gpu::gles2::GLES2Implementation* gles2_impl_; 78 79 DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared); 80 }; 81 82 } // namespace ppapi 83 84 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ 85