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

Side by Side Diff: media/ffmpeg/ffmpeg_common.cc

Issue 1490613005: media config: expand is_encrypted to a struct. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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/ffmpeg/ffmpeg_common.h" 5 #include "media/ffmpeg/ffmpeg_common.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/sha1.h" 10 #include "base/sha1.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_split.h" 12 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "media/base/decoder_buffer.h" 14 #include "media/base/decoder_buffer.h"
15 #include "media/base/encryption_scheme.h"
15 #include "media/base/video_decoder_config.h" 16 #include "media/base/video_decoder_config.h"
16 #include "media/base/video_util.h" 17 #include "media/base/video_util.h"
17 18
18 namespace media { 19 namespace media {
19 20
20 // Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are 21 // Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are
21 // padded. Check here to ensure FFmpeg only receives data padded to its 22 // padded. Check here to ensure FFmpeg only receives data padded to its
22 // specifications. 23 // specifications.
23 static_assert(DecoderBuffer::kPaddingSize >= FF_INPUT_BUFFER_PADDING_SIZE, 24 static_assert(DecoderBuffer::kPaddingSize >= FF_INPUT_BUFFER_PADDING_SIZE,
24 "DecoderBuffer padding size does not fit ffmpeg requirement"); 25 "DecoderBuffer padding size does not fit ffmpeg requirement");
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 << " extra data cannot have size of " 338 << " extra data cannot have size of "
338 << codec_context->extradata_size << "."; 339 << codec_context->extradata_size << ".";
339 return false; 340 return false;
340 } 341 }
341 342
342 std::vector<uint8_t> extra_data; 343 std::vector<uint8_t> extra_data;
343 if (codec_context->extradata_size > 0) { 344 if (codec_context->extradata_size > 0) {
344 extra_data.assign(codec_context->extradata, 345 extra_data.assign(codec_context->extradata,
345 codec_context->extradata + codec_context->extradata_size); 346 codec_context->extradata + codec_context->extradata_size);
346 } 347 }
347 config->Initialize(codec, 348 config->Initialize(codec, sample_format, channel_layout, sample_rate,
348 sample_format, 349 extra_data, EncryptionScheme(is_encrypted), seek_preroll,
349 channel_layout,
350 sample_rate,
351 extra_data,
352 is_encrypted,
353 seek_preroll,
354 codec_context->delay); 350 codec_context->delay);
355 351
356 if (codec != kCodecOpus) { 352 if (codec != kCodecOpus) {
357 DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8, 353 DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8,
358 config->bits_per_channel()); 354 config->bits_per_channel());
359 } 355 }
360 356
361 return true; 357 return true;
362 } 358 }
363 359
364 bool AVStreamToAudioDecoderConfig(const AVStream* stream, 360 bool AVStreamToAudioDecoderConfig(const AVStream* stream,
365 AudioDecoderConfig* config) { 361 AudioDecoderConfig* config) {
366 bool is_encrypted = false; 362 bool is_encrypted = false;
367 AVDictionaryEntry* key = 363 AVDictionaryEntry* key =
368 av_dict_get(stream->metadata, "enc_key_id", nullptr, 0); 364 av_dict_get(stream->metadata, "enc_key_id", nullptr, 0);
369 if (key) 365 if (key)
370 is_encrypted = true; 366 is_encrypted = true;
371 return AVCodecContextToAudioDecoderConfig(stream->codec, is_encrypted, 367 return AVCodecContextToAudioDecoderConfig(stream->codec, is_encrypted,
ddorwin 2015/12/10 18:36:01 We could create the correct object here.
dougsteed 2015/12/14 21:19:02 Would it be beneficial to push EncryptionScheme fu
372 config); 368 config);
373 } 369 }
374 370
375 void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, 371 void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
376 AVCodecContext* codec_context) { 372 AVCodecContext* codec_context) {
377 codec_context->codec_type = AVMEDIA_TYPE_AUDIO; 373 codec_context->codec_type = AVMEDIA_TYPE_AUDIO;
378 codec_context->codec_id = AudioCodecToCodecID(config.codec(), 374 codec_context->codec_id = AudioCodecToCodecID(config.codec(),
379 config.sample_format()); 375 config.sample_format());
380 codec_context->sample_fmt = SampleFormatToAVSampleFormat( 376 codec_context->sample_fmt = SampleFormatToAVSampleFormat(
381 config.sample_format()); 377 config.sample_format());
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 << stream->codec->extradata_size << "."; 487 << stream->codec->extradata_size << ".";
492 return false; 488 return false;
493 } 489 }
494 490
495 std::vector<uint8_t> extra_data; 491 std::vector<uint8_t> extra_data;
496 if (stream->codec->extradata_size > 0) { 492 if (stream->codec->extradata_size > 0) {
497 extra_data.assign(stream->codec->extradata, 493 extra_data.assign(stream->codec->extradata,
498 stream->codec->extradata + stream->codec->extradata_size); 494 stream->codec->extradata + stream->codec->extradata_size);
499 } 495 }
500 config->Initialize(codec, profile, format, color_space, coded_size, 496 config->Initialize(codec, profile, format, color_space, coded_size,
501 visible_rect, natural_size, extra_data, is_encrypted); 497 visible_rect, natural_size, extra_data,
498 EncryptionScheme(is_encrypted));
502 return true; 499 return true;
503 } 500 }
504 501
505 void VideoDecoderConfigToAVCodecContext( 502 void VideoDecoderConfigToAVCodecContext(
506 const VideoDecoderConfig& config, 503 const VideoDecoderConfig& config,
507 AVCodecContext* codec_context) { 504 AVCodecContext* codec_context) {
508 codec_context->codec_type = AVMEDIA_TYPE_VIDEO; 505 codec_context->codec_type = AVMEDIA_TYPE_VIDEO;
509 codec_context->codec_id = VideoCodecToCodecID(config.codec()); 506 codec_context->codec_id = VideoCodecToCodecID(config.codec());
510 codec_context->profile = VideoCodecProfileToProfileID(config.profile()); 507 codec_context->profile = VideoCodecProfileToProfileID(config.profile());
511 codec_context->coded_width = config.coded_size().width(); 508 codec_context->coded_width = config.coded_size().width();
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 } 687 }
691 688
692 int32_t HashCodecName(const char* codec_name) { 689 int32_t HashCodecName(const char* codec_name) {
693 // Use the first 32-bits from the SHA1 hash as the identifier. 690 // Use the first 32-bits from the SHA1 hash as the identifier.
694 int32_t hash; 691 int32_t hash;
695 memcpy(&hash, base::SHA1HashString(codec_name).substr(0, 4).c_str(), 4); 692 memcpy(&hash, base::SHA1HashString(codec_name).substr(0, 4).c_str(), 4);
696 return hash; 693 return hash;
697 } 694 }
698 695
699 } // namespace media 696 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698