| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/base/android/media_codec_video_decoder.h" | 5 #include "media/base/android/media_codec_video_decoder.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "media/base/android/media_codec_bridge.h" | 9 #include "media/base/android/media_codec_bridge.h" |
| 10 #include "media/base/android/media_statistics.h" | 10 #include "media/base/android/media_statistics.h" |
| 11 #include "media/base/demuxer_stream.h" | 11 #include "media/base/demuxer_stream.h" |
| 12 #include "media/base/timestamp_constants.h" | 12 #include "media/base/timestamp_constants.h" |
| 13 | 13 |
| 14 namespace media { | 14 namespace media { |
| 15 | 15 |
| 16 namespace { | 16 namespace { |
| 17 const int kDelayForStandAloneEOS = 2; // milliseconds | 17 const int kDelayForStandAloneEOS = 2; // milliseconds |
| 18 } | 18 } |
| 19 | 19 |
| 20 MediaCodecVideoDecoder::MediaCodecVideoDecoder( | 20 MediaCodecVideoDecoder::MediaCodecVideoDecoder( |
| 21 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, | 21 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
| 22 FrameStatistics* frame_statistics, | 22 FrameStatistics* frame_statistics, |
| 23 const base::Closure& request_data_cb, | 23 const base::Closure& request_data_cb, |
| 24 const base::Closure& starvation_cb, | 24 const base::Closure& starvation_cb, |
| 25 const base::Closure& decoder_drained_cb, | 25 const base::Closure& decoder_drained_cb, |
| 26 const base::Closure& stop_done_cb, | 26 const base::Closure& stop_done_cb, |
| 27 const base::Closure& waiting_for_decryption_key_cb, | 27 const base::Closure& waiting_for_decryption_key_cb, |
| 28 const base::Closure& error_cb, | 28 const base::Closure& error_cb, |
| 29 const SetTimeCallback& update_current_time_cb, | 29 const SetTimeCallback& update_current_time_cb, |
| 30 const VideoSizeChangedCallback& video_size_changed_cb, | 30 const VideoSizeChangedCallback& video_size_changed_cb) |
| 31 const base::Closure& codec_created_cb) | |
| 32 : MediaCodecDecoder("VideoDecoder", | 31 : MediaCodecDecoder("VideoDecoder", |
| 33 media_task_runner, | 32 media_task_runner, |
| 34 frame_statistics, | 33 frame_statistics, |
| 35 request_data_cb, | 34 request_data_cb, |
| 36 starvation_cb, | 35 starvation_cb, |
| 37 decoder_drained_cb, | 36 decoder_drained_cb, |
| 38 stop_done_cb, | 37 stop_done_cb, |
| 39 waiting_for_decryption_key_cb, | 38 waiting_for_decryption_key_cb, |
| 40 error_cb), | 39 error_cb), |
| 41 is_protected_surface_required_(false), | 40 is_protected_surface_required_(false), |
| 42 update_current_time_cb_(update_current_time_cb), | 41 update_current_time_cb_(update_current_time_cb), |
| 43 video_size_changed_cb_(video_size_changed_cb), | 42 video_size_changed_cb_(video_size_changed_cb) { |
| 44 codec_created_cb_(codec_created_cb) { | |
| 45 } | 43 } |
| 46 | 44 |
| 47 MediaCodecVideoDecoder::~MediaCodecVideoDecoder() { | 45 MediaCodecVideoDecoder::~MediaCodecVideoDecoder() { |
| 48 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 46 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 49 DVLOG(1) << "VideoDecoder::~VideoDecoder()"; | 47 DVLOG(1) << "VideoDecoder::~VideoDecoder()"; |
| 50 ReleaseDecoderResources(); | 48 ReleaseDecoderResources(); |
| 51 } | 49 } |
| 52 | 50 |
| 53 const char* MediaCodecVideoDecoder::class_name() const { | 51 const char* MediaCodecVideoDecoder::class_name() const { |
| 54 return "VideoDecoder"; | 52 return "VideoDecoder"; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 media_crypto)); | 178 media_crypto)); |
| 181 | 179 |
| 182 if (!media_codec_bridge_) { | 180 if (!media_codec_bridge_) { |
| 183 DVLOG(0) << class_name() << "::" << __FUNCTION__ | 181 DVLOG(0) << class_name() << "::" << __FUNCTION__ |
| 184 << " failed: cannot create video codec"; | 182 << " failed: cannot create video codec"; |
| 185 return kConfigFailure; | 183 return kConfigFailure; |
| 186 } | 184 } |
| 187 | 185 |
| 188 DVLOG(0) << class_name() << "::" << __FUNCTION__ << " succeeded"; | 186 DVLOG(0) << class_name() << "::" << __FUNCTION__ << " succeeded"; |
| 189 | 187 |
| 190 media_task_runner_->PostTask(FROM_HERE, codec_created_cb_); | |
| 191 | |
| 192 if (!codec_created_for_tests_cb_.is_null()) | 188 if (!codec_created_for_tests_cb_.is_null()) |
| 193 media_task_runner_->PostTask(FROM_HERE, codec_created_for_tests_cb_); | 189 media_task_runner_->PostTask(FROM_HERE, codec_created_for_tests_cb_); |
| 194 | 190 |
| 195 return kConfigOk; | 191 return kConfigOk; |
| 196 } | 192 } |
| 197 | 193 |
| 198 void MediaCodecVideoDecoder::AssociateCurrentTimeWithPTS(base::TimeDelta pts) { | 194 void MediaCodecVideoDecoder::AssociateCurrentTimeWithPTS(base::TimeDelta pts) { |
| 199 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 195 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 200 | 196 |
| 201 DVLOG(1) << class_name() << "::" << __FUNCTION__ << " pts:" << pts; | 197 DVLOG(1) << class_name() << "::" << __FUNCTION__ << " pts:" << pts; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 | 349 |
| 354 // |update_current_time_cb_| might be null if there is audio stream. | 350 // |update_current_time_cb_| might be null if there is audio stream. |
| 355 // Do not update current time for stand-alone EOS frames. | 351 // Do not update current time for stand-alone EOS frames. |
| 356 if (!update_current_time_cb_.is_null() && update_time) { | 352 if (!update_current_time_cb_.is_null() && update_time) { |
| 357 media_task_runner_->PostTask( | 353 media_task_runner_->PostTask( |
| 358 FROM_HERE, base::Bind(update_current_time_cb_, pts, pts, false)); | 354 FROM_HERE, base::Bind(update_current_time_cb_, pts, pts, false)); |
| 359 } | 355 } |
| 360 } | 356 } |
| 361 | 357 |
| 362 } // namespace media | 358 } // namespace media |
| OLD | NEW |