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

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

Issue 264743016: Change H264AnnexBBitstreamConverter to use AVCDecoderConfigurationRecord. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix build busters. Created 6 years, 7 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 type_ = TEXT; 88 type_ = TEXT;
89 break; 89 break;
90 default: 90 default:
91 NOTREACHED(); 91 NOTREACHED();
92 break; 92 break;
93 } 93 }
94 94
95 // Calculate the duration. 95 // Calculate the duration.
96 duration_ = ConvertStreamTimestamp(stream->time_base, stream->duration); 96 duration_ = ConvertStreamTimestamp(stream->time_base, stream->duration);
97 97
98 #if defined(USE_PROPRIETARY_CODECS)
98 if (stream_->codec->codec_id == AV_CODEC_ID_H264) { 99 if (stream_->codec->codec_id == AV_CODEC_ID_H264) {
99 bitstream_converter_.reset( 100 bitstream_converter_.reset(
100 new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec)); 101 new FFmpegH264ToAnnexBBitstreamConverter(stream_->codec));
101 } 102 }
103 #endif
102 104
103 if (is_encrypted) { 105 if (is_encrypted) {
104 AVDictionaryEntry* key = av_dict_get(stream->metadata, "enc_key_id", NULL, 106 AVDictionaryEntry* key = av_dict_get(stream->metadata, "enc_key_id", NULL,
105 0); 107 0);
106 DCHECK(key); 108 DCHECK(key);
107 DCHECK(key->value); 109 DCHECK(key->value);
108 if (!key || !key->value) 110 if (!key || !key->value)
109 return; 111 return;
110 base::StringPiece base64_key_id(key->value); 112 base::StringPiece base64_key_id(key->value);
111 std::string enc_key_id; 113 std::string enc_key_id;
112 base::Base64Decode(base64_key_id, &enc_key_id); 114 base::Base64Decode(base64_key_id, &enc_key_id);
113 DCHECK(!enc_key_id.empty()); 115 DCHECK(!enc_key_id.empty());
114 if (enc_key_id.empty()) 116 if (enc_key_id.empty())
115 return; 117 return;
116 118
117 encryption_key_id_.assign(enc_key_id); 119 encryption_key_id_.assign(enc_key_id);
118 demuxer_->FireNeedKey(kWebMEncryptInitDataType, enc_key_id); 120 demuxer_->FireNeedKey(kWebMEncryptInitDataType, enc_key_id);
119 } 121 }
120 } 122 }
121 123
122 void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { 124 void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
123 DCHECK(task_runner_->BelongsToCurrentThread()); 125 DCHECK(task_runner_->BelongsToCurrentThread());
124 126
125 if (!demuxer_ || end_of_stream_) { 127 if (!demuxer_ || end_of_stream_) {
126 NOTREACHED() << "Attempted to enqueue packet on a stopped stream"; 128 NOTREACHED() << "Attempted to enqueue packet on a stopped stream";
127 return; 129 return;
128 } 130 }
129 131
132 #if defined(USE_PROPRIETARY_CODECS)
130 // Convert the packet if there is a bitstream filter. 133 // Convert the packet if there is a bitstream filter.
131 if (packet->data && bitstream_converter_enabled_ && 134 if (packet->data && bitstream_converter_enabled_ &&
132 !bitstream_converter_->ConvertPacket(packet.get())) { 135 !bitstream_converter_->ConvertPacket(packet.get())) {
133 LOG(ERROR) << "Format conversion failed."; 136 LOG(ERROR) << "Format conversion failed.";
134 } 137 }
138 #endif
135 139
136 // Get side data if any. For now, the only type of side_data is VP8 Alpha. We 140 // Get side data if any. For now, the only type of side_data is VP8 Alpha. We
137 // keep this generic so that other side_data types in the future can be 141 // keep this generic so that other side_data types in the future can be
138 // handled the same way as well. 142 // handled the same way as well.
139 av_packet_split_side_data(packet.get()); 143 av_packet_split_side_data(packet.get());
140 144
141 scoped_refptr<DecoderBuffer> buffer; 145 scoped_refptr<DecoderBuffer> buffer;
142 146
143 if (type() == DemuxerStream::TEXT) { 147 if (type() == DemuxerStream::TEXT) {
144 int id_size = 0; 148 int id_size = 0;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 base::ResetAndReturn(&read_cb_).Run( 290 base::ResetAndReturn(&read_cb_).Run(
287 DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer()); 291 DemuxerStream::kOk, DecoderBuffer::CreateEOSBuffer());
288 return; 292 return;
289 } 293 }
290 294
291 SatisfyPendingRead(); 295 SatisfyPendingRead();
292 } 296 }
293 297
294 void FFmpegDemuxerStream::EnableBitstreamConverter() { 298 void FFmpegDemuxerStream::EnableBitstreamConverter() {
295 DCHECK(task_runner_->BelongsToCurrentThread()); 299 DCHECK(task_runner_->BelongsToCurrentThread());
300
301 #if defined(USE_PROPRIETARY_CODECS)
296 CHECK(bitstream_converter_.get()); 302 CHECK(bitstream_converter_.get());
297 bitstream_converter_enabled_ = true; 303 bitstream_converter_enabled_ = true;
304 #else
305 NOTREACHED() << "Proprietary codecs not enabled.";
scherkus (not reviewing) 2014/05/05 18:22:17 will this end up being logspam?
acolwell GONE FROM CHROMIUM 2014/05/05 18:49:02 It shouldn't. Nothing should be calling this metho
306 #endif
298 } 307 }
299 308
300 bool FFmpegDemuxerStream::SupportsConfigChanges() { return false; } 309 bool FFmpegDemuxerStream::SupportsConfigChanges() { return false; }
301 310
302 AudioDecoderConfig FFmpegDemuxerStream::audio_decoder_config() { 311 AudioDecoderConfig FFmpegDemuxerStream::audio_decoder_config() {
303 DCHECK(task_runner_->BelongsToCurrentThread()); 312 DCHECK(task_runner_->BelongsToCurrentThread());
304 CHECK_EQ(type_, AUDIO); 313 CHECK_EQ(type_, AUDIO);
305 return audio_config_; 314 return audio_config_;
306 } 315 }
307 316
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 } 1038 }
1030 for (size_t i = 0; i < buffered.size(); ++i) 1039 for (size_t i = 0; i < buffered.size(); ++i)
1031 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); 1040 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i));
1032 } 1041 }
1033 1042
1034 void FFmpegDemuxer::OnDataSourceError() { 1043 void FFmpegDemuxer::OnDataSourceError() {
1035 host_->OnDemuxerError(PIPELINE_ERROR_READ); 1044 host_->OnDemuxerError(PIPELINE_ERROR_READ);
1036 } 1045 }
1037 1046
1038 } // namespace media 1047 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698