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

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

Issue 17408005: Refactored DecoderBuffer to use unix_hacker_style naming. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@localrefactor
Patch Set: 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
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_demuxer.h" 5 #include "media/filters/ffmpeg_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 uint8* side_data = av_packet_get_side_data( 116 uint8* side_data = av_packet_get_side_data(
117 packet.get(), 117 packet.get(),
118 AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, 118 AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
119 &side_data_size); 119 &side_data_size);
120 120
121 // If a packet is returned by FFmpeg's av_parser_parse2() the packet will 121 // If a packet is returned by FFmpeg's av_parser_parse2() the packet will
122 // reference inner memory of FFmpeg. As such we should transfer the packet 122 // reference inner memory of FFmpeg. As such we should transfer the packet
123 // into memory we control. 123 // into memory we control.
124 scoped_refptr<DecoderBuffer> buffer; 124 scoped_refptr<DecoderBuffer> buffer;
125 if (side_data_size > 0) { 125 if (side_data_size > 0) {
126 buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size, 126 buffer = DecoderBuffer::copy_from(packet.get()->data, packet.get()->size,
127 side_data, side_data_size); 127 side_data, side_data_size);
128 } else { 128 } else {
129 buffer = DecoderBuffer::CopyFrom(packet.get()->data, packet.get()->size); 129 buffer = DecoderBuffer::copy_from(packet.get()->data, packet.get()->size);
130 } 130 }
131 131
132 if ((type() == DemuxerStream::AUDIO && audio_config_.is_encrypted()) || 132 if ((type() == DemuxerStream::AUDIO && audio_config_.is_encrypted()) ||
133 (type() == DemuxerStream::VIDEO && video_config_.is_encrypted())) { 133 (type() == DemuxerStream::VIDEO && video_config_.is_encrypted())) {
134 scoped_ptr<DecryptConfig> config(WebMCreateDecryptConfig( 134 scoped_ptr<DecryptConfig> config(WebMCreateDecryptConfig(
135 packet->data, packet->size, 135 packet->data, packet->size,
136 reinterpret_cast<const uint8*>(encryption_key_id_.data()), 136 reinterpret_cast<const uint8*>(encryption_key_id_.data()),
137 encryption_key_id_.size())); 137 encryption_key_id_.size()));
138 if (!config) 138 if (!config)
139 LOG(ERROR) << "Creation of DecryptConfig failed."; 139 LOG(ERROR) << "Creation of DecryptConfig failed.";
140 buffer->SetDecryptConfig(config.Pass()); 140 buffer->SetDecryptConfig(config.Pass());
141 } 141 }
142 142
143 buffer->SetTimestamp(ConvertStreamTimestamp( 143 buffer->set_timestamp(ConvertStreamTimestamp(
144 stream_->time_base, packet->pts)); 144 stream_->time_base, packet->pts));
145 buffer->SetDuration(ConvertStreamTimestamp( 145 buffer->set_duration(ConvertStreamTimestamp(
146 stream_->time_base, packet->duration)); 146 stream_->time_base, packet->duration));
147 if (buffer->GetTimestamp() != kNoTimestamp() && 147 if (buffer->get_timestamp() != kNoTimestamp() &&
148 last_packet_timestamp_ != kNoTimestamp() && 148 last_packet_timestamp_ != kNoTimestamp() &&
149 last_packet_timestamp_ < buffer->GetTimestamp()) { 149 last_packet_timestamp_ < buffer->get_timestamp()) {
150 buffered_ranges_.Add(last_packet_timestamp_, buffer->GetTimestamp()); 150 buffered_ranges_.Add(last_packet_timestamp_, buffer->get_timestamp());
151 demuxer_->NotifyBufferingChanged(); 151 demuxer_->NotifyBufferingChanged();
152 } 152 }
153 last_packet_timestamp_ = buffer->GetTimestamp(); 153 last_packet_timestamp_ = buffer->get_timestamp();
154 154
155 buffer_queue_.Push(buffer); 155 buffer_queue_.Push(buffer);
156 SatisfyPendingRead(); 156 SatisfyPendingRead();
157 } 157 }
158 158
159 void FFmpegDemuxerStream::SetEndOfStream() { 159 void FFmpegDemuxerStream::SetEndOfStream() {
160 DCHECK(message_loop_->BelongsToCurrentThread()); 160 DCHECK(message_loop_->BelongsToCurrentThread());
161 end_of_stream_ = true; 161 end_of_stream_ = true;
162 SatisfyPendingRead(); 162 SatisfyPendingRead();
163 } 163 }
164 164
165 void FFmpegDemuxerStream::FlushBuffers() { 165 void FFmpegDemuxerStream::FlushBuffers() {
166 DCHECK(message_loop_->BelongsToCurrentThread()); 166 DCHECK(message_loop_->BelongsToCurrentThread());
167 DCHECK(read_cb_.is_null()) << "There should be no pending read"; 167 DCHECK(read_cb_.is_null()) << "There should be no pending read";
168 buffer_queue_.Clear(); 168 buffer_queue_.Clear();
169 end_of_stream_ = false; 169 end_of_stream_ = false;
170 last_packet_timestamp_ = kNoTimestamp(); 170 last_packet_timestamp_ = kNoTimestamp();
171 } 171 }
172 172
173 void FFmpegDemuxerStream::Stop() { 173 void FFmpegDemuxerStream::Stop() {
174 DCHECK(message_loop_->BelongsToCurrentThread()); 174 DCHECK(message_loop_->BelongsToCurrentThread());
175 buffer_queue_.Clear(); 175 buffer_queue_.Clear();
176 if (!read_cb_.is_null()) { 176 if (!read_cb_.is_null()) {
177 base::ResetAndReturn(&read_cb_).Run( 177 base::ResetAndReturn(&read_cb_).Run(
178 DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()); 178 DemuxerStream::kOk, DecoderBuffer::create_eos_buffer());
179 } 179 }
180 demuxer_ = NULL; 180 demuxer_ = NULL;
181 stream_ = NULL; 181 stream_ = NULL;
182 end_of_stream_ = true; 182 end_of_stream_ = true;
183 } 183 }
184 184
185 base::TimeDelta FFmpegDemuxerStream::duration() { 185 base::TimeDelta FFmpegDemuxerStream::duration() {
186 return duration_; 186 return duration_;
187 } 187 }
188 188
189 DemuxerStream::Type FFmpegDemuxerStream::type() { 189 DemuxerStream::Type FFmpegDemuxerStream::type() {
190 DCHECK(message_loop_->BelongsToCurrentThread()); 190 DCHECK(message_loop_->BelongsToCurrentThread());
191 return type_; 191 return type_;
192 } 192 }
193 193
194 void FFmpegDemuxerStream::Read(const ReadCB& read_cb) { 194 void FFmpegDemuxerStream::Read(const ReadCB& read_cb) {
195 DCHECK(message_loop_->BelongsToCurrentThread()); 195 DCHECK(message_loop_->BelongsToCurrentThread());
196 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported"; 196 CHECK(read_cb_.is_null()) << "Overlapping reads are not supported";
197 read_cb_ = BindToCurrentLoop(read_cb); 197 read_cb_ = BindToCurrentLoop(read_cb);
198 198
199 // Don't accept any additional reads if we've been told to stop. 199 // Don't accept any additional reads if we've been told to stop.
200 // The |demuxer_| may have been destroyed in the pipeline thread. 200 // The |demuxer_| may have been destroyed in the pipeline thread.
201 // 201 //
202 // TODO(scherkus): it would be cleaner to reply with an error message. 202 // TODO(scherkus): it would be cleaner to reply with an error message.
203 if (!demuxer_) { 203 if (!demuxer_) {
204 base::ResetAndReturn(&read_cb_).Run( 204 base::ResetAndReturn(&read_cb_).Run(
205 DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()); 205 DemuxerStream::kOk, DecoderBuffer::create_eos_buffer());
206 return; 206 return;
207 } 207 }
208 208
209 SatisfyPendingRead(); 209 SatisfyPendingRead();
210 } 210 }
211 211
212 void FFmpegDemuxerStream::EnableBitstreamConverter() { 212 void FFmpegDemuxerStream::EnableBitstreamConverter() {
213 DCHECK(message_loop_->BelongsToCurrentThread()); 213 DCHECK(message_loop_->BelongsToCurrentThread());
214 CHECK(bitstream_converter_.get()); 214 CHECK(bitstream_converter_.get());
215 bitstream_converter_enabled_ = true; 215 bitstream_converter_enabled_ = true;
(...skipping 26 matching lines...) Expand all
242 } 242 }
243 243
244 void FFmpegDemuxerStream::SatisfyPendingRead() { 244 void FFmpegDemuxerStream::SatisfyPendingRead() {
245 DCHECK(message_loop_->BelongsToCurrentThread()); 245 DCHECK(message_loop_->BelongsToCurrentThread());
246 if (!read_cb_.is_null()) { 246 if (!read_cb_.is_null()) {
247 if (!buffer_queue_.IsEmpty()) { 247 if (!buffer_queue_.IsEmpty()) {
248 base::ResetAndReturn(&read_cb_).Run( 248 base::ResetAndReturn(&read_cb_).Run(
249 DemuxerStream::kOk, buffer_queue_.Pop()); 249 DemuxerStream::kOk, buffer_queue_.Pop());
250 } else if (end_of_stream_) { 250 } else if (end_of_stream_) {
251 base::ResetAndReturn(&read_cb_).Run( 251 base::ResetAndReturn(&read_cb_).Run(
252 DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()); 252 DemuxerStream::kOk, DecoderBuffer::create_eos_buffer());
253 } 253 }
254 } 254 }
255 255
256 // Have capacity? Ask for more! 256 // Have capacity? Ask for more!
257 if (HasAvailableCapacity() && !end_of_stream_) { 257 if (HasAvailableCapacity() && !end_of_stream_) {
258 demuxer_->NotifyCapacityAvailable(); 258 demuxer_->NotifyCapacityAvailable();
259 } 259 }
260 } 260 }
261 261
262 bool FFmpegDemuxerStream::HasAvailableCapacity() { 262 bool FFmpegDemuxerStream::HasAvailableCapacity() {
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 } 774 }
775 for (size_t i = 0; i < buffered.size(); ++i) 775 for (size_t i = 0; i < buffered.size(); ++i)
776 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); 776 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i));
777 } 777 }
778 778
779 void FFmpegDemuxer::OnDataSourceError() { 779 void FFmpegDemuxer::OnDataSourceError() {
780 host_->OnDemuxerError(PIPELINE_ERROR_READ); 780 host_->OnDemuxerError(PIPELINE_ERROR_READ);
781 } 781 }
782 782
783 } // namespace media 783 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698