diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index e512752dc2e791e81240da8d7ba474eaa827ea6d..6399cf30620449881e6e408a65ce34cf84a89001 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -47,6 +47,7 @@ typedef struct { int lpcm_align; uint8_t *fifo_iframe_ptr; int align_iframe; + int64_t vobu_start_pts; } StreamInfo; typedef struct { @@ -1176,9 +1177,10 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt) fifo_realloc(&stream->fifo, fifo_size(&stream->fifo, NULL) + size + 1); if (s->is_dvd){ - if (is_iframe) { + if (is_iframe && (s->packet_number == 0 || (pts - stream->vobu_start_pts >= 36000))) { // min VOBU length 0.4 seconds (mpucoder) stream->fifo_iframe_ptr = stream->fifo.wptr; stream->align_iframe = 1; + stream->vobu_start_pts = pts; } else { stream->align_iframe = 0; }