Commit: ebdedf8a9646edf6b4cd5122b601213651c947ec Author: Dalai Felinto Date: Wed Feb 4 11:19:01 2015 -0200 Branches: multiview https://developer.blender.org/rBebdedf8a9646edf6b4cd5122b601213651c947ec
Merge remote-tracking branch 'origin/master' into multiview The conflict solving included a change in openexr_api.cpp (to have COMBINED always on head) that I'm not sure I should go ahead with. So this little bit may be reverted later. Conflicts: intern/cycles/blender/blender_camera.cpp source/blender/blenkernel/BKE_sequencer.h source/blender/blenkernel/intern/image.c source/blender/blenkernel/intern/sequencer.c source/blender/blenkernel/intern/writeframeserver.c source/blender/editors/include/ED_view3d.h source/blender/editors/sculpt_paint/paint_image_proj.c source/blender/editors/space_sequencer/sequencer_edit.c source/blender/imbuf/IMB_imbuf_types.h source/blender/imbuf/intern/openexr/openexr_api.cpp source/blender/makesdna/DNA_image_types.h source/blender/makesrna/intern/rna_image.c source/blender/render/intern/source/render_result.c source/blender/windowmanager/intern/wm_files.c =================================================================== =================================================================== diff --cc intern/cycles/blender/blender_camera.cpp index f30b992,16f555c..74151c3 --- a/intern/cycles/blender/blender_camera.cpp +++ b/intern/cycles/blender/blender_camera.cpp @@@ -521,7 -520,26 +525,27 @@@ static void blender_camera_view_subset( *cam_box = cam * (1.0f/cam_aspect); } -static void blender_camera_border_subset(BL::RenderSettings b_render, ++static void blender_camera_border_subset(BL::RenderEngine b_engine, ++ BL::RenderSettings b_render, + BL::Scene b_scene, + BL::SpaceView3D b_v3d, + BL::RegionView3D b_rv3d, + BL::Object b_ob, + int width, int height, + const BoundBox2D &border, + BoundBox2D *result) + { + /* Determine camera viewport subset. */ + BoundBox2D view_box, cam_box; - blender_camera_view_subset(b_render, b_scene, b_ob, b_v3d, b_rv3d, width, height, ++ blender_camera_view_subset(b_engine, b_render, b_scene, b_ob, b_v3d, b_rv3d, width, height, + &view_box, &cam_box); + + /* Determine viewport subset matching given border. */ + cam_box = cam_box.make_relative_to(view_box); + *result = cam_box.subset(border); + } + -static void blender_camera_border(BlenderCamera *bcam, BL::RenderSettings b_render, BL::Scene b_scene, BL::SpaceView3D b_v3d, +static void blender_camera_border(BlenderCamera *bcam, BL::RenderEngine b_engine, BL::RenderSettings b_render, BL::Scene b_scene, BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height) { bool is_camera_view; @@@ -551,20 -566,36 +572,38 @@@ if(!b_ob) return; + /* Determine camera border inside the viewport. */ + BoundBox2D full_border; - blender_camera_border_subset(b_render, ++ blender_camera_border_subset(b_engine, ++ b_render, + b_scene, + b_v3d, + b_rv3d, + b_ob, + width, height, + full_border, + &bcam->viewport_camera_border); + + if(!b_render.use_border()) { + return; + } + bcam->border.left = b_render.border_min_x(); bcam->border.right = b_render.border_max_x(); bcam->border.bottom = b_render.border_min_y(); bcam->border.top = b_render.border_max_y(); - /* determine camera viewport subset */ - BoundBox2D view_box, cam_box; - - blender_camera_view_subset(b_engine, b_render, b_scene, b_ob, b_v3d, b_rv3d, width, height, - &view_box, &cam_box); - - /* determine viewport subset matching camera border */ - cam_box = cam_box.make_relative_to(view_box); - bcam->border = cam_box.subset(bcam->border).clamp(); + /* Determine viewport subset matching camera border. */ - blender_camera_border_subset(b_render, ++ blender_camera_border_subset(b_engine, ++ b_render, + b_scene, + b_v3d, + b_rv3d, + b_ob, + width, height, + bcam->border, + &bcam->border); + bcam->border.clamp(); } void BlenderSync::sync_view(BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, int width, int height) diff --cc release/scripts/startup/bl_ui/space_sequencer.py index c03f02e,834973a..121902c --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@@ -1076,39 -1094,9 +1094,39 @@@ class SEQUENCER_PT_grease_pencil_tools( bl_region_type = 'UI' # NOTE: this is just a wrapper around the generic GP tools panel - # It contains access to some essential tools usually found only in - # toolbar, which doesn't exist here... + # It contains access to some essential tools usually found only in + # toolbar, which doesn't exist here... +class SEQUENCER_PT_stereo_3d(SequencerButtonsPanel, Panel): + bl_label = "Stereoscopy" + bl_options = {'DEFAULT_CLOSED'} + + @classmethod + def poll(cls, context): + if not cls.has_sequencer(context): + return False + + strip = act_strip(context) + if not strip: + return False + + return (strip.type in {'IMAGE', 'MOVIE'} and + context.scene.render.use_multiview) + + def draw(self, context): + layout = self.layout + + strip = act_strip(context) + + col = layout + col.label(text="Views Format:") + col.row().prop(strip, "views_format", expand=True) + + box = col.box() + box.active = strip.views_format == 'STEREO_3D' + box.template_image_stereo_3d(strip.stereo_3d_format) + + if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) diff --cc source/blender/blenkernel/BKE_sequencer.h index c698f9f,6b9c4fa..8663c4c --- a/source/blender/blenkernel/BKE_sequencer.h +++ b/source/blender/blenkernel/BKE_sequencer.h @@@ -239,7 -237,7 +240,7 @@@ struct StripElem *BKE_sequencer_give_st void BKE_sequencer_update_changed_seq_and_deps(struct Scene *scene, struct Sequence *changed_seq, int len_change, int ibuf_change); bool BKE_sequencer_input_have_to_preprocess(const SeqRenderData *context, struct Sequence *seq, float cfra); - void BKE_sequencer_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq, ListBase *queue); -struct SeqIndexBuildContext *BKE_sequencer_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq, struct GSet *file_list); ++void BKE_sequencer_proxy_rebuild_context(struct Main *bmain, struct Scene *scene, struct Sequence *seq, struct GSet *file_list, ListBase *queue); void BKE_sequencer_proxy_rebuild(struct SeqIndexBuildContext *context, short *stop, short *do_update, float *progress); void BKE_sequencer_proxy_rebuild_finish(struct SeqIndexBuildContext *context, bool stop); diff --cc source/blender/blenkernel/intern/image.c index 294b65a,b405e0a..8d7ddd4 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@@ -1003,31 -858,9 +1003,31 @@@ void BKE_image_memorypack(Scene *scene IMB_freeImBuf(ibuf); } +void BKE_image_packfiles(ReportList *reports, Image *ima, const char *basepath) +{ + const size_t totfiles = image_num_files(ima); + + if (totfiles == 1) { + ImagePackedFile *imapf = MEM_mallocN(sizeof(ImagePackedFile), "Image packed file"); + BLI_addtail(&ima->packedfiles, imapf); + imapf->packedfile = newPackedFile(reports, ima->name, basepath); + BLI_strncpy(imapf->filepath, ima->name, sizeof(imapf->filepath)); + } + else { + ImageView *iv; + for (iv = ima->views.first; iv; iv = iv->next) { + ImagePackedFile *imapf = MEM_mallocN(sizeof(ImagePackedFile), "Image packed file"); + BLI_addtail(&ima->packedfiles, imapf); + + imapf->packedfile = newPackedFile(reports, iv->filepath, basepath); + BLI_strncpy(imapf->filepath, iv->filepath, sizeof(imapf->filepath)); + } + } +} + void BKE_image_tag_time(Image *ima) { - ima->lastused = (int)PIL_check_seconds_timer(); + ima->lastused = PIL_check_seconds_timer_i(); } #if 0 @@@ -3174,74 -2594,46 +3174,79 @@@ static ImBuf *image_load_sequence_multi static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame) { - struct ImBuf *ibuf = NULL; - - ima->lastframe = frame; - - if (ima->anim == NULL) { - char str[FILE_MAX]; + struct ImBuf **ibuf_arr; + struct ImBuf *r_ibuf; + const bool is_multiview = (ima->flag & IMA_IS_MULTIVIEW) != 0; + const size_t totfiles = image_num_files(ima); + const size_t totviews = is_multiview ? BLI_listbase_count(&ima->views) : 1; + size_t i; + ImageAnim *ia; + + ibuf_arr = MEM_mallocN(sizeof(ImBuf *) * totviews, "Image Views (movie) Imbufs"); + + if ((BKE_image_has_anim(ima) == false) || + totfiles != BLI_listbase_count_ex(&ima->anims, totfiles + 1)) + { + int flags = IB_rect; + image_free_anims(ima); + + if (ima->flag & IMA_DEINTERLACE) { + flags |= IB_animdeinterlace; + } + - BKE_image_user_file_path(iuser, ima, str); + for (i = 0; i < totfiles; i++) { + char str[FILE_MAX]; + ImageUser iuser_t; + + /* allocate the ImageAnim */ + ia = MEM_mallocN(sizeof(ImageAnim), "Image Anim"); + BLI_addtail(&ima->anims, ia); + + if (iuser) + iuser_t = *iuser; + else + iuser_t.framenr = ima->lastframe; + + iuser_t.view = i; + + BKE_image_user_file_path(&iuser_t, ima, str); - /* FIXME: make several stream accessible in image editor, too*/ - ima->anim = openanim(str, flags, 0, ima->colorspace_settings.name); + /* FIXME: make several stream accessible in image editor, too*/ - ia->anim = openanim(str, IB_rect, 0, ima->colorspace_settings.name); ++ ia->anim = openanim(str, flags, 0, ima->colorspace_settings.name); - /* let's initialize this user */ - if (ima->anim && iuser && iuser->frames == 0) - iuser->frames = IMB_anim_get_duration(ima->anim, - IMB_TC_RECORD_RUN); + /* let's initialize this user */ + if (ia->anim && iuser && iuser->frames == 0) + iuser->frames = IMB_anim_get_duration(ia->anim, - IMB_TC_RECORD_RUN); ++ IMB_TC_RECORD_RUN); + } } - if (ima->anim) { - int dur = IMB_anim_get_duration(ima->anim, - IMB_TC_RECORD_RUN); - int fra = frame - 1; + if (BKE_image_has_anim(ima)) { + for (i = 0, ia = ima->anims.first; ia; ia = ia->next, i++) { + int dur = IMB_anim_get_duration(ia->anim, + IMB_TC_RECORD_RUN); + int fra = frame - 1; + + if (fra < 0) fra = 0; + if (fra > (dur - 1)) fra = dur - 1; + ibuf_arr[i] = IMB_makeSingleUser( + @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs