Agora C++ API Reference for All Platforms
video_codec_provider_i.h
1 //
2 // Agora SDK
3 //
4 // Copyright (c) 2021 Agora.io. All rights reserved.
5 //
6 
7 #pragma once
8 
9 #include "NGIAgoraExtensionProvider.h"
10 #include "AgoraExtensionVersion.h"
11 
12 namespace webrtc {
13 class VideoEncoder;
14 class VideoDecoder;
15 } // namespace webrtc
16 
17 namespace agora {
18 namespace rtc {
19 
20 static const int MAX_ENCODER_NUM_PER_PROVIDER = 5;
21 static const int MAX_DECODER_NUM_PER_PROVIDER = 5;
22 
23 // string literals for codec property keys
24 static const char* const PROP_KEY_CODEC_SDP_FORMAT_JSON = "video_sdp_format_json";
25 
27  const char* codec_name = nullptr;
28  const char* impl_type = nullptr;
29  bool is_hw_accelerated = false;
30 };
31 
33  static const int32_t MAX_JSON_LEN = 1000;
35  int32_t str_len = 0;
36 };
37 
39  public:
41  virtual int enumerateEncoders(VideoCodecInfo* info_list, int& count) = 0;
42  virtual webrtc::VideoEncoder* createEncoder(const VideoCodecInfo& info) = 0;
43  virtual int destroyEncoder(webrtc::VideoEncoder* encoder) = 0;
44  virtual int getCustomProperty(const VideoCodecInfo& info,
45  const char* key, void* data) {
46  return -1;
47  }
48  virtual int setCustomProperty(const VideoCodecInfo& info,
49  const char* key, const void* data) {
50  return -1;
51  }
52 };
53 
55  public:
57  virtual int enumerateDecoders(VideoCodecInfo* info_list, int& count) = 0;
58  virtual webrtc::VideoDecoder* createDecoder(const VideoCodecInfo& info) = 0;
59  virtual int destroyDecoder(webrtc::VideoDecoder* decoder) = 0;
60  virtual int getCustomProperty(const VideoCodecInfo& info,
61  const char* key, void* data) {
62  return -1;
63  }
64  virtual int setCustomProperty(const VideoCodecInfo& info,
65  const char* key, const void* data) {
66  return -1;
67  }
68 };
69 
70 #define RESERVED_ENCODER_PROVIDER_MAJOR_VERSION 10000
71 template <>
74  return ExtensionVersion(RESERVED_ENCODER_PROVIDER_MAJOR_VERSION, 0, 0);
75  }
76 };
77 
78 #define RESERVED_DECODER_PROVIDER_MAJOR_VERSION 20000
79 template <>
82  return ExtensionVersion(RESERVED_DECODER_PROVIDER_MAJOR_VERSION, 0, 0);
83  }
84 };
85 
86 } // namespace rtc
87 } // namespace agora
agora::rtc::VideoSdpFormatJson::str_len
int32_t str_len
Definition: video_codec_provider_i.h:35
agora::rtc::MAX_ENCODER_NUM_PER_PROVIDER
static const int MAX_ENCODER_NUM_PER_PROVIDER
Definition: video_codec_provider_i.h:20
agora::rtc::ExtensionVersion
Definition: AgoraExtensionVersion.h:14
agora::rtc::IVideoDecoderProvider::destroyDecoder
virtual int destroyDecoder(webrtc::VideoDecoder *decoder)=0
agora::rtc::VideoCodecInfo::codec_name
const char * codec_name
Definition: video_codec_provider_i.h:27
webrtc
Definition: common_defines.h:11
agora::rtc::ExtensionInterfaceVersion< IVideoDecoderProvider >::Version
static ExtensionVersion Version()
Definition: video_codec_provider_i.h:81
agora::rtc::VideoSdpFormatJson
Definition: video_codec_provider_i.h:32
agora::rtc::IVideoDecoderProvider::getCustomProperty
virtual int getCustomProperty(const VideoCodecInfo &info, const char *key, void *data)
Definition: video_codec_provider_i.h:60
agora::rtc::VideoSdpFormatJson::json_str
char json_str[MAX_JSON_LEN]
Definition: video_codec_provider_i.h:34
agora::rtc::PROP_KEY_CODEC_SDP_FORMAT_JSON
static const char *const PROP_KEY_CODEC_SDP_FORMAT_JSON
Definition: video_codec_provider_i.h:24
agora::rtc::MAX_DECODER_NUM_PER_PROVIDER
static const int MAX_DECODER_NUM_PER_PROVIDER
Definition: video_codec_provider_i.h:21
agora::rtc::IVideoEncoderProvider::createEncoder
virtual webrtc::VideoEncoder * createEncoder(const VideoCodecInfo &info)=0
agora
Definition: AgoraAtomicOps.h:21
agora::rtc::IVideoEncoderProvider::setCustomProperty
virtual int setCustomProperty(const VideoCodecInfo &info, const char *key, const void *data)
Definition: video_codec_provider_i.h:48
agora::rtc::VideoSdpFormatJson::MAX_JSON_LEN
static const int32_t MAX_JSON_LEN
Definition: video_codec_provider_i.h:33
agora::rtc::VideoCodecInfo::impl_type
const char * impl_type
Definition: video_codec_provider_i.h:28
agora::rtc::VideoCodecInfo
Definition: video_codec_provider_i.h:26
agora::rtc::IVideoEncoderProvider::destroyEncoder
virtual int destroyEncoder(webrtc::VideoEncoder *encoder)=0
agora::rtc::IExtensionProvider
Definition: NGIAgoraExtensionProvider.h:35
agora::rtc::IVideoEncoderProvider::enumerateEncoders
virtual int enumerateEncoders(VideoCodecInfo *info_list, int &count)=0
agora::rtc::IVideoDecoderProvider::createDecoder
virtual webrtc::VideoDecoder * createDecoder(const VideoCodecInfo &info)=0
agora::rtc::IVideoEncoderProvider::~IVideoEncoderProvider
virtual ~IVideoEncoderProvider()
Definition: video_codec_provider_i.h:40
agora::rtc::IVideoDecoderProvider::setCustomProperty
virtual int setCustomProperty(const VideoCodecInfo &info, const char *key, const void *data)
Definition: video_codec_provider_i.h:64
agora::rtc::IVideoDecoderProvider::~IVideoDecoderProvider
virtual ~IVideoDecoderProvider()
Definition: video_codec_provider_i.h:56
agora::rtc::IVideoEncoderProvider::getCustomProperty
virtual int getCustomProperty(const VideoCodecInfo &info, const char *key, void *data)
Definition: video_codec_provider_i.h:44
agora::rtc::IVideoEncoderProvider
Definition: video_codec_provider_i.h:38
agora::rtc::IVideoDecoderProvider
Definition: video_codec_provider_i.h:54
agora::rtc::ExtensionInterfaceVersion< IVideoEncoderProvider >::Version
static ExtensionVersion Version()
Definition: video_codec_provider_i.h:73
agora::rtc::VideoCodecInfo::is_hw_accelerated
bool is_hw_accelerated
Definition: video_codec_provider_i.h:29
agora::rtc::ExtensionInterfaceVersion
Definition: AgoraExtensionVersion.h:65
agora::rtc::IVideoDecoderProvider::enumerateDecoders
virtual int enumerateDecoders(VideoCodecInfo *info_list, int &count)=0
rtc
Definition: video_node_i.h:25