blob: f217ac5eca71156be1452ca28a925eb5a364e776 [file] [log] [blame]
buildbot@webrtc.orga8530772014-12-10 09:01:18 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
buildbot@webrtc.orga8530772014-12-10 09:01:18 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * 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.
buildbot@webrtc.orga8530772014-12-10 09:01:18 +00009 */
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +000010
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MEDIA_ENGINE_SIMULCAST_H_
12#define MEDIA_ENGINE_SIMULCAST_H_
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000013
Steve Antone78bcb92017-10-31 09:53:08 -070014#include <string>
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000015#include <vector>
16
Niels Möller0a8f4352018-05-18 11:37:23 +020017#include "api/video_codecs/video_encoder_config.h"
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000018
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000019namespace cricket {
sprang@webrtc.org46d4d292014-12-23 15:19:35 +000020
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000021// TODO(pthatcher): Write unit tests just for these functions,
22// independent of WebrtcVideoEngine.
23
Åsa Persson55659812018-06-18 17:51:32 +020024// Gets the total maximum bitrate for the |streams|.
pbosbe16f792015-10-16 12:49:39 -070025int GetTotalMaxBitrateBps(const std::vector<webrtc::VideoStream>& streams);
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000026
Åsa Persson55659812018-06-18 17:51:32 +020027// Adds any bitrate of |max_bitrate_bps| that is above the total maximum bitrate
28// for the |layers| to the highest quality layer.
29void BoostMaxSimulcastLayer(int max_bitrate_bps,
30 std::vector<webrtc::VideoStream>* layers);
31
32// Gets simulcast settings.
33// TODO(asapersson): Remove max_bitrate_bps.
Sergio Garcia Murillo07efe432018-06-21 13:29:29 +020034std::vector<webrtc::VideoStream> GetSimulcastConfig(
35 size_t max_layers,
36 int width,
37 int height,
38 int /*max_bitrate_bps*/,
39 double bitrate_priority,
40 int max_qp,
41 int max_framerate,
42 bool is_screenshare,
43 bool temporal_layers_supported);
sprang429600d2017-01-26 06:12:26 -080044
Seth Hampson1370e302018-02-07 08:50:36 -080045// Gets the simulcast config layers for a non-screensharing case.
46std::vector<webrtc::VideoStream> GetNormalSimulcastLayers(
47 size_t max_layers,
48 int width,
49 int height,
Seth Hampson1370e302018-02-07 08:50:36 -080050 double bitrate_priority,
51 int max_qp,
Sergio Garcia Murillo07efe432018-06-21 13:29:29 +020052 int max_framerate,
53 bool temporal_layers_supported);
Seth Hampson1370e302018-02-07 08:50:36 -080054
Åsa Persson55659812018-06-18 17:51:32 +020055// Gets simulcast config layers for screenshare settings.
Seth Hampson1370e302018-02-07 08:50:36 -080056std::vector<webrtc::VideoStream> GetScreenshareLayers(
57 size_t max_layers,
58 int width,
59 int height,
Seth Hampson1370e302018-02-07 08:50:36 -080060 double bitrate_priority,
61 int max_qp,
62 int max_framerate,
Sergio Garcia Murillo07efe432018-06-21 13:29:29 +020063 bool screenshare_simulcast_enabled,
64 bool temporal_layers_supported);
Seth Hampson1370e302018-02-07 08:50:36 -080065
66bool ScreenshareSimulcastFieldTrialEnabled();
buildbot@webrtc.orga8530772014-12-10 09:01:18 +000067
68} // namespace cricket
69
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020070#endif // MEDIA_ENGINE_SIMULCAST_H_