[Bf-blender-cvs] [bb9851f7160] temp-vse-fixes: Fix T87967: M2T video seeking is broken
Richard Antalik
noreply at git.blender.org
Mon Aug 16 14:22:50 CEST 2021
Commit: bb9851f716098f61016d4e38c2509446236e5f68
Author: Richard Antalik
Date: Mon Aug 16 14:21:40 2021 +0200
Branches: temp-vse-fixes
https://developer.blender.org/rBbb9851f716098f61016d4e38c2509446236e5f68
Fix T87967: M2T video seeking is broken
Bug caused by integer overflow in ffmpeg_generic_seek_workaround().
Function max_ii() was used to limit int_64tvalue.
After fixing the issue there was another issue, where near-infinite loop
was caused by requested_pos being very large and stream being cut in a
way, that it was missing keyframe at beginning.
This was fixed by checking if we are reading beyond file content.
===================================================================
M source/blender/imbuf/intern/anim_movie.c
===================================================================
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index 2998c4781b6..dbca16ca82b 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -1213,7 +1213,7 @@ static int ffmpeg_generic_seek_workaround(struct anim *anim,
/* Step backward frame by frame until we find the key frame we are looking for. */
while (current_pts != 0) {
current_pts = *requested_pts - (int64_t)round(offset * steps_per_frame);
- current_pts = max_ii(current_pts, 0);
+ current_pts = MAX2(current_pts, 0);
/* Seek to timestamp. */
if (av_seek_frame(anim->pFormatCtx, anim->videoStream, current_pts, AVSEEK_FLAG_BACKWARD) <
@@ -1243,11 +1243,12 @@ static int ffmpeg_generic_seek_workaround(struct anim *anim,
/* We found the I-frame we were looking for! */
break;
}
- if (cur_pts == prev_pts) {
- /* We got the same key frame packet twice.
- * This probably means that we have hit the beginning of the stream. */
- break;
- }
+ }
+
+ if (cur_pts == prev_pts) {
+ /* We got the same key frame packet twice.
+ * This probably means that we have hit the beginning of the stream. */
+ break;
}
prev_pts = cur_pts;
More information about the Bf-blender-cvs
mailing list