Skip to content

Commit 368afbd

Browse files
authored
feat: encode H.265 and VP9 and decode VP9 with VA-API on Linux, when turned on (#352)
* feat: encode H.265 with VA-API on Linux, when turned on The VA-API encoder factory offers H.265 Main as well, where the driver encodes it (Intel, AMD), but only with the system property webrtc.hardware.vaapiExperimental set: it has not run on such a GPU yet. Without it, VA-API encodes H.264 alone, as before. VaapiH265Encoder works as the H.264 one does: synchronous, one reference frame, P-frames only, the driver writing the parameter sets and slice headers. It takes the block sizes and coding tools the driver says it takes (VAConfigAttribEncHEVCBlockSizes and Features), as FFmpeg's VA-API encoder does, and FFmpeg's defaults where the driver says nothing. The frame size is kept to whole coding blocks, so the coded picture needs no cropping. The encode entrypoint is found per profile, since Intel drivers often encode H.265 with the low-power one only. There is no software H.265 to fall back to: a failure is an error, upon which WebRTC switches to the next negotiated codec. The H.264 encoder is left as it is. The property is read like the VP9 one, through a shared reader. A new test sends H.265 from whichever hardware encoder there is to a Java decoder that checks every key frame is a whole access unit, so that an encoder can be tested on a GPU that does not decode H.265. * feat: encode VP9 with VA-API on Linux, when turned on The VA-API encoder factory offers VP9 profile 0 where the driver encodes it (Intel), with the same switch as hardware VP9 encoding on Windows, the system property webrtc.hardware.vp9Encoder: it has not run on such a GPU yet. Without it, or where the driver has no VP9 encoder, libvpx encodes VP9 as before, and takes over from a hardware encoder that fails. VaapiVp9Encoder works as the H.265 one does: synchronous, one reference frame, inter frames only, the driver writing the frame header. Its parameters follow FFmpeg's VA-API VP9 encoder without B-frames: surfaces aligned to 64, key frames only where asked for, every frame refreshing all reference slots and the next one referring to slot 0 as its last frame. The output goes through EncoderOutputProcessor like that of the Windows VP9 encoder. What the H.265 and VP9 encoders share, the configuration, context and surfaces, uploading frames, the parameter buffers, rate control and reading the output, moves into VaapiEncodeSession; the H.264 encoder keeps its own copy. The VP9 hardware test runs on Linux too. * feat: decode VP9 with VA-API on Linux, when turned on The hardware decoder factory decodes VP9 profile 0 with VA-API on the GPUs of Intel and AMD, after NVDEC, where the driver decodes it, but only with the system property webrtc.hardware.vaapiExperimental set: it has not run on such a GPU yet. VA-API leaves parsing to the application. Vp9FrameHeaderParser parses the uncompressed headers per the VP9 specification, keeping the loop filter deltas, segmentation and reference sizes that carry over, and works out the quantizer scales and loop filter levels of each segment with libvpx's quantizer lookup, which WebRTC links. Its output matched FFmpeg's trace_headers on 186 frames of libvpx streams with hidden frames, error resilience, segmentation, tiles, an odd size and lossless. VaapiVp9Decoder decodes synchronously into ten surfaces, eight reference slots and the frame being decoded, splits superframes, and copies frames out as NV12. Profiles other than 0, spatial layers, inter frames that change the size and any failure go to libvpx.
1 parent 25df78d commit 368afbd

24 files changed

Lines changed: 3056 additions & 55 deletions

‎docs/guide/advanced/video-codecs.md‎

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,27 @@ PeerConnectionFactory factory = PeerConnectionFactory.builder()
2727
| Platform | H.264 | H.265 | AV1 |
2828
|---|---|---|---|
2929
| Windows | NVENC on NVIDIA GPUs, otherwise the Media Foundation encoder of the GPU driver (AMD, Intel) | NVENC on NVIDIA GPUs, otherwise Media Foundation on GPUs that encode H.265 | NVENC on NVIDIA RTX 40 and newer, otherwise Media Foundation on GPUs that encode AV1 (e.g. AMD RDNA3 and newer, Intel Arc) |
30-
| Linux | NVENC on NVIDIA GPUs, otherwise the VA-API encoder of the GPU driver (Intel, AMD) | NVENC on NVIDIA GPUs | NVENC on NVIDIA RTX 40 and newer |
30+
| Linux | NVENC on NVIDIA GPUs, otherwise the VA-API encoder of the GPU driver (Intel, AMD) | NVENC on NVIDIA GPUs; VA-API (Intel, AMD) when turned on, see below | NVENC on NVIDIA RTX 40 and newer |
3131
| macOS | VideoToolbox, as with `DefaultVideoEncoderFactory` | VideoToolbox, on Macs with a hardware HEVC encoder, such as all with Apple silicon | Software |
3232

3333
Hardware encoders produce a single layer. A stream that asks for SVC, such as an AV1 stream with a scalability mode like `L1T3`, is encoded in software.
3434

35-
VP9 can be encoded in hardware too, on Windows with the Media Foundation VP9 encoder of the GPU driver, which Intel GPUs have. It is off by default, since it has not been tested on such a GPU yet; turn it on with a system property before the factory is created:
35+
VP9 can be encoded in hardware too, with the VP9 encoder of the GPU driver, which Intel GPUs have: through Media Foundation on Windows and VA-API on Linux. It is off by default, since it has not been tested on such a GPU yet; turn it on with a system property before the factory is created:
3636

3737
```java
3838
System.setProperty("webrtc.hardware.vp9Encoder", "true");
3939
```
4040

4141
Where the GPU has no VP9 encoder, or the stream asks for SVC, VP9 is still encoded with libvpx.
4242

43+
On Linux, H.265 can be encoded with the VA-API encoder of Intel and AMD drivers, also off by default until it has been tested on such GPUs:
44+
45+
```java
46+
System.setProperty("webrtc.hardware.vaapiExperimental", "true");
47+
```
48+
49+
It is offered only where the driver encodes H.265 Main, and only for sending: Intel and AMD GPUs do not decode H.265 here yet, so the other end has to.
50+
4351
NVENC needs an NVIDIA driver of version 522 or newer on Windows, 520 or newer on Linux. VA-API needs libva 2 and a driver that encodes H.264, such as Intel's `intel-media-va-driver` (iHD) or Mesa's `mesa-va-drivers` for AMD, and access to a render node in `/dev/dri`. All of them are loaded at run time, so nothing needs to be installed on machines without them.
4452

4553
The hardware encoders take over H.264 Constrained Baseline and Baseline with packetization mode 1, and AV1 profile 0, formats the software encoders offer too, so encoding these in hardware never changes what is negotiated. H.265 (Main profile) has no software encoder: it is offered after the other codecs, only where the hardware encodes it, so the codec a peer connection prefers stays the same, and a call uses H.265 only if it is preferred (e.g. with `RTCRtpTransceiver.setCodecPreferences()`) and the other end decodes it. On macOS, VideoToolbox is required to encode H.265 in hardware, and never falls back to its software encoder; a Mac without a hardware HEVC encoder does not offer H.265. When a hardware encoder fails to start, for example because the GPU has no encoder sessions left, or fails while encoding, the stream switches to the next encoder in line (e.g. from NVENC to Media Foundation on Windows), and finally to the software encoder, and continues with a key frame. On a machine without a hardware encoder, the factory encodes like `DefaultVideoEncoderFactory`.
@@ -60,7 +68,7 @@ PeerConnectionFactory factory = PeerConnectionFactory.builder()
6068
| Platform | Hardware decoding |
6169
|---|---|
6270
| Windows | H.264, H.265 (Main profile), AV1 and VP9 (profile 0), on GPUs that decode them, through the Media Foundation decoders of Windows on Direct3D 11 (DXVA) |
63-
| Linux | H.264 and VP9 (profile 0) on NVIDIA GPUs, through NVDEC; VA-API, for Intel and AMD GPUs, is not there yet |
71+
| Linux | H.264 and VP9 (profile 0) on NVIDIA GPUs, through NVDEC; VP9 (profile 0) on Intel and AMD GPUs through VA-API, when turned on with `webrtc.hardware.vaapiExperimental` |
6472
| macOS | H.264 through VideoToolbox, as with `DefaultVideoDecoderFactory`; VP9 (profile 0) and H.265 (Main profile) through the decoders of VideoToolbox, on Macs that have them, and AV1 (profile 0) on Apple M3 and newer |
6573

6674
On Linux, NVDEC needs an NVIDIA driver, which provides `libcuda.so.1` and `libnvcuvid.so.1`; both are loaded when the factory is made, so a machine without the driver is not affected. Streams with spatial layers are decoded in software.

‎webrtc-jni/src/main/cpp/include/media/video/codec/HardwareCodecOptions.h‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,18 @@ namespace jni
2424
// tested on one.
2525
constexpr const char * kHardwareVp9EncoderProperty = "webrtc.hardware.vp9Encoder";
2626

27+
// The Java system property that turns on the VA-API codecs beyond H.264
28+
// encoding, which are off by default: they have not been tested on an
29+
// Intel or AMD GPU under Linux yet.
30+
constexpr const char * kExperimentalVaapiProperty = "webrtc.hardware.vaapiExperimental";
31+
2732
// Whether hardware VP9 encoding is turned on: the Java system property
2833
// above is "true", as Boolean.getBoolean has it. Callable from any thread;
2934
// false where Java cannot be asked, for one with an exception pending.
3035
bool IsHardwareVp9EncoderEnabled();
36+
37+
// Whether the experimental VA-API codecs are turned on, the same way.
38+
bool IsExperimentalVaapiEnabled();
3139
}
3240

3341
#endif
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* Copyright 2026 Alex Andres
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_ENCODE_SESSION_H_
18+
#define JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_ENCODE_SESSION_H_
19+
20+
#include "media/video/codec/linux/VaapiLibrary.h"
21+
22+
#include "api/video/video_frame.h"
23+
24+
#include <va/va.h>
25+
26+
#include <cstdint>
27+
#include <string>
28+
#include <vector>
29+
30+
namespace jni
31+
{
32+
// What every VA-API encoder of a single codec needs: a configuration and
33+
// a context with an input surface and two reconstructed ones (the frame
34+
// being encoded and the one it refers to), the output buffer, the
35+
// parameter buffers of a frame, uploading a frame as NV12, encoding it
36+
// and reading what came out. The codec's encoder fills in the parameters.
37+
//
38+
// Used by the H.265 and VP9 encoders; the H.264 one keeps its own, older
39+
// copy of the same.
40+
class VaapiEncodeSession
41+
{
42+
public:
43+
// The name says whose operations failed, in the log.
44+
VaapiEncodeSession(VaapiLibrary & library, std::string name);
45+
~VaapiEncodeSession();
46+
47+
VaapiEncodeSession(const VaapiEncodeSession &) = delete;
48+
VaapiEncodeSession & operator=(const VaapiEncodeSession &) = delete;
49+
50+
// Creates the session for 4:2:0 at constant bitrate, with surfaces
51+
// of the given size, which is that of the frame aligned as the
52+
// codec needs.
53+
bool Create(VAProfile profile, VAEntrypoint entrypoint, uint32_t surfaceWidth, uint32_t surfaceHeight);
54+
void Destroy();
55+
56+
VASurfaceID InputSurface() const;
57+
VASurfaceID Reconstructed(int index) const;
58+
VABufferID CodedBuffer() const;
59+
60+
// Puts the frame into the input surface as NV12, at the given size.
61+
// A frame up to tolerance pixels larger is cropped, which needs no
62+
// copy; one of another size, which raced with a change of size, is
63+
// scaled.
64+
bool Upload(const webrtc::VideoFrame & frame, int width, int height, int tolerance);
65+
66+
bool AddBuffer(VABufferType type, void * data, size_t size);
67+
bool AddMiscParameter(VAEncMiscParameterType type, const void * data, size_t size);
68+
// The rate control, frame rate and HRD parameters, for constant
69+
// bitrate with the given initial quantizer.
70+
bool AddRateControl(uint32_t bitrateBps, uint32_t framerate, uint32_t initialQp);
71+
72+
// Encodes the input surface with the parameter buffers added, and
73+
// waits for it.
74+
bool Encode();
75+
bool ReadOutput(std::vector<uint8_t> & output);
76+
// Drops the parameter buffers of the frame.
77+
void DropBuffers();
78+
79+
bool Check(VAStatus status, const char * operation) const;
80+
81+
private:
82+
VaapiLibrary & library;
83+
const VaapiFunctions & va;
84+
const std::string name;
85+
86+
VAConfigID config;
87+
VAContextID context;
88+
VASurfaceID surfaces[3];
89+
VABufferID codedBuffer;
90+
std::vector<VABufferID> frameBuffers;
91+
};
92+
}
93+
94+
#endif
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
/*
2+
* Copyright 2026 Alex Andres
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_H265_ENCODER_H_
18+
#define JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_H265_ENCODER_H_
19+
20+
#include "media/video/codec/EncoderOutputProcessor.h"
21+
#include "media/video/codec/linux/VaapiEncodeSession.h"
22+
#include "media/video/codec/linux/VaapiLibrary.h"
23+
24+
#include "api/video/video_frame.h"
25+
#include "api/video_codecs/sdp_video_format.h"
26+
#include "api/video_codecs/video_codec.h"
27+
#include "api/video_codecs/video_encoder.h"
28+
29+
#include <va/va.h>
30+
#include <va/va_enc_hevc.h>
31+
32+
#include <cstdint>
33+
#include <string>
34+
#include <vector>
35+
36+
namespace jni
37+
{
38+
// Encodes H.265 Main with the GPU driver's VA-API encoder, as Intel and
39+
// AMD drivers provide it on Linux. Experimental: it has not run on such a
40+
// GPU yet, and is used only where it is turned on.
41+
//
42+
// It works as VaapiH264Encoder does: synchronous, one reference frame,
43+
// P-frames only, the driver writing the parameter sets and slice headers
44+
// from the parameters it is given. The block sizes and coding tools are
45+
// those the driver says it takes, as FFmpeg's VA-API encoder chooses them.
46+
// The frame size is kept to a multiple of the smallest coding block, so
47+
// the coded picture is the frame and needs no cropping. There is no
48+
// software H.265 to fall back to: anything that fails, including a driver
49+
// that writes no parameter sets into key frames, is an error, upon which
50+
// WebRTC switches to the next codec it negotiated.
51+
class VaapiH265Encoder : public webrtc::VideoEncoder
52+
{
53+
public:
54+
VaapiH265Encoder(VaapiLibrary & library, VAEntrypoint entrypoint, const webrtc::SdpVideoFormat & format);
55+
~VaapiH265Encoder() override;
56+
57+
int32_t InitEncode(const webrtc::VideoCodec * codecSettings, const Settings & settings) override;
58+
int32_t RegisterEncodeCompleteCallback(webrtc::EncodedImageCallback * callback) override;
59+
int32_t Release() override;
60+
int32_t Encode(const webrtc::VideoFrame & frame, const std::vector<webrtc::VideoFrameType> * frameTypes) override;
61+
void SetRates(const RateControlParameters & parameters) override;
62+
EncoderInfo GetEncoderInfo() const override;
63+
64+
private:
65+
// What the driver says about the HEVC encoder it has.
66+
void QueryCapabilities();
67+
bool Submit(bool idr);
68+
69+
void FillSequence(VAEncSequenceParameterBufferHEVC & sequence) const;
70+
void FillPicture(VAEncPictureParameterBufferHEVC & picture, bool idr) const;
71+
void FillSlice(VAEncSliceParameterBufferHEVC & slice, bool idr) const;
72+
// The picture the current one refers to.
73+
VAPictureHEVC Reference() const;
74+
75+
private:
76+
VaapiLibrary & library;
77+
const VAEntrypoint entrypoint;
78+
const std::string implementationName;
79+
VaapiEncodeSession session;
80+
81+
// The sizes, in log2 of luma samples, and the tools the driver
82+
// takes.
83+
uint32_t log2CtbSize;
84+
uint32_t log2MinCbSize;
85+
uint32_t log2MinTbSize;
86+
uint32_t log2MaxTbSize;
87+
uint32_t maxTransformDepthInter;
88+
uint32_t maxTransformDepthIntra;
89+
bool amp;
90+
bool sao;
91+
bool signDataHiding;
92+
bool transformSkip;
93+
bool cuQpDelta;
94+
95+
bool initialized;
96+
webrtc::VideoCodec codecSettings;
97+
uint32_t widthInCtbs;
98+
uint32_t heightInCtbs;
99+
uint32_t bitrateBps;
100+
uint32_t framerate;
101+
bool ratesChanged;
102+
103+
// The picture order count since the last IDR picture, and which of
104+
// the reconstructed surfaces holds the current picture.
105+
int32_t pictureOrder;
106+
int current;
107+
bool referenceValid;
108+
109+
webrtc::EncodedImageCallback * callback;
110+
111+
EncoderOutputProcessor outputProcessor;
112+
};
113+
}
114+
115+
#endif

‎webrtc-jni/src/main/cpp/include/media/video/codec/linux/VaapiLibrary.h‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ namespace jni
5656
decltype(&::vaDeriveImage) DeriveImage = nullptr;
5757
decltype(&::vaCreateImage) CreateImage = nullptr;
5858
decltype(&::vaPutImage) PutImage = nullptr;
59+
decltype(&::vaGetImage) GetImage = nullptr;
5960
decltype(&::vaDestroyImage) DestroyImage = nullptr;
6061
};
6162

@@ -77,9 +78,17 @@ namespace jni
7778

7879
VADisplay Display() const;
7980

80-
// The encode entrypoint the driver offers, full or low-power.
81+
// The encode entrypoint the driver offers for H.264, full or
82+
// low-power.
8183
VAEntrypoint Entrypoint() const;
8284

85+
// Whether the driver encodes the profile, 4:2:0 at constant
86+
// bitrate, and with which entrypoint, full or low-power.
87+
bool EncodeEntrypoint(VAProfile profile, VAEntrypoint * entrypoint) const;
88+
89+
// Whether the driver decodes the profile into 4:2:0 surfaces.
90+
bool Decodes(VAProfile profile) const;
91+
8392
// The driver, e.g. "Intel iHD driver for Intel(R) Gen Graphics".
8493
const std::string & Vendor() const;
8594

@@ -90,7 +99,7 @@ namespace jni
9099

91100
bool Load();
92101
bool OpenDisplay();
93-
bool SupportsEncoding(VADisplay display, VAEntrypoint * entrypoint) const;
102+
bool SupportsEncoding(VADisplay display, VAProfile profile, VAEntrypoint * entrypoint) const;
94103

95104
private:
96105
DynamicLibrary va;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2026 Alex Andres
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_VIDEO_DECODER_FACTORY_H_
18+
#define JNI_WEBRTC_MEDIA_VIDEO_CODEC_VAAPI_VIDEO_DECODER_FACTORY_H_
19+
20+
#include "media/video/codec/linux/VaapiLibrary.h"
21+
22+
#include "api/environment/environment.h"
23+
#include "api/video_codecs/sdp_video_format.h"
24+
#include "api/video_codecs/video_decoder.h"
25+
#include "api/video_codecs/video_decoder_factory.h"
26+
27+
#include <memory>
28+
#include <vector>
29+
30+
namespace jni
31+
{
32+
// Creates VA-API decoders on the GPUs of Intel and AMD, for VP9 profile 0
33+
// where the driver decodes it, the format WebRTC's software decoder
34+
// offers too.
35+
class VaapiVideoDecoderFactory : public webrtc::VideoDecoderFactory
36+
{
37+
public:
38+
// Returns a factory, or null if there is no VA-API driver, or one
39+
// that decodes no codec offered here.
40+
static std::unique_ptr<VaapiVideoDecoderFactory> Create();
41+
42+
~VaapiVideoDecoderFactory() override = default;
43+
44+
std::vector<webrtc::SdpVideoFormat> GetSupportedFormats() const override;
45+
std::unique_ptr<webrtc::VideoDecoder> Create(const webrtc::Environment & env,
46+
const webrtc::SdpVideoFormat & format) override;
47+
48+
private:
49+
explicit VaapiVideoDecoderFactory(VaapiLibrary & library);
50+
51+
private:
52+
VaapiLibrary & library;
53+
};
54+
}
55+
56+
#endif

‎webrtc-jni/src/main/cpp/include/media/video/codec/linux/VaapiVideoEncoderFactory.h‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ namespace jni
3232
// Creates VA-API encoders on the GPU whose driver encodes H.264, as Intel
3333
// and AMD drivers do. It offers H.264 in the profiles WebRTC's software
3434
// encoder offers too, and only with packetization mode 1: mode 0 needs
35-
// each NAL unit to fit a packet.
35+
// each NAL unit to fit a packet. With the experimental VA-API codecs
36+
// turned on, it offers H.265 Main as well, and with hardware VP9 encoding
37+
// turned on VP9 profile 0, where the driver encodes them.
3638
class VaapiVideoEncoderFactory : public webrtc::VideoEncoderFactory
3739
{
3840
public:
3941
// Returns a factory, or null if no GPU driver encodes H.264
4042
// through VA-API.
41-
static std::unique_ptr<VaapiVideoEncoderFactory> Create();
43+
static std::unique_ptr<VaapiVideoEncoderFactory> Create(bool experimental, bool vp9Enabled);
4244

4345
~VaapiVideoEncoderFactory() override = default;
4446

@@ -47,10 +49,15 @@ namespace jni
4749
const webrtc::SdpVideoFormat & format) override;
4850

4951
private:
50-
explicit VaapiVideoEncoderFactory(VaapiLibrary & library);
52+
VaapiVideoEncoderFactory(VaapiLibrary & library, bool h265, VAEntrypoint h265Entrypoint, bool vp9,
53+
VAEntrypoint vp9Entrypoint);
5154

5255
private:
5356
VaapiLibrary & library;
57+
const bool h265;
58+
const VAEntrypoint h265Entrypoint;
59+
const bool vp9;
60+
const VAEntrypoint vp9Entrypoint;
5461
};
5562
}
5663

0 commit comments

Comments
 (0)