OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "decoder_selector.h" | 5 #include "decoder_selector.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 base::Bind(&DecoderSelector<StreamType>::DecryptingDecoderInitDone, | 109 base::Bind(&DecoderSelector<StreamType>::DecryptingDecoderInitDone, |
110 weak_ptr_factory_.GetWeakPtr()), | 110 weak_ptr_factory_.GetWeakPtr()), |
111 output_cb_); | 111 output_cb_); |
112 } | 112 } |
113 | 113 |
114 template <DemuxerStream::Type StreamType> | 114 template <DemuxerStream::Type StreamType> |
115 void DecoderSelector<StreamType>::Abort() { | 115 void DecoderSelector<StreamType>::Abort() { |
116 DVLOG(2) << __FUNCTION__; | 116 DVLOG(2) << __FUNCTION__; |
117 DCHECK(task_runner_->BelongsToCurrentThread()); | 117 DCHECK(task_runner_->BelongsToCurrentThread()); |
118 | 118 |
119 // This could happen when SelectDecoder() was not called or when | 119 // Invalidate all weak pointers so that pending callbacks won't fire. |
120 // |select_decoder_cb_| was already posted but not fired (e.g. in the | |
121 // message loop queue). | |
122 if (select_decoder_cb_.is_null()) | |
123 return; | |
124 | |
125 // We must be trying to initialize the |decoder_| or the | |
126 // |decrypted_stream_|. Invalid all weak pointers so that all initialization | |
127 // callbacks won't fire. | |
128 weak_ptr_factory_.InvalidateWeakPtrs(); | 120 weak_ptr_factory_.InvalidateWeakPtrs(); |
129 | 121 |
130 if (decoder_) { | 122 decoder_.reset(); |
131 // |decrypted_stream_| is either NULL or already initialized. We don't | 123 decrypted_stream_.reset(); |
132 // need to Stop() |decrypted_stream_| in either case. | 124 |
133 decoder_.reset(); | 125 if (!select_decoder_cb_.is_null()) |
134 ReturnNullDecoder(); | 126 ReturnNullDecoder(); |
135 return; | |
136 } | |
137 | |
138 if (decrypted_stream_) { | |
139 decrypted_stream_->Stop(); | |
140 ReturnNullDecoder(); | |
141 return; | |
142 } | |
143 | |
144 NOTREACHED(); | |
145 } | 127 } |
146 | 128 |
147 template <DemuxerStream::Type StreamType> | 129 template <DemuxerStream::Type StreamType> |
148 void DecoderSelector<StreamType>::DecryptingDecoderInitDone( | 130 void DecoderSelector<StreamType>::DecryptingDecoderInitDone( |
149 PipelineStatus status) { | 131 PipelineStatus status) { |
150 DVLOG(2) << __FUNCTION__; | 132 DVLOG(2) << __FUNCTION__; |
151 DCHECK(task_runner_->BelongsToCurrentThread()); | 133 DCHECK(task_runner_->BelongsToCurrentThread()); |
152 | 134 |
153 if (status == PIPELINE_OK) { | 135 if (status == PIPELINE_OK) { |
154 base::ResetAndReturn(&select_decoder_cb_) | 136 base::ResetAndReturn(&select_decoder_cb_) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 | 214 |
233 // These forward declarations tell the compiler that we will use | 215 // These forward declarations tell the compiler that we will use |
234 // DecoderSelector with these arguments, allowing us to keep these definitions | 216 // DecoderSelector with these arguments, allowing us to keep these definitions |
235 // in our .cc without causing linker errors. This also means if anyone tries to | 217 // in our .cc without causing linker errors. This also means if anyone tries to |
236 // instantiate a DecoderSelector with anything but these two specializations | 218 // instantiate a DecoderSelector with anything but these two specializations |
237 // they'll most likely get linker errors. | 219 // they'll most likely get linker errors. |
238 template class DecoderSelector<DemuxerStream::AUDIO>; | 220 template class DecoderSelector<DemuxerStream::AUDIO>; |
239 template class DecoderSelector<DemuxerStream::VIDEO>; | 221 template class DecoderSelector<DemuxerStream::VIDEO>; |
240 | 222 |
241 } // namespace media | 223 } // namespace media |
OLD | NEW |