[Bf-blender-cvs] [39037fe] multiview: Merge commit 'origin/master~' into multiview
Dalai Felinto
noreply at git.blender.org
Wed Feb 4 20:42:25 CET 2015
Commit: 39037fe06c36f2eddc8394018ae561270cfa04e0
Author: Dalai Felinto
Date: Wed Feb 4 17:41:39 2015 -0200
Branches: multiview
https://developer.blender.org/rB39037fe06c36f2eddc8394018ae561270cfa04e0
Merge commit 'origin/master~' into multiview
Conflicts:
source/blender/blenkernel/intern/sequencer.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/image.c
index 8d7ddd4,b130372..230a1c2
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@@ -2273,11 -2102,19 +2273,19 @@@ void BKE_image_path_from_imformat
void BKE_image_path_from_imtype(
char *string, const char *base, const char *relbase, int frame,
- const char imtype, const bool use_ext, const bool use_frames)
+ const char imtype, const bool use_ext, const bool use_frames, const char *view)
{
- image_path_makepicstring(string, base, relbase, frame, imtype, NULL, use_ext, use_frames);
+ do_makepicstring(string, base, relbase, frame, imtype, NULL, use_ext, use_frames, view);
}
+ struct anim *openanim_noload(const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
+ {
+ struct anim *anim;
+
+ anim = IMB_open_anim(name, flags, streamindex, colorspace);
+ return anim;
+ }
+
/* used by sequencer too */
struct anim *openanim(const char *name, int flags, int streamindex, char colorspace[IMA_MAX_SPACE])
{
diff --cc source/blender/blenkernel/intern/sequencer.c
index cd9e546,dd46fdc..0689a2a
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@@ -1408,31 -1330,12 +1408,31 @@@ static double seq_rendersize_to_scale_f
return 0.25;
}
-static void seq_open_anim_file(Sequence *seq, bool openfile)
+/* the number of files will vary according to the stereo format */
+static size_t seq_num_files(Scene *scene, char views_format)
{
+ const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
+
+ if (!is_multiview) {
+ return 1;
+ }
+ else if (views_format == R_IMF_VIEWS_STEREO_3D) {
+ return 1;
+ }
+ /* R_IMF_VIEWS_INDIVIDUAL */
+ else {
+ return BKE_scene_num_views_get(&scene->r);
+ }
+}
+
- static void seq_open_anim_file(Scene *scene, Sequence *seq)
++static void seq_open_anim_file(Scene *scene, Sequence *seq, bool openfile)
+{
+ char dir[FILE_MAX];
char name[FILE_MAX];
StripProxy *proxy;
+ const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) != 0;
- if (seq->anim != NULL) {
+ if ((seq->anims.first != NULL) && (((StripAnim *)seq->anims.first)->anim != NULL)) {
return;
}
@@@ -1442,72 -1342,32 +1442,91 @@@
BLI_join_dirfile(name, sizeof(name),
seq->strip->dir, seq->strip->stripdata->name);
BLI_path_abs(name, G.main->name);
-
- if (openfile) {
- seq->anim = openanim(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
- seq->streamindex, seq->strip->colorspace_settings.name);
- }
- else {
- seq->anim = openanim_noload(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
- seq->streamindex, seq->strip->colorspace_settings.name);
- }
- if (seq->anim == NULL) {
- return;
+ proxy = seq->strip->proxy;
+
+ if (proxy && (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR)) {
+ BLI_strncpy(dir, seq->strip->proxy->dir, sizeof(dir));
+ BLI_path_abs(dir, G.main->name);
}
- proxy = seq->strip->proxy;
+ if (is_multiview && seq->views_format == R_IMF_VIEWS_INDIVIDUAL) {
+ size_t totfiles = seq_num_files(scene, seq->views_format);
+ char prefix[FILE_MAX] = {'\0'};
+ char *ext = NULL;
+ int i;
- if (proxy == NULL) {
- return;
+ BKE_scene_view_prefix_get(scene, name, prefix, &ext);
+
+ if (prefix[0] == '\0')
+ goto monoview;
+
+ for (i = 0; i < totfiles; i++) {
+ const char *suffix = BKE_scene_view_id_suffix_get(&scene->r, i);
+ char str[FILE_MAX] = {'\0'};
+ StripAnim *sanim = MEM_mallocN(sizeof(StripAnim), "Strip Anim");
+
+ BLI_addtail(&seq->anims, sanim);
+
+ BLI_snprintf(str, sizeof(str), "%s%s%s", prefix, suffix, ext);
+
- sanim->anim = openanim(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
- seq->streamindex, seq->strip->colorspace_settings.name);
++ if (openfile) {
++ sanim->anim = openanim(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
++ else {
++ sanim->anim = openanim_noload(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
++
+ seq_anim_add_suffix(scene, sanim->anim, i);
+
+ if (sanim->anim == NULL) {
- sanim->anim = openanim(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
- seq->streamindex, seq->strip->colorspace_settings.name);
++ if (openfile) {
++ sanim->anim = openanim(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
++ else {
++ sanim->anim = openanim_noload(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
+
+ /* no individual view files - monoscopic, stereo 3d or exr multiview */
+ totfiles = 1;
+ }
+
+ if (proxy && (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR)) {
+ IMB_anim_set_index_dir(sanim->anim, dir);
+ }
+ }
}
+ else {
+ StripAnim *sanim;
+monoview:
- if (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
- char dir[FILE_MAX];
- BLI_strncpy(dir, seq->strip->proxy->dir, sizeof(dir));
- BLI_path_abs(dir, G.main->name);
+ sanim = MEM_mallocN(sizeof(StripAnim), "Strip Anim");
+ BLI_addtail(&seq->anims, sanim);
+
- sanim->anim = openanim(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
- seq->streamindex, seq->strip->colorspace_settings.name);
++ if (openfile) {
++ sanim->anim = openanim(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
++ else {
++ sanim->anim = openanim_noload(name, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0),
++ seq->streamindex, seq->strip->colorspace_settings.name);
++ }
+
+ if (sanim->anim == NULL) {
+ return;
+ }
- IMB_anim_set_index_dir(seq->anim, dir);
+ if (proxy == NULL) {
+ return;
+ }
+
+ if (seq->flag & SEQ_USE_PROXY_CUSTOM_DIR) {
+ IMB_anim_set_index_dir(sanim->anim, dir);
+ }
}
}
@@@ -1609,10 -1464,9 +1628,10 @@@ static ImBuf *seq_proxy_fetch(const Seq
return NULL;
}
- seq_open_anim_file(context->scene, seq);
- seq_open_anim_file(seq, true);
++ seq_open_anim_file(context->scene, seq, true);
+ sanim = seq->anims.first;
- frameno = IMB_anim_index_get_frame_index(seq->anim, seq->strip->proxy->tc, frameno);
+ frameno = IMB_anim_index_get_frame_index(sanim ? sanim->anim : NULL, seq->strip->proxy->tc, frameno);
return IMB_anim_absolute(seq->strip->proxy->anim, frameno, IMB_TC_NONE, IMB_PROXY_NONE);
}
@@@ -1767,46 -1548,34 +1786,47 @@@ void BKE_sequencer_proxy_rebuild_contex
}
if (!(seq->flag & SEQ_USE_PROXY)) {
- return NULL;
+ return;
}
- context = MEM_callocN(sizeof(SeqIndexBuildContext), "seq proxy rebuild context");
+ num_files = seq_proxy_context_count(seq, scene);
+
+ for (i = 0; i < num_files; i++) {
+ if (seq_proxy_multiview_context_invalid(seq, scene, i))
+ continue;
+
+ context = MEM_callocN(sizeof(SeqIndexBuildContext), "seq proxy rebuild context");
+
+ nseq = BKE_sequence_dupli_recursive(scene, scene, seq, 0);
- nseq = BKE_sequence_dupli_recursive(scene, scene, seq, 0);
+ context->tc_flags = nseq->strip->proxy->build_tc_flags;
+ context->size_flags = nseq->strip->proxy->build_size_flags;
+ context->quality = nseq->strip->proxy->quality;
+ context->overwrite = (nseq->strip->proxy->build_flags & SEQ_PROXY_SKIP_EXISTING) == 0;
- context->tc_flags = nseq->strip->proxy->build_tc_flags;
- context->size_flags = nseq->strip->proxy->build_size_flags;
- context->quality = nseq->strip->proxy->quality;
- context->overwrite = (nseq->strip->proxy->build_flags & SEQ_PROXY_SKIP_EXISTING) == 0;
+ context->bmain = bmain;
+ context->scene = scene;
+ context->orig_seq = seq;
+ context->seq = nseq;
+
- context->bmain = bmain;
- context->scene = scene;
- context->orig_seq = seq;
- context->seq = nseq;
+ context->view_id = i; /* only for images */
- if (nseq->type == SEQ_TYPE_MOVIE) {
- seq_open_anim_file(nseq, true);
+ link = BLI_genericNodeN(context);
+ BLI_addtail(queue, link);
- if (nseq->anim) {
- context->index_context = IMB_anim_index_rebuild_context(nseq->anim,
- context->tc_flags, context->size_flags, context->quality,
- context->overwrite, file_list);
+ if (nseq->type == SEQ_TYPE_MOVIE) {
+ StripAnim *sanim;
+
- seq_open_anim_file(scene, nseq);
++ seq_open_anim_file(scene, nseq, true);
+ sanim = BLI_findlink(&nseq->anims, i);
+
+ if (sanim->anim) {
+ context->index_context = IMB_anim_index_rebuild_context(sanim->anim,
+ context->tc_flags, context->size_flags, context->quality,
+ context->overwrite, file_list);
+ }
}
}
-
- return context;
}
void BKE_sequencer_proxy_rebuild(SeqIndexBuildContext *context, short *stop, short *do_update, float *progress)
@@@ -3099,116 -2786,35 +3119,116 @@@ monoview_image
case SEQ_TYPE_MOVIE:
{
- seq_open_anim_file(seq, false);
+ StripAnim *sanim;
+ bool is_multiview = (context->scene->r.scemode & R_MULTIVIEW) != 0;
+
+ /* load all the videos */
- seq_open_anim_file(context->scene, seq);
++ seq_open_anim_file(context->scene, seq, false);
+
+ if (is_multiview) {
+ ImBuf **ibuf_arr;
+ size_t totviews;
+ size_t totfiles = seq_num_files(context->scene, seq->views_format);
+ int i;
+
+ if (totfiles != BLI_listbase_count_ex(&seq->anims, totfiles + 1))
+ goto monoview_movie;
+
+ totviews = BKE_scene_num_views_get(&context->scene->r);
+ ibuf_arr = MEM_callocN(sizeof(ImBuf *) * totviews, "Sequence Image Views Imbu
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list