mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
matroska: subtitle display duration must be stored in pkt->convergence_duration
Originally committed as revision 15206 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
647148c638
commit
62c24705c8
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user