| Index: webrtc/modules/video_coding/main/source/qm_select.h
|
| diff --git a/webrtc/modules/video_coding/main/source/qm_select.h b/webrtc/modules/video_coding/main/source/qm_select.h
|
| deleted file mode 100644
|
| index 079e7f88792eba5b508dcf61195d2e807a65cd05..0000000000000000000000000000000000000000
|
| --- a/webrtc/modules/video_coding/main/source/qm_select.h
|
| +++ /dev/null
|
| @@ -1,373 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 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_QM_SELECT_H_
|
| -#define WEBRTC_MODULES_VIDEO_CODING_QM_SELECT_H_
|
| -
|
| -#include "webrtc/common_types.h"
|
| -#include "webrtc/typedefs.h"
|
| -
|
| -/******************************************************/
|
| -/* Quality Modes: Resolution and Robustness settings */
|
| -/******************************************************/
|
| -
|
| -namespace webrtc {
|
| -struct VideoContentMetrics;
|
| -
|
| -struct VCMResolutionScale {
|
| - VCMResolutionScale()
|
| - : codec_width(640),
|
| - codec_height(480),
|
| - frame_rate(30.0f),
|
| - spatial_width_fact(1.0f),
|
| - spatial_height_fact(1.0f),
|
| - temporal_fact(1.0f),
|
| - change_resolution_spatial(false),
|
| - change_resolution_temporal(false) {
|
| - }
|
| - uint16_t codec_width;
|
| - uint16_t codec_height;
|
| - float frame_rate;
|
| - float spatial_width_fact;
|
| - float spatial_height_fact;
|
| - float temporal_fact;
|
| - bool change_resolution_spatial;
|
| - bool change_resolution_temporal;
|
| -};
|
| -
|
| -enum ImageType {
|
| - kQCIF = 0, // 176x144
|
| - kHCIF, // 264x216 = half(~3/4x3/4) CIF.
|
| - kQVGA, // 320x240 = quarter VGA.
|
| - kCIF, // 352x288
|
| - kHVGA, // 480x360 = half(~3/4x3/4) VGA.
|
| - kVGA, // 640x480
|
| - kQFULLHD, // 960x540 = quarter FULLHD, and half(~3/4x3/4) WHD.
|
| - kWHD, // 1280x720
|
| - kFULLHD, // 1920x1080
|
| - kNumImageTypes
|
| -};
|
| -
|
| -const uint32_t kSizeOfImageType[kNumImageTypes] =
|
| -{ 25344, 57024, 76800, 101376, 172800, 307200, 518400, 921600, 2073600 };
|
| -
|
| -enum FrameRateLevelClass {
|
| - kFrameRateLow,
|
| - kFrameRateMiddle1,
|
| - kFrameRateMiddle2,
|
| - kFrameRateHigh
|
| -};
|
| -
|
| -enum ContentLevelClass {
|
| - kLow,
|
| - kHigh,
|
| - kDefault
|
| -};
|
| -
|
| -struct VCMContFeature {
|
| - VCMContFeature()
|
| - : value(0.0f),
|
| - level(kDefault) {
|
| - }
|
| - void Reset() {
|
| - value = 0.0f;
|
| - level = kDefault;
|
| - }
|
| - float value;
|
| - ContentLevelClass level;
|
| -};
|
| -
|
| -enum UpDownAction {
|
| - kUpResolution,
|
| - kDownResolution
|
| -};
|
| -
|
| -enum SpatialAction {
|
| - kNoChangeSpatial,
|
| - kOneHalfSpatialUniform, // 3/4 x 3/4: 9/6 ~1/2 pixel reduction.
|
| - kOneQuarterSpatialUniform, // 1/2 x 1/2: 1/4 pixel reduction.
|
| - kNumModesSpatial
|
| -};
|
| -
|
| -enum TemporalAction {
|
| - kNoChangeTemporal,
|
| - kTwoThirdsTemporal, // 2/3 frame rate reduction
|
| - kOneHalfTemporal, // 1/2 frame rate reduction
|
| - kNumModesTemporal
|
| -};
|
| -
|
| -struct ResolutionAction {
|
| - ResolutionAction()
|
| - : spatial(kNoChangeSpatial),
|
| - temporal(kNoChangeTemporal) {
|
| - }
|
| - SpatialAction spatial;
|
| - TemporalAction temporal;
|
| -};
|
| -
|
| -// Down-sampling factors for spatial (width and height), and temporal.
|
| -const float kFactorWidthSpatial[kNumModesSpatial] =
|
| - { 1.0f, 4.0f / 3.0f, 2.0f };
|
| -
|
| -const float kFactorHeightSpatial[kNumModesSpatial] =
|
| - { 1.0f, 4.0f / 3.0f, 2.0f };
|
| -
|
| -const float kFactorTemporal[kNumModesTemporal] =
|
| - { 1.0f, 1.5f, 2.0f };
|
| -
|
| -enum EncoderState {
|
| - kStableEncoding, // Low rate mis-match, stable buffer levels.
|
| - kStressedEncoding, // Significant over-shooting of target rate,
|
| - // Buffer under-flow, etc.
|
| - kEasyEncoding // Significant under-shooting of target rate.
|
| -};
|
| -
|
| -// QmMethod class: main class for resolution and robustness settings
|
| -
|
| -class VCMQmMethod {
|
| - public:
|
| - VCMQmMethod();
|
| - virtual ~VCMQmMethod();
|
| -
|
| - // Reset values
|
| - void ResetQM();
|
| - virtual void Reset() = 0;
|
| -
|
| - // Compute content class.
|
| - uint8_t ComputeContentClass();
|
| -
|
| - // Update with the content metrics.
|
| - void UpdateContent(const VideoContentMetrics* content_metrics);
|
| -
|
| - // Compute spatial texture magnitude and level.
|
| - // Spatial texture is a spatial prediction error measure.
|
| - void ComputeSpatial();
|
| -
|
| - // Compute motion magnitude and level for NFD metric.
|
| - // NFD is normalized frame difference (normalized by spatial variance).
|
| - void ComputeMotionNFD();
|
| -
|
| - // Get the imageType (CIF, VGA, HD, etc) for the system width/height.
|
| - ImageType GetImageType(uint16_t width, uint16_t height);
|
| -
|
| - // Return the closest image type.
|
| - ImageType FindClosestImageType(uint16_t width, uint16_t height);
|
| -
|
| - // Get the frame rate level.
|
| - FrameRateLevelClass FrameRateLevel(float frame_rate);
|
| -
|
| - protected:
|
| - // Content Data.
|
| - const VideoContentMetrics* content_metrics_;
|
| -
|
| - // Encoder frame sizes and native frame sizes.
|
| - uint16_t width_;
|
| - uint16_t height_;
|
| - float user_frame_rate_;
|
| - uint16_t native_width_;
|
| - uint16_t native_height_;
|
| - float native_frame_rate_;
|
| - float aspect_ratio_;
|
| - // Image type and frame rate leve, for the current encoder resolution.
|
| - ImageType image_type_;
|
| - FrameRateLevelClass framerate_level_;
|
| - // Content class data.
|
| - VCMContFeature motion_;
|
| - VCMContFeature spatial_;
|
| - uint8_t content_class_;
|
| - bool init_;
|
| -};
|
| -
|
| -// Resolution settings class
|
| -
|
| -class VCMQmResolution : public VCMQmMethod {
|
| - public:
|
| - VCMQmResolution();
|
| - virtual ~VCMQmResolution();
|
| -
|
| - // Reset all quantities.
|
| - virtual void Reset();
|
| -
|
| - // Reset rate quantities and counters after every SelectResolution() call.
|
| - void ResetRates();
|
| -
|
| - // Reset down-sampling state.
|
| - void ResetDownSamplingState();
|
| -
|
| - // Get the encoder state.
|
| - EncoderState GetEncoderState();
|
| -
|
| - // Initialize after SetEncodingData in media_opt.
|
| - int Initialize(float bitrate,
|
| - float user_framerate,
|
| - uint16_t width,
|
| - uint16_t height,
|
| - int num_layers);
|
| -
|
| - // Update the encoder frame size.
|
| - void UpdateCodecParameters(float frame_rate, uint16_t width, uint16_t height);
|
| -
|
| - // Update with actual bit rate (size of the latest encoded frame)
|
| - // and frame type, after every encoded frame.
|
| - void UpdateEncodedSize(size_t encoded_size);
|
| -
|
| - // Update with new target bitrate, actual encoder sent rate, frame_rate,
|
| - // loss rate: every ~1 sec from SetTargetRates in media_opt.
|
| - void UpdateRates(float target_bitrate,
|
| - float encoder_sent_rate,
|
| - float incoming_framerate,
|
| - uint8_t packet_loss);
|
| -
|
| - // Extract ST (spatio-temporal) resolution action.
|
| - // Inputs: qm: Reference to the quality modes pointer.
|
| - // Output: the spatial and/or temporal scale change.
|
| - int SelectResolution(VCMResolutionScale** qm);
|
| -
|
| - private:
|
| - // Set the default resolution action.
|
| - void SetDefaultAction();
|
| -
|
| - // Compute rates for the selection of down-sampling action.
|
| - void ComputeRatesForSelection();
|
| -
|
| - // Compute the encoder state.
|
| - void ComputeEncoderState();
|
| -
|
| - // Return true if the action is to go back up in resolution.
|
| - bool GoingUpResolution();
|
| -
|
| - // Return true if the action is to go down in resolution.
|
| - bool GoingDownResolution();
|
| -
|
| - // Check the condition for going up in resolution by the scale factors:
|
| - // |facWidth|, |facHeight|, |facTemp|.
|
| - // |scaleFac| is a scale factor for the transition rate.
|
| - bool ConditionForGoingUp(float fac_width,
|
| - float fac_height,
|
| - float fac_temp,
|
| - float scale_fac);
|
| -
|
| - // Get the bitrate threshold for the resolution action.
|
| - // The case |facWidth|=|facHeight|=|facTemp|==1 is for down-sampling action.
|
| - // |scaleFac| is a scale factor for the transition rate.
|
| - float GetTransitionRate(float fac_width,
|
| - float fac_height,
|
| - float fac_temp,
|
| - float scale_fac);
|
| -
|
| - // Update the down-sampling state.
|
| - void UpdateDownsamplingState(UpDownAction up_down);
|
| -
|
| - // Update the codec frame size and frame rate.
|
| - void UpdateCodecResolution();
|
| -
|
| - // Return a state based on average target rate relative transition rate.
|
| - uint8_t RateClass(float transition_rate);
|
| -
|
| - // Adjust the action selected from the table.
|
| - void AdjustAction();
|
| -
|
| - // Covert 2 stages of 3/4 (=9/16) spatial decimation to 1/2.
|
| - void ConvertSpatialFractionalToWhole();
|
| -
|
| - // Returns true if the new frame sizes, under the selected spatial action,
|
| - // are of even size.
|
| - bool EvenFrameSize();
|
| -
|
| - // Insert latest down-sampling action into the history list.
|
| - void InsertLatestDownAction();
|
| -
|
| - // Remove the last (first element) down-sampling action from the list.
|
| - void RemoveLastDownAction();
|
| -
|
| - // Check constraints on the amount of down-sampling allowed.
|
| - void ConstrainAmountOfDownSampling();
|
| -
|
| - // For going up in resolution: pick spatial or temporal action,
|
| - // if both actions were separately selected.
|
| - void PickSpatialOrTemporal();
|
| -
|
| - // Select the directional (1x2 or 2x1) spatial down-sampling action.
|
| - void SelectSpatialDirectionMode(float transition_rate);
|
| -
|
| - enum { kDownActionHistorySize = 10};
|
| -
|
| - VCMResolutionScale* qm_;
|
| - // Encoder rate control parameters.
|
| - float target_bitrate_;
|
| - float incoming_framerate_;
|
| - float per_frame_bandwidth_;
|
| - float buffer_level_;
|
| -
|
| - // Data accumulated every ~1sec from MediaOpt.
|
| - float sum_target_rate_;
|
| - float sum_incoming_framerate_;
|
| - float sum_rate_MM_;
|
| - float sum_rate_MM_sgn_;
|
| - float sum_packet_loss_;
|
| - // Counters.
|
| - uint32_t frame_cnt_;
|
| - uint32_t frame_cnt_delta_;
|
| - uint32_t update_rate_cnt_;
|
| - uint32_t low_buffer_cnt_;
|
| -
|
| - // Resolution state parameters.
|
| - float state_dec_factor_spatial_;
|
| - float state_dec_factor_temporal_;
|
| -
|
| - // Quantities used for selection.
|
| - float avg_target_rate_;
|
| - float avg_incoming_framerate_;
|
| - float avg_ratio_buffer_low_;
|
| - float avg_rate_mismatch_;
|
| - float avg_rate_mismatch_sgn_;
|
| - float avg_packet_loss_;
|
| - EncoderState encoder_state_;
|
| - ResolutionAction action_;
|
| - // Short history of the down-sampling actions from the Initialize() state.
|
| - // This is needed for going up in resolution. Since the total amount of
|
| - // down-sampling actions are constrained, the length of the list need not be
|
| - // large: i.e., (4/3) ^{kDownActionHistorySize} <= kMaxDownSample.
|
| - ResolutionAction down_action_history_[kDownActionHistorySize];
|
| - int num_layers_;
|
| -};
|
| -
|
| -// Robustness settings class.
|
| -
|
| -class VCMQmRobustness : public VCMQmMethod {
|
| - public:
|
| - VCMQmRobustness();
|
| - ~VCMQmRobustness();
|
| -
|
| - virtual void Reset();
|
| -
|
| - // Adjust FEC rate based on content: every ~1 sec from SetTargetRates.
|
| - // Returns an adjustment factor.
|
| - float AdjustFecFactor(uint8_t code_rate_delta,
|
| - float total_rate,
|
| - float framerate,
|
| - int64_t rtt_time,
|
| - uint8_t packet_loss);
|
| -
|
| - // Set the UEP protection on/off.
|
| - bool SetUepProtection(uint8_t code_rate_delta,
|
| - float total_rate,
|
| - uint8_t packet_loss,
|
| - bool frame_type);
|
| -
|
| - private:
|
| - // Previous state of network parameters.
|
| - float prev_total_rate_;
|
| - int64_t prev_rtt_time_;
|
| - uint8_t prev_packet_loss_;
|
| - uint8_t prev_code_rate_delta_;
|
| -};
|
| -} // namespace webrtc
|
| -#endif // WEBRTC_MODULES_VIDEO_CODING_QM_SELECT_H_
|
|
|