diff options
author | Richard Antalik <richardantalik@gmail.com> | 2020-01-22 02:27:02 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2020-01-22 02:59:31 +0300 |
commit | 3119a014a6e126102c67b014a55dd455dc9557e2 (patch) | |
tree | 41646ccb62bf1c7bd8fba6068e3a373e9fc527dd /source/blender/editors/space_sequencer | |
parent | bda0c0847b5ef89b31d56b0d88705bafaef90616 (diff) |
Fix T70415 100% proxy files playing with poor performance
Refactor code to use `eSpaceSeq_Proxy_RenderSize` or corresponding `IMB_Proxy_Size`
enum items directly.
`SEQ_PROXY_RENDER_SIZE_100` has assigned value 99 to distinguish from `SEQ_PROXY_RENDER_SIZE_FULL`.
This caused error in image size calculation and because of that image had to be scaled.
Author: EitanSomething
Reviewed By: ISS
Differential Revision: http://developer.blender.org/D6368
Diffstat (limited to 'source/blender/editors/space_sequencer')
-rw-r--r-- | source/blender/editors/space_sequencer/sequencer_draw.c | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index 70cb28fa937..20fba7aa919 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -1023,27 +1023,25 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain, SeqRenderData context = {0}; ImBuf *ibuf; int rectx, recty; - float render_size; - float proxy_size = 100.0; + double render_size; short is_break = G.is_break; - render_size = sseq->render_size; - if (render_size == 0) { - render_size = scene->r.size; - } - else { - proxy_size = render_size; + if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_NONE) { + return NULL; } - if (render_size < 0) { - return NULL; + if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_SCENE) { + render_size = scene->r.size / 100.0; + } + else { + render_size = BKE_sequencer_rendersize_to_scale_factor(sseq->render_size); } - rectx = (render_size * (float)scene->r.xsch) / 100.0f + 0.5f; - recty = (render_size * (float)scene->r.ysch) / 100.0f + 0.5f; + rectx = render_size * scene->r.xsch + 0.5; + recty = render_size * scene->r.ysch + 0.5; BKE_sequencer_new_render_data( - bmain, depsgraph, scene, rectx, recty, proxy_size, false, &context); + bmain, depsgraph, scene, rectx, recty, sseq->render_size, false, &context); context.view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); /* Sequencer could start rendering, in this case we need to be sure it wouldn't be canceled @@ -1628,23 +1626,19 @@ void sequencer_draw_preview(const bContext *C, void drawprefetchseqspace(Scene *scene, ARegion *UNUSED(ar), SpaceSeq *sseq) { int rectx, recty; - int render_size = sseq->render_size; - int proxy_size = 100.0; - if (render_size == 0) { - render_size = scene->r.size; - } - else { - proxy_size = render_size; - } - if (render_size < 0) { + int render_size = BKE_sequencer_rendersize_to_scale_factor(sseq->render_size); + if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_NONE) { return; } - rectx = (render_size * scene->r.xsch) / 100; - recty = (render_size * scene->r.ysch) / 100; + if (sseq->render_size == SEQ_PROXY_RENDER_SIZE_SCENE) { + render_size = scene->r.size / 100.0; + } + rectx = render_size * scene->r.xsch + 0.5; + recty = render_size * scene->r.ysch + 0.5; if (sseq->mainb != SEQ_DRAW_SEQUENCE) { - give_ibuf_prefetch_request(rectx, recty, (scene->r.cfra), sseq->chanshown, proxy_size); + give_ibuf_prefetch_request(rectx, recty, (scene->r.cfra), sseq->chanshown, sseq->render_size); } } #endif |