1 /*
2  *  Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef API_VIDEO_CODECS_VIDEO_ENCODER_FACTORY_TEMPLATE_OPEN_H264_ADAPTER_H_
12 #define API_VIDEO_CODECS_VIDEO_ENCODER_FACTORY_TEMPLATE_OPEN_H264_ADAPTER_H_
13 
14 #include <memory>
15 #include <vector>
16 
17 #include "modules/video_coding/codecs/h264/include/h264.h"
18 
19 namespace webrtc {
20 // TODO(bugs.webrtc.org/13573): When OpenH264 is no longer a conditional build
21 //                              target remove #ifdefs.
22 struct OpenH264EncoderTemplateAdapter {
SupportedFormatsOpenH264EncoderTemplateAdapter23   static std::vector<SdpVideoFormat> SupportedFormats() {
24 #if defined(WEBRTC_USE_H264)
25     return SupportedH264Codecs(/*add_scalability_modes=*/true);
26 #else
27     return {};
28 #endif
29   }
30 
CreateEncoderOpenH264EncoderTemplateAdapter31   static std::unique_ptr<VideoEncoder> CreateEncoder(
32       const SdpVideoFormat& format) {
33 #if defined(WEBRTC_USE_H264)
34     return H264Encoder::Create(cricket::VideoCodec(format));
35 #else
36     return nullptr;
37 #endif
38   }
39 
IsScalabilityModeSupportedOpenH264EncoderTemplateAdapter40   static bool IsScalabilityModeSupported(ScalabilityMode scalability_mode) {
41 #if defined(WEBRTC_USE_H264)
42     return H264Encoder::SupportsScalabilityMode(scalability_mode);
43 #else
44     return false;
45 #endif
46   }
47 };
48 }  // namespace webrtc
49 
50 #endif  // API_VIDEO_CODECS_VIDEO_ENCODER_FACTORY_TEMPLATE_OPEN_H264_ADAPTER_H_
51