blob: 982c013e4698cfa3f4d333dd81881b0b44757a8c [file] [log] [blame]
Stefan Holmer1acbd682017-09-01 15:29:28 +02001/*
2 * Copyright (c) 2014 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 */
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020010#include "call/video_config.h"
Stefan Holmer1acbd682017-09-01 15:29:28 +020011
12#include <algorithm>
13#include <sstream>
14#include <string>
15
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "rtc_base/checks.h"
Stefan Holmer1acbd682017-09-01 15:29:28 +020017
18namespace webrtc {
19VideoStream::VideoStream()
20 : width(0),
21 height(0),
22 max_framerate(-1),
23 min_bitrate_bps(-1),
24 target_bitrate_bps(-1),
25 max_bitrate_bps(-1),
26 max_qp(-1) {}
27
28VideoStream::~VideoStream() = default;
29
30std::string VideoStream::ToString() const {
31 std::stringstream ss;
32 ss << "{width: " << width;
33 ss << ", height: " << height;
34 ss << ", max_framerate: " << max_framerate;
35 ss << ", min_bitrate_bps:" << min_bitrate_bps;
36 ss << ", target_bitrate_bps:" << target_bitrate_bps;
37 ss << ", max_bitrate_bps:" << max_bitrate_bps;
38 ss << ", max_qp: " << max_qp;
39
40 ss << ", temporal_layer_thresholds_bps: [";
41 for (size_t i = 0; i < temporal_layer_thresholds_bps.size(); ++i) {
42 ss << temporal_layer_thresholds_bps[i];
43 if (i != temporal_layer_thresholds_bps.size() - 1)
44 ss << ", ";
45 }
46 ss << ']';
47
48 ss << '}';
49 return ss.str();
50}
51
52VideoEncoderConfig::VideoEncoderConfig()
53 : content_type(ContentType::kRealtimeVideo),
54 encoder_specific_settings(nullptr),
55 min_transmit_bitrate_bps(0),
56 max_bitrate_bps(0),
Seth Hampsonf32795e2017-12-19 11:37:41 -080057 bitrate_priority(1.0),
Stefan Holmer1acbd682017-09-01 15:29:28 +020058 number_of_streams(0) {}
59
60VideoEncoderConfig::VideoEncoderConfig(VideoEncoderConfig&&) = default;
61
62VideoEncoderConfig::~VideoEncoderConfig() = default;
63
64std::string VideoEncoderConfig::ToString() const {
65 std::stringstream ss;
66 ss << "{content_type: ";
67 switch (content_type) {
68 case ContentType::kRealtimeVideo:
69 ss << "kRealtimeVideo";
70 break;
71 case ContentType::kScreen:
72 ss << "kScreenshare";
73 break;
74 }
75 ss << ", encoder_specific_settings: ";
76 ss << (encoder_specific_settings != NULL ? "(ptr)" : "NULL");
77
78 ss << ", min_transmit_bitrate_bps: " << min_transmit_bitrate_bps;
79 ss << '}';
80 return ss.str();
81}
82
83VideoEncoderConfig::VideoEncoderConfig(const VideoEncoderConfig&) = default;
84
85void VideoEncoderConfig::EncoderSpecificSettings::FillEncoderSpecificSettings(
86 VideoCodec* codec) const {
87 if (codec->codecType == kVideoCodecH264) {
88 FillVideoCodecH264(codec->H264());
89 } else if (codec->codecType == kVideoCodecVP8) {
90 FillVideoCodecVp8(codec->VP8());
91 } else if (codec->codecType == kVideoCodecVP9) {
92 FillVideoCodecVp9(codec->VP9());
93 } else {
94 RTC_NOTREACHED() << "Encoder specifics set/used for unknown codec type.";
95 }
96}
97
98void VideoEncoderConfig::EncoderSpecificSettings::FillVideoCodecH264(
99 VideoCodecH264* h264_settings) const {
100 RTC_NOTREACHED();
101}
102
103void VideoEncoderConfig::EncoderSpecificSettings::FillVideoCodecVp8(
104 VideoCodecVP8* vp8_settings) const {
105 RTC_NOTREACHED();
106}
107
108void VideoEncoderConfig::EncoderSpecificSettings::FillVideoCodecVp9(
109 VideoCodecVP9* vp9_settings) const {
110 RTC_NOTREACHED();
111}
112
113VideoEncoderConfig::H264EncoderSpecificSettings::H264EncoderSpecificSettings(
114 const VideoCodecH264& specifics)
115 : specifics_(specifics) {}
116
117void VideoEncoderConfig::H264EncoderSpecificSettings::FillVideoCodecH264(
118 VideoCodecH264* h264_settings) const {
119 *h264_settings = specifics_;
120}
121
122VideoEncoderConfig::Vp8EncoderSpecificSettings::Vp8EncoderSpecificSettings(
123 const VideoCodecVP8& specifics)
124 : specifics_(specifics) {}
125
126void VideoEncoderConfig::Vp8EncoderSpecificSettings::FillVideoCodecVp8(
127 VideoCodecVP8* vp8_settings) const {
128 *vp8_settings = specifics_;
129}
130
131VideoEncoderConfig::Vp9EncoderSpecificSettings::Vp9EncoderSpecificSettings(
132 const VideoCodecVP9& specifics)
133 : specifics_(specifics) {}
134
135void VideoEncoderConfig::Vp9EncoderSpecificSettings::FillVideoCodecVp9(
136 VideoCodecVP9* vp9_settings) const {
137 *vp9_settings = specifics_;
138}
139
140} // namespace webrtc