blob: 7709aa205aa8d30221bd3836205531ec2709062d [file] [log] [blame]
Florent Castellie7862cc2018-12-06 13:38:24 +01001/*
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 *
10 */
11
12#ifndef MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_
13#define MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_
14
15#include <stddef.h>
16#include <stdint.h>
17#include <memory>
18#include <vector>
19
20#include "api/video/video_bitrate_allocation.h"
21#include "api/video/video_frame.h"
22#include "api/video_codecs/sdp_video_format.h"
23#include "api/video_codecs/video_codec.h"
24#include "api/video_codecs/video_encoder.h"
25#include "api/video_codecs/video_encoder_factory.h"
Florent Castellie7862cc2018-12-06 13:38:24 +010026#include "modules/video_coding/include/video_codec_interface.h"
Mirko Bonadei66e76792019-04-02 11:33:59 +020027#include "rtc_base/system/rtc_export.h"
Florent Castellie7862cc2018-12-06 13:38:24 +010028
29namespace webrtc {
30
31// This class provides fallback to SimulcastEncoderAdapter if default VP8Encoder
32// doesn't support simulcast for provided settings.
Mirko Bonadei66e76792019-04-02 11:33:59 +020033class RTC_EXPORT EncoderSimulcastProxy : public VideoEncoder {
Florent Castellie7862cc2018-12-06 13:38:24 +010034 public:
35 EncoderSimulcastProxy(VideoEncoderFactory* factory,
36 const SdpVideoFormat& format);
37 // Deprecated. Remove once all clients use constructor with both factory and
38 // SdpVideoFormat;
39 explicit EncoderSimulcastProxy(VideoEncoderFactory* factory);
40
41 ~EncoderSimulcastProxy() override;
42
43 // Implements VideoEncoder.
44 int Release() override;
Elad Alon370f93a2019-06-11 14:57:57 +020045 int InitEncode(const VideoCodec* codec_settings,
46 const VideoEncoder::Settings& settings) override;
Florent Castellie7862cc2018-12-06 13:38:24 +010047 int Encode(const VideoFrame& input_image,
Niels Möller87e2d782019-03-07 10:18:23 +010048 const std::vector<VideoFrameType>* frame_types) override;
Florent Castellie7862cc2018-12-06 13:38:24 +010049 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override;
Erik Språng16cb8f52019-04-12 13:59:09 +020050 void SetRates(const RateControlParameters& parameters) override;
Elad Alonfb20afd2019-04-10 16:38:16 +020051 void OnPacketLossRateUpdate(float packet_loss_rate) override;
52 void OnRttUpdate(int64_t rtt_ms) override;
53 void OnLossNotification(const LossNotification& loss_notification) override;
Florent Castellie7862cc2018-12-06 13:38:24 +010054 EncoderInfo GetEncoderInfo() const override;
55
56 private:
57 VideoEncoderFactory* const factory_;
58 SdpVideoFormat video_format_;
59 std::unique_ptr<VideoEncoder> encoder_;
60 EncodedImageCallback* callback_;
61};
62
63} // namespace webrtc
64
65#endif // MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_