| Index: media/ffmpeg/ffmpeg_common.cc
|
| diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc
|
| index 51e8884fedb1b35fab80b24e13abda6ae4c8f688..eb46e8ff851276f61f4e19deed39f4181c322812 100644
|
| --- a/media/ffmpeg/ffmpeg_common.cc
|
| +++ b/media/ffmpeg/ffmpeg_common.cc
|
| @@ -13,12 +13,24 @@
|
| #include "build/build_config.h"
|
| #include "media/base/audio_decoder_config.h"
|
| #include "media/base/decoder_buffer.h"
|
| +#include "media/base/encryption_scheme.h"
|
| #include "media/base/video_decoder_config.h"
|
| #include "media/base/video_util.h"
|
| #include "media/media_features.h"
|
|
|
| namespace media {
|
|
|
| +namespace {
|
| +
|
| +EncryptionScheme GetEncryptionScheme(const AVStream* stream) {
|
| + AVDictionaryEntry* key =
|
| + av_dict_get(stream->metadata, "enc_key_id", nullptr, 0);
|
| + return EncryptionScheme(key ? EncryptionScheme::kCipherModeAesCtr
|
| + : EncryptionScheme::kCipherModeUnencrypted);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are
|
| // padded. Check here to ensure FFmpeg only receives data padded to its
|
| // specifications.
|
| @@ -303,9 +315,10 @@ static AVSampleFormat SampleFormatToAVSampleFormat(SampleFormat sample_format) {
|
| return AV_SAMPLE_FMT_NONE;
|
| }
|
|
|
| -bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
| - bool is_encrypted,
|
| - AudioDecoderConfig* config) {
|
| +bool AVCodecContextToAudioDecoderConfig(
|
| + const AVCodecContext* codec_context,
|
| + const EncryptionScheme& encryption_scheme,
|
| + AudioDecoderConfig* config) {
|
| DCHECK_EQ(codec_context->codec_type, AVMEDIA_TYPE_AUDIO);
|
|
|
| AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id);
|
| @@ -371,13 +384,9 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
| extra_data.assign(codec_context->extradata,
|
| codec_context->extradata + codec_context->extradata_size);
|
| }
|
| - config->Initialize(codec,
|
| - sample_format,
|
| - channel_layout,
|
| - sample_rate,
|
| - extra_data,
|
| - is_encrypted,
|
| - seek_preroll,
|
| +
|
| + config->Initialize(codec, sample_format, channel_layout, sample_rate,
|
| + extra_data, encryption_scheme, seek_preroll,
|
| codec_context->delay);
|
|
|
| // Verify that AudioConfig.bits_per_channel was calculated correctly for
|
| @@ -400,13 +409,8 @@ bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context,
|
|
|
| bool AVStreamToAudioDecoderConfig(const AVStream* stream,
|
| AudioDecoderConfig* config) {
|
| - bool is_encrypted = false;
|
| - AVDictionaryEntry* key =
|
| - av_dict_get(stream->metadata, "enc_key_id", nullptr, 0);
|
| - if (key)
|
| - is_encrypted = true;
|
| - return AVCodecContextToAudioDecoderConfig(stream->codec, is_encrypted,
|
| - config);
|
| + return AVCodecContextToAudioDecoderConfig(
|
| + stream->codec, GetEncryptionScheme(stream), config);
|
| }
|
|
|
| void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config,
|
| @@ -497,12 +501,6 @@ bool AVStreamToVideoDecoderConfig(const AVStream* stream,
|
| coded_size.set_height((coded_size.height() + 1) / 2 * 2);
|
| }
|
|
|
| - bool is_encrypted = false;
|
| - AVDictionaryEntry* key =
|
| - av_dict_get(stream->metadata, "enc_key_id", nullptr, 0);
|
| - if (key)
|
| - is_encrypted = true;
|
| -
|
| AVDictionaryEntry* webm_alpha =
|
| av_dict_get(stream->metadata, "alpha_mode", nullptr, 0);
|
| if (webm_alpha && !strcmp(webm_alpha->value, "1")) {
|
| @@ -535,7 +533,8 @@ bool AVStreamToVideoDecoderConfig(const AVStream* stream,
|
| stream->codec->extradata + stream->codec->extradata_size);
|
| }
|
| config->Initialize(codec, profile, format, color_space, coded_size,
|
| - visible_rect, natural_size, extra_data, is_encrypted);
|
| + visible_rect, natural_size, extra_data,
|
| + GetEncryptionScheme(stream));
|
| return true;
|
| }
|
|
|
|
|