OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/filters/ffmpeg_demuxer.h" | 5 #include "media/filters/ffmpeg_demuxer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/base64.h" | 10 #include "base/base64.h" |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 DemuxerStream::Type type) const { | 679 DemuxerStream::Type type) const { |
680 StreamVector::const_iterator iter; | 680 StreamVector::const_iterator iter; |
681 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { | 681 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { |
682 if (*iter && (*iter)->type() == type) { | 682 if (*iter && (*iter)->type() == type) { |
683 return *iter; | 683 return *iter; |
684 } | 684 } |
685 } | 685 } |
686 return NULL; | 686 return NULL; |
687 } | 687 } |
688 | 688 |
| 689 base::TimeDelta FFmpegDemuxer::GetStartTime() const { |
| 690 return std::max(start_time_, base::TimeDelta()); |
| 691 } |
| 692 |
689 Demuxer::Liveness FFmpegDemuxer::GetLiveness() const { | 693 Demuxer::Liveness FFmpegDemuxer::GetLiveness() const { |
690 DCHECK(task_runner_->BelongsToCurrentThread()); | 694 DCHECK(task_runner_->BelongsToCurrentThread()); |
691 return liveness_; | 695 return liveness_; |
692 } | 696 } |
693 | 697 |
694 void FFmpegDemuxer::AddTextStreams() { | 698 void FFmpegDemuxer::AddTextStreams() { |
695 DCHECK(task_runner_->BelongsToCurrentThread()); | 699 DCHECK(task_runner_->BelongsToCurrentThread()); |
696 | 700 |
697 for (StreamVector::size_type idx = 0; idx < streams_.size(); ++idx) { | 701 for (StreamVector::size_type idx = 0; idx < streams_.size(); ++idx) { |
698 FFmpegDemuxerStream* stream = streams_[idx]; | 702 FFmpegDemuxerStream* stream = streams_[idx]; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 // generation so we always get timestamps, see http://crbug.com/169570 | 956 // generation so we always get timestamps, see http://crbug.com/169570 |
953 if (strcmp(format_context->iformat->name, "avi") == 0) | 957 if (strcmp(format_context->iformat->name, "avi") == 0) |
954 format_context->flags |= AVFMT_FLAG_GENPTS; | 958 format_context->flags |= AVFMT_FLAG_GENPTS; |
955 | 959 |
956 // For testing purposes, don't overwrite the timeline offset if set already. | 960 // For testing purposes, don't overwrite the timeline offset if set already. |
957 if (timeline_offset_.is_null()) | 961 if (timeline_offset_.is_null()) |
958 timeline_offset_ = ExtractTimelineOffset(format_context); | 962 timeline_offset_ = ExtractTimelineOffset(format_context); |
959 | 963 |
960 // Since we're shifting the externally visible start time to zero, we need to | 964 // Since we're shifting the externally visible start time to zero, we need to |
961 // adjust the timeline offset to compensate. | 965 // adjust the timeline offset to compensate. |
962 if (!timeline_offset_.is_null()) | 966 if (!timeline_offset_.is_null() && start_time_ < base::TimeDelta()) |
963 timeline_offset_ += start_time_; | 967 timeline_offset_ += start_time_; |
964 | 968 |
965 if (max_duration == kInfiniteDuration() && !timeline_offset_.is_null()) { | 969 if (max_duration == kInfiniteDuration() && !timeline_offset_.is_null()) { |
966 liveness_ = LIVENESS_LIVE; | 970 liveness_ = LIVENESS_LIVE; |
967 } else if (max_duration != kInfiniteDuration()) { | 971 } else if (max_duration != kInfiniteDuration()) { |
968 liveness_ = LIVENESS_RECORDED; | 972 liveness_ = LIVENESS_RECORDED; |
969 } else { | 973 } else { |
970 liveness_ = LIVENESS_UNKNOWN; | 974 liveness_ = LIVENESS_UNKNOWN; |
971 } | 975 } |
972 | 976 |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1244 } | 1248 } |
1245 for (size_t i = 0; i < buffered.size(); ++i) | 1249 for (size_t i = 0; i < buffered.size(); ++i) |
1246 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); | 1250 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); |
1247 } | 1251 } |
1248 | 1252 |
1249 void FFmpegDemuxer::OnDataSourceError() { | 1253 void FFmpegDemuxer::OnDataSourceError() { |
1250 host_->OnDemuxerError(PIPELINE_ERROR_READ); | 1254 host_->OnDemuxerError(PIPELINE_ERROR_READ); |
1251 } | 1255 } |
1252 | 1256 |
1253 } // namespace media | 1257 } // namespace media |
OLD | NEW |