Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(556)

Side by Side Diff: media/formats/webm/webm_tracks_parser.cc

Issue 1735003004: Implement reading of media track info from WebM and MP4 containers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@demuxer-tracks2
Patch Set: Mark WebMStreamParser with MEDIA_EXPORT to allow usage in unit tests Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/webm/webm_tracks_parser.h" 5 #include "media/formats/webm/webm_tracks_parser.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "media/base/timestamp_constants.h" 10 #include "media/base/timestamp_constants.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 track_name_.clear(); 70 track_name_.clear();
71 track_language_.clear(); 71 track_language_.clear();
72 audio_track_num_ = -1; 72 audio_track_num_ = -1;
73 audio_default_duration_ = -1; 73 audio_default_duration_ = -1;
74 audio_decoder_config_ = AudioDecoderConfig(); 74 audio_decoder_config_ = AudioDecoderConfig();
75 video_track_num_ = -1; 75 video_track_num_ = -1;
76 video_default_duration_ = -1; 76 video_default_duration_ = -1;
77 video_decoder_config_ = VideoDecoderConfig(); 77 video_decoder_config_ = VideoDecoderConfig();
78 text_tracks_.clear(); 78 text_tracks_.clear();
79 ignored_tracks_.clear(); 79 ignored_tracks_.clear();
80 media_tracks_.reset(new MediaTracks());
80 81
81 WebMListParser parser(kWebMIdTracks, this); 82 WebMListParser parser(kWebMIdTracks, this);
82 int result = parser.Parse(buf, size); 83 int result = parser.Parse(buf, size);
83 84
84 if (result <= 0) 85 if (result <= 0)
85 return result; 86 return result;
86 87
87 // For now we do all or nothing parsing. 88 // For now we do all or nothing parsing.
88 return parser.IsParsingComplete() ? result : 0; 89 return parser.IsParsingComplete() ? result : 0;
89 } 90 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 return false; 204 return false;
204 } 205 }
205 audio_default_duration_ = default_duration_; 206 audio_default_duration_ = default_duration_;
206 207
207 DCHECK(!audio_decoder_config_.IsValidConfig()); 208 DCHECK(!audio_decoder_config_.IsValidConfig());
208 if (!audio_client_.InitializeConfig( 209 if (!audio_client_.InitializeConfig(
209 codec_id_, codec_private_, seek_preroll_, codec_delay_, 210 codec_id_, codec_private_, seek_preroll_, codec_delay_,
210 !audio_encryption_key_id_.empty(), &audio_decoder_config_)) { 211 !audio_encryption_key_id_.empty(), &audio_decoder_config_)) {
211 return false; 212 return false;
212 } 213 }
214 media_tracks_->AddAudioTrack(audio_decoder_config_,
215 base::Uint64ToString(track_num_), "main",
216 track_name_, track_language_);
213 } else { 217 } else {
214 MEDIA_LOG(DEBUG, media_log_) << "Ignoring audio track " << track_num_; 218 MEDIA_LOG(DEBUG, media_log_) << "Ignoring audio track " << track_num_;
215 ignored_tracks_.insert(track_num_); 219 ignored_tracks_.insert(track_num_);
216 } 220 }
217 } else if (track_type_ == kWebMTrackTypeVideo) { 221 } else if (track_type_ == kWebMTrackTypeVideo) {
218 if (video_track_num_ == -1) { 222 if (video_track_num_ == -1) {
219 video_track_num_ = track_num_; 223 video_track_num_ = track_num_;
220 video_encryption_key_id_ = encryption_key_id; 224 video_encryption_key_id_ = encryption_key_id;
221 225
222 if (default_duration_ == 0) { 226 if (default_duration_ == 0) {
223 MEDIA_LOG(ERROR, media_log_) << "Illegal 0ns video TrackEntry " 227 MEDIA_LOG(ERROR, media_log_) << "Illegal 0ns video TrackEntry "
224 "DefaultDuration"; 228 "DefaultDuration";
225 return false; 229 return false;
226 } 230 }
227 video_default_duration_ = default_duration_; 231 video_default_duration_ = default_duration_;
228 232
229 DCHECK(!video_decoder_config_.IsValidConfig()); 233 DCHECK(!video_decoder_config_.IsValidConfig());
230 if (!video_client_.InitializeConfig( 234 if (!video_client_.InitializeConfig(
231 codec_id_, codec_private_, !video_encryption_key_id_.empty(), 235 codec_id_, codec_private_, !video_encryption_key_id_.empty(),
232 &video_decoder_config_)) { 236 &video_decoder_config_)) {
233 return false; 237 return false;
234 } 238 }
239 media_tracks_->AddVideoTrack(video_decoder_config_,
240 base::Uint64ToString(track_num_), "main",
241 track_name_, track_language_);
235 } else { 242 } else {
236 MEDIA_LOG(DEBUG, media_log_) << "Ignoring video track " << track_num_; 243 MEDIA_LOG(DEBUG, media_log_) << "Ignoring video track " << track_num_;
237 ignored_tracks_.insert(track_num_); 244 ignored_tracks_.insert(track_num_);
238 } 245 }
239 } else if (track_type_ == kWebMTrackTypeSubtitlesOrCaptions || 246 } else if (track_type_ == kWebMTrackTypeSubtitlesOrCaptions ||
240 track_type_ == kWebMTrackTypeDescriptionsOrMetadata) { 247 track_type_ == kWebMTrackTypeDescriptionsOrMetadata) {
241 if (ignore_text_tracks_) { 248 if (ignore_text_tracks_) {
242 MEDIA_LOG(DEBUG, media_log_) << "Ignoring text track " << track_num_; 249 MEDIA_LOG(DEBUG, media_log_) << "Ignoring text track " << track_num_;
243 ignored_tracks_.insert(track_num_); 250 ignored_tracks_.insert(track_num_);
244 } else { 251 } else {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 codec_id_ = str; 335 codec_id_ = str;
329 return true; 336 return true;
330 } 337 }
331 338
332 if (id == kWebMIdName) { 339 if (id == kWebMIdName) {
333 track_name_ = str; 340 track_name_ = str;
334 return true; 341 return true;
335 } 342 }
336 343
337 if (id == kWebMIdLanguage) { 344 if (id == kWebMIdLanguage) {
338 track_language_ = str; 345 track_language_ = str;
wolenetz 2016/03/05 03:26:21 Either here or when using track_language_ elsewher
servolk 2016/03/07 23:45:02 Done.
339 return true; 346 return true;
340 } 347 }
341 348
342 return true; 349 return true;
343 } 350 }
344 351
345 } // namespace media 352 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698