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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-10-12 16:49:45 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-10-12 16:49:45 +0400
commit5a3540f4d8f8e674eaea96d6ce63f87b685c29ef (patch)
tree59d2ffa207d169c3c2ce05a57cd55af9470c7d07
parentbe24b4dfccfda38c776545d571897ab17ecc96a6 (diff)
Fixes for #26837: MPEG Preseek does not work for some h264 files.
- Display running job template in all sequencer modes It was displayed only for sequencer mode without preview. - Fixed proxy rebuild progress indicator It was alsways zero because of incorrect rounding. - Fixed timecode saving on windows (and probably some other platforms) It was caused by incorrect opening file for writting -- it should be opened in binary format "wb". This error caused incorrect movie duration detection on windows. - Fixed movie resolution detection for some movies. In file attached to report, Blender detected resolution 1920x1088 instead of 1920x1080. Not sure if this fix is correct or it's issue in FFmpeg, but it's something what mplayer using: store width/height before running avcodec_open(). - Fixed frame number calculation when building timecodes. It was rounding error caused some frames be positioned incorrect in several cases (that each 6th frame rendered as next frame from report).
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py3
-rw-r--r--source/blender/imbuf/intern/anim_movie.c8
-rw-r--r--source/blender/imbuf/intern/indexer.c8
3 files changed, 12 insertions, 7 deletions
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index b03e7b8c59c..2e957effccd 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -60,7 +60,6 @@ class SEQUENCER_HT_header(Header):
layout.separator()
layout.operator("sequencer.refresh_all")
- layout.template_running_jobs()
elif st.view_type == 'SEQUENCER_PREVIEW':
layout.separator()
layout.operator("sequencer.refresh_all")
@@ -76,6 +75,8 @@ class SEQUENCER_HT_header(Header):
row.prop(ed, "overlay_frame", text="")
row.prop(ed, "overlay_lock", text="", icon='LOCKED')
+ layout.template_running_jobs()
+
class SEQUENCER_MT_view_toggle(Menu):
bl_label = "View Type"
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index b9500c2f798..c07326c1237 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -418,6 +418,7 @@ static int startffmpeg(struct anim * anim) {
int frs_num;
double frs_den;
int streamcount;
+ int width, height;
#ifdef FFMPEG_SWSCALE_COLOR_SPACE_SUPPORT
/* The following for color space determination */
@@ -474,6 +475,9 @@ static int startffmpeg(struct anim * anim) {
pCodecCtx->workaround_bugs = 1;
+ width = pCodecCtx->width;
+ height = pCodecCtx->height;
+
if(avcodec_open(pCodecCtx, pCodec) < 0) {
av_close_input_file(pFormatCtx);
return -1;
@@ -498,8 +502,8 @@ static int startffmpeg(struct anim * anim) {
anim->params = 0;
- anim->x = pCodecCtx->width;
- anim->y = pCodecCtx->height;
+ anim->x = width;
+ anim->y = height;
anim->interlacing = 0;
anim->orientation = 0;
anim->framesize = anim->x * anim->y * 4;
diff --git a/source/blender/imbuf/intern/indexer.c b/source/blender/imbuf/intern/indexer.c
index d79e881e5a2..3f764e4d452 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -87,7 +87,7 @@ anim_index_builder * IMB_index_builder_create(const char * name)
BLI_make_existing_file(rv->temp_name);
- rv->fp = fopen(rv->temp_name, "w");
+ rv->fp = fopen(rv->temp_name, "wb");
if (!rv->fp) {
fprintf(stderr, "Couldn't open index target: %s! "
@@ -797,7 +797,7 @@ static int index_rebuild_ffmpeg(struct anim * anim,
while(av_read_frame(iFormatCtx, &next_packet) >= 0) {
int frame_finished = 0;
- float next_progress = ((int)floor(((double) next_packet.pos) * 100 /
+ float next_progress = (float)((int)floor(((double) next_packet.pos) * 100 /
((double) stream_size)+0.5)) / 100;
if (*progress != next_progress) {
@@ -840,8 +840,8 @@ static int index_rebuild_ffmpeg(struct anim * anim,
start_pts_set = TRUE;
}
- frameno = (pts - start_pts)
- * pts_time_base * frame_rate;
+ frameno = round((pts - start_pts)
+ * pts_time_base * frame_rate);
/* decoding starts *always* on I-Frames,
so: P-Frames won't work, even if all the