Move VideoEncoderConfig from call/ to api/.
Bug: webrtc:8830 Change-Id: I42abd45bff9a70fe00733424b34874925c523dc8 Reviewed-on: https://webrtc-review.googlesource.com/77683 Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23303}
This commit is contained in:
parent
b5750eb963
commit
0a8f43580f
@ -22,13 +22,14 @@ rtc_source_set("video_codecs_api") {
|
||||
"video_decoder_factory.h",
|
||||
"video_encoder.cc",
|
||||
"video_encoder.h",
|
||||
"video_encoder_config.cc",
|
||||
"video_encoder_config.h",
|
||||
"video_encoder_factory.h",
|
||||
]
|
||||
|
||||
deps = [
|
||||
"..:optional",
|
||||
"../..:webrtc_common",
|
||||
"../../:typedefs",
|
||||
"../../common_video",
|
||||
"../../rtc_base:checks",
|
||||
"../../rtc_base:rtc_base_approved",
|
||||
|
||||
@ -18,7 +18,6 @@
|
||||
#include "api/video/video_frame.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
#include "common_video/include/video_frame.h"
|
||||
#include "typedefs.h" // NOLINT(build/include)
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
|
||||
@ -21,7 +21,6 @@
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
#include "common_video/include/video_frame.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "typedefs.h" // NOLINT(build/include)
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
#include "call/video_config.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
162
api/video_codecs/video_encoder_config.h
Normal file
162
api/video_codecs/video_encoder_config.h
Normal file
@ -0,0 +1,162 @@
|
||||
/*
|
||||
* 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 API_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
|
||||
#define API_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "api/optional.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
#include "rtc_base/refcount.h"
|
||||
#include "rtc_base/scoped_ref_ptr.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
struct VideoStream {
|
||||
VideoStream();
|
||||
~VideoStream();
|
||||
VideoStream(const VideoStream& other);
|
||||
std::string ToString() const;
|
||||
|
||||
size_t width;
|
||||
size_t height;
|
||||
int max_framerate;
|
||||
|
||||
int min_bitrate_bps;
|
||||
int target_bitrate_bps;
|
||||
int max_bitrate_bps;
|
||||
int max_qp;
|
||||
|
||||
rtc::Optional<size_t> num_temporal_layers;
|
||||
|
||||
rtc::Optional<double> bitrate_priority;
|
||||
|
||||
// TODO(bugs.webrtc.org/8653): Support active per-simulcast layer.
|
||||
bool active;
|
||||
};
|
||||
|
||||
class VideoEncoderConfig {
|
||||
public:
|
||||
// These are reference counted to permit copying VideoEncoderConfig and be
|
||||
// kept alive until all encoder_specific_settings go out of scope.
|
||||
// TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig
|
||||
// and use rtc::Optional for encoder_specific_settings instead.
|
||||
class EncoderSpecificSettings : public rtc::RefCountInterface {
|
||||
public:
|
||||
// TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is
|
||||
// not in use and encoder implementations ask for codec-specific structs
|
||||
// directly.
|
||||
void FillEncoderSpecificSettings(VideoCodec* codec_struct) const;
|
||||
|
||||
virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const;
|
||||
virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const;
|
||||
virtual void FillVideoCodecH264(VideoCodecH264* h264_settings) const;
|
||||
|
||||
private:
|
||||
~EncoderSpecificSettings() override {}
|
||||
friend class VideoEncoderConfig;
|
||||
};
|
||||
|
||||
class H264EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit H264EncoderSpecificSettings(const VideoCodecH264& specifics);
|
||||
void FillVideoCodecH264(VideoCodecH264* h264_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecH264 specifics_;
|
||||
};
|
||||
|
||||
class Vp8EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics);
|
||||
void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecVP8 specifics_;
|
||||
};
|
||||
|
||||
class Vp9EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics);
|
||||
void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecVP9 specifics_;
|
||||
};
|
||||
|
||||
enum class ContentType {
|
||||
kRealtimeVideo,
|
||||
kScreen,
|
||||
};
|
||||
|
||||
class VideoStreamFactoryInterface : public rtc::RefCountInterface {
|
||||
public:
|
||||
// An implementation should return a std::vector<VideoStream> with the
|
||||
// wanted VideoStream settings for the given video resolution.
|
||||
// The size of the vector may not be larger than
|
||||
// |encoder_config.number_of_streams|.
|
||||
virtual std::vector<VideoStream> CreateEncoderStreams(
|
||||
int width,
|
||||
int height,
|
||||
const VideoEncoderConfig& encoder_config) = 0;
|
||||
|
||||
protected:
|
||||
~VideoStreamFactoryInterface() override {}
|
||||
};
|
||||
|
||||
VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default;
|
||||
VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete;
|
||||
|
||||
// Mostly used by tests. Avoid creating copies if you can.
|
||||
VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); }
|
||||
|
||||
VideoEncoderConfig();
|
||||
VideoEncoderConfig(VideoEncoderConfig&&);
|
||||
~VideoEncoderConfig();
|
||||
std::string ToString() const;
|
||||
|
||||
// TODO(nisse): Consolidate on one of these.
|
||||
VideoCodecType codec_type;
|
||||
SdpVideoFormat video_format;
|
||||
|
||||
rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory;
|
||||
std::vector<SpatialLayer> spatial_layers;
|
||||
ContentType content_type;
|
||||
rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings;
|
||||
|
||||
// Padding will be used up to this bitrate regardless of the bitrate produced
|
||||
// by the encoder. Padding above what's actually produced by the encoder helps
|
||||
// maintaining a higher bitrate estimate. Padding will however not be sent
|
||||
// unless the estimated bandwidth indicates that the link can handle it.
|
||||
int min_transmit_bitrate_bps;
|
||||
int max_bitrate_bps;
|
||||
// The bitrate priority used for all VideoStreams.
|
||||
double bitrate_priority;
|
||||
|
||||
// The simulcast layer's configurations set by the application for this video
|
||||
// sender. These are modified by the video_stream_factory before being passed
|
||||
// down to lower layers for the video encoding.
|
||||
std::vector<VideoStream> simulcast_layers;
|
||||
|
||||
// Max number of encoded VideoStreams to produce.
|
||||
size_t number_of_streams;
|
||||
|
||||
private:
|
||||
// Access to the copy constructor is private to force use of the Copy()
|
||||
// method for those exceptional cases where we do use it.
|
||||
VideoEncoderConfig(const VideoEncoderConfig&);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // API_VIDEO_CODECS_VIDEO_ENCODER_CONFIG_H_
|
||||
@ -208,7 +208,6 @@ rtc_static_library("call") {
|
||||
|
||||
rtc_source_set("video_stream_api") {
|
||||
sources = [
|
||||
"video_config.cc",
|
||||
"video_config.h",
|
||||
"video_receive_stream.cc",
|
||||
"video_receive_stream.h",
|
||||
@ -328,6 +327,7 @@ if (rtc_include_tests) {
|
||||
"..:webrtc_common",
|
||||
"../api/audio_codecs:builtin_audio_encoder_factory",
|
||||
"../api/video:video_bitrate_allocation",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
"../logging:rtc_event_log_api",
|
||||
"../modules/audio_coding",
|
||||
"../modules/audio_device",
|
||||
|
||||
@ -15,8 +15,8 @@
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "api/video/video_bitrate_allocation.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
#include "call/call.h"
|
||||
#include "call/video_config.h"
|
||||
#include "logging/rtc_event_log/rtc_event_log.h"
|
||||
#include "modules/audio_coding/include/audio_coding_module.h"
|
||||
#include "modules/audio_device/include/test_audio_device.h"
|
||||
|
||||
@ -11,154 +11,8 @@
|
||||
#ifndef CALL_VIDEO_CONFIG_H_
|
||||
#define CALL_VIDEO_CONFIG_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "api/optional.h"
|
||||
#include "api/video_codecs/sdp_video_format.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
#include "rtc_base/basictypes.h"
|
||||
#include "rtc_base/refcount.h"
|
||||
#include "rtc_base/scoped_ref_ptr.h"
|
||||
#include "typedefs.h" // NOLINT(build/include)
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
struct VideoStream {
|
||||
VideoStream();
|
||||
~VideoStream();
|
||||
VideoStream(const VideoStream& other);
|
||||
std::string ToString() const;
|
||||
|
||||
size_t width;
|
||||
size_t height;
|
||||
int max_framerate;
|
||||
|
||||
int min_bitrate_bps;
|
||||
int target_bitrate_bps;
|
||||
int max_bitrate_bps;
|
||||
int max_qp;
|
||||
|
||||
rtc::Optional<size_t> num_temporal_layers;
|
||||
|
||||
rtc::Optional<double> bitrate_priority;
|
||||
|
||||
// TODO(bugs.webrtc.org/8653): Support active per-simulcast layer.
|
||||
bool active;
|
||||
};
|
||||
|
||||
class VideoEncoderConfig {
|
||||
public:
|
||||
// These are reference counted to permit copying VideoEncoderConfig and be
|
||||
// kept alive until all encoder_specific_settings go out of scope.
|
||||
// TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig
|
||||
// and use rtc::Optional for encoder_specific_settings instead.
|
||||
class EncoderSpecificSettings : public rtc::RefCountInterface {
|
||||
public:
|
||||
// TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is
|
||||
// not in use and encoder implementations ask for codec-specific structs
|
||||
// directly.
|
||||
void FillEncoderSpecificSettings(VideoCodec* codec_struct) const;
|
||||
|
||||
virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const;
|
||||
virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const;
|
||||
virtual void FillVideoCodecH264(VideoCodecH264* h264_settings) const;
|
||||
|
||||
private:
|
||||
~EncoderSpecificSettings() override {}
|
||||
friend class VideoEncoderConfig;
|
||||
};
|
||||
|
||||
class H264EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit H264EncoderSpecificSettings(const VideoCodecH264& specifics);
|
||||
void FillVideoCodecH264(VideoCodecH264* h264_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecH264 specifics_;
|
||||
};
|
||||
|
||||
class Vp8EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics);
|
||||
void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecVP8 specifics_;
|
||||
};
|
||||
|
||||
class Vp9EncoderSpecificSettings : public EncoderSpecificSettings {
|
||||
public:
|
||||
explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics);
|
||||
void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override;
|
||||
|
||||
private:
|
||||
VideoCodecVP9 specifics_;
|
||||
};
|
||||
|
||||
enum class ContentType {
|
||||
kRealtimeVideo,
|
||||
kScreen,
|
||||
};
|
||||
|
||||
class VideoStreamFactoryInterface : public rtc::RefCountInterface {
|
||||
public:
|
||||
// An implementation should return a std::vector<VideoStream> with the
|
||||
// wanted VideoStream settings for the given video resolution.
|
||||
// The size of the vector may not be larger than
|
||||
// |encoder_config.number_of_streams|.
|
||||
virtual std::vector<VideoStream> CreateEncoderStreams(
|
||||
int width,
|
||||
int height,
|
||||
const VideoEncoderConfig& encoder_config) = 0;
|
||||
|
||||
protected:
|
||||
~VideoStreamFactoryInterface() override {}
|
||||
};
|
||||
|
||||
VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default;
|
||||
VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete;
|
||||
|
||||
// Mostly used by tests. Avoid creating copies if you can.
|
||||
VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); }
|
||||
|
||||
VideoEncoderConfig();
|
||||
VideoEncoderConfig(VideoEncoderConfig&&);
|
||||
~VideoEncoderConfig();
|
||||
std::string ToString() const;
|
||||
|
||||
// TODO(nisse): Consolidate on one of these.
|
||||
VideoCodecType codec_type;
|
||||
SdpVideoFormat video_format;
|
||||
|
||||
rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory;
|
||||
std::vector<SpatialLayer> spatial_layers;
|
||||
ContentType content_type;
|
||||
rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings;
|
||||
|
||||
// Padding will be used up to this bitrate regardless of the bitrate produced
|
||||
// by the encoder. Padding above what's actually produced by the encoder helps
|
||||
// maintaining a higher bitrate estimate. Padding will however not be sent
|
||||
// unless the estimated bandwidth indicates that the link can handle it.
|
||||
int min_transmit_bitrate_bps;
|
||||
int max_bitrate_bps;
|
||||
// The bitrate priority used for all VideoStreams.
|
||||
double bitrate_priority;
|
||||
|
||||
// The simulcast layer's configurations set by the application for this video
|
||||
// sender. These are modified by the video_stream_factory before being passed
|
||||
// down to lower layers for the video encoding.
|
||||
std::vector<VideoStream> simulcast_layers;
|
||||
|
||||
// Max number of encoded VideoStreams to produce.
|
||||
size_t number_of_streams;
|
||||
|
||||
private:
|
||||
// Access to the copy constructor is private to force use of the Copy()
|
||||
// method for those exceptional cases where we do use it.
|
||||
VideoEncoderConfig(const VideoEncoderConfig&);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
// TODO(bugs.webrtc.org/8830): Header file moved to api/. Delete this
|
||||
// file as soon as downstream applications are updated.
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
|
||||
#endif // CALL_VIDEO_CONFIG_H_
|
||||
|
||||
@ -21,9 +21,9 @@
|
||||
#include "api/rtp_headers.h"
|
||||
#include "api/video/video_sink_interface.h"
|
||||
#include "api/videosourceinterface.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
#include "api/video_codecs/video_encoder_factory.h"
|
||||
#include "call/rtp_config.h"
|
||||
#include "call/video_config.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
#include "common_video/include/frame_callback.h"
|
||||
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
||||
@ -31,8 +31,6 @@
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
class VideoEncoder;
|
||||
|
||||
class VideoSendStream {
|
||||
public:
|
||||
struct StreamStats {
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "call/video_config.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
#include "rtc_base/basictypes.h"
|
||||
|
||||
namespace cricket {
|
||||
|
||||
@ -145,7 +145,6 @@ rtc_static_library("video_coding") {
|
||||
"../../api/video:video_frame",
|
||||
"../../api/video:video_frame_i420",
|
||||
"../../api/video_codecs:video_codecs_api",
|
||||
"../../call:video_stream_api",
|
||||
"../../common_video",
|
||||
"../../rtc_base:checks",
|
||||
"../../rtc_base:rtc_base",
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "call/video_config.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
|
||||
@ -14,8 +14,8 @@
|
||||
|
||||
#include "api/audio_codecs/builtin_audio_decoder_factory.h"
|
||||
#include "api/audio_codecs/builtin_audio_encoder_factory.h"
|
||||
#include "api/video_codecs/video_encoder_config.h"
|
||||
#include "call/rtp_transport_controller_send.h"
|
||||
#include "call/video_config.h"
|
||||
#include "modules/audio_mixer/audio_mixer_impl.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/event.h"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user