12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Copyright (c) 2012 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/video_decoder.h"
- #include <algorithm>
- #include "base/command_line.h"
- #include "base/cxx17_backports.h"
- #include "base/strings/string_number_conversions.h"
- #include "base/system/sys_info.h"
- #include "media/base/limits.h"
- #include "media/base/media_switches.h"
- #include "media/base/video_frame.h"
- namespace media {
- VideoDecoder::VideoDecoder() = default;
- VideoDecoder::~VideoDecoder() = default;
- bool VideoDecoder::NeedsBitstreamConversion() const {
- return false;
- }
- bool VideoDecoder::CanReadWithoutStalling() const {
- return true;
- }
- int VideoDecoder::GetMaxDecodeRequests() const {
- return 1;
- }
- bool VideoDecoder::FramesHoldExternalResources() const {
- return false;
- }
- // static
- int VideoDecoder::GetRecommendedThreadCount(int desired_threads) {
- // If the thread count is specified on the command line, respect it so long as
- // it's greater than zero.
- const auto threads =
- base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kVideoThreads);
- int decode_threads;
- if (base::StringToInt(threads, &decode_threads) && decode_threads > 0)
- return decode_threads;
- // Clamp to the number of available logical processors/cores.
- desired_threads =
- std::min(desired_threads, base::SysInfo::NumberOfProcessors());
- // Always try to use at least two threads for video decoding. There is little
- // reason not to since current day CPUs tend to be multi-core and we measured
- // performance benefits on older machines such as P4s with hyperthreading.
- //
- // All our software video decoders treat having one thread the same as having
- // zero threads; I.e., decoding will execute on the calling thread. Therefore,
- // at least two threads are required to allow decoding to progress outside of
- // each Decode() call.
- return base::clamp(desired_threads,
- static_cast<int>(limits::kMinVideoDecodeThreads),
- static_cast<int>(limits::kMaxVideoDecodeThreads));
- }
- } // namespace media
|