| 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 1a49c6694b2254953cbe05d52731c5240e3a2874..70530f884bc925510a8b274477af0c603e918ae1 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;
|
| +
|
| 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(),
|
|
|