Move list of supported H264 codecs from InternalEncoderFactory to h264.h
This CL is a clean-up to prepare for adding more supported codecs for the internal H264 SW codec.
Bug: webrtc:8317
Change-Id: If483d05c01c40bbc81cbd1a6aad89961689714ef
Reviewed-on: https://webrtc-review.googlesource.com/4940
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Magnus Jedvert <magjed@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20105}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 785533a..452f0bf 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -188,6 +188,7 @@
defines = []
deps = [
":video_coding_utility",
+ "../../api/video_codecs:video_codecs_api",
"../../media:rtc_media_base",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers",
diff --git a/modules/video_coding/codecs/h264/h264.cc b/modules/video_coding/codecs/h264/h264.cc
index 471ca24..c24162d 100644
--- a/modules/video_coding/codecs/h264/h264.cc
+++ b/modules/video_coding/codecs/h264/h264.cc
@@ -11,6 +11,8 @@
#include "modules/video_coding/codecs/h264/include/h264.h"
+#include "api/video_codecs/sdp_video_format.h"
+
#if defined(WEBRTC_USE_H264)
#include "modules/video_coding/codecs/h264/h264_decoder_impl.h"
#include "modules/video_coding/codecs/h264/h264_encoder_impl.h"
@@ -27,6 +29,15 @@
bool g_rtc_use_h264 = true;
#endif
+// If any H.264 codec is supported (iOS HW or OpenH264/FFmpeg).
+bool IsH264CodecSupported() {
+#if defined(WEBRTC_USE_H264)
+ return g_rtc_use_h264;
+#else
+ return false;
+#endif
+}
+
} // namespace
void DisableRtcUseH264() {
@@ -35,13 +46,18 @@
#endif
}
-// If any H.264 codec is supported (iOS HW or OpenH264/FFmpeg).
-bool IsH264CodecSupported() {
-#if defined(WEBRTC_USE_H264)
- return g_rtc_use_h264;
-#else
- return false;
-#endif
+std::vector<SdpVideoFormat> SupportedH264Codecs() {
+ if (!IsH264CodecSupported())
+ return std::vector<SdpVideoFormat>();
+ std::vector<SdpVideoFormat> codecs;
+
+ codecs.push_back(SdpVideoFormat(
+ cricket::kH264CodecName, {{cricket::kH264FmtpProfileLevelId,
+ cricket::kH264ProfileLevelConstrainedBaseline},
+ {cricket::kH264FmtpLevelAsymmetryAllowed, "1"},
+ {cricket::kH264FmtpPacketizationMode, "1"}}));
+
+ return codecs;
}
H264Encoder* H264Encoder::Create(const cricket::VideoCodec& codec) {
diff --git a/modules/video_coding/codecs/h264/include/h264.h b/modules/video_coding/codecs/h264/include/h264.h
index d4c8c21..6c93b34 100644
--- a/modules/video_coding/codecs/h264/include/h264.h
+++ b/modules/video_coding/codecs/h264/include/h264.h
@@ -12,17 +12,25 @@
#ifndef MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
#define MODULES_VIDEO_CODING_CODECS_H264_INCLUDE_H264_H_
+#include <vector>
+
#include "media/base/codec.h"
#include "modules/video_coding/include/video_codec_interface.h"
namespace webrtc {
+struct SdpVideoFormat;
+
// Set to disable the H.264 encoder/decoder implementations that are provided if
// |rtc_use_h264| build flag is true (if false, this function does nothing).
// This function should only be called before or during WebRTC initialization
// and is not thread-safe.
void DisableRtcUseH264();
+// Returns a vector with all supported internal H264 profiles that we can
+// negotiate in SDP, in order of preference.
+std::vector<SdpVideoFormat> SupportedH264Codecs();
+
class H264Encoder : public VideoEncoder {
public:
static H264Encoder* Create(const cricket::VideoCodec& codec);