Home | History | Annotate | Download | only in shared_impl
      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