hc
2023-11-20 2e7bd41e4e8ab3d1efdabd9e263a2f7fe79bff8c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
From 46f6f7985d38fa4e54ab272f29aaf6341f0b96d0 Mon Sep 17 00:00:00 2001
From: Jeffy Chen <jeffy.chen@rock-chips.com>
Date: Fri, 9 Sep 2022 16:06:58 +0800
Subject: [PATCH 16/17] media: Enable HEVC by default for V4L2VDA
 
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
---
 media/base/media_switches.cc                          | 2 +-
 media/gpu/v4l2/v4l2_device.cc                         | 9 +++++++++
 media/gpu/v4l2/v4l2_vda_helpers.cc                    | 1 +
 media/gpu/v4l2/v4l2_video_decode_accelerator.cc       | 2 +-
 media/gpu/v4l2/v4l2_video_decoder.cc                  | 3 ++-
 media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc | 1 +
 media/media_options.gni                               | 2 +-
 7 files changed, 16 insertions(+), 4 deletions(-)
 
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
index 60c69224d..569c9691d 100644
--- a/media/base/media_switches.cc
+++ b/media/base/media_switches.cc
@@ -270,7 +270,7 @@ const base::Feature kPictureInPicture {
 #if BUILDFLAG(ENABLE_PLATFORM_HEVC)
 // Enables HEVC hardware accelerated decoding.
 const base::Feature kPlatformHEVCDecoderSupport{
-    "PlatformHEVCDecoderSupport", base::FEATURE_DISABLED_BY_DEFAULT};
+    "PlatformHEVCDecoderSupport", base::FEATURE_ENABLED_BY_DEFAULT};
 #endif  // BUILDFLAG(ENABLE_PLATFORM_HEVC)
 
 // Only decode preload=metadata elements upon visibility.
diff --git a/media/gpu/v4l2/v4l2_device.cc b/media/gpu/v4l2/v4l2_device.cc
index e0489a104..1506a0a9a 100644
--- a/media/gpu/v4l2/v4l2_device.cc
+++ b/media/gpu/v4l2/v4l2_device.cc
@@ -1551,6 +1551,8 @@ uint32_t V4L2Device::VideoCodecProfileToV4L2PixFmt(VideoCodecProfile profile,
 
   if (profile >= H264PROFILE_MIN && profile <= H264PROFILE_MAX) {
     return V4L2_PIX_FMT_H264;
+  } else if (profile >= HEVCPROFILE_MIN && profile <= HEVCPROFILE_MAX) {
+    return V4L2_PIX_FMT_HEVC;
   } else if (profile >= VP8PROFILE_MIN && profile <= VP8PROFILE_MAX) {
     return V4L2_PIX_FMT_VP8;
   } else if (profile >= VP9PROFILE_MIN && profile <= VP9PROFILE_MAX) {
@@ -1714,6 +1716,13 @@ std::vector<VideoCodecProfile> V4L2Device::V4L2PixFmtToVideoCodecProfiles(
           H264PROFILE_HIGH,
       };
       break;
+    case V4L2_PIX_FMT_HEVC:
+      profiles = {
+          HEVCPROFILE_MAIN,
+          HEVCPROFILE_MAIN10,
+          HEVCPROFILE_MAIN_STILL_PICTURE,
+      };
+      break;
     case V4L2_PIX_FMT_VP8:
       profiles = {VP8PROFILE_ANY};
       break;
diff --git a/media/gpu/v4l2/v4l2_vda_helpers.cc b/media/gpu/v4l2/v4l2_vda_helpers.cc
index f25619077..e2cb051c5 100644
--- a/media/gpu/v4l2/v4l2_vda_helpers.cc
+++ b/media/gpu/v4l2/v4l2_vda_helpers.cc
@@ -151,6 +151,7 @@ InputBufferFragmentSplitter::CreateFromProfile(
     case VideoCodec::kH264:
       return std::make_unique<
           v4l2_vda_helpers::H264InputBufferFragmentSplitter>();
+    case VideoCodec::kHEVC:
     case VideoCodec::kVP8:
     case VideoCodec::kVP9:
       // VP8/VP9 don't need any frame splitting, use the default implementation.
diff --git a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
index f39cc569a..51e610abb 100644
--- a/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
+++ b/media/gpu/v4l2/v4l2_video_decode_accelerator.cc
@@ -83,7 +83,7 @@ bool IsVp9KSVCStream(uint32_t input_format_fourcc,
 
 // static
 const uint32_t V4L2VideoDecodeAccelerator::supported_input_fourccs_[] = {
-    V4L2_PIX_FMT_H264, V4L2_PIX_FMT_VP8, V4L2_PIX_FMT_VP9,
+    V4L2_PIX_FMT_H264, V4L2_PIX_FMT_HEVC, V4L2_PIX_FMT_VP8, V4L2_PIX_FMT_VP9,
 };
 
 // static
diff --git a/media/gpu/v4l2/v4l2_video_decoder.cc b/media/gpu/v4l2/v4l2_video_decoder.cc
index b95d84ad1..3d002dfdd 100644
--- a/media/gpu/v4l2/v4l2_video_decoder.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder.cc
@@ -52,7 +52,8 @@ constexpr uint32_t kSupportedInputFourccs[] = {
 #if !BUILDFLAG(USE_LINUX_V4L2)
     V4L2_PIX_FMT_H264_SLICE, V4L2_PIX_FMT_VP8_FRAME, V4L2_PIX_FMT_VP9_FRAME,
 #endif
-    V4L2_PIX_FMT_H264,       V4L2_PIX_FMT_VP8,       V4L2_PIX_FMT_VP9,
+    V4L2_PIX_FMT_H264,      V4L2_PIX_FMT_HEVC,
+    V4L2_PIX_FMT_VP8,       V4L2_PIX_FMT_VP9,
 };
 
 // Number of output buffers to use for each VD stage above what's required by
diff --git a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
index 87d4f153d..6ab11da86 100644
--- a/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
+++ b/media/gpu/v4l2/v4l2_video_decoder_backend_stateful.cc
@@ -731,6 +731,7 @@ bool V4L2StatefulVideoDecoderBackend::IsSupportedProfile(
   if (supported_profiles_.empty()) {
     constexpr uint32_t kSupportedInputFourccs[] = {
         V4L2_PIX_FMT_H264,
+        V4L2_PIX_FMT_HEVC,
         V4L2_PIX_FMT_VP8,
         V4L2_PIX_FMT_VP9,
     };
diff --git a/media/media_options.gni b/media/media_options.gni
index b3727203d..64c91692c 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -85,7 +85,7 @@ declare_args() {
   enable_hevc_parser_and_hw_decoder =
       proprietary_codecs &&
       (use_fuzzing_engine || use_chromeos_protected_media || is_win || is_mac ||
-       is_android)
+       is_android || is_linux)
 }
 
 # Use another declare_args() to allow dependence on
-- 
2.20.1