| 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 |