Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: content/renderer/pepper/content_decryptor_delegate.h

Issue 105743010: Add TrackableCallback in ContentDecryptorDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 5 #ifndef CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
6 #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 6 #define CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
7 7
8 #include <queue> 8 #include <queue>
9 #include <string> 9 #include <string>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/callback_helpers.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
14 #include "base/memory/weak_ptr.h" 15 #include "base/memory/weak_ptr.h"
15 #include "media/base/decryptor.h" 16 #include "media/base/decryptor.h"
16 #include "media/base/media_keys.h" 17 #include "media/base/media_keys.h"
17 #include "media/base/sample_format.h" 18 #include "media/base/sample_format.h"
18 #include "ppapi/c/private/pp_content_decryptor.h" 19 #include "ppapi/c/private/pp_content_decryptor.h"
19 #include "ppapi/c/private/ppp_content_decryptor_private.h" 20 #include "ppapi/c/private/ppp_content_decryptor_private.h"
20 #include "ui/gfx/size.h" 21 #include "ui/gfx/size.h"
21 22
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 void DecoderDeinitializeDone(PP_DecryptorStreamType decoder_type, 98 void DecoderDeinitializeDone(PP_DecryptorStreamType decoder_type,
98 uint32_t request_id); 99 uint32_t request_id);
99 void DecoderResetDone(PP_DecryptorStreamType decoder_type, 100 void DecoderResetDone(PP_DecryptorStreamType decoder_type,
100 uint32_t request_id); 101 uint32_t request_id);
101 void DeliverFrame(PP_Resource decrypted_frame, 102 void DeliverFrame(PP_Resource decrypted_frame,
102 const PP_DecryptedFrameInfo* frame_info); 103 const PP_DecryptedFrameInfo* frame_info);
103 void DeliverSamples(PP_Resource audio_frames, 104 void DeliverSamples(PP_Resource audio_frames,
104 const PP_DecryptedSampleInfo* sample_info); 105 const PP_DecryptedSampleInfo* sample_info);
105 106
106 private: 107 private:
108 template <typename Callback>
109 class TrackableCallback {
110 public:
111 TrackableCallback() : id_(0u) {}
112 // TODO(xhwang): Check that no callback is pending in dtor.
dmichael (off chromium) 2014/01/03 18:44:43 That should be an easy check to add if you want it
xhwang 2014/01/07 19:53:31 I can't do this now because we didn't always satis
113 ~TrackableCallback() {};
114
115 bool Matches(uint32_t id) const { return id == id_; }
116
117 bool is_null() const { return cb_.is_null(); }
118
119 void Set(uint32_t id, const Callback& cb) {
120 DCHECK_EQ(id_, 0u);
121 DCHECK(cb_.is_null());
122 id_ = id;
123 cb_ = cb;
124 }
125
126 Callback ResetAndReturn() {
127 id_ = 0;
128 return base::ResetAndReturn(&cb_);
129 }
130
131 private:
132 uint32_t id_;
133 Callback cb_;
134 };
135
107 // Cancels the pending decrypt-and-decode callback for |stream_type|. 136 // Cancels the pending decrypt-and-decode callback for |stream_type|.
108 void CancelDecode(media::Decryptor::StreamType stream_type); 137 void CancelDecode(media::Decryptor::StreamType stream_type);
109 138
110 // Fills |resource| with a PPB_Buffer_Impl and copies the data from 139 // Fills |resource| with a PPB_Buffer_Impl and copies the data from
111 // |encrypted_buffer| into the buffer resource. This method reuses 140 // |encrypted_buffer| into the buffer resource. This method reuses
112 // |audio_input_resource_| and |video_input_resource_| to reduce the latency 141 // |audio_input_resource_| and |video_input_resource_| to reduce the latency
113 // in requesting new PPB_Buffer_Impl resources. The caller must make sure that 142 // in requesting new PPB_Buffer_Impl resources. The caller must make sure that
114 // |audio_input_resource_| or |video_input_resource_| is available before 143 // |audio_input_resource_| or |video_input_resource_| is available before
115 // calling this method. 144 // calling this method.
116 // 145 //
(...skipping 30 matching lines...) Expand all
147 media::SessionErrorCB session_error_cb_; 176 media::SessionErrorCB session_error_cb_;
148 177
149 gfx::Size natural_size_; 178 gfx::Size natural_size_;
150 179
151 // Request ID for tracking pending content decryption callbacks. 180 // Request ID for tracking pending content decryption callbacks.
152 // Note that zero indicates an invalid request ID. 181 // Note that zero indicates an invalid request ID.
153 // TODO(xhwang): Add completion callbacks for Reset/Stop and remove the use 182 // TODO(xhwang): Add completion callbacks for Reset/Stop and remove the use
154 // of request IDs. 183 // of request IDs.
155 uint32_t next_decryption_request_id_; 184 uint32_t next_decryption_request_id_;
156 185
157 uint32_t pending_audio_decrypt_request_id_; 186 TrackableCallback<media::Decryptor::DecryptCB> audio_decrypt_cb_;
158 media::Decryptor::DecryptCB pending_audio_decrypt_cb_; 187 TrackableCallback<media::Decryptor::DecryptCB> video_decrypt_cb_;
159 188 TrackableCallback<media::Decryptor::DecoderInitCB> audio_decoder_init_cb_;
160 uint32_t pending_video_decrypt_request_id_; 189 TrackableCallback<media::Decryptor::DecoderInitCB> video_decoder_init_cb_;
161 media::Decryptor::DecryptCB pending_video_decrypt_cb_; 190 TrackableCallback<media::Decryptor::AudioDecodeCB> audio_decode_cb_;
162 191 TrackableCallback<media::Decryptor::VideoDecodeCB> video_decode_cb_;
163 uint32_t pending_audio_decoder_init_request_id_;
164 media::Decryptor::DecoderInitCB pending_audio_decoder_init_cb_;
165
166 uint32_t pending_video_decoder_init_request_id_;
167 media::Decryptor::DecoderInitCB pending_video_decoder_init_cb_;
168
169 uint32_t pending_audio_decode_request_id_;
170 media::Decryptor::AudioDecodeCB pending_audio_decode_cb_;
171
172 uint32_t pending_video_decode_request_id_;
173 media::Decryptor::VideoDecodeCB pending_video_decode_cb_;
174 192
175 // Cached audio and video input buffers. See MakeMediaBufferResource. 193 // Cached audio and video input buffers. See MakeMediaBufferResource.
176 scoped_refptr<PPB_Buffer_Impl> audio_input_resource_; 194 scoped_refptr<PPB_Buffer_Impl> audio_input_resource_;
177 scoped_refptr<PPB_Buffer_Impl> video_input_resource_; 195 scoped_refptr<PPB_Buffer_Impl> video_input_resource_;
178 196
179 std::queue<uint32_t> free_buffers_; 197 std::queue<uint32_t> free_buffers_;
180 198
181 // Keep track of audio parameters. 199 // Keep track of audio parameters.
182 int audio_samples_per_second_; 200 int audio_samples_per_second_;
183 int audio_channel_count_; 201 int audio_channel_count_;
184 202
185 base::WeakPtr<ContentDecryptorDelegate> weak_this_; 203 base::WeakPtr<ContentDecryptorDelegate> weak_this_;
186 base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_; 204 base::WeakPtrFactory<ContentDecryptorDelegate> weak_ptr_factory_;
187 205
188 DISALLOW_COPY_AND_ASSIGN(ContentDecryptorDelegate); 206 DISALLOW_COPY_AND_ASSIGN(ContentDecryptorDelegate);
189 }; 207 };
190 208
191 } // namespace content 209 } // namespace content
192 210
193 #endif // CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_ 211 #endif // CONTENT_RENDERER_PEPPER_CONTENT_DECRYPTOR_DELEGATE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698