Commit Graph

820 Commits

Author SHA1 Message Date
Sergey Sharybin
41202e25e7 Fix #32763: Image flickering appears if Movie Clip Editor and compositor opened
The issue was caused by compositor was allocating float buffer for image and
then this buffer was filled with data converted from byte buffer.

If display happens at time between float was allocated and it was filled black
areas were appearing on the screen.

Made it so IMB_float_from_rect locks color management thread so display
transform wouldn't use uninitialized buffer anymore.
2012-10-04 20:31:08 +00:00
Sergey Sharybin
ef107d1a4d Color Management: fallback to stub ocio implementation in cases when
ocio configuration file failed to load

This solves issues with infinite NULL-checks to prevent crashes in
such situations. Currently only happens if there's no configuration
file at all, but could be tweaked further to fallback if this file
isn't usable by blender.
2012-10-04 13:39:08 +00:00
Campbell Barton
d8144ef0f5 style cleanup: comment blocks 2012-10-04 13:26:15 +00:00
Dan Eicher
c0efd2a3e8 colormanage_colorspace_get_named() can (and does) return NULL, added checks to prevent null pointer dereference if the named color profile isn't found 2012-10-03 21:52:36 +00:00
Brecht Van Lommel
4572a82de7 Fix #32712: non-multilayer openexr file save for a single channel image would
write wrong colors for float and crash for half-float.
2012-10-01 20:21:50 +00:00
Campbell Barton
ae32c946e1 style cleanup: define float sizes for interpolation functions, add retirn's on newlines (to better add breakpoints). 2012-10-01 06:18:45 +00:00
Campbell Barton
ed1cda9a6c style cleanup 2012-09-30 06:12:47 +00:00
Sergey Sharybin
433816ea9b Fixed typo in previous commit! 2012-09-26 13:22:30 +00:00
Sergey Sharybin
fae7dd22c7 Color Management: resolve warnings when OCIO configuration file misses None display 2012-09-26 13:17:47 +00:00
Sergey Sharybin
36966ccfeb Remove unneeded null-check: display settings should always be valid after IMB_colormanagement_check_file_config 2012-09-26 12:30:46 +00:00
Sergey Sharybin
9e96295ddb Fix #32666: Memory Cache Limit stops working after set to 2048
Solved two issues here:

- RNA update function for cache limiter wasn't type-casting to size_t
  type, which lead to long int overflow.

- Display buffer size in color management wasn't calculated properly,
  ended up with much more extra memory usage than it's needed.
2012-09-26 11:16:27 +00:00
Sergey Sharybin
456a78961c code cleanup: make naming more consistent 2012-09-25 10:21:51 +00:00
Sergey Sharybin
1f6f73e965 Color Management: mark some TODOs as resolved 2012-09-25 10:18:58 +00:00
Sergey Sharybin
b5a92a0d87 Color Management: render result could have been incorrectly changed by file saving routines 2012-09-25 09:34:19 +00:00
Sergey Sharybin
90a5e8593c Color Management: float generated images had is_data flag set incorrect 2012-09-25 08:42:24 +00:00
Sergey Sharybin
17dc6e7c04 Some further fixes for #32626: TIFF renders are limited to 8 bit even when we choose 16.
File type was checking for wrong flags, now it should be checked against
actual file format flags which would be used on save.

We also can not free float buffer if file format doesn't have IM_FTYPE_FLOAT
flag -- i.e. TIFF doesn't have such flag and it decides whether float or
byte buffer should be used based on image depth.
2012-09-24 18:22:33 +00:00
Sergey Sharybin
2953b6ab5c Fix #32644: ctrl+F11 internal animation player crash
Crash was caused by missed color management initialization -- it was
happening too late.

Move it to generic ImBuf init/exit functions, so now color management
is properly initializing when animation player is launched.
2012-09-24 13:48:37 +00:00
Sergey Sharybin
9e3e12fa4e Proper fix for #32626: TIFF renders are limited to 8 bit even when we choose 16.
Color management would be applied on both of float and byte buffers on image
save in cases if file format doesn't require linear float buffer and if image
is saving as render result.

This solves both initial report issue and TODO marked in previous fix.

Also de-duplicated image buffer color managing code and gave some more
meaningful names for few functions. Also wrote documentation around this
function, so current assumptions about spaces should be clear enough.

Made regression tests by saving EXR/PNG images to all supported format and
rendering OpenGL/Normal animation, in all cases seems everything is fine,
but more tests for sure would be welcome.
2012-09-24 11:56:07 +00:00
Campbell Barton
904515814f fix [#32626] TIFF renders are limited to 8 bit even when we choose 16.
this is a regression with color management, TIFF's were always being written as 8bit

however the float buffer is assumed to be linear when converting from float to 16bit pixels per channel, so support for color management might need to be added here.
2012-09-24 01:13:13 +00:00
Campbell Barton
fa2daf0dbd fix for crash loading old files without colormanagement. 2012-09-23 10:30:39 +00:00
Sergey Sharybin
f61ef65adb Color Management: different fixes for byte buffers
- Color space of byte buffer for generated images haven't been
  updated properly on change

- Byte buffers weren't handling data color spaces on display transform
  properly
2012-09-21 20:44:41 +00:00
Sergey Sharybin
a4f73c5694 Fix #32579: Sequencer crash when changing render dimensions
Memory limitor's queue could be affected when it's being iterated
on enforcing limits -- that's because iteration could free color
managed image buffers.

Fixed by getting least priority element after every element was
freed. Could be optimized a bit, but it anyway shouldn't be so
slow due to specific of cache limiting and limit enforcing finish
condition.
2012-09-20 12:59:16 +00:00
Sergey Sharybin
42558f83df Color Management: avoid byte->linear->byte conversion if display colorspace matches image's one
Solves slowdown when re-encoding byte image sequence or movie in sequencer.

Fixes #32605: Blender vse renders take more time to render than before
2012-09-20 11:35:33 +00:00
Sergey Sharybin
ddcc3f612a Fix #32603: Multi-Layer EXR files can't be color managed
Issue was caused by completely different way how multi-layer EXRs are loading,
they're bypassing general image buffer loading functions.

Solved by running color space transformation on render result construction
from multi-layer EXR image.

Also fixed issue with wrong display buffer computing for buffers with less
than 4 channels. Issues were:

- Display buffer is always expected to be RGBA
- OpenColorIO can not apply color space transformations on non-{RGB, RGBA}
  pixels.
2012-09-20 10:07:49 +00:00
Campbell Barton
25c96bc9f3 code cleanup: remove unused macros, commet some which may be useful later - or good to keep for completeness. quieted some warnings and add flags -Wmissing-include-dirs and -Wno-div-by-zero to cmake/gcc 2012-09-20 01:02:39 +00:00
Sergey Sharybin
d0f4c96394 Color Management: don't apply display transform on Non-Color images
Also don't color manage data buffers in texture painting.

Makes it possible to view heights and normal maps in proper space
and also paint on them without applying extra transformation.
2012-09-19 15:01:36 +00:00
Brecht Van Lommel
22fdc63b86 Color management: fix crashes and memory leaks when using custom OCIO configuration
Also fix some missing color spaces when loading some OCIO configurations, by falling
back to scene linear if role is not found. There can still be some errors in the
console, need to check this further.

http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management#OpenColorIO_Configuration
2012-09-18 19:20:26 +00:00
Campbell Barton
00c37e1ff6 code cleanup: correct include paths and comment 2012-09-17 04:08:36 +00:00
Sergey Sharybin
fc7de23537 Color Management: fix crash when displaying render preview if OCIO was disabled buildtime 2012-09-16 15:17:22 +00:00
Campbell Barton
2fb8292005 style cleanup 2012-09-16 04:58:18 +00:00
Campbell Barton
d724d0adfe code cleanup: quiet warnings for gcc's -Wundef, -Wmissing-declarations 2012-09-16 00:26:36 +00:00
Sergey Sharybin
a73dd3476e Color Management, Stage 2: Switch color pipeline to use OpenColorIO
Replace old color pipeline which was supporting linear/sRGB color spaces
only with OpenColorIO-based pipeline.

This introduces two configurable color spaces:

- Input color space for images and movie clips. This space is used to convert
  images/movies from color space in which file is saved to Blender's linear
  space (for float images, byte images are not internally converted, only input
  space is stored for such images and used later).

  This setting could be found in image/clip data block settings.

- Display color space which defines space in which particular display is working.

  This settings could be found in scene's Color Management panel.

When render result is being displayed on the screen, apart from converting image
to display space, some additional conversions could happen.

This conversions are:

- View, which defines tone curve applying before display transformation.
  These are different ways to view the image on the same display device.
  For example it could be used to emulate film view on sRGB display.

- Exposure affects on image exposure before tone map is applied.

- Gamma is post-display gamma correction, could be used to match particular
  display gamma.

- RGB curves are user-defined curves which are applying before display
  transformation, could be used for different purposes.

All this settings by default are only applying on render result and does not
affect on other images. If some particular image needs to be affected by this
transformation, "View as Render" setting of image data block should be set to
truth. Movie clips are always affected by all display transformations.

This commit also introduces configurable color space in which sequencer is
working. This setting could be found in scene's Color Management panel and
it should be used if such stuff as grading needs to be done in color space
different from sRGB (i.e. when Film view on sRGB display is use, using VD16
space as sequencer's internal space would make grading working in space
which is close to the space using for display).

Some technical notes:

- Image buffer's float buffer is now always in linear space, even if it was
  created from 16bit byte images.

- Space of byte buffer is stored in image buffer's rect_colorspace property.

- Profile of image buffer was removed since it's not longer meaningful.

- OpenGL and GLSL is supposed to always work in sRGB space. It is possible
  to support other spaces, but it's quite large project which isn't so
  much important.

- Legacy Color Management option disabled is emulated by using None display.
  It could have some regressions, but there's no clear way to avoid them.

- If OpenColorIO is disabled on build time, it should make blender behaving
  in the same way as previous release with color management enabled.

More details could be found at this page (more details would be added soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management

--
Thanks to Xavier Thomas, Lukas Toene for initial work on OpenColorIO
integration and to Brecht van Lommel for some further development and code/
usecase review!
2012-09-15 10:05:07 +00:00
Campbell Barton
fed6b2bcb7 code cleanup: remove paranoid/invalid NULL checks and also reduce some unneeded size_t -> int conversions. 2012-09-15 07:31:17 +00:00
Campbell Barton
77ed2d8ca9 code cleanup: remove paranoid NULL checks (these cases would crash earlier of the vars were in fact NULL) 2012-09-15 06:29:32 +00:00
Campbell Barton
e75f5c8208 quiet -Wmissing-prototypes warnings, and enable this warning by default for C with gcc.
helps for finding unused functions and making functions static, also did some minor code cleanup.
2012-09-15 01:52:28 +00:00
Sergey Sharybin
8791eaa5b0 Movie cache: made it thread safe to operate with memory limitor
Movie cache is using global memory limitor, which isn't thread safe
in some of operations, so it required to add mutex around limitor
operations in movie cache.

It's probably could be solved in a way with less locks involved by
using different limitor for different areas (like use own limitor
for clips, own limitor for sequencer and so), but that wouldn't be
so easy to control overall memory usage.

--
svn merge -r50125:50126 ^/branches/soc-2011-tomato
2012-09-14 14:55:59 +00:00
Brecht Van Lommel
c849928d1c Code cleanup: removed unused Cocoa image load/save code. 2012-09-14 11:42:05 +00:00
Campbell Barton
7a71f58af3 fixes for NULL checks, remove some redundant checks and add some in that have been removed by accident as code has been updated. 2012-09-14 06:17:14 +00:00
Campbell Barton
7e2259bff3 code cleanup: use more specific args 2012-09-10 02:45:29 +00:00
Peter Schlaile
c95d4f68b8 == FFMPEG ==
This fixes [#32399] VSE doesn't show last 3 frames of Quicktime movie.

Some decoders store frames internally until EOF.
So one has to feed the decoding engine with empty packets after EOF
until all frames could be extracted properly.
2012-09-07 21:41:38 +00:00
Campbell Barton
47ec91e8d3 code clenup: comments and some style edits on ghost/osx (odd indentation) 2012-09-06 02:10:09 +00:00
Campbell Barton
a4b71f4e01 fix for various redundant checks and possibly fix some crashes in rare situations. 2012-09-05 01:42:52 +00:00
Campbell Barton
a71b160184 fix for building on msvc2008 (also style cleanup) 2012-09-04 01:23:50 +00:00
Campbell Barton
aaafa0c2fe code cleanup: move file string defines into BLI_path_utils.h, BKE_utildefines is now unused but keep incase we want to add defines there later. 2012-09-03 22:04:14 +00:00
Sergey Sharybin
dde5ccb61f Fix for logging FFmpeg messages 2012-09-03 12:01:00 +00:00
Campbell Barton
95f7264014 code cleanup: split out defines in BKE_utildefines.h into BLO_blend_defs.h and ui defines in interface_intern.h 2012-09-03 10:12:25 +00:00
Campbell Barton
d248f94cf8 add endian switch functions to replace macros SWITCH_INT/LONG/SHORT, with BLI_endian_switch_int32/int64/float/double... 2012-09-03 07:37:38 +00:00
Thomas Dinges
99abcb8e45 Possible fix for [#32462] blender cannot load bmp files (Windows OS).
* Typo in the CHECK_HEADER_FIELD macro. 

Patch by kjym3 in IRC, thanks!
2012-08-31 19:57:03 +00:00
Sergey Sharybin
590251f55a File format fixes
- Add check for header field in BMP decoder. This is needed to distinguish
  whether file is indeed BMP image or not.
  Without this check Blender could easily crash when it'll try to load
  non-BMP image.
  Tested with files from own HDD, but all of them has got BM header field,
  more testing would be welcome.

- Made Jpeg2000 aware of J2K codec. Originally was needed to verify .j2c
  files here in the studio, but having support of this codec would be
  nice in general.
  Currently supports only reading in this codec, writing would still
  using jp2 codec.
2012-08-27 11:59:26 +00:00
Campbell Barton
ee96cde864 style cleanup: whitespace 2012-08-26 11:35:43 +00:00