FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
mpegts.c
Go to the documentation of this file.
1 /*
2  * MPEG2 transport stream (aka DVB) demuxer
3  * Copyright (c) 2002-2003 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "libavutil/buffer.h"
23 #include "libavutil/crc.h"
24 #include "libavutil/intreadwrite.h"
25 #include "libavutil/log.h"
26 #include "libavutil/dict.h"
27 #include "libavutil/mathematics.h"
28 #include "libavutil/opt.h"
29 #include "libavutil/avassert.h"
30 #include "libavcodec/bytestream.h"
31 #include "libavcodec/get_bits.h"
32 #include "libavcodec/mathops.h"
33 #include "avformat.h"
34 #include "mpegts.h"
35 #include "internal.h"
36 #include "avio_internal.h"
37 #include "seek.h"
38 #include "mpeg.h"
39 #include "isom.h"
40 
41 /* maximum size in which we look for synchronisation if
42  synchronisation is lost */
43 #define MAX_RESYNC_SIZE 65536
44 
45 #define MAX_PES_PAYLOAD 200*1024
46 
47 #define MAX_MP4_DESCR_COUNT 16
48 
52 };
53 
54 typedef struct MpegTSFilter MpegTSFilter;
55 
56 typedef int PESCallback(MpegTSFilter *f, const uint8_t *buf, int len, int is_start, int64_t pos, int64_t cur_pcr);
57 
58 typedef struct MpegTSPESFilter {
60  void *opaque;
62 
63 typedef void SectionCallback(MpegTSFilter *f, const uint8_t *buf, int len);
64 
65 typedef void SetServiceCallback(void *opaque, int ret);
66 
67 typedef struct MpegTSSectionFilter {
71  unsigned int check_crc:1;
72  unsigned int end_of_section_reached:1;
74  void *opaque;
76 
77 struct MpegTSFilter {
78  int pid;
79  int es_id;
80  int last_cc; /* last cc code (-1 if first packet) */
82  union {
85  } u;
86 };
87 
88 #define MAX_PIDS_PER_PROGRAM 64
89 struct Program {
90  unsigned int id; //program id/service id
91  unsigned int nb_pids;
92  unsigned int pids[MAX_PIDS_PER_PROGRAM];
93 
94  /** have we found pmt for this program */
95  int pmt_found;
96 };
97 
98 struct MpegTSContext {
99  const AVClass *class;
100  /* user data */
102  /** raw packet size, including FEC if present */
104 
105  int size_stat[3];
107 #define SIZE_STAT_THRESHOLD 10
108 
109  int64_t pos47_full;
110 
111  /** if true, all pids are analyzed to find streams */
113 
114  /** compute exact PCR for each transport stream packet */
116 
117  /** fix dvb teletext pts */
119 
120  int64_t cur_pcr; /**< used to estimate the exact PCR */
121  int pcr_incr; /**< used to estimate the exact PCR */
122 
123  /* data needed to handle file based ts */
124  /** stop parsing loop */
126  /** packet containing Audio/Video data */
128  /** to detect seek */
129  int64_t last_pos;
130 
131  /******************************************/
132  /* private mpegts data */
133  /* scan context */
134  /** structure to keep track of Program->pids mapping */
135  unsigned int nb_prg;
136  struct Program *prg;
137 
139 
140  /** filters for various streams specified by PMT + for the PAT and PMT */
143 };
144 
145 static const AVOption mpegtsraw_options[] = {
146  {"compute_pcr", "Compute exact PCR for each transport stream packet.", offsetof(MpegTSContext, mpeg2ts_compute_pcr), AV_OPT_TYPE_INT,
147  {.i64 = 0}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
148  {"ts_packetsize", "Output option carrying the raw packet size.", offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT,
150  { NULL },
151 };
152 
153 static const AVClass mpegtsraw_class = {
154  .class_name = "mpegtsraw demuxer",
155  .item_name = av_default_item_name,
156  .option = mpegtsraw_options,
157  .version = LIBAVUTIL_VERSION_INT,
158 };
159 
160 static const AVOption mpegts_options[] = {
161  {"fix_teletext_pts", "Try to fix pts values of dvb teletext streams.", offsetof(MpegTSContext, fix_teletext_pts), AV_OPT_TYPE_INT,
162  {.i64 = 1}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
163  {"ts_packetsize", "Output option carrying the raw packet size.", offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT,
165  { NULL },
166 };
167 
168 static const AVClass mpegts_class = {
169  .class_name = "mpegts demuxer",
170  .item_name = av_default_item_name,
171  .option = mpegts_options,
172  .version = LIBAVUTIL_VERSION_INT,
173 };
174 
175 /* TS stream handling */
176 
183 };
184 
185 /* enough for PES header + length */
186 #define PES_START_SIZE 6
187 #define PES_HEADER_SIZE 9
188 #define MAX_PES_HEADER_SIZE (9 + 255)
189 
190 typedef struct PESContext {
191  int pid;
192  int pcr_pid; /**< if -1 then all packets containing PCR are considered */
197  AVStream *sub_st; /**< stream for the embedded AC3 stream in HDMV TrueHD */
199  /* used to get the format */
201  int flags; /**< copied to the AVPacket flags */
205  int64_t pts, dts;
206  int64_t ts_packet_pos; /**< position of first TS packet of this PES packet */
210  int64_t last_pcr;
211 } PESContext;
212 
214 
215 static struct Program * get_program(MpegTSContext *ts, unsigned int programid)
216 {
217  int i;
218  for(i=0; i<ts->nb_prg; i++) {
219  if(ts->prg[i].id == programid) {
220  return &ts->prg[i];
221  }
222  }
223  return NULL;
224 }
225 
226 static void clear_avprogram(MpegTSContext *ts, unsigned int programid)
227 {
228  AVProgram *prg = NULL;
229  int i;
230  for(i=0; i<ts->stream->nb_programs; i++)
231  if(ts->stream->programs[i]->id == programid){
232  prg = ts->stream->programs[i];
233  break;
234  }
235  if (!prg)
236  return;
237  prg->nb_stream_indexes = 0;
238 }
239 
240 static void clear_program(MpegTSContext *ts, unsigned int programid)
241 {
242  int i;
243 
244  clear_avprogram(ts, programid);
245  for(i=0; i<ts->nb_prg; i++)
246  if(ts->prg[i].id == programid) {
247  ts->prg[i].nb_pids = 0;
248  ts->prg[i].pmt_found = 0;
249  }
250 }
251 
253 {
254  av_freep(&ts->prg);
255  ts->nb_prg=0;
256 }
257 
258 static void add_pat_entry(MpegTSContext *ts, unsigned int programid)
259 {
260  struct Program *p;
261  if (av_reallocp_array(&ts->prg, ts->nb_prg + 1, sizeof(*ts->prg)) < 0) {
262  ts->nb_prg = 0;
263  return;
264  }
265  p = &ts->prg[ts->nb_prg];
266  p->id = programid;
267  p->nb_pids = 0;
268  p->pmt_found = 0;
269  ts->nb_prg++;
270 }
271 
272 static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned int pid)
273 {
274  struct Program *p = get_program(ts, programid);
275  if(!p)
276  return;
277 
278  if(p->nb_pids >= MAX_PIDS_PER_PROGRAM)
279  return;
280  p->pids[p->nb_pids++] = pid;
281 }
282 
283 static void set_pmt_found(MpegTSContext *ts, unsigned int programid)
284 {
285  struct Program *p = get_program(ts, programid);
286  if(!p)
287  return;
288 
289  p->pmt_found = 1;
290 }
291 
292 static void set_pcr_pid(AVFormatContext *s, unsigned int programid, unsigned int pid)
293 {
294  int i;
295  for(i=0; i<s->nb_programs; i++) {
296  if(s->programs[i]->id == programid) {
297  s->programs[i]->pcr_pid = pid;
298  break;
299  }
300  }
301 }
302 
303 /**
304  * @brief discard_pid() decides if the pid is to be discarded according
305  * to caller's programs selection
306  * @param ts : - TS context
307  * @param pid : - pid
308  * @return 1 if the pid is only comprised in programs that have .discard=AVDISCARD_ALL
309  * 0 otherwise
310  */
311 static int discard_pid(MpegTSContext *ts, unsigned int pid)
312 {
313  int i, j, k;
314  int used = 0, discarded = 0;
315  struct Program *p;
316 
317  /* If none of the programs have .discard=AVDISCARD_ALL then there's
318  * no way we have to discard this packet
319  */
320  for (k = 0; k < ts->stream->nb_programs; k++) {
321  if (ts->stream->programs[k]->discard == AVDISCARD_ALL)
322  break;
323  }
324  if (k == ts->stream->nb_programs)
325  return 0;
326 
327  for(i=0; i<ts->nb_prg; i++) {
328  p = &ts->prg[i];
329  for(j=0; j<p->nb_pids; j++) {
330  if(p->pids[j] != pid)
331  continue;
332  //is program with id p->id set to be discarded?
333  for(k=0; k<ts->stream->nb_programs; k++) {
334  if(ts->stream->programs[k]->id == p->id) {
335  if(ts->stream->programs[k]->discard == AVDISCARD_ALL)
336  discarded++;
337  else
338  used++;
339  }
340  }
341  }
342  }
343 
344  return !used && discarded;
345 }
346 
347 /**
348  * Assemble PES packets out of TS packets, and then call the "section_cb"
349  * function when they are complete.
350  */
352  const uint8_t *buf, int buf_size, int is_start)
353 {
354  MpegTSContext *ts = s->priv_data;
355  MpegTSSectionFilter *tss = &tss1->u.section_filter;
356  int len;
357 
358  if (is_start) {
359  memcpy(tss->section_buf, buf, buf_size);
360  tss->section_index = buf_size;
361  tss->section_h_size = -1;
362  tss->end_of_section_reached = 0;
363  } else {
364  if (tss->end_of_section_reached)
365  return;
366  len = 4096 - tss->section_index;
367  if (buf_size < len)
368  len = buf_size;
369  memcpy(tss->section_buf + tss->section_index, buf, len);
370  tss->section_index += len;
371  }
372 
373  /* compute section length if possible */
374  if (tss->section_h_size == -1 && tss->section_index >= 3) {
375  len = (AV_RB16(tss->section_buf + 1) & 0xfff) + 3;
376  if (len > 4096)
377  return;
378  tss->section_h_size = len;
379  }
380 
381  if (tss->section_h_size != -1 && tss->section_index >= tss->section_h_size) {
382  int crc_valid = 1;
383  tss->end_of_section_reached = 1;
384 
385  if (tss->check_crc){
386  crc_valid = !av_crc(av_crc_get_table(AV_CRC_32_IEEE), -1, tss->section_buf, tss->section_h_size);
387  if (crc_valid){
388  ts->crc_validity[ tss1->pid ] = 100;
389  }else if(ts->crc_validity[ tss1->pid ] > -10){
390  ts->crc_validity[ tss1->pid ]--;
391  }else
392  crc_valid = 2;
393  }
394  if (crc_valid)
395  tss->section_cb(tss1, tss->section_buf, tss->section_h_size);
396  }
397 }
398 
400  SectionCallback *section_cb, void *opaque,
401  int check_crc)
402 
403 {
405  MpegTSSectionFilter *sec;
406 
407  av_dlog(ts->stream, "Filter: pid=0x%x\n", pid);
408 
409  if (pid >= NB_PID_MAX || ts->pids[pid])
410  return NULL;
411  filter = av_mallocz(sizeof(MpegTSFilter));
412  if (!filter)
413  return NULL;
414  ts->pids[pid] = filter;
415  filter->type = MPEGTS_SECTION;
416  filter->pid = pid;
417  filter->es_id = -1;
418  filter->last_cc = -1;
419  sec = &filter->u.section_filter;
420  sec->section_cb = section_cb;
421  sec->opaque = opaque;
423  sec->check_crc = check_crc;
424  if (!sec->section_buf) {
425  av_free(filter);
426  return NULL;
427  }
428  return filter;
429 }
430 
431 static MpegTSFilter *mpegts_open_pes_filter(MpegTSContext *ts, unsigned int pid,
432  PESCallback *pes_cb,
433  void *opaque)
434 {
436  MpegTSPESFilter *pes;
437 
438  if (pid >= NB_PID_MAX || ts->pids[pid])
439  return NULL;
440  filter = av_mallocz(sizeof(MpegTSFilter));
441  if (!filter)
442  return NULL;
443  ts->pids[pid] = filter;
444  filter->type = MPEGTS_PES;
445  filter->pid = pid;
446  filter->es_id = -1;
447  filter->last_cc = -1;
448  pes = &filter->u.pes_filter;
449  pes->pes_cb = pes_cb;
450  pes->opaque = opaque;
451  return filter;
452 }
453 
455 {
456  int pid;
457 
458  pid = filter->pid;
459  if (filter->type == MPEGTS_SECTION)
461  else if (filter->type == MPEGTS_PES) {
462  PESContext *pes = filter->u.pes_filter.opaque;
463  av_buffer_unref(&pes->buffer);
464  /* referenced private data will be freed later in
465  * avformat_close_input */
466  if (!((PESContext *)filter->u.pes_filter.opaque)->st) {
467  av_freep(&filter->u.pes_filter.opaque);
468  }
469  }
470 
471  av_free(filter);
472  ts->pids[pid] = NULL;
473 }
474 
475 static int analyze(const uint8_t *buf, int size, int packet_size, int *index){
476  int stat[TS_MAX_PACKET_SIZE];
477  int i;
478  int best_score=0;
479 
480  memset(stat, 0, packet_size*sizeof(*stat));
481 
482  for(i=0; i<size-3; i++){
483  if(buf[i] == 0x47 && !(buf[i+1] & 0x80) && buf[i+3] != 0x47){
484  int x = i % packet_size;
485  stat[x]++;
486  if(stat[x] > best_score){
487  best_score= stat[x];
488  if(index) *index= x;
489  }
490  }
491  }
492 
493  return best_score;
494 }
495 
496 /* autodetect fec presence. Must have at least 1024 bytes */
497 static int get_packet_size(const uint8_t *buf, int size)
498 {
499  int score, fec_score, dvhs_score;
500 
501  if (size < (TS_FEC_PACKET_SIZE * 5 + 1))
502  return -1;
503 
504  score = analyze(buf, size, TS_PACKET_SIZE, NULL);
505  dvhs_score = analyze(buf, size, TS_DVHS_PACKET_SIZE, NULL);
506  fec_score= analyze(buf, size, TS_FEC_PACKET_SIZE, NULL);
507  av_dlog(NULL, "score: %d, dvhs_score: %d, fec_score: %d \n",
508  score, dvhs_score, fec_score);
509 
510  if (score > fec_score && score > dvhs_score) return TS_PACKET_SIZE;
511  else if(dvhs_score > score && dvhs_score > fec_score) return TS_DVHS_PACKET_SIZE;
512  else if(score < fec_score && dvhs_score < fec_score) return TS_FEC_PACKET_SIZE;
513  else return -1;
514 }
515 
516 typedef struct SectionHeader {
518  uint16_t id;
522 } SectionHeader;
523 
524 static inline int get8(const uint8_t **pp, const uint8_t *p_end)
525 {
526  const uint8_t *p;
527  int c;
528 
529  p = *pp;
530  if (p >= p_end)
531  return -1;
532  c = *p++;
533  *pp = p;
534  return c;
535 }
536 
537 static inline int get16(const uint8_t **pp, const uint8_t *p_end)
538 {
539  const uint8_t *p;
540  int c;
541 
542  p = *pp;
543  if ((p + 1) >= p_end)
544  return -1;
545  c = AV_RB16(p);
546  p += 2;
547  *pp = p;
548  return c;
549 }
550 
551 /* read and allocate a DVB string preceded by its length */
552 static char *getstr8(const uint8_t **pp, const uint8_t *p_end)
553 {
554  int len;
555  const uint8_t *p;
556  char *str;
557 
558  p = *pp;
559  len = get8(&p, p_end);
560  if (len < 0)
561  return NULL;
562  if ((p + len) > p_end)
563  return NULL;
564  str = av_malloc(len + 1);
565  if (!str)
566  return NULL;
567  memcpy(str, p, len);
568  str[len] = '\0';
569  p += len;
570  *pp = p;
571  return str;
572 }
573 
575  const uint8_t **pp, const uint8_t *p_end)
576 {
577  int val;
578 
579  val = get8(pp, p_end);
580  if (val < 0)
581  return -1;
582  h->tid = val;
583  *pp += 2;
584  val = get16(pp, p_end);
585  if (val < 0)
586  return -1;
587  h->id = val;
588  val = get8(pp, p_end);
589  if (val < 0)
590  return -1;
591  h->version = (val >> 1) & 0x1f;
592  val = get8(pp, p_end);
593  if (val < 0)
594  return -1;
595  h->sec_num = val;
596  val = get8(pp, p_end);
597  if (val < 0)
598  return -1;
599  h->last_sec_num = val;
600  return 0;
601 }
602 
603 typedef struct {
604  uint32_t stream_type;
607 } StreamType;
608 
609 static const StreamType ISO_types[] = {
616  /* Makito encoder sets stream type 0x11 for AAC,
617  * so auto-detect LOAS/LATM instead of hardcoding it. */
618 #if !CONFIG_LOAS_DEMUXER
619  { 0x11, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC_LATM }, /* LATM syntax */
620 #endif
626  { 0 },
627 };
628 
629 static const StreamType HDMV_types[] = {
635  { 0x85, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS HD */
636  { 0x86, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS HD MASTER*/
637  { 0xa1, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 }, /* E-AC3 Secondary Audio */
638  { 0xa2, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS }, /* DTS Express Secondary Audio */
640  { 0 },
641 };
642 
643 /* ATSC ? */
644 static const StreamType MISC_types[] = {
647  { 0 },
648 };
649 
650 static const StreamType REGD_types[] = {
651  { MKTAG('d','r','a','c'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },
652  { MKTAG('A','C','-','3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 },
653  { MKTAG('B','S','S','D'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_S302M },
654  { MKTAG('D','T','S','1'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
655  { MKTAG('D','T','S','2'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
656  { MKTAG('D','T','S','3'), AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_DTS },
657  { MKTAG('H','E','V','C'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_HEVC },
658  { MKTAG('K','L','V','A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },
659  { MKTAG('V','C','-','1'), AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
660  { 0 },
661 };
662 
663 static const StreamType METADATA_types[] = {
664  { MKTAG('K','L','V','A'), AVMEDIA_TYPE_DATA, AV_CODEC_ID_SMPTE_KLV },
665  { MKTAG('I','D','3',' '), AVMEDIA_TYPE_DATA, AV_CODEC_ID_TIMED_ID3 },
666  { 0 },
667 };
668 
669 /* descriptor present */
670 static const StreamType DESC_types[] = {
671  { 0x6a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AC3 }, /* AC-3 descriptor */
672  { 0x7a, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_EAC3 }, /* E-AC-3 descriptor */
675  { 0x59, AVMEDIA_TYPE_SUBTITLE, AV_CODEC_ID_DVB_SUBTITLE }, /* subtitling descriptor */
676  { 0 },
677 };
678 
680  uint32_t stream_type, const StreamType *types)
681 {
682  if (avcodec_is_open(st->codec)) {
683  av_log(NULL, AV_LOG_DEBUG, "cannot set stream info, codec is open\n");
684  return;
685  }
686 
687  for (; types->stream_type; types++) {
688  if (stream_type == types->stream_type) {
689  st->codec->codec_type = types->codec_type;
690  st->codec->codec_id = types->codec_id;
691  st->request_probe = 0;
692  return;
693  }
694  }
695 }
696 
698  uint32_t stream_type, uint32_t prog_reg_desc)
699 {
700  int old_codec_type= st->codec->codec_type;
701  int old_codec_id = st->codec->codec_id;
702 
703  if (avcodec_is_open(st->codec)) {
704  av_log(pes->stream, AV_LOG_DEBUG, "cannot set stream info, codec is open\n");
705  return 0;
706  }
707 
708  avpriv_set_pts_info(st, 33, 1, 90000);
709  st->priv_data = pes;
713  pes->st = st;
714  pes->stream_type = stream_type;
715 
716  av_log(pes->stream, AV_LOG_DEBUG,
717  "stream=%d stream_type=%x pid=%x prog_reg_desc=%.4s\n",
718  st->index, pes->stream_type, pes->pid, (char*)&prog_reg_desc);
719 
720  st->codec->codec_tag = pes->stream_type;
721 
722  mpegts_find_stream_type(st, pes->stream_type, ISO_types);
723  if ((prog_reg_desc == AV_RL32("HDMV") ||
724  prog_reg_desc == AV_RL32("HDPR")) &&
725  st->codec->codec_id == AV_CODEC_ID_NONE) {
726  mpegts_find_stream_type(st, pes->stream_type, HDMV_types);
727  if (pes->stream_type == 0x83) {
728  // HDMV TrueHD streams also contain an AC3 coded version of the
729  // audio track - add a second stream for this
730  AVStream *sub_st;
731  // priv_data cannot be shared between streams
732  PESContext *sub_pes = av_malloc(sizeof(*sub_pes));
733  if (!sub_pes)
734  return AVERROR(ENOMEM);
735  memcpy(sub_pes, pes, sizeof(*sub_pes));
736 
737  sub_st = avformat_new_stream(pes->stream, NULL);
738  if (!sub_st) {
739  av_free(sub_pes);
740  return AVERROR(ENOMEM);
741  }
742 
743  sub_st->id = pes->pid;
744  avpriv_set_pts_info(sub_st, 33, 1, 90000);
745  sub_st->priv_data = sub_pes;
747  sub_st->codec->codec_id = AV_CODEC_ID_AC3;
749  sub_pes->sub_st = pes->sub_st = sub_st;
750  }
751  }
752  if (st->codec->codec_id == AV_CODEC_ID_NONE)
753  mpegts_find_stream_type(st, pes->stream_type, MISC_types);
754  if (st->codec->codec_id == AV_CODEC_ID_NONE){
755  st->codec->codec_id = old_codec_id;
756  st->codec->codec_type= old_codec_type;
757  }
758 
759  return 0;
760 }
761 
763 {
764  av_init_packet(pkt);
765 
766  pkt->buf = pes->buffer;
767  pkt->data = pes->buffer->data;
768  pkt->size = pes->data_index;
769 
770  if(pes->total_size != MAX_PES_PAYLOAD &&
771  pes->pes_header_size + pes->data_index != pes->total_size + PES_START_SIZE) {
772  av_log(pes->stream, AV_LOG_WARNING, "PES packet size mismatch\n");
773  pes->flags |= AV_PKT_FLAG_CORRUPT;
774  }
775  memset(pkt->data+pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
776 
777  // Separate out the AC3 substream from an HDMV combined TrueHD/AC3 PID
778  if (pes->sub_st && pes->stream_type == 0x83 && pes->extended_stream_id == 0x76)
779  pkt->stream_index = pes->sub_st->index;
780  else
781  pkt->stream_index = pes->st->index;
782  pkt->pts = pes->pts;
783  pkt->dts = pes->dts;
784  /* store position of first TS packet of this PES packet */
785  pkt->pos = pes->ts_packet_pos;
786  pkt->flags = pes->flags;
787 
788  /* reset pts values */
789  pes->pts = AV_NOPTS_VALUE;
790  pes->dts = AV_NOPTS_VALUE;
791  pes->buffer = NULL;
792  pes->data_index = 0;
793  pes->flags = 0;
794 }
795 
796 static uint64_t get_ts64(GetBitContext *gb, int bits)
797 {
798  if (get_bits_left(gb) < bits)
799  return AV_NOPTS_VALUE;
800  return get_bits64(gb, bits);
801 }
802 
803 static int read_sl_header(PESContext *pes, SLConfigDescr *sl, const uint8_t *buf, int buf_size)
804 {
805  GetBitContext gb;
806  int au_start_flag = 0, au_end_flag = 0, ocr_flag = 0, idle_flag = 0;
807  int padding_flag = 0, padding_bits = 0, inst_bitrate_flag = 0;
808  int dts_flag = -1, cts_flag = -1;
809  int64_t dts = AV_NOPTS_VALUE, cts = AV_NOPTS_VALUE;
810 
811  init_get_bits(&gb, buf, buf_size*8);
812 
813  if (sl->use_au_start)
814  au_start_flag = get_bits1(&gb);
815  if (sl->use_au_end)
816  au_end_flag = get_bits1(&gb);
817  if (!sl->use_au_start && !sl->use_au_end)
818  au_start_flag = au_end_flag = 1;
819  if (sl->ocr_len > 0)
820  ocr_flag = get_bits1(&gb);
821  if (sl->use_idle)
822  idle_flag = get_bits1(&gb);
823  if (sl->use_padding)
824  padding_flag = get_bits1(&gb);
825  if (padding_flag)
826  padding_bits = get_bits(&gb, 3);
827 
828  if (!idle_flag && (!padding_flag || padding_bits != 0)) {
829  if (sl->packet_seq_num_len)
831  if (sl->degr_prior_len)
832  if (get_bits1(&gb))
833  skip_bits(&gb, sl->degr_prior_len);
834  if (ocr_flag)
835  skip_bits_long(&gb, sl->ocr_len);
836  if (au_start_flag) {
837  if (sl->use_rand_acc_pt)
838  get_bits1(&gb);
839  if (sl->au_seq_num_len > 0)
840  skip_bits_long(&gb, sl->au_seq_num_len);
841  if (sl->use_timestamps) {
842  dts_flag = get_bits1(&gb);
843  cts_flag = get_bits1(&gb);
844  }
845  }
846  if (sl->inst_bitrate_len)
847  inst_bitrate_flag = get_bits1(&gb);
848  if (dts_flag == 1)
849  dts = get_ts64(&gb, sl->timestamp_len);
850  if (cts_flag == 1)
851  cts = get_ts64(&gb, sl->timestamp_len);
852  if (sl->au_len > 0)
853  skip_bits_long(&gb, sl->au_len);
854  if (inst_bitrate_flag)
856  }
857 
858  if (dts != AV_NOPTS_VALUE)
859  pes->dts = dts;
860  if (cts != AV_NOPTS_VALUE)
861  pes->pts = cts;
862 
863  if (sl->timestamp_len && sl->timestamp_res)
865 
866  return (get_bits_count(&gb) + 7) >> 3;
867 }
868 
869 /* return non zero if a packet could be constructed */
871  const uint8_t *buf, int buf_size, int is_start,
872  int64_t pos, int64_t pcr)
873 {
874  PESContext *pes = filter->u.pes_filter.opaque;
875  MpegTSContext *ts = pes->ts;
876  const uint8_t *p;
877  int len, code;
878 
879  if(!ts->pkt)
880  return 0;
881 
882  if (pcr != -1)
883  pes->last_pcr = pcr;
884 
885  if (is_start) {
886  if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) {
887  new_pes_packet(pes, ts->pkt);
888  ts->stop_parse = 1;
889  }
890  pes->state = MPEGTS_HEADER;
891  pes->data_index = 0;
892  pes->ts_packet_pos = pos;
893  }
894  p = buf;
895  while (buf_size > 0) {
896  switch(pes->state) {
897  case MPEGTS_HEADER:
898  len = PES_START_SIZE - pes->data_index;
899  if (len > buf_size)
900  len = buf_size;
901  memcpy(pes->header + pes->data_index, p, len);
902  pes->data_index += len;
903  p += len;
904  buf_size -= len;
905  if (pes->data_index == PES_START_SIZE) {
906  /* we got all the PES or section header. We can now
907  decide */
908  if (pes->header[0] == 0x00 && pes->header[1] == 0x00 &&
909  pes->header[2] == 0x01) {
910  /* it must be an mpeg2 PES stream */
911  code = pes->header[3] | 0x100;
912  av_dlog(pes->stream, "pid=%x pes_code=%#x\n", pes->pid, code);
913 
914  if ((pes->st && pes->st->discard == AVDISCARD_ALL &&
915  (!pes->sub_st || pes->sub_st->discard == AVDISCARD_ALL)) ||
916  code == 0x1be) /* padding_stream */
917  goto skip;
918 
919  /* stream not present in PMT */
920  if (!pes->st) {
921  pes->st = avformat_new_stream(ts->stream, NULL);
922  if (!pes->st)
923  return AVERROR(ENOMEM);
924  pes->st->id = pes->pid;
925  mpegts_set_stream_info(pes->st, pes, 0, 0);
926  }
927 
928  pes->total_size = AV_RB16(pes->header + 4);
929  /* NOTE: a zero total size means the PES size is
930  unbounded */
931  if (!pes->total_size)
933 
934  /* allocate pes buffer */
935  pes->buffer = av_buffer_alloc(pes->total_size +
937  if (!pes->buffer)
938  return AVERROR(ENOMEM);
939 
940  if (code != 0x1bc && code != 0x1bf && /* program_stream_map, private_stream_2 */
941  code != 0x1f0 && code != 0x1f1 && /* ECM, EMM */
942  code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */
943  code != 0x1f8) { /* ITU-T Rec. H.222.1 type E stream */
944  pes->state = MPEGTS_PESHEADER;
945  if (pes->st->codec->codec_id == AV_CODEC_ID_NONE && !pes->st->request_probe) {
946  av_dlog(pes->stream, "pid=%x stream_type=%x probing\n",
947  pes->pid, pes->stream_type);
948  pes->st->request_probe= 1;
949  }
950  } else {
951  pes->state = MPEGTS_PAYLOAD;
952  pes->data_index = 0;
953  }
954  } else {
955  /* otherwise, it should be a table */
956  /* skip packet */
957  skip:
958  pes->state = MPEGTS_SKIP;
959  continue;
960  }
961  }
962  break;
963  /**********************************************/
964  /* PES packing parsing */
965  case MPEGTS_PESHEADER:
966  len = PES_HEADER_SIZE - pes->data_index;
967  if (len < 0)
968  return -1;
969  if (len > buf_size)
970  len = buf_size;
971  memcpy(pes->header + pes->data_index, p, len);
972  pes->data_index += len;
973  p += len;
974  buf_size -= len;
975  if (pes->data_index == PES_HEADER_SIZE) {
976  pes->pes_header_size = pes->header[8] + 9;
978  }
979  break;
981  len = pes->pes_header_size - pes->data_index;
982  if (len < 0)
983  return -1;
984  if (len > buf_size)
985  len = buf_size;
986  memcpy(pes->header + pes->data_index, p, len);
987  pes->data_index += len;
988  p += len;
989  buf_size -= len;
990  if (pes->data_index == pes->pes_header_size) {
991  const uint8_t *r;
992  unsigned int flags, pes_ext, skip;
993 
994  flags = pes->header[7];
995  r = pes->header + 9;
996  pes->pts = AV_NOPTS_VALUE;
997  pes->dts = AV_NOPTS_VALUE;
998  if ((flags & 0xc0) == 0x80) {
999  pes->dts = pes->pts = ff_parse_pes_pts(r);
1000  r += 5;
1001  } else if ((flags & 0xc0) == 0xc0) {
1002  pes->pts = ff_parse_pes_pts(r);
1003  r += 5;
1004  pes->dts = ff_parse_pes_pts(r);
1005  r += 5;
1006  }
1007  pes->extended_stream_id = -1;
1008  if (flags & 0x01) { /* PES extension */
1009  pes_ext = *r++;
1010  /* Skip PES private data, program packet sequence counter and P-STD buffer */
1011  skip = (pes_ext >> 4) & 0xb;
1012  skip += skip & 0x9;
1013  r += skip;
1014  if ((pes_ext & 0x41) == 0x01 &&
1015  (r + 2) <= (pes->header + pes->pes_header_size)) {
1016  /* PES extension 2 */
1017  if ((r[0] & 0x7f) > 0 && (r[1] & 0x80) == 0)
1018  pes->extended_stream_id = r[1];
1019  }
1020  }
1021 
1022  /* we got the full header. We parse it and get the payload */
1023  pes->state = MPEGTS_PAYLOAD;
1024  pes->data_index = 0;
1025  if (pes->stream_type == 0x12 && buf_size > 0) {
1026  int sl_header_bytes = read_sl_header(pes, &pes->sl, p, buf_size);
1027  pes->pes_header_size += sl_header_bytes;
1028  p += sl_header_bytes;
1029  buf_size -= sl_header_bytes;
1030  }
1031  if (pes->stream_type == 0x15 && buf_size >= 5) {
1032  /* skip metadata access unit header */
1033  pes->pes_header_size += 5;
1034  p += 5;
1035  buf_size -= 5;
1036  }
1037  if (pes->ts->fix_teletext_pts && pes->st->codec->codec_id == AV_CODEC_ID_DVB_TELETEXT) {
1038  AVProgram *p = NULL;
1039  while ((p = av_find_program_from_stream(pes->stream, p, pes->st->index))) {
1040  if (p->pcr_pid != -1 && p->discard != AVDISCARD_ALL) {
1041  MpegTSFilter *f = pes->ts->pids[p->pcr_pid];
1042  if (f && f->type == MPEGTS_PES) {
1043  PESContext *pcrpes = f->u.pes_filter.opaque;
1044  if (pcrpes && pcrpes->last_pcr != -1 && pcrpes->st && pcrpes->st->discard != AVDISCARD_ALL) {
1045  // teletext packets do not always have correct timestamps,
1046  // the standard says they should be handled after 40.6 ms at most,
1047  // and the pcr error to this packet should be no more than 100 ms.
1048  // TODO: we should interpolate the PCR, not just use the last one
1049  int64_t pcr = pcrpes->last_pcr / 300;
1050  pes->st->pts_wrap_reference = pcrpes->st->pts_wrap_reference;
1051  pes->st->pts_wrap_behavior = pcrpes->st->pts_wrap_behavior;
1052  if (pes->dts == AV_NOPTS_VALUE || pes->dts < pcr) {
1053  pes->pts = pes->dts = pcr;
1054  } else if (pes->dts > pcr + 3654 + 9000) {
1055  pes->pts = pes->dts = pcr + 3654 + 9000;
1056  }
1057  break;
1058  }
1059  }
1060  }
1061  }
1062  }
1063  }
1064  break;
1065  case MPEGTS_PAYLOAD:
1066  if (buf_size > 0 && pes->buffer) {
1067  if (pes->data_index > 0 && pes->data_index+buf_size > pes->total_size) {
1068  new_pes_packet(pes, ts->pkt);
1069  pes->total_size = MAX_PES_PAYLOAD;
1071  if (!pes->buffer)
1072  return AVERROR(ENOMEM);
1073  ts->stop_parse = 1;
1074  } else if (pes->data_index == 0 && buf_size > pes->total_size) {
1075  // pes packet size is < ts size packet and pes data is padded with 0xff
1076  // not sure if this is legal in ts but see issue #2392
1077  buf_size = pes->total_size;
1078  }
1079  memcpy(pes->buffer->data + pes->data_index, p, buf_size);
1080  pes->data_index += buf_size;
1081  }
1082  buf_size = 0;
1083  /* emit complete packets with known packet size
1084  * decreases demuxer delay for infrequent packets like subtitles from
1085  * a couple of seconds to milliseconds for properly muxed files.
1086  * total_size is the number of bytes following pes_packet_length
1087  * in the pes header, i.e. not counting the first PES_START_SIZE bytes */
1088  if (!ts->stop_parse && pes->total_size < MAX_PES_PAYLOAD &&
1089  pes->pes_header_size + pes->data_index == pes->total_size + PES_START_SIZE) {
1090  ts->stop_parse = 1;
1091  new_pes_packet(pes, ts->pkt);
1092  }
1093  break;
1094  case MPEGTS_SKIP:
1095  buf_size = 0;
1096  break;
1097  }
1098  }
1099 
1100  return 0;
1101 }
1102 
1103 static PESContext *add_pes_stream(MpegTSContext *ts, int pid, int pcr_pid)
1104 {
1105  MpegTSFilter *tss;
1106  PESContext *pes;
1107 
1108  /* if no pid found, then add a pid context */
1109  pes = av_mallocz(sizeof(PESContext));
1110  if (!pes)
1111  return 0;
1112  pes->ts = ts;
1113  pes->stream = ts->stream;
1114  pes->pid = pid;
1115  pes->pcr_pid = pcr_pid;
1116  pes->state = MPEGTS_SKIP;
1117  pes->pts = AV_NOPTS_VALUE;
1118  pes->dts = AV_NOPTS_VALUE;
1119  pes->last_pcr = -1;
1120  tss = mpegts_open_pes_filter(ts, pid, mpegts_push_data, pes);
1121  if (!tss) {
1122  av_free(pes);
1123  return 0;
1124  }
1125  return pes;
1126 }
1127 
1128 #define MAX_LEVEL 4
1129 typedef struct {
1136  int level;
1138 
1141  unsigned size, Mp4Descr *descr, int max_descr_count)
1142 {
1143  int ret;
1144  if (size > (1<<30))
1145  return AVERROR_INVALIDDATA;
1146 
1147  if ((ret = ffio_init_context(&d->pb, (unsigned char*)buf, size, 0,
1148  NULL, NULL, NULL, NULL)) < 0)
1149  return ret;
1150 
1151  d->s = s;
1152  d->level = 0;
1153  d->descr_count = 0;
1154  d->descr = descr;
1155  d->active_descr = NULL;
1156  d->max_descr_count = max_descr_count;
1157 
1158  return 0;
1159 }
1160 
1161 static void update_offsets(AVIOContext *pb, int64_t *off, int *len) {
1162  int64_t new_off = avio_tell(pb);
1163  (*len) -= new_off - *off;
1164  *off = new_off;
1165 }
1166 
1167 static int parse_mp4_descr(MP4DescrParseContext *d, int64_t off, int len,
1168  int target_tag);
1169 
1170 static int parse_mp4_descr_arr(MP4DescrParseContext *d, int64_t off, int len)
1171 {
1172  while (len > 0) {
1173  if (parse_mp4_descr(d, off, len, 0) < 0)
1174  return -1;
1175  update_offsets(&d->pb, &off, &len);
1176  }
1177  return 0;
1178 }
1179 
1180 static int parse_MP4IODescrTag(MP4DescrParseContext *d, int64_t off, int len)
1181 {
1182  avio_rb16(&d->pb); // ID
1183  avio_r8(&d->pb);
1184  avio_r8(&d->pb);
1185  avio_r8(&d->pb);
1186  avio_r8(&d->pb);
1187  avio_r8(&d->pb);
1188  update_offsets(&d->pb, &off, &len);
1189  return parse_mp4_descr_arr(d, off, len);
1190 }
1191 
1192 static int parse_MP4ODescrTag(MP4DescrParseContext *d, int64_t off, int len)
1193 {
1194  int id_flags;
1195  if (len < 2)
1196  return 0;
1197  id_flags = avio_rb16(&d->pb);
1198  if (!(id_flags & 0x0020)) { //URL_Flag
1199  update_offsets(&d->pb, &off, &len);
1200  return parse_mp4_descr_arr(d, off, len); //ES_Descriptor[]
1201  } else {
1202  return 0;
1203  }
1204 }
1205 
1206 static int parse_MP4ESDescrTag(MP4DescrParseContext *d, int64_t off, int len)
1207 {
1208  int es_id = 0;
1209  if (d->descr_count >= d->max_descr_count)
1210  return -1;
1211  ff_mp4_parse_es_descr(&d->pb, &es_id);
1212  d->active_descr = d->descr + (d->descr_count++);
1213 
1214  d->active_descr->es_id = es_id;
1215  update_offsets(&d->pb, &off, &len);
1216  parse_mp4_descr(d, off, len, MP4DecConfigDescrTag);
1217  update_offsets(&d->pb, &off, &len);
1218  if (len > 0)
1219  parse_mp4_descr(d, off, len, MP4SLDescrTag);
1220  d->active_descr = NULL;
1221  return 0;
1222 }
1223 
1225 {
1226  Mp4Descr *descr = d->active_descr;
1227  if (!descr)
1228  return -1;
1230  if (!descr->dec_config_descr)
1231  return AVERROR(ENOMEM);
1232  descr->dec_config_descr_len = len;
1233  avio_read(&d->pb, descr->dec_config_descr, len);
1234  return 0;
1235 }
1236 
1237 static int parse_MP4SLDescrTag(MP4DescrParseContext *d, int64_t off, int len)
1238 {
1239  Mp4Descr *descr = d->active_descr;
1240  int predefined;
1241  if (!descr)
1242  return -1;
1243 
1244  predefined = avio_r8(&d->pb);
1245  if (!predefined) {
1246  int lengths;
1247  int flags = avio_r8(&d->pb);
1248  descr->sl.use_au_start = !!(flags & 0x80);
1249  descr->sl.use_au_end = !!(flags & 0x40);
1250  descr->sl.use_rand_acc_pt = !!(flags & 0x20);
1251  descr->sl.use_padding = !!(flags & 0x08);
1252  descr->sl.use_timestamps = !!(flags & 0x04);
1253  descr->sl.use_idle = !!(flags & 0x02);
1254  descr->sl.timestamp_res = avio_rb32(&d->pb);
1255  avio_rb32(&d->pb);
1256  descr->sl.timestamp_len = avio_r8(&d->pb);
1257  if (descr->sl.timestamp_len > 64) {
1258  avpriv_request_sample(NULL, "timestamp_len > 64");
1259  descr->sl.timestamp_len = 64;
1260  return AVERROR_PATCHWELCOME;
1261  }
1262  descr->sl.ocr_len = avio_r8(&d->pb);
1263  descr->sl.au_len = avio_r8(&d->pb);
1264  descr->sl.inst_bitrate_len = avio_r8(&d->pb);
1265  lengths = avio_rb16(&d->pb);
1266  descr->sl.degr_prior_len = lengths >> 12;
1267  descr->sl.au_seq_num_len = (lengths >> 7) & 0x1f;
1268  descr->sl.packet_seq_num_len = (lengths >> 2) & 0x1f;
1269  } else {
1270  avpriv_report_missing_feature(d->s, "Predefined SLConfigDescriptor");
1271  }
1272  return 0;
1273 }
1274 
1275 static int parse_mp4_descr(MP4DescrParseContext *d, int64_t off, int len,
1276  int target_tag) {
1277  int tag;
1278  int len1 = ff_mp4_read_descr(d->s, &d->pb, &tag);
1279  update_offsets(&d->pb, &off, &len);
1280  if (len < 0 || len1 > len || len1 <= 0) {
1281  av_log(d->s, AV_LOG_ERROR, "Tag %x length violation new length %d bytes remaining %d\n", tag, len1, len);
1282  return -1;
1283  }
1284 
1285  if (d->level++ >= MAX_LEVEL) {
1286  av_log(d->s, AV_LOG_ERROR, "Maximum MP4 descriptor level exceeded\n");
1287  goto done;
1288  }
1289 
1290  if (target_tag && tag != target_tag) {
1291  av_log(d->s, AV_LOG_ERROR, "Found tag %x expected %x\n", tag, target_tag);
1292  goto done;
1293  }
1294 
1295  switch (tag) {
1296  case MP4IODescrTag:
1297  parse_MP4IODescrTag(d, off, len1);
1298  break;
1299  case MP4ODescrTag:
1300  parse_MP4ODescrTag(d, off, len1);
1301  break;
1302  case MP4ESDescrTag:
1303  parse_MP4ESDescrTag(d, off, len1);
1304  break;
1305  case MP4DecConfigDescrTag:
1306  parse_MP4DecConfigDescrTag(d, off, len1);
1307  break;
1308  case MP4SLDescrTag:
1309  parse_MP4SLDescrTag(d, off, len1);
1310  break;
1311  }
1312 
1313 done:
1314  d->level--;
1315  avio_seek(&d->pb, off + len1, SEEK_SET);
1316  return 0;
1317 }
1318 
1319 static int mp4_read_iods(AVFormatContext *s, const uint8_t *buf, unsigned size,
1320  Mp4Descr *descr, int *descr_count, int max_descr_count)
1321 {
1323  if (init_MP4DescrParseContext(&d, s, buf, size, descr, max_descr_count) < 0)
1324  return -1;
1325 
1326  parse_mp4_descr(&d, avio_tell(&d.pb), size, MP4IODescrTag);
1327 
1328  *descr_count = d.descr_count;
1329  return 0;
1330 }
1331 
1332 static int mp4_read_od(AVFormatContext *s, const uint8_t *buf, unsigned size,
1333  Mp4Descr *descr, int *descr_count, int max_descr_count)
1334 {
1336  if (init_MP4DescrParseContext(&d, s, buf, size, descr, max_descr_count) < 0)
1337  return -1;
1338 
1339  parse_mp4_descr_arr(&d, avio_tell(&d.pb), size);
1340 
1341  *descr_count = d.descr_count;
1342  return 0;
1343 }
1344 
1345 static void m4sl_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
1346 {
1347  MpegTSContext *ts = filter->u.section_filter.opaque;
1348  SectionHeader h;
1349  const uint8_t *p, *p_end;
1350  AVIOContext pb;
1351  Mp4Descr mp4_descr[MAX_MP4_DESCR_COUNT] = {{ 0 }};
1352  int mp4_descr_count = 0;
1353  int i, pid;
1354  AVFormatContext *s = ts->stream;
1355 
1356  p_end = section + section_len - 4;
1357  p = section;
1358  if (parse_section_header(&h, &p, p_end) < 0)
1359  return;
1360  if (h.tid != M4OD_TID)
1361  return;
1362 
1363  mp4_read_od(s, p, (unsigned)(p_end - p), mp4_descr, &mp4_descr_count, MAX_MP4_DESCR_COUNT);
1364 
1365  for (pid = 0; pid < NB_PID_MAX; pid++) {
1366  if (!ts->pids[pid])
1367  continue;
1368  for (i = 0; i < mp4_descr_count; i++) {
1369  PESContext *pes;
1370  AVStream *st;
1371  if (ts->pids[pid]->es_id != mp4_descr[i].es_id)
1372  continue;
1373  if (!(ts->pids[pid] && ts->pids[pid]->type == MPEGTS_PES)) {
1374  av_log(s, AV_LOG_ERROR, "pid %x is not PES\n", pid);
1375  continue;
1376  }
1377  pes = ts->pids[pid]->u.pes_filter.opaque;
1378  st = pes->st;
1379  if (!st) {
1380  continue;
1381  }
1382 
1383  pes->sl = mp4_descr[i].sl;
1384 
1385  ffio_init_context(&pb, mp4_descr[i].dec_config_descr,
1386  mp4_descr[i].dec_config_descr_len, 0, NULL, NULL, NULL, NULL);
1387  ff_mp4_read_dec_config_descr(s, st, &pb);
1388  if (st->codec->codec_id == AV_CODEC_ID_AAC &&
1389  st->codec->extradata_size > 0)
1390  st->need_parsing = 0;
1391  if (st->codec->codec_id == AV_CODEC_ID_H264 &&
1392  st->codec->extradata_size > 0)
1393  st->need_parsing = 0;
1394 
1395  if (st->codec->codec_id <= AV_CODEC_ID_NONE) {
1396  } else if (st->codec->codec_id < AV_CODEC_ID_FIRST_AUDIO) {
1398  } else if (st->codec->codec_id < AV_CODEC_ID_FIRST_SUBTITLE) {
1400  } else if (st->codec->codec_id < AV_CODEC_ID_FIRST_UNKNOWN) {
1402  }
1403  }
1404  }
1405  for (i = 0; i < mp4_descr_count; i++)
1406  av_free(mp4_descr[i].dec_config_descr);
1407 }
1408 
1410  const uint8_t **pp, const uint8_t *desc_list_end,
1411  Mp4Descr *mp4_descr, int mp4_descr_count, int pid,
1412  MpegTSContext *ts)
1413 {
1414  const uint8_t *desc_end;
1415  int desc_len, desc_tag, desc_es_id;
1416  char language[252];
1417  int i;
1418 
1419  desc_tag = get8(pp, desc_list_end);
1420  if (desc_tag < 0)
1421  return -1;
1422  desc_len = get8(pp, desc_list_end);
1423  if (desc_len < 0)
1424  return -1;
1425  desc_end = *pp + desc_len;
1426  if (desc_end > desc_list_end)
1427  return -1;
1428 
1429  av_dlog(fc, "tag: 0x%02x len=%d\n", desc_tag, desc_len);
1430 
1431  if (st->codec->codec_id == AV_CODEC_ID_NONE &&
1432  stream_type == STREAM_TYPE_PRIVATE_DATA)
1433  mpegts_find_stream_type(st, desc_tag, DESC_types);
1434 
1435  switch(desc_tag) {
1436  case 0x1E: /* SL descriptor */
1437  desc_es_id = get16(pp, desc_end);
1438  if (ts && ts->pids[pid])
1439  ts->pids[pid]->es_id = desc_es_id;
1440  for (i = 0; i < mp4_descr_count; i++)
1441  if (mp4_descr[i].dec_config_descr_len &&
1442  mp4_descr[i].es_id == desc_es_id) {
1443  AVIOContext pb;
1444  ffio_init_context(&pb, mp4_descr[i].dec_config_descr,
1445  mp4_descr[i].dec_config_descr_len, 0, NULL, NULL, NULL, NULL);
1446  ff_mp4_read_dec_config_descr(fc, st, &pb);
1447  if (st->codec->codec_id == AV_CODEC_ID_AAC &&
1448  st->codec->extradata_size > 0)
1449  st->need_parsing = 0;
1451  mpegts_open_section_filter(ts, pid, m4sl_cb, ts, 1);
1452  }
1453  break;
1454  case 0x1F: /* FMC descriptor */
1455  get16(pp, desc_end);
1456  if (mp4_descr_count > 0 && (st->codec->codec_id == AV_CODEC_ID_AAC_LATM || st->request_probe>0) &&
1457  mp4_descr->dec_config_descr_len && mp4_descr->es_id == pid) {
1458  AVIOContext pb;
1459  ffio_init_context(&pb, mp4_descr->dec_config_descr,
1460  mp4_descr->dec_config_descr_len, 0, NULL, NULL, NULL, NULL);
1461  ff_mp4_read_dec_config_descr(fc, st, &pb);
1462  if (st->codec->codec_id == AV_CODEC_ID_AAC &&
1463  st->codec->extradata_size > 0){
1464  st->request_probe= st->need_parsing = 0;
1466  }
1467  }
1468  break;
1469  case 0x56: /* DVB teletext descriptor */
1470  {
1471  uint8_t *extradata = NULL;
1472  int language_count = desc_len / 5;
1473 
1474  if (desc_len > 0 && desc_len % 5 != 0)
1475  return AVERROR_INVALIDDATA;
1476 
1477  if (language_count > 0) {
1478  /* 4 bytes per language code (3 bytes) with comma or NUL byte should fit language buffer */
1479  if (language_count > sizeof(language) / 4) {
1480  language_count = sizeof(language) / 4;
1481  }
1482 
1483  if (st->codec->extradata == NULL) {
1484  if (ff_alloc_extradata(st->codec, language_count * 2)) {
1485  return AVERROR(ENOMEM);
1486  }
1487  }
1488 
1489  if (st->codec->extradata_size < language_count * 2)
1490  return AVERROR_INVALIDDATA;
1491 
1492  extradata = st->codec->extradata;
1493 
1494  for (i = 0; i < language_count; i++) {
1495  language[i * 4 + 0] = get8(pp, desc_end);
1496  language[i * 4 + 1] = get8(pp, desc_end);
1497  language[i * 4 + 2] = get8(pp, desc_end);
1498  language[i * 4 + 3] = ',';
1499 
1500  memcpy(extradata, *pp, 2);
1501  extradata += 2;
1502 
1503  *pp += 2;
1504  }
1505 
1506  language[i * 4 - 1] = 0;
1507  av_dict_set(&st->metadata, "language", language, 0);
1508  }
1509  }
1510  break;
1511  case 0x59: /* subtitling descriptor */
1512  {
1513  /* 8 bytes per DVB subtitle substream data:
1514  * ISO_639_language_code (3 bytes),
1515  * subtitling_type (1 byte),
1516  * composition_page_id (2 bytes),
1517  * ancillary_page_id (2 bytes) */
1518  int language_count = desc_len / 8;
1519 
1520  if (desc_len > 0 && desc_len % 8 != 0)
1521  return AVERROR_INVALIDDATA;
1522 
1523  if (language_count > 1) {
1524  avpriv_request_sample(fc, "DVB subtitles with multiple languages");
1525  }
1526 
1527  if (language_count > 0) {
1528  uint8_t *extradata;
1529 
1530  /* 4 bytes per language code (3 bytes) with comma or NUL byte should fit language buffer */
1531  if (language_count > sizeof(language) / 4) {
1532  language_count = sizeof(language) / 4;
1533  }
1534 
1535  if (st->codec->extradata == NULL) {
1536  if (ff_alloc_extradata(st->codec, language_count * 5)) {
1537  return AVERROR(ENOMEM);
1538  }
1539  }
1540 
1541  if (st->codec->extradata_size < language_count * 5)
1542  return AVERROR_INVALIDDATA;
1543 
1544  extradata = st->codec->extradata;
1545 
1546  for (i = 0; i < language_count; i++) {
1547  language[i * 4 + 0] = get8(pp, desc_end);
1548  language[i * 4 + 1] = get8(pp, desc_end);
1549  language[i * 4 + 2] = get8(pp, desc_end);
1550  language[i * 4 + 3] = ',';
1551 
1552  /* hearing impaired subtitles detection using subtitling_type */
1553  switch(*pp[0]) {
1554  case 0x20: /* DVB subtitles (for the hard of hearing) with no monitor aspect ratio criticality */
1555  case 0x21: /* DVB subtitles (for the hard of hearing) for display on 4:3 aspect ratio monitor */
1556  case 0x22: /* DVB subtitles (for the hard of hearing) for display on 16:9 aspect ratio monitor */
1557  case 0x23: /* DVB subtitles (for the hard of hearing) for display on 2.21:1 aspect ratio monitor */
1558  case 0x24: /* DVB subtitles (for the hard of hearing) for display on a high definition monitor */
1559  case 0x25: /* DVB subtitles (for the hard of hearing) with plano-stereoscopic disparity for display on a high definition monitor */
1561  break;
1562  }
1563 
1564  extradata[4] = get8(pp, desc_end); /* subtitling_type */
1565  memcpy(extradata, *pp, 4); /* composition_page_id and ancillary_page_id */
1566  extradata += 5;
1567 
1568  *pp += 4;
1569  }
1570 
1571  language[i * 4 - 1] = 0;
1572  av_dict_set(&st->metadata, "language", language, 0);
1573  }
1574  }
1575  break;
1576  case 0x0a: /* ISO 639 language descriptor */
1577  for (i = 0; i + 4 <= desc_len; i += 4) {
1578  language[i + 0] = get8(pp, desc_end);
1579  language[i + 1] = get8(pp, desc_end);
1580  language[i + 2] = get8(pp, desc_end);
1581  language[i + 3] = ',';
1582  switch (get8(pp, desc_end)) {
1583  case 0x01: st->disposition |= AV_DISPOSITION_CLEAN_EFFECTS; break;
1584  case 0x02: st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED; break;
1585  case 0x03: st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED; break;
1586  }
1587  }
1588  if (i) {
1589  language[i - 1] = 0;
1590  av_dict_set(&st->metadata, "language", language, 0);
1591  }
1592  break;
1593  case 0x05: /* registration descriptor */
1594  st->codec->codec_tag = bytestream_get_le32(pp);
1595  av_dlog(fc, "reg_desc=%.4s\n", (char*)&st->codec->codec_tag);
1596  if (st->codec->codec_id == AV_CODEC_ID_NONE)
1597  mpegts_find_stream_type(st, st->codec->codec_tag, REGD_types);
1598  break;
1599  case 0x52: /* stream identifier descriptor */
1600  st->stream_identifier = 1 + get8(pp, desc_end);
1601  break;
1602  case 0x26: /* metadata descriptor */
1603  if (get16(pp, desc_end) == 0xFFFF)
1604  *pp += 4;
1605  if (get8(pp, desc_end) == 0xFF) {
1606  st->codec->codec_tag = bytestream_get_le32(pp);
1607  if (st->codec->codec_id == AV_CODEC_ID_NONE)
1608  mpegts_find_stream_type(st, st->codec->codec_tag, METADATA_types);
1609  }
1610  break;
1611  default:
1612  break;
1613  }
1614  *pp = desc_end;
1615  return 0;
1616 }
1617 
1618 static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
1619 {
1620  MpegTSContext *ts = filter->u.section_filter.opaque;
1621  SectionHeader h1, *h = &h1;
1622  PESContext *pes;
1623  AVStream *st;
1624  const uint8_t *p, *p_end, *desc_list_end;
1625  int program_info_length, pcr_pid, pid, stream_type;
1626  int desc_list_len;
1627  uint32_t prog_reg_desc = 0; /* registration descriptor */
1628 
1629  Mp4Descr mp4_descr[MAX_MP4_DESCR_COUNT] = {{ 0 }};
1630  int mp4_descr_count = 0;
1631  int i;
1632 
1633  av_dlog(ts->stream, "PMT: len %i\n", section_len);
1634  hex_dump_debug(ts->stream, section, section_len);
1635 
1636  p_end = section + section_len - 4;
1637  p = section;
1638  if (parse_section_header(h, &p, p_end) < 0)
1639  return;
1640 
1641  av_dlog(ts->stream, "sid=0x%x sec_num=%d/%d\n",
1642  h->id, h->sec_num, h->last_sec_num);
1643 
1644  if (h->tid != PMT_TID)
1645  return;
1646 
1647  clear_program(ts, h->id);
1648  pcr_pid = get16(&p, p_end);
1649  if (pcr_pid < 0)
1650  return;
1651  pcr_pid &= 0x1fff;
1652  add_pid_to_pmt(ts, h->id, pcr_pid);
1653  set_pcr_pid(ts->stream, h->id, pcr_pid);
1654 
1655  av_dlog(ts->stream, "pcr_pid=0x%x\n", pcr_pid);
1656 
1657  program_info_length = get16(&p, p_end);
1658  if (program_info_length < 0)
1659  return;
1660  program_info_length &= 0xfff;
1661  while(program_info_length >= 2) {
1662  uint8_t tag, len;
1663  tag = get8(&p, p_end);
1664  len = get8(&p, p_end);
1665 
1666  av_dlog(ts->stream, "program tag: 0x%02x len=%d\n", tag, len);
1667 
1668  if(len > program_info_length - 2)
1669  //something else is broken, exit the program_descriptors_loop
1670  break;
1671  program_info_length -= len + 2;
1672  if (tag == 0x1d) { // IOD descriptor
1673  get8(&p, p_end); // scope
1674  get8(&p, p_end); // label
1675  len -= 2;
1676  mp4_read_iods(ts->stream, p, len, mp4_descr + mp4_descr_count,
1677  &mp4_descr_count, MAX_MP4_DESCR_COUNT);
1678  } else if (tag == 0x05 && len >= 4) { // registration descriptor
1679  prog_reg_desc = bytestream_get_le32(&p);
1680  len -= 4;
1681  }
1682  p += len;
1683  }
1684  p += program_info_length;
1685  if (p >= p_end)
1686  goto out;
1687 
1688  // stop parsing after pmt, we found header
1689  if (!ts->stream->nb_streams)
1690  ts->stop_parse = 2;
1691 
1692  set_pmt_found(ts, h->id);
1693 
1694  for(;;) {
1695  st = 0;
1696  pes = NULL;
1697  stream_type = get8(&p, p_end);
1698  if (stream_type < 0)
1699  break;
1700  pid = get16(&p, p_end);
1701  if (pid < 0)
1702  break;
1703  pid &= 0x1fff;
1704  if (pid == ts->current_pid)
1705  break;
1706 
1707  /* now create stream */
1708  if (ts->pids[pid] && ts->pids[pid]->type == MPEGTS_PES) {
1709  pes = ts->pids[pid]->u.pes_filter.opaque;
1710  if (!pes->st) {
1711  pes->st = avformat_new_stream(pes->stream, NULL);
1712  if (!pes->st)
1713  goto out;
1714  pes->st->id = pes->pid;
1715  }
1716  st = pes->st;
1717  } else if (stream_type != 0x13) {
1718  if (ts->pids[pid]) mpegts_close_filter(ts, ts->pids[pid]); //wrongly added sdt filter probably
1719  pes = add_pes_stream(ts, pid, pcr_pid);
1720  if (pes) {
1721  st = avformat_new_stream(pes->stream, NULL);
1722  if (!st)
1723  goto out;
1724  st->id = pes->pid;
1725  }
1726  } else {
1727  int idx = ff_find_stream_index(ts->stream, pid);
1728  if (idx >= 0) {
1729  st = ts->stream->streams[idx];
1730  } else {
1731  st = avformat_new_stream(ts->stream, NULL);
1732  if (!st)
1733  goto out;
1734  st->id = pid;
1736  }
1737  }
1738 
1739  if (!st)
1740  goto out;
1741 
1742  if (pes && !pes->stream_type)
1743  mpegts_set_stream_info(st, pes, stream_type, prog_reg_desc);
1744 
1745  add_pid_to_pmt(ts, h->id, pid);
1746 
1748 
1749  desc_list_len = get16(&p, p_end);
1750  if (desc_list_len < 0)
1751  break;
1752  desc_list_len &= 0xfff;
1753  desc_list_end = p + desc_list_len;
1754  if (desc_list_end > p_end)
1755  break;
1756  for(;;) {
1757  if (ff_parse_mpeg2_descriptor(ts->stream, st, stream_type, &p, desc_list_end,
1758  mp4_descr, mp4_descr_count, pid, ts) < 0)
1759  break;
1760 
1761  if (pes && prog_reg_desc == AV_RL32("HDMV") && stream_type == 0x83 && pes->sub_st) {
1763  pes->sub_st->codec->codec_tag = st->codec->codec_tag;
1764  }
1765  }
1766  p = desc_list_end;
1767  }
1768 
1769  out:
1770  for (i = 0; i < mp4_descr_count; i++)
1771  av_free(mp4_descr[i].dec_config_descr);
1772 }
1773 
1774 static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
1775 {
1776  MpegTSContext *ts = filter->u.section_filter.opaque;
1777  SectionHeader h1, *h = &h1;
1778  const uint8_t *p, *p_end;
1779  int sid, pmt_pid;
1780  AVProgram *program;
1781 
1782  av_dlog(ts->stream, "PAT:\n");
1783  hex_dump_debug(ts->stream, section, section_len);
1784 
1785  p_end = section + section_len - 4;
1786  p = section;
1787  if (parse_section_header(h, &p, p_end) < 0)
1788  return;
1789  if (h->tid != PAT_TID)
1790  return;
1791 
1792  ts->stream->ts_id = h->id;
1793 
1794  clear_programs(ts);
1795  for(;;) {
1796  sid = get16(&p, p_end);
1797  if (sid < 0)
1798  break;
1799  pmt_pid = get16(&p, p_end);
1800  if (pmt_pid < 0)
1801  break;
1802  pmt_pid &= 0x1fff;
1803 
1804  if (pmt_pid == ts->current_pid)
1805  break;
1806 
1807  av_dlog(ts->stream, "sid=0x%x pid=0x%x\n", sid, pmt_pid);
1808 
1809  if (sid == 0x0000) {
1810  /* NIT info */
1811  } else {
1812  MpegTSFilter *fil = ts->pids[pmt_pid];
1813  program = av_new_program(ts->stream, sid);
1814  program->program_num = sid;
1815  program->pmt_pid = pmt_pid;
1816  if (fil)
1817  if ( fil->type != MPEGTS_SECTION
1818  || fil->pid != pmt_pid
1819  || fil->u.section_filter.section_cb != pmt_cb)
1820  mpegts_close_filter(ts, ts->pids[pmt_pid]);
1821 
1822  if (!ts->pids[pmt_pid])
1823  mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);
1824  add_pat_entry(ts, sid);
1825  add_pid_to_pmt(ts, sid, 0); //add pat pid to program
1826  add_pid_to_pmt(ts, sid, pmt_pid);
1827  }
1828  }
1829 
1830  if (sid < 0) {
1831  int i,j;
1832  for (j=0; j<ts->stream->nb_programs; j++) {
1833  for (i=0; i<ts->nb_prg; i++)
1834  if (ts->prg[i].id == ts->stream->programs[j]->id)
1835  break;
1836  if (i==ts->nb_prg)
1837  clear_avprogram(ts, ts->stream->programs[j]->id);
1838  }
1839  }
1840 }
1841 
1842 static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len)
1843 {
1844  MpegTSContext *ts = filter->u.section_filter.opaque;
1845  SectionHeader h1, *h = &h1;
1846  const uint8_t *p, *p_end, *desc_list_end, *desc_end;
1847  int onid, val, sid, desc_list_len, desc_tag, desc_len, service_type;
1848  char *name, *provider_name;
1849 
1850  av_dlog(ts->stream, "SDT:\n");
1851  hex_dump_debug(ts->stream, section, section_len);
1852 
1853  p_end = section + section_len - 4;
1854  p = section;
1855  if (parse_section_header(h, &p, p_end) < 0)
1856  return;
1857  if (h->tid != SDT_TID)
1858  return;
1859  onid = get16(&p, p_end);
1860  if (onid < 0)
1861  return;
1862  val = get8(&p, p_end);
1863  if (val < 0)
1864  return;
1865  for(;;) {
1866  sid = get16(&p, p_end);
1867  if (sid < 0)
1868  break;
1869  val = get8(&p, p_end);
1870  if (val < 0)
1871  break;
1872  desc_list_len = get16(&p, p_end);
1873  if (desc_list_len < 0)
1874  break;
1875  desc_list_len &= 0xfff;
1876  desc_list_end = p + desc_list_len;
1877  if (desc_list_end > p_end)
1878  break;
1879  for(;;) {
1880  desc_tag = get8(&p, desc_list_end);
1881  if (desc_tag < 0)
1882  break;
1883  desc_len = get8(&p, desc_list_end);
1884  desc_end = p + desc_len;
1885  if (desc_end > desc_list_end)
1886  break;
1887 
1888  av_dlog(ts->stream, "tag: 0x%02x len=%d\n",
1889  desc_tag, desc_len);
1890 
1891  switch(desc_tag) {
1892  case 0x48:
1893  service_type = get8(&p, p_end);
1894  if (service_type < 0)
1895  break;
1896  provider_name = getstr8(&p, p_end);
1897  if (!provider_name)
1898  break;
1899  name = getstr8(&p, p_end);
1900  if (name) {
1901  AVProgram *program = av_new_program(ts->stream, sid);
1902  if(program) {
1903  av_dict_set(&program->metadata, "service_name", name, 0);
1904  av_dict_set(&program->metadata, "service_provider", provider_name, 0);
1905  }
1906  }
1907  av_free(name);
1908  av_free(provider_name);
1909  break;
1910  default:
1911  break;
1912  }
1913  p = desc_end;
1914  }
1915  p = desc_list_end;
1916  }
1917 }
1918 
1919 static int parse_pcr(int64_t *ppcr_high, int *ppcr_low,
1920  const uint8_t *packet);
1921 
1922 /* handle one TS packet */
1923 static int handle_packet(MpegTSContext *ts, const uint8_t *packet)
1924 {
1925  AVFormatContext *s = ts->stream;
1926  MpegTSFilter *tss;
1927  int len, pid, cc, expected_cc, cc_ok, afc, is_start, is_discontinuity,
1928  has_adaptation, has_payload;
1929  const uint8_t *p, *p_end;
1930  int64_t pos;
1931 
1932  pid = AV_RB16(packet + 1) & 0x1fff;
1933  if(pid && discard_pid(ts, pid))
1934  return 0;
1935  is_start = packet[1] & 0x40;
1936  tss = ts->pids[pid];
1937  if (ts->auto_guess && tss == NULL && is_start) {
1938  add_pes_stream(ts, pid, -1);
1939  tss = ts->pids[pid];
1940  }
1941  if (!tss)
1942  return 0;
1943  ts->current_pid = pid;
1944 
1945  afc = (packet[3] >> 4) & 3;
1946  if (afc == 0) /* reserved value */
1947  return 0;
1948  has_adaptation = afc & 2;
1949  has_payload = afc & 1;
1950  is_discontinuity = has_adaptation
1951  && packet[4] != 0 /* with length > 0 */
1952  && (packet[5] & 0x80); /* and discontinuity indicated */
1953 
1954  /* continuity check (currently not used) */
1955  cc = (packet[3] & 0xf);
1956  expected_cc = has_payload ? (tss->last_cc + 1) & 0x0f : tss->last_cc;
1957  cc_ok = pid == 0x1FFF // null packet PID
1958  || is_discontinuity
1959  || tss->last_cc < 0
1960  || expected_cc == cc;
1961 
1962  tss->last_cc = cc;
1963  if (!cc_ok) {
1964  av_log(ts->stream, AV_LOG_DEBUG,
1965  "Continuity check failed for pid %d expected %d got %d\n",
1966  pid, expected_cc, cc);
1967  if(tss->type == MPEGTS_PES) {
1968  PESContext *pc = tss->u.pes_filter.opaque;
1969  pc->flags |= AV_PKT_FLAG_CORRUPT;
1970  }
1971  }
1972 
1973  if (!has_payload)
1974  return 0;
1975  p = packet + 4;
1976  if (has_adaptation) {
1977  /* skip adaptation field */
1978  p += p[0] + 1;
1979  }
1980  /* if past the end of packet, ignore */
1981  p_end = packet + TS_PACKET_SIZE;
1982  if (p >= p_end)
1983  return 0;
1984 
1985  pos = avio_tell(ts->stream->pb);
1986  if (pos >= 0) {
1987  av_assert0(pos >= TS_PACKET_SIZE);
1988  ts->pos47_full = pos - TS_PACKET_SIZE;
1989  }
1990 
1991  if (tss->type == MPEGTS_SECTION) {
1992  if (is_start) {
1993  /* pointer field present */
1994  len = *p++;
1995  if (p + len > p_end)
1996  return 0;
1997  if (len && cc_ok) {
1998  /* write remaining section bytes */
1999  write_section_data(s, tss,
2000  p, len, 0);
2001  /* check whether filter has been closed */
2002  if (!ts->pids[pid])
2003  return 0;
2004  }
2005  p += len;
2006  if (p < p_end) {
2007  write_section_data(s, tss,
2008  p, p_end - p, 1);
2009  }
2010  } else {
2011  if (cc_ok) {
2012  write_section_data(s, tss,
2013  p, p_end - p, 0);
2014  }
2015  }
2016 
2017  // stop find_stream_info from waiting for more streams
2018  // when all programs have received a PMT
2019  if(ts->stream->ctx_flags & AVFMTCTX_NOHEADER) {
2020  int i;
2021  for(i=0; i<ts->nb_prg; i++) {
2022  if (!ts->prg[i].pmt_found)
2023  break;
2024  }
2025  if (i == ts->nb_prg && ts->nb_prg > 0) {
2026  if (ts->stream->nb_streams > 1 || pos > 100000) {
2027  av_log(ts->stream, AV_LOG_DEBUG, "All programs have pmt, headers found\n");
2029  }
2030  }
2031  }
2032 
2033  } else {
2034  int ret;
2035  int64_t pcr = -1;
2036  int64_t pcr_h;
2037  int pcr_l;
2038  if (parse_pcr(&pcr_h, &pcr_l, packet) == 0)
2039  pcr = pcr_h * 300 + pcr_l;
2040  // Note: The position here points actually behind the current packet.
2041  if ((ret = tss->u.pes_filter.pes_cb(tss, p, p_end - p, is_start,
2042  pos - ts->raw_packet_size, pcr)) < 0)
2043  return ret;
2044  }
2045 
2046  return 0;
2047 }
2048 
2049 static void reanalyze(MpegTSContext *ts) {
2050  AVIOContext *pb = ts->stream->pb;
2051  int64_t pos = avio_tell(pb);
2052  if(pos < 0)
2053  return;
2054  pos -= ts->pos47_full;
2055  if (pos == TS_PACKET_SIZE) {
2056  ts->size_stat[0] ++;
2057  } else if (pos == TS_DVHS_PACKET_SIZE) {
2058  ts->size_stat[1] ++;
2059  } else if (pos == TS_FEC_PACKET_SIZE) {
2060  ts->size_stat[2] ++;
2061  }
2062 
2063  ts->size_stat_count ++;
2065  int newsize = 0;
2066  if (ts->size_stat[0] > SIZE_STAT_THRESHOLD) {
2067  newsize = TS_PACKET_SIZE;
2068  } else if (ts->size_stat[1] > SIZE_STAT_THRESHOLD) {
2069  newsize = TS_DVHS_PACKET_SIZE;
2070  } else if (ts->size_stat[2] > SIZE_STAT_THRESHOLD) {
2071  newsize = TS_FEC_PACKET_SIZE;
2072  }
2073  if (newsize && newsize != ts->raw_packet_size) {
2074  av_log(ts->stream, AV_LOG_WARNING, "changing packet size to %d\n", newsize);
2075  ts->raw_packet_size = newsize;
2076  }
2077  ts->size_stat_count = 0;
2078  memset(ts->size_stat, 0, sizeof(ts->size_stat));
2079  }
2080 }
2081 
2082 /* XXX: try to find a better synchro over several packets (use
2083  get_packet_size() ?) */
2085 {
2086  AVIOContext *pb = s->pb;
2087  int c, i;
2088 
2089  for(i = 0;i < MAX_RESYNC_SIZE; i++) {
2090  c = avio_r8(pb);
2091  if (url_feof(pb))
2092  return -1;
2093  if (c == 0x47) {
2094  avio_seek(pb, -1, SEEK_CUR);
2095  reanalyze(s->priv_data);
2096  return 0;
2097  }
2098  }
2099  av_log(s, AV_LOG_ERROR, "max resync size reached, could not find sync byte\n");
2100  /* no sync found */
2101  return -1;
2102 }
2103 
2104 /* return -1 if error or EOF. Return 0 if OK. */
2105 static int read_packet(AVFormatContext *s, uint8_t *buf, int raw_packet_size, const uint8_t **data)
2106 {
2107  AVIOContext *pb = s->pb;
2108  int len;
2109 
2110  for(;;) {
2111  len = ffio_read_indirect(pb, buf, TS_PACKET_SIZE, data);
2112  if (len != TS_PACKET_SIZE)
2113  return len < 0 ? len : AVERROR_EOF;
2114  /* check packet sync byte */
2115  if ((*data)[0] != 0x47) {
2116  /* find a new packet start */
2117  uint64_t pos = avio_tell(pb);
2118  avio_seek(pb, -FFMIN(raw_packet_size, pos), SEEK_CUR);
2119 
2120  if (mpegts_resync(s) < 0)
2121  return AVERROR(EAGAIN);
2122  else
2123  continue;
2124  } else {
2125  break;
2126  }
2127  }
2128  return 0;
2129 }
2130 
2131 static void finished_reading_packet(AVFormatContext *s, int raw_packet_size)
2132 {
2133  AVIOContext *pb = s->pb;
2134  int skip = raw_packet_size - TS_PACKET_SIZE;
2135  if (skip > 0)
2136  avio_skip(pb, skip);
2137 }
2138 
2139 static int handle_packets(MpegTSContext *ts, int nb_packets)
2140 {
2141  AVFormatContext *s = ts->stream;
2143  const uint8_t *data;
2144  int packet_num, ret = 0;
2145 
2146  if (avio_tell(s->pb) != ts->last_pos) {
2147  int i;
2148  av_dlog(ts->stream, "Skipping after seek\n");
2149  /* seek detected, flush pes buffer */
2150  for (i = 0; i < NB_PID_MAX; i++) {
2151  if (ts->pids[i]) {
2152  if (ts->pids[i]->type == MPEGTS_PES) {
2153  PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
2154  av_buffer_unref(&pes->buffer);
2155  pes->data_index = 0;
2156  pes->state = MPEGTS_SKIP; /* skip until pes header */
2157  pes->last_pcr = -1;
2158  }
2159  ts->pids[i]->last_cc = -1;
2160  }
2161  }
2162  }
2163 
2164  ts->stop_parse = 0;
2165  packet_num = 0;
2166  memset(packet + TS_PACKET_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
2167  for(;;) {
2168  packet_num++;
2169  if (nb_packets != 0 && packet_num >= nb_packets ||
2170  ts->stop_parse > 1) {
2171  ret = AVERROR(EAGAIN);
2172  break;
2173  }
2174  if (ts->stop_parse > 0)
2175  break;
2176 
2177  ret = read_packet(s, packet, ts->raw_packet_size, &data);
2178  if (ret != 0)
2179  break;
2180  ret = handle_packet(ts, data);
2182  if (ret != 0)
2183  break;
2184  }
2185  ts->last_pos = avio_tell(s->pb);
2186  return ret;
2187 }
2188 
2190 {
2191  const int size= p->buf_size;
2192  int maxscore=0;
2193  int sumscore=0;
2194  int i;
2195  int check_count= size / TS_FEC_PACKET_SIZE;
2196 #define CHECK_COUNT 10
2197 #define CHECK_BLOCK 100
2198 
2199  if (check_count < CHECK_COUNT)
2200  return -1;
2201 
2202  for (i=0; i<check_count; i+=CHECK_BLOCK){
2203  int left = FFMIN(check_count - i, CHECK_BLOCK);
2204  int score = analyze(p->buf + TS_PACKET_SIZE *i, TS_PACKET_SIZE *left, TS_PACKET_SIZE , NULL);
2205  int dvhs_score= analyze(p->buf + TS_DVHS_PACKET_SIZE*i, TS_DVHS_PACKET_SIZE*left, TS_DVHS_PACKET_SIZE, NULL);
2206  int fec_score = analyze(p->buf + TS_FEC_PACKET_SIZE *i, TS_FEC_PACKET_SIZE *left, TS_FEC_PACKET_SIZE , NULL);
2207  score = FFMAX3(score, dvhs_score, fec_score);
2208  sumscore += score;
2209  maxscore = FFMAX(maxscore, score);
2210  }
2211 
2212  sumscore = sumscore*CHECK_COUNT/check_count;
2213  maxscore = maxscore*CHECK_COUNT/CHECK_BLOCK;
2214 
2215  av_dlog(0, "TS score: %d %d\n", sumscore, maxscore);
2216 
2217  if (sumscore > 6) return AVPROBE_SCORE_MAX + sumscore - CHECK_COUNT;
2218  else if (maxscore > 6) return AVPROBE_SCORE_MAX/2 + sumscore - CHECK_COUNT;
2219  else return -1;
2220 }
2221 
2222 /* return the 90kHz PCR and the extension for the 27MHz PCR. return
2223  (-1) if not available */
2224 static int parse_pcr(int64_t *ppcr_high, int *ppcr_low,
2225  const uint8_t *packet)
2226 {
2227  int afc, len, flags;
2228  const uint8_t *p;
2229  unsigned int v;
2230 
2231  afc = (packet[3] >> 4) & 3;
2232  if (afc <= 1)
2233  return -1;
2234  p = packet + 4;
2235  len = p[0];
2236  p++;
2237  if (len == 0)
2238  return -1;
2239  flags = *p++;
2240  len--;
2241  if (!(flags & 0x10))
2242  return -1;
2243  if (len < 6)
2244  return -1;
2245  v = AV_RB32(p);
2246  *ppcr_high = ((int64_t)v << 1) | (p[4] >> 7);
2247  *ppcr_low = ((p[4] & 1) << 8) | p[5];
2248  return 0;
2249 }
2250 
2251 static void seek_back(AVFormatContext *s, AVIOContext *pb, int64_t pos) {
2252 
2253  /* NOTE: We attempt to seek on non-seekable files as well, as the
2254  * probe buffer usually is big enough. Only warn if the seek failed
2255  * on files where the seek should work. */
2256  if (avio_seek(pb, pos, SEEK_SET) < 0)
2257  av_log(s, pb->seekable ? AV_LOG_ERROR : AV_LOG_INFO, "Unable to seek back to the start\n");
2258 }
2259 
2261 {
2262  MpegTSContext *ts = s->priv_data;
2263  AVIOContext *pb = s->pb;
2264  uint8_t buf[8*1024]={0};
2265  int len;
2266  int64_t pos;
2267 
2269 
2270  /* read the first 8192 bytes to get packet size */
2271  pos = avio_tell(pb);
2272  len = avio_read(pb, buf, sizeof(buf));
2273  ts->raw_packet_size = get_packet_size(buf, len);
2274  if (ts->raw_packet_size <= 0) {
2275  av_log(s, AV_LOG_WARNING, "Could not detect TS packet size, defaulting to non-FEC/DVHS\n");
2277  }
2278  ts->stream = s;
2279  ts->auto_guess = 0;
2280 
2281  if (s->iformat == &ff_mpegts_demuxer) {
2282  /* normal demux */
2283 
2284  /* first do a scan to get all the services */
2285  seek_back(s, pb, pos);
2286 
2288 
2290 
2292  /* if could not find service, enable auto_guess */
2293 
2294  ts->auto_guess = 1;
2295 
2296  av_dlog(ts->stream, "tuning done\n");
2297 
2299  } else {
2300  AVStream *st;
2301  int pcr_pid, pid, nb_packets, nb_pcrs, ret, pcr_l;
2302  int64_t pcrs[2], pcr_h;
2303  int packet_count[2];
2304  uint8_t packet[TS_PACKET_SIZE];
2305  const uint8_t *data;
2306 
2307  /* only read packets */
2308 
2309  st = avformat_new_stream(s, NULL);
2310  if (!st)
2311  goto fail;
2312  avpriv_set_pts_info(st, 60, 1, 27000000);
2315 
2316  /* we iterate until we find two PCRs to estimate the bitrate */
2317  pcr_pid = -1;
2318  nb_pcrs = 0;
2319  nb_packets = 0;
2320  for(;;) {
2321  ret = read_packet(s, packet, ts->raw_packet_size, &data);
2322  if (ret < 0)
2323  goto fail;
2324  pid = AV_RB16(data + 1) & 0x1fff;
2325  if ((pcr_pid == -1 || pcr_pid == pid) &&
2326  parse_pcr(&pcr_h, &pcr_l, data) == 0) {
2328  pcr_pid = pid;
2329  packet_count[nb_pcrs] = nb_packets;
2330  pcrs[nb_pcrs] = pcr_h * 300 + pcr_l;
2331  nb_pcrs++;
2332  if (nb_pcrs >= 2)
2333  break;
2334  } else {
2336  }
2337  nb_packets++;
2338  }
2339 
2340  /* NOTE1: the bitrate is computed without the FEC */
2341  /* NOTE2: it is only the bitrate of the start of the stream */
2342  ts->pcr_incr = (pcrs[1] - pcrs[0]) / (packet_count[1] - packet_count[0]);
2343  ts->cur_pcr = pcrs[0] - ts->pcr_incr * packet_count[0];
2344  s->bit_rate = (TS_PACKET_SIZE * 8) * 27e6 / ts->pcr_incr;
2345  st->codec->bit_rate = s->bit_rate;
2346  st->start_time = ts->cur_pcr;
2347  av_dlog(ts->stream, "start=%0.3f pcr=%0.3f incr=%d\n",
2348  st->start_time / 1000000.0, pcrs[0] / 27e6, ts->pcr_incr);
2349  }
2350 
2351  seek_back(s, pb, pos);
2352  return 0;
2353  fail:
2354  return -1;
2355 }
2356 
2357 #define MAX_PACKET_READAHEAD ((128 * 1024) / 188)
2358 
2360  AVPacket *pkt)
2361 {
2362  MpegTSContext *ts = s->priv_data;
2363  int ret, i;
2364  int64_t pcr_h, next_pcr_h, pos;
2365  int pcr_l, next_pcr_l;
2366  uint8_t pcr_buf[12];
2367  const uint8_t *data;
2368 
2369  if (av_new_packet(pkt, TS_PACKET_SIZE) < 0)
2370  return AVERROR(ENOMEM);
2371  pkt->pos= avio_tell(s->pb);
2372  ret = read_packet(s, pkt->data, ts->raw_packet_size, &data);
2373  if (ret < 0) {
2374  av_free_packet(pkt);
2375  return ret;
2376  }
2377  if (data != pkt->data)
2378  memcpy(pkt->data, data, ts->raw_packet_size);
2380  if (ts->mpeg2ts_compute_pcr) {
2381  /* compute exact PCR for each packet */
2382  if (parse_pcr(&pcr_h, &pcr_l, pkt->data) == 0) {
2383  /* we read the next PCR (XXX: optimize it by using a bigger buffer */
2384  pos = avio_tell(s->pb);
2385  for(i = 0; i < MAX_PACKET_READAHEAD; i++) {
2386  avio_seek(s->pb, pos + i * ts->raw_packet_size, SEEK_SET);
2387  avio_read(s->pb, pcr_buf, 12);
2388  if (parse_pcr(&next_pcr_h, &next_pcr_l, pcr_buf) == 0) {
2389  /* XXX: not precise enough */
2390  ts->pcr_incr = ((next_pcr_h - pcr_h) * 300 + (next_pcr_l - pcr_l)) /
2391  (i + 1);
2392  break;
2393  }
2394  }
2395  avio_seek(s->pb, pos, SEEK_SET);
2396  /* no next PCR found: we use previous increment */
2397  ts->cur_pcr = pcr_h * 300 + pcr_l;
2398  }
2399  pkt->pts = ts->cur_pcr;
2400  pkt->duration = ts->pcr_incr;
2401  ts->cur_pcr += ts->pcr_incr;
2402  }
2403  pkt->stream_index = 0;
2404  return 0;
2405 }
2406 
2408  AVPacket *pkt)
2409 {
2410  MpegTSContext *ts = s->priv_data;
2411  int ret, i;
2412 
2413  pkt->size = -1;
2414  ts->pkt = pkt;
2415  ret = handle_packets(ts, 0);
2416  if (ret < 0) {
2417  av_free_packet(ts->pkt);
2418  /* flush pes data left */
2419  for (i = 0; i < NB_PID_MAX; i++) {
2420  if (ts->pids[i] && ts->pids[i]->type == MPEGTS_PES) {
2421  PESContext *pes = ts->pids[i]->u.pes_filter.opaque;
2422  if (pes->state == MPEGTS_PAYLOAD && pes->data_index > 0) {
2423  new_pes_packet(pes, pkt);
2424  pes->state = MPEGTS_SKIP;
2425  ret = 0;
2426  break;
2427  }
2428  }
2429  }
2430  }
2431 
2432  if (!ret && pkt->size < 0)
2433  ret = AVERROR(EINTR);
2434  return ret;
2435 }
2436 
2437 static void mpegts_free(MpegTSContext *ts)
2438 {
2439  int i;
2440 
2441  clear_programs(ts);
2442 
2443  for(i=0;i<NB_PID_MAX;i++)
2444  if (ts->pids[i]) mpegts_close_filter(ts, ts->pids[i]);
2445 }
2446 
2448 {
2449  MpegTSContext *ts = s->priv_data;
2450  mpegts_free(ts);
2451  return 0;
2452 }
2453 
2454 static av_unused int64_t mpegts_get_pcr(AVFormatContext *s, int stream_index,
2455  int64_t *ppos, int64_t pos_limit)
2456 {
2457  MpegTSContext *ts = s->priv_data;
2458  int64_t pos, timestamp;
2460  int pcr_l, pcr_pid = ((PESContext*)s->streams[stream_index]->priv_data)->pcr_pid;
2461  int pos47 = ts->pos47_full % ts->raw_packet_size;
2462  pos = ((*ppos + ts->raw_packet_size - 1 - pos47) / ts->raw_packet_size) * ts->raw_packet_size + pos47;
2463  while(pos < pos_limit) {
2464  if (avio_seek(s->pb, pos, SEEK_SET) < 0)
2465  return AV_NOPTS_VALUE;
2466  if (avio_read(s->pb, buf, TS_PACKET_SIZE) != TS_PACKET_SIZE)
2467  return AV_NOPTS_VALUE;
2468  if (buf[0] != 0x47) {
2469  avio_seek(s->pb, -TS_PACKET_SIZE, SEEK_CUR);
2470  if (mpegts_resync(s) < 0)
2471  return AV_NOPTS_VALUE;
2472  pos = avio_tell(s->pb);
2473  continue;
2474  }
2475  if ((pcr_pid < 0 || (AV_RB16(buf + 1) & 0x1fff) == pcr_pid) &&
2476  parse_pcr(&timestamp, &pcr_l, buf) == 0) {
2477  *ppos = pos;
2478  return timestamp;
2479  }
2480  pos += ts->raw_packet_size;
2481  }
2482 
2483  return AV_NOPTS_VALUE;
2484 }
2485 
2486 static int64_t mpegts_get_dts(AVFormatContext *s, int stream_index,
2487  int64_t *ppos, int64_t pos_limit)
2488 {
2489  MpegTSContext *ts = s->priv_data;
2490  int64_t pos;
2491  int pos47 = ts->pos47_full % ts->raw_packet_size;
2492  pos = ((*ppos + ts->raw_packet_size - 1 - pos47) / ts->raw_packet_size) * ts->raw_packet_size + pos47;
2494  if (avio_seek(s->pb, pos, SEEK_SET) < 0)
2495  return AV_NOPTS_VALUE;
2496  while(pos < pos_limit) {
2497  int ret;
2498  AVPacket pkt;
2499  av_init_packet(&pkt);
2500  ret= av_read_frame(s, &pkt);
2501  if(ret < 0)
2502  return AV_NOPTS_VALUE;
2503  av_free_packet(&pkt);
2504  if(pkt.dts != AV_NOPTS_VALUE && pkt.pos >= 0){
2505  ff_reduce_index(s, pkt.stream_index);
2506  av_add_index_entry(s->streams[pkt.stream_index], pkt.pos, pkt.dts, 0, 0, AVINDEX_KEYFRAME /* FIXME keyframe? */);
2507  if(pkt.stream_index == stream_index && pkt.pos >= *ppos){
2508  *ppos= pkt.pos;
2509  return pkt.dts;
2510  }
2511  }
2512  pos = pkt.pos;
2513  }
2514 
2515  return AV_NOPTS_VALUE;
2516 }
2517 
2518 /**************************************************************/
2519 /* parsing functions - called from other demuxers such as RTP */
2520 
2522 {
2523  MpegTSContext *ts;
2524 
2525  ts = av_mallocz(sizeof(MpegTSContext));
2526  if (!ts)
2527  return NULL;
2528  /* no stream case, currently used by RTP */
2530  ts->stream = s;
2531  ts->auto_guess = 1;
2534 
2535  return ts;
2536 }
2537 
2538 /* return the consumed length if a packet was output, or -1 if no
2539  packet is output */
2541  const uint8_t *buf, int len)
2542 {
2543  int len1;
2544 
2545  len1 = len;
2546  ts->pkt = pkt;
2547  for(;;) {
2548  ts->stop_parse = 0;
2549  if (len < TS_PACKET_SIZE)
2550  return -1;
2551  if (buf[0] != 0x47) {
2552  buf++;
2553  len--;
2554  } else {
2555  handle_packet(ts, buf);
2556  buf += TS_PACKET_SIZE;
2557  len -= TS_PACKET_SIZE;
2558  if (ts->stop_parse == 1)
2559  break;
2560  }
2561  }
2562  return len1 - len;
2563 }
2564 
2566 {
2567  mpegts_free(ts);
2568  av_free(ts);
2569 }
2570 
2571 AVInputFormat ff_mpegts_demuxer = {
2572  .name = "mpegts",
2573  .long_name = NULL_IF_CONFIG_SMALL("MPEG-TS (MPEG-2 Transport Stream)"),
2574  .priv_data_size = sizeof(MpegTSContext),
2579  .read_timestamp = mpegts_get_dts,
2581  .priv_class = &mpegts_class,
2582 };
2583 
2585  .name = "mpegtsraw",
2586  .long_name = NULL_IF_CONFIG_SMALL("raw MPEG-TS (MPEG-2 Transport Stream)"),
2587  .priv_data_size = sizeof(MpegTSContext),
2591  .read_timestamp = mpegts_get_dts,
2593  .priv_class = &mpegtsraw_class,
2594 };