| 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 return -1; | 336 return -1; |
| 337 | 337 |
| 338 config_cb_.Run(config_helper.audio_config(),config_helper.video_config()); | 338 config_cb_.Run(config_helper.audio_config(),config_helper.video_config()); |
| 339 | 339 |
| 340 // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421). | 340 // TODO(xhwang): Support decryption of audio (see http://crbug.com/123421). |
| 341 if (tracks_parser.video_encryption_key_id()) { | 341 if (tracks_parser.video_encryption_key_id()) { |
| 342 int key_id_size = tracks_parser.video_encryption_key_id_size(); | 342 int key_id_size = tracks_parser.video_encryption_key_id_size(); |
| 343 CHECK_GT(key_id_size, 0); | 343 CHECK_GT(key_id_size, 0); |
| 344 scoped_array<uint8> key_id(new uint8[key_id_size]); | 344 scoped_array<uint8> key_id(new uint8[key_id_size]); |
| 345 memcpy(key_id.get(), tracks_parser.video_encryption_key_id(), key_id_size); | 345 memcpy(key_id.get(), tracks_parser.video_encryption_key_id(), key_id_size); |
| 346 key_needed_cb_.Run(key_id.Pass(), key_id_size); | 346 need_key_cb_.Run(key_id.Pass(), key_id_size); |
| 347 } | 347 } |
| 348 | 348 |
| 349 cluster_parser_.reset(new WebMClusterParser( | 349 cluster_parser_.reset(new WebMClusterParser( |
| 350 info_parser.timecode_scale(), | 350 info_parser.timecode_scale(), |
| 351 tracks_parser.audio_track_num(), | 351 tracks_parser.audio_track_num(), |
| 352 tracks_parser.video_track_num(), | 352 tracks_parser.video_track_num(), |
| 353 tracks_parser.video_encryption_key_id(), | 353 tracks_parser.video_encryption_key_id(), |
| 354 tracks_parser.video_encryption_key_id_size())); | 354 tracks_parser.video_encryption_key_id_size())); |
| 355 | 355 |
| 356 ChangeState(kParsingClusters); | 356 ChangeState(kParsingClusters); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 if (!audio_buffers.empty() && !audio_cb_.Run(audio_buffers)) | 391 if (!audio_buffers.empty() && !audio_cb_.Run(audio_buffers)) |
| 392 return -1; | 392 return -1; |
| 393 | 393 |
| 394 if (!video_buffers.empty() && !video_cb_.Run(video_buffers)) | 394 if (!video_buffers.empty() && !video_cb_.Run(video_buffers)) |
| 395 return -1; | 395 return -1; |
| 396 | 396 |
| 397 return bytes_parsed; | 397 return bytes_parsed; |
| 398 } | 398 } |
| 399 | 399 |
| 400 } // namespace media | 400 } // namespace media |
| OLD | NEW |