CoreSDK  v1.0.0.b1304
r5codec.h
1 /*
2  * Copyright (c) 2022-2023 Infrared5, Inc.
3  * License information: https://account.red5.net/assets/LICENSE.txt
4  *
5  */
6 
7 #pragma once
8 
9 #include "r5common.h"
10 #include "r5codec_sample.h"
11 
12 namespace r5::common {
17 enum class CodecType : int {
18  Undefined = 0,
19  H264,
20  Aac,
21  Opus,
22  Unknown
23 };
28 enum class CodecDirection {
29  Undefined = -1,
30  Encoder = 0,
31  Decoder = 1
32 };
37 enum class CodecState {
38  Error = -100,
39  Undefined = -1,
40  Ready
41 };
46 enum class RateControl {
47  Cbr,
48  Vbr
49 };
54 enum class CodecImplType {
55  Software,
56  Hardware
57 };
62 typedef struct EncoderSettings
63 {
64  EncoderSettings &operator=(EncoderSettings other)
65  {
66  memcpy(this, &other, sizeof(EncoderSettings));
67  return *this;
68  }
69  // Common encoder settings
70  int bitRate = 1500 * 1000;
71 
72  // Video encoder settings
73  int gopLength = 10;
74  int maxQP = -1;
75  int minQP = -1;
76  RateControl rateControl = RateControl::Cbr;
82 class Codec
83 {
84 public:
92  virtual int InitEncoder(MediaTransform &desc, const EncoderSettings &set) = 0;
99  virtual int InitDecoder(MediaTransform &desc) = 0;
108  virtual int32_t AddData(std::unique_ptr<uint8_t[]> inputBuffer, uint32_t inputBufferSize, uint32_t inputTimestamp) = 0;
117  virtual int32_t GetData(std::unique_ptr<uint8_t[]> &outputBuffer, uint32_t &outputBufferSize, uint32_t &outputTimestamp) = 0;
123  const CodecState GetCurrentState() const { return mState; }
129  const MediaTransform &GetMediaTransform() const { return mDesc; }
135  const std::string Name() const { return mName; }
141  const std::string FullName() const { return mFullName; }
147  virtual DataType GetDataType() const = 0;
153  const CodecType Type() const { return mType; }
159  const CodecDirection Direction() const { return mDirection; }
166  bool isHardware() const { return mCodecImplType == CodecImplType::Hardware; }
167 
168 protected:
169  MediaTransform mDesc;
170  CodecState mState = CodecState::Undefined;
171  ILoggerPtr mLogger;
172  std::string mName;
173  std::string mFullName;
174  CodecType mType = CodecType::Undefined;
175  CodecDirection mDirection = CodecDirection::Undefined;
176  CodecImplType mCodecImplType = CodecImplType::Software;
177 };
182 typedef std::shared_ptr<Codec> CodecPtr;
183 }
Common interface to use in-built codecs.
Definition: r5codec.h:82
Set of encoder settings.
Definition: r5codec.h:62
const std::string Name() const
Get short name of codec.
Definition: r5codec.h:135
const CodecState GetCurrentState() const
Get the Current State of codec.
Definition: r5codec.h:123
Description of media data transformation This structure can specify input, output or both media descr...
Definition: r5data.h:253
const CodecType Type() const
Get codec type.
Definition: r5codec.h:153
const CodecDirection Direction() const
Get coding direction.
Definition: r5codec.h:159
const MediaTransform & GetMediaTransform() const
Get the Media Transform used for codec initialization.
Definition: r5codec.h:129
bool isHardware() const
Show if codec has hardware acceleration.
Definition: r5codec.h:166
Definition: r5codec.h:12
const std::string FullName() const
Get full name of codec.
Definition: r5codec.h:141