35 #ifndef OPAL_CODEC_OPALPLUGIN_HPP
36 #define OPAL_CODEC_OPALPLUGIN_HPP
51 #ifndef PLUGINCODEC_TRACING
52 #define PLUGINCODEC_TRACING 1
55 #if PLUGINCODEC_TRACING
59 #define PLUGINCODEC_CONTROL_LOG_FUNCTION_DEF \
60 PluginCodec_LogFunction PluginCodec_LogFunctionInstance; \
61 int PluginCodec_SetLogFunction(const PluginCodec_Definition *, void *, const char *, void * parm, unsigned * len) \
63 if (len == NULL || *len != sizeof(PluginCodec_LogFunction)) \
66 PluginCodec_LogFunctionInstance = (PluginCodec_LogFunction)parm; \
67 if (PluginCodec_LogFunctionInstance != NULL) \
68 PluginCodec_LogFunctionInstance(4, __FILE__, __LINE__, "Plugin", "Started logging."); \
73 #define PLUGINCODEC_CONTROL_LOG_FUNCTION_INC { PLUGINCODEC_CONTROL_SET_LOG_FUNCTION, PluginCodec_SetLogFunction },
75 #define PLUGINCODEC_CONTROL_LOG_FUNCTION_DEF
76 #define PLUGINCODEC_CONTROL_LOG_FUNCTION_INC
80 #if PLUGINCODEC_TRACING
82 #define PTRACE_CHECK(level) \
83 (PluginCodec_LogFunctionInstance != NULL && PluginCodec_LogFunctionInstance(level, NULL, 0, NULL, NULL))
84 #define PTRACE(level, section, args) \
85 if (PTRACE_CHECK(level)) { \
86 std::ostringstream ptrace_strm; ptrace_strm << args; \
87 PluginCodec_LogFunctionInstance(level, __FILE__, __LINE__, section, ptrace_strm.str().c_str()); \
90 #define PTRACE_CHECK(level)
91 #define PTRACE(level, section, expr)
100 unsigned char * m_packet;
103 size_t m_payloadSize;
107 : m_packet((unsigned char *)packet)
110 , m_payloadSize(size - m_headerSize)
115 __inline
size_t GetPacketSize()
const {
return m_headerSize+m_payloadSize; }
120 if (m_headerSize+size > m_maxSize)
122 m_payloadSize = (
unsigned int)size;
153 *ptr++ = (
unsigned char)(((
id&0xf) << 4)|(len-1));
160 *ptr++ = (
unsigned char)(
id&0xff);
161 *ptr++ = (
unsigned char)(len&0xff);
170 if ((m_packet[0]&0x10) == 0)
177 id = (0x10000|(ptr[4] >> 4));
178 len = (ptr[4] & 0xf)+1;
182 if ((
id&0xfff0) == 0x1000) {
183 id = 0x20000 | ptr[4];
192 __inline
unsigned char *
GetPayloadPtr()
const {
return m_packet + m_headerSize; }
193 __inline
unsigned char &
operator[](
size_t offset) {
return m_packet[m_headerSize + offset]; }
194 __inline
unsigned const char &
operator[](
size_t offset)
const {
return m_packet[m_headerSize + offset]; }
195 __inline
bool CopyPayload(
const void * data,
size_t size,
size_t offset = 0)
217 return strtoul(str.c_str(), NULL, 10);
226 str += (char)(value%10 +
'0');
242 PluginCodec_OptionMapBase::iterator it = original.find(option);
243 if (it != original.end() && it->second != value)
244 changed[option] = value;
262 bool forceIfZero =
false)
265 if (value > maximum || (forceIfZero && value == 0))
283 return ((width+15)/16) * ((height+15)/16);
290 unsigned & maxFrameSize)
295 unsigned m_macroblocks;
296 } MaxVideoResolutions[] = {
297 #define OPAL_PLUGIN_CLAMPED_RESOLUTION(width, height) { width, height, ((width+15)/16) * ((height+15)/16) }
317 static size_t const LastMaxVideoResolutions =
sizeof(MaxVideoResolutions)/
sizeof(MaxVideoResolutions[0]) - 1;
321 if (maxFrameSize > 0) {
322 static unsigned const MinWidth = 4*16;
323 static unsigned const MinHeight = 3*16;
325 unsigned maxWidth = maxFrameSize*16*16/MinHeight;
326 unsigned maxHeight = maxFrameSize*16*16/MinWidth;
330 if (macroBlocks <= maxFrameSize &&
331 width >= MinWidth && width <= maxWidth &&
332 height >= MinHeight && height <= maxHeight)
335 while (index < LastMaxVideoResolutions &&
336 (MaxVideoResolutions[index].m_macroblocks > maxFrameSize ||
337 MaxVideoResolutions[index].m_width > maxWidth ||
338 MaxVideoResolutions[index].m_height > maxHeight))
342 PTRACE(4,
"Plugin",
"ClampResolution: idx=" << index <<
' '
343 << width <<
'x' << height <<
" > " << maxFrameSize <<
"mb reduced to "
344 << MaxVideoResolutions[index].m_width <<
'x' << MaxVideoResolutions[index].m_height
345 <<
'=' << MaxVideoResolutions[index].m_macroblocks <<
"mb");
346 width = MaxVideoResolutions[index].m_width;
347 height = MaxVideoResolutions[index].m_height;
348 maxFrameSize = MaxVideoResolutions[index].m_macroblocks;
357 unsigned & maxMacroBlocks,
369 ClampMax(maxWidth, original, changed, widthKey);
370 ClampMax(maxHeight, original, changed, heightKey);
371 ClampMax(maxWidth, original, changed, maxWidthKey);
372 ClampMax(maxHeight, original, changed, maxHeightKey);
373 ClampMax(maxWidth, original, changed, minWidthKey);
374 ClampMax(maxHeight, original, changed, minHeightKey);
385 if (options != NULL) {
386 for (
const char *
const * option = *options; *option != NULL; option += 2)
387 insert(value_type(option[0], option[1]));
394 const_iterator it = find(key);
406 char ** options = (
char **)calloc(size()*2+1,
sizeof(
char *));
407 if (options == NULL) {
408 PTRACE(1,
"Plugin",
"Could not allocate new option lists.");
412 char ** opt = options;
413 for (const_iterator it = begin(); it != end(); ++it) {
414 *opt++ = strdup(it->first.c_str());
415 *opt++ = strdup(it->second.c_str());
423 template<
typename NAME>
444 const char * rawFormat,
445 const char * formatName,
446 const char * payloadName,
447 const char * description,
448 unsigned maxBandwidth,
492 if (parmLen == NULL || parm == NULL || *parmLen !=
sizeof(
char ***)) {
493 PTRACE(1,
"Plugin",
"Invalid parameters to AdjustOptions.");
497 OptionMap originalOptions((
const char *
const * *)parm);
499 if (!(this->*adjuster)(originalOptions, changedOptions)) {
500 PTRACE(1,
"Plugin",
"Could not normalise/customise options.");
504 return (*(
char ***)parm = changedOptions.
GetOptions()) != NULL;
539 template<
typename NAME>
556 const char * formatName,
557 const char * payloadName,
558 const char * description,
559 unsigned samplesPerFrame,
560 unsigned bytesPerFrame,
561 unsigned sampleRate = 8000,
563 ) :
Parent(
PLUGINCODEC_RAW_AUDIO, formatName, payloadName, description, bytesPerFrame*8 * samplesPerFrame*1000000/sampleRate, options)
569 ,
m_frameTime(samplesPerFrame * 1000000 / sampleRate)
592 template<
typename NAME>
605 const char * formatName,
606 const char * payloadName,
607 const char * description,
608 unsigned maxBandwidth,
631 template<
typename NAME>
638 ,
m_maxBitRate(defn->bitsPerSec > 0 ? defn->bitsPerSec : 4*1024*1024)
639 ,
m_frameTime((defn->sampleRate/1000*defn->usPerFrame)/1000)
641 PTRACE(3,
"Plugin",
"Codec created: \"" << defn->
descr
670 virtual bool Transcode(
const void * fromPtr,
674 unsigned & flags) = 0;
716 for (
const char *
const * option = options; *option != NULL; option += 2) {
717 if (!this->
SetOption(option[0], option[1])) {
718 PTRACE(1,
"Plugin",
"Could not set option \"" << option[0] <<
"\" to \"" << option[1] <<
'"');
738 virtual bool SetOption(
const char * optionName,
const char * optionValue)
759 template <
typename T>
760 bool SetOptionUnsigned(T & oldValue,
const char * optionValue,
unsigned minimum,
unsigned maximum = UINT_MAX)
762 unsigned newValue = oldValue;
765 oldValue = (T)newValue;
770 bool SetOptionUnsigned(
unsigned & oldValue,
const char * optionValue,
unsigned minimum,
unsigned maximum = UINT_MAX)
773 unsigned newValue = strtoul(optionValue, &end, 10);
777 if (newValue < minimum)
779 else if (newValue > maximum)
782 if (oldValue != newValue) {
791 template <
typename T>
794 bool opt = oldValue != 0;
805 if ( strcasecmp(optionValue,
"0") == 0 ||
806 strcasecmp(optionValue,
"n") == 0 ||
807 strcasecmp(optionValue,
"f") == 0 ||
808 strcasecmp(optionValue,
"no") == 0 ||
809 strcasecmp(optionValue,
"false") == 0)
811 else if (strcasecmp(optionValue,
"1") == 0 ||
812 strcasecmp(optionValue,
"y") == 0 ||
813 strcasecmp(optionValue,
"t") == 0 ||
814 strcasecmp(optionValue,
"yes") == 0 ||
815 strcasecmp(optionValue,
"true") == 0)
820 if (oldValue != newValue) {
829 bool SetOptionBit(
int & oldValue,
unsigned bit,
const char * optionValue)
831 return this->
SetOptionBit((
unsigned &)oldValue, bit, optionValue);
835 bool SetOptionBit(
unsigned & oldValue,
unsigned bit,
const char * optionValue)
838 if (strcmp(optionValue,
"0") == 0)
840 else if (strcmp(optionValue,
"1") == 0)
845 if (((oldValue&bit) != 0) != newValue) {
859 CodecClass * codec =
new CodecClass(defn);
860 if (codec != NULL && codec->Construct())
863 PTRACE(1,
"Plugin",
"Could not open codec, no context being returned.");
877 const void * fromPtr,
881 unsigned int * flags)
883 if (context != NULL && fromPtr != NULL && fromLen != NULL && toPtr != NULL && toLen != NULL && flags != NULL)
884 return ((
PluginCodec *)context)->Transcode(fromPtr, *fromLen, toPtr, *toLen, *flags);
886 PTRACE(1,
"Plugin",
"Invalid parameter to Transcode.");
912 if (context == NULL || parmLen == NULL || parm == NULL || *parmLen !=
sizeof(
char ***)) {
913 PTRACE(1,
"Plugin",
"Invalid parameters to GetActiveOptions.");
921 return (*(
char ***)parm = activeOptions.
GetOptions()) != NULL;
927 if (parm == NULL || len == NULL || *len !=
sizeof(
char ***))
930 char ** strings = (
char **)parm;
931 for (
char **
string = strings; *
string != NULL;
string++)
952 return len != NULL && *len ==
sizeof(
const char **) && parm != NULL &&
953 codec != NULL && codec->
SetOptions((
const char *
const *)parm);
958 return len != NULL && *len ==
sizeof(
const char *) && parm != NULL && defn->
userData != NULL &&
965 return len != NULL && parm != NULL &&
966 codec != NULL && codec->
SetInstanceID((
const char *)parm, *len);
972 return len != NULL && parm != NULL && codec != NULL ? codec->
GetStatistics((
char *)parm, *len) : -1;
978 return codec != NULL && codec->
Terminate();
998 return ControlsTable;
1012 template<
typename NAME>
1042 return ::snprintf(bufferPtr, bufferSize,
"Width=%u\nHeight=%u\n", this->
m_width, this->
m_height);
1048 return OpalDataSizeYUV420P(width, height);
1061 template<
typename NAME>
1087 virtual bool SetOption(
const char * optionName,
const char * optionValue)
1132 template<
typename NAME>
1148 virtual bool SetOption(
const char * optionName,
const char * optionValue)
1169 if (width == 0 || height == 0)
1201 for (
unsigned y = 0; y <
m_height; ++y) {
1209 virtual unsigned OutputImage(
unsigned char * planes[3],
int raster[3],
1210 unsigned width,
unsigned height,
PluginCodec_RTP & rtp,
unsigned & flags)
1215 width = (width+1)&~1;
1216 height = (height+1)&~1;
1217 size_t ySize = width*height;
1218 size_t uvSize = ySize/4;
1219 if (planes[1] == planes[0]+ySize && planes[2] == planes[1]+uvSize)
1224 { width/2, height/2, raster[1], planes[1], planeInfo[0].
m_destination + ySize },
1225 { width/2, height/2, raster[2], planes[2], planeInfo[1].
m_destination + uvSize }
1228 for (
unsigned plane = 0; plane < 3; ++plane)
1229 planeInfo[plane].Copy();
1240 #define PLUGINCODEC_KNOWN_CODEC_CXX(MediaType, \
1246 PLUGINCODEC_CODEC_PAIR(Name, \
1259 EncoderClass::Create_s<EncoderClass>, \
1260 EncoderClass::Destroy_s, \
1261 EncoderClass::Transcode_s, \
1262 DecoderClass::Create_s<DecoderClass>, \
1263 DecoderClass::Destroy_s, \
1264 DecoderClass::Transcode_s, \
1265 DecoderClass::GetControls(), \
1266 PluginCodec_MediaTypeKnown, \
1267 PLUGINCODEC_RAW_##MediaType, \
1271 #define PLUGINCODEC_AUDIO_CODEC_CXX(MediaFormat, \
1275 PLUGINCODEC_CODEC_PAIR(MediaFormat.GetFormatName(), \
1276 MediaFormat.GetPayloadName(), \
1277 MediaFormat.GetDescription(), \
1278 MediaFormat.GetSampleRate(), \
1279 MediaFormat.GetMaxBandwidth(), \
1280 MediaFormat.GetFrameTime(), \
1281 MediaFormat.GetSamplesPerFrame(), \
1282 MediaFormat.GetBytesPerFrame(), \
1283 MediaFormat.GetRecommendedFramesPerPacket(), \
1284 MediaFormat.GetMaxFramesPerPacket(), \
1285 MediaFormat.GetPayloadType(), \
1286 MediaFormat.GetH323CapabilityType(), \
1287 MediaFormat.GetH323CapabilityData(), \
1288 EncoderClass::Create_s<EncoderClass>, \
1289 EncoderClass::Destroy_s, \
1290 EncoderClass::Transcode_s, \
1291 DecoderClass::Create_s<DecoderClass>, \
1292 DecoderClass::Destroy_s, \
1293 DecoderClass::Transcode_s, \
1294 DecoderClass::GetControls(), \
1295 MediaFormat.GetFlags(), \
1296 MediaFormat.GetRawFormat(), \
1300 #define PLUGINCODEC_VIDEO_CODEC_CXX(MediaFormat, \
1304 PLUGINCODEC_CODEC_PAIR(MediaFormat.GetFormatName(), \
1305 MediaFormat.GetPayloadName(), \
1306 MediaFormat.GetDescription(), \
1307 PLUGINCODEC_VIDEO_CLOCK, \
1308 MediaFormat.GetMaxBandwidth(), \
1309 1000000/PLUGINCODEC_MAX_FRAME_RATE, \
1310 MediaFormat.GetMaxWidth(), \
1311 MediaFormat.GetMaxHeight(), \
1312 0,PLUGINCODEC_MAX_FRAME_RATE, \
1313 MediaFormat.GetPayloadType(), \
1314 MediaFormat.GetH323CapabilityType(), \
1315 MediaFormat.GetH323CapabilityData(), \
1316 EncoderClass::Create_s<EncoderClass>, \
1317 EncoderClass::Destroy_s, \
1318 EncoderClass::Transcode_s, \
1319 DecoderClass::Create_s<DecoderClass>, \
1320 DecoderClass::Destroy_s, \
1321 DecoderClass::Transcode_s, \
1322 DecoderClass::GetControls(), \
1323 MediaFormat.GetFlags(), \
1324 MediaFormat.GetRawFormat(), \
1328 #define PLUGIN_CODEC_IMPLEMENT_CXX(NAME, table) \
1330 PLUGIN_CODEC_IMPLEMENT(NAME) \
1331 PLUGIN_CODEC_DLL_API struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) { \
1332 if (version < PLUGIN_CODEC_VERSION_OPTIONS) return NULL; \
1333 *count = sizeof(table)/sizeof(struct PluginCodec_Definition); \
1334 PluginCodec_MediaFormat<NAME>::AdjustAllForVersion(version, table, *count); \
1340 #endif // OPAL_CODEC_OPALPLUGIN_HPP
Definition: opalplugin.hpp:1133
virtual size_t GetRawFrameSize(unsigned width, unsigned height)
Definition: opalplugin.hpp:1046
virtual size_t GetOutputDataSize()
Get the required output buffer size to be passed into Transcode.
Definition: opalplugin.hpp:1161
void Copy()
Definition: opalplugin.hpp:1199
bool SetOptionBit(int &oldValue, unsigned bit, const char *optionValue)
Definition: opalplugin.hpp:829
#define PLUGINCODEC_CONTROL_SET_INSTANCE_ID
Definition: opalplugin.h:226
Definition: opalplugin.hpp:380
static void Unsigned2String(unsigned value, std::string &str)
Definition: opalplugin.hpp:230
#define PLUGINCODEC_CONTROL_GET_STATISTICS
Definition: opalplugin.h:228
#define PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT
Definition: opalplugin.h:326
virtual bool SetOptions(const char *const *options)
Set all the options for the codec.
Definition: opalplugin.hpp:711
#define PLUGINCODEC_MEDIA_PACKETIZATIONS
Definition: opalplugin.h:881
__inline size_t GetPacketSize() const
Definition: opalplugin.hpp:115
Definition: opalplugin.h:339
static int GetStatistics_s(const PluginCodec_Definition *, void *context, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:969
unsigned char * m_source
Definition: opalplugin.hpp:1196
__inline unsigned char * GetPayloadPtr() const
Definition: opalplugin.hpp:192
unsigned m_maxHeight
Definition: opalplugin.hpp:1019
Definition: opalplugin.hpp:1026
bool SetOptionBoolean(bool &oldValue, const char *optionValue)
Definition: opalplugin.hpp:802
virtual bool Transcode(const void *fromPtr, unsigned &fromLen, void *toPtr, unsigned &toLen, unsigned &flags)=0
Convert from one media format to another.
unsigned GetUnsigned(const char *key, unsigned dflt=0) const
Definition: opalplugin.hpp:392
Definition: opalplugin.h:289
virtual bool Construct()
Complete construction of the plug in codec.
Definition: opalplugin.hpp:653
PluginVideoCodec(const PluginCodec_Definition *defn)
Definition: opalplugin.hpp:1030
__inline PluginCodec_Video_FrameHeader * GetVideoHeader() const
Definition: opalplugin.hpp:203
virtual bool CanOutputImage(unsigned width, unsigned height, PluginCodec_RTP &rtp, unsigned &flags)
Definition: opalplugin.hpp:1167
const char * sourceFormat
Definition: opalplugin.h:353
bool m_optionsSame
Definition: opalplugin.hpp:1004
#define PLUGINCODEC_RAW_VIDEO
Definition: opalplugin.h:405
virtual int GetStatistics(char *bufferPtr, unsigned bufferSize)
Gather any statistics as a string into the provide buffer.
Definition: opalplugin.hpp:1040
Definition: opalplugin.hpp:1062
__inline void SetMarker(bool mark)
Definition: opalplugin.hpp:129
#define PLUGINCODEC_OPTION_MAX_TX_PACKET_SIZE
Definition: opalplugin.h:315
#define PLUGINCODEC_OPTION_MAX_BIT_RATE
Definition: opalplugin.h:316
unsigned m_keyFramePeriod
Definition: opalplugin.hpp:1069
#define PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE
Definition: opalplugin.h:221
__inline unsigned GetHeight() const
Definition: opalplugin.hpp:1055
static void Destroy_s(const PluginCodec_Definition *, void *context)
Definition: opalplugin.hpp:869
#define OPAL_PLUGIN_CLAMPED_RESOLUTION(width, height)
__inline size_t GetPayloadSize() const
Definition: opalplugin.hpp:117
virtual unsigned OutputImage(unsigned char *planes[3], int raster[3], unsigned width, unsigned height, PluginCodec_RTP &rtp, unsigned &flags)
Definition: opalplugin.hpp:1209
#define PluginCodec_RTP_SetSequenceNumber(ptr, sn)
Definition: opalplugin.h:935
#define PluginCodec_RTP_GetTimestamp(ptr)
Definition: opalplugin.h:932
Definition: opalplugin.h:152
__inline size_t GetMaxSize() const
Definition: opalplugin.hpp:114
#define PluginCodec_RTP_SetSSRC(ptr, ssrc)
Definition: opalplugin.h:937
__inline bool SetPayloadSize(size_t size)
Definition: opalplugin.hpp:118
#define PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL
Definition: opalplugin.h:218
#define PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH
Definition: opalplugin.h:325
#define PluginCodec_RTP_MinHeaderSize
Definition: opalplugin.h:905
PluginCodec_MediaFormat< NAME > MediaFormat
Definition: opalplugin.hpp:896
Definition: opalplugin.hpp:1025
#define PluginCodec_RTP_GetSequenceNumber(ptr)
Definition: opalplugin.h:934
unsigned m_height
Definition: opalplugin.hpp:1021
unsigned m_maxRTPSize
Definition: opalplugin.hpp:1067
__inline unsigned GetWidth() const
Definition: opalplugin.hpp:1054
#define PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF
Definition: opalplugin.h:327
__inline unsigned GetSSRC() const
Definition: opalplugin.hpp:134
static int ToNormalised_s(const PluginCodec_Definition *defn, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:898
bool SetOptionUnsigned(T &oldValue, const char *optionValue, unsigned minimum, unsigned maximum=UINT_MAX)
Definition: opalplugin.hpp:760
Definition: opalplugin.hpp:632
#define PLUGIN_CODEC_VERSION_INTERSECT
Definition: opalplugin.h:87
static void Change(const char *value, PluginCodec_OptionMapBase &original, PluginCodec_OptionMapBase &changed, const char *option)
Definition: opalplugin.hpp:237
Definition: opalplugin.h:146
#define PluginCodec_RTP_MaxPacketSize
Definition: opalplugin.h:904
Definition: opalplugin.hpp:1191
__inline unsigned char & operator[](size_t offset)
Definition: opalplugin.hpp:193
static int GetOptions_s(const struct PluginCodec_Definition *codec, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:938
static struct PluginCodec_ControlDefn * GetControls()
Definition: opalplugin.hpp:981
Definition: opalplugin.h:153
#define PLUGINCODEC_OPTION_TX_KEY_FRAME_PERIOD
Definition: opalplugin.h:328
static int GetActiveOptions_s(const PluginCodec_Definition *, void *context, const char *, void *parm, unsigned *parmLen)
Definition: opalplugin.hpp:910
__inline unsigned GetSequenceNumber() const
Definition: opalplugin.hpp:132
int(* PluginCodec_LogFunction)(unsigned level, const char *file, unsigned line, const char *section, const char *log)
Definition: opalplugin.h:237
__inline unsigned GetMaxHeight() const
Definition: opalplugin.hpp:1053
unsigned m_maxWidth
Definition: opalplugin.hpp:1018
#define PluginCodec_RTP_SetTimestamp(ptr, ts)
Definition: opalplugin.h:933
virtual bool OnChangedOptions()
Callback for if any options are changed.
Definition: opalplugin.hpp:731
#define PluginCodec_RTP_GetHeaderLength(ptr)
Definition: opalplugin.h:926
static int SetInstanceID_s(const PluginCodec_Definition *, void *context, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:962
virtual bool SetOption(const char *optionName, const char *optionValue)
Set an individual option of the given name.
Definition: opalplugin.hpp:738
unsigned m_maxBitRate
Definition: opalplugin.hpp:1005
virtual bool SetOption(const char *optionName, const char *optionValue)
Set an individual option of the given name.
Definition: opalplugin.hpp:1148
unsigned m_height
Definition: opalplugin.hpp:1194
#define PLUGINCODEC_OPTION_FRAME_WIDTH
Definition: opalplugin.h:321
static void AppendUnsigned2String(unsigned value, std::string &str)
Definition: opalplugin.hpp:221
PluginCodec_LogFunction PluginCodec_LogFunctionInstance
PluginCodec(const PluginCodec_Definition *defn)
Definition: opalplugin.hpp:635
bool SetOptionBit(unsigned &oldValue, unsigned bit, const char *optionValue)
Definition: opalplugin.hpp:835
static unsigned GetMacroBlocks(unsigned width, unsigned height)
Definition: opalplugin.hpp:281
Definition: opalplugin.h:207
#define PLUGINCODEC_CONTROL_GET_ACTIVE_OPTIONS
Definition: opalplugin.h:223
__inline size_t GetHeaderSize() const
Definition: opalplugin.hpp:116
static int GetOutputDataSize_s(const PluginCodec_Definition *, void *context, const char *, void *, unsigned *)
Definition: opalplugin.hpp:891
static bool ClampResolution(PluginCodec_OptionMapBase &original, PluginCodec_OptionMapBase &changed, unsigned maxWidth, unsigned maxHeight, unsigned &maxMacroBlocks, const char *widthKey=PLUGINCODEC_OPTION_FRAME_WIDTH, const char *heightKey=PLUGINCODEC_OPTION_FRAME_HEIGHT, const char *maxWidthKey=PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH, const char *maxHeightKey=PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT, const char *minWidthKey=PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH, const char *minHeightKey=PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT)
Definition: opalplugin.hpp:352
static void Change(unsigned value, PluginCodec_OptionMapBase &original, PluginCodec_OptionMapBase &changed, const char *option)
Definition: opalplugin.hpp:248
__inline void SetSequenceNumber(unsigned sn)
Definition: opalplugin.hpp:133
static int SetOptions_s(const PluginCodec_Definition *, void *context, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:949
static void * Create_s(const PluginCodec_Definition *defn)
Definition: opalplugin.hpp:857
unsigned m_width
Definition: opalplugin.hpp:1020
#define PTRACE(level, section, args)
Definition: opalplugin.hpp:84
char ** GetOptions() const
Definition: opalplugin.hpp:404
#define PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS
Definition: opalplugin.h:224
Definition: opalplugin.h:244
static int Transcode_s(const PluginCodec_Definition *, void *context, const void *fromPtr, unsigned *fromLen, void *toPtr, unsigned *toLen, unsigned int *flags)
Definition: opalplugin.hpp:875
virtual bool SetOption(const char *optionName, const char *optionValue)
Set an individual option of the given name.
Definition: opalplugin.hpp:1087
#define PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS
Definition: opalplugin.h:222
int m_raster
Definition: opalplugin.hpp:1195
__inline unsigned char * GetVideoFrameData() const
Definition: opalplugin.hpp:204
const PluginCodec_Definition * m_definition
Definition: opalplugin.hpp:1002
#define PluginCodec_RTP_SetPayloadType(ptr, type)
Definition: opalplugin.h:929
virtual int GetStatistics(char *, unsigned)
Gather any statistics as a string into the provide buffer.
Definition: opalplugin.hpp:678
Definition: opalplugin.hpp:98
__inline bool GetMarker() const
Definition: opalplugin.hpp:128
Definition: opalplugin.h:160
Definition: opalplugin.h:210
#define PLUGINCODEC_CONTROL_LOG_FUNCTION_INC
Definition: opalplugin.hpp:73
virtual bool SetInstanceID(const char *, unsigned)
Definition: opalplugin.hpp:697
static int Terminate_s(const PluginCodec_Definition *, void *context, const char *, void *, unsigned *)
Definition: opalplugin.hpp:975
static bool Terminate()
Definition: opalplugin.hpp:663
Definition: opalplugin.h:157
__inline unsigned const char & operator[](size_t offset) const
Definition: opalplugin.hpp:194
const void * userData
Definition: opalplugin.h:356
void SetUnsigned(unsigned value, const char *key)
Definition: opalplugin.hpp:398
static void ClampMax(unsigned maximum, PluginCodec_OptionMapBase &original, PluginCodec_OptionMapBase &changed, const char *option, bool forceIfZero=false)
Definition: opalplugin.hpp:258
#define PLUGINCODEC_OPTION_FRAME_HEIGHT
Definition: opalplugin.h:322
#define PLUGINCODEC_OPTION_FRAME_TIME
Definition: opalplugin.h:313
#define PluginCodec_RTP_GetWORD(ptr, off)
Definition: opalplugin.h:908
Definition: opalplugin.h:145
Definition: opalplugin.hpp:1013
virtual bool GetActiveOptions(PluginCodec_OptionMap &)
Get options that are "active" and may be different from the last SetOptions() call.
Definition: opalplugin.hpp:704
__inline unsigned GetTimestamp() const
Definition: opalplugin.hpp:130
__inline unsigned GetMaxWidth() const
Definition: opalplugin.hpp:1052
#define PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS
Definition: opalplugin.h:225
__inline void SetSSRC(unsigned ssrc)
Definition: opalplugin.hpp:135
unsigned m_frameTime
Definition: opalplugin.hpp:1006
virtual size_t GetOutputDataSize()
Get the required output buffer size to be passed into Transcode.
Definition: opalplugin.hpp:685
#define PluginCodec_RTP_SetWORD(ptr, off, val)
Definition: opalplugin.h:915
size_t m_outputSize
Definition: opalplugin.hpp:1138
static void ClampMin(unsigned minimum, PluginCodec_OptionMapBase &original, PluginCodec_OptionMapBase &changed, const char *option)
Definition: opalplugin.hpp:270
__inline unsigned char * SetExtended(unsigned id, unsigned len)
Definition: opalplugin.hpp:137
virtual size_t GetPacketSpace(const PluginCodec_RTP &rtp, size_t total)
Definition: opalplugin.hpp:1117
#define PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS
Definition: opalplugin.h:220
unsigned char * m_destination
Definition: opalplugin.hpp:1197
virtual size_t GetOutputDataSize()
Get the required output buffer size to be passed into Transcode.
Definition: opalplugin.hpp:1081
static unsigned String2Unsigned(const std::string &str)
Definition: opalplugin.hpp:215
#define PLUGINCODEC_OPTION_TARGET_BIT_RATE
Definition: opalplugin.h:317
bool SetOptionBoolean(T &oldValue, const char *optionValue)
Definition: opalplugin.hpp:792
Definition: opalplugin.hpp:212
unsigned m_tsto
Definition: opalplugin.hpp:1068
PluginVideoEncoder(const PluginCodec_Definition *defn)
Definition: opalplugin.hpp:1072
std::map< std::string, std::string > PluginCodec_OptionMapBase
Definition: opalplugin.hpp:210
const char * descr
Definition: opalplugin.h:351
bool SetOptionUnsigned(unsigned &oldValue, const char *optionValue, unsigned minimum, unsigned maximum=UINT_MAX)
Definition: opalplugin.hpp:770
#define PluginCodec_RTP_GetSSRC(ptr)
Definition: opalplugin.h:936
#define PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT
Definition: opalplugin.h:324
Definition: opalplugin.h:817
#define PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS
Definition: opalplugin.h:219
Definition: opalplugin.h:156
#define PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH
Definition: opalplugin.h:323
static int ToCustomised_s(const PluginCodec_Definition *defn, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:904
virtual bool GetActiveOptions(PluginCodec_OptionMap &options)
Get options that are "active" and may be different from the last SetOptions() call.
Definition: opalplugin.hpp:1110
int PluginCodec_SetLogFunction(const PluginCodec_Definition *, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.h:161
#define PLUGINCODEC_CONTROL_TERMINATE_CODEC
Definition: opalplugin.h:229
unsigned m_width
Definition: opalplugin.hpp:1193
__inline bool CopyPayload(const void *data, size_t size, size_t offset=0)
Definition: opalplugin.hpp:195
static int FreeOptions_s(const PluginCodec_Definition *, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:925
#define PluginCodec_RTP_GetPayloadType(ptr)
Definition: opalplugin.h:928
virtual ~PluginCodec()
Definition: opalplugin.hpp:647
#define PluginCodec_SetChannels(n)
Definition: opalplugin.h:197
#define PluginCodec_RTP_SetMarker(ptr, mark)
Definition: opalplugin.h:931
static int ValidForProtocol_s(const PluginCodec_Definition *defn, void *, const char *, void *parm, unsigned *len)
Definition: opalplugin.hpp:956
__inline unsigned char * GetExtendedHeader(unsigned &id, size_t &len) const
Definition: opalplugin.hpp:168
#define PluginCodec_RTP_GetCSRCHdrLength(ptr)
Definition: opalplugin.h:923
const char * destFormat
Definition: opalplugin.h:354
static bool ClampResolution(unsigned &width, unsigned &height, unsigned &maxFrameSize)
Definition: opalplugin.hpp:287
PluginCodec_OptionMap(const char *const **options=NULL)
Definition: opalplugin.hpp:383
__inline unsigned GetPayloadType() const
Definition: opalplugin.hpp:126
__inline void SetPayloadType(unsigned type)
Definition: opalplugin.hpp:127
__inline void SetTimestamp(unsigned ts)
Definition: opalplugin.hpp:131
#define PLUGINCODEC_RAW_AUDIO
Definition: opalplugin.h:404
PluginCodec_RTP(const void *packet, unsigned size)
Definition: opalplugin.hpp:106
PluginVideoDecoder(const PluginCodec_Definition *defn)
Definition: opalplugin.hpp:1141
#define PluginCodec_RTP_GetMarker(ptr)
Definition: opalplugin.h:930