[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15239] trunk/blender/source/blender/imbuf /intern/cineon/dpxlib.c: Patch [#13777]
Diego Borghetti
bdiego at gmail.com
Mon Jun 16 09:15:10 CEST 2008
Revision: 15239
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15239
Author: bdiego
Date: 2008-06-16 09:15:09 +0200 (Mon, 16 Jun 2008)
Log Message:
-----------
Patch [#13777]
This commit fix the following problem in the DPX code:
1) The code always assume a depth of 10 bits
2) The code don't check the file type (Log or Linear)
Modified Paths:
--------------
trunk/blender/source/blender/imbuf/intern/cineon/dpxlib.c
Modified: trunk/blender/source/blender/imbuf/intern/cineon/dpxlib.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/cineon/dpxlib.c 2008-06-16 00:51:19 UTC (rev 15238)
+++ trunk/blender/source/blender/imbuf/intern/cineon/dpxlib.c 2008-06-16 07:15:09 UTC (rev 15239)
@@ -441,10 +441,15 @@
default: break;
}
}
- dpx->bitsPerPixel = 10;
- /* dpx->bitsPerPixel = header.imageInfo.channel[0].bits_per_pixel; */
+ /* dpx->bitsPerPixel = 10; */
+ dpx->bitsPerPixel = header.imageInfo.channel[0].bits_per_pixel;
+ if (dpx->bitsPerPixel != 10) {
+ if (verbose) d_printf("Don't support depth: %d\n", dpx->bitsPerPixel);
+ dpxClose(dpx);
+ return 0;
+ }
+
dpx->imageOffset = ntohl(header.fileInfo.offset);
-
dpx->lineBufferLength = pixelsToLongs(dpx->width * dpx->depth);
dpx->lineBuffer = malloc(dpx->lineBufferLength * 4);
if (dpx->lineBuffer == 0) {
@@ -471,6 +476,26 @@
dpx->fileYPos = 0;
logImageGetByteConversionDefaults(&dpx->params);
+ /* The SMPTE define this code:
+ * 2 - Linear
+ * 3 - Logarithmic
+ *
+ * Note that transfer_characteristics is U8, don't need
+ * check the byte order.
+ */
+ switch (header.imageInfo.channel[0].transfer_characteristics) {
+ case 2:
+ dpx->params.doLogarithm= 0;
+ break;
+ case 3:
+ dpx->params.doLogarithm= 1;
+ break;
+ default:
+ if (verbose) d_printf("Un-supported Transfer Characteristics: %d\n", header.imageInfo.channel[0].transfer_characteristics);
+ dpxClose(dpx);
+ return 0;
+ break;
+ }
setupLut(dpx);
dpx->getRow = &dpxGetRowBytes;
@@ -563,6 +588,18 @@
++shortFilename;
}
initDpxMainHeader(dpx, &header, shortFilename);
+ logImageGetByteConversionDefaults(&dpx->params);
+ /* Need set the file type before write the header!
+ * 2 - Linear
+ * 3 - Logarithmic
+ *
+ * Note that transfer characteristics is U8, don't need
+ * check the byte order.
+ */
+ if (dpx->params.doLogarithm == 0)
+ header.imageInfo.channel[0].transfer_characteristics= 2;
+ else
+ header.imageInfo.channel[0].transfer_characteristics= 3;
if (fwrite(&header, sizeof(header), 1, dpx->file) == 0) {
if (verbose) d_printf("Couldn't write image header\n");
@@ -570,8 +607,6 @@
return 0;
}
dpx->fileYPos = 0;
-
- logImageGetByteConversionDefaults(&dpx->params);
setupLut(dpx);
dpx->getRow = 0;
More information about the Bf-blender-cvs
mailing list