| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "media/base/supported_video_decoder_config.h" |
| |
| namespace media { |
| |
| SupportedVideoDecoderConfig::SupportedVideoDecoderConfig() = default; |
| |
| SupportedVideoDecoderConfig::SupportedVideoDecoderConfig( |
| VideoCodecProfile profile_min, |
| VideoCodecProfile profile_max, |
| const gfx::Size& coded_size_min, |
| const gfx::Size& coded_size_max, |
| bool allow_encrypted, |
| bool require_encrypted) |
| : profile_min(profile_min), |
| profile_max(profile_max), |
| coded_size_min(coded_size_min), |
| coded_size_max(coded_size_max), |
| allow_encrypted(allow_encrypted), |
| require_encrypted(require_encrypted) {} |
| |
| SupportedVideoDecoderConfig::~SupportedVideoDecoderConfig() = default; |
| |
| bool SupportedVideoDecoderConfig::Matches( |
| const VideoDecoderConfig& config) const { |
| if (config.profile() < profile_min || config.profile() > profile_max) |
| return false; |
| |
| if (config.is_encrypted()) { |
| if (!allow_encrypted) |
| return false; |
| } else { |
| if (require_encrypted) |
| return false; |
| } |
| |
| if (config.coded_size().width() < coded_size_min.width()) |
| return false; |
| if (config.coded_size().height() < coded_size_min.height()) |
| return false; |
| |
| if (config.coded_size().width() > coded_size_max.width()) |
| return false; |
| if (config.coded_size().height() > coded_size_max.height()) |
| return false; |
| |
| return true; |
| } |
| |
| // static |
| bool IsVideoDecoderConfigSupported( |
| const SupportedVideoDecoderConfigs& supported_configs, |
| const VideoDecoderConfig& config) { |
| for (const auto& c : supported_configs) { |
| if (c.Matches(config)) |
| return true; |
| } |
| return false; |
| } |
| |
| } // namespace media |