diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-03 15:24:25 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-02-03 15:25:47 +0400 |
commit | 9bec4f777973c066ac12ae5ad2df107be23bdc7b (patch) | |
tree | 22e81bf056a0540936a5666cc9e36fd7a1dd4ecd /source/blender | |
parent | 15f449c52909d5275feb23d814988ded3369ba62 (diff) |
Fix T38455: Blenderplayer is not working
Was a regression since avg_frame_rate changes.
Didn't find reliable way to get stream duration which will
work with both FFmpeg and Libav so added some freaking black
magic to distinguish one from another.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/imbuf/intern/anim_movie.c | 11 | ||||
-rw-r--r-- | source/blender/imbuf/intern/indexer.c | 2 |
2 files changed, 8 insertions, 5 deletions
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c index b7bea0d96b5..9a3042d149e 100644 --- a/source/blender/imbuf/intern/anim_movie.c +++ b/source/blender/imbuf/intern/anim_movie.c @@ -466,6 +466,7 @@ static int startffmpeg(struct anim *anim) AVCodec *pCodec; AVFormatContext *pFormatCtx = NULL; AVCodecContext *pCodecCtx; + AVRational frame_rate; int frs_num; double frs_den; int streamcount; @@ -527,12 +528,14 @@ static int startffmpeg(struct anim *anim) return -1; } + frame_rate = av_get_r_frame_rate_compat(pFormatCtx->streams[videoStream]); anim->duration = ceil(pFormatCtx->duration * - av_q2d(pFormatCtx->streams[videoStream]->avg_frame_rate) / + av_q2d(frame_rate) / AV_TIME_BASE); + printf("%d\n", anim->duration); - frs_num = pFormatCtx->streams[videoStream]->avg_frame_rate.num; - frs_den = pFormatCtx->streams[videoStream]->avg_frame_rate.den; + frs_num = frame_rate.num; + frs_den = frame_rate.den; frs_den *= AV_TIME_BASE; @@ -970,7 +973,7 @@ static ImBuf *ffmpeg_fetchibuf(struct anim *anim, int position, v_st = anim->pFormatCtx->streams[anim->videoStream]; - frame_rate = av_q2d(v_st->avg_frame_rate); + frame_rate = av_q2d(av_get_r_frame_rate_compat(v_st)); st_time = anim->pFormatCtx->start_time; pts_time_base = av_q2d(v_st->time_base); diff --git a/source/blender/imbuf/intern/indexer.c b/source/blender/imbuf/intern/indexer.c index a3cb4048779..e45222706d7 100644 --- a/source/blender/imbuf/intern/indexer.c +++ b/source/blender/imbuf/intern/indexer.c @@ -910,7 +910,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context, stream_size = avio_size(context->iFormatCtx->pb); - context->frame_rate = av_q2d(context->iStream->avg_frame_rate); + context->frame_rate = av_q2d(av_get_r_frame_rate_compat(context->iStream)); context->pts_time_base = av_q2d(context->iStream->time_base); while (av_read_frame(context->iFormatCtx, &next_packet) >= 0) { |