blob: bdf8ca5cce35e09910d75ce109ced24c723ebe63 [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));
29 switch (codec_type) {
30 case kVideoCodecVP8:
31 strncpy(settings->plName, "VP8", 4);
32 settings->codecType = kVideoCodecVP8;
33 // 96 to 127 dynamic payload types for video codecs.
34 settings->plType = kTestPayloadType;
35 settings->startBitrate = kTestStartBitrateKbps;
36 settings->minBitrate = kTestMinBitrateKbps;
37 settings->maxBitrate = 0;
38 settings->maxFramerate = kTestFrameRate;
39 settings->width = kTestWidth;
40 settings->height = kTestHeight;
41 settings->numberOfSimulcastStreams = 0;
42 settings->qpMax = 56;
43 settings->timing_frame_thresholds = {
44 kTestTimingFramesDelayMs, kTestOutlierFrameSizePercent,
45 };
Seth Hampson46e31ba2018-01-18 10:39:54 -080046 settings->active = true;
mflodman351424e2017-08-10 02:43:14 -070047 *(settings->VP8()) = VideoEncoder::GetDefaultVp8Settings();
48 return;
49 case kVideoCodecVP9:
50 strncpy(settings->plName, "VP9", 4);
51 settings->codecType = kVideoCodecVP9;
52 // 96 to 127 dynamic payload types for video codecs.
53 settings->plType = kTestPayloadType;
54 settings->startBitrate = 100;
55 settings->minBitrate = kTestMinBitrateKbps;
56 settings->maxBitrate = 0;
57 settings->maxFramerate = kTestFrameRate;
58 settings->width = kTestWidth;
59 settings->height = kTestHeight;
60 settings->numberOfSimulcastStreams = 0;
61 settings->qpMax = 56;
62 settings->timing_frame_thresholds = {
63 kTestTimingFramesDelayMs, kTestOutlierFrameSizePercent,
64 };
Seth Hampson46e31ba2018-01-18 10:39:54 -080065 settings->active = true;
mflodman351424e2017-08-10 02:43:14 -070066 *(settings->VP9()) = VideoEncoder::GetDefaultVp9Settings();
67 return;
68 case kVideoCodecH264:
69 strncpy(settings->plName, "H264", 5);
70 settings->codecType = kVideoCodecH264;
71 // 96 to 127 dynamic payload types for video codecs.
72 settings->plType = kTestPayloadType;
73 settings->startBitrate = kTestStartBitrateKbps;
74 settings->minBitrate = kTestMinBitrateKbps;
75 settings->maxBitrate = 0;
76 settings->maxFramerate = kTestFrameRate;
77 settings->width = kTestWidth;
78 settings->height = kTestHeight;
79 settings->numberOfSimulcastStreams = 0;
80 settings->qpMax = 56;
81 settings->timing_frame_thresholds = {
82 kTestTimingFramesDelayMs, kTestOutlierFrameSizePercent,
83 };
Seth Hampson46e31ba2018-01-18 10:39:54 -080084 settings->active = true;
mflodman351424e2017-08-10 02:43:14 -070085 *(settings->H264()) = VideoEncoder::GetDefaultH264Settings();
86 return;
87 case kVideoCodecI420:
88 strncpy(settings->plName, "I420", 5);
89 settings->codecType = kVideoCodecI420;
90 // 96 to 127 dynamic payload types for video codecs.
91 settings->plType = kTestPayloadType;
92 // Bitrate needed for this size and framerate.
93 settings->startBitrate =
94 3 * kTestWidth * kTestHeight * 8 * kTestFrameRate / 1000 / 2;
95 settings->maxBitrate = settings->startBitrate;
96 settings->maxFramerate = kTestFrameRate;
97 settings->width = kTestWidth;
98 settings->height = kTestHeight;
99 settings->minBitrate = kTestMinBitrateKbps;
100 settings->numberOfSimulcastStreams = 0;
Seth Hampson46e31ba2018-01-18 10:39:54 -0800101 settings->active = true;
mflodman351424e2017-08-10 02:43:14 -0700102 return;
103 case kVideoCodecRED:
104 case kVideoCodecULPFEC:
105 case kVideoCodecFlexfec:
Emircan Uysalerd7ae3c32018-01-25 13:01:09 -0800106 case kVideoCodecMultiplex:
mflodman351424e2017-08-10 02:43:14 -0700107 case kVideoCodecGeneric:
108 case kVideoCodecUnknown:
109 RTC_NOTREACHED();
110 return;
111 }
112}
113} // namespace test
114} // namespace webrtc
115
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200116#endif // TEST_VIDEO_CODEC_SETTINGS_H_