diff --git a/libavformat/matroska.c b/libavformat/matroska.c index afe161b845..252c47ba5e 100644 --- a/libavformat/matroska.c +++ b/libavformat/matroska.c @@ -2206,7 +2206,7 @@ matroska_read_header (AVFormatContext *s, st = av_new_stream(s, track->stream_index); if (st == NULL) return AVERROR_NOMEM; - av_set_pts_info(st, 24, 1, 1000); /* 24 bit pts in ms */ + av_set_pts_info(st, 64, matroska->time_scale, 1000*1000*1000); /* 64 bit pts in ns */ st->codec->codec_id = codec_id; @@ -2295,7 +2295,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, case MATROSKA_ID_BLOCK: { uint8_t *data, *origdata; int size; - uint64_t block_time; + int16_t block_time; uint32_t *lace_size = NULL; int n, track, flags, laces = 0; uint64_t num; @@ -2329,7 +2329,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, } /* block_time (relative to cluster time) */ - block_time = ((data[0] << 8) | data[1]) * matroska->time_scale; + block_time = (data[0] << 8) | data[1]; data += 2; size -= 2; flags = *data; @@ -2440,7 +2440,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska, pkt->stream_index = matroska->tracks[track]->stream_index; - pkt->pts = timecode / 1000000; /* ns to ms */ + pkt->pts = timecode; pkt->pos= pos; matroska_queue_packet(matroska, pkt); @@ -2514,7 +2514,7 @@ matroska_parse_cluster (MatroskaDemuxContext *matroska) uint64_t num; if ((res = ebml_read_uint(matroska, &id, &num)) < 0) break; - cluster_time = num * matroska->time_scale; + cluster_time = num; break; }