Chromium Code Reviews| Index: media/formats/webm/webm_stream_parser.cc |
| diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc |
| index 4a724090dd91de3aa3ca7a78ab53c55213a18249..b24d4927398f3486a2ac91844627206b39c390fb 100644 |
| --- a/media/formats/webm/webm_stream_parser.cc |
| +++ b/media/formats/webm/webm_stream_parser.cc |
| @@ -18,8 +18,11 @@ |
| namespace media { |
| +static const int64 kUnknownElementSize = 0xffffffffffffff; |
|
acolwell GONE FROM CHROMIUM
2014/04/23 16:06:02
nit: Please remove and use the kWebMUnknownSize co
|
| + |
| WebMStreamParser::WebMStreamParser() |
| : state_(kWaitingForInit), |
| + unknown_segment_size_(false), |
| parsing_cluster_(false) { |
| } |
| @@ -150,6 +153,9 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { |
| return result + element_size; |
| break; |
| case kWebMIdSegment: |
| + // Segment of unknown size indicates live stream. |
| + if (element_size == kUnknownElementSize) |
| + unknown_segment_size_ = true; |
| // Just consume the segment header. |
| return result; |
| break; |
| @@ -172,7 +178,11 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { |
| cur_size -= result; |
| bytes_parsed += result; |
| - WebMTracksParser tracks_parser(log_cb_, ignore_text_tracks_); |
| + bool live_mode = unknown_segment_size_ && (info_parser.duration() <= 0) && |
| + !info_parser.date_utc().is_null(); |
| + |
| + WebMTracksParser tracks_parser( |
| + log_cb_, ignore_text_tracks_, live_mode); |
| result = tracks_parser.Parse(cur, cur_size); |
| if (result <= 0) |
| @@ -203,7 +213,6 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { |
| return -1; |
| } |
| - |
| cluster_parser_.reset(new WebMClusterParser( |
| info_parser.timecode_scale(), |
| tracks_parser.audio_track_num(), |