summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/matroskadec.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 7452ff0599..4c4cb84251 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -1420,7 +1420,8 @@ static void matroska_clear_queue(MatroskaDemuxContext *matroska)
static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
int size, int64_t pos, uint64_t cluster_time,
- uint64_t duration, int is_keyframe)
+ uint64_t duration, int is_keyframe,
+ int64_t cluster_pos)
{
MatroskaTrack *track;
int is_video_key_frame = is_keyframe, res = 0;
@@ -1545,8 +1546,12 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data,
uint64_t timecode = AV_NOPTS_VALUE;
if (cluster_time != (uint64_t)-1
- && (block_time >= 0 || cluster_time >= -block_time))
+ && (block_time >= 0 || cluster_time >= -block_time)) {
timecode = cluster_time + block_time;
+ if (is_keyframe)
+ av_add_index_entry(st, cluster_pos, timecode,
+ 0, 0, AVINDEX_KEYFRAME);
+ }
for (n = 0; n < laces; n++) {
if (st->codec->codec_id == CODEC_ID_RA_288 ||
@@ -1641,7 +1646,7 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
MatroskaCluster cluster = { 0 };
EbmlList *blocks_list;
MatroskaBlock *blocks;
- int i, res, key_frame = 0;
+ int i, res;
offset_t pos = url_ftell(matroska->ctx->pb);
if (matroska->has_cluster_id){
/* For the first cluster we parse, its ID was already read as
@@ -1659,12 +1664,9 @@ static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
res=matroska_parse_block(matroska,
blocks[i].bin.data, blocks[i].bin.size,
blocks[i].bin.pos, cluster.timecode,
- blocks[i].duration, !blocks[i].reference);
- key_frame |= res > 0;
+ blocks[i].duration, !blocks[i].reference,
+ pos);
}
- if (key_frame)
- av_add_index_entry(matroska->vstream, pos,
- cluster.timecode, 0, 0, AVINDEX_KEYFRAME);
ebml_free(matroska_cluster, &cluster);
if (res < 0) matroska->done = 1;
return res;