From 4a4f7c802a71a1cdef3a70d23edc6f24ea20905c Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 8 Oct 2008 18:35:41 +0000 Subject: [PATCH] Bugfix #17784 Playanim now works for: - tiff, cineon, dpx, hdr, exr Only multilayer not, that's too much for a bugfix. Multilayer is a totally different image format, handled separately. ALso removed redundant printing for dpx/cineon. And fixed crash in cineon when G.scene doesnt exist. Bad bad, should not be there! --- source/blender/blenkernel/intern/multires.c | 4 ++++ source/blender/imbuf/intern/cineon/cineon_dpx.c | 8 ++++---- source/blender/imbuf/intern/cineon/cineonlib.c | 2 +- source/blender/imbuf/intern/cineon/dpxlib.c | 2 +- source/blender/src/playanim.c | 6 ++++++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index 259a4e0de04..4d312632b1a 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -642,6 +642,10 @@ static void multires_update_vertices(Mesh *me, EditMesh *em) MultiApplyData data; int i, j; + /* XXX added this to prevent crash, but if it works? (ton) */ + if(me->mr->verts==NULL) + return; + /* Prepare deltas */ pr_deltas= MEM_callocN(sizeof(vec3f)*last_lvl->totvert, "multires deltas 1"); cr_deltas= MEM_callocN(sizeof(vec3f)*last_lvl->totvert, "multires deltas 2"); diff --git a/source/blender/imbuf/intern/cineon/cineon_dpx.c b/source/blender/imbuf/intern/cineon/cineon_dpx.c index 2959ed654ab..514d6b5522b 100644 --- a/source/blender/imbuf/intern/cineon/cineon_dpx.c +++ b/source/blender/imbuf/intern/cineon/cineon_dpx.c @@ -48,10 +48,10 @@ static void cineon_conversion_parameters(LogImageByteConversionParameters *params) { - params->blackPoint = G.scene->r.cineonblack; - params->whitePoint = G.scene->r.cineonwhite; - params->gamma = G.scene->r.cineongamma; - params->doLogarithm = G.scene->r.subimtype & R_CINEON_LOG; + params->blackPoint = G.scene?G.scene->r.cineonblack:95; + params->whitePoint = G.scene?G.scene->r.cineonwhite:685; + params->gamma = G.scene?G.scene->r.cineongamma:1.7f; + params->doLogarithm = G.scene?G.scene->r.subimtype & R_CINEON_LOG:0; } static struct ImBuf *imb_load_dpx_cineon(unsigned char *mem, int use_cineon, int size, int flags) diff --git a/source/blender/imbuf/intern/cineon/cineonlib.c b/source/blender/imbuf/intern/cineon/cineonlib.c index ecee3c7d6c0..75516bbf3ae 100644 --- a/source/blender/imbuf/intern/cineon/cineonlib.c +++ b/source/blender/imbuf/intern/cineon/cineonlib.c @@ -617,7 +617,7 @@ cineonOpenFromMem(unsigned char *mem, unsigned int size) { cineon->file = 0; cineon->reading = 1; - verbose = 1; + verbose = 0; if (size < sizeof(CineonGenericHeader)) { if (verbose) d_printf("Not enough data for header!\n"); cineonClose(cineon); diff --git a/source/blender/imbuf/intern/cineon/dpxlib.c b/source/blender/imbuf/intern/cineon/dpxlib.c index 1710cdde501..8a9adc73cdc 100644 --- a/source/blender/imbuf/intern/cineon/dpxlib.c +++ b/source/blender/imbuf/intern/cineon/dpxlib.c @@ -199,7 +199,7 @@ dumpDpxMainHeader(DpxMainHeader* header) { #endif } -static int verbose = 1; +static int verbose = 0; void dpxSetVerbose(int verbosity) { verbose = verbosity; diff --git a/source/blender/src/playanim.c b/source/blender/src/playanim.c index 8421101f66c..8880380700d 100644 --- a/source/blender/src/playanim.c +++ b/source/blender/src/playanim.c @@ -191,6 +191,12 @@ static void toscreen(Pict *picture, struct ImBuf *ibuf) printf("no ibuf !\n"); return; } + if (ibuf->rect==NULL && ibuf->rect_float) { + IMB_rect_from_float(ibuf); + imb_freerectfloatImBuf(ibuf); + } + if (ibuf->rect==NULL) + return; glRasterPos2f(0.0f, 0.0f);