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/webm/webm_stream_parser.h" | 5 #include "media/webm/webm_stream_parser.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "media/ffmpeg/ffmpeg_common.h" | 9 #include "media/ffmpeg/ffmpeg_common.h" |
10 #include "media/filters/ffmpeg_glue.h" | 10 #include "media/filters/ffmpeg_glue.h" |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 WebMStreamParser::WebMStreamParser() | 183 WebMStreamParser::WebMStreamParser() |
184 : state_(kWaitingForInit) { | 184 : state_(kWaitingForInit) { |
185 } | 185 } |
186 | 186 |
187 WebMStreamParser::~WebMStreamParser() {} | 187 WebMStreamParser::~WebMStreamParser() {} |
188 | 188 |
189 void WebMStreamParser::Init(const InitCB& init_cb, | 189 void WebMStreamParser::Init(const InitCB& init_cb, |
190 const NewConfigCB& config_cb, | 190 const NewConfigCB& config_cb, |
191 const NewBuffersCB& audio_cb, | 191 const NewBuffersCB& audio_cb, |
192 const NewBuffersCB& video_cb, | 192 const NewBuffersCB& video_cb, |
193 const KeyNeededCB& key_needed_cb) { | 193 const NeedKeyCB& need_key_cb) { |
194 DCHECK_EQ(state_, kWaitingForInit); | 194 DCHECK_EQ(state_, kWaitingForInit); |
195 DCHECK(init_cb_.is_null()); | 195 DCHECK(init_cb_.is_null()); |
196 DCHECK(!init_cb.is_null()); | 196 DCHECK(!init_cb.is_null()); |
197 DCHECK(!config_cb.is_null()); | 197 DCHECK(!config_cb.is_null()); |
198 DCHECK(!audio_cb.is_null() || !video_cb.is_null()); | 198 DCHECK(!audio_cb.is_null() || !video_cb.is_null()); |
199 DCHECK(!key_needed_cb.is_null()); | 199 DCHECK(!need_key_cb.is_null()); |
200 | 200 |
201 ChangeState(kParsingHeaders); | 201 ChangeState(kParsingHeaders); |
202 init_cb_ = init_cb; | 202 init_cb_ = init_cb; |
203 config_cb_ = config_cb; | 203 config_cb_ = config_cb; |
204 audio_cb_ = audio_cb; | 204 audio_cb_ = audio_cb; |
205 video_cb_ = video_cb; | 205 video_cb_ = video_cb; |
206 key_needed_cb_ = key_needed_cb; | 206 need_key_cb_ = need_key_cb; |
207 } | 207 } |
208 | 208 |
209 void WebMStreamParser::Flush() { | 209 void WebMStreamParser::Flush() { |
210 DCHECK_NE(state_, kWaitingForInit); | 210 DCHECK_NE(state_, kWaitingForInit); |
211 | 211 |
212 byte_queue_.Reset(); | 212 byte_queue_.Reset(); |
213 | 213 |
214 if (state_ != kParsingClusters) | 214 if (state_ != kParsingClusters) |
215 return; | 215 return; |
216 | 216 |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 DVLOG(1) << "New config data isn't allowed."; | 343 DVLOG(1) << "New config data isn't allowed."; |
344 return -1; | 344 return -1; |
345 } | 345 } |
346 | 346 |
347 // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421). | 347 // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421). |
348 if (tracks_parser.video_encryption_key_id()) { | 348 if (tracks_parser.video_encryption_key_id()) { |
349 int key_id_size = tracks_parser.video_encryption_key_id_size(); | 349 int key_id_size = tracks_parser.video_encryption_key_id_size(); |
350 CHECK_GT(key_id_size, 0); | 350 CHECK_GT(key_id_size, 0); |
351 scoped_array<uint8> key_id(new uint8[key_id_size]); | 351 scoped_array<uint8> key_id(new uint8[key_id_size]); |
352 memcpy(key_id.get(), tracks_parser.video_encryption_key_id(), key_id_size); | 352 memcpy(key_id.get(), tracks_parser.video_encryption_key_id(), key_id_size); |
353 key_needed_cb_.Run(key_id.Pass(), key_id_size); | 353 need_key_cb_.Run(key_id.Pass(), key_id_size); |
354 } | 354 } |
355 | 355 |
356 cluster_parser_.reset(new WebMClusterParser( | 356 cluster_parser_.reset(new WebMClusterParser( |
357 info_parser.timecode_scale(), | 357 info_parser.timecode_scale(), |
358 tracks_parser.audio_track_num(), | 358 tracks_parser.audio_track_num(), |
359 tracks_parser.video_track_num(), | 359 tracks_parser.video_track_num(), |
360 tracks_parser.video_encryption_key_id(), | 360 tracks_parser.video_encryption_key_id(), |
361 tracks_parser.video_encryption_key_id_size())); | 361 tracks_parser.video_encryption_key_id_size())); |
362 | 362 |
363 ChangeState(kParsingClusters); | 363 ChangeState(kParsingClusters); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 if (!audio_buffers.empty() && !audio_cb_.Run(audio_buffers)) | 406 if (!audio_buffers.empty() && !audio_cb_.Run(audio_buffers)) |
407 return -1; | 407 return -1; |
408 | 408 |
409 if (!video_buffers.empty() && !video_cb_.Run(video_buffers)) | 409 if (!video_buffers.empty() && !video_cb_.Run(video_buffers)) |
410 return -1; | 410 return -1; |
411 | 411 |
412 return bytes_parsed; | 412 return bytes_parsed; |
413 } | 413 } |
414 | 414 |
415 } // namespace media | 415 } // namespace media |
OLD | NEW |