Obey renderer-supplied quota in the browser.
[chromium-blink-merge.git] / ppapi / shared_impl / ppb_video_decoder_shared.h
blob618b6d03dbb4b6309bd2d431eb42e7140f16b7a9
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_
8 #include <map>
9 #include <vector>
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"
18 namespace gpu {
19 namespace gles2 {
20 class GLES2Implementation;
21 } // namespace gles2
22 } // namespace gpu
24 namespace ppapi {
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();
36 // Resource overrides.
37 virtual thunk::PPB_VideoDecoder_API* AsPPB_VideoDecoder_API() OVERRIDE;
39 // PPB_VideoDecoder_API implementation.
40 virtual void Destroy() OVERRIDE;
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);
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);
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;
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);
81 } // namespace ppapi
83 #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_