OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/formats/mp4/mp4_stream_parser.h" | 5 #include "media/formats/mp4/mp4_stream_parser.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 // No decoder-specific buffer needed for AVC; | 281 // No decoder-specific buffer needed for AVC; |
282 // SPS/PPS are embedded in the video stream | 282 // SPS/PPS are embedded in the video stream |
283 NULL, 0, is_video_track_encrypted_, false); | 283 NULL, 0, is_video_track_encrypted_, false); |
284 has_video_ = true; | 284 has_video_ = true; |
285 video_track_id_ = track->header.track_id; | 285 video_track_id_ = track->header.track_id; |
286 } | 286 } |
287 } | 287 } |
288 | 288 |
289 RCHECK(config_cb_.Run(audio_config, video_config, TextTrackConfigMap())); | 289 RCHECK(config_cb_.Run(audio_config, video_config, TextTrackConfigMap())); |
290 | 290 |
291 base::TimeDelta duration; | 291 StreamParser::InitParameters params(kInfiniteDuration()); |
292 if (moov_->extends.header.fragment_duration > 0) { | 292 if (moov_->extends.header.fragment_duration > 0) { |
293 duration = TimeDeltaFromRational(moov_->extends.header.fragment_duration, | 293 params.duration = TimeDeltaFromRational( |
294 moov_->header.timescale); | 294 moov_->extends.header.fragment_duration, moov_->header.timescale); |
295 } else if (moov_->header.duration > 0 && | 295 } else if (moov_->header.duration > 0 && |
296 moov_->header.duration != kuint64max) { | 296 moov_->header.duration != kuint64max) { |
297 duration = TimeDeltaFromRational(moov_->header.duration, | 297 params.duration = |
298 moov_->header.timescale); | 298 TimeDeltaFromRational(moov_->header.duration, moov_->header.timescale); |
299 } else { | |
300 duration = kInfiniteDuration(); | |
301 } | 299 } |
302 | 300 |
303 if (!init_cb_.is_null()) | 301 if (!init_cb_.is_null()) |
304 base::ResetAndReturn(&init_cb_).Run(true, duration, base::Time(), false); | 302 base::ResetAndReturn(&init_cb_).Run(true, params); |
305 | 303 |
306 EmitNeedKeyIfNecessary(moov_->pssh); | 304 EmitNeedKeyIfNecessary(moov_->pssh); |
307 return true; | 305 return true; |
308 } | 306 } |
309 | 307 |
310 bool MP4StreamParser::ParseMoof(BoxReader* reader) { | 308 bool MP4StreamParser::ParseMoof(BoxReader* reader) { |
311 RCHECK(moov_.get()); // Must already have initialization segment | 309 RCHECK(moov_.get()); // Must already have initialization segment |
312 MovieFragment moof; | 310 MovieFragment moof; |
313 RCHECK(moof.Parse(reader)); | 311 RCHECK(moof.Parse(reader)); |
314 if (!runs_) | 312 if (!runs_) |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 return !err; | 573 return !err; |
576 } | 574 } |
577 | 575 |
578 void MP4StreamParser::ChangeState(State new_state) { | 576 void MP4StreamParser::ChangeState(State new_state) { |
579 DVLOG(2) << "Changing state: " << new_state; | 577 DVLOG(2) << "Changing state: " << new_state; |
580 state_ = new_state; | 578 state_ = new_state; |
581 } | 579 } |
582 | 580 |
583 } // namespace mp4 | 581 } // namespace mp4 |
584 } // namespace media | 582 } // namespace media |
OLD | NEW |