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
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-02-03 15:24:25 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-02-03 15:25:47 +0400
commit9bec4f777973c066ac12ae5ad2df107be23bdc7b (patch)
tree22e81bf056a0540936a5666cc9e36fd7a1dd4ecd /source
parent15f449c52909d5275feb23d814988ded3369ba62 (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')
-rw-r--r--source/blender/imbuf/intern/anim_movie.c11
-rw-r--r--source/blender/imbuf/intern/indexer.c2
-rw-r--r--source/gameengine/VideoTexture/VideoFFmpeg.cpp2
3 files changed, 9 insertions, 6 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) {
diff --git a/source/gameengine/VideoTexture/VideoFFmpeg.cpp b/source/gameengine/VideoTexture/VideoFFmpeg.cpp
index 139988f64ea..3bad7c92efe 100644
--- a/source/gameengine/VideoTexture/VideoFFmpeg.cpp
+++ b/source/gameengine/VideoTexture/VideoFFmpeg.cpp
@@ -220,7 +220,7 @@ int VideoFFmpeg::openStream(const char *filename, AVInputFormat *inputFormat, AV
codecCtx->frame_rate_base=1000;
m_baseFrameRate = (double)codecCtx->frame_rate / (double)codecCtx->frame_rate_base;
#else
- m_baseFrameRate = av_q2d(formatCtx->streams[videoStream]->r_frame_rate);
+ m_baseFrameRate = av_q2d(av_get_r_frame_rate_compat(formatCtx->streams[videoStream]));
#endif
if (m_baseFrameRate <= 0.0)
m_baseFrameRate = defFrameRate;