blob: c8f40cee7f475a02cb71d7af5cefa34600dfe049 [file] [log] [blame]
Niels Möllerbe682d42018-03-27 08:31:45 +02001/*
2 * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "api/video_codecs/video_decoder.h"
12
Danil Chapovalovecc46ef2021-08-09 15:30:47 +020013#include "absl/types/optional.h"
14#include "api/video/render_resolution.h"
15#include "api/video/video_codec_type.h"
Danil Chapovalovba0a3062021-08-13 18:15:55 +020016#include "rtc_base/checks.h"
Erik Språngc12f6252021-01-13 21:49:59 +010017#include "rtc_base/strings/string_builder.h"
18
Niels Möllerbe682d42018-03-27 08:31:45 +020019namespace webrtc {
20
21int32_t DecodedImageCallback::Decoded(VideoFrame& decodedImage,
22 int64_t decode_time_ms) {
23 // The default implementation ignores custom decode time value.
24 return Decoded(decodedImage);
25}
26
27void DecodedImageCallback::Decoded(VideoFrame& decodedImage,
Danil Chapovalov0bc58cf2018-06-21 13:32:56 +020028 absl::optional<int32_t> decode_time_ms,
29 absl::optional<uint8_t> qp) {
Niels Möllerbe682d42018-03-27 08:31:45 +020030 Decoded(decodedImage, decode_time_ms.value_or(-1));
31}
32
Erik Språngc12f6252021-01-13 21:49:59 +010033VideoDecoder::DecoderInfo VideoDecoder::GetDecoderInfo() const {
34 DecoderInfo info;
35 info.implementation_name = ImplementationName();
36 return info;
37}
38
Niels Möllerbe682d42018-03-27 08:31:45 +020039const char* VideoDecoder::ImplementationName() const {
40 return "unknown";
41}
42
Erik Språngc12f6252021-01-13 21:49:59 +010043std::string VideoDecoder::DecoderInfo::ToString() const {
44 char string_buf[2048];
45 rtc::SimpleStringBuilder oss(string_buf);
46
47 oss << "DecoderInfo { "
48 << "prefers_late_decoding = "
49 << "implementation_name = '" << implementation_name << "', "
50 << "is_hardware_accelerated = "
51 << (is_hardware_accelerated ? "true" : "false") << " }";
52 return oss.str();
53}
54
55bool VideoDecoder::DecoderInfo::operator==(const DecoderInfo& rhs) const {
56 return is_hardware_accelerated == rhs.is_hardware_accelerated &&
57 implementation_name == rhs.implementation_name;
58}
59
Danil Chapovalovba0a3062021-08-13 18:15:55 +020060void VideoDecoder::Settings::set_number_of_cores(int value) {
61 RTC_DCHECK_GT(value, 0);
62 number_of_cores_ = value;
63}
64
Niels Möllerbe682d42018-03-27 08:31:45 +020065} // namespace webrtc