Index: webrtc/modules/video_coding/codecs/vp8/temporal_layers.h |
diff --git a/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h b/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h |
index 0d09839a8c4e822aae4135c2bf1751a139a2844e..ad3a205c622c0a936da067be5b743312dedb9683 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h |
+++ b/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h |
@@ -12,18 +12,21 @@ |
#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ |
#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ |
-#include "vpx/vpx_encoder.h" |
+#include <vector> |
#include "webrtc/common_video/include/video_image.h" |
#include "webrtc/typedefs.h" |
+struct vpx_codec_enc_cfg; |
+typedef struct vpx_codec_enc_cfg vpx_codec_enc_cfg_t; |
+ |
namespace webrtc { |
struct CodecSpecificInfoVP8; |
class TemporalLayers { |
public: |
- // Factory for TemporalLayer strategy. Default behaviour is a fixed pattern |
+ // Factory for TemporalLayer strategy. Default behavior is a fixed pattern |
// of temporal layers. See default_temporal_layers.cc |
virtual ~TemporalLayers() {} |
@@ -31,10 +34,15 @@ class TemporalLayers { |
// and/or update the reference buffers. |
virtual int EncodeFlags(uint32_t timestamp) = 0; |
- virtual bool ConfigureBitrates(int bitrate_kbit, |
- int max_bitrate_kbit, |
- int framerate, |
- vpx_codec_enc_cfg_t* cfg) = 0; |
+ // Update state based on new bitrate target and incoming framerate. |
+ // Returns the bitrate allocation for the active temporal layers. |
+ virtual std::vector<uint32_t> OnRatesUpdated(int bitrate_kbps, |
+ int max_bitrate_kbps, |
+ int framerate) = 0; |
+ |
+ // Update the encoder configuration with target bitrates or other parameters. |
+ // Returns true iff the configuration was actually modified. |
+ virtual bool UpdateConfiguration(vpx_codec_enc_cfg_t* cfg) = 0; |
virtual void PopulateCodecSpecific(bool base_layer_sync, |
CodecSpecificInfoVP8* vp8_info, |
@@ -43,26 +51,52 @@ class TemporalLayers { |
virtual void FrameEncoded(unsigned int size, uint32_t timestamp, int qp) = 0; |
virtual int CurrentLayerId() const = 0; |
- |
- virtual bool UpdateConfiguration(vpx_codec_enc_cfg_t* cfg) = 0; |
}; |
+class TemporalLayersListener; |
class TemporalLayersFactory { |
public: |
+ TemporalLayersFactory() : listener_(nullptr) {} |
virtual ~TemporalLayersFactory() {} |
- virtual TemporalLayers* Create(int temporal_layers, |
+ virtual TemporalLayers* Create(int simulcast_id, |
+ int temporal_layers, |
uint8_t initial_tl0_pic_idx) const; |
+ void SetListener(TemporalLayersListener* listener); |
+ |
+ protected: |
+ TemporalLayersListener* listener_; |
+}; |
+ |
+class ScreenshareTemporalLayersFactory : public webrtc::TemporalLayersFactory { |
+ public: |
+ ScreenshareTemporalLayersFactory() {} |
+ virtual ~ScreenshareTemporalLayersFactory() {} |
+ |
+ webrtc::TemporalLayers* Create(int simulcast_id, |
+ int num_temporal_layers, |
+ uint8_t initial_tl0_pic_idx) const override; |
}; |
// Factory for a temporal layers strategy that adaptively changes the number of |
-// layers based on input framerate so that the base layer has an acceptable |
-// framerate. See realtime_temporal_layers.cc |
+// layers based on input frame rate so that the base layer has an acceptable |
+// frame rate. See realtime_temporal_layers.cc |
class RealTimeTemporalLayersFactory : public TemporalLayersFactory { |
public: |
+ RealTimeTemporalLayersFactory() {} |
~RealTimeTemporalLayersFactory() override {} |
- TemporalLayers* Create(int num_temporal_layers, |
+ TemporalLayers* Create(int simulcast_id, |
+ int num_temporal_layers, |
uint8_t initial_tl0_pic_idx) const override; |
}; |
+class TemporalLayersListener { |
+ public: |
+ TemporalLayersListener() {} |
+ virtual ~TemporalLayersListener() {} |
+ |
+ virtual void OnTemporalLayersCreated(int simulcast_id, |
+ TemporalLayers* layers) = 0; |
+}; |
+ |
} // namespace webrtc |
#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ |