[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 1 | // Copyright (c) 2011 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 | |||||
[email protected] | 9a57839 | 2011-12-07 18:59:27 | [diff] [blame] | 5 | #ifndef PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ |
6 | #define PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 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" | ||||
[email protected] | 7f8b26b | 2011-08-18 15:41:01 | [diff] [blame] | 14 | #include "ppapi/shared_impl/resource.h" |
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 15 | #include "ppapi/shared_impl/tracked_callback.h" |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 16 | #include "ppapi/thunk/ppb_video_decoder_api.h" |
17 | |||||
18 | namespace gpu { | ||||
19 | namespace gles2 { | ||||
20 | class GLES2Implementation; | ||||
21 | } // namespace gles2 | ||||
22 | } // namespace gpu | ||||
23 | |||||
24 | namespace ppapi { | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 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. | ||||
[email protected] | 9a57839 | 2011-12-07 18:59:27 | [diff] [blame] | 28 | class PPAPI_SHARED_EXPORT PPB_VideoDecoder_Shared |
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 29 | : public Resource, |
30 | NON_EXPORTED_BASE(public thunk::PPB_VideoDecoder_API) { | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 31 | public: |
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 32 | explicit PPB_VideoDecoder_Shared(PP_Instance instance); |
33 | explicit PPB_VideoDecoder_Shared(const HostResource& host_resource); | ||||
[email protected] | 9a57839 | 2011-12-07 18:59:27 | [diff] [blame] | 34 | virtual ~PPB_VideoDecoder_Shared(); |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 35 | |
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 36 | // Resource overrides. |
37 | virtual thunk::PPB_VideoDecoder_API* AsPPB_VideoDecoder_API() OVERRIDE; | ||||
38 | |||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 39 | // PPB_VideoDecoder_API implementation. |
40 | virtual void Destroy() OVERRIDE; | ||||
41 | |||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 42 | protected: |
[email protected] | d527cdd8 | 2011-08-12 22:50:19 | [diff] [blame] | 43 | bool SetFlushCallback(PP_CompletionCallback callback); |
44 | bool SetResetCallback(PP_CompletionCallback callback); | ||||
45 | bool SetBitstreamBufferCallback( | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 46 | int32 bitstream_buffer_id, PP_CompletionCallback callback); |
47 | |||||
48 | void RunFlushCallback(int32 result); | ||||
49 | void RunResetCallback(int32 result); | ||||
50 | void RunBitstreamBufferCallback(int32 bitstream_buffer_id, int32 result); | ||||
51 | |||||
52 | // Tell command buffer to process all commands it has received so far. | ||||
53 | void FlushCommandBuffer(); | ||||
54 | |||||
[email protected] | 1b2ec22e | 2011-08-30 00:48:33 | [diff] [blame] | 55 | // Initialize the underlying decoder. |
56 | void InitCommon(PP_Resource graphics_context, | ||||
57 | gpu::gles2::GLES2Implementation* gles2_impl); | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 58 | |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 59 | private: |
60 | // Key: bitstream_buffer_id, value: callback to run when bitstream decode is | ||||
61 | // done. | ||||
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 62 | typedef std::map<int32, scoped_refptr<TrackedCallback> > CallbackById; |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 63 | |
[email protected] | 614888b | 2012-01-05 06:18:12 | [diff] [blame] | 64 | scoped_refptr<TrackedCallback> flush_callback_; |
65 | scoped_refptr<TrackedCallback> reset_callback_; | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 66 | CallbackById bitstream_buffer_callbacks_; |
67 | |||||
[email protected] | 88cc7818 | 2011-12-01 06:47:09 | [diff] [blame] | 68 | // The resource ID of the underlying Graphics3D object being used. Used only |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 69 | // for reference counting to keep it alive for the lifetime of |*this|. |
[email protected] | 1b2ec22e | 2011-08-30 00:48:33 | [diff] [blame] | 70 | PP_Resource graphics_context_; |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 71 | |
[email protected] | 88cc7818 | 2011-12-01 06:47:09 | [diff] [blame] | 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 | ||||
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 75 | // process only, so gles2_impl_ is NULL in that case. |
76 | gpu::gles2::GLES2Implementation* gles2_impl_; | ||||
77 | |||||
[email protected] | 9a57839 | 2011-12-07 18:59:27 | [diff] [blame] | 78 | DISALLOW_COPY_AND_ASSIGN(PPB_VideoDecoder_Shared); |
[email protected] | 7ace8ad | 2011-08-06 03:23:58 | [diff] [blame] | 79 | }; |
80 | |||||
81 | } // namespace ppapi | ||||
82 | |||||
[email protected] | 9a57839 | 2011-12-07 18:59:27 | [diff] [blame] | 83 | #endif // PPAPI_SHARED_IMPL_PPB_VIDEO_DECODER_SHARED_H_ |