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.
5 #ifndef PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_
6 #define PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_
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"
20 class GLES2Implementation
;
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
30 NON_EXPORTED_BASE(public thunk::PPB_VideoDecoder_Dev_API
) {
32 explicit PPB_VideoDecoder_Shared(PP_Instance instance
);
33 explicit PPB_VideoDecoder_Shared(const HostResource
& host_resource
);
34 virtual ~PPB_VideoDecoder_Shared();
36 // Resource overrides.
37 virtual thunk::PPB_VideoDecoder_Dev_API
* AsPPB_VideoDecoder_Dev_API()
40 // PPB_VideoDecoder_Dev_API implementation.
41 virtual void Destroy() override
;
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
);
49 void RunFlushCallback(int32 result
);
50 void RunResetCallback(int32 result
);
51 void RunBitstreamBufferCallback(int32 bitstream_buffer_id
, int32 result
);
53 // Tell command buffer to process all commands it has received so far.
54 void FlushCommandBuffer();
56 // Initialize the underlying decoder.
57 void InitCommon(PP_Resource graphics_context
,
58 gpu::gles2::GLES2Implementation
* gles2_impl
);
61 // Key: bitstream_buffer_id, value: callback to run when bitstream decode is
63 typedef std::map
<int32
, scoped_refptr
<TrackedCallback
> > CallbackById
;
65 scoped_refptr
<TrackedCallback
> flush_callback_
;
66 scoped_refptr
<TrackedCallback
> reset_callback_
;
67 CallbackById bitstream_buffer_callbacks_
;
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_
;
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_
;
79 DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared
);
84 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_