| 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..e1f1e0abae75f10b5134198983af7c5507e1cf44 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,42 @@ 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_;
|
| };
|
|
|
| // 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_
|
|
|