Add H265 to VideoCodecMimeType
This enables testing HW H265 codecs on devices where the support is available.
Bug: b/261160916, webrtc:14852
Change-Id: I32d102fcf483ea4ba46d6f5161342dbb584e7cc9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/298040
Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#39591}
diff --git a/modules/video_coding/codecs/test/video_codec_test.cc b/modules/video_coding/codecs/test/video_codec_test.cc
index 535254a..42e92c5 100644
--- a/modules/video_coding/codecs/test/video_codec_test.cc
+++ b/modules/video_coding/codecs/test/video_codec_test.cc
@@ -581,7 +581,7 @@
INSTANTIATE_TEST_SUITE_P(
All,
SpatialQualityTest,
- Combine(Values("AV1", "VP9", "VP8", "H264"),
+ Combine(Values("AV1", "VP9", "VP8", "H264", "H265"),
#if defined(WEBRTC_ANDROID)
Values("builtin", "mediacodec"),
#else
@@ -663,7 +663,7 @@
INSTANTIATE_TEST_SUITE_P(All,
BitrateAdaptationTest,
- Combine(Values("AV1", "VP9", "VP8", "H264"),
+ Combine(Values("AV1", "VP9", "VP8", "H264", "H265"),
#if defined(WEBRTC_ANDROID)
Values("builtin", "mediacodec"),
#else
@@ -737,7 +737,7 @@
INSTANTIATE_TEST_SUITE_P(All,
FramerateAdaptationTest,
- Combine(Values("AV1", "VP9", "VP8", "H264"),
+ Combine(Values("AV1", "VP9", "VP8", "H264", "H265"),
#if defined(WEBRTC_ANDROID)
Values("builtin", "mediacodec"),
#else
diff --git a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
index b48a39a..d43fc27 100644
--- a/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
+++ b/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java
@@ -132,9 +132,10 @@
public VideoCodecInfo[] getSupportedCodecs() {
List<VideoCodecInfo> supportedCodecInfos = new ArrayList<VideoCodecInfo>();
// Generate a list of supported codecs in order of preference:
- // VP8, VP9, H264 (high profile), H264 (baseline profile) and AV1.
- for (VideoCodecMimeType type : new VideoCodecMimeType[] {VideoCodecMimeType.VP8,
- VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
+ // VP8, VP9, H264 (high profile), H264 (baseline profile), AV1 and H265.
+ for (VideoCodecMimeType type :
+ new VideoCodecMimeType[] {VideoCodecMimeType.VP8, VideoCodecMimeType.VP9,
+ VideoCodecMimeType.H264, VideoCodecMimeType.AV1, VideoCodecMimeType.H265}) {
MediaCodecInfo codec = findCodecForType(type);
if (codec != null) {
String name = type.name();
@@ -201,6 +202,7 @@
return isHardwareSupportedInCurrentSdkVp9(info);
case H264:
return isHardwareSupportedInCurrentSdkH264(info);
+ case H265:
case AV1:
return false;
}
diff --git a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java
index 915383b..41d9735 100644
--- a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java
+++ b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java
@@ -173,7 +173,7 @@
* intervals, and bitrateAdjuster.
*
* @param codecName the hardware codec implementation to use
- * @param codecType the type of the given video codec (eg. VP8, VP9, H264 or AV1)
+ * @param codecType the type of the given video codec (eg. VP8, VP9, H264, H265, AV1)
* @param surfaceColorFormat color format for surface mode or null if not available
* @param yuvColorFormat color format for bytebuffer mode
* @param keyFrameIntervalSec interval in seconds between key frames; used to initialize the codec
diff --git a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java
index d5ccae9..5417fec 100644
--- a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java
+++ b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java
@@ -85,6 +85,7 @@
case VP8:
case VP9:
case AV1:
+ case H265:
return new HashMap<String, String>();
case H264:
return H264Utils.getDefaultH264Params(highProfile);
diff --git a/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java b/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
index bf591dd..9a73bc4 100644
--- a/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
+++ b/sdk/android/src/java/org/webrtc/MediaCodecVideoDecoderFactory.java
@@ -63,9 +63,10 @@
public VideoCodecInfo[] getSupportedCodecs() {
List<VideoCodecInfo> supportedCodecInfos = new ArrayList<VideoCodecInfo>();
// Generate a list of supported codecs in order of preference:
- // VP8, VP9, H264 (high profile), and H264 (baseline profile).
- for (VideoCodecMimeType type : new VideoCodecMimeType[] {VideoCodecMimeType.VP8,
- VideoCodecMimeType.VP9, VideoCodecMimeType.H264, VideoCodecMimeType.AV1}) {
+ // VP8, VP9, H264 (high profile), H264 (baseline profile), AV1 and H265.
+ for (VideoCodecMimeType type :
+ new VideoCodecMimeType[] {VideoCodecMimeType.VP8, VideoCodecMimeType.VP9,
+ VideoCodecMimeType.H264, VideoCodecMimeType.AV1, VideoCodecMimeType.H265}) {
MediaCodecInfo codec = findCodecForType(type);
if (codec != null) {
String name = type.name();
diff --git a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
index 26a0309..5538f32 100644
--- a/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
+++ b/sdk/android/src/java/org/webrtc/VideoCodecMimeType.java
@@ -15,7 +15,8 @@
VP8("video/x-vnd.on2.vp8"),
VP9("video/x-vnd.on2.vp9"),
H264("video/avc"),
- AV1("video/av01");
+ AV1("video/av01"),
+ H265("video/hevc");
private final String mimeType;