Reland of Move video_encoder.h and video_decoder.h to /api and create GN targets for them (patchset #1 id:1 of https://codereview.webrtc.org/2794033002/ )
Reason for revert:
Reland with temporary deprecated API to not break chromium and google3.
Original issue's description:
> Revert of Move video_encoder.h and video_decoder.h to /api and create GN targets for them (patchset #8 id:140001 of https://codereview.webrtc.org/2780943003/ )
>
> Reason for revert:
> Suspect of breaking Chrome FYI bots.
>
> See
> https://build.chromium.org/p/chromium.webrtc.fyi/builders/Mac%20Builder/builds/23065
> https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Builder
>
> Example logs:
> ../../content/renderer/media/gpu/rtc_video_encoder_unittest.cc:18:46: fatal error: third_party/webrtc/video_encoder.h: No such file or directory
> #include "third_party/webrtc/video_encoder.h"
> ^
>
> Original issue's description:
> > Move video_encoder.h and video_decoder.h to /api and create GN targets for them
> >
> > BUG=webrtc:5881
> > # Because PRESUBMIT ignores LINT blacklist for moved files and these
> > # headers have some not easy to resolve issues.
> > NOPRESUBMIT=True
> >
> > Review-Url: https://codereview.webrtc.org/2780943003
> > Cr-Commit-Position: refs/heads/master@{#17511}
> > Committed: https://chromium.googlesource.com/external/webrtc/+/c42f54057050c933008a49d57582577bfb9aed25
>
> TBR=solenberg@webrtc.org,sprang@webrtc.org,ilnik@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:5881
>
> Review-Url: https://codereview.webrtc.org/2794033002
> Cr-Commit-Position: refs/heads/master@{#17514}
> Committed: https://chromium.googlesource.com/external/webrtc/+/716d7ac5c1ed6e392e264b34065800bbf03772b3
TBR=solenberg@webrtc.org,sprang@webrtc.org,guidou@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:5881
Review-Url: https://codereview.webrtc.org/2795163002
Cr-Original-Commit-Position: refs/heads/master@{#17537}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: d60d06a9f971a36c9a51ff9919850cffb993893c
diff --git a/DEPS b/DEPS
index 36a5b73..d4ebc55 100644
--- a/DEPS
+++ b/DEPS
@@ -14,8 +14,6 @@
"+webrtc/config.h",
"+webrtc/transport.h",
"+webrtc/typedefs.h",
- "+webrtc/video_decoder.h",
- "+webrtc/video_encoder.h",
"+webrtc/video_frame.h",
"+webrtc/video_receive_stream.h",
"+webrtc/video_send_stream.h",
diff --git a/api/video_codecs/BUILD.gn b/api/video_codecs/BUILD.gn
new file mode 100644
index 0000000..befd065
--- /dev/null
+++ b/api/video_codecs/BUILD.gn
@@ -0,0 +1,28 @@
+# Copyright (c) 2017 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.
+
+import("../../webrtc.gni")
+if (is_android) {
+ import("//build/config/android/config.gni")
+ import("//build/config/android/rules.gni")
+}
+
+rtc_source_set("video_codecs_api") {
+ sources = [
+ "video_decoder.h",
+ "video_encoder.h",
+ ]
+
+ deps = [
+ # TODO(ilnik): Add dependency on webrtc/video_frame.h when it will have it's
+ # own build target.
+
+ "../..:webrtc_common",
+ "../../base:rtc_base_approved",
+ ]
+}
diff --git a/api/video_codecs/video_decoder.h b/api/video_codecs/video_decoder.h
new file mode 100644
index 0000000..ba62822
--- /dev/null
+++ b/api/video_codecs/video_decoder.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2014 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_API_VIDEO_CODECS_VIDEO_DECODER_H_
+#define WEBRTC_API_VIDEO_CODECS_VIDEO_DECODER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "webrtc/common_types.h"
+#include "webrtc/typedefs.h"
+#include "webrtc/video_frame.h"
+
+namespace webrtc {
+
+class RTPFragmentationHeader;
+// TODO(pbos): Expose these through a public (root) header or change these APIs.
+struct CodecSpecificInfo;
+class VideoCodec;
+
+class DecodedImageCallback {
+ public:
+ virtual ~DecodedImageCallback() {}
+
+ virtual int32_t Decoded(VideoFrame& decodedImage) = 0;
+ // Provides an alternative interface that allows the decoder to specify the
+ // decode time excluding waiting time for any previous pending frame to
+ // return. This is necessary for breaking positive feedback in the delay
+ // estimation when the decoder has a single output buffer.
+ virtual int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) {
+ // The default implementation ignores custom decode time value.
+ return Decoded(decodedImage);
+ }
+ // TODO(sakal): Remove other implementations when upstream projects have been
+ // updated.
+ virtual void Decoded(VideoFrame& decodedImage,
+ rtc::Optional<int32_t> decode_time_ms,
+ rtc::Optional<uint8_t> qp) {
+ Decoded(decodedImage,
+ decode_time_ms ? static_cast<int32_t>(*decode_time_ms) : -1);
+ }
+
+ virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) {
+ return -1;
+ }
+
+ virtual int32_t ReceivedDecodedFrame(const uint64_t pictureId) { return -1; }
+};
+
+class VideoDecoder {
+ public:
+ virtual ~VideoDecoder() {}
+
+ virtual int32_t InitDecode(const VideoCodec* codec_settings,
+ int32_t number_of_cores) = 0;
+
+ virtual int32_t Decode(const EncodedImage& input_image,
+ bool missing_frames,
+ const RTPFragmentationHeader* fragmentation,
+ const CodecSpecificInfo* codec_specific_info = NULL,
+ int64_t render_time_ms = -1) = 0;
+
+ virtual int32_t RegisterDecodeCompleteCallback(
+ DecodedImageCallback* callback) = 0;
+
+ virtual int32_t Release() = 0;
+
+ // Returns true if the decoder prefer to decode frames late.
+ // That is, it can not decode infinite number of frames before the decoded
+ // frame is consumed.
+ virtual bool PrefersLateDecoding() const { return true; }
+
+ virtual const char* ImplementationName() const { return "unknown"; }
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_API_VIDEO_CODECS_VIDEO_DECODER_H_
diff --git a/api/video_codecs/video_encoder.h b/api/video_codecs/video_encoder.h
new file mode 100644
index 0000000..969de43
--- /dev/null
+++ b/api/video_codecs/video_encoder.h
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2014 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_API_VIDEO_CODECS_VIDEO_ENCODER_H_
+#define WEBRTC_API_VIDEO_CODECS_VIDEO_ENCODER_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "webrtc/base/checks.h"
+#include "webrtc/common_types.h"
+#include "webrtc/typedefs.h"
+#include "webrtc/video_frame.h"
+#include "webrtc/base/optional.h"
+
+namespace webrtc {
+
+class RTPFragmentationHeader;
+// TODO(pbos): Expose these through a public (root) header or change these APIs.
+struct CodecSpecificInfo;
+class VideoCodec;
+
+class EncodedImageCallback {
+ public:
+ virtual ~EncodedImageCallback() {}
+
+ struct Result {
+ enum Error {
+ OK,
+
+ // Failed to send the packet.
+ ERROR_SEND_FAILED,
+ };
+
+ Result(Error error) : error(error) {}
+ Result(Error error, uint32_t frame_id) : error(error), frame_id(frame_id) {}
+
+ Error error;
+
+ // Frame ID assigned to the frame. The frame ID should be the same as the ID
+ // seen by the receiver for this frame. RTP timestamp of the frame is used
+ // as frame ID when RTP is used to send video. Must be used only when
+ // error=OK.
+ uint32_t frame_id = 0;
+
+ // Tells the encoder that the next frame is should be dropped.
+ bool drop_next_frame = false;
+ };
+
+ // Callback function which is called when an image has been encoded.
+ virtual Result OnEncodedImage(
+ const EncodedImage& encoded_image,
+ const CodecSpecificInfo* codec_specific_info,
+ const RTPFragmentationHeader* fragmentation) = 0;
+
+ virtual void OnDroppedFrame() {}
+};
+
+class VideoEncoder {
+ public:
+ enum EncoderType {
+ kH264,
+ kVp8,
+ kVp9,
+ kUnsupportedCodec,
+ };
+ struct QpThresholds {
+ QpThresholds(int l, int h) : low(l), high(h) {}
+ QpThresholds() : low(-1), high(-1) {}
+ int low;
+ int high;
+ };
+ struct ScalingSettings {
+ ScalingSettings(bool on, int low, int high)
+ : enabled(on),
+ thresholds(rtc::Optional<QpThresholds>(QpThresholds(low, high))) {}
+ explicit ScalingSettings(bool on) : enabled(on) {}
+ const bool enabled;
+ const rtc::Optional<QpThresholds> thresholds;
+ };
+ static VideoEncoder* Create(EncoderType codec_type);
+ // Returns true if this type of encoder can be created using
+ // VideoEncoder::Create.
+ static bool IsSupportedSoftware(EncoderType codec_type);
+ static EncoderType CodecToEncoderType(VideoCodecType codec_type);
+
+ static VideoCodecVP8 GetDefaultVp8Settings();
+ static VideoCodecVP9 GetDefaultVp9Settings();
+ static VideoCodecH264 GetDefaultH264Settings();
+
+ virtual ~VideoEncoder() {}
+
+ // Initialize the encoder with the information from the codecSettings
+ //
+ // Input:
+ // - codec_settings : Codec settings
+ // - number_of_cores : Number of cores available for the encoder
+ // - max_payload_size : The maximum size each payload is allowed
+ // to have. Usually MTU - overhead.
+ //
+ // Return value : Set bit rate if OK
+ // <0 - Errors:
+ // WEBRTC_VIDEO_CODEC_ERR_PARAMETER
+ // WEBRTC_VIDEO_CODEC_ERR_SIZE
+ // WEBRTC_VIDEO_CODEC_LEVEL_EXCEEDED
+ // WEBRTC_VIDEO_CODEC_MEMORY
+ // WEBRTC_VIDEO_CODEC_ERROR
+ virtual int32_t InitEncode(const VideoCodec* codec_settings,
+ int32_t number_of_cores,
+ size_t max_payload_size) = 0;
+
+ // Register an encode complete callback object.
+ //
+ // Input:
+ // - callback : Callback object which handles encoded images.
+ //
+ // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
+ virtual int32_t RegisterEncodeCompleteCallback(
+ EncodedImageCallback* callback) = 0;
+
+ // Free encoder memory.
+ // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
+ virtual int32_t Release() = 0;
+
+ // Encode an I420 image (as a part of a video stream). The encoded image
+ // will be returned to the user through the encode complete callback.
+ //
+ // Input:
+ // - frame : Image to be encoded
+ // - frame_types : Frame type to be generated by the encoder.
+ //
+ // Return value : WEBRTC_VIDEO_CODEC_OK if OK
+ // <0 - Errors:
+ // WEBRTC_VIDEO_CODEC_ERR_PARAMETER
+ // WEBRTC_VIDEO_CODEC_MEMORY
+ // WEBRTC_VIDEO_CODEC_ERROR
+ // WEBRTC_VIDEO_CODEC_TIMEOUT
+ virtual int32_t Encode(const VideoFrame& frame,
+ const CodecSpecificInfo* codec_specific_info,
+ const std::vector<FrameType>* frame_types) = 0;
+
+ // Inform the encoder of the new packet loss rate and the round-trip time of
+ // the network.
+ //
+ // Input:
+ // - packet_loss : Fraction lost
+ // (loss rate in percent = 100 * packetLoss / 255)
+ // - rtt : Round-trip time in milliseconds
+ // Return value : WEBRTC_VIDEO_CODEC_OK if OK
+ // <0 - Errors: WEBRTC_VIDEO_CODEC_ERROR
+ virtual int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) = 0;
+
+ // Inform the encoder about the new target bit rate.
+ //
+ // Input:
+ // - bitrate : New target bit rate
+ // - framerate : The target frame rate
+ //
+ // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
+ virtual int32_t SetRates(uint32_t bitrate, uint32_t framerate) {
+ RTC_NOTREACHED() << "SetRate(uint32_t, uint32_t) is deprecated.";
+ return -1;
+ }
+
+ // Default fallback: Just use the sum of bitrates as the single target rate.
+ // TODO(sprang): Remove this default implementation when we remove SetRates().
+ virtual int32_t SetRateAllocation(const BitrateAllocation& allocation,
+ uint32_t framerate) {
+ return SetRates(allocation.get_sum_kbps(), framerate);
+ }
+
+ // Any encoder implementation wishing to use the WebRTC provided
+ // quality scaler must implement this method.
+ virtual ScalingSettings GetScalingSettings() const {
+ return ScalingSettings(false);
+ }
+
+ virtual int32_t SetPeriodicKeyFrames(bool enable) { return -1; }
+ virtual bool SupportsNativeHandle() const { return false; }
+ virtual const char* ImplementationName() const { return "unknown"; }
+};
+
+} // namespace webrtc
+#endif // WEBRTC_API_VIDEO_CODECS_VIDEO_ENCODER_H_
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 6b18392..25bf806 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -226,6 +226,7 @@
"../api:video_frame_api",
"../api/audio_codecs:audio_codecs_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
+ "../api/video_codecs:video_codecs_api",
"../base:rtc_base",
"../base:rtc_base_approved",
"../call",
@@ -305,6 +306,7 @@
"..:webrtc_common",
"../api:call_api",
"../api:video_frame_api",
+ "../api/video_codecs:video_codecs_api",
"../base:rtc_base",
"../base:rtc_base_approved",
"../base:rtc_base_tests_main",
@@ -438,6 +440,7 @@
":rtc_unittest_main",
"../api:video_frame_api",
"../api/audio_codecs:builtin_audio_decoder_factory",
+ "../api/video_codecs:video_codecs_api",
"../audio",
"../base:rtc_base",
"../base:rtc_base_approved",
diff --git a/media/engine/fakewebrtcvideoengine.h b/media/engine/fakewebrtcvideoengine.h
index 2dce2c5..f95fa7b 100644
--- a/media/engine/fakewebrtcvideoengine.h
+++ b/media/engine/fakewebrtcvideoengine.h
@@ -14,7 +14,10 @@
#include <map>
#include <set>
#include <vector>
+#include <string>
+#include "webrtc/api/video_codecs/video_decoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/basictypes.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/gunit.h"
@@ -24,8 +27,6 @@
#include "webrtc/media/engine/webrtcvideodecoderfactory.h"
#include "webrtc/media/engine/webrtcvideoencoderfactory.h"
#include "webrtc/modules/video_coding/include/video_error_codes.h"
-#include "webrtc/video_decoder.h"
-#include "webrtc/video_encoder.h"
namespace cricket {
static const int kEventTimeoutMs = 10000;
diff --git a/media/engine/videodecodersoftwarefallbackwrapper.h b/media/engine/videodecodersoftwarefallbackwrapper.h
index 80d91f4..3984e1f 100644
--- a/media/engine/videodecodersoftwarefallbackwrapper.h
+++ b/media/engine/videodecodersoftwarefallbackwrapper.h
@@ -14,7 +14,7 @@
#include <memory>
#include <string>
-#include "webrtc/video_decoder.h"
+#include "webrtc/api/video_codecs/video_decoder.h"
namespace webrtc {
diff --git a/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc b/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc
index 16991d2..4ac8485 100644
--- a/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc
+++ b/media/engine/videodecodersoftwarefallbackwrapper_unittest.cc
@@ -8,8 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "webrtc/video_decoder.h"
-
+#include "webrtc/api/video_codecs/video_decoder.h"
#include "webrtc/base/checks.h"
#include "webrtc/media/engine/videodecodersoftwarefallbackwrapper.h"
#include "webrtc/modules/video_coding/include/video_error_codes.h"
diff --git a/media/engine/videoencodersoftwarefallbackwrapper.h b/media/engine/videoencodersoftwarefallbackwrapper.h
index 055dd29..61c1a11 100644
--- a/media/engine/videoencodersoftwarefallbackwrapper.h
+++ b/media/engine/videoencodersoftwarefallbackwrapper.h
@@ -15,8 +15,8 @@
#include <string>
#include <vector>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/media/base/codec.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
diff --git a/media/engine/webrtcvideoengine2.cc b/media/engine/webrtcvideoengine2.cc
index 742b34c..087fc4e 100644
--- a/media/engine/webrtcvideoengine2.cc
+++ b/media/engine/webrtcvideoengine2.cc
@@ -17,6 +17,8 @@
#include <utility>
#include "webrtc/api/video/i420_buffer.h"
+#include "webrtc/api/video_codecs/video_decoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/copyonwritebuffer.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/stringutils.h"
@@ -35,8 +37,6 @@
#include "webrtc/media/engine/webrtcvoiceengine.h"
#include "webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h"
#include "webrtc/system_wrappers/include/field_trial.h"
-#include "webrtc/video_decoder.h"
-#include "webrtc/video_encoder.h"
using DegradationPreference = webrtc::VideoSendStream::DegradationPreference;
diff --git a/media/engine/webrtcvideoengine2_unittest.cc b/media/engine/webrtcvideoengine2_unittest.cc
index 1868834..f422ffc 100644
--- a/media/engine/webrtcvideoengine2_unittest.cc
+++ b/media/engine/webrtcvideoengine2_unittest.cc
@@ -13,6 +13,7 @@
#include <memory>
#include <vector>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/arraysize.h"
#include "webrtc/base/gunit.h"
#include "webrtc/base/stringutils.h"
@@ -30,7 +31,6 @@
#include "webrtc/media/engine/webrtcvideoengine2.h"
#include "webrtc/media/engine/webrtcvoiceengine.h"
#include "webrtc/test/field_trial.h"
-#include "webrtc/video_encoder.h"
using webrtc::RtpExtension;
@@ -3803,7 +3803,6 @@
// The first unsignalled SSRC received will create a default receive stream.
// Any different unsignalled SSRC received will replace the default.
TEST_F(WebRtcVideoChannel2Test, ReceiveDifferentUnsignaledSsrc) {
-
// Allow receiving VP8, VP9, H264 (if enabled).
cricket::VideoRecvParameters parameters;
parameters.codecs.push_back(GetEngineCodec("VP8"));
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index c6cbfca..9b611bb 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -129,6 +129,7 @@
deps = [
"../..:webrtc_common",
+ "../../api/video_codecs:video_codecs_api",
"../../base:rtc_base_approved",
"../../base:rtc_numerics",
"../../base:rtc_task_queue",
@@ -224,6 +225,7 @@
deps = [
":video_coding_utility",
"../..:webrtc_common",
+ "../../api/video_codecs:video_codecs_api",
"../../base:rtc_base_approved",
"../../common_video",
"../../system_wrappers",
@@ -322,6 +324,7 @@
":video_coding_utility",
":webrtc_vp8",
"../..:webrtc_common",
+ "../../api/video_codecs:video_codecs_api",
"../../base:rtc_base_approved",
"../../common_video:common_video",
"../../system_wrappers:system_wrappers",
@@ -528,6 +531,7 @@
":webrtc_vp9",
"../..:webrtc_common",
"../../api:video_frame_api",
+ "../../api/video_codecs:video_codecs_api",
"../../base:rtc_base",
"../../base:rtc_base_approved",
"../../base:rtc_task_queue",
diff --git a/modules/video_coding/codecs/test/video_codec_test.h b/modules/video_coding/codecs/test/video_codec_test.h
index 65d20ee..9619273 100644
--- a/modules/video_coding/codecs/test/video_codec_test.h
+++ b/modules/video_coding/codecs/test/video_codec_test.h
@@ -13,12 +13,12 @@
#include <memory>
+#include "webrtc/api/video_codecs/video_decoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/event.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/test/gtest.h"
-#include "webrtc/video_decoder.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
diff --git a/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h b/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h
index 8e7c792..e558290 100644
--- a/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h
+++ b/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h
@@ -16,10 +16,10 @@
#include <map>
#include <memory>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/common_video/include/video_bitrate_allocator.h"
#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
diff --git a/modules/video_coding/include/video_codec_interface.h b/modules/video_coding/include/video_codec_interface.h
index 871cb4b..0bef7da 100644
--- a/modules/video_coding/include/video_codec_interface.h
+++ b/modules/video_coding/include/video_codec_interface.h
@@ -14,12 +14,12 @@
#include <vector>
#include "webrtc/api/video/video_frame.h"
+#include "webrtc/api/video_codecs/video_decoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/common_types.h"
#include "webrtc/modules/include/module_common_types.h"
#include "webrtc/modules/video_coding/include/video_error_codes.h"
#include "webrtc/typedefs.h"
-#include "webrtc/video_decoder.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
diff --git a/modules/video_coding/utility/quality_scaler.h b/modules/video_coding/utility/quality_scaler.h
index bf81e76..a07b1ea 100644
--- a/modules/video_coding/utility/quality_scaler.h
+++ b/modules/video_coding/utility/quality_scaler.h
@@ -14,7 +14,7 @@
#include <utility>
#include "webrtc/common_types.h"
-#include "webrtc/video_encoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/optional.h"
#include "webrtc/base/sequenced_task_checker.h"
#include "webrtc/modules/video_coding/utility/moving_average.h"
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index d9d1d03..cd269f4 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -8,12 +8,12 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/common_video/include/video_bitrate_allocator.h"
#include "webrtc/common_types.h"
#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h"
#include "webrtc/modules/video_coding/include/video_codec_initializer.h"
#include "webrtc/test/gtest.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 8aba758..95c484e 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -147,6 +147,7 @@
":rtc_pc",
"../api:call_api",
"../api:rtc_stats_api",
+ "../api/video_codecs:video_codecs_api",
"../call",
"../media",
"../stats",
diff --git a/sdk/android/src/jni/androidmediaencoder_jni.cc b/sdk/android/src/jni/androidmediaencoder_jni.cc
index 093966e..1274b8e 100644
--- a/sdk/android/src/jni/androidmediaencoder_jni.cc
+++ b/sdk/android/src/jni/androidmediaencoder_jni.cc
@@ -13,15 +13,15 @@
#include "webrtc/sdk/android/src/jni/androidmediaencoder_jni.h"
#include <algorithm>
-#include <memory>
#include <list>
+#include <memory>
+#include <string>
+#include <utility>
#include "third_party/libyuv/include/libyuv/convert.h"
#include "third_party/libyuv/include/libyuv/convert_from.h"
#include "third_party/libyuv/include/libyuv/video_common.h"
-#include "webrtc/sdk/android/src/jni/androidmediacodeccommon.h"
-#include "webrtc/sdk/android/src/jni/classreferenceholder.h"
-#include "webrtc/sdk/android/src/jni/native_handle_impl.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/bind.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
@@ -38,9 +38,11 @@
#include "webrtc/modules/video_coding/include/video_codec_interface.h"
#include "webrtc/modules/video_coding/utility/quality_scaler.h"
#include "webrtc/modules/video_coding/utility/vp8_header_parser.h"
+#include "webrtc/sdk/android/src/jni/androidmediacodeccommon.h"
+#include "webrtc/sdk/android/src/jni/classreferenceholder.h"
+#include "webrtc/sdk/android/src/jni/native_handle_impl.h"
#include "webrtc/system_wrappers/include/field_trial.h"
#include "webrtc/system_wrappers/include/logcat_trace_context.h"
-#include "webrtc/video_encoder.h"
using rtc::Bind;
using rtc::Thread;
@@ -123,7 +125,7 @@
private:
class EncodeTask : public rtc::QueuedTask {
public:
- EncodeTask(rtc::WeakPtr<MediaCodecVideoEncoder> encoder);
+ explicit EncodeTask(rtc::WeakPtr<MediaCodecVideoEncoder> encoder);
bool Run() override;
private:
@@ -234,7 +236,7 @@
int64_t stat_start_time_ms_; // Start time for statistics.
int current_frames_; // Number of frames in the current statistics interval.
int current_bytes_; // Encoded bytes in the current statistics interval.
- int current_acc_qp_; // Accumulated QP in the current statistics interval.
+ int current_acc_qp_; // Accumulated QP in the current statistics interval.
int current_encoding_time_ms_; // Overall encoding time in the current second
int64_t last_input_timestamp_ms_; // Timestamp of last received yuv frame.
int64_t last_output_timestamp_ms_; // Timestamp of last encoded frame.
@@ -259,10 +261,10 @@
const webrtc::VideoRotation rotation;
};
std::list<InputFrameInfo> input_frame_infos_;
- int32_t output_timestamp_; // Last output frame timestamp from
- // |input_frame_infos_|.
- int64_t output_render_time_ms_; // Last output frame render time from
- // |input_frame_infos_|.
+ int32_t output_timestamp_; // Last output frame timestamp from
+ // |input_frame_infos_|.
+ int64_t output_render_time_ms_; // Last output frame render time from
+ // |input_frame_infos_|.
webrtc::VideoRotation output_rotation_; // Last output frame rotation from
// |input_frame_infos_|.
// Frame size in bytes fed to MediaCodec.
@@ -276,8 +278,8 @@
webrtc::H264BitstreamParser h264_bitstream_parser_;
// VP9 variables to populate codec specific structure.
- webrtc::GofInfoVP9 gof_; // Contains each frame's temporal information for
- // non-flexible VP9 mode.
+ webrtc::GofInfoVP9 gof_; // Contains each frame's temporal information for
+ // non-flexible VP9 mode.
uint8_t tl0_pic_idx_;
size_t gof_idx_;
@@ -519,8 +521,9 @@
ScopedLocalRefFrame local_ref_frame(jni);
const VideoCodecType codec_type = GetCodecType();
- ALOGD << "InitEncodeInternal Type: " << (int)codec_type << ", " << width
- << " x " << height << ". Bitrate: " << kbps << " kbps. Fps: " << fps;
+ ALOGD << "InitEncodeInternal Type: " << static_cast<int>(codec_type) << ", "
+ << width << " x " << height << ". Bitrate: " << kbps
+ << " kbps. Fps: " << fps;
if (kbps == 0) {
kbps = last_set_bitrate_kbps_;
}
@@ -550,9 +553,10 @@
input_frame_infos_.clear();
drop_next_input_frame_ = false;
use_surface_ = use_surface;
- picture_id_ = static_cast<uint16_t>(rand()) & 0x7FFF;
+ // TODO(ilnik): Use rand_r() instead to avoid LINT warnings below.
+ picture_id_ = static_cast<uint16_t>(rand()) & 0x7FFF; // NOLINT
gof_.SetGofInfoVP9(webrtc::TemporalStructureMode::kTemporalStructureMode1);
- tl0_pic_idx_ = static_cast<uint8_t>(rand());
+ tl0_pic_idx_ = static_cast<uint8_t>(rand()); // NOLINT
gof_idx_ = 0;
last_frame_received_ms_ = -1;
frames_received_since_last_key_ = kMinKeyFrameInterval;
@@ -676,7 +680,7 @@
}
if (frames_encoded_ < kMaxEncodedLogFrames) {
ALOGD << "Encoder frame in # " << (frames_received_ - 1)
- << ". TS: " << (int)(current_timestamp_us_ / 1000)
+ << ". TS: " << static_cast<int>(current_timestamp_us_ / 1000)
<< ". Q: " << input_frame_infos_.size() << ". Fps: " << last_set_fps_
<< ". Kbps: " << last_set_bitrate_kbps_;
}
@@ -696,7 +700,7 @@
if (input_frame_infos_.size() > MAX_ENCODER_Q_SIZE) {
ALOGD << "Already " << input_frame_infos_.size()
<< " frames in the queue, dropping"
- << ". TS: " << (int)(current_timestamp_us_ / 1000)
+ << ". TS: " << static_cast<int>(current_timestamp_us_ / 1000)
<< ". Fps: " << last_set_fps_
<< ". Consecutive drops: " << consecutive_full_queue_frame_drops_;
current_timestamp_us_ += rtc::kNumMicrosecsPerSec / last_set_fps_;
@@ -1139,14 +1143,13 @@
frame_encoding_time_ms = rtc::TimeMillis() - encoding_start_time_ms;
}
if (frames_encoded_ < kMaxEncodedLogFrames) {
- int current_latency =
- (int)(last_input_timestamp_ms_ - last_output_timestamp_ms_);
- ALOGD << "Encoder frame out # " << frames_encoded_ <<
- ". Key: " << key_frame <<
- ". Size: " << payload_size <<
- ". TS: " << (int)last_output_timestamp_ms_ <<
- ". Latency: " << current_latency <<
- ". EncTime: " << frame_encoding_time_ms;
+ int current_latency = static_cast<int>(last_input_timestamp_ms_ -
+ last_output_timestamp_ms_);
+ ALOGD << "Encoder frame out # " << frames_encoded_
+ << ". Key: " << key_frame << ". Size: " << payload_size
+ << ". TS: " << static_cast<int>(last_output_timestamp_ms_)
+ << ". Latency: " << current_latency
+ << ". EncTime: " << frame_encoding_time_ms;
}
// Calculate and print encoding statistics - every 3 seconds.
diff --git a/test/BUILD.gn b/test/BUILD.gn
index a159567..4050eaf 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -403,6 +403,7 @@
":test_support",
":video_test_common",
"..:webrtc_common",
+ "../api/video_codecs:video_codecs_api",
"../audio",
"../base:rtc_base_approved",
"../call",
diff --git a/test/configurable_frame_size_encoder.h b/test/configurable_frame_size_encoder.h
index a3820ba..886c546 100644
--- a/test/configurable_frame_size_encoder.h
+++ b/test/configurable_frame_size_encoder.h
@@ -14,7 +14,7 @@
#include <memory>
#include <vector>
-#include "webrtc/video_encoder.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
namespace webrtc {
namespace test {
diff --git a/test/fake_encoder.h b/test/fake_encoder.h
index c07fbb3..e3878ec 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -14,12 +14,12 @@
#include <vector>
#include <memory>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/sequenced_task_checker.h"
#include "webrtc/base/task_queue.h"
#include "webrtc/common_types.h"
#include "webrtc/system_wrappers/include/clock.h"
-#include "webrtc/video_encoder.h"
namespace webrtc {
namespace test {
diff --git a/video/BUILD.gn b/video/BUILD.gn
index be12b07..c9d9a33 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -58,6 +58,7 @@
deps = [
"..:webrtc_common",
"../api:transport_api",
+ "../api/video_codecs:video_codecs_api",
"../base:rtc_base_approved",
"../base:rtc_numerics",
"../base:rtc_task_queue",
@@ -168,6 +169,7 @@
"replay.cc",
]
deps = [
+ "../api/video_codecs:video_codecs_api",
"../system_wrappers:metrics_default",
"../test:field_trial",
"../test:run_test",
diff --git a/video/end_to_end_tests.cc b/video/end_to_end_tests.cc
index e320826..ff0185c 100644
--- a/video/end_to_end_tests.cc
+++ b/video/end_to_end_tests.cc
@@ -15,6 +15,7 @@
#include <string>
#include <vector>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/event.h"
#include "webrtc/base/file.h"
@@ -54,7 +55,6 @@
#include "webrtc/test/testsupport/fileutils.h"
#include "webrtc/test/testsupport/perf_test.h"
#include "webrtc/video/transport_adapter.h"
-#include "webrtc/video_encoder.h"
#if defined(MEMORY_SANITIZER)
// Flaky under MemorySanitizer, see
diff --git a/video/payload_router.h b/video/payload_router.h
index f2d138d..bcf1d9b 100644
--- a/video/payload_router.h
+++ b/video/payload_router.h
@@ -13,12 +13,12 @@
#include <vector>
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/common_types.h"
#include "webrtc/config.h"
-#include "webrtc/video_encoder.h"
#include "webrtc/system_wrappers/include/atomic32.h"
namespace webrtc {
diff --git a/video/replay.cc b/video/replay.cc
index 6347dc9..3bfdf92 100644
--- a/video/replay.cc
+++ b/video/replay.cc
@@ -15,6 +15,7 @@
#include <sstream>
#include "gflags/gflags.h"
+#include "webrtc/api/video_codecs/video_decoder.h"
#include "webrtc/base/checks.h"
#include "webrtc/call/call.h"
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
@@ -32,7 +33,6 @@
#include "webrtc/test/video_capturer.h"
#include "webrtc/test/video_renderer.h"
#include "webrtc/typedefs.h"
-#include "webrtc/video_decoder.h"
namespace webrtc {
namespace flags {
diff --git a/video/video_receive_stream_unittest.cc b/video/video_receive_stream_unittest.cc
index 9824890..29f2497 100644
--- a/video/video_receive_stream_unittest.cc
+++ b/video/video_receive_stream_unittest.cc
@@ -13,6 +13,7 @@
#include "webrtc/test/gtest.h"
#include "webrtc/test/gmock.h"
+#include "webrtc/api/video_codecs/video_decoder.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/event.h"
#include "webrtc/media/base/fakevideorenderer.h"
@@ -24,7 +25,6 @@
#include "webrtc/system_wrappers/include/clock.h"
#include "webrtc/system_wrappers/include/sleep.h"
#include "webrtc/test/field_trial.h"
-#include "webrtc/video_decoder.h"
using testing::_;
using testing::Invoke;
diff --git a/video/vie_encoder.h b/video/vie_encoder.h
index 473a3c8..213ff6d 100644
--- a/video/vie_encoder.h
+++ b/video/vie_encoder.h
@@ -17,6 +17,7 @@
#include <vector>
#include "webrtc/api/video/video_rotation.h"
+#include "webrtc/api/video_codecs/video_encoder.h"
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/event.h"
#include "webrtc/base/sequenced_task_checker.h"
@@ -31,7 +32,6 @@
#include "webrtc/system_wrappers/include/atomic32.h"
#include "webrtc/typedefs.h"
#include "webrtc/video/overuse_frame_detector.h"
-#include "webrtc/video_encoder.h"
#include "webrtc/video_send_stream.h"
namespace webrtc {
diff --git a/video_decoder.h b/video_decoder.h
index 70c0912..65f9de9 100644
--- a/video_decoder.h
+++ b/video_decoder.h
@@ -1,5 +1,6 @@
/*
- * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
+ * DEPRECATED: use api/video_codecs/video_decoder.h instead.
+ * Copyright (c) 2017 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
@@ -11,76 +12,6 @@
#ifndef WEBRTC_VIDEO_DECODER_H_
#define WEBRTC_VIDEO_DECODER_H_
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "webrtc/common_types.h"
-#include "webrtc/typedefs.h"
-#include "webrtc/video_frame.h"
-
-namespace webrtc {
-
-class RTPFragmentationHeader;
-// TODO(pbos): Expose these through a public (root) header or change these APIs.
-struct CodecSpecificInfo;
-class VideoCodec;
-
-class DecodedImageCallback {
- public:
- virtual ~DecodedImageCallback() {}
-
- virtual int32_t Decoded(VideoFrame& decodedImage) = 0;
- // Provides an alternative interface that allows the decoder to specify the
- // decode time excluding waiting time for any previous pending frame to
- // return. This is necessary for breaking positive feedback in the delay
- // estimation when the decoder has a single output buffer.
- virtual int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) {
- // The default implementation ignores custom decode time value.
- return Decoded(decodedImage);
- }
- // TODO(sakal): Remove other implementations when upstream projects have been
- // updated.
- virtual void Decoded(VideoFrame& decodedImage,
- rtc::Optional<int32_t> decode_time_ms,
- rtc::Optional<uint8_t> qp) {
- Decoded(decodedImage,
- decode_time_ms ? static_cast<int32_t>(*decode_time_ms) : -1);
- }
-
- virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) {
- return -1;
- }
-
- virtual int32_t ReceivedDecodedFrame(const uint64_t pictureId) { return -1; }
-};
-
-class VideoDecoder {
- public:
- virtual ~VideoDecoder() {}
-
- virtual int32_t InitDecode(const VideoCodec* codec_settings,
- int32_t number_of_cores) = 0;
-
- virtual int32_t Decode(const EncodedImage& input_image,
- bool missing_frames,
- const RTPFragmentationHeader* fragmentation,
- const CodecSpecificInfo* codec_specific_info = NULL,
- int64_t render_time_ms = -1) = 0;
-
- virtual int32_t RegisterDecodeCompleteCallback(
- DecodedImageCallback* callback) = 0;
-
- virtual int32_t Release() = 0;
-
- // Returns true if the decoder prefer to decode frames late.
- // That is, it can not decode infinite number of frames before the decoded
- // frame is consumed.
- virtual bool PrefersLateDecoding() const { return true; }
-
- virtual const char* ImplementationName() const { return "unknown"; }
-};
-
-} // namespace webrtc
+#include "webrtc/api/video_codecs/video_decoder.h"
#endif // WEBRTC_VIDEO_DECODER_H_
diff --git a/video_encoder.h b/video_encoder.h
index 0a21fa3..e64c41b 100644
--- a/video_encoder.h
+++ b/video_encoder.h
@@ -1,5 +1,6 @@
/*
- * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
+ * DEPRECATED: use api/video_codecs/video_encoder.h instead.
+ * Copyright (c) 2017 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
@@ -11,182 +12,6 @@
#ifndef WEBRTC_VIDEO_ENCODER_H_
#define WEBRTC_VIDEO_ENCODER_H_
-#include <memory>
-#include <string>
-#include <vector>
+#include "webrtc/api/video_codecs/video_encoder.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/common_types.h"
-#include "webrtc/typedefs.h"
-#include "webrtc/video_frame.h"
-#include "webrtc/base/optional.h"
-
-namespace webrtc {
-
-class RTPFragmentationHeader;
-// TODO(pbos): Expose these through a public (root) header or change these APIs.
-struct CodecSpecificInfo;
-class VideoCodec;
-
-class EncodedImageCallback {
- public:
- virtual ~EncodedImageCallback() {}
-
- struct Result {
- enum Error {
- OK,
-
- // Failed to send the packet.
- ERROR_SEND_FAILED,
- };
-
- Result(Error error) : error(error) {}
- Result(Error error, uint32_t frame_id) : error(error), frame_id(frame_id) {}
-
- Error error;
-
- // Frame ID assigned to the frame. The frame ID should be the same as the ID
- // seen by the receiver for this frame. RTP timestamp of the frame is used
- // as frame ID when RTP is used to send video. Must be used only when
- // error=OK.
- uint32_t frame_id = 0;
-
- // Tells the encoder that the next frame is should be dropped.
- bool drop_next_frame = false;
- };
-
- // Callback function which is called when an image has been encoded.
- virtual Result OnEncodedImage(
- const EncodedImage& encoded_image,
- const CodecSpecificInfo* codec_specific_info,
- const RTPFragmentationHeader* fragmentation) = 0;
-
- virtual void OnDroppedFrame() {}
-};
-
-class VideoEncoder {
- public:
- enum EncoderType {
- kH264,
- kVp8,
- kVp9,
- kUnsupportedCodec,
- };
- struct QpThresholds {
- QpThresholds(int l, int h) : low(l), high(h) {}
- QpThresholds() : low(-1), high(-1) {}
- int low;
- int high;
- };
- struct ScalingSettings {
- ScalingSettings(bool on, int low, int high)
- : enabled(on),
- thresholds(rtc::Optional<QpThresholds>(QpThresholds(low, high))) {}
- explicit ScalingSettings(bool on) : enabled(on) {}
- const bool enabled;
- const rtc::Optional<QpThresholds> thresholds;
- };
- static VideoEncoder* Create(EncoderType codec_type);
- // Returns true if this type of encoder can be created using
- // VideoEncoder::Create.
- static bool IsSupportedSoftware(EncoderType codec_type);
- static EncoderType CodecToEncoderType(VideoCodecType codec_type);
-
- static VideoCodecVP8 GetDefaultVp8Settings();
- static VideoCodecVP9 GetDefaultVp9Settings();
- static VideoCodecH264 GetDefaultH264Settings();
-
- virtual ~VideoEncoder() {}
-
- // Initialize the encoder with the information from the codecSettings
- //
- // Input:
- // - codec_settings : Codec settings
- // - number_of_cores : Number of cores available for the encoder
- // - max_payload_size : The maximum size each payload is allowed
- // to have. Usually MTU - overhead.
- //
- // Return value : Set bit rate if OK
- // <0 - Errors:
- // WEBRTC_VIDEO_CODEC_ERR_PARAMETER
- // WEBRTC_VIDEO_CODEC_ERR_SIZE
- // WEBRTC_VIDEO_CODEC_LEVEL_EXCEEDED
- // WEBRTC_VIDEO_CODEC_MEMORY
- // WEBRTC_VIDEO_CODEC_ERROR
- virtual int32_t InitEncode(const VideoCodec* codec_settings,
- int32_t number_of_cores,
- size_t max_payload_size) = 0;
-
- // Register an encode complete callback object.
- //
- // Input:
- // - callback : Callback object which handles encoded images.
- //
- // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
- virtual int32_t RegisterEncodeCompleteCallback(
- EncodedImageCallback* callback) = 0;
-
- // Free encoder memory.
- // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
- virtual int32_t Release() = 0;
-
- // Encode an I420 image (as a part of a video stream). The encoded image
- // will be returned to the user through the encode complete callback.
- //
- // Input:
- // - frame : Image to be encoded
- // - frame_types : Frame type to be generated by the encoder.
- //
- // Return value : WEBRTC_VIDEO_CODEC_OK if OK
- // <0 - Errors:
- // WEBRTC_VIDEO_CODEC_ERR_PARAMETER
- // WEBRTC_VIDEO_CODEC_MEMORY
- // WEBRTC_VIDEO_CODEC_ERROR
- // WEBRTC_VIDEO_CODEC_TIMEOUT
- virtual int32_t Encode(const VideoFrame& frame,
- const CodecSpecificInfo* codec_specific_info,
- const std::vector<FrameType>* frame_types) = 0;
-
- // Inform the encoder of the new packet loss rate and the round-trip time of
- // the network.
- //
- // Input:
- // - packet_loss : Fraction lost
- // (loss rate in percent = 100 * packetLoss / 255)
- // - rtt : Round-trip time in milliseconds
- // Return value : WEBRTC_VIDEO_CODEC_OK if OK
- // <0 - Errors: WEBRTC_VIDEO_CODEC_ERROR
- virtual int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) = 0;
-
- // Inform the encoder about the new target bit rate.
- //
- // Input:
- // - bitrate : New target bit rate
- // - framerate : The target frame rate
- //
- // Return value : WEBRTC_VIDEO_CODEC_OK if OK, < 0 otherwise.
- virtual int32_t SetRates(uint32_t bitrate, uint32_t framerate) {
- RTC_NOTREACHED() << "SetRate(uint32_t, uint32_t) is deprecated.";
- return -1;
- }
-
- // Default fallback: Just use the sum of bitrates as the single target rate.
- // TODO(sprang): Remove this default implementation when we remove SetRates().
- virtual int32_t SetRateAllocation(const BitrateAllocation& allocation,
- uint32_t framerate) {
- return SetRates(allocation.get_sum_kbps(), framerate);
- }
-
- // Any encoder implementation wishing to use the WebRTC provided
- // quality scaler must implement this method.
- virtual ScalingSettings GetScalingSettings() const {
- return ScalingSettings(false);
- }
-
- virtual int32_t SetPeriodicKeyFrames(bool enable) { return -1; }
- virtual bool SupportsNativeHandle() const { return false; }
- virtual const char* ImplementationName() const { return "unknown"; }
-};
-
-} // namespace webrtc
#endif // WEBRTC_VIDEO_ENCODER_H_