| 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 #include "media/base/android/media_codec_player.h" | 5 #include "media/base/android/media_codec_player.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 12 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
| 13 #include "base/logging.h" | 13 #include "base/logging.h" |
| 14 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
| 15 #include "base/threading/thread.h" | 15 #include "base/threading/thread.h" |
| 16 #include "media/base/android/media_codec_audio_decoder.h" | 16 #include "media/base/android/audio_media_codec_decoder.h" |
| 17 #include "media/base/android/media_codec_video_decoder.h" | |
| 18 #include "media/base/android/media_drm_bridge.h" | 17 #include "media/base/android/media_drm_bridge.h" |
| 19 #include "media/base/android/media_player_manager.h" | 18 #include "media/base/android/media_player_manager.h" |
| 20 #include "media/base/android/media_task_runner.h" | 19 #include "media/base/android/media_task_runner.h" |
| 20 #include "media/base/android/video_media_codec_decoder.h" |
| 21 #include "media/base/bind_to_current_loop.h" | 21 #include "media/base/bind_to_current_loop.h" |
| 22 #include "media/base/timestamp_constants.h" | 22 #include "media/base/timestamp_constants.h" |
| 23 | 23 |
| 24 #define RUN_ON_MEDIA_THREAD(METHOD, ...) \ | 24 #define RUN_ON_MEDIA_THREAD(METHOD, ...) \ |
| 25 do { \ | 25 do { \ |
| 26 if (!GetMediaTaskRunner()->BelongsToCurrentThread()) { \ | 26 if (!GetMediaTaskRunner()->BelongsToCurrentThread()) { \ |
| 27 DCHECK(ui_task_runner_->BelongsToCurrentThread()); \ | 27 DCHECK(ui_task_runner_->BelongsToCurrentThread()); \ |
| 28 GetMediaTaskRunner()->PostTask( \ | 28 GetMediaTaskRunner()->PostTask( \ |
| 29 FROM_HERE, base::Bind(&MediaCodecPlayer::METHOD, media_weak_this_, \ | 29 FROM_HERE, base::Bind(&MediaCodecPlayer::METHOD, media_weak_this_, \ |
| 30 ##__VA_ARGS__)); \ | 30 ##__VA_ARGS__)); \ |
| (...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 void MediaCodecPlayer::CreateDecoders() { | 1346 void MediaCodecPlayer::CreateDecoders() { |
| 1347 DCHECK(GetMediaTaskRunner()->BelongsToCurrentThread()); | 1347 DCHECK(GetMediaTaskRunner()->BelongsToCurrentThread()); |
| 1348 DVLOG(1) << __FUNCTION__; | 1348 DVLOG(1) << __FUNCTION__; |
| 1349 | 1349 |
| 1350 internal_error_cb_ = base::Bind(&MediaCodecPlayer::OnError, media_weak_this_); | 1350 internal_error_cb_ = base::Bind(&MediaCodecPlayer::OnError, media_weak_this_); |
| 1351 | 1351 |
| 1352 media_stat_.reset(new MediaStatistics()); | 1352 media_stat_.reset(new MediaStatistics()); |
| 1353 | 1353 |
| 1354 audio_decoder_.reset(new MediaCodecAudioDecoder( | 1354 audio_decoder_.reset(new AudioMediaCodecDecoder( |
| 1355 GetMediaTaskRunner(), &media_stat_->audio_frame_stats(), | 1355 GetMediaTaskRunner(), &media_stat_->audio_frame_stats(), |
| 1356 base::Bind(&MediaCodecPlayer::RequestDemuxerData, media_weak_this_, | 1356 base::Bind(&MediaCodecPlayer::RequestDemuxerData, media_weak_this_, |
| 1357 DemuxerStream::AUDIO), | 1357 DemuxerStream::AUDIO), |
| 1358 base::Bind(&MediaCodecPlayer::OnStarvation, media_weak_this_, | 1358 base::Bind(&MediaCodecPlayer::OnStarvation, media_weak_this_, |
| 1359 DemuxerStream::AUDIO), | 1359 DemuxerStream::AUDIO), |
| 1360 base::Bind(&MediaCodecPlayer::OnDecoderDrained, media_weak_this_, | 1360 base::Bind(&MediaCodecPlayer::OnDecoderDrained, media_weak_this_, |
| 1361 DemuxerStream::AUDIO), | 1361 DemuxerStream::AUDIO), |
| 1362 base::Bind(&MediaCodecPlayer::OnStopDone, media_weak_this_, | 1362 base::Bind(&MediaCodecPlayer::OnStopDone, media_weak_this_, |
| 1363 DemuxerStream::AUDIO), | 1363 DemuxerStream::AUDIO), |
| 1364 base::Bind(&MediaCodecPlayer::OnMissingKeyReported, media_weak_this_, | 1364 base::Bind(&MediaCodecPlayer::OnMissingKeyReported, media_weak_this_, |
| 1365 DemuxerStream::AUDIO), | 1365 DemuxerStream::AUDIO), |
| 1366 internal_error_cb_, | 1366 internal_error_cb_, base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, |
| 1367 base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, media_weak_this_, | 1367 media_weak_this_, DemuxerStream::AUDIO))); |
| 1368 DemuxerStream::AUDIO))); | |
| 1369 | 1368 |
| 1370 video_decoder_.reset(new MediaCodecVideoDecoder( | 1369 video_decoder_.reset(new VideoMediaCodecDecoder( |
| 1371 GetMediaTaskRunner(), &media_stat_->video_frame_stats(), | 1370 GetMediaTaskRunner(), &media_stat_->video_frame_stats(), |
| 1372 base::Bind(&MediaCodecPlayer::RequestDemuxerData, media_weak_this_, | 1371 base::Bind(&MediaCodecPlayer::RequestDemuxerData, media_weak_this_, |
| 1373 DemuxerStream::VIDEO), | 1372 DemuxerStream::VIDEO), |
| 1374 base::Bind(&MediaCodecPlayer::OnStarvation, media_weak_this_, | 1373 base::Bind(&MediaCodecPlayer::OnStarvation, media_weak_this_, |
| 1375 DemuxerStream::VIDEO), | 1374 DemuxerStream::VIDEO), |
| 1376 base::Bind(&MediaCodecPlayer::OnDecoderDrained, media_weak_this_, | 1375 base::Bind(&MediaCodecPlayer::OnDecoderDrained, media_weak_this_, |
| 1377 DemuxerStream::VIDEO), | 1376 DemuxerStream::VIDEO), |
| 1378 base::Bind(&MediaCodecPlayer::OnStopDone, media_weak_this_, | 1377 base::Bind(&MediaCodecPlayer::OnStopDone, media_weak_this_, |
| 1379 DemuxerStream::VIDEO), | 1378 DemuxerStream::VIDEO), |
| 1380 base::Bind(&MediaCodecPlayer::OnMissingKeyReported, media_weak_this_, | 1379 base::Bind(&MediaCodecPlayer::OnMissingKeyReported, media_weak_this_, |
| 1381 DemuxerStream::VIDEO), | 1380 DemuxerStream::VIDEO), |
| 1382 internal_error_cb_, | 1381 internal_error_cb_, base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, |
| 1383 base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, media_weak_this_, | 1382 media_weak_this_, DemuxerStream::VIDEO), |
| 1384 DemuxerStream::VIDEO), | |
| 1385 base::Bind(&MediaCodecPlayer::OnVideoResolutionChanged, | 1383 base::Bind(&MediaCodecPlayer::OnVideoResolutionChanged, |
| 1386 media_weak_this_))); | 1384 media_weak_this_))); |
| 1387 } | 1385 } |
| 1388 | 1386 |
| 1389 bool MediaCodecPlayer::AudioFinished() const { | 1387 bool MediaCodecPlayer::AudioFinished() const { |
| 1390 return audio_decoder_->IsCompleted() || !audio_decoder_->HasStream(); | 1388 return audio_decoder_->IsCompleted() || !audio_decoder_->HasStream(); |
| 1391 } | 1389 } |
| 1392 | 1390 |
| 1393 bool MediaCodecPlayer::VideoFinished() const { | 1391 bool MediaCodecPlayer::VideoFinished() const { |
| 1394 return video_decoder_->IsCompleted() || !video_decoder_->HasStream(); | 1392 return video_decoder_->IsCompleted() || !video_decoder_->HasStream(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1419 RETURN_STRING(kStateWaitingForMediaCrypto); | 1417 RETURN_STRING(kStateWaitingForMediaCrypto); |
| 1420 RETURN_STRING(kStateWaitingForSeek); | 1418 RETURN_STRING(kStateWaitingForSeek); |
| 1421 RETURN_STRING(kStateError); | 1419 RETURN_STRING(kStateError); |
| 1422 } | 1420 } |
| 1423 return nullptr; // crash early | 1421 return nullptr; // crash early |
| 1424 } | 1422 } |
| 1425 | 1423 |
| 1426 #undef RETURN_STRING | 1424 #undef RETURN_STRING |
| 1427 | 1425 |
| 1428 } // namespace media | 1426 } // namespace media |
| OLD | NEW |