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 |