OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ | 5 #ifndef MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ |
6 #define MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ | 6 #define MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ |
7 | 7 |
8 #include <jni.h> | 8 #include <jni.h> |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // |start_time_ticks_| and |start_presentation_timestamp_| so that video can | 155 // |start_time_ticks_| and |start_presentation_timestamp_| so that video can |
156 // resync with audio and starts decoding. | 156 // resync with audio and starts decoding. |
157 void OnPrefetchDone(); | 157 void OnPrefetchDone(); |
158 | 158 |
159 // Called when the demuxer config changes. | 159 // Called when the demuxer config changes. |
160 void OnDemuxerConfigsChanged(); | 160 void OnDemuxerConfigsChanged(); |
161 | 161 |
162 // Called when new decryption key becomes available. | 162 // Called when new decryption key becomes available. |
163 void OnKeyAdded(); | 163 void OnKeyAdded(); |
164 | 164 |
| 165 // Called to resume playback after NO_KEY is received, but a new key is |
| 166 // available. |
| 167 void ResumePlaybackAfterKeyAdded(); |
| 168 |
165 // Called when the CDM is detached. | 169 // Called when the CDM is detached. |
166 void OnCdmUnset(); | 170 void OnCdmUnset(); |
167 | 171 |
168 // Test-only method to setup hook for the completion of the next decode cycle. | 172 // Test-only method to setup hook for the completion of the next decode cycle. |
169 // This callback state is cleared when it is next run. | 173 // This callback state is cleared when it is next run. |
170 // Prevent usage creep by only calling this from the | 174 // Prevent usage creep by only calling this from the |
171 // ReleaseWithOnPrefetchDoneAlreadyPosted MediaSourcePlayerTest. | 175 // ReleaseWithOnPrefetchDoneAlreadyPosted MediaSourcePlayerTest. |
172 void set_decode_callback_for_testing(const base::Closure& test_decode_cb) { | 176 void set_decode_callback_for_testing(const base::Closure& test_decode_cb) { |
173 decode_callback_for_testing_ = test_decode_cb; | 177 decode_callback_for_testing_ = test_decode_cb; |
174 } | 178 } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 base::CancelableClosure decoder_starvation_callback_; | 247 base::CancelableClosure decoder_starvation_callback_; |
244 | 248 |
245 MediaDrmBridge* drm_bridge_; | 249 MediaDrmBridge* drm_bridge_; |
246 int cdm_registration_id_; | 250 int cdm_registration_id_; |
247 | 251 |
248 // No decryption key available to decrypt the encrypted buffer. In this case, | 252 // No decryption key available to decrypt the encrypted buffer. In this case, |
249 // the player should pause. When a new key is added (OnKeyAdded()), we should | 253 // the player should pause. When a new key is added (OnKeyAdded()), we should |
250 // try to start playback again. | 254 // try to start playback again. |
251 bool is_waiting_for_key_; | 255 bool is_waiting_for_key_; |
252 | 256 |
| 257 // Indicates the situation where new key is added during pending decode |
| 258 // (this variable can only be set when *_decoder_job_->is_decoding()). If this |
| 259 // variable is true and MEDIA_CODEC_NO_KEY is returned then we need to try |
| 260 // decoding again in case the newly added key is the correct decryption key. |
| 261 bool key_added_while_decode_pending_; |
| 262 |
253 // Indicates whether the player is waiting for audio or video decoder to be | 263 // Indicates whether the player is waiting for audio or video decoder to be |
254 // created. This could happen if video surface is not available or key is | 264 // created. This could happen if video surface is not available or key is |
255 // not added. | 265 // not added. |
256 bool is_waiting_for_audio_decoder_; | 266 bool is_waiting_for_audio_decoder_; |
257 bool is_waiting_for_video_decoder_; | 267 bool is_waiting_for_video_decoder_; |
258 | 268 |
259 // Test-only callback for hooking the completion of the next decode cycle. | 269 // Test-only callback for hooking the completion of the next decode cycle. |
260 base::Closure decode_callback_for_testing_; | 270 base::Closure decode_callback_for_testing_; |
261 | 271 |
262 // Whether audio or video decoder is in the process of prerolling. | 272 // Whether audio or video decoder is in the process of prerolling. |
263 bool prerolling_; | 273 bool prerolling_; |
264 | 274 |
265 // Weak pointer passed to media decoder jobs for callbacks. | 275 // Weak pointer passed to media decoder jobs for callbacks. |
266 // NOTE: Weak pointers must be invalidated before all other member variables. | 276 // NOTE: Weak pointers must be invalidated before all other member variables. |
267 base::WeakPtrFactory<MediaSourcePlayer> weak_factory_; | 277 base::WeakPtrFactory<MediaSourcePlayer> weak_factory_; |
268 base::WeakPtr<MediaSourcePlayer> weak_this_; | 278 base::WeakPtr<MediaSourcePlayer> weak_this_; |
269 | 279 |
270 DISALLOW_COPY_AND_ASSIGN(MediaSourcePlayer); | 280 DISALLOW_COPY_AND_ASSIGN(MediaSourcePlayer); |
271 }; | 281 }; |
272 | 282 |
273 } // namespace media | 283 } // namespace media |
274 | 284 |
275 #endif // MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ | 285 #endif // MEDIA_BASE_ANDROID_MEDIA_SOURCE_PLAYER_H_ |
OLD | NEW |