FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
sdp.c
Go to the documentation of this file.
1 /*
2  * copyright (c) 2007 Luca Abeni
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config_components.h"
22 
23 #include <string.h>
24 #include "libavutil/avstring.h"
25 #include "libavutil/base64.h"
26 #include "libavutil/dict.h"
27 #include "libavutil/mem.h"
28 #include "libavutil/parseutils.h"
29 #include "libavutil/opt.h"
30 #include "libavcodec/xiph.h"
31 #include "libavcodec/mpeg4audio.h"
32 #include "avformat.h"
33 #include "internal.h"
34 #include "av1.h"
35 #include "avc.h"
36 #include "hevc.h"
37 #include "nal.h"
38 #include "rtp.h"
39 #include "version.h"
40 #if CONFIG_NETWORK
41 #include "network.h"
42 #endif
43 
44 #if CONFIG_RTP_MUXER
45 #define MAX_EXTRADATA_SIZE ((INT_MAX - 10) / 2)
46 
47 struct sdp_session_level {
48  int sdp_version; /**< protocol version (currently 0) */
49  int id; /**< session ID */
50  int version; /**< session version */
51  int start_time; /**< session start time (NTP time, in seconds),
52  or 0 in case of permanent session */
53  int end_time; /**< session end time (NTP time, in seconds),
54  or 0 if the session is not bounded */
55  int ttl; /**< TTL, in case of multicast stream */
56  const char *user; /**< username of the session's creator */
57  const char *src_addr; /**< IP address of the machine from which the session was created */
58  const char *src_type; /**< address type of src_addr */
59  const char *dst_addr; /**< destination IP address (can be multicast) */
60  const char *dst_type; /**< destination IP address type */
61  const char *name; /**< session name (can be an empty string) */
62 };
63 
64 static void sdp_write_address(char *buff, int size, const char *dest_addr,
65  const char *dest_type, int ttl)
66 {
67  if (dest_addr) {
68  if (!dest_type)
69  dest_type = "IP4";
70  if (ttl > 0 && !strcmp(dest_type, "IP4")) {
71  /* The TTL should only be specified for IPv4 multicast addresses,
72  * not for IPv6. */
73  av_strlcatf(buff, size, "c=IN %s %s/%d\r\n", dest_type, dest_addr, ttl);
74  } else {
75  av_strlcatf(buff, size, "c=IN %s %s\r\n", dest_type, dest_addr);
76  }
77  }
78 }
79 
80 static void sdp_write_header(char *buff, int size, struct sdp_session_level *s)
81 {
82  av_strlcatf(buff, size, "v=%d\r\n"
83  "o=- %d %d IN %s %s\r\n"
84  "s=%s\r\n",
85  s->sdp_version,
86  s->id, s->version, s->src_type, s->src_addr,
87  s->name);
88  sdp_write_address(buff, size, s->dst_addr, s->dst_type, s->ttl);
89  av_strlcatf(buff, size, "t=%d %d\r\n"
90  "a=tool:libavformat " AV_STRINGIFY(LIBAVFORMAT_VERSION) "\r\n",
91  s->start_time, s->end_time);
92 }
93 
94 #if CONFIG_NETWORK
95 static int resolve_destination(char *dest_addr, int size, char *type,
96  int type_size)
97 {
98  struct addrinfo hints = { 0 }, *ai;
99  int is_multicast;
100 
101  av_strlcpy(type, "IP4", type_size);
102  if (!dest_addr[0])
103  return 0;
104 
105  /* Resolve the destination, since it must be written
106  * as a numeric IP address in the SDP. */
107 
108  if (getaddrinfo(dest_addr, NULL, &hints, &ai))
109  return 0;
110  getnameinfo(ai->ai_addr, ai->ai_addrlen, dest_addr, size,
111  NULL, 0, NI_NUMERICHOST);
112 #ifdef AF_INET6
113  if (ai->ai_family == AF_INET6)
114  av_strlcpy(type, "IP6", type_size);
115 #endif
116  is_multicast = ff_is_multicast_address(ai->ai_addr);
117  freeaddrinfo(ai);
118  return is_multicast;
119 }
120 #else
121 static int resolve_destination(char *dest_addr, int size, char *type,
122  int type_size)
123 {
124  return 0;
125 }
126 #endif
127 
128 static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url)
129 {
130  int port;
131  const char *p;
132  char proto[32];
133 
134  av_url_split(proto, sizeof(proto), NULL, 0, dest_addr, size, &port, NULL, 0, url);
135 
136  *ttl = 0;
137 
138  if (strcmp(proto, "rtp") && strcmp(proto, "srtp")) {
139  /* The url isn't for the actual rtp sessions,
140  * don't parse out anything else than the destination.
141  */
142  return 0;
143  }
144 
145  p = strchr(url, '?');
146  if (p) {
147  char buff[64];
148 
149  if (av_find_info_tag(buff, sizeof(buff), "ttl", p)) {
150  *ttl = strtol(buff, NULL, 10);
151  } else {
152  *ttl = 5;
153  }
154  }
155 
156  return port;
157 }
158 
159 static int extradata2psets_av1(AVFormatContext *s, const AVCodecParameters *par,
160  char **out)
161 {
162  char *psets;
164 
165  if (ff_av1_parse_seq_header(&seq, par->extradata, par->extradata_size) < 0)
166  return AVERROR_INVALIDDATA;
167 
168  psets = av_mallocz(64);
169  if (!psets) {
170  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n");
171  return AVERROR(ENOMEM);
172  }
173  av_strlcatf(psets, 64, "profile=%u;level-idx=%u;tier=%u",
174  seq.profile, seq.level, seq.tier);
175  *out = psets;
176  return 0;
177 }
178 
179 #define MAX_PSET_SIZE 1024
180 static int extradata2psets(AVFormatContext *s, const AVCodecParameters *par,
181  char **out)
182 {
183  char *psets, *p;
184  const uint8_t *r;
185  static const char pset_string[] = "; sprop-parameter-sets=";
186  static const char profile_string[] = "; profile-level-id=";
187  uint8_t *extradata = par->extradata;
188  int extradata_size = par->extradata_size;
189  uint8_t *tmpbuf = NULL;
190  const uint8_t *sps = NULL, *sps_end;
191 
192  *out = NULL;
193 
194  if (par->extradata_size > MAX_EXTRADATA_SIZE) {
195  av_log(s, AV_LOG_ERROR, "Too much extradata!\n");
196  return AVERROR_INVALIDDATA;
197  }
198  if (par->extradata[0] == 1) {
199  int ret = ff_avc_write_annexb_extradata(par->extradata, &extradata,
200  &extradata_size);
201  if (ret < 0)
202  return ret;
203 
204  tmpbuf = extradata;
205  }
206 
207  psets = av_mallocz(MAX_PSET_SIZE);
208  if (!psets) {
209  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n");
210  av_free(tmpbuf);
211  return AVERROR(ENOMEM);
212  }
213  memcpy(psets, pset_string, strlen(pset_string));
214  p = psets + strlen(pset_string);
215  r = ff_nal_find_startcode(extradata, extradata + extradata_size);
216  while (r < extradata + extradata_size) {
217  const uint8_t *r1;
218  uint8_t nal_type;
219 
220  while (!*(r++));
221  nal_type = *r & 0x1f;
222  r1 = ff_nal_find_startcode(r, extradata + extradata_size);
223  if (nal_type != 7 && nal_type != 8) { /* Only output SPS and PPS */
224  r = r1;
225  continue;
226  }
227  if (p != (psets + strlen(pset_string))) {
228  if (p - psets >= MAX_PSET_SIZE)
229  goto fail_in_loop;
230  *p = ',';
231  p++;
232  }
233  if (!sps) {
234  sps = r;
235  sps_end = r1;
236  }
237  if (!av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r)) {
238  av_log(s, AV_LOG_ERROR, "Cannot Base64-encode %"PTRDIFF_SPECIFIER" %"PTRDIFF_SPECIFIER"!\n",
239  MAX_PSET_SIZE - (p - psets), r1 - r);
240 fail_in_loop:
241  av_free(psets);
242  av_free(tmpbuf);
243 
244  return AVERROR_INVALIDDATA;
245  }
246  p += strlen(p);
247  r = r1;
248  }
249  if (sps && sps_end - sps >= 4 && p - psets <= MAX_PSET_SIZE - strlen(profile_string) - 7) {
250  memcpy(p, profile_string, strlen(profile_string));
251  p += strlen(p);
252  ff_data_to_hex(p, sps + 1, 3, 0);
253  }
254  av_free(tmpbuf);
255 
256  *out = psets;
257  return 0;
258 }
259 
260 static int extradata2psets_hevc(AVFormatContext *fmt, const AVCodecParameters *par,
261  char **out)
262 {
263  char *psets;
264  uint8_t *extradata = par->extradata;
265  int extradata_size = par->extradata_size;
266  uint8_t *tmpbuf = NULL;
267  int ps_pos[3] = { 0 };
268  static const char * const ps_names[3] = { "vps", "sps", "pps" };
269  int num_arrays, num_nalus;
270  int pos, i, j, ret = 0;
271 
272  *out = NULL;
273 
274  // Convert to hvcc format. Since we need to group multiple NALUs of
275  // the same type, and we might need to convert from one format to the
276  // other anyway, we get away with a little less work by using the hvcc
277  // format.
278  if (par->extradata[0] != 1) {
279  AVIOContext *pb;
280 
281  ret = avio_open_dyn_buf(&pb);
282  if (ret < 0)
283  return ret;
284 
285  ret = ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0, fmt);
286  if (ret < 0) {
287  avio_close_dyn_buf(pb, &tmpbuf);
288  goto err;
289  }
290  extradata_size = avio_close_dyn_buf(pb, &extradata);
291  tmpbuf = extradata;
292  }
293 
294  if (extradata_size < 23)
295  goto err;
296 
297  num_arrays = extradata[22];
298  pos = 23;
299  for (i = 0; i < num_arrays; i++) {
300  int num_nalus, nalu_type;
301  if (pos + 3 > extradata_size)
302  goto err;
303  nalu_type = extradata[pos] & 0x3f;
304  // Not including libavcodec/hevc.h to avoid confusion between
305  // NAL_* with the same name for both H.264 and HEVC.
306  if (nalu_type == 32) // VPS
307  ps_pos[0] = pos;
308  else if (nalu_type == 33) // SPS
309  ps_pos[1] = pos;
310  else if (nalu_type == 34) // PPS
311  ps_pos[2] = pos;
312  num_nalus = AV_RB16(&extradata[pos + 1]);
313  pos += 3;
314  for (j = 0; j < num_nalus; j++) {
315  int len;
316  if (pos + 2 > extradata_size)
317  goto err;
318  len = AV_RB16(&extradata[pos]);
319  pos += 2;
320  if (pos + len > extradata_size)
321  goto err;
322  pos += len;
323  }
324  }
325  if (!ps_pos[0] || !ps_pos[1] || !ps_pos[2])
326  goto err;
327 
328  psets = av_mallocz(MAX_PSET_SIZE);
329  if (!psets) {
330  ret = AVERROR(ENOMEM);
331  goto err;
332  }
333 
334  psets[0] = '\0';
335 
336  for (i = 0; i < 3; i++) {
337  pos = ps_pos[i];
338 
339  if (i > 0)
340  av_strlcat(psets, "; ", MAX_PSET_SIZE);
341  av_strlcatf(psets, MAX_PSET_SIZE, "sprop-%s=", ps_names[i]);
342 
343  // Skipping boundary checks in the input here; we've already traversed
344  // the whole hvcc structure above without issues
345  num_nalus = AV_RB16(&extradata[pos + 1]);
346  pos += 3;
347  for (j = 0; j < num_nalus; j++) {
348  int len = AV_RB16(&extradata[pos]);
349  int strpos;
350  pos += 2;
351  if (j > 0)
352  av_strlcat(psets, ",", MAX_PSET_SIZE);
353  strpos = strlen(psets);
354  if (!av_base64_encode(psets + strpos, MAX_PSET_SIZE - strpos,
355  &extradata[pos], len)) {
356  av_free(psets);
357  goto err;
358  }
359  pos += len;
360  }
361  }
362  av_free(tmpbuf);
363 
364  *out = psets;
365  return 0;
366 err:
367  if (ret >= 0)
369  av_free(tmpbuf);
370  return ret;
371 }
372 
373 static int extradata2config(AVFormatContext *s, const AVCodecParameters *par,
374  char **out)
375 {
376  char *config;
377 
378  *out = NULL;
379 
380  if (par->extradata_size > MAX_EXTRADATA_SIZE) {
381  av_log(s, AV_LOG_ERROR, "Too much extradata!\n");
382  return AVERROR_INVALIDDATA;
383  }
384  config = av_malloc(10 + par->extradata_size * 2);
385  if (!config) {
386  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the config info.\n");
387  return AVERROR(ENOMEM);
388  }
389  memcpy(config, "; config=", 9);
390  ff_data_to_hex(config + 9, par->extradata, par->extradata_size, 0);
391 
392  *out = config;
393  return 0;
394 }
395 
396 static int xiph_extradata2config(AVFormatContext *s, const AVCodecParameters *par,
397  char **out)
398 {
399  uint8_t *config;
400  char *encoded_config;
401  const uint8_t *header_start[3];
402  int headers_len, header_len[3], config_len;
403  int first_header_size, ret;
404 
405  *out = NULL;
406 
407  switch (par->codec_id) {
408  case AV_CODEC_ID_THEORA:
409  first_header_size = 42;
410  break;
411  case AV_CODEC_ID_VORBIS:
412  first_header_size = 30;
413  break;
414  default:
415  av_log(s, AV_LOG_ERROR, "Unsupported Xiph codec ID\n");
416  return AVERROR(ENOSYS);
417  }
418 
420  first_header_size, header_start,
421  header_len);
422  if (ret < 0) {
423  av_log(s, AV_LOG_ERROR, "Extradata corrupt.\n");
424  return ret;
425  }
426 
427  headers_len = header_len[0] + header_len[2];
428  config_len = 4 + // count
429  3 + // ident
430  2 + // packet size
431  1 + // header count
432  2 + // header size
433  headers_len; // and the rest
434 
435  config = av_malloc(config_len);
436  if (!config)
437  goto xiph_fail;
438 
439  encoded_config = av_malloc(AV_BASE64_SIZE(config_len));
440  if (!encoded_config) {
441  av_free(config);
442  goto xiph_fail;
443  }
444 
445  config[0] = config[1] = config[2] = 0;
446  config[3] = 1;
447  config[4] = (RTP_XIPH_IDENT >> 16) & 0xff;
448  config[5] = (RTP_XIPH_IDENT >> 8) & 0xff;
449  config[6] = (RTP_XIPH_IDENT ) & 0xff;
450  config[7] = (headers_len >> 8) & 0xff;
451  config[8] = headers_len & 0xff;
452  config[9] = 2;
453  config[10] = header_len[0];
454  config[11] = 0; // size of comment header; nonexistent
455  memcpy(config + 12, header_start[0], header_len[0]);
456  memcpy(config + 12 + header_len[0], header_start[2], header_len[2]);
457 
458  av_base64_encode(encoded_config, AV_BASE64_SIZE(config_len),
459  config, config_len);
460  av_free(config);
461 
462  *out = encoded_config;
463  return 0;
464 
465 xiph_fail:
467  "Not enough memory for configuration string\n");
468  return AVERROR(ENOMEM);
469 }
470 
471 static int latm_context2profilelevel(const AVCodecParameters *par)
472 {
473  /* MP4A-LATM
474  * The RTP payload format specification is described in RFC 3016
475  * The encoding specifications are provided in ISO/IEC 14496-3 */
476 
477  int profile_level = 0x2B;
478 
479  /* TODO: AAC Profile only supports AAC LC Object Type.
480  * Different Object Types should implement different Profile Levels */
481 
482  if (par->sample_rate <= 24000) {
483  if (par->ch_layout.nb_channels <= 2)
484  profile_level = 0x28; // AAC Profile, Level 1
485  } else if (par->sample_rate <= 48000) {
486  if (par->ch_layout.nb_channels <= 2) {
487  profile_level = 0x29; // AAC Profile, Level 2
488  } else if (par->ch_layout.nb_channels <= 5) {
489  profile_level = 0x2A; // AAC Profile, Level 4
490  }
491  } else if (par->sample_rate <= 96000) {
492  if (par->ch_layout.nb_channels <= 5) {
493  profile_level = 0x2B; // AAC Profile, Level 5
494  }
495  }
496 
497  return profile_level;
498 }
499 
500 static int latm_context2config(AVFormatContext *s, const AVCodecParameters *par,
501  char **out)
502 {
503  /* MP4A-LATM
504  * The RTP payload format specification is described in RFC 3016
505  * The encoding specifications are provided in ISO/IEC 14496-3 */
506 
507  uint8_t config_byte[6];
508  int rate_index;
509  char *config;
510 
511  *out = NULL;
512 
513  for (rate_index = 0; rate_index < 16; rate_index++)
514  if (ff_mpeg4audio_sample_rates[rate_index] == par->sample_rate)
515  break;
516  if (rate_index == 16) {
517  av_log(s, AV_LOG_ERROR, "Unsupported sample rate\n");
518  return AVERROR(ENOSYS);
519  }
520 
521  config_byte[0] = 0x40;
522  config_byte[1] = 0;
523  config_byte[2] = 0x20 | rate_index;
524  config_byte[3] = par->ch_layout.nb_channels << 4;
525  config_byte[4] = 0x3f;
526  config_byte[5] = 0xc0;
527 
528  config = av_malloc(6*2+1);
529  if (!config) {
530  av_log(s, AV_LOG_ERROR, "Cannot allocate memory for the config info.\n");
531  return AVERROR(ENOMEM);
532  }
533  ff_data_to_hex(config, config_byte, 6, 1);
534 
535  *out = config;
536  return 0;
537 }
538 
539 static int sdp_write_media_attributes(char *buff, int size, const AVStream *st,
540  int payload_type, AVFormatContext *fmt)
541 {
542  char *config = NULL;
543  const AVCodecParameters *p = st->codecpar;
544  int ret = 0;
545 
546  switch (p->codec_id) {
547  case AV_CODEC_ID_AV1:
548  av_strlcatf(buff, size, "a=rtpmap:%d AV1/90000\r\n", payload_type);
549  if (p->extradata_size) {
550  ret = extradata2psets_av1(fmt, p, &config);
551  if (ret < 0)
552  return ret;
553  av_strlcatf(buff, size, "a=fmtp:%d %s\r\n", payload_type, config);
554  }
555  break;
556  case AV_CODEC_ID_DIRAC:
557  av_strlcatf(buff, size, "a=rtpmap:%d VC2/90000\r\n", payload_type);
558  break;
559  case AV_CODEC_ID_H264: {
560  int mode = 1;
561  if (fmt && fmt->oformat && fmt->oformat->priv_class &&
562  av_opt_flag_is_set(fmt->priv_data, "rtpflags", "h264_mode0"))
563  mode = 0;
564  if (p->extradata_size) {
565  ret = extradata2psets(fmt, p, &config);
566  if (ret < 0)
567  return ret;
568  }
569  av_strlcatf(buff, size, "a=rtpmap:%d H264/90000\r\n"
570  "a=fmtp:%d packetization-mode=%d%s\r\n",
571  payload_type,
572  payload_type, mode, config ? config : "");
573  break;
574  }
575  case AV_CODEC_ID_H261:
576  {
577  const char *pic_fmt = NULL;
578  /* only QCIF and CIF are specified as supported in RFC 4587 */
579  if (p->width == 176 && p->height == 144)
580  pic_fmt = "QCIF=1";
581  else if (p->width == 352 && p->height == 288)
582  pic_fmt = "CIF=1";
583  if (payload_type >= RTP_PT_PRIVATE)
584  av_strlcatf(buff, size, "a=rtpmap:%d H261/90000\r\n", payload_type);
585  if (pic_fmt)
586  av_strlcatf(buff, size, "a=fmtp:%d %s\r\n", payload_type, pic_fmt);
587  break;
588  }
589  case AV_CODEC_ID_H263:
590  case AV_CODEC_ID_H263P:
591  /* a=framesize is required by 3GPP TS 26.234 (PSS). It
592  * actually specifies the maximum video size, but we only know
593  * the current size. This is required for playback on Android
594  * stagefright and on Samsung bada. */
595  if (!fmt || !fmt->oformat->priv_class ||
596  !av_opt_flag_is_set(fmt->priv_data, "rtpflags", "rfc2190") ||
598  av_strlcatf(buff, size, "a=rtpmap:%d H263-2000/90000\r\n"
599  "a=framesize:%d %d-%d\r\n",
600  payload_type,
601  payload_type, p->width, p->height);
602  break;
603  case AV_CODEC_ID_HEVC:
604  if (p->extradata_size) {
605  ret = extradata2psets_hevc(fmt, p, &config);
606  if (ret < 0)
607  return ret;
608  }
609  av_strlcatf(buff, size, "a=rtpmap:%d H265/90000\r\n", payload_type);
610  if (config)
611  av_strlcatf(buff, size, "a=fmtp:%d %s\r\n",
612  payload_type, config);
613  break;
614  case AV_CODEC_ID_MPEG4:
615  if (p->extradata_size) {
616  ret = extradata2config(fmt, p, &config);
617  if (ret < 0)
618  return ret;
619  }
620  av_strlcatf(buff, size, "a=rtpmap:%d MP4V-ES/90000\r\n"
621  "a=fmtp:%d profile-level-id=1%s\r\n",
622  payload_type,
623  payload_type, config ? config : "");
624  break;
625  case AV_CODEC_ID_AAC:
626  if (fmt && fmt->oformat && fmt->oformat->priv_class &&
627  av_opt_flag_is_set(fmt->priv_data, "rtpflags", "latm")) {
628  ret = latm_context2config(fmt, p, &config);
629  if (ret < 0)
630  return ret;
631  av_strlcatf(buff, size, "a=rtpmap:%d MP4A-LATM/%d/%d\r\n"
632  "a=fmtp:%d profile-level-id=%d;cpresent=0;config=%s\r\n",
633  payload_type, p->sample_rate, p->ch_layout.nb_channels,
634  payload_type, latm_context2profilelevel(p), config);
635  } else {
636  if (p->extradata_size) {
637  ret = extradata2config(fmt, p, &config);
638  if (ret < 0)
639  return ret;
640  } else {
641  /* FIXME: maybe we can forge config information based on the
642  * codec parameters...
643  */
644  av_log(fmt, AV_LOG_ERROR, "AAC with no global headers is currently not supported.\n");
645  return AVERROR(ENOSYS);
646  }
647  av_strlcatf(buff, size, "a=rtpmap:%d MPEG4-GENERIC/%d/%d\r\n"
648  "a=fmtp:%d profile-level-id=1;"
649  "mode=AAC-hbr;sizelength=13;indexlength=3;"
650  "indexdeltalength=3%s\r\n",
651  payload_type, p->sample_rate, p->ch_layout.nb_channels,
652  payload_type, config);
653  }
654  break;
656  if (payload_type >= RTP_PT_PRIVATE)
657  av_strlcatf(buff, size, "a=rtpmap:%d L16/%d/%d\r\n",
658  payload_type,
660  break;
662  if (payload_type >= RTP_PT_PRIVATE)
663  av_strlcatf(buff, size, "a=rtpmap:%d L24/%d/%d\r\n",
664  payload_type,
666  break;
668  if (payload_type >= RTP_PT_PRIVATE)
669  av_strlcatf(buff, size, "a=rtpmap:%d PCMU/%d/%d\r\n",
670  payload_type,
672  break;
674  if (payload_type >= RTP_PT_PRIVATE)
675  av_strlcatf(buff, size, "a=rtpmap:%d PCMA/%d/%d\r\n",
676  payload_type,
678  break;
679  case AV_CODEC_ID_AMR_NB:
680  av_strlcatf(buff, size, "a=rtpmap:%d AMR/%d/%d\r\n"
681  "a=fmtp:%d octet-align=1\r\n",
682  payload_type, p->sample_rate, p->ch_layout.nb_channels,
683  payload_type);
684  break;
685  case AV_CODEC_ID_AMR_WB:
686  av_strlcatf(buff, size, "a=rtpmap:%d AMR-WB/%d/%d\r\n"
687  "a=fmtp:%d octet-align=1\r\n",
688  payload_type, p->sample_rate, p->ch_layout.nb_channels,
689  payload_type);
690  break;
691  case AV_CODEC_ID_VORBIS:
692  if (p->extradata_size)
693  ret = xiph_extradata2config(fmt, p, &config);
694  else {
695  av_log(fmt, AV_LOG_ERROR, "Vorbis configuration info missing\n");
697  }
698  if (ret < 0)
699  return ret;
700 
701  av_strlcatf(buff, size, "a=rtpmap:%d vorbis/%d/%d\r\n"
702  "a=fmtp:%d configuration=%s\r\n",
703  payload_type, p->sample_rate, p->ch_layout.nb_channels,
704  payload_type, config);
705  break;
706  case AV_CODEC_ID_THEORA: {
707  const char *pix_fmt;
708  switch (p->format) {
709  case AV_PIX_FMT_YUV420P:
710  pix_fmt = "YCbCr-4:2:0";
711  break;
712  case AV_PIX_FMT_YUV422P:
713  pix_fmt = "YCbCr-4:2:2";
714  break;
715  case AV_PIX_FMT_YUV444P:
716  pix_fmt = "YCbCr-4:4:4";
717  break;
718  default:
719  av_log(fmt, AV_LOG_ERROR, "Unsupported pixel format.\n");
720  return AVERROR(ENOSYS);
721  }
722 
723  if (p->extradata_size)
724  ret = xiph_extradata2config(fmt, p, &config);
725  else {
726  av_log(fmt, AV_LOG_ERROR, "Theora configuration info missing\n");
728  }
729  if (ret < 0)
730  return ret;
731 
732  av_strlcatf(buff, size, "a=rtpmap:%d theora/90000\r\n"
733  "a=fmtp:%d delivery-method=inline; "
734  "width=%d; height=%d; sampling=%s; "
735  "configuration=%s\r\n",
736  payload_type, payload_type,
737  p->width, p->height, pix_fmt, config);
738  break;
739  }
741  case AV_CODEC_ID_RAWVIDEO: {
742  const char *pix_fmt;
743  int bit_depth = 8;
744 
745  switch (p->format) {
746  case AV_PIX_FMT_UYVY422:
747  pix_fmt = "YCbCr-4:2:2";
748  break;
750  pix_fmt = "YCbCr-4:2:2";
751  bit_depth = 10;
752  break;
753  case AV_PIX_FMT_YUV420P:
754  pix_fmt = "YCbCr-4:2:0";
755  break;
756  case AV_PIX_FMT_RGB24:
757  pix_fmt = "RGB";
758  break;
759  case AV_PIX_FMT_BGR24:
760  pix_fmt = "BGR";
761  break;
762  default:
763  av_log(fmt, AV_LOG_ERROR, "Unsupported pixel format.\n");
764  return AVERROR(ENOSYS);
765  }
766 
767  av_strlcatf(buff, size, "a=rtpmap:%d raw/90000\r\n"
768  "a=fmtp:%d sampling=%s; "
769  "width=%d; height=%d; "
770  "depth=%d",
771  payload_type, payload_type,
772  pix_fmt, p->width, p->height, bit_depth);
774  av_strlcatf(buff, size, "; interlace");
775  av_strlcatf(buff, size, "\r\n");
776  break;
777  }
778 
779  case AV_CODEC_ID_VP8:
780  av_strlcatf(buff, size, "a=rtpmap:%d VP8/90000\r\n",
781  payload_type);
782  break;
783  case AV_CODEC_ID_VP9:
784  av_strlcatf(buff, size, "a=rtpmap:%d VP9/90000\r\n",
785  payload_type);
786  break;
787  case AV_CODEC_ID_MJPEG:
788  if (payload_type >= RTP_PT_PRIVATE)
789  av_strlcatf(buff, size, "a=rtpmap:%d JPEG/90000\r\n",
790  payload_type);
791  break;
793  if (payload_type >= RTP_PT_PRIVATE)
794  av_strlcatf(buff, size, "a=rtpmap:%d G722/%d/%d\r\n",
795  payload_type,
796  8000, p->ch_layout.nb_channels);
797  break;
798  case AV_CODEC_ID_ADPCM_G726: {
799  if (payload_type >= RTP_PT_PRIVATE)
800  av_strlcatf(buff, size, "a=rtpmap:%d AAL2-G726-%d/%d\r\n",
801  payload_type,
803  p->sample_rate);
804  break;
805  }
807  if (payload_type >= RTP_PT_PRIVATE)
808  av_strlcatf(buff, size, "a=rtpmap:%d G726-%d/%d\r\n",
809  payload_type,
811  p->sample_rate);
812  break;
813  }
814  case AV_CODEC_ID_ILBC:
815  av_strlcatf(buff, size, "a=rtpmap:%d iLBC/%d\r\n"
816  "a=fmtp:%d mode=%d\r\n",
817  payload_type, p->sample_rate,
818  payload_type, p->block_align == 38 ? 20 : 30);
819  break;
820  case AV_CODEC_ID_SPEEX:
821  av_strlcatf(buff, size, "a=rtpmap:%d speex/%d\r\n",
822  payload_type, p->sample_rate);
823  break;
824  case AV_CODEC_ID_OPUS:
825  /* The opus RTP draft says that all opus streams MUST be declared
826  as stereo, to avoid negotiation failures. The actual number of
827  channels can change on a packet-by-packet basis. The number of
828  channels a receiver prefers to receive or a sender plans to send
829  can be declared via fmtp parameters (both default to mono), but
830  receivers MUST be able to receive and process stereo packets. */
831  av_strlcatf(buff, size, "a=rtpmap:%d opus/48000/2\r\n",
832  payload_type);
833  if (p->ch_layout.nb_channels == 2) {
834  av_strlcatf(buff, size, "a=fmtp:%d sprop-stereo=1\r\n",
835  payload_type);
836  }
837  break;
838  default:
839  /* Nothing special to do here... */
840  break;
841  }
842 
843  av_free(config);
844 
845  return 0;
846 }
847 
848 int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx,
849  const char *dest_addr, const char *dest_type,
850  int port, int ttl, AVFormatContext *fmt)
851 {
852  const AVCodecParameters *p = st->codecpar;
853  const char *type;
854  int payload_type;
855 
856  payload_type = ff_rtp_get_payload_type(fmt, st->codecpar, idx);
857 
858  switch (p->codec_type) {
859  case AVMEDIA_TYPE_VIDEO : type = "video" ; break;
860  case AVMEDIA_TYPE_AUDIO : type = "audio" ; break;
861  case AVMEDIA_TYPE_SUBTITLE: type = "text" ; break;
862  default : type = "application"; break;
863  }
864 
865  av_strlcatf(buff, size, "m=%s %d RTP/AVP %d\r\n", type, port, payload_type);
866  sdp_write_address(buff, size, dest_addr, dest_type, ttl);
867  if (p->bit_rate) {
868  av_strlcatf(buff, size, "b=AS:%"PRId64"\r\n", p->bit_rate / 1000);
869  }
870 
871  return sdp_write_media_attributes(buff, size, st, payload_type, fmt);
872 }
873 
874 int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
875 {
876  AVDictionaryEntry *title = av_dict_get(ac[0]->metadata, "title", NULL, 0);
877  struct sdp_session_level s = { 0 };
878  int i, j, port, ttl, is_multicast, index = 0;
879  char dst[32], dst_type[5];
880 
881  memset(buf, 0, size);
882  s.user = "-";
883  s.src_addr = "127.0.0.1"; /* FIXME: Properly set this */
884  s.src_type = "IP4";
885  s.name = title ? title->value : "No Name";
886 
887  port = 0;
888  ttl = 0;
889  if (n_files == 1) {
890  port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->url ? ac[0]->url : "");
891  is_multicast = resolve_destination(dst, sizeof(dst), dst_type,
892  sizeof(dst_type));
893  if (!is_multicast)
894  ttl = 0;
895  if (dst[0]) {
896  s.dst_addr = dst;
897  s.dst_type = dst_type;
898  s.ttl = ttl;
899  if (!strcmp(dst_type, "IP6")) {
900  s.src_addr = "::1";
901  s.src_type = "IP6";
902  }
903  }
904  }
905  sdp_write_header(buf, size, &s);
906 
907  dst[0] = 0;
908  for (i = 0; i < n_files; i++) {
909  if (n_files != 1) {
910  port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->url ? ac[i]->url : "");
911  is_multicast = resolve_destination(dst, sizeof(dst), dst_type,
912  sizeof(dst_type));
913  if (!is_multicast)
914  ttl = 0;
915  }
916  for (j = 0; j < ac[i]->nb_streams; j++) {
917  int ret = ff_sdp_write_media(buf, size, ac[i]->streams[j], index++,
918  dst[0] ? dst : NULL, dst_type,
919  (port > 0) ? port + j * 2 : 0,
920  ttl, ac[i]);
921  if (ret < 0)
922  return ret;
923 
924  if (port <= 0) {
925  av_strlcatf(buf, size,
926  "a=control:streamid=%d\r\n", i + j);
927  }
928  if (ac[i]->pb && ac[i]->pb->av_class) {
929  uint8_t *crypto_suite = NULL, *crypto_params = NULL;
930  av_opt_get(ac[i]->pb, "srtp_out_suite", AV_OPT_SEARCH_CHILDREN,
931  &crypto_suite);
932  av_opt_get(ac[i]->pb, "srtp_out_params", AV_OPT_SEARCH_CHILDREN,
933  &crypto_params);
934  if (crypto_suite && crypto_suite[0])
935  av_strlcatf(buf, size,
936  "a=crypto:1 %s inline:%s\r\n",
937  crypto_suite, crypto_params);
938  av_free(crypto_suite);
939  av_free(crypto_params);
940  }
941  }
942  }
943 
944  return 0;
945 }
946 #else
947 int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
948 {
949  return AVERROR(ENOSYS);
950 }
951 
952 int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx,
953  const char *dest_addr, const char *dest_type,
954  int port, int ttl, AVFormatContext *fmt)
955 {
956  return AVERROR(ENOSYS);
957 }
958 #endif
AV_OPT_SEARCH_CHILDREN
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:605
AVMEDIA_TYPE_SUBTITLE
@ AVMEDIA_TYPE_SUBTITLE
Definition: avutil.h:204
AVCodecParameters::extradata
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: codec_par.h:69
name
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option name
Definition: writing_filters.txt:88
r
const char * r
Definition: vf_curves.c:127
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
av_find_info_tag
int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
Attempt to find a specific tag in a URL.
Definition: parseutils.c:756
av_opt_flag_is_set
int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name)
Check whether a particular flag is set in a flags field.
Definition: opt.c:1399
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
hevc.h
out
FILE * out
Definition: movenc.c:55
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
AV_FIELD_PROGRESSIVE
@ AV_FIELD_PROGRESSIVE
Definition: defs.h:202
AV_CODEC_ID_DIRAC
@ AV_CODEC_ID_DIRAC
Definition: codec_id.h:168
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:65
AV_CODEC_ID_MPEG4
@ AV_CODEC_ID_MPEG4
Definition: codec_id.h:64
mode
Definition: swscale.c:56
AV_CODEC_ID_AMR_NB
@ AV_CODEC_ID_AMR_NB
Definition: codec_id.h:429
AV_CODEC_ID_ADPCM_G722
@ AV_CODEC_ID_ADPCM_G722
Definition: codec_id.h:402
AV_PIX_FMT_BGR24
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
Definition: pixfmt.h:76
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:329
bit_depth
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
Definition: af_astats.c:246
av_strlcatf
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
Definition: avstring.c:103
tf_sess_config.config
config
Definition: tf_sess_config.py:33
AV_CODEC_ID_AMR_WB
@ AV_CODEC_ID_AMR_WB
Definition: codec_id.h:430
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:31
AV_CODEC_ID_H261
@ AV_CODEC_ID_H261
Definition: codec_id.h:55
xiph.h
freeaddrinfo
#define freeaddrinfo
Definition: network.h:218
mpeg4audio.h
AV_CODEC_ID_SPEEX
@ AV_CODEC_ID_SPEEX
Definition: codec_id.h:483
AV_CODEC_ID_PCM_S16BE
@ AV_CODEC_ID_PCM_S16BE
Definition: codec_id.h:336
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
ff_data_to_hex
char * ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase)
Write hexadecimal string corresponding to given binary data.
Definition: utils.c:451
avio_close_dyn_buf
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
Definition: aviobuf.c:1407
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:209
av_dict_get
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:60
avio_open_dyn_buf
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
Definition: aviobuf.c:1362
AV_CODEC_ID_ADPCM_G726
@ AV_CODEC_ID_ADPCM_G726
Definition: codec_id.h:385
s
#define s(width, name)
Definition: cbs_vp9.c:198
pix_fmt
static enum AVPixelFormat pix_fmt
Definition: demux_decode.c:41
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AV_CODEC_ID_VP9
@ AV_CODEC_ID_VP9
Definition: codec_id.h:222
AVCodecParameters::width
int width
Video only.
Definition: codec_par.h:134
AV_CODEC_ID_PCM_MULAW
@ AV_CODEC_ID_PCM_MULAW
Definition: codec_id.h:341
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:79
AVFormatContext
Format I/O context.
Definition: avformat.h:1265
AV_CODEC_ID_PCM_ALAW
@ AV_CODEC_ID_PCM_ALAW
Definition: codec_id.h:342
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:768
RTP_PT_PRIVATE
#define RTP_PT_PRIVATE
Definition: rtp.h:79
PTRDIFF_SPECIFIER
#define PTRDIFF_SPECIFIER
Definition: internal.h:128
NULL
#define NULL
Definition: coverity.c:32
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:284
ff_isom_write_hvcc
int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data, int size, int ps_array_completeness, void *logctx)
Writes HEVC extradata (parameter sets and declarative SEI NAL units with nuh_layer_id == 0,...
Definition: hevc.c:1401
avc.h
parseutils.h
ff_is_multicast_address
int ff_is_multicast_address(struct sockaddr *addr)
Definition: network.c:150
AV1SequenceParameters::tier
uint8_t tier
Definition: av1.h:31
AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:529
AVOutputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:535
AVCodecParameters::ch_layout
AVChannelLayout ch_layout
Audio only.
Definition: codec_par.h:180
base64.h
index
int index
Definition: gxfenc.c:90
AVCodecParameters::sample_rate
int sample_rate
Audio only.
Definition: codec_par.h:184
AVCodecParameters::extradata_size
int extradata_size
Size of the extradata content in bytes.
Definition: codec_par.h:73
AVFormatContext::nb_streams
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition: avformat.h:1321
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:450
NI_NUMERICHOST
#define NI_NUMERICHOST
Definition: network.h:195
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
AV_PIX_FMT_RGB24
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
Definition: pixfmt.h:75
RTP_XIPH_IDENT
#define RTP_XIPH_IDENT
Definition: rtp.h:91
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
start_time
static int64_t start_time
Definition: ffplay.c:326
AV_CODEC_ID_H263
@ AV_CODEC_ID_H263
Definition: codec_id.h:56
size
int size
Definition: twinvq_data.h:10344
AV_CODEC_ID_OPUS
@ AV_CODEC_ID_OPUS
Definition: codec_id.h:508
av_sdp_create
int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size)
Generate an SDP for an RTP session.
Definition: sdp.c:947
version
version
Definition: libkvazaar.c:315
AV_CODEC_ID_BITPACKED
@ AV_CODEC_ID_BITPACKED
Definition: codec_id.h:285
rtp.h
AV1SequenceParameters::profile
uint8_t profile
Definition: av1.h:29
getaddrinfo
#define getaddrinfo
Definition: network.h:217
AV_CODEC_ID_MJPEG
@ AV_CODEC_ID_MJPEG
Definition: codec_id.h:59
AV_BASE64_SIZE
#define AV_BASE64_SIZE(x)
Calculate the output size needed to base64-encode x bytes to a null-terminated string.
Definition: base64.h:66
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AV_CODEC_ID_THEORA
@ AV_CODEC_ID_THEORA
Definition: codec_id.h:82
getnameinfo
#define getnameinfo
Definition: network.h:219
AVCodecParameters::height
int height
Definition: codec_par.h:135
AVCodecParameters::block_align
int block_align
Audio only.
Definition: codec_par.h:191
MAX_EXTRADATA_SIZE
#define MAX_EXTRADATA_SIZE
Definition: latmenc.c:35
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:228
AV1SequenceParameters::level
uint8_t level
Definition: av1.h:30
av_url_split
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
Definition: utils.c:354
AV_STRINGIFY
#define AV_STRINGIFY(s)
Definition: macros.h:66
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
len
int len
Definition: vorbis_enc_data.h:426
nal.h
AVCodecParameters::field_order
enum AVFieldOrder field_order
Video only.
Definition: codec_par.h:161
version.h
ff_av1_parse_seq_header
int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int size)
Parses a Sequence Header from the the provided buffer.
Definition: av1.c:336
LIBAVFORMAT_VERSION
#define LIBAVFORMAT_VERSION
Definition: version.h:40
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:745
AVFormatContext::oformat
const struct AVOutputFormat * oformat
The output container format.
Definition: avformat.h:1284
av_strlcat
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
Definition: avstring.c:95
sps
static int FUNC() sps(CodedBitstreamContext *ctx, RWContext *rw, H264RawSPS *current)
Definition: cbs_h264_syntax_template.c:260
pos
unsigned int pos
Definition: spdifenc.c:414
avformat.h
dict.h
network.h
id
enum AVCodecID id
Definition: dts2pts.c:367
AV_PIX_FMT_UYVY422
@ AV_PIX_FMT_UYVY422
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
Definition: pixfmt.h:88
AV_CODEC_ID_H263P
@ AV_CODEC_ID_H263P
Definition: codec_id.h:71
AV_CODEC_ID_ADPCM_G726LE
@ AV_CODEC_ID_ADPCM_G726LE
Definition: codec_id.h:409
ff_avc_write_annexb_extradata
int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size)
Definition: avc.c:144
ff_sdp_write_media
int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx, const char *dest_addr, const char *dest_type, int port, int ttl, AVFormatContext *fmt)
Append the media-specific SDP fragment for the media stream c to the buffer buff.
Definition: sdp.c:952
av_base64_encode
char * av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size)
Encode data to base64 and null-terminate.
Definition: base64.c:147
avpriv_split_xiph_headers
int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, int first_header_size, const uint8_t *header_start[3], int header_len[3])
Split a single extradata buffer into the three headers that most Xiph codecs use.
Definition: xiph.c:26
AV_PIX_FMT_YUV444P
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:78
ff_mpeg4audio_sample_rates
const int ff_mpeg4audio_sample_rates[16]
Definition: mpeg4audio_sample_rates.h:26
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AVCodecParameters::bits_per_coded_sample
int bits_per_coded_sample
The number of bits per sample in the codedwords.
Definition: codec_par.h:110
AV_PIX_FMT_YUV422P
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:77
mem.h
AVCodecParameters::format
int format
Definition: codec_par.h:92
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVDictionaryEntry
Definition: dict.h:89
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:55
AV_CODEC_ID_ILBC
@ AV_CODEC_ID_ILBC
Definition: codec_id.h:507
AV_CODEC_ID_VP8
@ AV_CODEC_ID_VP8
Definition: codec_id.h:192
av_strlcpy
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
Definition: avstring.c:85
AVCodecParameters::bit_rate
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition: codec_par.h:97
av_opt_get
int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
Definition: opt.c:1215
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
av1.h
AV_CODEC_ID_VORBIS
@ AV_CODEC_ID_VORBIS
Definition: codec_id.h:453
AV1SequenceParameters
Definition: av1.h:28
AVDictionaryEntry::value
char * value
Definition: dict.h:91
avstring.h
addrinfo
Definition: network.h:137
ff_nal_find_startcode
const uint8_t * ff_nal_find_startcode(const uint8_t *p, const uint8_t *end)
Definition: nal.c:68
AVFormatContext::priv_data
void * priv_data
Format private data.
Definition: avformat.h:1293
AV_CODEC_ID_PCM_S24BE
@ AV_CODEC_ID_PCM_S24BE
Definition: codec_id.h:348
ff_rtp_get_payload_type
int ff_rtp_get_payload_type(const AVFormatContext *fmt, const AVCodecParameters *par, int idx)
Return the payload type for a given stream used in the given format context.
Definition: rtp.c:93
AVIOContext::av_class
const AVClass * av_class
A class for private options.
Definition: avio.h:173
AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:98