| 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 "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 (HasVideo() && !video_decoder_job_)) { | 200 (HasVideo() && !video_decoder_job_)) { |
| 201 return; | 201 return; |
| 202 } | 202 } |
| 203 | 203 |
| 204 audio_finished_ = false; | 204 audio_finished_ = false; |
| 205 video_finished_ = false; | 205 video_finished_ = false; |
| 206 SetPendingEvent(PREFETCH_REQUEST_EVENT_PENDING); | 206 SetPendingEvent(PREFETCH_REQUEST_EVENT_PENDING); |
| 207 ProcessPendingEvents(); | 207 ProcessPendingEvents(); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void MediaSourcePlayer::DemuxerReady( | 210 void MediaSourcePlayer::DemuxerReady(const DemuxerConfigs& configs) { |
| 211 const MediaPlayerHostMsg_DemuxerReady_Params& params) { | |
| 212 DVLOG(1) << __FUNCTION__; | 211 DVLOG(1) << __FUNCTION__; |
| 213 duration_ = base::TimeDelta::FromMilliseconds(params.duration_ms); | 212 duration_ = base::TimeDelta::FromMilliseconds(configs.duration_ms); |
| 214 clock_.SetDuration(duration_); | 213 clock_.SetDuration(duration_); |
| 215 | 214 |
| 216 audio_codec_ = params.audio_codec; | 215 audio_codec_ = configs.audio_codec; |
| 217 num_channels_ = params.audio_channels; | 216 num_channels_ = configs.audio_channels; |
| 218 sampling_rate_ = params.audio_sampling_rate; | 217 sampling_rate_ = configs.audio_sampling_rate; |
| 219 is_audio_encrypted_ = params.is_audio_encrypted; | 218 is_audio_encrypted_ = configs.is_audio_encrypted; |
| 220 audio_extra_data_ = params.audio_extra_data; | 219 audio_extra_data_ = configs.audio_extra_data; |
| 221 if (HasAudio()) { | 220 if (HasAudio()) { |
| 222 DCHECK_GT(num_channels_, 0); | 221 DCHECK_GT(num_channels_, 0); |
| 223 audio_timestamp_helper_.reset(new AudioTimestampHelper(sampling_rate_)); | 222 audio_timestamp_helper_.reset(new AudioTimestampHelper(sampling_rate_)); |
| 224 audio_timestamp_helper_->SetBaseTimestamp(GetCurrentTime()); | 223 audio_timestamp_helper_->SetBaseTimestamp(GetCurrentTime()); |
| 225 } else { | 224 } else { |
| 226 audio_timestamp_helper_.reset(); | 225 audio_timestamp_helper_.reset(); |
| 227 } | 226 } |
| 228 | 227 |
| 229 video_codec_ = params.video_codec; | 228 video_codec_ = configs.video_codec; |
| 230 width_ = params.video_size.width(); | 229 width_ = configs.video_size.width(); |
| 231 height_ = params.video_size.height(); | 230 height_ = configs.video_size.height(); |
| 232 is_video_encrypted_ = params.is_video_encrypted; | 231 is_video_encrypted_ = configs.is_video_encrypted; |
| 233 | 232 |
| 234 OnMediaMetadataChanged(duration_, width_, height_, true); | 233 OnMediaMetadataChanged(duration_, width_, height_, true); |
| 235 | 234 |
| 236 if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) { | 235 if (IsEventPending(CONFIG_CHANGE_EVENT_PENDING)) { |
| 237 if (reconfig_audio_decoder_) | 236 if (reconfig_audio_decoder_) |
| 238 ConfigureAudioDecoderJob(); | 237 ConfigureAudioDecoderJob(); |
| 239 | 238 |
| 240 // If there is a pending surface change, we can merge it with the config | 239 // If there is a pending surface change, we can merge it with the config |
| 241 // change. | 240 // change. |
| 242 if (reconfig_video_decoder_) { | 241 if (reconfig_video_decoder_) { |
| 243 if (IsEventPending(SURFACE_CHANGE_EVENT_PENDING)) | 242 if (IsEventPending(SURFACE_CHANGE_EVENT_PENDING)) |
| 244 ClearPendingEvent(SURFACE_CHANGE_EVENT_PENDING); | 243 ClearPendingEvent(SURFACE_CHANGE_EVENT_PENDING); |
| 245 ConfigureVideoDecoderJob(); | 244 ConfigureVideoDecoderJob(); |
| 246 } | 245 } |
| 247 | 246 |
| 248 ClearPendingEvent(CONFIG_CHANGE_EVENT_PENDING); | 247 ClearPendingEvent(CONFIG_CHANGE_EVENT_PENDING); |
| 249 | 248 |
| 250 // Resume decoding after the config change if we are still playing. | 249 // Resume decoding after the config change if we are still playing. |
| 251 if (playing_) | 250 if (playing_) |
| 252 StartInternal(); | 251 StartInternal(); |
| 253 } | 252 } |
| 254 } | 253 } |
| 255 | 254 |
| 256 void MediaSourcePlayer::ReadFromDemuxerAck( | 255 void MediaSourcePlayer::ReadFromDemuxerAck(const DemuxerData& data) { |
| 257 const MediaPlayerHostMsg_ReadFromDemuxerAck_Params& params) { | 256 DVLOG(1) << __FUNCTION__ << "(" << data.type << ")"; |
| 258 DVLOG(1) << __FUNCTION__ << "(" << params.type << ")"; | 257 DCHECK_LT(0u, data.access_units.size()); |
| 259 DCHECK_LT(0u, params.access_units.size()); | 258 if (data.type == DemuxerStream::AUDIO) |
| 260 if (params.type == DemuxerStream::AUDIO) | 259 audio_decoder_job_->OnDataReceived(data); |
| 261 audio_decoder_job_->OnDataReceived(params); | |
| 262 else | 260 else |
| 263 video_decoder_job_->OnDataReceived(params); | 261 video_decoder_job_->OnDataReceived(data); |
| 264 } | 262 } |
| 265 | 263 |
| 266 void MediaSourcePlayer::DurationChanged(const base::TimeDelta& duration) { | 264 void MediaSourcePlayer::DurationChanged(const base::TimeDelta& duration) { |
| 267 duration_ = duration; | 265 duration_ = duration; |
| 268 clock_.SetDuration(duration_); | 266 clock_.SetDuration(duration_); |
| 269 } | 267 } |
| 270 | 268 |
| 271 void MediaSourcePlayer::SetDrmBridge(MediaDrmBridge* drm_bridge) { | 269 void MediaSourcePlayer::SetDrmBridge(MediaDrmBridge* drm_bridge) { |
| 272 // Currently we don't support DRM change during the middle of playback, even | 270 // Currently we don't support DRM change during the middle of playback, even |
| 273 // if the player is paused. | 271 // if the player is paused. |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 664 | 662 |
| 665 void MediaSourcePlayer::ClearPendingEvent(PendingEventFlags event) { | 663 void MediaSourcePlayer::ClearPendingEvent(PendingEventFlags event) { |
| 666 DVLOG(1) << __FUNCTION__ << "(" << GetEventName(event) << ")"; | 664 DVLOG(1) << __FUNCTION__ << "(" << GetEventName(event) << ")"; |
| 667 DCHECK_NE(event, NO_EVENT_PENDING); | 665 DCHECK_NE(event, NO_EVENT_PENDING); |
| 668 DCHECK(IsEventPending(event)); | 666 DCHECK(IsEventPending(event)); |
| 669 | 667 |
| 670 pending_event_ &= ~event; | 668 pending_event_ &= ~event; |
| 671 } | 669 } |
| 672 | 670 |
| 673 } // namespace media | 671 } // namespace media |
| OLD | NEW |