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

Side by Side Diff: media/base/android/media_codec_decoder.h

Issue 1312103006: MediaCodecPlayer - preroll and reconfiguration fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mtplayer-reconfig
Patch Set: Rebased Created 5 years, 3 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
« no previous file with comments | « no previous file | media/base/android/media_codec_decoder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 186
187 // Releases MediaCodecBridge and any related buffers or references. 187 // Releases MediaCodecBridge and any related buffers or references.
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 // Sets preroll timestamp and requests preroll.
197 // first available output frame rather than passing certain PTS. 197 void SetPrerollTimestamp(base::TimeDelta preroll_ts);
198 void SetDecodingUntilOutputIsPresent();
199 198
200 base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); 199 base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto();
201 200
202 // Starts prefetching: accumulates enough data in AccessUnitQueue. 201 // Starts prefetching: accumulates enough data in AccessUnitQueue.
203 // Decoder thread is not running. 202 // Decoder thread is not running.
204 void Prefetch(const base::Closure& prefetch_done_cb); 203 void Prefetch(const base::Closure& prefetch_done_cb);
205 204
206 // Configures MediaCodec. 205 // Configures MediaCodec.
207 ConfigStatus Configure(); 206 ConfigStatus Configure();
208 207
209 // Starts the decoder for prerolling. This method starts the decoder thread. 208 // Starts the decoder for prerolling. This method starts the decoder thread.
210 bool Preroll(base::TimeDelta preroll_timestamp, 209 bool Preroll(const base::Closure& preroll_done_cb);
211 const base::Closure& preroll_done_cb);
212 210
213 // Starts the decoder after preroll is not needed, starting decoder thread 211 // Starts the decoder after preroll is not needed, starting decoder thread
214 // if it has not started yet. 212 // if it has not started yet.
215 bool Start(base::TimeDelta start_timestamp); 213 bool Start(base::TimeDelta start_timestamp);
216 214
217 // Stops the playback process synchronously. This method stops the decoder 215 // Stops the playback process synchronously. This method stops the decoder
218 // thread synchronously, and then releases all MediaCodec buffers. 216 // thread synchronously, and then releases all MediaCodec buffers.
219 void SyncStop(); 217 void SyncStop();
220 218
221 // Requests to stop the playback and returns. 219 // Requests to stop the playback and returns.
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 kPrefetching, 339 kPrefetching,
342 kPrefetched, 340 kPrefetched,
343 kPrerolling, 341 kPrerolling,
344 kPrerolled, 342 kPrerolled,
345 kRunning, 343 kRunning,
346 kStopping, 344 kStopping,
347 kInEmergencyStop, 345 kInEmergencyStop,
348 kError, 346 kError,
349 }; 347 };
350 348
351 enum PrerollMode {
352 kNoPreroll = 0,
353 kPrerollTillOutputIsPresent,
354 kPrerollTillPTS,
355 };
356
357 // Helper method that processes an error from MediaCodec. 349 // Helper method that processes an error from MediaCodec.
358 void OnCodecError(); 350 void OnCodecError();
359 351
360 // Requests data. Ensures there is no more than one request at a time. 352 // Requests data. Ensures there is no more than one request at a time.
361 void RequestData(); 353 void RequestData();
362 354
363 // Prefetching callback that is posted to Media thread 355 // Prefetching callback that is posted to Media thread
364 // in the kPrefetching state. 356 // in the kPrefetching state.
365 void PrefetchNextChunk(); 357 void PrefetchNextChunk();
366 358
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 // Callback for posting OnPrerollDone method. 405 // Callback for posting OnPrerollDone method.
414 base::Closure internal_preroll_done_cb_; 406 base::Closure internal_preroll_done_cb_;
415 407
416 // Internal state. 408 // Internal state.
417 DecoderState state_; 409 DecoderState state_;
418 mutable base::Lock state_lock_; 410 mutable base::Lock state_lock_;
419 411
420 // Preroll timestamp is set if we need preroll and cleared after we done it. 412 // Preroll timestamp is set if we need preroll and cleared after we done it.
421 base::TimeDelta preroll_timestamp_; 413 base::TimeDelta preroll_timestamp_;
422 414
423 // The preroll mode. If not |kNoPreroll|, the playback should start with 415 // Set to true when MediaCodec internal buffers are filled up.
424 // preroll. 416 bool is_prepared_;
425 PrerollMode preroll_mode_;
426 417
427 // Flag is set when the EOS is enqueued into MediaCodec. Reset by Flush. 418 // Flag is set when the EOS is enqueued into MediaCodec. Reset by Flush.
428 bool eos_enqueued_; 419 bool eos_enqueued_;
429 420
430 // Flag is set when the EOS is received in MediaCodec output. Reset by Flush. 421 // Flag is set when the EOS is received in MediaCodec output. Reset by Flush.
431 bool completed_; 422 bool completed_;
432 423
433 // Flag to ensure we post last frame notification once. 424 // Flag to ensure we post last frame notification once.
434 bool last_frame_posted_; 425 bool last_frame_posted_;
435 426
(...skipping 10 matching lines...) Expand all
446 437
447 // NOTE: Weak pointers must be invalidated before all other member variables. 438 // NOTE: Weak pointers must be invalidated before all other member variables.
448 base::WeakPtrFactory<MediaCodecDecoder> weak_factory_; 439 base::WeakPtrFactory<MediaCodecDecoder> weak_factory_;
449 440
450 DISALLOW_COPY_AND_ASSIGN(MediaCodecDecoder); 441 DISALLOW_COPY_AND_ASSIGN(MediaCodecDecoder);
451 }; 442 };
452 443
453 } // namespace media 444 } // namespace media
454 445
455 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_ 446 #endif // MEDIA_BASE_ANDROID_MEDIA_CODEC_DECODER_H_
OLDNEW
« no previous file with comments | « no previous file | media/base/android/media_codec_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698