OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_CODEC_DECODER_H_ | 5 #ifndef MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ |
6 #define MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ | 6 #define MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ |
7 | 7 |
8 #include "base/android/scoped_java_ref.h" | 8 #include "base/android/scoped_java_ref.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
188 virtual void ReleaseMediaCodec(); | 188 virtual void ReleaseMediaCodec(); |
189 | 189 |
190 // Returns corresponding conditions. | 190 // Returns corresponding conditions. |
191 bool IsPrefetchingOrPlaying() const; | 191 bool IsPrefetchingOrPlaying() const; |
192 bool IsStopped() const; | 192 bool IsStopped() const; |
193 bool IsCompleted() const; | 193 bool IsCompleted() const; |
194 bool NotCompletedAndNeedsPreroll() const; | 194 bool NotCompletedAndNeedsPreroll() const; |
195 | 195 |
196 // Requests an A/V sync mechanism that is similar to preroll, but stops at the | 196 // Requests an A/V sync mechanism that is similar to preroll, but stops at the |
197 // first available output frame rather than passing certain PTS. | 197 // first available output frame rather than passing certain PTS. |
198 void SetDecodingUntilOutputIsPresent(); | 198 void SetDecodingUntilOutputIsPresent(); |
liberato (no reviews please)
2015/09/04 21:59:13
did you mean to delete this?
Tima Vaisburd
2015/09/04 23:17:35
Yes, thank you, I will delete it.
| |
199 | 199 |
200 // Sets preroll timestamp and requests preroll. | |
201 void SetPrerollTimestamp(base::TimeDelta preroll_ts); | |
202 | |
200 base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); | 203 base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); |
201 | 204 |
202 // Starts prefetching: accumulates enough data in AccessUnitQueue. | 205 // Starts prefetching: accumulates enough data in AccessUnitQueue. |
203 // Decoder thread is not running. | 206 // Decoder thread is not running. |
204 void Prefetch(const base::Closure& prefetch_done_cb); | 207 void Prefetch(const base::Closure& prefetch_done_cb); |
205 | 208 |
206 // Configures MediaCodec. | 209 // Configures MediaCodec. |
207 ConfigStatus Configure(); | 210 ConfigStatus Configure(); |
208 | 211 |
209 // Starts the decoder for prerolling. This method starts the decoder thread. | 212 // Starts the decoder for prerolling. This method starts the decoder thread. |
210 bool Preroll(base::TimeDelta preroll_timestamp, | 213 bool Preroll(const base::Closure& preroll_done_cb); |
211 const base::Closure& preroll_done_cb); | |
212 | 214 |
213 // Starts the decoder after preroll is not needed, starting decoder thread | 215 // Starts the decoder after preroll is not needed, starting decoder thread |
214 // if it has not started yet. | 216 // if it has not started yet. |
215 bool Start(base::TimeDelta start_timestamp); | 217 bool Start(base::TimeDelta start_timestamp); |
216 | 218 |
217 // Stops the playback process synchronously. This method stops the decoder | 219 // Stops the playback process synchronously. This method stops the decoder |
218 // thread synchronously, and then releases all MediaCodec buffers. | 220 // thread synchronously, and then releases all MediaCodec buffers. |
219 void SyncStop(); | 221 void SyncStop(); |
220 | 222 |
221 // Requests to stop the playback and returns. | 223 // Requests to stop the playback and returns. |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
335 kPrefetching, | 337 kPrefetching, |
336 kPrefetched, | 338 kPrefetched, |
337 kPrerolling, | 339 kPrerolling, |
338 kPrerolled, | 340 kPrerolled, |
339 kRunning, | 341 kRunning, |
340 kStopping, | 342 kStopping, |
341 kInEmergencyStop, | 343 kInEmergencyStop, |
342 kError, | 344 kError, |
343 }; | 345 }; |
344 | 346 |
345 enum PrerollMode { | |
346 kNoPreroll = 0, | |
347 kPrerollTillOutputIsPresent, | |
348 kPrerollTillPTS, | |
349 }; | |
350 | |
351 // Helper method that processes an error from MediaCodec. | 347 // Helper method that processes an error from MediaCodec. |
352 void OnCodecError(); | 348 void OnCodecError(); |
353 | 349 |
354 // Requests data. Ensures there is no more than one request at a time. | 350 // Requests data. Ensures there is no more than one request at a time. |
355 void RequestData(); | 351 void RequestData(); |
356 | 352 |
357 // Prefetching callback that is posted to Media thread | 353 // Prefetching callback that is posted to Media thread |
358 // in the kPrefetching state. | 354 // in the kPrefetching state. |
359 void PrefetchNextChunk(); | 355 void PrefetchNextChunk(); |
360 | 356 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
407 // Callback for posting OnPrerollDone method. | 403 // Callback for posting OnPrerollDone method. |
408 base::Closure internal_preroll_done_cb_; | 404 base::Closure internal_preroll_done_cb_; |
409 | 405 |
410 // Internal state. | 406 // Internal state. |
411 DecoderState state_; | 407 DecoderState state_; |
412 mutable base::Lock state_lock_; | 408 mutable base::Lock state_lock_; |
413 | 409 |
414 // Preroll timestamp is set if we need preroll and cleared after we done it. | 410 // Preroll timestamp is set if we need preroll and cleared after we done it. |
415 base::TimeDelta preroll_timestamp_; | 411 base::TimeDelta preroll_timestamp_; |
416 | 412 |
417 // The preroll mode. If not |kNoPreroll|, the playback should start with | 413 // Set to true when MediaCodec internal buffers are filled up. |
418 // preroll. | 414 bool is_prepared_; |
419 PrerollMode preroll_mode_; | |
420 | 415 |
421 // Flag is set when the EOS is enqueued into MediaCodec. Reset by Flush. | 416 // Flag is set when the EOS is enqueued into MediaCodec. Reset by Flush. |
422 bool eos_enqueued_; | 417 bool eos_enqueued_; |
423 | 418 |
424 // Flag is set when the EOS is received in MediaCodec output. Reset by Flush. | 419 // Flag is set when the EOS is received in MediaCodec output. Reset by Flush. |
425 bool completed_; | 420 bool completed_; |
426 | 421 |
427 // Flag to ensure we post last frame notification once. | 422 // Flag to ensure we post last frame notification once. |
428 bool last_frame_posted_; | 423 bool last_frame_posted_; |
429 | 424 |
(...skipping 10 matching lines...) Expand all Loading... | |
440 | 435 |
441 // NOTE: Weak pointers must be invalidated before all other member variables. | 436 // NOTE: Weak pointers must be invalidated before all other member variables. |
442 base::WeakPtrFactory<MediaCodecDecoder> weak_factory_; | 437 base::WeakPtrFactory<MediaCodecDecoder> weak_factory_; |
443 | 438 |
444 DISALLOW_COPY_AND_ASSIGN(MediaCodecDecoder); | 439 DISALLOW_COPY_AND_ASSIGN(MediaCodecDecoder); |
445 }; | 440 }; |
446 | 441 |
447 } // namespace media | 442 } // namespace media |
448 | 443 |
449 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ | 444 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ |
OLD | NEW |