OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_source_player.h" | 5 #include "media/base/android/media_source_player.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
648 start_time_ticks_, start_presentation_timestamp_, base::Bind( | 648 start_time_ticks_, start_presentation_timestamp_, base::Bind( |
649 &MediaSourcePlayer::MediaDecoderCallback, | 649 &MediaSourcePlayer::MediaDecoderCallback, |
650 weak_this_.GetWeakPtr(), true))) { | 650 weak_this_.GetWeakPtr(), true))) { |
651 TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreAudio", | 651 TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreAudio", |
652 audio_decoder_job_.get()); | 652 audio_decoder_job_.get()); |
653 return; | 653 return; |
654 } | 654 } |
655 | 655 |
656 // Failed to start the next decode. | 656 // Failed to start the next decode. |
657 // Wait for demuxer ready message. | 657 // Wait for demuxer ready message. |
658 DCHECK(!reconfig_audio_decoder_); | |
658 reconfig_audio_decoder_ = true; | 659 reconfig_audio_decoder_ = true; |
660 | |
661 // Config change may have just been detected on the other stream. If so, | |
662 // don't send a duplicate demuxer config request. | |
663 if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) { | |
664 DCHECK(reconfig_video_decoder_); | |
xhwang
2013/11/04 21:55:48
hmm, isn't this always true given line 659? Or are
wolenetz
2013/11/04 22:00:55
This DCHECK is to ensure that the CONFIG_CHANGE_EV
xhwang1
2013/11/05 02:30:21
Oh, I didn't realize it's "video", not "audio". So
| |
665 return; | |
666 } | |
667 | |
659 SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING); | 668 SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING); |
660 ProcessPendingEvents(); | 669 ProcessPendingEvents(); |
661 } | 670 } |
662 | 671 |
663 void MediaSourcePlayer::DecodeMoreVideo() { | 672 void MediaSourcePlayer::DecodeMoreVideo() { |
664 DVLOG(1) << __FUNCTION__; | 673 DVLOG(1) << __FUNCTION__; |
665 DCHECK(!video_decoder_job_->is_decoding()); | 674 DCHECK(!video_decoder_job_->is_decoding()); |
666 | 675 |
667 if (video_decoder_job_->Decode( | 676 if (video_decoder_job_->Decode( |
668 start_time_ticks_, start_presentation_timestamp_, base::Bind( | 677 start_time_ticks_, start_presentation_timestamp_, base::Bind( |
669 &MediaSourcePlayer::MediaDecoderCallback, | 678 &MediaSourcePlayer::MediaDecoderCallback, |
670 weak_this_.GetWeakPtr(), false))) { | 679 weak_this_.GetWeakPtr(), false))) { |
671 TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreVideo", | 680 TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreVideo", |
672 video_decoder_job_.get()); | 681 video_decoder_job_.get()); |
673 return; | 682 return; |
674 } | 683 } |
675 | 684 |
676 // Failed to start the next decode. | 685 // Failed to start the next decode. |
677 // Wait for demuxer ready message. | 686 // Wait for demuxer ready message. |
678 reconfig_video_decoder_ = true; | |
679 | 687 |
680 // After this detection of video config change, next video data received | 688 // After this detection of video config change, next video data received |
681 // will begin with I-frame. | 689 // will begin with I-frame. |
682 next_video_data_is_iframe_ = true; | 690 next_video_data_is_iframe_ = true; |
683 | 691 |
692 DCHECK(!reconfig_video_decoder_); | |
693 reconfig_video_decoder_ = true; | |
694 | |
695 // Config change may have just been detected on the other stream. If so, | |
696 // don't send a duplicate demuxer config request. | |
697 if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) { | |
698 DCHECK(reconfig_audio_decoder_); | |
699 return; | |
700 } | |
701 | |
684 SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING); | 702 SetPendingEvent(CONFIG_CHANGE_EVENT_PENDING); |
685 ProcessPendingEvents(); | 703 ProcessPendingEvents(); |
686 } | 704 } |
687 | 705 |
688 void MediaSourcePlayer::PlaybackCompleted(bool is_audio) { | 706 void MediaSourcePlayer::PlaybackCompleted(bool is_audio) { |
689 DVLOG(1) << __FUNCTION__ << "(" << is_audio << ")"; | 707 DVLOG(1) << __FUNCTION__ << "(" << is_audio << ")"; |
690 if (is_audio) | 708 if (is_audio) |
691 audio_finished_ = true; | 709 audio_finished_ = true; |
692 else | 710 else |
693 video_finished_ = true; | 711 video_finished_ = true; |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
927 | 945 |
928 void MediaSourcePlayer::ClearPendingEvent(PendingEventFlags event) { | 946 void MediaSourcePlayer::ClearPendingEvent(PendingEventFlags event) { |
929 DVLOG(1) << __FUNCTION__ << "(" << GetEventName(event) << ")"; | 947 DVLOG(1) << __FUNCTION__ << "(" << GetEventName(event) << ")"; |
930 DCHECK_NE(event, NO_EVENT_PENDING); | 948 DCHECK_NE(event, NO_EVENT_PENDING); |
931 DCHECK(IsEventPending(event)) << GetEventName(event); | 949 DCHECK(IsEventPending(event)) << GetEventName(event); |
932 | 950 |
933 pending_event_ &= ~event; | 951 pending_event_ &= ~event; |
934 } | 952 } |
935 | 953 |
936 } // namespace media | 954 } // namespace media |
OLD | NEW |