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