Commit 952786ce authored by aurel's avatar aurel

matroska: subtitle display duration must be stored in pkt->convergence_duration


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@15206 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent f9e37447
......@@ -1583,7 +1583,10 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
pkt->pts = timecode;
pkt->pos = pos;
pkt->duration = duration;
if (track->type == MATROSKA_TRACK_TYPE_SUBTITLE)
pkt->convergence_duration = duration;
else
pkt->duration = duration;
dynarray_add(&matroska->packets, &matroska->num_packets, pkt);
}
......
......@@ -749,6 +749,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
ByteIOContext *pb = s->pb;
AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
int keyframe = !!(pkt->flags & PKT_FLAG_KEY);
int duration = pkt->duration;
int ret;
// start a new cluster every 5 MB or 5 sec
......@@ -781,8 +782,9 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
mkv_write_block(s, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7);
} else {
ebml_master blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP, mkv_blockgroup_size(pkt));
duration = pkt->convergence_duration;
mkv_write_block(s, MATROSKA_ID_BLOCK, pkt, 0);
put_ebml_uint(pb, MATROSKA_ID_DURATION, pkt->duration);
put_ebml_uint(pb, MATROSKA_ID_DURATION, duration);
end_ebml_master(pb, blockgroup);
}
......@@ -791,7 +793,7 @@ static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
if (ret < 0) return ret;
}
mkv->duration = FFMAX(mkv->duration, pkt->pts + pkt->duration);
mkv->duration = FFMAX(mkv->duration, pkt->pts + duration);
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment