Merge commit '9455a023be9f3915ccf5511a0b8fdb5b8897b2b6' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 19 Jun 2014 22:48:51 +0000 (00:48 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 19 Jun 2014 22:48:51 +0000 (00:48 +0200)
* commit '9455a023be9f3915ccf5511a0b8fdb5b8897b2b6':
  matroskaenc: do not write negative timestamps

Conflicts:
tests/ref/lavf/mkv
tests/ref/seek/lavf-mkv

No change to fate as ffmpeg was not affected by these bugs

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

@@@ -1265,12 -1205,21 +1267,21 @@@ static int mkv_write_packet(AVFormatCon
      AVIOContext *pb = s->pb->seekable ? s->pb : mkv->dyn_bc;
      AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
      int ret, keyframe = !!(pkt->flags & AV_PKT_FLAG_KEY);
-     int64_t ts = mkv->tracks[pkt->stream_index].write_dts ? pkt->dts : pkt->pts;
+     int64_t ts;
      int cluster_size = avio_tell(pb) - (s->pb->seekable ? mkv->cluster_pos : 0);
  
+     if (pkt->dts < 0 && !mkv->ts_offset)
+         mkv->ts_offset = -pkt->dts;
+     pkt->dts += mkv->ts_offset;
+     if (pkt->pts != AV_NOPTS_VALUE)
+         pkt->pts += mkv->ts_offset;
+     ts = mkv->tracks[pkt->stream_index].write_dts ? pkt->dts : pkt->pts;
      // start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or
      // after 4k and on a keyframe
 -    if (mkv->cluster_pos &&
 +    if (mkv->cluster_pos != -1 &&
          ((!s->pb->seekable && (cluster_size > 32*1024 || ts > mkv->cluster_pts + 1000))
           ||                      cluster_size > 5*1024*1024 || ts > mkv->cluster_pts + 5000
           || (codec->codec_type == AVMEDIA_TYPE_VIDEO && keyframe && cluster_size > 4*1024))) {