Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/imbuf')
-rw-r--r--source/blender/imbuf/intern/anim_movie.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index 8df0d69bcfa..421ef08dc25 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -839,7 +839,15 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
}
+/* disable seek_by_bytes for now, since bitrates are guessed wrong!
+ also: MPEG2TS-seeking was fixed in later versions of ffmpeg, so problem
+ is somewhat fixed by now (until we add correct timecode management code...)
+*/
+#if 0
seek_by_bytes = !!(anim->pFormatCtx->iformat->flags & AVFMT_TS_DISCONT);
+#else
+ seek_by_bytes = FALSE;
+#endif
if (position != anim->curposition + 1) {
#ifdef FFMPEG_OLD_FRAME_RATE
@@ -851,12 +859,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
av_q2d(anim->pFormatCtx->streams[anim->videoStream]
->r_frame_rate);
#endif
- double time_base =
- av_q2d(anim->pFormatCtx->streams[anim->videoStream]
- ->time_base);
+ double pts_time_base = av_q2d(anim->pFormatCtx->streams[anim->videoStream]->time_base);
long long pos;
- long long st_time = anim->pFormatCtx
- ->streams[anim->videoStream]->start_time;
+ long long st_time = anim->pFormatCtx->start_time;
int ret;
if (seek_by_bytes) {
@@ -876,7 +881,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
if (st_time != AV_NOPTS_VALUE) {
- pos += st_time * AV_TIME_BASE * time_base;
+ pos += st_time;
}
}
@@ -891,9 +896,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
pts_to_search = (long long)
- (((double) position) / time_base / frame_rate);
+ (((double) position) / pts_time_base / frame_rate);
if (st_time != AV_NOPTS_VALUE) {
- pts_to_search += st_time;
+ pts_to_search += st_time / pts_time_base/ AV_TIME_BASE;
}
pos_found = 0;