Merge commit '7968059e5c3cd8f91407f379c11bbf71a1b84c74'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 3 Sep 2014 10:44:14 +0000 (12:44 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 3 Sep 2014 10:44:14 +0000 (12:44 +0200)
* commit '7968059e5c3cd8f91407f379c11bbf71a1b84c74':
  mpegts: Allow custom max resync size

Conflicts:
libavformat/mpegts.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/mpegts.c

@@@ -137,9 -126,8 +137,11 @@@ struct MpegTSContext 
      /** to detect seek */
      int64_t last_pos;
  
 +    int skip_changes;
 +    int skip_clear;
 +
+     int resync_size;
      /******************************************/
      /* private mpegts data */
      /* scan context */
      unsigned int nb_prg;
      struct Program *prg;
  
 +    int8_t crc_validity[NB_PID_MAX];
      /** filters for various streams specified by PMT + for the PAT and PMT */
      MpegTSFilter *pids[NB_PID_MAX];
 +    int current_pid;
  };
  
- static const AVOption mpegtsraw_options[] = {
+ #define MPEGTS_OPTIONS \
+     { "resync_size",   "Size limit for looking up a new syncronization.", offsetof(MpegTSContext, resync_size), AV_OPT_TYPE_INT,  { .i64 =  MAX_RESYNC_SIZE}, 0, INT_MAX,  AV_OPT_FLAG_DECODING_PARAM }
 -static const AVOption options[] = {
 -    MPEGTS_OPTIONS,
 -    { NULL },
 -};
 -
 -static const AVClass mpegts_class = {
 -    .class_name = "mpegts demuxer",
 -    .item_name  = av_default_item_name,
 -    .option     = options,
 -    .version    = LIBAVUTIL_VERSION_INT,
 -};
 -
+ static const AVOption raw_options[] = {
+     MPEGTS_OPTIONS,
      { "compute_pcr",   "Compute exact PCR for each transport stream packet.",
            offsetof(MpegTSContext, mpeg2ts_compute_pcr), AV_OPT_TYPE_INT,
            { .i64 = 0 }, 0, 1,  AV_OPT_FLAG_DECODING_PARAM },
@@@ -171,25 -173,6 +177,26 @@@ static const AVClass mpegtsraw_class = 
      .version    = LIBAVUTIL_VERSION_INT,
  };
  
- static const AVOption mpegts_options[] = {
++static const AVOption options[] = {
++    MPEGTS_OPTIONS,
 +    {"fix_teletext_pts", "Try to fix pts values of dvb teletext streams.", offsetof(MpegTSContext, fix_teletext_pts), AV_OPT_TYPE_INT,
 +     {.i64 = 1}, 0, 1, AV_OPT_FLAG_DECODING_PARAM },
 +    {"ts_packetsize", "Output option carrying the raw packet size.", offsetof(MpegTSContext, raw_packet_size), AV_OPT_TYPE_INT,
 +     {.i64 = 0}, 0, 0, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_EXPORT | AV_OPT_FLAG_READONLY },
 +    {"skip_changes", "Skip changing / adding streams / programs.", offsetof(MpegTSContext, skip_changes), AV_OPT_TYPE_INT,
 +     {.i64 = 0}, 0, 1, 0 },
 +    {"skip_clear", "Skip clearing programs.", offsetof(MpegTSContext, skip_clear), AV_OPT_TYPE_INT,
 +     {.i64 = 0}, 0, 1, 0 },
 +    { NULL },
 +};
 +
 +static const AVClass mpegts_class = {
 +    .class_name = "mpegts demuxer",
 +    .item_name  = av_default_item_name,
-     .option     = mpegts_options,
++    .option     = options,
 +    .version    = LIBAVUTIL_VERSION_INT,
 +};
 +
  /* TS stream handling */
  
  enum MpegTSState {
@@@ -2191,9 -1827,9 +2199,9 @@@ static int mpegts_resync(AVFormatContex
      AVIOContext *pb = s->pb;
      int c, i;
  
-     for (i = 0; i < MAX_RESYNC_SIZE; i++) {
+     for (i = 0; i < ts->resync_size; i++) {
          c = avio_r8(pb);
 -        if (pb->eof_reached)
 +        if (avio_feof(pb))
              return AVERROR_EOF;
          if (c == 0x47) {
              avio_seek(pb, -1, SEEK_CUR);