Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: media/filters/ffmpeg_audio_decoder.cc

Issue 16297002: Update media/ to use scoped_refptr<T>::get() rather than implicit "operator T*" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/filters/ffmpeg_audio_decoder.h" 5 #include "media/filters/ffmpeg_audio_decoder.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/location.h" 9 #include "base/location.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 demuxer_stream_->Read(base::Bind( 137 demuxer_stream_->Read(base::Bind(
138 &FFmpegAudioDecoder::BufferReady, weak_this_)); 138 &FFmpegAudioDecoder::BufferReady, weak_this_));
139 } 139 }
140 140
141 void FFmpegAudioDecoder::BufferReady( 141 void FFmpegAudioDecoder::BufferReady(
142 DemuxerStream::Status status, 142 DemuxerStream::Status status,
143 const scoped_refptr<DecoderBuffer>& input) { 143 const scoped_refptr<DecoderBuffer>& input) {
144 DCHECK(message_loop_->BelongsToCurrentThread()); 144 DCHECK(message_loop_->BelongsToCurrentThread());
145 DCHECK(!read_cb_.is_null()); 145 DCHECK(!read_cb_.is_null());
146 DCHECK(queued_audio_.empty()); 146 DCHECK(queued_audio_.empty());
147 DCHECK_EQ(status != DemuxerStream::kOk, !input) << status; 147 DCHECK_EQ(status != DemuxerStream::kOk, !input.get()) << status;
148 148
149 if (status == DemuxerStream::kAborted) { 149 if (status == DemuxerStream::kAborted) {
150 DCHECK(!input); 150 DCHECK(!input.get());
151 base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); 151 base::ResetAndReturn(&read_cb_).Run(kAborted, NULL);
152 return; 152 return;
153 } 153 }
154 154
155 if (status == DemuxerStream::kConfigChanged) { 155 if (status == DemuxerStream::kConfigChanged) {
156 DCHECK(!input); 156 DCHECK(!input.get());
157 157
158 // Send a "end of stream" buffer to the decode loop 158 // Send a "end of stream" buffer to the decode loop
159 // to output any remaining data still in the decoder. 159 // to output any remaining data still in the decoder.
160 RunDecodeLoop(DecoderBuffer::CreateEOSBuffer(), true); 160 RunDecodeLoop(DecoderBuffer::CreateEOSBuffer(), true);
161 161
162 DVLOG(1) << "Config changed."; 162 DVLOG(1) << "Config changed.";
163 163
164 if (!ConfigureDecoder()) { 164 if (!ConfigureDecoder()) {
165 base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL); 165 base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL);
166 return; 166 return;
167 } 167 }
168 168
169 ResetTimestampState(); 169 ResetTimestampState();
170 170
171 if (queued_audio_.empty()) { 171 if (queued_audio_.empty()) {
172 ReadFromDemuxerStream(); 172 ReadFromDemuxerStream();
173 return; 173 return;
174 } 174 }
175 175
176 base::ResetAndReturn(&read_cb_).Run( 176 base::ResetAndReturn(&read_cb_).Run(
177 queued_audio_.front().status, queued_audio_.front().buffer); 177 queued_audio_.front().status, queued_audio_.front().buffer);
178 queued_audio_.pop_front(); 178 queued_audio_.pop_front();
179 return; 179 return;
180 } 180 }
181 181
182 DCHECK_EQ(status, DemuxerStream::kOk); 182 DCHECK_EQ(status, DemuxerStream::kOk);
183 DCHECK(input); 183 DCHECK(input.get());
184 184
185 // Make sure we are notified if http://crbug.com/49709 returns. Issue also 185 // Make sure we are notified if http://crbug.com/49709 returns. Issue also
186 // occurs with some damaged files. 186 // occurs with some damaged files.
187 if (!input->IsEndOfStream() && input->GetTimestamp() == kNoTimestamp() && 187 if (!input->IsEndOfStream() && input->GetTimestamp() == kNoTimestamp() &&
188 output_timestamp_helper_->base_timestamp() == kNoTimestamp()) { 188 output_timestamp_helper_->base_timestamp() == kNoTimestamp()) {
189 DVLOG(1) << "Received a buffer without timestamps!"; 189 DVLOG(1) << "Received a buffer without timestamps!";
190 base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL); 190 base::ResetAndReturn(&read_cb_).Run(kDecodeError, NULL);
191 return; 191 return;
192 } 192 }
193 193
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 output->SetTimestamp(output_timestamp_helper_->GetTimestamp()); 484 output->SetTimestamp(output_timestamp_helper_->GetTimestamp());
485 output->SetDuration( 485 output->SetDuration(
486 output_timestamp_helper_->GetDuration(decoded_audio_size)); 486 output_timestamp_helper_->GetDuration(decoded_audio_size));
487 output_timestamp_helper_->AddBytes(decoded_audio_size); 487 output_timestamp_helper_->AddBytes(decoded_audio_size);
488 } else if (IsEndOfStream(result, decoded_audio_size, input) && 488 } else if (IsEndOfStream(result, decoded_audio_size, input) &&
489 !skip_eos_append) { 489 !skip_eos_append) {
490 DCHECK_EQ(packet.size, 0); 490 DCHECK_EQ(packet.size, 0);
491 output = DataBuffer::CreateEOSBuffer(); 491 output = DataBuffer::CreateEOSBuffer();
492 } 492 }
493 493
494 if (output) { 494 if (output.get()) {
495 QueuedAudioBuffer queue_entry = { kOk, output }; 495 QueuedAudioBuffer queue_entry = { kOk, output };
496 queued_audio_.push_back(queue_entry); 496 queued_audio_.push_back(queue_entry);
497 } 497 }
498 498
499 // Decoding finished successfully, update statistics. 499 // Decoding finished successfully, update statistics.
500 if (result > 0) { 500 if (result > 0) {
501 PipelineStatistics statistics; 501 PipelineStatistics statistics;
502 statistics.audio_bytes_decoded = result; 502 statistics.audio_bytes_decoded = result;
503 statistics_cb_.Run(statistics); 503 statistics_cb_.Run(statistics);
504 } 504 }
505 } while (packet.size > 0); 505 } while (packet.size > 0);
506 } 506 }
507 507
508 } // namespace media 508 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/fake_video_decoder_unittest.cc ('k') | media/filters/ffmpeg_audio_decoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698