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_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_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_API
* AsPPB_VideoDecoder_API() OVERRIDE
;
39 // PPB_VideoDecoder_API implementation.
40 virtual void Destroy() OVERRIDE
;
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
);
48 void RunFlushCallback(int32 result
);
49 void RunResetCallback(int32 result
);
50 void RunBitstreamBufferCallback(int32 bitstream_buffer_id
, int32 result
);
52 // Tell command buffer to process all commands it has received so far.
53 void FlushCommandBuffer();
55 // Initialize the underlying decoder.
56 void InitCommon(PP_Resource graphics_context
,
57 gpu::gles2::GLES2Implementation
* gles2_impl
);
60 // Key: bitstream_buffer_id, value: callback to run when bitstream decode is
62 typedef std::map
<int32
, scoped_refptr
<TrackedCallback
> > CallbackById
;
64 scoped_refptr
<TrackedCallback
> flush_callback_
;
65 scoped_refptr
<TrackedCallback
> reset_callback_
;
66 CallbackById bitstream_buffer_callbacks_
;
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_
;
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_
;
78 DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared
);
83 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_