| /* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ |
| #define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ |
| |
| #include <list> |
| |
| #include "vpx/vpx_encoder.h" |
| |
| #include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" |
| #include "webrtc/modules/video_coding/utility/include/frame_dropper.h" |
| #include "webrtc/typedefs.h" |
| |
| namespace webrtc { |
| |
| struct CodecSpecificInfoVP8; |
| |
| class ScreenshareLayers : public TemporalLayers { |
| public: |
| static const double kMaxTL0FpsReduction; |
| static const double kAcceptableTargetOvershoot; |
| |
| ScreenshareLayers(int num_temporal_layers, |
| uint8_t initial_tl0_pic_idx, |
| FrameDropper* tl0_frame_dropper, |
| FrameDropper* tl1_frame_dropper); |
| virtual ~ScreenshareLayers() {} |
| |
| // Returns the recommended VP8 encode flags needed. May refresh the decoder |
| // and/or update the reference buffers. |
| virtual int EncodeFlags(uint32_t timestamp); |
| |
| virtual bool ConfigureBitrates(int bitrate_kbit, |
| int max_bitrate_kbit, |
| int framerate, |
| vpx_codec_enc_cfg_t* cfg); |
| |
| virtual void PopulateCodecSpecific(bool base_layer_sync, |
| CodecSpecificInfoVP8 *vp8_info, |
| uint32_t timestamp); |
| |
| virtual void FrameEncoded(unsigned int size, uint32_t timestamp); |
| |
| virtual int CurrentLayerId() const; |
| |
| protected: |
| virtual bool TargetBitrateExperimentEnabled(); |
| |
| private: |
| void CalculateFramerate(uint32_t timestamp); |
| bool TimeToSync(uint32_t timestamp) const; |
| |
| FrameDropper* tl0_frame_dropper_; |
| FrameDropper* tl1_frame_dropper_; |
| int number_of_temporal_layers_; |
| bool last_base_layer_sync_; |
| uint8_t tl0_pic_idx_; |
| int active_layer_; |
| std::list<uint32_t> timestamp_list_; |
| int framerate_; |
| int64_t last_sync_timestamp_; |
| }; |
| } // namespace webrtc |
| |
| #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ |