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 // We could be trying to initialize the |decoder_| or the |
scherkus (not reviewing)
2014/07/17 02:23:05
nit: reflow comment?
xhwang
2014/07/17 05:00:58
Done.
| |
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 | 120 // |decrypted_stream_|. Invalid all weak pointers so that all initialization |
127 // callbacks won't fire. | 121 // callbacks won't fire. |
128 weak_ptr_factory_.InvalidateWeakPtrs(); | 122 weak_ptr_factory_.InvalidateWeakPtrs(); |
129 | 123 |
130 if (decoder_) { | 124 decoder_.reset(); |
131 // |decrypted_stream_| is either NULL or already initialized. We don't | 125 decrypted_stream_.reset(); |
132 // need to Stop() |decrypted_stream_| in either case. | 126 |
133 decoder_.reset(); | 127 if (!select_decoder_cb_.is_null()) |
134 ReturnNullDecoder(); | 128 ReturnNullDecoder(); |
135 return; | |
136 } | |
137 | |
138 if (decrypted_stream_) { | |
139 decrypted_stream_->Stop(); | |
140 ReturnNullDecoder(); | |
141 return; | |
142 } | |
143 | |
144 NOTREACHED(); | |
145 } | 129 } |
146 | 130 |
147 template <DemuxerStream::Type StreamType> | 131 template <DemuxerStream::Type StreamType> |
148 void DecoderSelector<StreamType>::DecryptingDecoderInitDone( | 132 void DecoderSelector<StreamType>::DecryptingDecoderInitDone( |
149 PipelineStatus status) { | 133 PipelineStatus status) { |
150 DVLOG(2) << __FUNCTION__; | 134 DVLOG(2) << __FUNCTION__; |
151 DCHECK(task_runner_->BelongsToCurrentThread()); | 135 DCHECK(task_runner_->BelongsToCurrentThread()); |
152 | 136 |
153 if (status == PIPELINE_OK) { | 137 if (status == PIPELINE_OK) { |
154 base::ResetAndReturn(&select_decoder_cb_) | 138 base::ResetAndReturn(&select_decoder_cb_) |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 | 216 |
233 // These forward declarations tell the compiler that we will use | 217 // These forward declarations tell the compiler that we will use |
234 // DecoderSelector with these arguments, allowing us to keep these definitions | 218 // 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 | 219 // in our .cc without causing linker errors. This also means if anyone tries to |
236 // instantiate a DecoderSelector with anything but these two specializations | 220 // instantiate a DecoderSelector with anything but these two specializations |
237 // they'll most likely get linker errors. | 221 // they'll most likely get linker errors. |
238 template class DecoderSelector<DemuxerStream::AUDIO>; | 222 template class DecoderSelector<DemuxerStream::AUDIO>; |
239 template class DecoderSelector<DemuxerStream::VIDEO>; | 223 template class DecoderSelector<DemuxerStream::VIDEO>; |
240 | 224 |
241 } // namespace media | 225 } // namespace media |
OLD | NEW |