Merging r50160 through r50161 from trunk into soc-2011-tomato
[blender.git] / source / blender / editors / space_sequencer / sequencer_draw.c
index 50fffeac09d58e90fba4180a7a2a18c8395346d9..991ae873c5967d59ba84eb3a9a82f07d98130e82 100644 (file)
@@ -815,6 +815,41 @@ static void UNUSED_FUNCTION(set_special_seq_update) (int val)
        else special_seq_update = NULL;
 }
 
+ImBuf *sequencer_ibuf_get(struct Main *bmain, Scene *scene, SpaceSeq *sseq, int cfra, int frame_ofs)
+{
+       SeqRenderData context;
+       ImBuf *ibuf;
+       int rectx, recty;
+       float render_size = 0.0;
+       float proxy_size = 100.0;
+
+       render_size = sseq->render_size;
+       if (render_size == 0) {
+               render_size = scene->r.size;
+       }
+       else {
+               proxy_size = render_size;
+       }
+
+       if (render_size < 0) {
+               return NULL;
+       }
+
+       rectx = (render_size * (float)scene->r.xsch) / 100.0f + 0.5f;
+       recty = (render_size * (float)scene->r.ysch) / 100.0f + 0.5f;
+
+       context = BKE_sequencer_new_render_data(bmain, scene, rectx, recty, proxy_size);
+
+       if (special_seq_update)
+               ibuf = BKE_sequencer_give_ibuf_direct(context, cfra + frame_ofs, special_seq_update);
+       else if (!U.prefetchframes) // XXX || (G.f & G_PLAYANIM) == 0) {
+               ibuf = BKE_sequencer_give_ibuf(context, cfra + frame_ofs, sseq->chanshown);
+       else
+               ibuf = BKE_sequencer_give_ibuf_threaded(context, cfra + frame_ofs, sseq->chanshown);
+
+       return ibuf;
+}
+
 void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq, int cfra, int frame_ofs, int draw_overlay)
 {
        struct Main *bmain = CTX_data_main(C);
@@ -828,7 +863,6 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
        float col[3];
        GLuint texid;
        GLuint last_texid;
-       SeqRenderData context;
        unsigned char *display_buffer;
        void *cache_handle = NULL;
 
@@ -871,14 +905,7 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
        if (G.is_rendering)
                return;
 
-       context = BKE_sequencer_new_render_data(bmain, scene, rectx, recty, proxy_size);
-
-       if (special_seq_update)
-               ibuf = BKE_sequencer_give_ibuf_direct(context, cfra + frame_ofs, special_seq_update);
-       else if (!U.prefetchframes) // XXX || (G.f & G_PLAYANIM) == 0) {
-               ibuf = BKE_sequencer_give_ibuf(context, cfra + frame_ofs, sseq->chanshown);
-       else
-               ibuf = BKE_sequencer_give_ibuf_threaded(context, cfra + frame_ofs, sseq->chanshown);
+       ibuf = sequencer_ibuf_get(bmain, scene, sseq, cfra, frame_ofs);
        
        if (ibuf == NULL)
                return;