blob: 1251e58f29309956f7c84d2addddb0832a378984 [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;
45 int InitEncode(const VideoCodec* inst,
46 int number_of_cores,
47 size_t max_payload_size) override;
48 int Encode(const VideoFrame& input_image,
Niels Möller87e2d782019-03-07 10:18:23 +010049 const std::vector<VideoFrameType>* frame_types) override;
Florent Castellie7862cc2018-12-06 13:38:24 +010050 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override;
Minyue Li7ddef1a2019-04-11 10:50:19 +000051 int SetRateAllocation(const VideoBitrateAllocation& bitrate,
52 uint32_t new_framerate) override;
Elad Alonfb20afd2019-04-10 16:38:16 +020053 void OnPacketLossRateUpdate(float packet_loss_rate) override;
54 void OnRttUpdate(int64_t rtt_ms) override;
55 void OnLossNotification(const LossNotification& loss_notification) override;
Florent Castellie7862cc2018-12-06 13:38:24 +010056 EncoderInfo GetEncoderInfo() const override;
57
58 private:
59 VideoEncoderFactory* const factory_;
60 SdpVideoFormat video_format_;
61 std::unique_ptr<VideoEncoder> encoder_;
62 EncodedImageCallback* callback_;
63};
64
65} // namespace webrtc
66
67#endif // MEDIA_ENGINE_ENCODER_SIMULCAST_PROXY_H_