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

Unified Diff: media/base/android/media_decoder_job.cc

Issue 215783002: Fix an issue that audio and video may run out of sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressing wolenetz's comment Created 6 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: media/base/android/media_decoder_job.cc
diff --git a/media/base/android/media_decoder_job.cc b/media/base/android/media_decoder_job.cc
index b7eef0cdfbfbdb0769aaab6b621fda43f2948108..4102d97f0c5cbb13e48fef0c0302d1ec8c95d938 100644
--- a/media/base/android/media_decoder_job.cc
+++ b/media/base/android/media_decoder_job.cc
@@ -73,7 +73,8 @@ void MediaDecoderJob::OnDataReceived(const DemuxerData& data) {
base::Closure done_cb = base::ResetAndReturn(&on_data_received_cb_);
if (stop_decode_pending_) {
- OnDecodeCompleted(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0);
+ OnDecodeCompleted(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0, 0,
+ base::TimeTicks());
return;
}
@@ -270,7 +271,7 @@ void MediaDecoderJob::DecodeCurrentAccessUnit(
base::Unretained(this),
MEDIA_CODEC_DEQUEUE_INPUT_AGAIN_LATER,
kNoTimestamp(),
- 0));
+ 0, 0, base::TimeTicks()));
return;
}
@@ -299,7 +300,7 @@ void MediaDecoderJob::DecodeInternal(
output_eos_encountered_ = false;
MediaCodecStatus reset_status = media_codec_bridge_->Reset();
if (MEDIA_CODEC_OK != reset_status) {
- callback.Run(reset_status, kNoTimestamp(), 0);
+ callback.Run(reset_status, kNoTimestamp(), 0, 0, base::TimeTicks());
return;
}
}
@@ -312,7 +313,7 @@ void MediaDecoderJob::DecodeInternal(
// For aborted access unit, just skip it and inform the player.
if (unit.status == DemuxerStream::kAborted) {
// TODO(qinmin): use a new enum instead of MEDIA_CODEC_STOPPED.
- callback.Run(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0);
+ callback.Run(MEDIA_CODEC_STOPPED, kNoTimestamp(), 0, 0, base::TimeTicks());
return;
}
@@ -320,7 +321,8 @@ void MediaDecoderJob::DecodeInternal(
if (unit.end_of_stream || unit.data.empty()) {
input_eos_encountered_ = true;
output_eos_encountered_ = true;
- callback.Run(MEDIA_CODEC_OUTPUT_END_OF_STREAM, kNoTimestamp(), 0);
+ callback.Run(MEDIA_CODEC_OUTPUT_END_OF_STREAM, kNoTimestamp(), 0, 0,
+ base::TimeTicks());
return;
}
@@ -333,7 +335,7 @@ void MediaDecoderJob::DecodeInternal(
if (input_status == MEDIA_CODEC_INPUT_END_OF_STREAM) {
input_eos_encountered_ = true;
} else if (input_status != MEDIA_CODEC_OK) {
- callback.Run(input_status, kNoTimestamp(), 0);
+ callback.Run(input_status, kNoTimestamp(), 0, 0, base::TimeTicks());
return;
}
}
@@ -360,7 +362,7 @@ void MediaDecoderJob::DecodeInternal(
!media_codec_bridge_->GetOutputBuffers()) {
status = MEDIA_CODEC_ERROR;
}
- callback.Run(status, kNoTimestamp(), 0);
+ callback.Run(status, kNoTimestamp(), 0, 0, base::TimeTicks());
return;
}
@@ -412,7 +414,8 @@ void MediaDecoderJob::DecodeInternal(
void MediaDecoderJob::OnDecodeCompleted(
MediaCodecStatus status, base::TimeDelta presentation_timestamp,
- size_t audio_output_bytes) {
+ size_t audio_output_bytes, int64 audio_head_position,
+ base::TimeTicks audio_render_time) {
DCHECK(ui_task_runner_->BelongsToCurrentThread());
if (destroy_pending_) {
@@ -447,8 +450,9 @@ void MediaDecoderJob::OnDecodeCompleted(
};
stop_decode_pending_ = false;
- base::ResetAndReturn(&decode_cb_).Run(status, presentation_timestamp,
- audio_output_bytes);
+ base::ResetAndReturn(&decode_cb_).Run(
+ status, presentation_timestamp, audio_output_bytes, audio_head_position,
+ audio_render_time);
}
const AccessUnit& MediaDecoderJob::CurrentAccessUnit() const {

Powered by Google App Engine
This is Rietveld 408576698