| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |    2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 
|    3  * |    3  * | 
|    4  *  Use of this source code is governed by a BSD-style license |    4  *  Use of this source code is governed by a BSD-style license | 
|    5  *  that can be found in the LICENSE file in the root of the source |    5  *  that can be found in the LICENSE file in the root of the source | 
|    6  *  tree. An additional intellectual property rights grant can be found |    6  *  tree. An additional intellectual property rights grant can be found | 
|    7  *  in the file PATENTS.  All contributing project authors may |    7  *  in the file PATENTS.  All contributing project authors may | 
|    8  *  be found in the AUTHORS file in the root of the source tree. |    8  *  be found in the AUTHORS file in the root of the source tree. | 
|    9  */ |    9  */ | 
|   10  |   10  | 
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  118   // three, and so on. |  118   // three, and so on. | 
|  119   // The VideoEncoder may redistribute bitrates over the temporal layers so a |  119   // The VideoEncoder may redistribute bitrates over the temporal layers so a | 
|  120   // bitrate threshold of 100k and an estimate of 105k does not imply that we |  120   // bitrate threshold of 100k and an estimate of 105k does not imply that we | 
|  121   // get 100k in one temporal layer and 5k in the other, just that the bitrate |  121   // get 100k in one temporal layer and 5k in the other, just that the bitrate | 
|  122   // in the first temporal layer should not exceed 100k. |  122   // in the first temporal layer should not exceed 100k. | 
|  123   // TODO(kthelgason): Apart from a special case for two-layer screencast these |  123   // TODO(kthelgason): Apart from a special case for two-layer screencast these | 
|  124   // thresholds are not propagated to the VideoEncoder. To be implemented. |  124   // thresholds are not propagated to the VideoEncoder. To be implemented. | 
|  125   std::vector<int> temporal_layer_thresholds_bps; |  125   std::vector<int> temporal_layer_thresholds_bps; | 
|  126 }; |  126 }; | 
|  127  |  127  | 
|  128 struct VideoEncoderConfig { |  128 class VideoEncoderConfig { | 
|  129  public: |  129  public: | 
|  130   // These are reference counted to permit copying VideoEncoderConfig and be |  130   // These are reference counted to permit copying VideoEncoderConfig and be | 
|  131   // kept alive until all encoder_specific_settings go out of scope. |  131   // kept alive until all encoder_specific_settings go out of scope. | 
|  132   // TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig |  132   // TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig | 
|  133   // and use rtc::Optional for encoder_specific_settings instead. |  133   // and use rtc::Optional for encoder_specific_settings instead. | 
|  134   class EncoderSpecificSettings : public rtc::RefCountInterface { |  134   class EncoderSpecificSettings : public rtc::RefCountInterface { | 
|  135    public: |  135    public: | 
|  136     // TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is |  136     // TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is | 
|  137     // not in use and encoder implementations ask for codec-specific structs |  137     // not in use and encoder implementations ask for codec-specific structs | 
|  138     // directly. |  138     // directly. | 
|  139     void FillEncoderSpecificSettings(VideoCodec* codec_struct) const; |  139     void FillEncoderSpecificSettings(VideoCodec* codec_struct) const; | 
|  140  |  140  | 
|  141     virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const; |  141     virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const; | 
|  142     virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const; |  142     virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const; | 
|  143     virtual void FillVideoCodecH264(VideoCodecH264* h264_settings) const; |  143     virtual void FillVideoCodecH264(VideoCodecH264* h264_settings) const; | 
|  144    private: |  144    private: | 
|  145     virtual ~EncoderSpecificSettings() {} |  145     virtual ~EncoderSpecificSettings() {} | 
|  146     friend struct VideoEncoderConfig; |  146     friend class VideoEncoderConfig; | 
|  147   }; |  147   }; | 
|  148  |  148  | 
|  149   class H264EncoderSpecificSettings : public EncoderSpecificSettings { |  149   class H264EncoderSpecificSettings : public EncoderSpecificSettings { | 
|  150    public: |  150    public: | 
|  151     explicit H264EncoderSpecificSettings(const VideoCodecH264& specifics); |  151     explicit H264EncoderSpecificSettings(const VideoCodecH264& specifics); | 
|  152     virtual void FillVideoCodecH264( |  152     void FillVideoCodecH264(VideoCodecH264* h264_settings) const override; | 
|  153         VideoCodecH264* h264_settings) const override; |  | 
|  154  |  153  | 
|  155    private: |  154    private: | 
|  156     VideoCodecH264 specifics_; |  155     VideoCodecH264 specifics_; | 
|  157   }; |  156   }; | 
|  158  |  157  | 
|  159   class Vp8EncoderSpecificSettings : public EncoderSpecificSettings { |  158   class Vp8EncoderSpecificSettings : public EncoderSpecificSettings { | 
|  160    public: |  159    public: | 
|  161     explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics); |  160     explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics); | 
|  162     virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override; |  161     void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override; | 
|  163  |  162  | 
|  164    private: |  163    private: | 
|  165     VideoCodecVP8 specifics_; |  164     VideoCodecVP8 specifics_; | 
|  166   }; |  165   }; | 
|  167  |  166  | 
|  168   class Vp9EncoderSpecificSettings : public EncoderSpecificSettings { |  167   class Vp9EncoderSpecificSettings : public EncoderSpecificSettings { | 
|  169    public: |  168    public: | 
|  170     explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics); |  169     explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics); | 
|  171     virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override; |  170     void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override; | 
|  172  |  171  | 
|  173    private: |  172    private: | 
|  174     VideoCodecVP9 specifics_; |  173     VideoCodecVP9 specifics_; | 
|  175   }; |  174   }; | 
|  176  |  175  | 
|  177   enum class ContentType { |  176   enum class ContentType { | 
|  178     kRealtimeVideo, |  177     kRealtimeVideo, | 
|  179     kScreen, |  178     kScreen, | 
|  180   }; |  179   }; | 
|  181  |  180  | 
 |  181   class VideoStreamFactoryInterface : public rtc::RefCountInterface { | 
 |  182    public: | 
 |  183     // An implementation should return a std::vector<VideoStream> with the | 
 |  184     // wanted VideoStream settings for the given video resolution. | 
 |  185     // The size of the vector may not be larger than | 
 |  186     // |encoder_config.number_of_streams|. | 
 |  187     virtual std::vector<VideoStream> CreateEncoderStreams( | 
 |  188         int width, | 
 |  189         int height, | 
 |  190         const VideoEncoderConfig& encoder_config) = 0; | 
 |  191  | 
 |  192    protected: | 
 |  193     virtual ~VideoStreamFactoryInterface() {} | 
 |  194   }; | 
 |  195  | 
|  182   VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default; |  196   VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default; | 
|  183   VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete; |  197   VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete; | 
|  184  |  198  | 
|  185   // Mostly used by tests.  Avoid creating copies if you can. |  199   // Mostly used by tests.  Avoid creating copies if you can. | 
|  186   VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); } |  200   VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); } | 
|  187  |  201  | 
|  188   VideoEncoderConfig(); |  202   VideoEncoderConfig(); | 
|  189   VideoEncoderConfig(VideoEncoderConfig&&) = default; |  203   VideoEncoderConfig(VideoEncoderConfig&&) = default; | 
|  190   ~VideoEncoderConfig(); |  204   ~VideoEncoderConfig(); | 
|  191   std::string ToString() const; |  205   std::string ToString() const; | 
|  192  |  206  | 
|  193   std::vector<VideoStream> streams; |  207   rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory; | 
|  194   std::vector<SpatialLayer> spatial_layers; |  208   std::vector<SpatialLayer> spatial_layers; | 
|  195   ContentType content_type; |  209   ContentType content_type; | 
|  196   rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings; |  210   rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings; | 
|  197  |  211  | 
|  198   // Padding will be used up to this bitrate regardless of the bitrate produced |  212   // Padding will be used up to this bitrate regardless of the bitrate produced | 
|  199   // by the encoder. Padding above what's actually produced by the encoder helps |  213   // by the encoder. Padding above what's actually produced by the encoder helps | 
|  200   // maintaining a higher bitrate estimate. Padding will however not be sent |  214   // maintaining a higher bitrate estimate. Padding will however not be sent | 
|  201   // unless the estimated bandwidth indicates that the link can handle it. |  215   // unless the estimated bandwidth indicates that the link can handle it. | 
|  202   int min_transmit_bitrate_bps; |  216   int min_transmit_bitrate_bps; | 
|  203   bool expect_encode_from_texture; |  217   int max_bitrate_bps; | 
 |  218  | 
 |  219   // Max number of encoded VideoStreams to produce. | 
 |  220   size_t number_of_streams; | 
|  204  |  221  | 
|  205  private: |  222  private: | 
|  206   // Access to the copy constructor is private to force use of the Copy() |  223   // Access to the copy constructor is private to force use of the Copy() | 
|  207   // method for those exceptional cases where we do use it. |  224   // method for those exceptional cases where we do use it. | 
|  208   VideoEncoderConfig(const VideoEncoderConfig&) = default; |  225   VideoEncoderConfig(const VideoEncoderConfig&) = default; | 
|  209 }; |  226 }; | 
|  210  |  227  | 
|  211 struct VideoDecoderH264Settings { |  228 struct VideoDecoderH264Settings { | 
|  212   std::string sprop_parameter_sets; |  229   std::string sprop_parameter_sets; | 
|  213 }; |  230 }; | 
|  214  |  231  | 
|  215 class DecoderSpecificSettings { |  232 class DecoderSpecificSettings { | 
|  216  public: |  233  public: | 
|  217   virtual ~DecoderSpecificSettings() {} |  234   virtual ~DecoderSpecificSettings() {} | 
|  218   rtc::Optional<VideoDecoderH264Settings> h264_extra_settings; |  235   rtc::Optional<VideoDecoderH264Settings> h264_extra_settings; | 
|  219 }; |  236 }; | 
|  220  |  237  | 
|  221 }  // namespace webrtc |  238 }  // namespace webrtc | 
|  222  |  239  | 
|  223 #endif  // WEBRTC_CONFIG_H_ |  240 #endif  // WEBRTC_CONFIG_H_ | 
| OLD | NEW |