Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Unified Diff: webrtc/modules/video_coding/codecs/vp8/temporal_layers.h

Issue 2510583002: Reland #2 of Issue 2434073003: Extract bitrate allocation ... (Closed)
Patch Set: Addressed comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698