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_player.h" | 5 #include "media/base/android/media_codec_player.h" |
6 | 6 |
| 7 #include <utility> |
| 8 |
7 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
8 #include "base/bind.h" | 10 #include "base/bind.h" |
9 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
10 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
11 #include "base/logging.h" | 13 #include "base/logging.h" |
12 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
13 #include "base/threading/thread.h" | 15 #include "base/threading/thread.h" |
14 #include "media/base/android/media_codec_audio_decoder.h" | 16 #include "media/base/android/media_codec_audio_decoder.h" |
15 #include "media/base/android/media_codec_video_decoder.h" | 17 #include "media/base/android/media_codec_video_decoder.h" |
16 #include "media/base/android/media_drm_bridge.h" | 18 #include "media/base/android/media_drm_bridge.h" |
(...skipping 21 matching lines...) Expand all Loading... |
38 int player_id, | 40 int player_id, |
39 base::WeakPtr<MediaPlayerManager> manager, | 41 base::WeakPtr<MediaPlayerManager> manager, |
40 const OnDecoderResourcesReleasedCB& on_decoder_resources_released_cb, | 42 const OnDecoderResourcesReleasedCB& on_decoder_resources_released_cb, |
41 scoped_ptr<DemuxerAndroid> demuxer, | 43 scoped_ptr<DemuxerAndroid> demuxer, |
42 const GURL& frame_url) | 44 const GURL& frame_url) |
43 : MediaPlayerAndroid(player_id, | 45 : MediaPlayerAndroid(player_id, |
44 manager.get(), | 46 manager.get(), |
45 on_decoder_resources_released_cb, | 47 on_decoder_resources_released_cb, |
46 frame_url), | 48 frame_url), |
47 ui_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 49 ui_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
48 demuxer_(demuxer.Pass()), | 50 demuxer_(std::move(demuxer)), |
49 state_(kStatePaused), | 51 state_(kStatePaused), |
50 interpolator_(&default_tick_clock_), | 52 interpolator_(&default_tick_clock_), |
51 pending_start_(false), | 53 pending_start_(false), |
52 pending_seek_(kNoTimestamp()), | 54 pending_seek_(kNoTimestamp()), |
53 cdm_registration_id_(0), | 55 cdm_registration_id_(0), |
54 key_is_required_(false), | 56 key_is_required_(false), |
55 key_is_added_(false), | 57 key_is_added_(false), |
56 media_weak_factory_(this) { | 58 media_weak_factory_(this) { |
57 DCHECK(ui_task_runner_->BelongsToCurrentThread()); | 59 DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
58 | 60 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 } | 154 } |
153 | 155 |
154 // Do not set unprotected surface if we know that we need a protected one. | 156 // Do not set unprotected surface if we know that we need a protected one. |
155 // Empty surface means the surface removal and we always allow for it. | 157 // Empty surface means the surface removal and we always allow for it. |
156 if (!surface_is_empty && video_decoder_->IsProtectedSurfaceRequired() && | 158 if (!surface_is_empty && video_decoder_->IsProtectedSurfaceRequired() && |
157 !surface.is_protected()) { | 159 !surface.is_protected()) { |
158 DVLOG(0) << __FUNCTION__ << ": surface is not protected, ignoring"; | 160 DVLOG(0) << __FUNCTION__ << ": surface is not protected, ignoring"; |
159 return; | 161 return; |
160 } | 162 } |
161 | 163 |
162 video_decoder_->SetVideoSurface(surface.Pass()); | 164 video_decoder_->SetVideoSurface(std::move(surface)); |
163 | 165 |
164 if (surface_is_empty) { | 166 if (surface_is_empty) { |
165 // Remove video surface. | 167 // Remove video surface. |
166 switch (state_) { | 168 switch (state_) { |
167 case kStatePlaying: | 169 case kStatePlaying: |
168 if (VideoFinished()) | 170 if (VideoFinished()) |
169 break; | 171 break; |
170 | 172 |
171 DVLOG(1) << __FUNCTION__ << ": stopping and restarting"; | 173 DVLOG(1) << __FUNCTION__ << ": stopping and restarting"; |
172 // Stop decoders as quickly as possible. | 174 // Stop decoders as quickly as possible. |
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
950 | 952 |
951 if (media_crypto->is_null()) { | 953 if (media_crypto->is_null()) { |
952 // TODO(timav): Fail playback nicely here if needed. Note that we could get | 954 // TODO(timav): Fail playback nicely here if needed. Note that we could get |
953 // here even though the stream to play is unencrypted and therefore | 955 // here even though the stream to play is unencrypted and therefore |
954 // MediaCrypto is not needed. In that case, we may ignore this error and | 956 // MediaCrypto is not needed. In that case, we may ignore this error and |
955 // continue playback, or fail the playback. | 957 // continue playback, or fail the playback. |
956 LOG(ERROR) << "MediaCrypto creation failed."; | 958 LOG(ERROR) << "MediaCrypto creation failed."; |
957 return; | 959 return; |
958 } | 960 } |
959 | 961 |
960 media_crypto_ = media_crypto.Pass(); | 962 media_crypto_ = std::move(media_crypto); |
961 | 963 |
962 if (audio_decoder_) { | 964 if (audio_decoder_) { |
963 audio_decoder_->SetNeedsReconfigure(); | 965 audio_decoder_->SetNeedsReconfigure(); |
964 } | 966 } |
965 | 967 |
966 if (video_decoder_) { | 968 if (video_decoder_) { |
967 video_decoder_->SetNeedsReconfigure(); | 969 video_decoder_->SetNeedsReconfigure(); |
968 video_decoder_->SetProtectedSurfaceRequired(needs_protected_surface); | 970 video_decoder_->SetProtectedSurfaceRequired(needs_protected_surface); |
969 } | 971 } |
970 | 972 |
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1413 RETURN_STRING(kStateWaitingForMediaCrypto); | 1415 RETURN_STRING(kStateWaitingForMediaCrypto); |
1414 RETURN_STRING(kStateWaitingForSeek); | 1416 RETURN_STRING(kStateWaitingForSeek); |
1415 RETURN_STRING(kStateError); | 1417 RETURN_STRING(kStateError); |
1416 } | 1418 } |
1417 return nullptr; // crash early | 1419 return nullptr; // crash early |
1418 } | 1420 } |
1419 | 1421 |
1420 #undef RETURN_STRING | 1422 #undef RETURN_STRING |
1421 | 1423 |
1422 } // namespace media | 1424 } // namespace media |
OLD | NEW |