OPAL  Version 3.18.8
opalplugin.h
Go to the documentation of this file.
1 /*
2  * opalplugins.h
3  *
4  * OPAL codec plugins handler
5  *
6  * Open Phone Abstraction Library (OPAL)
7  * Formally known as the Open H323 project.
8  *
9  * Copyright (C) 2004-2011 Post Increment
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  *
15  * - Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17 
18  * - Redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution.
21  *
22  * - Neither the name of the Xiph.org Foundation nor the names of its
23  * contributors may be used to endorse or promote products derived from
24  * this software without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
30  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #ifndef OPAL_CODEC_OPALPLUGIN_H
40 #define OPAL_CODEC_OPALPLUGIN_H
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 #ifndef _CRT_NONSTDC_NO_DEPRECATE
47 #define _CRT_NONSTDC_NO_DEPRECATE 1
48 #endif
49 
50 #ifndef _CRT_SECURE_NO_WARNINGS
51 #define _CRT_SECURE_NO_WARNINGS 1
52 #endif
53 
54 #include <time.h>
55 
56 #ifdef _MSC_VER
57 #pragma warning(disable:4201)
58 #endif
59 
60 #ifdef _MSC_VER
61 # ifdef PLUGIN_CODEC_DLL_EXPORTS
62 # define PLUGIN_CODEC_DLL_API __declspec(dllexport)
63 # else
64 # define PLUGIN_CODEC_DLL_API __declspec(dllimport)
65 # endif
66 
67 #if !defined(strcasecmp)
68 #define strcasecmp stricmp
69 #endif
70 
71 #else
72 
73 #define PLUGIN_CODEC_DLL_API
74 
75 #endif
76 
77 #ifdef PWLIB_PLUGIN_API_VERSION
78 #undef PWLIB_PLUGIN_API_VERSION
79 #endif
80 #define PWLIB_PLUGIN_API_VERSION 1
81 
82 #define PLUGIN_CODEC_VERSION_FIRST 1 // initial version
83 #define PLUGIN_CODEC_VERSION_WIDEBAND 2 // added wideband
84 #define PLUGIN_CODEC_VERSION_VIDEO 3 // added video
85 #define PLUGIN_CODEC_VERSION_FAX 4 // added fax
86 #define PLUGIN_CODEC_VERSION_OPTIONS 5 // added options handling
87 #define PLUGIN_CODEC_VERSION_INTERSECT 6 // added media option intersection merge functionality
88 #define PLUGIN_CODEC_VERSION_H245_DEF_GEN_PARAM 7 // added suppression of H.245 generic parameters via default
89 
90 #define PLUGIN_CODEC_VERSION PLUGIN_CODEC_VERSION_H245_DEF_GEN_PARAM // Always latest version
91 
92 #define PLUGIN_CODEC_API_VER_FN PWLibPlugin_GetAPIVersion
93 #define PLUGIN_CODEC_API_VER_FN_STR "PWLibPlugin_GetAPIVersion"
94 
95 #define PLUGIN_CODEC_GET_CODEC_FN OpalCodecPlugin_GetCodecs
96 #define PLUGIN_CODEC_GET_CODEC_FN_STR "OpalCodecPlugin_GetCodecs"
97 
98 #define PLUGIN_CODEC_API_VER_FN_DECLARE \
99 PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \
100 { return PWLIB_PLUGIN_API_VERSION; }
101 
102 enum {
104  PluginCodec_Licence_None = PluginCodec_License_None, // allow for old code with misspelled constant
111 
113 
114  // any license codes above here require royalty payments
116 };
117 
119  // start of version 1 fields
121 
122  const char * sourceAuthor; // source code author
123  const char * sourceVersion; // source code version
124  const char * sourceEmail; // source code email contact information
125  const char * sourceURL; // source code web site
126  const char * sourceCopyright; // source code copyright
127  const char * sourceLicense; // source code license
128  unsigned char sourceLicenseCode; // source code license
129 
130  const char * codecDescription; // codec description
131  const char * codecAuthor; // codec author
132  const char * codecVersion; // codec version
133  const char * codecEmail; // codec email contact information
134  const char * codecURL; // codec web site
135  const char * codecCopyright; // codec copyright information
136  const char * codecLicense; // codec license
137  unsigned short codecLicenseCode; // codec license code
138  // end of version 1 fields
139 
140  const char * timestamp; // String form of timestamp for plug in, generally as provided by __TIMESTAMP__
141 };
142 
149  PluginCodec_MediaTypeKnown = 0x000f, // Indicates use OPAL known media format
150 
152  PluginCodec_InputTypeRaw = 0x0000, // Note video is always RTP
154 
156  PluginCodec_OutputTypeRaw = 0x0000, // Note video is always RTP
158 
159  PluginCodec_RTPTypeMask = 0x0040, // Payload type number
162 
166 
170 
174 
177 
178  PluginCodec_ComfortNoiseMask = 0x0800, // PluginCodec_MediaTypeAudio only
180 
181  PluginCodec_ErrorConcealmentMask = 0x0800, // PluginCodec_MediaTypeVideo only
183 
184  PluginCodec_EmptyPayloadMask = 0x1000, // PluginCodec_MediaTypeAudio/PluginCodec_MediaTypeVideo only
186 
187  PluginCodec_OtherPayloadMask = 0x2000, // PluginCodec_MediaTypeAudio only
189 
190  PluginCodec_BitsPerSamplePos = 12, // PluginCodec_MediaTypeAudioStreamed only
192 
195 };
196 
197 #define PluginCodec_SetChannels(n) (((n-1)<<PluginCodec_ChannelsPos)&PluginCodec_ChannelsMask)
198 
199 
201  PluginCodec_CoderSilenceFrame = 1, // request audio codec to create silence frame
202  PluginCodec_CoderForceIFrame = 2, // request video codec to force I frame
203  PluginCodec_CoderPacketLoss = 4 // indicate to video codec packets were lost
204 };
205 
207  PluginCodec_ReturnCoderLastFrame = 1, // indicates when video codec returns last data for frame
208  PluginCodec_ReturnCoderIFrame = 2, // indicates when video returns I frame
209  PluginCodec_ReturnCoderRequestIFrame = 4, // indicates when video decoder request I frame for resync
210  PluginCodec_ReturnCoderBufferTooSmall = 8 // indicates when output buffer is not large enough to receive
211  // the data, another call to get_output_data_size is required
212 };
213 
215 
216 // Control function names
217 
218 #define PLUGINCODEC_CONTROL_VALID_FOR_PROTOCOL "valid_for_protocol"
219 #define PLUGINCODEC_CONTROL_GET_CODEC_OPTIONS "get_codec_options"
220 #define PLUGINCODEC_CONTROL_FREE_CODEC_OPTIONS "free_codec_options"
221 #define PLUGINCODEC_CONTROL_GET_OUTPUT_DATA_SIZE "get_output_data_size"
222 #define PLUGINCODEC_CONTROL_SET_CODEC_OPTIONS "set_codec_options"
223 #define PLUGINCODEC_CONTROL_GET_ACTIVE_OPTIONS "get_active_options"
224 #define PLUGINCODEC_CONTROL_TO_NORMALISED_OPTIONS "to_normalised_options"
225 #define PLUGINCODEC_CONTROL_TO_CUSTOMISED_OPTIONS "to_customised_options"
226 #define PLUGINCODEC_CONTROL_SET_INSTANCE_ID "set_instance_id"
227 #define PLUGINCODEC_CONTROL_SET_LOG_FUNCTION "set_log_function"
228 #define PLUGINCODEC_CONTROL_GET_STATISTICS "get_statistics"
229 #define PLUGINCODEC_CONTROL_TERMINATE_CODEC "terminate_codec"
230 
231 
232 /* Log function, plug in gets a pointer to this function which allows
233  it to use the standard OPAL logging system. The function returns 0 if
234  no logging was performed due to the log level. Note if log == NULL
235  then this return state is all that happens, so this may be executed
236  first to prevent lengthy logs that would not result in any output. */
237 typedef int (*PluginCodec_LogFunction)(unsigned level,
238  const char * file,
239  unsigned line,
240  const char * section,
241  const char * log);
242 
243 
245  const char * name;
246  int (*control)(const struct PluginCodec_Definition * codec, void * context,
247  const char * name, void * parm, unsigned * parmLen);
248 
249 };
250 
259 };
260 
270 
273 };
274 
275 #define PluginCodec_H245_Collapsing 0x40000000
276 #define PluginCodec_H245_NonCollapsing 0x20000000
277 #define PluginCodec_H245_Unsigned32 0x10000000
278 #define PluginCodec_H245_BooleanArray 0x08000000
279 #define PluginCodec_H245_TCS 0x04000000
280 #define PluginCodec_H245_OLC 0x02000000
281 #define PluginCodec_H245_ReqMode 0x01000000
282 #define PluginCodec_H245_OrdinalMask 0x0000ffff
283 #define PluginCodec_H245_PositionMask 0x00ff0000
284 #define PluginCodec_H245_PositionShift 16
285 
286 typedef int (*PluginCodec_MergeFunction)(char ** result, const char * dest, const char * src);
287 typedef void (*PluginCodec_FreeFunction)(char * string);
288 
290  // start of version 4 fields
292  const char * m_name;
293  unsigned m_readOnly;
295  const char * m_value;
296  const char * m_FMTPName;
297  const char * m_FMTPDefault;
299  const char * m_minimum;
300  const char * m_maximum;
301  PluginCodec_MergeFunction m_mergeFunction; // Used if m_merge==PluginCodec_CustomMerge
303  const char * m_H245Default;
304 };
305 
306 
307 // Normalised option names
308 #define PLUGINCODEC_OPTION_NEEDS_JITTER "Needs Jitter"
309 #define PLUGINCODEC_OPTION_CLOCK_RATE "Clock Rate"
310 #define PLUGINCODEC_OPTION_CHANNELS "Channels"
311 #define PLUGINCODEC_OPTION_RTP_CLOCK_RATE "RTP Clock Rate"
312 #define PLUGINCODEC_OPTION_RTP_CHANNELS "RTP Channels"
313 #define PLUGINCODEC_OPTION_FRAME_TIME "Frame Time"
314 #define PLUGINCODEC_OPTION_MAX_FRAME_SIZE "Max Frame Size"
315 #define PLUGINCODEC_OPTION_MAX_TX_PACKET_SIZE "Max Tx Packet Size" /* Really max PAYLOAD size */
316 #define PLUGINCODEC_OPTION_MAX_BIT_RATE "Max Bit Rate"
317 #define PLUGINCODEC_OPTION_TARGET_BIT_RATE "Target Bit Rate"
318 #define PLUGINCODEC_OPTION_RATE_CONTROL_PERIOD "Rate Control Period"
319 #define PLUGINCODEC_OPTION_RX_FRAMES_PER_PACKET "Rx Frames Per Packet"
320 #define PLUGINCODEC_OPTION_TX_FRAMES_PER_PACKET "Tx Frames Per Packet"
321 #define PLUGINCODEC_OPTION_FRAME_WIDTH "Frame Width"
322 #define PLUGINCODEC_OPTION_FRAME_HEIGHT "Frame Height"
323 #define PLUGINCODEC_OPTION_MIN_RX_FRAME_WIDTH "Min Rx Frame Width"
324 #define PLUGINCODEC_OPTION_MIN_RX_FRAME_HEIGHT "Min Rx Frame Height"
325 #define PLUGINCODEC_OPTION_MAX_RX_FRAME_WIDTH "Max Rx Frame Width"
326 #define PLUGINCODEC_OPTION_MAX_RX_FRAME_HEIGHT "Max Rx Frame Height"
327 #define PLUGINCODEC_OPTION_TEMPORAL_SPATIAL_TRADE_OFF "Temporal Spatial Trade Off"
328 #define PLUGINCODEC_OPTION_TX_KEY_FRAME_PERIOD "Tx Key Frame Period"
329 #define PLUGINCODEC_OPTION_VOICE_ACTIVITY_DETECT "VAD"
330 #define PLUGINCODEC_OPTION_DYNAMIC_PACKET_LOSS "Dynamic Packet Loss"
331 
332 #define PLUGINCODEC_OPTION_PROTOCOL "Protocol"
333 #define PLUGINCODEC_OPTION_PROTOCOL_H323 "H.323"
334 #define PLUGINCODEC_OPTION_PROTOCOL_SIP "SIP"
335 
336 
337 // Full definition of the codec
338 
340  unsigned int version; // codec structure version
341 
342  // start of version 1 fields
343  const struct PluginCodec_information * info; // license information
344 
345  unsigned int flags; // b0-3: 0 = audio, 1 = video
346  // b4: 0 = raw input, 1 = RTP input
347  // b5: 0 = raw output, 1 = RTP output
348  // b6: 0 = dynamic RTP, 1 = explicit RTP
349  // b7: 0 = no share RTP, 1 = share RTP
350 
351  const char * descr; // text decription
352 
353  const char * sourceFormat; // source format
354  const char * destFormat; // destination format
355 
356  const void * userData; // user data value
357 
358  unsigned int sampleRate; // samples per second
359  unsigned int bitsPerSec; // raw bits per second
360  unsigned int usPerFrame; // microseconds per frame
361 
362  union _parm {
363  struct _audio {
364  unsigned int samplesPerFrame; // audio: samples per frame
365  unsigned int bytesPerFrame; // audio: max bytes per frame
366  unsigned int recommendedFramesPerPacket; // audio: recommended number of frames per packet
367  unsigned int maxFramesPerPacket; // audio: maximum number of frames per packet
368  } audio;
369  struct _video {
370  unsigned int maxFrameWidth; // video: frame width
371  unsigned int maxFrameHeight; // video: frame height
372  unsigned int recommendedFrameRate; // video: recommended frame rate
373  unsigned int maxFrameRate; // video: max frame rate
374  } video;
375  } parm;
376 
377  unsigned char rtpPayload; // IANA RTP payload code (if defined)
378  const char * sdpFormat; // SDP format string (or NULL, if no SDP format)
379 
380  void * (*createCodec)(const struct PluginCodec_Definition * codec); // create codec
381  void (*destroyCodec) (const struct PluginCodec_Definition * codec, void * context); // destroy codec
382  int (*codecFunction) (const struct PluginCodec_Definition * codec, void * context, // do codec function
383  const void * from, unsigned * fromLen,
384  void * to, unsigned * toLen,
385  unsigned int * flag);
387 
388  // H323 specific fields
389  unsigned char h323CapabilityType;
390  const void * h323CapabilityData;
391 
392  // end of version 1 fields
393 
394  // NOTE!!!!! Due to an error in judgement, you cannot add ANY more fields
395  // to this structure without an API version change!!!!
396 };
397 
398 typedef const struct PluginCodec_Definition * (* PluginCodec_GetCodecFunction)(unsigned int *, unsigned int);
399 typedef unsigned (* PluginCodec_GetAPIVersionFunction)();
400 
401 
403 
404 #define PLUGINCODEC_RAW_AUDIO "L16"
405 #define PLUGINCODEC_RAW_VIDEO "YUV420P"
406 #define PLUGINCODEC_VIDEO_CLOCK 90000
407 #define PLUGINCODEC_MAX_FRAME_RATE 30
408 
409 #define PLUGINCODEC_CIF_WIDTH 352
410 #define PLUGINCODEC_CIF_HEIGHT 288
411 
412 #define PLUGINCODEC_CIF4_WIDTH (PLUGINCODEC_CIF_WIDTH*2)
413 #define PLUGINCODEC_CIF4_HEIGHT (PLUGINCODEC_CIF_HEIGHT*2)
414 
415 #define PLUGINCODEC_CIF16_WIDTH (PLUGINCODEC_CIF_WIDTH*4)
416 #define PLUGINCODEC_CIF16_HEIGHT (PLUGINCODEC_CIF_HEIGHT*4)
417 
418 #define PLUGINCODEC_QCIF_WIDTH (PLUGINCODEC_CIF_WIDTH/2)
419 #define PLUGINCODEC_QCIF_HEIGHT (PLUGINCODEC_CIF_HEIGHT/2)
420 
421 #define PLUGINCODEC_QCIF4_WIDTH (PLUGINCODEC_CIF4_WIDTH/2)
422 #define PLUGINCODEC_QCIF4_HEIGHT (PLUGINCODEC_CIF4_HEIGHT/2)
423 
424 #define PLUGINCODEC_SQCIF_WIDTH 128
425 #define PLUGINCODEC_SQCIF_HEIGHT 96
426 
427 #ifdef __cplusplus
428 };
429 
430 inline size_t OpalDataSizeYUV420P(unsigned width, unsigned height)
431 {
432  return ((width+1)&~1) * ((height+1)&~1) * 3 / 2;
433 }
434 
435 extern "C" {
436 #endif
437 
438 
439 #ifndef __TIMESTAMP__
440 #define __TIMESTAMP__ "0"
441 #endif
442 
443 #define PLUGINCODEC_LICENSE(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15) \
444  static struct PluginCodec_information MyLicenseInfo = { 0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,__TIMESTAMP__ }
445 
446 
448 #define PLUGINCODEC_CODEC_PAIR(MediaFormat, \
449  PayloadName, \
450  Description, \
451  SampleRate, \
452  BitsPerSecond, \
453  FrameTime, \
454  p1,p2,p3,p4, \
455  PayloadType, \
456  H323type, \
457  H323data, \
458  CreateEncoder, \
459  DestroyEncoder, \
460  EncodeMedia, \
461  CreateDecoder, \
462  DestroyDecoder, \
463  DecodeMedia, \
464  ControlsTable, \
465  Flags, \
466  RawFormat, \
467  UserData \
468  ) \
469  { \
470  PLUGIN_CODEC_VERSION, &MyLicenseInfo, Flags, Description, RawFormat, MediaFormat, UserData, \
471  SampleRate, BitsPerSecond, FrameTime, {{ p1,p2,p3,p4 }}, PayloadType, PayloadName, \
472  CreateEncoder, DestroyEncoder, EncodeMedia, ControlsTable, H323type, H323data \
473  }, \
474  { \
475  PLUGIN_CODEC_VERSION, &MyLicenseInfo, Flags, Description, MediaFormat, RawFormat, UserData, \
476  SampleRate, BitsPerSecond, FrameTime, {{ p1,p2,p3,p4 }}, PayloadType, PayloadName, \
477  CreateDecoder, DestroyDecoder, DecodeMedia, ControlsTable, H323type, H323data \
478  }
479 
480 #define PLUGINCODEC_AUDIO_CODEC(MediaFormat, \
481  PayloadName, \
482  Description, \
483  SampleRate, \
484  BitsPerSecond, \
485  SamplesPerFrame, \
486  RecFramesPerPacket, \
487  MaxFramesPerPacket, \
488  RtpFlags, \
489  PayloadType, \
490  H323type, \
491  H323data, \
492  CreateEncoder, \
493  DestroyEncoder, \
494  EncodeAudio, \
495  CreateDecoder, \
496  DestroyDecoder, \
497  DecodeAudio, \
498  ControlsTable \
499  ) \
500  PLUGINCODEC_CODEC_PAIR(MediaFormat, \
501  PayloadName, \
502  Description, \
503  SampleRate, \
504  BitsPerSecond, \
505  (SamplesPerFrame)*1000000/(SampleRate), \
506  SamplesPerFrame, \
507  (BitsPerSecond)*(SampleRate)/(SamplesPerFrame)/8, \
508  RecFramesPerPacket, \
509  MaxFramesPerPacket, \
510  PayloadType, \
511  H323type, \
512  H323data, \
513  CreateEncoder, \
514  DestroyEncoder, \
515  EncodeAudio, \
516  CreateDecoder, \
517  DestroyDecoder, \
518  DecodeAudio, \
519  ControlsTable, \
520  PluginCodec_MediaTypeAudio | /* audio codec */ \
521  PluginCodec_InputTypeRaw | /* raw input data */ \
522  PluginCodec_OutputTypeRaw | /* raw output data */ \
523  (RtpFlags), \
524  PLUGINCODEC_RAW_AUDIO, \
525  NULL)
526 
527 #define PLUGINCODEC_ONE_AUDIO_CODEC(MediaFormat, \
528  PayloadName, \
529  Description, \
530  SampleRate, \
531  BitsPerSecond, \
532  SamplesPerFrame, \
533  RecFramesPerPacket, \
534  MaxFramesPerPacket, \
535  RtpFlags, \
536  PayloadType, \
537  H323type, \
538  H323data \
539  ) \
540  static struct PluginCodec_Definition CodecDefinitionTable[] = { \
541  PLUGINCODEC_AUDIO_CODEC(MediaFormat, \
542  PayloadName, \
543  Description, \
544  SampleRate, \
545  BitsPerSecond, \
546  SamplesPerFrame, \
547  RecFramesPerPacket, \
548  MaxFramesPerPacket, \
549  RtpFlags, \
550  PayloadType, \
551  H323type, \
552  H323data, \
553  MyCreateEncoder, \
554  MyDestroyEncoder, \
555  MyEncodeAudio, \
556  MyCreateDecoder, \
557  MyDestroyDecoder, \
558  MyDecodeAudio, \
559  MyControlsTable \
560  ) \
561  }
562 
563 #define PLUGINCODEC_VIDEO_CODEC(MediaFormat, \
564  PayloadName, \
565  Description, \
566  BitsPerSecond, \
567  MaxWidth, \
568  MaxHeight, \
569  RtpFlags, \
570  PayloadType, \
571  H323type, \
572  H323data, \
573  CreateEncoder, \
574  DestroyEncoder, \
575  EncodeVideo, \
576  CreateDecoder, \
577  DestroyDecoder, \
578  DecodeVideo, \
579  ControlsTable \
580  ) \
581  PLUGINCODEC_CODEC_PAIR(MediaFormat, \
582  PayloadName, \
583  Description, \
584  SampleRate, \
585  BitsPerSecond, \
586  1000000/PLUGINCODEC_MAX_FRAME_RATE, \
587  MaxWidth, \
588  MaxHeight, \
589  0,PLUGINCODEC_MAX_FRAME_RATE, \
590  PayloadType, \
591  H323type, \
592  H323data, \
593  CreateEncoder, \
594  DestroyEncoder, \
595  EncodeVideo, \
596  CreateDecoder, \
597  DestroyDecoder, \
598  DecodeVideo, \
599  ControlsTable, \
600  PluginCodec_MediaTypeVideo | /* video codec */ \
601  PluginCodec_InputTypeRTP | /* RTP input data */ \
602  PluginCodec_OutputTypeRTP | /* RTP output data */ \
603  (RtpFlags), \
604  PLUGINCODEC_RAW_VIDEO, \
605  NULL)
606 
607 #define PLUGINCODEC_ONE_VIDEO_CODEC(MediaFormat, \
608  PayloadName, \
609  Description, \
610  BitsPerSecond, \
611  MaxWidth, \
612  MaxHeight, \
613  RtpFlags, \
614  PayloadType, \
615  H323type, \
616  H323data \
617  ) \
618  static struct PluginCodec_Definition CodecDefinitionTable[] = { \
619  PLUGINCODEC_VIDEO_CODEC(MediaFormat, \
620  PayloadName, \
621  Description, \
622  BitsPerSecond, \
623  MaxWidth, \
624  MaxHeight, \
625  RtpFlags, \
626  PayloadType, \
627  H323type, \
628  H323data, \
629  CreateEncoder, \
630  DestroyEncoder, \
631  EncodeAudio, \
632  CreateDecoder, \
633  DestroyDecoder, \
634  DecodeAudio, \
635  ControlsTable \
636  ) \
637  }
638 
639 
641 //
642 // H.323 specific values
643 //
644 
645 
647  unsigned int index;
648  void * data;
649  unsigned dataLength;
650 };
651 
653  const char * objectId;
654  unsigned char t35CountryCode;
655  unsigned char t35Extension;
656  unsigned short manufacturerCode;
657  const unsigned char * data;
658  unsigned int dataLength;
660 };
661 
662 
664 {
665  /* The following used to be a simple integer for the collapsing flag in
666  version 3 and earlier. We hope that all those implementations just used
667  zero and one (a good bet) and thus the below bit fields will be backward
668  compatible, putting the parameter in all three PDU types.
669  */
670 #ifndef SOLARIS
671  struct {
672 #endif
673  int collapsing:1; /* boolean */
674  int excludeTCS:1;
675  int excludeOLC:1;
676  int excludeReqMode:1;
677  int readOnly:1;
678 #ifndef SOLARIS
679  };
680 #endif
682  unsigned int id;
683 
685  /* these need to be in the same order as the choices in
686  H245_ParameterValue::Choices, as the value is just cast to that type
687  */
696 
705  } type;
707  union {
708  unsigned long integer;
709  const char * octetstring;
711  } value;
712 };
713 
715 {
716  // some cunning structures & lists, and associated logic in
717  // H323CodecPluginGenericAudioCapability::H323CodecPluginGenericAudioCapability()
718  const char * standardIdentifier;
719  unsigned int maxBitRate; // Zero means use value from OpalMediaFormat
721  /* parameters; these are the parameters which are set in the
722  'TerminalCapabilitySet' and 'OpenLogicalChannel' requests */
723  unsigned int nParameters;
724  /* an array of nParameters parameter definitions */
726 };
728 
731  int scrambled:1;
732 };
735  unsigned char maxAl_sduAudioFrames;
737  int highRateMode0:6; // INTEGER (27..78), -- units octets
738  int highRateMode1:6; // INTEGER (27..78), -- units octets
739  int lowRateMode0:6; // INTEGER (23..66), -- units octets
740  int lowRateMode1:6; // INTEGER (23..66), -- units octets
741  int sidMode0:4; // INTEGER (6..17), -- units octets
742  int sidMode1:4; // INTEGER (6..17), -- units octets
743 };
744 
745 
746 enum {
747  PluginCodec_H323Codec_undefined, // must be zero, so empty struct is undefined
748  PluginCodec_H323Codec_programmed, // H323ProgrammedCapability
749  PluginCodec_H323Codec_nonStandard, // H323NonStandardData
750  PluginCodec_H323Codec_generic, // H323GenericCodecData
752  // audio codecs
760  PluginCodec_H323AudioCodec_g7231, // H323AudioG7231Data
764  PluginCodec_H323AudioCodec_is11172, // not yet implemented
765  PluginCodec_H323AudioCodec_is13818Audio, // not yet implemented
768  PluginCodec_H323AudioCodec_g7231AnnexC, // H323AudioG7231AnnexC
774  // video codecs
775  PluginCodec_H323VideoCodec_h261, // implemented
776  PluginCodec_H323VideoCodec_h262, // not yet implemented
777  PluginCodec_H323VideoCodec_h263, // implemented
778  PluginCodec_H323VideoCodec_is11172, // not yet implemented
780  // other capabilities
781  PluginCodec_H323VideoCodec_Extended, // implemented (for use with H.239)
782  PluginCodec_H323T38Codec, // not yet implemented
783 
784  // special codes
785  PluginCodec_H323Codec_NoH323 = 0xff, // used for SIP-only codecs
786 };
789 //
790 // Generic Codec Standard Identifiers
791 //
793 // Audio Capabilities
794 // AMR (as defined in H.245v13 Annex I)
795 #define OpalPluginCodec_Identifer_AMR "0.0.8.245.1.1.1"
796 #define PLUGINCODEC_OPTION_OCTET_ALIGNED "Octet Aligned"
799 // AMR-NB\WB (as defined in H.245v13 Annex R)
800 #define OpalPluginCodec_Identifer_AMR_NB "0.0.8.245.1.1.9"
801 #define OpalPluginCodec_Identifer_AMR_WB "0.0.8.245.1.1.10"
803 // G.722.1
804 #define OpalPluginCodec_Identifer_G7221 "0.0.7.7221.1.0"
805 #define OpalPluginCodec_Identifer_G7221ext "0.0.7.7221.1.1.0"
806 
807 // G.722.2 (aka AMR-WB)
808 #define OpalPluginCodec_Identifer_G7222 "0.0.7.7222.1.0"
810 // iLBC (as defined in H.245v13 Annex S)
811 #define OpalPluginCodec_Identifer_iLBC "0.0.8.245.1.1.11"
812 
814 // Video Capabilities
815 
816 #define PLUGINCODEC_OPTION_PROFILE "Profile"
817 #define PLUGINCODEC_OPTION_SIMPLE_PROFILE "Simple"
818 #define PLUGINCODEC_OPTION_LEVEL "Level"
819 
820 // H264 (as defined in H.241)
821 #define OpalPluginCodec_Identifer_H264_Aligned "0.0.8.241.0.0.0.0"
822 #define OpalPluginCodec_Identifer_H264_NonInterleaved "0.0.8.241.0.0.0.1"
823 #define OpalPluginCodec_Identifer_H264_Interleaved "0.0.8.241.0.0.0.2"
824 #define OpalPluginCodec_Identifer_H264_Generic "0.0.8.241.0.0.1"
825 #define PLUGINCODEC_OPTION_MAX_NALU_SIZE "Max NALU Size"
826 #define PLUGINCODEC_OPTION_H264_PACKET_MODE "Packetization Mode"
828 // ISO/IEC 14496-2 MPEG4 part 2 (as defined in H.245v13 Annex E)
829 #define OpalPluginCodec_Identifer_MPEG4 "0.0.8.245.1.0.0"
830 #define PLUGINCODEC_OPTION_MPEG4_ADV_SIMPLE_PROFILE "Advanced Simple"
831 #define PLUGINCODEC_OPTION_MPEG4_DECODER_CONFIG "DCI"
835 //
836 // Predefined options for H.323 codecs
837 //
838 
839 #define PLUGINCODEC_SQCIF_MPI "SQCIF MPI"
840 #define PLUGINCODEC_QCIF_MPI "QCIF MPI"
841 #define PLUGINCODEC_CIF_MPI "CIF MPI"
842 #define PLUGINCODEC_CIF4_MPI "CIF4 MPI"
843 #define PLUGINCODEC_CIF16_MPI "CIF16 MPI"
844 #define PLUGINCODEC_CUSTOM_MPI "Custom MPI"
845 
846 #define PLUGINCODEC_MPI_DISABLED 33
847 
848 #define PLUGINCODEC_MEDIA_PACKETIZATION "Media Packetization"
849 #define PLUGINCODEC_MEDIA_PACKETIZATIONS "Media Packetizations"
851 #define H261_ANNEX_D "Annex D - Still Image Transmit"
852 #define H263_ANNEX_D "Annex D - Unrestricted Motion Vector"
853 #define H263_ANNEX_F "Annex F - Advanced Prediction"
854 #define H263_ANNEX_I "Annex I - Advanced INTRA Coding"
855 #define H263_ANNEX_J "Annex J - Deblocking Filter"
856 #define H263_ANNEX_K "Annex K - Slice Structure"
857 #define H263_ANNEX_N "Annex N - Reference Picture Selection"
858 #define H263_ANNEX_S "Annex S - Alternative INTER VLC"
859 #define H263_ANNEX_T "Annex T - Modified Quantization"
860 
861 #ifndef STRINGIZE
862 #define __INTERNAL_STRINGIZE__(v) #v
863 #define STRINGIZE(v) __INTERNAL_STRINGIZE__(v)
864 #endif
865 
866 
868 //
869 // RTP specific definitions
870 //
872 #define PluginCodec_RTP_MaxPacketSize (1518-14-4-8-20-16) // Max Ethernet packet (1518 bytes) minus 802.3/CRC, 802.3, IP, UDP headers
873 #define PluginCodec_RTP_MinHeaderSize (12)
874 #define PluginCodec_RTP_MaxPayloadSize (PluginCodec_RTP_MaxPacketSize - PluginCodec_RTP_MinHeaderSize)
876 #define PluginCodec_RTP_GetWORD(ptr, off) ((((unsigned char*)(ptr))[off] << 8) | ((unsigned char*)(ptr))[off+1])
877 
878 #define PluginCodec_RTP_GetDWORD(ptr, off) ((((unsigned char*)(ptr))[off ] << 24)|\
879  (((unsigned char*)(ptr))[off+1] << 16)|\
880  (((unsigned char*)(ptr))[off+2] << 8 )|\
881  ((unsigned char*)(ptr))[off+3])
882 
883 #define PluginCodec_RTP_SetWORD(ptr, off, val) ((((unsigned char*)(ptr))[off ] = (unsigned char)((val) >> 8 )),\
884  (((unsigned char*)(ptr))[off+1] = (unsigned char) (val) ))
886 #define PluginCodec_RTP_SetDWORD(ptr, off, val) ((((unsigned char*)(ptr))[off ] = (unsigned char)((val) >> 24)),\
887  (((unsigned char*)(ptr))[off+1] = (unsigned char)((val) >> 16)),\
888  (((unsigned char*)(ptr))[off+2] = (unsigned char)((val) >> 8 )),\
889  (((unsigned char*)(ptr))[off+3] = (unsigned char) (val) ))
891 #define PluginCodec_RTP_GetCSRCHdrLength(ptr) ((((unsigned char*)(ptr))[0] & 0x0f)*4 + PluginCodec_RTP_MinHeaderSize)
892 #define PluginCodec_RTP_GetExtHdrLength(ptr) ((((unsigned char*)(ptr))[0] & 0x10) ? (PluginCodec_RTP_GetWORD(ptr, PluginCodec_RTP_GetCSRCHdrLength(ptr)+2)*4+4) : 0)
893 
894 #define PluginCodec_RTP_GetHeaderLength(ptr) (PluginCodec_RTP_GetCSRCHdrLength(ptr) + PluginCodec_RTP_GetExtHdrLength(ptr))
895 #define PluginCodec_RTP_GetPayloadPtr(ptr) ((unsigned char*)(ptr) + PluginCodec_RTP_GetHeaderLength(ptr))
896 #define PluginCodec_RTP_GetPayloadType(ptr) (((unsigned char*)(ptr))[1] & 0x7f)
897 #define PluginCodec_RTP_SetPayloadType(ptr, type) (((unsigned char*)(ptr))[1] = (unsigned char)((((unsigned char*)(ptr))[1] & 0x80) | (type & 0x7f)))
898 #define PluginCodec_RTP_GetMarker(ptr) ((((unsigned char*)(ptr))[1] & 0x80) != 0)
899 #define PluginCodec_RTP_SetMarker(ptr, mark) (((unsigned char*)(ptr))[1] = (unsigned char)((((unsigned char*)(ptr))[1] & 0x7f) | (mark != 0 ? 0x80 : 0)))
900 #define PluginCodec_RTP_GetTimestamp(ptr) PluginCodec_RTP_GetDWORD(ptr, 4)
901 #define PluginCodec_RTP_SetTimestamp(ptr, ts) PluginCodec_RTP_SetDWORD(ptr, 4, ts)
902 #define PluginCodec_RTP_GetSequenceNumber(ptr) PluginCodec_RTP_GetWORD(ptr, 2)
903 #define PluginCodec_RTP_SetSequenceNumber(ptr, sn) PluginCodec_RTP_SetWORD(ptr, 2, sn)
904 #define PluginCodec_RTP_GetSSRC(ptr) PluginCodec_RTP_GetDWORD(ptr, 8)
905 #define PluginCodec_RTP_SetSSRC(ptr, ssrc) PluginCodec_RTP_SetDWORD(ptr, 8, ssrc)
907 
910 //
911 // video specific definitions
912 //
913 
915  unsigned int x;
916  unsigned int y;
917  unsigned int width;
918  unsigned int height;
919 };
920 
921 #ifdef __cplusplus
922 };
924 inline size_t OpalVideoFrameSizeForResolution(unsigned width, unsigned height)
925 {
926  return sizeof(PluginCodec_Video_FrameHeader) + OpalDataSizeYUV420P(width, height);
927 }
929 inline size_t OpalVideoFrameDataLen(const PluginCodec_Video_FrameHeader * base)
930 {
931  return OpalVideoFrameSizeForResolution(base->width - base->x, base->height - base->y);
932 }
934 inline unsigned char * OpalVideoFrameDataPtr(const PluginCodec_Video_FrameHeader * base)
935 {
936  return (((unsigned char *)base) + sizeof(PluginCodec_Video_FrameHeader));
937 }
938 
939 // For backward compatibility
940 inline unsigned char * OPAL_VIDEO_FRAME_DATA_PTR(const PluginCodec_Video_FrameHeader * base)
941 { return OpalVideoFrameDataPtr(base); }
942 
943 extern "C" {
944 #endif
945 
948 //
949 // experimental definitions for statically linking codecs
950 //
951 
952 #ifdef OPAL_STATIC_CODEC
953 
954 # undef PLUGIN_CODEC_DLL_API
955 # define PLUGIN_CODEC_DLL_API static
956 # define PLUGIN_CODEC_IMPLEMENT(name) \
957 unsigned int Opal_StaticCodec_##name##_GetAPIVersion() \
958 { return PWLIB_PLUGIN_API_VERSION; } \
959 static const struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned /*version*/); \
960 struct const PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned * p1, unsigned p2) \
961 { return PLUGIN_CODEC_GET_CODEC_FN(p1,p2); } \
962 
963 # define PLUGIN_CODEC_IMPLEMENT_ALL(name, table, ver) \
964 unsigned int Opal_StaticCodec_##name##_GetAPIVersion() \
965 { return PWLIB_PLUGIN_API_VERSION; } \
966 PLUGIN_CODEC_DLL_API const struct PluginCodec_Definition * Opal_StaticCodec_##name##_GetCodecs(unsigned * count, unsigned version) \
967 { *count = sizeof(table)/sizeof(struct PluginCodec_Definition); return version < ver ? NULL : table; }
968 
969 
970 #else
971 
972 # define PLUGIN_CODEC_IMPLEMENT(name) \
973 PLUGIN_CODEC_DLL_API unsigned int PLUGIN_CODEC_API_VER_FN() \
974 { return PWLIB_PLUGIN_API_VERSION; } \
975 
976 # define PLUGIN_CODEC_IMPLEMENT_ALL(name, table, ver) \
977 PLUGIN_CODEC_IMPLEMENT(name) \
978 PLUGIN_CODEC_DLL_API const struct PluginCodec_Definition * PLUGIN_CODEC_GET_CODEC_FN(unsigned * count, unsigned version) \
979 { *count = sizeof(table)/sizeof(struct PluginCodec_Definition); return version < ver ? NULL : table; }
980 
981 
982 #endif
983 
984 #ifdef __cplusplus
985 };
986 #endif
987 
988 
989 #ifdef _MSC_VER
990 #pragma warning(default:4201)
991 #endif
992 
993 #endif // OPAL_CODEC_OPALPLUGIN_H
Definition: opalplugin.h:810
Definition: opalplugin.h:182
Definition: opalplugin.h:159
const char * sourceAuthor
Definition: opalplugin.h:122
Definition: opalplugin.h:339
Definition: opalplugin.h:695
int excludeOLC
Definition: opalplugin.h:707
Definition: opalplugin.h:188
Definition: opalplugin.h:266
Definition: opalplugin.h:203
Definition: opalplugin.h:289
Definition: opalplugin.h:109
const char * codecAuthor
Definition: opalplugin.h:131
Definition: opalplugin.h:363
Definition: opalplugin.h:780
const char * codecLicense
Definition: opalplugin.h:136
int collapsing
Definition: opalplugin.h:705
Definition: opalplugin.h:797
const char * sourceFormat
Definition: opalplugin.h:353
Definition: opalplugin.h:184
void(* destroyCodec)(const struct PluginCodec_Definition *codec, void *context)
Definition: opalplugin.h:381
Definition: opalplugin.h:262
const void * h323CapabilityData
Definition: opalplugin.h:390
Definition: opalplugin.h:107
int sidMode1
Definition: opalplugin.h:774
unsigned long integer
Definition: opalplugin.h:740
unsigned int flags
Definition: opalplugin.h:345
int readOnly
Definition: opalplugin.h:709
Definition: opalplugin.h:179
Definition: opalplugin.h:796
Definition: opalplugin.h:809
Definition: opalplugin.h:798
PluginCodec_FreeFunction m_freeFunction
Definition: opalplugin.h:302
unsigned int maxFrameRate
Definition: opalplugin.h:373
int(* capabilityMatchFunction)(struct PluginCodec_H323NonStandardCodecData *)
Definition: opalplugin.h:691
Definition: opalplugin.h:254
unsigned int dataLength
Definition: opalplugin.h:690
const char * codecDescription
Definition: opalplugin.h:130
union PluginCodec_Definition::_parm parm
unsigned int width
Definition: opalplugin.h:949
enum PluginCodec_OptionMerge m_merge
Definition: opalplugin.h:294
unsigned m_readOnly
Definition: opalplugin.h:293
unsigned int maxFrameWidth
Definition: opalplugin.h:370
Definition: opalplugin.h:110
const char * sourceEmail
Definition: opalplugin.h:124
Definition: opalplugin.h:152
int excludeReqMode
Definition: opalplugin.h:708
Definition: opalplugin.h:106
int sidMode0
Definition: opalplugin.h:773
Definition: opalplugin.h:257
int lowRateMode0
Definition: opalplugin.h:771
Definition: opalplugin.h:256
unsigned int sampleRate
Definition: opalplugin.h:358
Definition: opalplugin.h:794
const char * codecVersion
Definition: opalplugin.h:132
Definition: opalplugin.h:272
Definition: opalplugin.h:271
Definition: opalplugin.h:813
Definition: opalplugin.h:202
Definition: opalplugin.h:208
time_t timestamp_deprecated
Definition: opalplugin.h:120
Definition: opalplugin.h:185
int(* codecFunction)(const struct PluginCodec_Definition *codec, void *context, const void *from, unsigned *fromLen, void *to, unsigned *toLen, unsigned int *flag)
Definition: opalplugin.h:382
Definition: opalplugin.h:369
Definition: opalplugin.h:781
const char * octetstring
Definition: opalplugin.h:741
Definition: opalplugin.h:146
Definition: opalplugin.h:263
Definition: opalplugin.h:148
PluginCodec_ReturnCoderFlags
Definition: opalplugin.h:206
Definition: opalplugin.h:814
Definition: opalplugin.h:258
Definition: opalplugin.h:181
const char * sourceVersion
Definition: opalplugin.h:123
unsigned int index
Definition: opalplugin.h:679
const char * m_FMTPDefault
Definition: opalplugin.h:297
Definition: opalplugin.h:153
Definition: opalplugin.h:268
unsigned int recommendedFrameRate
Definition: opalplugin.h:372
Definition: opalplugin.h:946
PluginCodec_H323GenericParameterType
Definition: opalplugin.h:716
Definition: opalplugin.h:169
int(* PluginCodec_LogFunction)(unsigned level, const char *file, unsigned line, const char *section, const char *log)
Definition: opalplugin.h:237
unsigned char h323CapabilityType
Definition: opalplugin.h:389
Definition: opalplugin.h:789
Definition: opalplugin.h:252
Definition: opalplugin.h:201
Definition: opalplugin.h:804
Definition: opalplugin.h:267
unsigned char t35CountryCode
Definition: opalplugin.h:686
Definition: opalplugin.h:171
Definition: opalplugin.h:787
PluginCodec_OptionTypes
Definition: opalplugin.h:251
unsigned int maxFrameHeight
Definition: opalplugin.h:371
int highRateMode1
Definition: opalplugin.h:770
enum PluginCodec_OptionTypes m_type
Definition: opalplugin.h:291
int comfortNoise
Definition: opalplugin.h:762
PluginCodec_CoderFlags
Definition: opalplugin.h:200
Definition: opalplugin.h:164
Definition: opalplugin.h:105
PluginCodec_MergeFunction m_mergeFunction
Definition: opalplugin.h:301
Definition: opalplugin.h:786
int silenceSuppression
Definition: opalplugin.h:768
struct PluginCodec_H323GenericParameterDefinition * params
Definition: opalplugin.h:757
Definition: opalplugin.h:795
Definition: opalplugin.h:168
Definition: opalplugin.h:147
unsigned int id
Definition: opalplugin.h:714
Definition: opalplugin.h:115
struct PluginCodec_information * info
Definition: opalplugin.h:343
Definition: opalplugin.h:207
Definition: opalplugin.h:792
const char * sdpFormat
Definition: opalplugin.h:378
unsigned int usPerFrame
Definition: opalplugin.h:360
unsigned int x
Definition: opalplugin.h:947
const char * standardIdentifier
Definition: opalplugin.h:750
Definition: opalplugin.h:807
PluginCodec_Flags
Definition: opalplugin.h:143
Definition: opalplugin.h:175
Definition: opalplugin.h:790
Definition: opalplugin.h:244
unsigned short manufacturerCode
Definition: opalplugin.h:688
Definition: opalplugin.h:167
unsigned int version
Definition: opalplugin.h:340
Definition: opalplugin.h:678
Definition: opalplugin.h:265
int scrambled
Definition: opalplugin.h:763
Definition: opalplugin.h:155
Definition: opalplugin.h:176
Definition: opalplugin.h:800
const char * m_value
Definition: opalplugin.h:295
const char * m_maximum
Definition: opalplugin.h:300
Definition: opalplugin.h:761
Definition: opalplugin.h:165
const unsigned char * data
Definition: opalplugin.h:689
int lowRateMode1
Definition: opalplugin.h:772
Definition: opalplugin.h:163
const char * objectId
Definition: opalplugin.h:685
const char * sourceURL
Definition: opalplugin.h:125
const char * codecURL
Definition: opalplugin.h:134
unsigned int nParameters
Definition: opalplugin.h:755
struct PluginCodec_Definition::_parm::_video video
Definition: opalplugin.h:160
unsigned int bitsPerSec
Definition: opalplugin.h:359
unsigned char t35Extension
Definition: opalplugin.h:687
Definition: opalplugin.h:255
Definition: opalplugin.h:210
Definition: opalplugin.h:190
PluginCodec_OptionMerge
Definition: opalplugin.h:261
const char * sourceLicense
Definition: opalplugin.h:127
Definition: opalplugin.h:362
Definition: opalplugin.h:785
Definition: opalplugin.h:157
Definition: opalplugin.h:191
Definition: opalplugin.h:103
Definition: opalplugin.h:802
const void * userData
Definition: opalplugin.h:356
Definition: opalplugin.h:766
Definition: opalplugin.h:145
unsigned int maxFramesPerPacket
Definition: opalplugin.h:367
Definition: opalplugin.h:187
unsigned int height
Definition: opalplugin.h:950
Definition: opalplugin.h:269
Definition: opalplugin.h:149
Definition: opalplugin.h:684
unsigned int bytesPerFrame
Definition: opalplugin.h:365
unsigned int y
Definition: opalplugin.h:948
unsigned(* PluginCodec_GetAPIVersionFunction)()
Definition: opalplugin.h:399
const char * codecCopyright
Definition: opalplugin.h:135
Definition: opalplugin.h:172
Definition: opalplugin.h:104
const char * m_name
Definition: opalplugin.h:292
Definition: opalplugin.h:112
const char * codecEmail
Definition: opalplugin.h:133
struct PluginCodec_ControlDefn * codecControls
Definition: opalplugin.h:386
const char * name
Definition: opalplugin.h:245
Definition: opalplugin.h:791
void * data
Definition: opalplugin.h:680
int highRateMode0
Definition: opalplugin.h:769
Definition: opalplugin.h:782
const char * m_minimum
Definition: opalplugin.h:299
int excludeTCS
Definition: opalplugin.h:706
const char * descr
Definition: opalplugin.h:351
Definition: opalplugin.h:817
Definition: opalplugin.h:808
const char * sourceCopyright
Definition: opalplugin.h:126
struct PluginCodec_H323GenericParameterDefinition * genericparameter
Definition: opalplugin.h:742
Definition: opalplugin.h:156
Definition: opalplugin.h:746
Definition: opalplugin.h:144
Definition: opalplugin.h:193
Definition: opalplugin.h:173
Definition: opalplugin.h:253
Definition: opalplugin.h:209
Definition: opalplugin.h:161
Definition: opalplugin.h:194
unsigned char sourceLicenseCode
Definition: opalplugin.h:128
Definition: opalplugin.h:779
Definition: opalplugin.h:151
int(* PluginCodec_MergeFunction)(char **result, const char *dest, const char *src)
Definition: opalplugin.h:286
Definition: opalplugin.h:788
const char * m_H245Default
Definition: opalplugin.h:303
unsigned dataLength
Definition: opalplugin.h:681
Definition: opalplugin.h:264
unsigned int recommendedFramesPerPacket
Definition: opalplugin.h:366
unsigned char maxAl_sduAudioFrames
Definition: opalplugin.h:767
unsigned int maxBitRate
Definition: opalplugin.h:751
unsigned short codecLicenseCode
Definition: opalplugin.h:137
const char * destFormat
Definition: opalplugin.h:354
struct PluginCodec_Definition::_parm::_audio audio
Definition: opalplugin.h:793
Definition: opalplugin.h:178
const char * timestamp
Definition: opalplugin.h:140
Definition: opalplugin.h:801
int(* control)(const struct PluginCodec_Definition *codec, void *context, const char *name, void *parm, unsigned *parmLen)
Definition: opalplugin.h:246
unsigned char rtpPayload
Definition: opalplugin.h:377
void(* PluginCodec_FreeFunction)(char *string)
Definition: opalplugin.h:287
const char * m_FMTPName
Definition: opalplugin.h:296
enum PluginCodec_H323GenericParameterDefinition::PluginCodec_H323GenericParameterType type
unsigned int samplesPerFrame
Definition: opalplugin.h:364
Definition: opalplugin.h:118
int m_H245Generic
Definition: opalplugin.h:298
union PluginCodec_H323GenericParameterDefinition::@4 value