blob: f09b0b1e553ed17592ba984548c7e0fbe55ad948 [file] [log] [blame]
mflodman351424e2017-08-10 02:43:14 -07001/*
2 * Copyright (c) 2017 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#ifndef TEST_VIDEO_CODEC_SETTINGS_H_
11#define TEST_VIDEO_CODEC_SETTINGS_H_
mflodman351424e2017-08-10 02:43:14 -070012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "api/video_codecs/video_encoder.h"
mflodman351424e2017-08-10 02:43:14 -070014
15namespace webrtc {
16namespace test {
17
18const uint16_t kTestWidth = 352;
19const uint16_t kTestHeight = 288;
20const uint32_t kTestFrameRate = 30;
21const unsigned int kTestMinBitrateKbps = 30;
22const unsigned int kTestStartBitrateKbps = 300;
23const uint8_t kTestPayloadType = 100;
24const int64_t kTestTimingFramesDelayMs = 200;
25const uint16_t kTestOutlierFrameSizePercent = 250;
26
27static void CodecSettings(VideoCodecType codec_type, VideoCodec* settings) {
28 memset(settings, 0, sizeof(VideoCodec));
Rasmus Brandt2b304f12018-02-05 09:52:47 +010029
30 settings->plType = kTestPayloadType;
31
32 settings->width = kTestWidth;
33 settings->height = kTestHeight;
34
35 settings->startBitrate = kTestStartBitrateKbps;
36 settings->maxBitrate = 0;
37 settings->minBitrate = kTestMinBitrateKbps;
38 settings->targetBitrate = 0;
39
40 settings->maxFramerate = kTestFrameRate;
41
42 settings->active = true;
43
44 settings->qpMax = 56; // See webrtcvideoengine.h.
45 settings->numberOfSimulcastStreams = 0;
46
47 settings->timing_frame_thresholds = {
48 kTestTimingFramesDelayMs, kTestOutlierFrameSizePercent,
49 };
50
mflodman351424e2017-08-10 02:43:14 -070051 switch (codec_type) {
52 case kVideoCodecVP8:
mflodman351424e2017-08-10 02:43:14 -070053 settings->codecType = kVideoCodecVP8;
mflodman351424e2017-08-10 02:43:14 -070054 *(settings->VP8()) = VideoEncoder::GetDefaultVp8Settings();
55 return;
56 case kVideoCodecVP9:
mflodman351424e2017-08-10 02:43:14 -070057 settings->codecType = kVideoCodecVP9;
mflodman351424e2017-08-10 02:43:14 -070058 *(settings->VP9()) = VideoEncoder::GetDefaultVp9Settings();
59 return;
60 case kVideoCodecH264:
mflodman351424e2017-08-10 02:43:14 -070061 settings->codecType = kVideoCodecH264;
Rasmus Brandt2b304f12018-02-05 09:52:47 +010062 // TODO(brandtr): Set |qpMax| here, when the OpenH264 wrapper supports it.
mflodman351424e2017-08-10 02:43:14 -070063 *(settings->H264()) = VideoEncoder::GetDefaultH264Settings();
64 return;
65 case kVideoCodecI420:
mflodman351424e2017-08-10 02:43:14 -070066 settings->codecType = kVideoCodecI420;
mflodman351424e2017-08-10 02:43:14 -070067 // Bitrate needed for this size and framerate.
68 settings->startBitrate =
69 3 * kTestWidth * kTestHeight * 8 * kTestFrameRate / 1000 / 2;
70 settings->maxBitrate = settings->startBitrate;
mflodman351424e2017-08-10 02:43:14 -070071 return;
Emircan Uysalerd7ae3c32018-01-25 13:01:09 -080072 case kVideoCodecMultiplex:
mflodman351424e2017-08-10 02:43:14 -070073 case kVideoCodecGeneric:
74 case kVideoCodecUnknown:
75 RTC_NOTREACHED();
76 return;
77 }
78}
79} // namespace test
80} // namespace webrtc
81
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020082#endif // TEST_VIDEO_CODEC_SETTINGS_H_