style cleanup
[blender.git] / source / blender / blenkernel / intern / image.c
index e4b9edacc7e82c481b27ae283b1b250b8734936b..22995e5a7eed4d7b38fc71f38601e6a97cf8488d 100644 (file)
@@ -68,7 +68,6 @@
 #include "BLI_blenlib.h"
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
-#include "BLI_bpath.h"
 
 #include "BKE_bmfont.h"
 #include "BKE_colortools.h"
@@ -663,6 +662,13 @@ static ImBuf *add_ibuf_size(unsigned int width, unsigned int height, const char
                        BKE_image_buf_fill_color(rect, rect_float, width, height, color);
        }
 
+       if (rect_float) {
+               /* both byte and float buffers are filling in sRGB space, need to linearize float buffer after BKE_image_buf_fill* functions */
+
+               IMB_buffer_float_from_float(rect_float, rect_float, ibuf->channels, IB_PROFILE_LINEAR_RGB, IB_PROFILE_SRGB,
+                                           ibuf->flags & IB_cm_predivide, ibuf->x, ibuf->y, ibuf->x, ibuf->x);
+       }
+
        return ibuf;
 }
 
@@ -931,7 +937,7 @@ int BKE_imtype_to_ftype(const char imtype)
                return RADHDR;
 #endif
        else if (imtype == R_IMF_IMTYPE_PNG)
-               return PNG;
+               return PNG | 90;
 #ifdef WITH_DDS
        else if (imtype == R_IMF_IMTYPE_DDS)
                return DDS;
@@ -1159,9 +1165,10 @@ char BKE_imtype_from_arg(const char *imtype_arg)
        else return R_IMF_IMTYPE_INVALID;
 }
 
-int BKE_add_image_extension(char *string, const char imtype)
+static int do_add_image_extension(char *string, const char imtype, const ImageFormatData *im_format)
 {
        const char *extension = NULL;
+       (void)im_format;  /* may be unused, depends on build options */
 
        if (imtype == R_IMF_IMTYPE_IRIS) {
                if (!BLI_testextensie(string, ".rgb"))
@@ -1226,8 +1233,22 @@ int BKE_add_image_extension(char *string, const char imtype)
        }
 #ifdef WITH_OPENJPEG
        else if (imtype == R_IMF_IMTYPE_JP2) {
-               if (!BLI_testextensie(string, ".jp2"))
-                       extension = ".jp2";
+               if (im_format) {
+                       if (im_format->jp2_codec == R_IMF_JP2_CODEC_JP2) {
+                               if (!BLI_testextensie(string, ".jp2"))
+                                       extension = ".jp2";
+                       }
+                       else if (im_format->jp2_codec == R_IMF_JP2_CODEC_J2K) {
+                               if (!BLI_testextensie(string, ".j2c"))
+                                       extension = ".j2c";
+                       }
+                       else
+                               BLI_assert(!"Unsupported jp2 codec was specified in im_format->jp2_codec");
+               }
+               else {
+                       if (!BLI_testextensie(string, ".jp2"))
+                               extension = ".jp2";
+               }
        }
 #endif
        else { //   R_IMF_IMTYPE_AVIRAW, R_IMF_IMTYPE_AVIJPEG, R_IMF_IMTYPE_JPEG90, R_IMF_IMTYPE_QUICKTIME etc
@@ -1253,6 +1274,16 @@ int BKE_add_image_extension(char *string, const char imtype)
        }
 }
 
+int BKE_add_image_extension(char *string, const ImageFormatData *im_format)
+{
+       return do_add_image_extension(string, im_format->imtype, im_format);
+}
+
+int BKE_add_image_extension_from_type(char *string, const char imtype)
+{
+       return do_add_image_extension(string, imtype, NULL);
+}
+
 void BKE_imformat_defaults(ImageFormatData *im_format)
 {
        memset(im_format, 0, sizeof(*im_format));
@@ -1345,6 +1376,13 @@ void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf *i
                        if (ftype & JP2_CINE_48FPS)
                                im_format->jp2_flag |= R_IMF_JP2_FLAG_CINE_48;
                }
+
+               if (ftype & JP2_JP2)
+                       im_format->jp2_codec = R_IMF_JP2_CODEC_JP2;
+               else if (ftype & JP2_J2K)
+                       im_format->jp2_codec = R_IMF_JP2_CODEC_J2K;
+               else
+                       BLI_assert(!"Unsupported jp2 codec was specified in file type");
        }
 #endif
 
@@ -1393,7 +1431,9 @@ static void timecode_simple_string(char *text, size_t text_size, const int cfra,
        }
 }
 
-/* could allow access externally - 512 is for long names, 64 is for id names */
+#define STAMP_NAME_SIZE ((MAX_ID_NAME - 2) + 16)
+/* could allow access externally - 512 is for long names,
+ * STAMP_NAME_SIZE is for id names, allowing them some room for description */
 typedef struct StampData {
        char file[512];
        char note[512];
@@ -1401,12 +1441,13 @@ typedef struct StampData {
        char marker[512];
        char time[512];
        char frame[512];
-       char camera[64];
-       char cameralens[64];
-       char scene[64];
-       char strip[64];
-       char rendertime[64];
+       char camera[STAMP_NAME_SIZE];
+       char cameralens[STAMP_NAME_SIZE];
+       char scene[STAMP_NAME_SIZE];
+       char strip[STAMP_NAME_SIZE];
+       char rendertime[STAMP_NAME_SIZE];
 } StampData;
+#undef STAMP_NAME_SIZE
 
 static void stampdata(Scene *scene, Object *camera, StampData *stamp_data, int do_prefix)
 {
@@ -1897,6 +1938,13 @@ int BKE_imbuf_write(ImBuf *ibuf, const char *name, ImageFormatData *imf)
                        if (imf->jp2_flag & R_IMF_JP2_FLAG_CINE_48)
                                ibuf->ftype |= JP2_CINE_48FPS;
                }
+
+               if (imf->jp2_codec == R_IMF_JP2_CODEC_JP2)
+                       ibuf->ftype |= JP2_JP2;
+               else if (imf->jp2_codec == R_IMF_JP2_CODEC_J2K)
+                       ibuf->ftype |= JP2_J2K;
+               else
+                       BLI_assert(!"Unsupported jp2 codec was specified in im_format->jp2_codec");
        }
 #endif
        else {
@@ -1947,7 +1995,8 @@ int BKE_imbuf_write_stamp(Scene *scene, struct Object *camera, ImBuf *ibuf, cons
 }
 
 
-void BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, const char imtype, const short use_ext, const short use_frames)
+static void do_makepicstring(char *string, const char *base, const char *relbase, int frame, const char imtype,
+                             const ImageFormatData *im_format, const short use_ext, const short use_frames)
 {
        if (string == NULL) return;
        BLI_strncpy(string, base, FILE_MAX - 10);   /* weak assumption */
@@ -1957,8 +2006,17 @@ void BKE_makepicstring(char *string, const char *base, const char *relbase, int
                BLI_path_frame(string, frame, 4);
 
        if (use_ext)
-               BKE_add_image_extension(string, imtype);
+               do_add_image_extension(string, imtype, im_format);
+}
+
+void BKE_makepicstring(char *string, const char *base, const char *relbase, int frame, const ImageFormatData *im_format, const short use_ext, const short use_frames)
+{
+       do_makepicstring(string, base, relbase, frame, im_format->imtype, im_format, use_ext, use_frames);
+}
 
+void BKE_makepicstring_from_type(char *string, const char *base, const char *relbase, int frame, const char imtype, const short use_ext, const short use_frames)
+{
+       do_makepicstring(string, base, relbase, frame, imtype, NULL, use_ext, use_frames);
 }
 
 /* used by sequencer too */