Asterisk - The Open Source Telephony Project  18.5.0
Data Structures | Macros | Functions | Variables
res_format_attr_h264.c File Reference

H.264 Format Attribute Module. More...

#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/format.h"
Include dependency graph for res_format_attr_h264.c:

Go to the source code of this file.

Data Structures

struct  h264_attr
 

Macros

#define APPEND_IF_NONZERO(field, str, name)
 
#define APPEND_IF_NOT_H264_UNSET(field, str, name)
 
#define DETERMINE_JOINT(joint, attr1, attr2, field)   (joint->field = (attr1 && attr1->field) ? attr1->field : (attr2 && attr2->field) ? attr2->field : 0)
 
#define H264_ATTR_KEY_UNSET   UINT8_MAX
 Value that indicates an attribute is actually unset. More...
 
#define H264_MAX_SPS_PPS_SIZE   16
 Maximum size for SPS / PPS values in sprop-parameter-sets attribute if you change this value then you must change H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT as well. More...
 
#define H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT   "15"
 This is used when executing sscanf on buffers of H264_MAX_SPS_PPS_SIZE length. It must ALWAYS be a string literal representation of one less than H264_MAX_SPS_PPS_SIZE. More...
 

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int h264_clone (const struct ast_format *src, struct ast_format *dst)
 
static enum ast_format_cmp_res h264_cmp (const struct ast_format *format1, const struct ast_format *format2)
 
static void h264_destroy (struct ast_format *format)
 
static void h264_generate_sdp_fmtp (const struct ast_format *format, unsigned int payload, struct ast_str **str)
 
static struct ast_formath264_getjoint (const struct ast_format *format1, const struct ast_format *format2)
 
static struct ast_formath264_parse_sdp_fmtp (const struct ast_format *format, const char *attributes)
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "H.264 Format Attribute Module" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct ast_format_interface h264_interface
 

Detailed Description

H.264 Format Attribute Module.

Author
Joshua Colp <[email protected]> 

This is a format attribute module for the H.264 codec.

Definition in file res_format_attr_h264.c.

Macro Definition Documentation

◆ APPEND_IF_NONZERO

#define APPEND_IF_NONZERO (   field,
  str,
  name 
)

Definition at line 246 of file res_format_attr_h264.c.

Referenced by h264_generate_sdp_fmtp().

◆ APPEND_IF_NOT_H264_UNSET

#define APPEND_IF_NOT_H264_UNSET (   field,
  str,
  name 
)

Definition at line 235 of file res_format_attr_h264.c.

Referenced by h264_generate_sdp_fmtp().

◆ DETERMINE_JOINT

#define DETERMINE_JOINT (   joint,
  attr1,
  attr2,
  field 
)    (joint->field = (attr1 && attr1->field) ? attr1->field : (attr2 && attr2->field) ? attr2->field : 0)

Definition at line 114 of file res_format_attr_h264.c.

Referenced by h264_getjoint().

◆ H264_ATTR_KEY_UNSET

#define H264_ATTR_KEY_UNSET   UINT8_MAX

Value that indicates an attribute is actually unset.

Definition at line 40 of file res_format_attr_h264.c.

Referenced by h264_parse_sdp_fmtp().

◆ H264_MAX_SPS_PPS_SIZE

#define H264_MAX_SPS_PPS_SIZE   16

Maximum size for SPS / PPS values in sprop-parameter-sets attribute if you change this value then you must change H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT as well.

Definition at line 45 of file res_format_attr_h264.c.

◆ H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT

#define H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT   "15"

This is used when executing sscanf on buffers of H264_MAX_SPS_PPS_SIZE length. It must ALWAYS be a string literal representation of one less than H264_MAX_SPS_PPS_SIZE.

Definition at line 49 of file res_format_attr_h264.c.

Referenced by h264_parse_sdp_fmtp().

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 337 of file res_format_attr_h264.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 337 of file res_format_attr_h264.c.

◆ AST_MODULE_SELF_SYM()

struct ast_module* AST_MODULE_SELF_SYM ( void  )

Definition at line 337 of file res_format_attr_h264.c.

◆ h264_clone()

static int h264_clone ( const struct ast_format src,
struct ast_format dst 
)
static

Definition at line 83 of file res_format_attr_h264.c.

References ast_calloc, ast_format_get_attribute_data(), and ast_format_set_attribute_data().

84 {
85  struct h264_attr *original = ast_format_get_attribute_data(src);
86  struct h264_attr *attr = ast_calloc(1, sizeof(*attr));
87 
88  if (!attr) {
89  return -1;
90  }
91 
92  if (original) {
93  *attr = *original;
94  }
95 
97 
98  return 0;
99 }
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
#define ast_calloc(num, len)
A wrapper for calloc()
Definition: astmm.h:204
void ast_format_set_attribute_data(struct ast_format *format, void *attribute_data)
Set the attribute data on a format.
Definition: format.c:130

◆ h264_cmp()

static enum ast_format_cmp_res h264_cmp ( const struct ast_format format1,
const struct ast_format format2 
)
static

Definition at line 101 of file res_format_attr_h264.c.

References AST_FORMAT_CMP_EQUAL, AST_FORMAT_CMP_NOT_EQUAL, ast_format_get_attribute_data(), and h264_attr::PROFILE_IDC.

102 {
103  struct h264_attr *attr1 = ast_format_get_attribute_data(format1);
104  struct h264_attr *attr2 = ast_format_get_attribute_data(format2);
105 
106  if (!attr1 || !attr1->PROFILE_IDC || !attr2 || !attr2->PROFILE_IDC ||
107  (attr1->PROFILE_IDC == attr2->PROFILE_IDC)) {
108  return AST_FORMAT_CMP_EQUAL;
109  }
110 
112 }
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
unsigned int PROFILE_IDC

◆ h264_destroy()

static void h264_destroy ( struct ast_format format)
static

Definition at line 76 of file res_format_attr_h264.c.

References ast_format_get_attribute_data(), and ast_free.

77 {
78  struct h264_attr *attr = ast_format_get_attribute_data(format);
79 
80  ast_free(attr);
81 }
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
#define ast_free(a)
Definition: astmm.h:182

◆ h264_generate_sdp_fmtp()

static void h264_generate_sdp_fmtp ( const struct ast_format format,
unsigned int  payload,
struct ast_str **  str 
)
static

Definition at line 257 of file res_format_attr_h264.c.

References APPEND_IF_NONZERO, APPEND_IF_NOT_H264_UNSET, ast_format_get_attribute_data(), ast_str_append(), ast_strlen_zero, h264_attr::DEINT_BUF_CAP, h264_attr::LEVEL, h264_attr::LEVEL_ASYMMETRY_ALLOWED, h264_attr::MAX_BR, h264_attr::MAX_CPB, h264_attr::MAX_DPB, h264_attr::MAX_FPS, h264_attr::MAX_FS, h264_attr::MAX_MBPS, h264_attr::MAX_RCMD_NALU_SIZE, h264_attr::MAX_SMBPS, h264_attr::PACKETIZATION_MODE, h264_attr::PARAMETER_ADD, h264_attr::PPS, h264_attr::PROFILE_IDC, h264_attr::PROFILE_IOP, h264_attr::REDUNDANT_PIC_CAP, h264_attr::SPROP_DEINT_BUF_REQ, h264_attr::SPROP_INIT_BUF_TIME, h264_attr::SPROP_INTERLEAVING_DEPTH, h264_attr::SPROP_MAX_DON_DIFF, and h264_attr::SPS.

258 {
259  struct h264_attr *attr = ast_format_get_attribute_data(format);
260  int added = 0;
261 
262  if (!attr) {
263  return;
264  }
265 
266  APPEND_IF_NONZERO(attr->MAX_MBPS, str, "max-mbps");
267  APPEND_IF_NONZERO(attr->MAX_FS, str, "max-fs");
268  APPEND_IF_NONZERO(attr->MAX_CPB, str, "max-cpb");
269  APPEND_IF_NONZERO(attr->MAX_DPB, str, "max-dpb");
270  APPEND_IF_NONZERO(attr->MAX_BR, str, "max-br");
271  APPEND_IF_NONZERO(attr->MAX_SMBPS, str, "max-smbps");
272  APPEND_IF_NONZERO(attr->MAX_FPS, str, "max-fps");
273  APPEND_IF_NONZERO(attr->SPROP_INTERLEAVING_DEPTH, str, "sprop-interleaving-depth");
274  APPEND_IF_NONZERO(attr->SPROP_DEINT_BUF_REQ, str, "sprop-deint-buf-req");
275  APPEND_IF_NONZERO(attr->DEINT_BUF_CAP, str, "deint-buf-cap");
276  APPEND_IF_NONZERO(attr->SPROP_INIT_BUF_TIME, str, "sprop-init-buf-time");
277  APPEND_IF_NONZERO(attr->SPROP_MAX_DON_DIFF, str, "sprop-max-don-diff");
278  APPEND_IF_NONZERO(attr->MAX_RCMD_NALU_SIZE, str, "max-rcmd-nalu-size");
279 
280  APPEND_IF_NOT_H264_UNSET(attr->REDUNDANT_PIC_CAP, str, "redundant-pic-cap");
281  APPEND_IF_NOT_H264_UNSET(attr->PARAMETER_ADD, str, "parameter-add");
282  APPEND_IF_NOT_H264_UNSET(attr->PACKETIZATION_MODE, str, "packetization-mode");
283  APPEND_IF_NOT_H264_UNSET(attr->LEVEL_ASYMMETRY_ALLOWED, str, "level-asymmetry-allowed");
284 
285  if (attr->PROFILE_IDC && attr->LEVEL) {
286  if (added) {
287  ast_str_append(str, 0, ";");
288  } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
289  added = 1;
290  }
291  ast_str_append(str, 0, "profile-level-id=%02X%02X%02X", attr->PROFILE_IDC, attr->PROFILE_IOP, attr->LEVEL);
292  }
293 
294  if (!ast_strlen_zero(attr->SPS) && !ast_strlen_zero(attr->PPS)) {
295  if (added) {
296  ast_str_append(str, 0, ";");
297  } else if (0 < ast_str_append(str, 0, "a=fmtp:%u ", payload)) {
298  added = 1;
299  }
300  ast_str_append(str, 0, "sprop-parameter-sets=%s,%s", attr->SPS, attr->PPS);
301  }
302 
303  if (added) {
304  ast_str_append(str, 0, "\r\n");
305  }
306 
307  return;
308 }
#define APPEND_IF_NONZERO(field, str, name)
#define APPEND_IF_NOT_H264_UNSET(field, str, name)
unsigned int MAX_FPS
char SPS[H264_MAX_SPS_PPS_SIZE]
unsigned int MAX_RCMD_NALU_SIZE
unsigned int DEINT_BUF_CAP
unsigned int PROFILE_IOP
unsigned int SPROP_INTERLEAVING_DEPTH
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1091
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
char PPS[H264_MAX_SPS_PPS_SIZE]
#define ast_strlen_zero(foo)
Definition: strings.h:52
unsigned int MAX_DPB
unsigned int PARAMETER_ADD
unsigned int SPROP_DEINT_BUF_REQ
unsigned int PROFILE_IDC
unsigned int LEVEL_ASYMMETRY_ALLOWED
unsigned int MAX_CPB
unsigned int MAX_MBPS
unsigned int PACKETIZATION_MODE
unsigned int MAX_FS
unsigned int SPROP_INIT_BUF_TIME
unsigned int REDUNDANT_PIC_CAP
unsigned int MAX_BR
unsigned int MAX_SMBPS
unsigned int SPROP_MAX_DON_DIFF
unsigned int LEVEL

◆ h264_getjoint()

static struct ast_format* h264_getjoint ( const struct ast_format format1,
const struct ast_format format2 
)
static

Definition at line 116 of file res_format_attr_h264.c.

References ast_copy_string(), ast_format_clone(), ast_format_get_attribute_data(), ast_strlen_zero, h264_attr::DEINT_BUF_CAP, DETERMINE_JOINT, h264_attr::LEVEL, h264_attr::LEVEL_ASYMMETRY_ALLOWED, h264_attr::MAX_BR, h264_attr::MAX_CPB, h264_attr::MAX_DPB, h264_attr::MAX_FPS, h264_attr::MAX_FS, h264_attr::MAX_MBPS, h264_attr::MAX_RCMD_NALU_SIZE, h264_attr::MAX_SMBPS, NULL, h264_attr::PACKETIZATION_MODE, h264_attr::PARAMETER_ADD, h264_attr::PPS, h264_attr::PROFILE_IDC, h264_attr::PROFILE_IOP, h264_attr::REDUNDANT_PIC_CAP, h264_attr::SPROP_DEINT_BUF_REQ, h264_attr::SPROP_INIT_BUF_TIME, h264_attr::SPROP_INTERLEAVING_DEPTH, h264_attr::SPROP_MAX_DON_DIFF, and h264_attr::SPS.

117 {
118  struct ast_format *cloned;
119  struct h264_attr *attr, *attr1, *attr2;
120 
121  cloned = ast_format_clone(format1);
122  if (!cloned) {
123  return NULL;
124  }
125  attr = ast_format_get_attribute_data(cloned);
126 
127  attr1 = ast_format_get_attribute_data(format1);
128  attr2 = ast_format_get_attribute_data(format2);
129 
130  DETERMINE_JOINT(attr, attr1, attr2, PROFILE_IDC);
131  DETERMINE_JOINT(attr, attr1, attr2, PROFILE_IOP);
132  DETERMINE_JOINT(attr, attr1, attr2, LEVEL);
133  DETERMINE_JOINT(attr, attr1, attr2, MAX_MBPS);
134  DETERMINE_JOINT(attr, attr1, attr2, MAX_FS);
135  DETERMINE_JOINT(attr, attr1, attr2, MAX_CPB);
136  DETERMINE_JOINT(attr, attr1, attr2, MAX_DPB);
137  DETERMINE_JOINT(attr, attr1, attr2, MAX_BR);
138  DETERMINE_JOINT(attr, attr1, attr2, MAX_SMBPS);
139  DETERMINE_JOINT(attr, attr1, attr2, MAX_FPS);
140  DETERMINE_JOINT(attr, attr1, attr2, REDUNDANT_PIC_CAP);
141  DETERMINE_JOINT(attr, attr1, attr2, PARAMETER_ADD);
142  DETERMINE_JOINT(attr, attr1, attr2, SPROP_INTERLEAVING_DEPTH);
143  DETERMINE_JOINT(attr, attr1, attr2, SPROP_DEINT_BUF_REQ);
144  DETERMINE_JOINT(attr, attr1, attr2, DEINT_BUF_CAP);
145  DETERMINE_JOINT(attr, attr1, attr2, SPROP_INIT_BUF_TIME);
146  DETERMINE_JOINT(attr, attr1, attr2, SPROP_MAX_DON_DIFF);
147  DETERMINE_JOINT(attr, attr1, attr2, MAX_RCMD_NALU_SIZE);
148  DETERMINE_JOINT(attr, attr1, attr2, LEVEL_ASYMMETRY_ALLOWED);
149  DETERMINE_JOINT(attr, attr1, attr2, PACKETIZATION_MODE);
150 
151  if (attr1 && !ast_strlen_zero(attr1->SPS)) {
152  ast_copy_string(attr->SPS, attr1->SPS, sizeof(attr->SPS));
153  } else if (attr2 && !ast_strlen_zero(attr2->SPS)) {
154  ast_copy_string(attr->SPS, attr2->SPS, sizeof(attr->SPS));
155  }
156 
157  if (attr1 && !ast_strlen_zero(attr1->PPS)) {
158  ast_copy_string(attr->PPS, attr1->PPS, sizeof(attr->PPS));
159  } else if (attr2 && !ast_strlen_zero(attr2->PPS)) {
160  ast_copy_string(attr->PPS, attr2->PPS, sizeof(attr->PPS));
161  }
162 
163  return cloned;
164 }
unsigned int MAX_FPS
char SPS[H264_MAX_SPS_PPS_SIZE]
unsigned int MAX_RCMD_NALU_SIZE
unsigned int DEINT_BUF_CAP
unsigned int PROFILE_IOP
unsigned int SPROP_INTERLEAVING_DEPTH
Definition of a media format.
Definition: format.c:43
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
#define NULL
Definition: resample.c:96
char PPS[H264_MAX_SPS_PPS_SIZE]
#define ast_strlen_zero(foo)
Definition: strings.h:52
unsigned int MAX_DPB
unsigned int PARAMETER_ADD
struct ast_format * ast_format_clone(const struct ast_format *format)
Clone an existing media format so it can be modified.
Definition: format.c:180
unsigned int SPROP_DEINT_BUF_REQ
unsigned int PROFILE_IDC
unsigned int LEVEL_ASYMMETRY_ALLOWED
unsigned int MAX_CPB
unsigned int MAX_MBPS
unsigned int PACKETIZATION_MODE
unsigned int MAX_FS
unsigned int SPROP_INIT_BUF_TIME
unsigned int REDUNDANT_PIC_CAP
void ast_copy_string(char *dst, const char *src, size_t size)
Size-limited null-terminating string copy.
Definition: strings.h:401
unsigned int MAX_BR
#define DETERMINE_JOINT(joint, attr1, attr2, field)
unsigned int MAX_SMBPS
unsigned int SPROP_MAX_DON_DIFF
unsigned int LEVEL

◆ h264_parse_sdp_fmtp()

static struct ast_format* h264_parse_sdp_fmtp ( const struct ast_format format,
const char *  attributes 
)
static

Definition at line 166 of file res_format_attr_h264.c.

References ast_format_clone(), ast_format_get_attribute_data(), ast_strdupa, ast_strip(), h264_attr::DEINT_BUF_CAP, H264_ATTR_KEY_UNSET, H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT, h264_attr::LEVEL, h264_attr::LEVEL_ASYMMETRY_ALLOWED, h264_attr::MAX_BR, h264_attr::MAX_CPB, h264_attr::MAX_DPB, h264_attr::MAX_FPS, h264_attr::MAX_FS, h264_attr::MAX_MBPS, h264_attr::MAX_RCMD_NALU_SIZE, h264_attr::MAX_SMBPS, NULL, h264_attr::PACKETIZATION_MODE, h264_attr::PARAMETER_ADD, h264_attr::PPS, h264_attr::PROFILE_IDC, h264_attr::PROFILE_IOP, h264_attr::REDUNDANT_PIC_CAP, h264_attr::SPROP_DEINT_BUF_REQ, h264_attr::SPROP_INIT_BUF_TIME, h264_attr::SPROP_INTERLEAVING_DEPTH, h264_attr::SPROP_MAX_DON_DIFF, h264_attr::SPS, and strsep().

167 {
168  char *attribs = ast_strdupa(attributes), *attrib;
169  struct ast_format *cloned;
170  struct h264_attr *attr;
171 
172  cloned = ast_format_clone(format);
173  if (!cloned) {
174  return NULL;
175  }
176  attr = ast_format_get_attribute_data(cloned);
177 
182 
183  while ((attrib = strsep(&attribs, ";"))) {
184  unsigned int val;
185  unsigned long int val2;
186 
187  attrib = ast_strip(attrib);
188 
189  if (sscanf(attrib, "profile-level-id=%lx", &val2) == 1) {
190  attr->PROFILE_IDC = ((val2 >> 16) & 0xFF);
191  attr->PROFILE_IOP = ((val2 >> 8) & 0xFF);
192  attr->LEVEL = (val2 & 0xFF);
193  } else if (sscanf(attrib, "sprop-parameter-sets=%" H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT "[^','],%" H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT "s", attr->SPS, attr->PPS) == 2) {
194  /* XXX sprop-parameter-sets can actually be of unlimited length. This may need to be addressed later. */
195  } else if (sscanf(attrib, "max-mbps=%30u", &val) == 1) {
196  attr->MAX_MBPS = val;
197  } else if (sscanf(attrib, "max-fs=%30u", &val) == 1) {
198  attr->MAX_FS = val;
199  } else if (sscanf(attrib, "max-cpb=%30u", &val) == 1) {
200  attr->MAX_CPB = val;
201  } else if (sscanf(attrib, "max-dpb=%30u", &val) == 1) {
202  attr->MAX_DPB = val;
203  } else if (sscanf(attrib, "max-br=%30u", &val) == 1) {
204  attr->MAX_BR = val;
205  } else if (sscanf(attrib, "max-smbps=%30u", &val) == 1) {
206  attr->MAX_SMBPS = val;
207  } else if (sscanf(attrib, "max-fps=%30u", &val) == 1) {
208  attr->MAX_FPS = val;
209  } else if (sscanf(attrib, "redundant-pic-cap=%30u", &val) == 1) {
210  attr->REDUNDANT_PIC_CAP = val;
211  } else if (sscanf(attrib, "parameter-add=%30u", &val) == 1) {
212  attr->PARAMETER_ADD = val;
213  } else if (sscanf(attrib, "packetization-mode=%30u", &val) == 1) {
214  attr->PACKETIZATION_MODE = val;
215  } else if (sscanf(attrib, "sprop-interleaving-depth=%30u", &val) == 1) {
216  attr->SPROP_INTERLEAVING_DEPTH = val;
217  } else if (sscanf(attrib, "sprop-deint-buf-req=%30u", &val) == 1) {
218  attr->SPROP_DEINT_BUF_REQ = val;
219  } else if (sscanf(attrib, "deint-buf-cap=%30u", &val) == 1) {
220  attr->DEINT_BUF_CAP = val;
221  } else if (sscanf(attrib, "sprop-init-buf-time=%30u", &val) == 1) {
222  attr->SPROP_INIT_BUF_TIME = val;
223  } else if (sscanf(attrib, "sprop-max-don-diff=%30u", &val) == 1) {
224  attr->SPROP_MAX_DON_DIFF = val;
225  } else if (sscanf(attrib, "max-rcmd-nalu-size=%30u", &val) == 1) {
226  attr->MAX_RCMD_NALU_SIZE = val;
227  } else if (sscanf(attrib, "level-asymmetry-allowed=%30u", &val) == 1) {
228  attr->LEVEL_ASYMMETRY_ALLOWED = val;
229  }
230  }
231 
232  return cloned;
233 }
unsigned int MAX_FPS
Definition: ast_expr2.c:325
char SPS[H264_MAX_SPS_PPS_SIZE]
unsigned int MAX_RCMD_NALU_SIZE
unsigned int DEINT_BUF_CAP
unsigned int PROFILE_IOP
unsigned int SPROP_INTERLEAVING_DEPTH
Definition of a media format.
Definition: format.c:43
void * ast_format_get_attribute_data(const struct ast_format *format)
Get the attribute data on a format.
Definition: format.c:125
#define NULL
Definition: resample.c:96
char PPS[H264_MAX_SPS_PPS_SIZE]
unsigned int MAX_DPB
unsigned int PARAMETER_ADD
struct ast_format * ast_format_clone(const struct ast_format *format)
Clone an existing media format so it can be modified.
Definition: format.c:180
unsigned int SPROP_DEINT_BUF_REQ
char * ast_strip(char *s)
Strip leading/trailing whitespace from a string.
Definition: strings.h:219
#define ast_strdupa(s)
duplicate a string in memory from the stack
Definition: astmm.h:300
unsigned int PROFILE_IDC
#define H264_MAX_SPS_PPS_SIZE_SCAN_LIMIT
This is used when executing sscanf on buffers of H264_MAX_SPS_PPS_SIZE length. It must ALWAYS be a st...
unsigned int LEVEL_ASYMMETRY_ALLOWED
unsigned int MAX_CPB
unsigned int MAX_MBPS
#define H264_ATTR_KEY_UNSET
Value that indicates an attribute is actually unset.
unsigned int PACKETIZATION_MODE
unsigned int MAX_FS
unsigned int SPROP_INIT_BUF_TIME
unsigned int REDUNDANT_PIC_CAP
char * strsep(char **str, const char *delims)
unsigned int MAX_BR
unsigned int MAX_SMBPS
unsigned int SPROP_MAX_DON_DIFF
unsigned int LEVEL

◆ load_module()

static int load_module ( void  )
static

Definition at line 324 of file res_format_attr_h264.c.

References ast_format_interface_register, AST_MODFLAG_DEFAULT, AST_MODULE_INFO(), AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, AST_MODULE_SUPPORT_CORE, ASTERISK_GPL_KEY, and unload_module().

325 {
328  }
329 
331 }
#define ast_format_interface_register(codec, interface)
Register a format interface for use with the provided codec.
Definition: format.h:273
static struct ast_format_interface h264_interface
Module has failed to load, may be in an inconsistent state.
Definition: module.h:78

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 319 of file res_format_attr_h264.c.

Referenced by load_module().

320 {
321  return 0;
322 }

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_DEFAULT , .description = "H.264 Format Attribute Module" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, }
static

Definition at line 337 of file res_format_attr_h264.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 337 of file res_format_attr_h264.c.

◆ h264_interface

struct ast_format_interface h264_interface
static

Definition at line 310 of file res_format_attr_h264.c.