Sync from SUSE:ALP:Source:Standard:1.0 dcraw revision 8997fb911317f27102cbd1d4cd1a5b1e
This commit is contained in:
commit
5d84ea3dd4
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
3
README.openSUSE
Normal file
3
README.openSUSE
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
To prevent name clashes, following tools from dcraw were renamed:
|
||||||
|
|
||||||
|
parse -> dcparse
|
37
badpixels
Normal file
37
badpixels
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# .badpixels file for my Canon PowerShot G2, serial no. 4624504380
|
||||||
|
# dcraw will use this file if run in the same directory, or in any
|
||||||
|
# subdirectory.
|
||||||
|
|
||||||
|
# Always use "dcraw -d -j -t 0" when locating bad pixels!!
|
||||||
|
|
||||||
|
# Format is: pixel column, pixel row, UNIX time of death
|
||||||
|
|
||||||
|
# This pixel went bad between August 1 and 4, 2002
|
||||||
|
962 91 1028350000
|
||||||
|
# This pixel went bad between January 9 and 30, 2003
|
||||||
|
902 877 1043000000
|
||||||
|
|
||||||
|
# These are only visible in low light, so I haven't dated them:
|
||||||
|
621 943 0
|
||||||
|
1285 1067 0
|
||||||
|
1286 1067 0
|
||||||
|
2181 1532 0
|
||||||
|
|
||||||
|
# I swept these up 4/19/2005
|
||||||
|
763 36 1110000000
|
||||||
|
1827 466 1110000000
|
||||||
|
|
||||||
|
# low light
|
||||||
|
198 1288 1110000000
|
||||||
|
346 328 1110000000
|
||||||
|
429 273 1110000000
|
||||||
|
621 943 1110000000
|
||||||
|
624 874 1110000000
|
||||||
|
848 400 1110000000
|
||||||
|
1682 1686 1110000000
|
||||||
|
1892 1250 1110000000
|
||||||
|
2234 484 1110000000
|
||||||
|
2242 618 1110000000
|
||||||
|
|
||||||
|
555 698 1135100000 # December 20-21, 2005
|
||||||
|
640 157 1139000000 # February 2-5, 2006
|
80
clean_crw.c
Normal file
80
clean_crw.c
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
Because they are parsed from the end, Canon CRW files
|
||||||
|
become unreadable if garbage data is appended to them, as
|
||||||
|
often happens when files are recovered from damaged media.
|
||||||
|
This program truncates CRW files to the correct size.
|
||||||
|
|
||||||
|
Copyright 2005 by Dave Coffin, dcoffin a cybercom o net
|
||||||
|
Free for all uses.
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
$Date$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
unsigned char *buffer;
|
||||||
|
|
||||||
|
int get4 (int i)
|
||||||
|
{
|
||||||
|
if (buffer[0] == 'I')
|
||||||
|
return buffer[i+3] << 24 | buffer[i+2] << 16 | buffer[i+1] << 8 | buffer[i];
|
||||||
|
else
|
||||||
|
return buffer[i] << 24 | buffer[i+1] << 16 | buffer[i+2] << 8 | buffer[i+3];
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
int arg, size, end, diff, status=1;
|
||||||
|
unsigned char *fname;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if (argc == 1)
|
||||||
|
fprintf (stderr, "Usage: %s crw_0001.crw crw_0002.crw ...\n", argv[0]);
|
||||||
|
|
||||||
|
for (arg=1; arg < argc; arg++) {
|
||||||
|
status = 1;
|
||||||
|
fp = fopen (argv[arg], "rb");
|
||||||
|
fseek (fp, 0, SEEK_END);
|
||||||
|
size = ftell(fp);
|
||||||
|
buffer = malloc (size + strlen(argv[arg]) + 10);
|
||||||
|
if (!buffer) {
|
||||||
|
fprintf (stderr, "Cannot allocate memory!\n");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
fname = buffer + size;
|
||||||
|
sprintf (fname, "%s.clean", argv[arg]);
|
||||||
|
fseek (fp, 0, SEEK_SET);
|
||||||
|
fread (buffer, 1, size, fp);
|
||||||
|
fclose (fp);
|
||||||
|
if (strncmp (buffer, "II\x1a\0\0\0HEAPCCDR", 14) &&
|
||||||
|
strncmp (buffer, "MM\0\0\0\x1aHEAPCCDR", 14)) {
|
||||||
|
fprintf (stderr, "%s is not a CRW file!\n", argv[arg]);
|
||||||
|
free (buffer);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (end=size; end > 0xa0000; end--) {
|
||||||
|
diff = end - get4(end-4);
|
||||||
|
if (diff > 50 && diff < 120 && diff % 10 == 2) {
|
||||||
|
status = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (status)
|
||||||
|
fprintf (stderr, "Failed to clean %s\n", argv[arg]);
|
||||||
|
else {
|
||||||
|
if ((fp = fopen (fname, "wb"))) {
|
||||||
|
fprintf (stderr, "Writing %s\n", fname);
|
||||||
|
fwrite (buffer, 1, end, fp);
|
||||||
|
fclose (fp);
|
||||||
|
} else {
|
||||||
|
perror (fname);
|
||||||
|
status = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free (buffer);
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
BIN
dcraw-9.28.0.tar.gz
(Stored with Git LFS)
Normal file
BIN
dcraw-9.28.0.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
14
dcraw-CVE-2017-13735.patch
Normal file
14
dcraw-CVE-2017-13735.patch
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
diff -urNp old/dcraw.c new/dcraw.c
|
||||||
|
--- old/dcraw.c 2018-07-11 10:33:06.280425391 +0200
|
||||||
|
+++ new/dcraw.c 2018-07-11 10:45:52.722922118 +0200
|
||||||
|
@@ -2250,6 +2250,10 @@ void CLASS kodak_radc_load_raw()
|
||||||
|
((short *)buf)[i] = 2048;
|
||||||
|
for (row=0; row < height; row+=4) {
|
||||||
|
FORC3 mul[c] = getbits(6);
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!mul[0] || !mul[1] || !mul[2])
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
FORC3 {
|
||||||
|
val = ((0x1000000/last[c] + 0x7ff) >> 12) * mul[c];
|
||||||
|
s = val > 65564 ? 10:12;
|
21
dcraw-CVE-2017-14608.patch
Normal file
21
dcraw-CVE-2017-14608.patch
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
diff -urNp old/dcraw.c new/dcraw.c
|
||||||
|
--- old/dcraw.c 2018-07-11 10:53:51.141803505 +0200
|
||||||
|
+++ new/dcraw.c 2018-07-11 11:30:08.850528389 +0200
|
||||||
|
@@ -2627,8 +2627,15 @@ void CLASS kodak_65000_load_raw()
|
||||||
|
len = MIN (256, width-col);
|
||||||
|
ret = kodak_65000_decode (buf, len);
|
||||||
|
for (i=0; i < len; i++)
|
||||||
|
- if ((RAW(row,col+i) = curve[ret ? buf[i] :
|
||||||
|
- (pred[i & 1] += buf[i])]) >> 12) derror();
|
||||||
|
+ {
|
||||||
|
+ int idx = ret ? buf[i] : (pred[i & 1] += buf[i]);
|
||||||
|
+ if(idx >=0 && idx <= 0xffff)
|
||||||
|
+ {
|
||||||
|
+ if ((RAW(row,col+i) = curve[idx]) >> 12) derror();
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ derror();
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
39
dcraw-CVE-2018-19655.patch
Normal file
39
dcraw-CVE-2018-19655.patch
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
Author: Filip Hroch <hroch@physics.muni.cz>
|
||||||
|
Description: stack-based buffer overflow bug
|
||||||
|
--- a/dcraw.c
|
||||||
|
+++ b/dcraw.c
|
||||||
|
@@ -8345,9 +8345,15 @@
|
||||||
|
{
|
||||||
|
UINT64 bitbuf=0;
|
||||||
|
int vbits, col, i, c;
|
||||||
|
- ushort img[2][2064];
|
||||||
|
+ ushort *img;
|
||||||
|
double sum[]={0,0};
|
||||||
|
|
||||||
|
+#define IMG2D(row,col) \
|
||||||
|
+ img[(row)*width+(col)]
|
||||||
|
+
|
||||||
|
+ img = (ushort *) malloc(2*width*sizeof(ushort));
|
||||||
|
+ merror (img, "find_green()");
|
||||||
|
+
|
||||||
|
FORC(2) {
|
||||||
|
fseek (ifp, c ? off1:off0, SEEK_SET);
|
||||||
|
for (vbits=col=0; col < width; col++) {
|
||||||
|
@@ -8356,13 +8362,14 @@
|
||||||
|
for (i=0; i < bite; i+=8)
|
||||||
|
bitbuf |= (unsigned) (fgetc(ifp) << i);
|
||||||
|
}
|
||||||
|
- img[c][col] = bitbuf << (64-bps-vbits) >> (64-bps);
|
||||||
|
+ IMG2D(c,col) = bitbuf << (64-bps-vbits) >> (64-bps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FORC(width-1) {
|
||||||
|
- sum[ c & 1] += ABS(img[0][c]-img[1][c+1]);
|
||||||
|
- sum[~c & 1] += ABS(img[1][c]-img[0][c+1]);
|
||||||
|
+ sum[ c & 1] += ABS(IMG2D(0,c)-IMG2D(1,c+1));
|
||||||
|
+ sum[~c & 1] += ABS(IMG2D(1,c)-IMG2D(0,c+1));
|
||||||
|
}
|
||||||
|
+ free(img);
|
||||||
|
return 100 * log(sum[0]/sum[1]);
|
||||||
|
}
|
||||||
|
|
125
dcraw-CVE-2018-5801.patch
Normal file
125
dcraw-CVE-2018-5801.patch
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
diff -urNp old/dcraw.c new/dcraw.c
|
||||||
|
--- old/dcraw.c 2018-06-14 12:38:10.519964843 +0200
|
||||||
|
+++ new/dcraw.c 2018-06-14 13:31:46.304679761 +0200
|
||||||
|
@@ -1248,6 +1248,10 @@ void CLASS nikon_load_raw()
|
||||||
|
|
||||||
|
void CLASS nikon_yuv_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
int row, col, yuv[4], rgb[3], b, c;
|
||||||
|
UINT64 bitbuf=0;
|
||||||
|
|
||||||
|
@@ -1889,6 +1893,10 @@ void CLASS sinar_4shot_load_raw()
|
||||||
|
unpacked_load_raw();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ else if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
pixel = (ushort *) calloc (raw_width, sizeof *pixel);
|
||||||
|
merror (pixel, "sinar_4shot_load_raw()");
|
||||||
|
for (shot=0; shot < 4; shot++) {
|
||||||
|
@@ -2188,6 +2196,11 @@ void CLASS quicktake_100_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_radc_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ // All kodak radc images are 768x512
|
||||||
|
+ if(width>768 || raw_width>768 || height > 512 || raw_height>512 )
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
static const char src[] = {
|
||||||
|
1,1, 2,3, 3,4, 4,2, 5,7, 6,5, 7,6, 7,8,
|
||||||
|
1,0, 2,1, 3,3, 4,4, 5,2, 6,7, 7,6, 8,5, 8,8,
|
||||||
|
@@ -2348,6 +2361,10 @@ void CLASS gamma_curve (double pwr, doub
|
||||||
|
|
||||||
|
void CLASS lossy_dng_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
struct jpeg_decompress_struct cinfo;
|
||||||
|
struct jpeg_error_mgr jerr;
|
||||||
|
JSAMPARRAY buf;
|
||||||
|
@@ -2444,6 +2461,10 @@ void CLASS eight_bit_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_c330_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
uchar *pixel;
|
||||||
|
int row, col, y, cb, cr, rgb[3], c;
|
||||||
|
|
||||||
|
@@ -2469,6 +2490,10 @@ void CLASS kodak_c330_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_c603_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
uchar *pixel;
|
||||||
|
int row, col, y, cb, cr, rgb[3], c;
|
||||||
|
|
||||||
|
@@ -2596,6 +2621,10 @@ void CLASS kodak_65000_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_ycbcr_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
short buf[384], *bp;
|
||||||
|
int row, col, len, c, i, j, k, y[2][2], cb, cr, rgb[3];
|
||||||
|
ushort *ip;
|
||||||
|
@@ -2624,6 +2653,10 @@ void CLASS kodak_ycbcr_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_rgb_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
short buf[768], *bp;
|
||||||
|
int row, col, len, c, i, rgb[3];
|
||||||
|
ushort *ip=image[0];
|
||||||
|
@@ -2640,6 +2673,10 @@ void CLASS kodak_rgb_load_raw()
|
||||||
|
|
||||||
|
void CLASS kodak_thumb_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
int row, col;
|
||||||
|
colors = thumb_misc >> 5;
|
||||||
|
for (row=0; row < height; row++)
|
||||||
|
@@ -3109,6 +3146,10 @@ void CLASS foveon_thumb()
|
||||||
|
|
||||||
|
void CLASS foveon_sd_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
struct decode *dindex;
|
||||||
|
short diff[1024];
|
||||||
|
unsigned bitbuf=0;
|
||||||
|
@@ -3156,6 +3197,10 @@ void CLASS foveon_huff (ushort *huff)
|
||||||
|
|
||||||
|
void CLASS foveon_dp_load_raw()
|
||||||
|
{
|
||||||
|
+#ifdef LIBRAW_LIBRARY_BUILD
|
||||||
|
+ if(!image)
|
||||||
|
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
|
||||||
|
+#endif
|
||||||
|
unsigned c, roff[4], row, col, diff;
|
||||||
|
ushort huff[512], vpred[2][2], hpred[2];
|
||||||
|
|
17
dcraw-CVE-2021-3624.patch
Normal file
17
dcraw-CVE-2021-3624.patch
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
--- dcraw/dcraw.c 2022-04-12 14:29:23.791896447 +0200
|
||||||
|
+++ dcraw/dcraw.c 2022-04-12 14:59:50.767180929 +0200
|
||||||
|
@@ -3289,7 +3289,13 @@
|
||||||
|
}
|
||||||
|
} else if (type == 4) {
|
||||||
|
free (meta_data);
|
||||||
|
- meta_data = (char *) malloc (meta_length = wide*high*3/2);
|
||||||
|
+ meta_data = NULL;
|
||||||
|
+ meta_length = wide*high*3/2;
|
||||||
|
+ if (meta_length/wide != high*3/2) {
|
||||||
|
+ fprintf(stderr, "Potential buffer overflow (meta_length %u, wide %u, high %u). Bailing out...\n", meta_length, wide, high);
|
||||||
|
+ longjmp(failure, 2);
|
||||||
|
+ }
|
||||||
|
+ meta_data = (char *) malloc (meta_length);
|
||||||
|
merror (meta_data, "foveon_load_camf()");
|
||||||
|
foveon_huff (huff);
|
||||||
|
get4();
|
24
dcraw-glibc-2.38.patch
Normal file
24
dcraw-glibc-2.38.patch
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
Index: dcraw/parse.c
|
||||||
|
===================================================================
|
||||||
|
--- dcraw.orig/parse.c
|
||||||
|
+++ dcraw/parse.c
|
||||||
|
@@ -1213,7 +1213,7 @@ void parse_qt (int level, int end)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-char *memmem (char *haystack, size_t haystacklen,
|
||||||
|
+static char *my_memmem (char *haystack, size_t haystacklen,
|
||||||
|
char *needle, size_t needlelen)
|
||||||
|
{
|
||||||
|
char *c;
|
||||||
|
@@ -1239,8 +1239,8 @@ void identify()
|
||||||
|
tread (head, 1, 32, ifp);
|
||||||
|
tseek (ifp, 0, SEEK_END);
|
||||||
|
fsize = ftell(ifp);
|
||||||
|
- if ((cp = memmem (head, 32, "MMMM", 4)) ||
|
||||||
|
- (cp = memmem (head, 32, "IIII", 4))) {
|
||||||
|
+ if ((cp = my_memmem (head, 32, "MMMM", 4)) ||
|
||||||
|
+ (cp = my_memmem (head, 32, "IIII", 4))) {
|
||||||
|
parse_phase_one (cp-head);
|
||||||
|
if (cp-head) parse_tiff (0,0);
|
||||||
|
} else if (order == 0x4949 || order == 0x4d4d) {
|
532
dcraw.changes
Normal file
532
dcraw.changes
Normal file
|
@ -0,0 +1,532 @@
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 7 09:53:25 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- add dcraw-glibc-2.38.patch to fix prototype clash on memmem with glibc 2.38+
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 12 11:30:56 UTC 2022 - Fridrich Strba <fstrba@suse.com>
|
||||||
|
|
||||||
|
- Added patches:
|
||||||
|
* iowrappers.patch
|
||||||
|
+ Written wrappers of fread(),fwrite(),fseek() library functions
|
||||||
|
which check their return values. If an input/output failure is
|
||||||
|
detected, dcraw immediately exits with non-zero status and
|
||||||
|
prints a descriptive message (bsc#1097973, CVE-2018-5805;
|
||||||
|
bsc#1097974, CVE-2018-5806; bsc#1117622, CVE-2018-19565;
|
||||||
|
bsc#1117517, CVE-2018-19566; bsc#1117512, CVE-2018-19567;
|
||||||
|
bsc#1117436, CVE-2018-19568)
|
||||||
|
* dcraw-CVE-2021-3624.patch
|
||||||
|
+ Bail out if integer overflow happened and the allocated buffer
|
||||||
|
would be too small (bsc#1189642, CVE-2021-3624)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Aug 16 22:39:47 UTC 2020 - Matthias Eliasson <elimat@opensuse.org>
|
||||||
|
|
||||||
|
- Update to version 9.28.0:
|
||||||
|
dcraw - revision 1.478
|
||||||
|
* Caught up on two years' worth of new cameras.
|
||||||
|
- Update upstream URL to new address
|
||||||
|
- Add patches for CVEs:
|
||||||
|
* dcraw-CVE-2017-13735.patch (CVE-2017-13735, bsc#1056170)
|
||||||
|
* dcraw-CVE-2017-14608.patch (CVE-2017-14608, bsc#1063798)
|
||||||
|
* dcraw-CVE-2018-19655.patch (CVE-2018-19655, bsc#1117896)
|
||||||
|
* dcraw-CVE-2018-5801.patch (CVE-2018-5801, bsc#1084690)
|
||||||
|
- Run spec-cleaner
|
||||||
|
* Remove package groups
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 5 22:12:55 UTC 2016 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.27.0:
|
||||||
|
dcraw - revision 1.477
|
||||||
|
* Added "-o 6" for ACES colorspace.
|
||||||
|
* Copied color matrices from DNG Converter 9.5.1.
|
||||||
|
* Support the Canon EOS 80D & IXUS 160, Fuji X-E2 & X-E2S &
|
||||||
|
X-Pro2.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 20 07:34:22 UTC 2015 - fstrba@suse.com
|
||||||
|
|
||||||
|
- Update to version 9.26.0:
|
||||||
|
* fixes:
|
||||||
|
dcraw revision 1.476
|
||||||
|
* Support the Blackmagic URSA, Nokia N9, and Photron BC2-HD.
|
||||||
|
* Support the Canon EOS 750D, 760D, EOS M, and sRAW/mRAW for EOS 5DS R.
|
||||||
|
* When there's a tie for largest raw image, "-s" says which to decode.
|
||||||
|
* Fixed null-byte warnings in TIFF output.
|
||||||
|
dcraw revision 1.475
|
||||||
|
* Use typecasts instead of [0] to flatten multi-dimensional arrays.
|
||||||
|
dcraw revision 1.474
|
||||||
|
* Updated color matrices, support the Canon EOS 5DS.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 27 22:05:35 UTC 2015 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.24.2:
|
||||||
|
dcraw - revision 1.473
|
||||||
|
* Canon multi-exposure files are already white-balanced.
|
||||||
|
* Moved border_interpolate() to the end of xtrans_interpolate().
|
||||||
|
From version 9.24.1:
|
||||||
|
* No visible changes.
|
||||||
|
From version 9.24.0:
|
||||||
|
dcraw - revision 1.471
|
||||||
|
* Support all format options of the Nikon D4S and D810.
|
||||||
|
* Guess which filter pattern OmniVision cameras use.
|
||||||
|
dcparse - revision 1.77
|
||||||
|
* Display OmniVision's MakerNote.
|
||||||
|
From version 9.23.0:
|
||||||
|
dcraw - revision 1.470
|
||||||
|
* Fixed data errors with Olympus E-M5MarkII HR images.
|
||||||
|
* Support the Lenovo A820.
|
||||||
|
* Copied color matrices from DNG Converter 8.7.1.
|
||||||
|
* Support pre-release Sonys and Canons that lack a proper model
|
||||||
|
name.
|
||||||
|
* Support the Samsung NX1 (yet another compression algorithm).
|
||||||
|
* Read camera white balance in all professional Kodak cameras.
|
||||||
|
* Reduced zippering in Fuji X-Trans interpolation.
|
||||||
|
* Support YCbCr files from the Kodak C330.
|
||||||
|
* Support Hasselblad multi-shot files.
|
||||||
|
dcparse - revision 1.76
|
||||||
|
* Parse Redcine and Canon EOS QuickTime movies.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 15 17:59:16 UTC 2014 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.22:
|
||||||
|
dcraw - revision 1.467
|
||||||
|
* Correctly handle Fuji X-Trans images in DNG format.
|
||||||
|
* Copied color matrices from DNG Converter 8.5.
|
||||||
|
From version 9.21:
|
||||||
|
dcraw - revision 1.465
|
||||||
|
* In colorcheck(), darken sample squares and do a second pass for exact white
|
||||||
|
balance.
|
||||||
|
* Removed C99 dependency in Phase One code.
|
||||||
|
* Correctly dereference TIFF type 13 (SubIFD) tags.
|
||||||
|
* Removed redundant strings.
|
||||||
|
* Support Lossy DNG files that lack an OpcodeList2 tag.
|
||||||
|
* Decode DNG files made from Fuji X-Trans photos.
|
||||||
|
* Support the Canon G1 X Mark II, Nikon P340, Samsing NX mini.
|
||||||
|
* Patched in Anders Torger's code for Phase One correction.
|
||||||
|
* Correctly crop all Sony cameras, read Panasonic blacklevels.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 17 21:56:48 UTC 2014 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.20:
|
||||||
|
dcraw - revision 1.461
|
||||||
|
* Fixed Sony A700 black level.
|
||||||
|
* Added three temporary color matrices.
|
||||||
|
* Use Little CMS version 2.
|
||||||
|
* Support the Kodak 12-megapixel camera(s).
|
||||||
|
* Can now use "-M" with a DNG file that embeds a bad color matrix.
|
||||||
|
* Improved support for Nokia cameraphones.
|
||||||
|
* Support the Alcatel 5235D, Powershot G16 and S120, Pentax K-3, etc.
|
||||||
|
* Added tone curve for Canon RMF files.
|
||||||
|
* Copied color matrices from DNG Converter 8.3.
|
||||||
|
* Support blacklevel patterns up to 64x64.
|
||||||
|
dcparse - revision 1.75
|
||||||
|
* Read the Pentax K-3 MakerNote.
|
||||||
|
- Renamed README.SuSE to README.openSUSE.
|
||||||
|
- Added new build requirement liblcms2-devel (removed liblcms-devel).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Jun 16 20:54:03 UTC 2013 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.19:
|
||||||
|
dcraw - revision 1.456
|
||||||
|
* Fix green spots when half-sizing Fuji X-Trans images.
|
||||||
|
* Support the Baumer TXG14, OmniVision OV5647 (Raspberry Pi), and Samsung
|
||||||
|
NX2000.
|
||||||
|
From version 9.18:
|
||||||
|
dcraw - revision 1.455
|
||||||
|
* Support the Fuji HS50, X20, X100S, SL1000, Samsung NX300, Canon A3300 and
|
||||||
|
EOS C500, and Olympus XZ-10.
|
||||||
|
* Added Frank Markesteijn's X-Trans demosaic algorithm.
|
||||||
|
* Lowercased the names of all camera makers.
|
||||||
|
* Hardened dcraw against corrupt input files.
|
||||||
|
* Tableized away large chunks of code in identify().
|
||||||
|
- Removed dcraw.1.patch (not needed anymore).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jan 18 12:52:55 UTC 2013 - postadal@suse.cz
|
||||||
|
|
||||||
|
- Update to version 9.17:
|
||||||
|
dcraw - revision 1.454
|
||||||
|
* Copied color matrices from DNG Converter 7.3.
|
||||||
|
* Support the Canon EOS 6D, 1DX, SX50, Casio EX-ZR100, Fuji X-E1 & XF1,
|
||||||
|
Pentax K-5 II (s), and Samsung EX2F
|
||||||
|
- updated update_dcraw script to be able to work with dcraw tarball
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 30 20:44:51 UTC 2012 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.16:
|
||||||
|
dcraw - revision 1.452
|
||||||
|
* Measured saturation level on the Canon EOS-1D X.
|
||||||
|
* Support the Samsung NX1000 and Sony RX100.
|
||||||
|
* Support the Canon EOS 650D, Samsung NX20, and Sigma SD1.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jun 26 17:57:13 UTC 2012 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.15:
|
||||||
|
dcraw - revision 1.449
|
||||||
|
* Fixed gravity sensor for Canon 5D Mark III with Firmware Version 1.1.x.
|
||||||
|
* Decode CAMF and IMAG blocks from Sigma SD15 and DP cameras. Added "-E" and
|
||||||
|
"-I" options to support raw pixel substitution. Support Adobe Lossy DNG and
|
||||||
|
the Imacon Flexframe 3f format. Support the Canon G1-X, 1D-X, 5D Mark III,
|
||||||
|
the Fuji X-Pro1, X-S1, and many others.
|
||||||
|
* Support the Casio EX-Z500.
|
||||||
|
dcparse - revision 1.74
|
||||||
|
* Decode CAMF blocks from Sigma SD15 and DP cameras.
|
||||||
|
- Dropped dcraw-omp.patch (wasn't used anyway).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 27 08:41:25 UTC 2012 - cfarrell@suse.com
|
||||||
|
|
||||||
|
- license update: GPL-2.0+
|
||||||
|
Use option (b) from dcraw.c
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Dec 23 18:52:51 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.12:
|
||||||
|
dcraw - revision 1.446
|
||||||
|
* Support the Canon S100, Nikon 1 J1 and V1, Panasonic GX1, Fuji X10, and
|
||||||
|
Samsung NX200 with color matrices from DNG Converter 6.6.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Oct 7 19:34:48 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- Update to version 9.11:
|
||||||
|
dcraw - revision 1.445
|
||||||
|
* Copied new color matrices from DNG Converter 6.5.
|
||||||
|
- Spec file updates:
|
||||||
|
* Changes based on spec-cleaner run.
|
||||||
|
* Removed support for openSUSE < 11.3.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Sep 18 17:17:12 UTC 2011 - jengelh@medozas.de
|
||||||
|
|
||||||
|
- Remove redundant tags/sections from specfile
|
||||||
|
(cf. packaging guidelines)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 3 21:04:01 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- updated to version 9.10
|
||||||
|
dcraw - revision 1.444
|
||||||
|
* Support ARRIRAW and Redcode R3D raw formats (video only).
|
||||||
|
* Support the Leica D-LUX 5 and V-LUX 2, Panasonic G3 and GF3, Olympus E-P3,
|
||||||
|
Sony NEX-C3 and SLT-A35, and Canon SX30.
|
||||||
|
* Updated support for Nikon encrypted WB and Canon sRAW/mRAW.
|
||||||
|
- Spec file updates:
|
||||||
|
* Added libjasper-devel in BuildRequires:.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat May 14 12:05:25 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- updated to version 9.08
|
||||||
|
dcraw - revision 1.443
|
||||||
|
* Support the Fuji HS20EXR/F550EXR, Kodak Z990, Leaf AFi-II 12, Nikon D5100
|
||||||
|
and Samsung NX11 and NX100.
|
||||||
|
dcparse - revision 1.73
|
||||||
|
* Improved parsing of Fuji images.
|
||||||
|
- Spec file updates:
|
||||||
|
* Small fix if suse_version is not set.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 4 20:18:58 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- updated to version 9.07 (dcraw revision 1.442)
|
||||||
|
* Support the Hasselblad 9044x6732 back, Leaf 1068x1464 back, Fuji X100 and
|
||||||
|
Canon 600D and 1100D.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 23 19:09:55 UTC 2011 - asterios.dramis@gmail.com
|
||||||
|
|
||||||
|
- updated to version 9.06
|
||||||
|
* Support the Nikon D3100 & D7000 & P7000, Panasonic FZ40 & FZ100 & LX5,
|
||||||
|
Samsung WB2000, Nokia X2, Canon SX120 & PowerShot G12, Hasselblad H4D,
|
||||||
|
Pentax 645D & K-5 & K-r, Sony SLT-A33 & SLT-A55V, Canon SX20 IS, Samsung
|
||||||
|
EX1, Sony A450, Kodak Z981, Olympus E-P2, Panasonic G2 & GF1, Samsung WB550
|
||||||
|
and NX10, Casio EX-Z1050, Fuji HS10, Canon EOS 550D / Digital Rebel T2i /
|
||||||
|
Kiss Digital X4.
|
||||||
|
* Support high-ISO images from the Samsung WB2000.
|
||||||
|
* Read correct camera WB from Nikon NRW and Samsung SRW files.
|
||||||
|
* Copied color matrices from Adobe DNG Converter 6.3.
|
||||||
|
* Fixed rotation for Kodak EasyShare and some Canon EOS photos.
|
||||||
|
* Get Fuji HS10 black level from the metadata.
|
||||||
|
* Built color matrices for the Sony NEX-3 and NEX-5.
|
||||||
|
* Support A100 images modified by Sony software.
|
||||||
|
* Split the darkness level into four separate color channels.
|
||||||
|
- Replaced dcraw.c and dcraw.1 with the package tarball provided from the official
|
||||||
|
site.
|
||||||
|
- Added clean_crw and fuji_green programs.
|
||||||
|
- Added rawphoto.c file in the documentation (gimp-plugin).
|
||||||
|
- Removed dcwrap program (no longer provided from the official site).
|
||||||
|
- Spec file updates:
|
||||||
|
* Changed version numbering scheme (used the one from the tarball provided).
|
||||||
|
* Changes based on rpmdevtools templates and spec-cleaner run.
|
||||||
|
* Added description for dcraw-omp.patch based on openSUSE Patches Guidelines.
|
||||||
|
* Added gettext-runtime in BuildRequires:.
|
||||||
|
* Added dcraw-lang package.
|
||||||
|
* Compile also fujiturn16 program (to rotate 48-bit PPM images).
|
||||||
|
* Updates in %prep, %build, %install and %files sections based also on Fedora
|
||||||
|
and Debian packages.
|
||||||
|
- Rebased dcraw-omp.patch to apply cleanly.
|
||||||
|
- Added a patch for dcraw.1 to fix "macro `LO' not defined" rpm post build
|
||||||
|
check warning.
|
||||||
|
- Added a patch for fuji_green.c to fix gcc implicit declaration warning.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun May 2 00:56:47 CEST 2010 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.432
|
||||||
|
* Support the Canon EOS-1D Mark IV and PowerShots G11 and S90,
|
||||||
|
Casio EX-Z750, Pentax K-x, Fuji SX200EXR, Sony A550, Sony DSLR-A850,
|
||||||
|
Canon EOS 7D, Casio EX-Z850, Canon A470, G11, Nikon D3000,
|
||||||
|
Panasonic FZ35/FZ38, Casio Z60, Casio Z75, Kodak Z980, Pentax K-7,
|
||||||
|
Olympus X200,D560Z,C350Z
|
||||||
|
* Correctly crop Nikon D300S photos
|
||||||
|
* Support camera WB for the Kodak EasyShare Z980 and Z1015
|
||||||
|
* Decode all packed 10-bit and 12-bit formats in one function
|
||||||
|
* Copied color matrices from Adobe DNG Converter 5.4
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Nov 15 16:39:58 CET 2009 - meissner@suse.de
|
||||||
|
|
||||||
|
- rediffed OMP patch to get fuzz-0
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 6 16:11:05 CEST 2009 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.425
|
||||||
|
* Support the Phase One P45+, Casio EX-S20, Samsung S850, Agfa DC-833m,
|
||||||
|
Panasonic DMC-GH1, Canon SX1, SX110,, EOS 500D/Rebel T1i/Kiss X3,
|
||||||
|
Motorola PIXL, Kodak Z1015, Olympus E-30, Pentax K2000/K-m, Hasselblad V96C,
|
||||||
|
Samsung S85, Leaf AFi 7, Panasonic FX150 and G1, Canon PowerShot G10,
|
||||||
|
Panasonics LX3 and FZ28, Nikons D90 and P6000, Canon EOS 50D, Sony A900,
|
||||||
|
* When sampling dark pixels, don't get too close to the light pixels
|
||||||
|
* Linearize the Apple Quicktake, Kodak DC40/DC50, and Logitech Fotoman Pixtura
|
||||||
|
* Added "-g" option for custom gamma curves
|
||||||
|
* Support 3672 x 2486 images from the Panasonic DMC-FZ50
|
||||||
|
* Correctly handle negative pixels in split NEF files
|
||||||
|
* Support GPS-tagged ORFs and anonymous DNGs
|
||||||
|
* Support the sRAW1 and sRAW2 modes of the Canon EOS 50D and 5D Mark II
|
||||||
|
- updated omp.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Sep 7 22:40:44 CEST 2008 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.404
|
||||||
|
* Support the Kodak C603, Nikon D700, Canon EOS 1000D,
|
||||||
|
Canon PowerShot SD300, and Olympus E-520, SONY A300
|
||||||
|
* Removed useless code from ppg_interpolate()
|
||||||
|
* Don't crash on corrupt CR2 files
|
||||||
|
* Extract the largest JPEG from any X3F file
|
||||||
|
* Fixed camera WB on the A200
|
||||||
|
* Set model-specific saturation levels in adobe_coeff()
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Apr 13 22:57:10 CEST 2008 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.401
|
||||||
|
* Copy GPS data into thumbnails and TIFF output
|
||||||
|
* Support the Apple QuickTake 200, Fuji IS-1, Sony DSLR-A350,
|
||||||
|
Pentax K20D, Nokia N95, and Canon PowerShots A460, A530, and A650
|
||||||
|
Canon EOS 450D, Nikon D60, and Fuji S100FS, Olympus E-420
|
||||||
|
* Copied new matrices from Adobe DNG Converter 4.4
|
||||||
|
* fixed sRAW support (broke Fuji DNG files)
|
||||||
|
- added omp.patch to speed up decoding (-fomp disabled by default)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 12 10:54:10 CET 2008 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.398
|
||||||
|
* Added the "-P" and "-S" options
|
||||||
|
* Support the Sony DSLR-A200 and the PowerShots A720 and S5 IS
|
||||||
|
* Support the Panasonic DMC-L10, added the "-W" option
|
||||||
|
* Cropped four columns from the Nikon D3
|
||||||
|
* Abolished the getrat() macro, support the Hasselblad H3D
|
||||||
|
* Added the Olympus E-3 and adjusted a few maximums
|
||||||
|
* Support the AVT F-080C, Canon EOS 40D, Canon EOS-1Ds Mark III,
|
||||||
|
Canon PowerShot G9, Nikon Coolpix S6, Nikon D3, Nikon D300,
|
||||||
|
Panasonic DMC-FZ18, and Sony DSLR-A700
|
||||||
|
* Support the new Canon sRAW CR2 format
|
||||||
|
* Added median filtering after interpolation
|
||||||
|
* Use fseeko() and ftello() only when needed
|
||||||
|
* Reject TIFF files with unsupported Compression tags
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 3 17:16:18 CEST 2007 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.390
|
||||||
|
* Added Patterned Pixel Grouping interpolation
|
||||||
|
* Support 3096x2103 mode for the Panasonic DMC-FZ8.
|
||||||
|
* Added "-C" option to correct chromatic aberration.
|
||||||
|
* Support the Hasselblad CFV, Kodak EasyShare C330, and Nikon D40X.
|
||||||
|
* Use a switch statement for Leica and Panasonic models.
|
||||||
|
* Output seven new TIFF tags, including ImageDescription and Artist.
|
||||||
|
* Generated color matrices for the Apple QuickTake and Phase One H 20.
|
||||||
|
* Copied new matrices from Adobe DNG Converter 4.1.
|
||||||
|
* Added "-M" option and improved PPG interpolation.
|
||||||
|
* Reports of corruption in 16-bit linear DNGs were false.
|
||||||
|
* Support all Lossless JPEG predictors.
|
||||||
|
* Reject 8-bit grayscale TIFFs.
|
||||||
|
* Decode raw CINE files, which may exceed 2GB.
|
||||||
|
* Error-check the "-s" option, and enable "-s all".
|
||||||
|
* Support camera WB for the Canon EOS-1D and EOS-1DS.
|
||||||
|
* Use full output range for "-H 2".
|
||||||
|
* Added color matrix for the Canon PowerShot A640.
|
||||||
|
* When they differ, use DateTimeOriginal instead of DateTime.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 3 14:31:24 CEST 2007 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.379
|
||||||
|
* Offer blended highlights with the "-H 2" option
|
||||||
|
* Set "shot_order" for ORF and CR2 files
|
||||||
|
* Added "-A" option to select a rectangle for white balance
|
||||||
|
* Protect against overflow attacks on malloc() or calloc()
|
||||||
|
* Nucore raw formats are not used outside Nucore, so drop them
|
||||||
|
* Support the Canon PowerShots A630 and A640, Panasonic DMC-FZ8,
|
||||||
|
* Sigma SD14, Apple QuickTake 100 & 150, Mamiya ZD, Casio QV-R41,
|
||||||
|
Olympus E-410 and Pentax Optio 750Z
|
||||||
|
- fixed doc permissions
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Apr 25 02:12:58 CEST 2007 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.377
|
||||||
|
* Added a color matrix for the Fuji S6000fd
|
||||||
|
* Set aspect ratio for the Kodak DC20 and DC25
|
||||||
|
* Replaced bilateral filter with wavelet denoising
|
||||||
|
* Fixed incompatibility between "-f" and "-p"
|
||||||
|
* Fixed strange color casts with the Polaroid x530
|
||||||
|
* Added Adobe matrices for the Nikon D40 and Pentax K10D
|
||||||
|
* Found larger JPEG thumbs for Nikon D100,D1H,D1X,D2H,D2X,E5000,E5700
|
||||||
|
* Support the Canon EOS-1D Mark III, Olympus SP550UZ, Fuji FinePix S5Pro
|
||||||
|
* Use the "a trous" wavelet transform instead of the JPEG2000 method
|
||||||
|
* Apply sqrt() to denoise highlights and shadows evenly
|
||||||
|
* Optimized AHD interpolation to take 22% less time
|
||||||
|
* Better detect and reject non-raw TIFFs
|
||||||
|
- fixed dcraw permission
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 8 12:29:52 CET 2007 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.364
|
||||||
|
* Built a color matrix for Canon PowerShot S3 IS, Canon PowerShot A610
|
||||||
|
* Added Olympus SP510UZ, Panasonic DMC-L1, Leica Digilux 3,
|
||||||
|
Casio EX-Z4, Kodak DCS200, Canon PowerShots A620, S3 IS, Pentax K10D,
|
||||||
|
Canon PowerShot A610
|
||||||
|
* Suport Olympus E-400, Sinar 4-shot and Sinar IA file format
|
||||||
|
* Added "-K" option for dark-frame subtraction
|
||||||
|
* Get the Olympus black level from the ORF metadata.
|
||||||
|
* Found a more reliable way to identify 4775936-byte images
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 16 22:47:15 CEST 2006 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.353
|
||||||
|
* added support for Pentax K100D, Nikon D200, D80, E3200,
|
||||||
|
Canon EOS 400D, Panasonic DMC-LX2, DMC-FZ50
|
||||||
|
* correctly display long exposure times for CRW files
|
||||||
|
* added color matrices from Adobe DNG Converter 3.5
|
||||||
|
* display the focal length of Canon CRW images
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 17 17:35:46 CEST 2006 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.340
|
||||||
|
* improved support for the Olympus E-330
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 2 12:35:19 CEST 2006 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.338
|
||||||
|
* added "-H 2" option for rudimentary highlight recovery
|
||||||
|
* new "-T" option provides TIFF output with metadata and ICC profile
|
||||||
|
* replaced "-r" and "-l" options with raw white balance
|
||||||
|
* added support for Imacon Ixpress 22-Mp, Leaf Aptus 75, Leica D-Lux 2,
|
||||||
|
Sony DSLR-A100, Minolta DiMAGE G530, Sinar 4080x4080, Samsung GX-1S
|
||||||
|
* fixed camera WB for Canon EOS 10D, 300D, and clones
|
||||||
|
* added camera WB for the Kodak DCS Pro SLR models, Imacon Ixpress,
|
||||||
|
Kodak P850/P880
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Mar 26 15:56:10 CEST 2006 - postadal@suse.cz
|
||||||
|
|
||||||
|
- updated to RCS 1.319
|
||||||
|
* new color matrix for the Nikon E700, E800, and E950
|
||||||
|
* new "-D" option to output unscaled raw pixels (totally raw)
|
||||||
|
* fixed defective pixels and columns in Phase One images
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 9 22:12:25 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to RCS 1.315 (#112733)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 8 02:36:13 CET 2006 - dmueller@suse.de
|
||||||
|
|
||||||
|
- update to RCS 1.314:
|
||||||
|
Updated color matrices based on Adobe DNG Converter 3.3.
|
||||||
|
Added Kodak ProPhoto D65 as an output option.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 26 12:29:16 CET 2006 - sbrabec@suse.cz
|
||||||
|
|
||||||
|
- Updated to dcraw v8, RCS 1.313.
|
||||||
|
- Added simple update_dcraw script.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 25 21:35:24 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 11 15:56:34 CET 2006 - adrian@suse.de
|
||||||
|
|
||||||
|
- add stack protector compiler flag
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 13 13:48:05 CEST 2005 - postadal@suse.cz
|
||||||
|
|
||||||
|
- update to RCS 1.290
|
||||||
|
* added as default new interpolation algorithm AHD
|
||||||
|
(Adaptive homogeneity-directed demosaicing algorithm)
|
||||||
|
* new Bilateral filtering to remove color noises in CIELAB space
|
||||||
|
- update dcraw.1, fujiturn, dcparse (parse.c)
|
||||||
|
- removed crwfixdates (fixdates.c) superseded by "dcraw -z"
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jun 7 12:00:09 CEST 2005 - adrian@suse.de
|
||||||
|
|
||||||
|
- update to RCS 1.263
|
||||||
|
- compile with -fno-strict-aliasing to avoid compiler errors
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jun 3 12:46:05 CEST 2005 - postadal@suse.cz
|
||||||
|
|
||||||
|
- Updated to current version on maintainers website.
|
||||||
|
RCS version 1.262.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 4 15:43:01 CET 2005 - meissner@suse.de
|
||||||
|
|
||||||
|
- Updated to current version on maintainers website.
|
||||||
|
RCS version 1.234.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 26 14:05:18 CEST 2004 - sbrabec@suse.cz
|
||||||
|
|
||||||
|
- Updated to dcraw RCS version 1.200.
|
||||||
|
- Added more tools and documentation.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 16 10:48:17 CEST 2004 - adrian@suse.de
|
||||||
|
|
||||||
|
- initial package of version 1.194
|
||||||
|
|
167
dcraw.spec
Normal file
167
dcraw.spec
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
#
|
||||||
|
# spec file for package dcraw
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 SUSE LLC
|
||||||
|
#
|
||||||
|
# All modifications and additions to the file contributed by third parties
|
||||||
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
|
# upon. The license for this file, and modifications and additions to the
|
||||||
|
# file, is the same license as for the pristine package itself (unless the
|
||||||
|
# license for the pristine package is not an Open Source License, in which
|
||||||
|
# case the license is the MIT License). An "Open Source License" is a
|
||||||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
Name: dcraw
|
||||||
|
Version: 9.28.0
|
||||||
|
Release: 0
|
||||||
|
Summary: Raw Digital Photo Decoding
|
||||||
|
License: GPL-2.0-or-later
|
||||||
|
URL: https://www.dechifro.org/dcraw/
|
||||||
|
#*** NOTE: run "sh update_dcraw" to update to latest version of the following sources ("wget", "rcs" and "lynx" packages are required for the update).
|
||||||
|
Source0: https://www.dechifro.org/dcraw/archive/dcraw-%{version}.tar.gz
|
||||||
|
Source1: README
|
||||||
|
# http://www.cybercom.net/~dcoffin/dcraw/.badpixels
|
||||||
|
Source2: badpixels
|
||||||
|
Source3: https://www.dechifro.org/dcraw/clean_crw.c
|
||||||
|
Source4: https://www.dechifro.org/dcraw/fuji_green.c
|
||||||
|
Source5: https://www.dechifro.org/dcraw/fujiturn.c
|
||||||
|
Source6: https://www.dechifro.org/dcraw/parse.c
|
||||||
|
Source7: https://www.dechifro.org/dcraw/rawphoto.c
|
||||||
|
#***
|
||||||
|
Source100: README.openSUSE
|
||||||
|
Source101: update_dcraw
|
||||||
|
# PATCH-FIX-OPENSUSE fuji_green.c_fix_gcc_warnings.patch asterios.dramis@gmail.com -- Fix gcc implicit declaration warning
|
||||||
|
Patch0: fuji_green.c_fix_gcc_warnings.patch
|
||||||
|
# PATCH-FIX-UPSTREAM dcraw-CVE-2017-13735.patch
|
||||||
|
Patch1: dcraw-CVE-2017-13735.patch
|
||||||
|
# PATCH-FIX-UPSTREAM dcraw-CVE-2017-14608.patch
|
||||||
|
Patch2: dcraw-CVE-2017-14608.patch
|
||||||
|
# PATCH-FIX-UPSTREAM dcraw-CVE-2018-19655.patch
|
||||||
|
Patch3: dcraw-CVE-2018-19655.patch
|
||||||
|
# PATCH-FIX-UPSTREAM dcraw-CVE-2018-5801.patch
|
||||||
|
Patch4: dcraw-CVE-2018-5801.patch
|
||||||
|
Patch5: iowrappers.patch
|
||||||
|
Patch6: dcraw-CVE-2021-3624.patch
|
||||||
|
Patch7: dcraw-glibc-2.38.patch
|
||||||
|
BuildRequires: gettext-runtime
|
||||||
|
BuildRequires: libjasper-devel
|
||||||
|
BuildRequires: libjpeg-devel
|
||||||
|
BuildRequires: liblcms2-devel
|
||||||
|
Recommends: %{name}-lang = %{version}
|
||||||
|
|
||||||
|
%description
|
||||||
|
Command line tools for raw digital photo decoding and processing.
|
||||||
|
|
||||||
|
%lang_package
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}
|
||||||
|
cp -a %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} .
|
||||||
|
%patch0
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
|
||||||
|
%build
|
||||||
|
export CFLAGS="%{optflags} -fno-strict-aliasing -fstack-protector-all"
|
||||||
|
|
||||||
|
for file in *.c ; do
|
||||||
|
LDFLAGS=
|
||||||
|
OTHERFLAGS=
|
||||||
|
if test $file = dcraw.c ; then
|
||||||
|
LDFLAGS="-lm -ljasper -ljpeg -llcms2 -DLOCALEDIR=\""%{_datadir}/locale"\""
|
||||||
|
fi
|
||||||
|
if test $file = fuji_green.c ; then
|
||||||
|
LDFLAGS="-lm"
|
||||||
|
fi
|
||||||
|
gcc $CFLAGS $OTHERFLAGS -o ${file%.c} $file $LDFLAGS
|
||||||
|
done
|
||||||
|
# Compile with -D_16BIT to rotate 48-bit PPM images
|
||||||
|
gcc $CFLAGS -D_16BIT -o fujiturn16 fujiturn.c
|
||||||
|
|
||||||
|
# Build language catalogs
|
||||||
|
for catsrc in dcraw_*.po ; do
|
||||||
|
lang="${catsrc%.po}"
|
||||||
|
lang="${lang#dcraw_}"
|
||||||
|
msgfmt -o "dcraw_${lang}.mo" "$catsrc"
|
||||||
|
done
|
||||||
|
|
||||||
|
%install
|
||||||
|
install -d -m 0755 %{buildroot}%{_bindir}
|
||||||
|
install -d -m 0755 %{buildroot}%{_mandir}/man1
|
||||||
|
|
||||||
|
install -pm 0755 dcraw %{buildroot}%{_bindir}/
|
||||||
|
install -pm 0644 dcraw.1 %{buildroot}%{_mandir}/man1/
|
||||||
|
|
||||||
|
install -pm 0755 clean_crw %{buildroot}%{_bindir}/
|
||||||
|
install -pm 0755 fuji_green %{buildroot}%{_bindir}/
|
||||||
|
install -pm 0755 fujiturn %{buildroot}%{_bindir}/
|
||||||
|
install -pm 0755 fujiturn16 %{buildroot}%{_bindir}/
|
||||||
|
install -pm 0755 parse %{buildroot}%{_bindir}/dcparse
|
||||||
|
|
||||||
|
# Install language catalogs
|
||||||
|
for catalog in dcraw_*.mo ; do
|
||||||
|
lang="${catalog%.mo}"
|
||||||
|
lang="${lang#dcraw_}"
|
||||||
|
install -d -m 0755 "%{buildroot}%{_datadir}/locale/${lang}/LC_MESSAGES"
|
||||||
|
install -pm 0644 "$catalog" "%{buildroot}%{_datadir}/locale/${lang}/LC_MESSAGES/dcraw.mo"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Install localized manpages
|
||||||
|
for manpage in dcraw_*.1 ; do
|
||||||
|
lang="${manpage%.1}"
|
||||||
|
lang="${lang#dcraw_}"
|
||||||
|
install -d -m 0755 "%{buildroot}%{_mandir}/${lang}/man1"
|
||||||
|
install -pm 0644 "${manpage}" "%{buildroot}%{_mandir}/${lang}/man1/dcraw.1"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
cp -a %{SOURCE1} %{SOURCE2} %{SOURCE7} %{SOURCE100} .
|
||||||
|
mv badpixels .badpixels
|
||||||
|
|
||||||
|
%find_lang %{name} --with-man
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc .badpixels README README.openSUSE rawphoto.c
|
||||||
|
%{_bindir}/clean_crw
|
||||||
|
%{_bindir}/dcparse
|
||||||
|
%{_bindir}/dcraw
|
||||||
|
%{_bindir}/fuji_green
|
||||||
|
%{_bindir}/fujiturn
|
||||||
|
%{_bindir}/fujiturn16
|
||||||
|
%{_mandir}/man1/dcraw.1%{?ext_man}
|
||||||
|
|
||||||
|
%files lang -f %{name}.lang
|
||||||
|
%dir %{_mandir}/ca
|
||||||
|
%dir %{_mandir}/ca/man1
|
||||||
|
%dir %{_mandir}/cs
|
||||||
|
%dir %{_mandir}/cs/man1
|
||||||
|
%dir %{_mandir}/da
|
||||||
|
%dir %{_mandir}/da/man1
|
||||||
|
%dir %{_mandir}/eo
|
||||||
|
%dir %{_mandir}/eo/man1
|
||||||
|
%dir %{_mandir}/hu
|
||||||
|
%dir %{_mandir}/hu/man1
|
||||||
|
%dir %{_mandir}/pl
|
||||||
|
%dir %{_mandir}/pl/man1
|
||||||
|
%dir %{_mandir}/pt
|
||||||
|
%dir %{_mandir}/pt/man1
|
||||||
|
%dir %{_mandir}/ro
|
||||||
|
%dir %{_mandir}/ro/man1
|
||||||
|
%dir %{_mandir}/sv
|
||||||
|
%dir %{_mandir}/sv/man1
|
||||||
|
%dir %{_mandir}/zh_CN
|
||||||
|
%dir %{_mandir}/zh_CN/man1
|
||||||
|
%dir %{_mandir}/zh_TW
|
||||||
|
%dir %{_mandir}/zh_TW/man1
|
||||||
|
|
||||||
|
%changelog
|
375
fuji_green.c
Normal file
375
fuji_green.c
Normal file
|
@ -0,0 +1,375 @@
|
||||||
|
/*
|
||||||
|
fuji_green -- read Fuji green pixels
|
||||||
|
|
||||||
|
$Revision: 1.2 $
|
||||||
|
$Date: 2006/03/01 01:46:47 $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define ushort UshORt
|
||||||
|
typedef unsigned char uchar;
|
||||||
|
typedef unsigned short ushort;
|
||||||
|
|
||||||
|
FILE *ifp;
|
||||||
|
short order;
|
||||||
|
char *ifname, make[64], model[64];
|
||||||
|
int data_offset, raw_height, raw_width, height, width;
|
||||||
|
int fuji_layout, fuji_secondary, use_secondary=0, verbose=0;
|
||||||
|
ushort *image;
|
||||||
|
void (*load_raw)();
|
||||||
|
float bright=1.0;
|
||||||
|
void write_ppm(FILE *);
|
||||||
|
void (*write_fun)(FILE *) = write_ppm;
|
||||||
|
jmp_buf failure;
|
||||||
|
|
||||||
|
#define CLASS
|
||||||
|
|
||||||
|
void CLASS merror (void *ptr, char *where)
|
||||||
|
{
|
||||||
|
if (ptr) return;
|
||||||
|
fprintf (stderr, "%s: Out of memory in %s\n", ifname, where);
|
||||||
|
longjmp (failure, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ushort CLASS get2()
|
||||||
|
{
|
||||||
|
uchar a, b;
|
||||||
|
|
||||||
|
a = fgetc(ifp);
|
||||||
|
b = fgetc(ifp);
|
||||||
|
if (order == 0x4949) /* "II" means little-endian */
|
||||||
|
return a + (b << 8);
|
||||||
|
else /* "MM" means big-endian */
|
||||||
|
return (a << 8) + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CLASS get4()
|
||||||
|
{
|
||||||
|
uchar a, b, c, d;
|
||||||
|
|
||||||
|
a = fgetc(ifp);
|
||||||
|
b = fgetc(ifp);
|
||||||
|
c = fgetc(ifp);
|
||||||
|
d = fgetc(ifp);
|
||||||
|
if (order == 0x4949)
|
||||||
|
return a + (b << 8) + (c << 16) + (d << 24);
|
||||||
|
else
|
||||||
|
return (a << 24) + (b << 16) + (c << 8) + d;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Faster than calling get2() multiple times.
|
||||||
|
*/
|
||||||
|
void CLASS read_shorts (ushort *pixel, int count)
|
||||||
|
{
|
||||||
|
fread (pixel, 2, count, ifp);
|
||||||
|
if ((order == 0x4949) == (ntohs(0x1234) == 0x1234))
|
||||||
|
swab (pixel, pixel, count*2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS fuji_load_raw()
|
||||||
|
{
|
||||||
|
ushort *pixel, *img;
|
||||||
|
int row, col;
|
||||||
|
|
||||||
|
pixel = calloc (raw_width, 2);
|
||||||
|
merror (pixel, "fuji_load_raw()");
|
||||||
|
for (row=0; row < height; row++)
|
||||||
|
if (fuji_layout) {
|
||||||
|
read_shorts (image+row*width, width);
|
||||||
|
fseek (ifp, (raw_width*2 - width)*2, SEEK_CUR);
|
||||||
|
} else {
|
||||||
|
read_shorts (pixel, raw_width);
|
||||||
|
for (img=image+row*width, col=0; col < width; col++)
|
||||||
|
img[col] = pixel[col*2+1];
|
||||||
|
}
|
||||||
|
free (pixel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS parse_fuji (int offset)
|
||||||
|
{
|
||||||
|
unsigned entries, tag, len, save;
|
||||||
|
|
||||||
|
fseek (ifp, offset, SEEK_SET);
|
||||||
|
entries = get4();
|
||||||
|
if (entries > 255) return;
|
||||||
|
while (entries--) {
|
||||||
|
tag = get2();
|
||||||
|
len = get2();
|
||||||
|
save = ftell(ifp);
|
||||||
|
if (tag == 0x100) {
|
||||||
|
raw_height = get2();
|
||||||
|
raw_width = get2();
|
||||||
|
} else if (tag == 0x121) {
|
||||||
|
height = get2();
|
||||||
|
width = get2();
|
||||||
|
} else if (tag == 0x130)
|
||||||
|
fuji_layout = fgetc(ifp) >> 7;
|
||||||
|
fseek (ifp, save+len, SEEK_SET);
|
||||||
|
}
|
||||||
|
if (fuji_layout) {
|
||||||
|
height *= 2;
|
||||||
|
width /= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS parse_tiff (int base)
|
||||||
|
{
|
||||||
|
int doff, entries, tag, type, len, save;
|
||||||
|
|
||||||
|
fseek (ifp, base, SEEK_SET);
|
||||||
|
order = get2();
|
||||||
|
get2(); /* Should be 42 for standard TIFF */
|
||||||
|
while ((doff = get4())) {
|
||||||
|
fseek (ifp, doff+base, SEEK_SET);
|
||||||
|
entries = get2();
|
||||||
|
while (entries--) {
|
||||||
|
tag = get2();
|
||||||
|
type = get2();
|
||||||
|
len = get4();
|
||||||
|
save = ftell(ifp)+4;
|
||||||
|
fseek (ifp, base+get4(), SEEK_SET);
|
||||||
|
switch (tag) {
|
||||||
|
case 0x10f: /* Make tag */
|
||||||
|
fgets (make, 64, ifp);
|
||||||
|
break;
|
||||||
|
case 0x110: /* Model tag */
|
||||||
|
fgets (model, 64, ifp);
|
||||||
|
}
|
||||||
|
fseek (ifp, save, SEEK_SET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int CLASS identify()
|
||||||
|
{
|
||||||
|
char head[32], *c;
|
||||||
|
int thumb_offset;
|
||||||
|
|
||||||
|
make[0] = model[0] = 0;
|
||||||
|
data_offset = raw_height = raw_width = height = width = 0;
|
||||||
|
fuji_secondary = 0;
|
||||||
|
|
||||||
|
order = 0x4d4d;
|
||||||
|
fread (head, 1, 32, ifp);
|
||||||
|
if (memcmp (head, "FUJIFILM", 8)) return 1;
|
||||||
|
fseek (ifp, 84, SEEK_SET);
|
||||||
|
thumb_offset = get4();
|
||||||
|
fseek (ifp, 92, SEEK_SET);
|
||||||
|
parse_fuji (get4());
|
||||||
|
if (thumb_offset > 120) {
|
||||||
|
fseek (ifp, 120, SEEK_SET);
|
||||||
|
fuji_secondary = get4() && 1;
|
||||||
|
}
|
||||||
|
fseek (ifp, 100, SEEK_SET);
|
||||||
|
data_offset = get4();
|
||||||
|
parse_tiff (thumb_offset+12);
|
||||||
|
c = model + strlen(model); /* Remove trailing spaces */
|
||||||
|
while (*--c == ' ') *c = 0;
|
||||||
|
if (!strcmp(model,"FinePix S5100") ||
|
||||||
|
!strcmp(model,"FinePix S5500")) return 1;
|
||||||
|
load_raw = fuji_load_raw;
|
||||||
|
if (!strcmp(model+7,"S2Pro")) {
|
||||||
|
strcpy (model+7," S2Pro");
|
||||||
|
height = 2144;
|
||||||
|
width = 2880;
|
||||||
|
}
|
||||||
|
data_offset += (raw_height - height + 1)*raw_width - width;
|
||||||
|
if (fuji_secondary)
|
||||||
|
data_offset += use_secondary * ( strcmp(model+7," S3Pro")
|
||||||
|
? (raw_width *= 2) : raw_height*raw_width*2 );
|
||||||
|
data_offset += fuji_layout*raw_width*2;
|
||||||
|
width >>= !fuji_layout;
|
||||||
|
height >>= fuji_layout;
|
||||||
|
fseek (ifp, data_offset, SEEK_SET);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS write_ppm (FILE *ofp)
|
||||||
|
{
|
||||||
|
int i, size, val, total, histogram[0x2000];
|
||||||
|
float white, r;
|
||||||
|
uchar lut[0x10000];
|
||||||
|
|
||||||
|
memset (histogram, 0, sizeof histogram);
|
||||||
|
size = width * height;
|
||||||
|
for (i = 0; i < size; i++)
|
||||||
|
histogram[image[i] >> 4]++;
|
||||||
|
i = size * 0.01; /* 99th percentile white point */
|
||||||
|
for (val=0x2000, total=0; --val; )
|
||||||
|
if ((total += histogram[val]) > i) break;
|
||||||
|
white = (val << 4) / bright;
|
||||||
|
|
||||||
|
for (i=0; i < 0x10000; i++) {
|
||||||
|
r = i / white;
|
||||||
|
val = (r <= 0.018 ? r*4.5 : pow(r,0.45)*1.099-0.099) * 256;
|
||||||
|
if (val > 255) val = 255;
|
||||||
|
lut[i] = val;
|
||||||
|
}
|
||||||
|
fprintf (ofp, "P5\n%d %d\n255\n", width, height);
|
||||||
|
for (i=0; i < size; i++)
|
||||||
|
fputc (lut[image[i]], ofp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS write_raw16 (FILE *ofp)
|
||||||
|
{
|
||||||
|
if (ntohs(0x1234) != 0x1234)
|
||||||
|
swab (image, image, width*height*2);
|
||||||
|
fwrite (image, width*height, 2, ofp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS write_ppm16 (FILE *ofp)
|
||||||
|
{
|
||||||
|
fprintf (ofp, "P5\n%d %d\n%d\n", width, height, 65535);
|
||||||
|
write_raw16 (ofp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLASS write_psd (FILE *ofp)
|
||||||
|
{
|
||||||
|
char head[] = {
|
||||||
|
'8','B','P','S', /* signature */
|
||||||
|
0,1,0,0,0,0,0,0, /* version and reserved */
|
||||||
|
0,1, /* number of channels */
|
||||||
|
0,0,0,0, /* height, big-endian */
|
||||||
|
0,0,0,0, /* width, big-endian */
|
||||||
|
0,16, /* 16-bit color */
|
||||||
|
0,1, /* mode (1=grey, 3=rgb) */
|
||||||
|
0,0,0,0, /* color mode data */
|
||||||
|
0,0,0,0, /* image resources */
|
||||||
|
0,0,0,0, /* layer/mask info */
|
||||||
|
0,0 }; /* no compression */
|
||||||
|
int hw[2];
|
||||||
|
|
||||||
|
hw[0] = htonl(height*2); /* write the header */
|
||||||
|
hw[1] = htonl(width*2);
|
||||||
|
memcpy (head+14, hw, sizeof hw);
|
||||||
|
fwrite (head, 40, 1, ofp);
|
||||||
|
write_raw16 (ofp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int CLASS main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
int arg, status=0;
|
||||||
|
int identify_only=0, write_to_stdout=0;
|
||||||
|
char opt, *ofname, *cp;
|
||||||
|
const char *write_ext = ".pgm";
|
||||||
|
FILE *ofp = stdout;
|
||||||
|
|
||||||
|
if (argc == 1) {
|
||||||
|
fprintf (stderr,
|
||||||
|
"\nFuji Green channel output"
|
||||||
|
"\nby Dave Coffin, dcoffin a cybercom o net"
|
||||||
|
"\n\nUsage: %s [options] file1 file2 ...\n"
|
||||||
|
"\nValid options:"
|
||||||
|
"\n-v Print verbose messages"
|
||||||
|
"\n-c Write image data to standard output"
|
||||||
|
"\n-i Identify files without decoding them"
|
||||||
|
"\n-s Use secondary pixels if available"
|
||||||
|
"\n-b <num> Set brightness (default = 1.0)"
|
||||||
|
"\n-2 Write 8-bit non-linear PGM (default)"
|
||||||
|
"\n-4 Write 16-bit linear PGM"
|
||||||
|
"\n-3 Write 16-bit linear PSD (Adobe Photoshop)"
|
||||||
|
"\n\n", argv[0]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
argv[argc] = "";
|
||||||
|
for (arg=1; argv[arg][0] == '-'; ) {
|
||||||
|
opt = argv[arg++][1];
|
||||||
|
if (strchr ("b", opt) && !isdigit(argv[arg][0])) {
|
||||||
|
fprintf (stderr, "\"-%c\" requires a numeric argument.\n", opt);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
switch (opt) {
|
||||||
|
case 'v': verbose = 1; break;
|
||||||
|
case 'i': identify_only = 1; break;
|
||||||
|
case 'c': write_to_stdout = 1; break;
|
||||||
|
case 's': use_secondary = 1; break;
|
||||||
|
case 'b': bright = atof(argv[arg++]); break;
|
||||||
|
case '2': write_fun = write_ppm; break;
|
||||||
|
case '4': write_fun = write_ppm16; break;
|
||||||
|
case '3': write_fun = write_psd; write_ext = ".psd"; break;
|
||||||
|
default:
|
||||||
|
fprintf (stderr, "Unknown option \"-%c\".\n", opt);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (arg == argc) {
|
||||||
|
fprintf (stderr, "No files to process.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (write_to_stdout) {
|
||||||
|
if (isatty(1)) {
|
||||||
|
fprintf (stderr, "Will not write an image to the terminal!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#if defined(WIN32) || defined(DJGPP)
|
||||||
|
if (setmode(1,O_BINARY) < 0) {
|
||||||
|
perror("setmode()");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
for ( ; arg < argc; arg++) {
|
||||||
|
status = 1;
|
||||||
|
image = NULL;
|
||||||
|
if (setjmp (failure)) {
|
||||||
|
if (fileno(ifp) > 2) fclose (ifp);
|
||||||
|
if (fileno(ofp) > 2) fclose (ofp);
|
||||||
|
if (image) free (image);
|
||||||
|
status = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ifname = argv[arg];
|
||||||
|
if (!(ifp = fopen (ifname, "rb"))) {
|
||||||
|
perror (ifname);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((status = identify())) {
|
||||||
|
fprintf (stderr, "%s: unsupported file format.\n", ifname);
|
||||||
|
fclose (ifp);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (identify_only) {
|
||||||
|
fprintf (stderr, "%s is a %s %s image.\n", ifname, make, model);
|
||||||
|
fclose (ifp);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
image = calloc (height * width, sizeof *image);
|
||||||
|
merror (image, "main()");
|
||||||
|
if (verbose)
|
||||||
|
fprintf (stderr,
|
||||||
|
"Loading %s %s image from %s...\n", make, model, ifname);
|
||||||
|
(*load_raw)();
|
||||||
|
fclose (ifp);
|
||||||
|
ofname = malloc (strlen(ifname) + 16);
|
||||||
|
merror (ofname, "main()");
|
||||||
|
if (write_to_stdout)
|
||||||
|
strcpy (ofname, "standard output");
|
||||||
|
else {
|
||||||
|
strcpy (ofname, ifname);
|
||||||
|
if ((cp = strrchr (ofname, '.'))) *cp = 0;
|
||||||
|
strcat (ofname, write_ext);
|
||||||
|
ofp = fopen (ofname, "wb");
|
||||||
|
if (!ofp) {
|
||||||
|
status = 1;
|
||||||
|
perror (ofname);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (verbose)
|
||||||
|
fprintf (stderr, "Writing data to %s...\n", ofname);
|
||||||
|
(*write_fun)(ofp);
|
||||||
|
if (ofp != stdout)
|
||||||
|
fclose (ofp);
|
||||||
|
cleanup:
|
||||||
|
free (ofname);
|
||||||
|
free (image);
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
11
fuji_green.c_fix_gcc_warnings.patch
Normal file
11
fuji_green.c_fix_gcc_warnings.patch
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
--- fuji_green.c.orig 2006-03-01 03:46:47.000000000 +0200
|
||||||
|
+++ fuji_green.c 2011-03-22 21:26:43.871000023 +0200
|
||||||
|
@@ -11,6 +11,8 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+#include <netinet/in.h>
|
||||||
|
|
||||||
|
#define ushort UshORt
|
||||||
|
typedef unsigned char uchar;
|
102
fujiturn.c
Normal file
102
fujiturn.c
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
fujiturn.c by Dave Coffin
|
||||||
|
|
||||||
|
UNIX filter to correct the 45-degree rotation in images from
|
||||||
|
Fuji digital cameras. Compile with -D_16BIT to rotate 48-bit
|
||||||
|
PPM images. Sample usage:
|
||||||
|
|
||||||
|
dcraw -c -j dscf0000.raf | fujiturn | pnmscale 0.70710678 > dscf0000.ppm
|
||||||
|
|
||||||
|
$Revision: 1.6 $
|
||||||
|
$Date: 2005/04/29 16:35:42 $
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#ifdef _16BIT
|
||||||
|
typedef unsigned short value;
|
||||||
|
#else
|
||||||
|
typedef unsigned char value;
|
||||||
|
#define ntohs(x) (x)
|
||||||
|
#define htons(x) (x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void merror (void *ptr, char *what)
|
||||||
|
{
|
||||||
|
if (ptr) return;
|
||||||
|
fprintf (stderr, "Not enough memory for %s\n", what);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
FILE *ifp, *ofp;
|
||||||
|
value (*in)[3], (*mid)[3], (*pix)[3], (*out)[3];
|
||||||
|
char nl;
|
||||||
|
int maxval, i, j, iwide, ihigh, owide, ohigh;
|
||||||
|
unsigned irow, icol, orow, ocol;
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(DJGPP)
|
||||||
|
if (setmode(0,O_BINARY) < 0) perror("setmode(0)");
|
||||||
|
if (setmode(1,O_BINARY) < 0) perror("setmode(1)");
|
||||||
|
#endif
|
||||||
|
ifp = stdin;
|
||||||
|
ofp = stdout;
|
||||||
|
if (fscanf (ifp, "P6 %d %d %d%c", &iwide, &ihigh, &maxval, &nl) != 4
|
||||||
|
|| abs(iwide - ihigh) > 1) {
|
||||||
|
fprintf (stderr, "Input is not a Fuji image processed by dcraw.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
i = (maxval > 255) ? 16 : 8;
|
||||||
|
j = 8 * sizeof (value);
|
||||||
|
if (i != j) {
|
||||||
|
fprintf (stderr, "Input is %d-bit, fujiturn is %d-bit\n", i, j);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
in = calloc (iwide, sizeof *in);
|
||||||
|
merror (in, "input array");
|
||||||
|
fread (in, iwide, sizeof *in, ifp);
|
||||||
|
for (i = 0; i < iwide; i++)
|
||||||
|
if (in[i][0] || in[i][1] || in[i][2]) break;
|
||||||
|
ohigh = (iwide - i) * 2 - 4;
|
||||||
|
for (i = iwide; --i;)
|
||||||
|
if (in[i][0] || in[i][1] || in[i][2]) break;
|
||||||
|
owide = i;
|
||||||
|
mid = calloc (ohigh * owide, sizeof *mid);
|
||||||
|
merror (mid, "middle array");
|
||||||
|
for (irow = 0; irow < ihigh; irow++) {
|
||||||
|
for (icol = 0; icol < iwide; icol++) {
|
||||||
|
orow = irow + icol - owide + 5;
|
||||||
|
ocol = (icol - irow + owide - 1)/2;
|
||||||
|
if (orow < ohigh && ocol < owide)
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
mid[orow*owide+ocol][i] = ntohs(in[icol][i]);
|
||||||
|
}
|
||||||
|
fread (in, iwide, sizeof *in, ifp);
|
||||||
|
}
|
||||||
|
free(in);
|
||||||
|
out = calloc (2*owide, sizeof *out);
|
||||||
|
merror (out, "output array");
|
||||||
|
fprintf (ofp, "P6\n%d %d\n%d\n", owide*2, ohigh, maxval);
|
||||||
|
for (orow = 0; orow < ohigh; orow++) {
|
||||||
|
for (ocol = 0; ocol < owide*2; ocol++) {
|
||||||
|
pix = mid + orow*owide + ocol/2;
|
||||||
|
if ((orow+ocol) & 1) {
|
||||||
|
if (orow-1 < ohigh-2 && ocol-1 < owide*2-2)
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
out[ocol][i] = htons (
|
||||||
|
( pix[-owide][i] + pix[0-(orow&1)][i] +
|
||||||
|
pix[ owide][i] + pix[1-(orow&1)][i] ) >> 2);
|
||||||
|
} else
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
out[ocol][i] = htons(pix[0][i]);
|
||||||
|
}
|
||||||
|
fwrite (out, 2*owide, 3*sizeof (value), ofp);
|
||||||
|
}
|
||||||
|
free(mid);
|
||||||
|
free(out);
|
||||||
|
return 0;
|
||||||
|
}
|
2636
iowrappers.patch
Normal file
2636
iowrappers.patch
Normal file
File diff suppressed because it is too large
Load Diff
355
rawphoto.c
Normal file
355
rawphoto.c
Normal file
|
@ -0,0 +1,355 @@
|
||||||
|
/*
|
||||||
|
Raw photo loader plugin for The GIMP
|
||||||
|
by Dave Coffin at cybercom dot net, user dcoffin
|
||||||
|
http://www.cybercom.net/~dcoffin/
|
||||||
|
|
||||||
|
$Revision: 1.32 $
|
||||||
|
$Date: 2008/09/16 05:41:39 $
|
||||||
|
|
||||||
|
This code is licensed under the same terms as The GIMP.
|
||||||
|
To simplify maintenance, it calls my command-line "dcraw"
|
||||||
|
program to do the actual decoding.
|
||||||
|
|
||||||
|
To install locally:
|
||||||
|
gimptool --install rawphoto.c
|
||||||
|
|
||||||
|
To install globally:
|
||||||
|
gimptool --install-admin rawphoto.c
|
||||||
|
|
||||||
|
To build without installing:
|
||||||
|
gcc -o rawphoto rawphoto.c `gtk-config --cflags --libs` -lgimp -lgimpui
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#include <libgimp/gimp.h>
|
||||||
|
#include <libgimp/gimpui.h>
|
||||||
|
|
||||||
|
#if GIMP_CHECK_VERSION(1,3,2)
|
||||||
|
#define GimpRunModeType GimpRunMode
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if GIMP_CHECK_VERSION(1,3,17)
|
||||||
|
#define RAWPHOTO_CONST const
|
||||||
|
#else
|
||||||
|
#define RAWPHOTO_CONST
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
#define _(String) gettext(String)
|
||||||
|
|
||||||
|
#define PLUG_IN_VERSION "1.1.20 - 16 September 2008"
|
||||||
|
|
||||||
|
static void query(void);
|
||||||
|
static void run(RAWPHOTO_CONST gchar *name,
|
||||||
|
gint nparams,
|
||||||
|
RAWPHOTO_CONST GimpParam *param,
|
||||||
|
gint *nreturn_vals,
|
||||||
|
GimpParam **return_vals);
|
||||||
|
|
||||||
|
static gint load_dialog (gchar *name);
|
||||||
|
static gint32 load_image (gchar *filename);
|
||||||
|
|
||||||
|
GimpPlugInInfo PLUG_IN_INFO =
|
||||||
|
{
|
||||||
|
NULL, /* init_procedure */
|
||||||
|
NULL, /* quit_procedure */
|
||||||
|
query, /* query_procedure */
|
||||||
|
run, /* run_procedure */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
gboolean check_val[6];
|
||||||
|
gfloat spin_val[2];
|
||||||
|
} cfg = {
|
||||||
|
{ FALSE, FALSE, FALSE, FALSE, FALSE, FALSE },
|
||||||
|
{ 1, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
MAIN ()
|
||||||
|
|
||||||
|
static void query (void)
|
||||||
|
{
|
||||||
|
static GimpParamDef load_args[] =
|
||||||
|
{
|
||||||
|
{ GIMP_PDB_INT32, "run_mode", "Interactive, non-interactive" },
|
||||||
|
{ GIMP_PDB_STRING, "filename", "The name of the file to load" },
|
||||||
|
{ GIMP_PDB_STRING, "raw_filename", "The name of the file to load" },
|
||||||
|
};
|
||||||
|
static GimpParamDef load_return_vals[] =
|
||||||
|
{
|
||||||
|
{ GIMP_PDB_IMAGE, "image", "Output image" },
|
||||||
|
};
|
||||||
|
|
||||||
|
static gint num_load_args =
|
||||||
|
sizeof load_args / sizeof load_args[0];
|
||||||
|
static gint num_load_return_vals =
|
||||||
|
sizeof load_return_vals / sizeof load_return_vals[0];
|
||||||
|
|
||||||
|
gimp_install_procedure ("file_rawphoto_load",
|
||||||
|
"Loads raw digital camera files",
|
||||||
|
"This plug-in loads raw digital camera files.",
|
||||||
|
"Dave Coffin at cybercom dot net, user dcoffin",
|
||||||
|
"Copyright 2003-2008 by Dave Coffin",
|
||||||
|
PLUG_IN_VERSION,
|
||||||
|
"<Load>/rawphoto",
|
||||||
|
NULL,
|
||||||
|
GIMP_PLUGIN,
|
||||||
|
num_load_args,
|
||||||
|
num_load_return_vals,
|
||||||
|
load_args,
|
||||||
|
load_return_vals);
|
||||||
|
|
||||||
|
gimp_register_load_handler ("file_rawphoto_load",
|
||||||
|
"3fr,arw,bay,bmq,cine,cr2,crw,cs1,dc2,dcr,dng,erf,fff,hdr,ia,jpg,k25,kc2,kdc,mdc,mef,mos,mrw,nef,nrw,orf,pef,pxn,qtk,raf,raw,rdc,rw2,sr2,srf,sti,tif,x3f", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void run (RAWPHOTO_CONST gchar *name,
|
||||||
|
gint nparams,
|
||||||
|
RAWPHOTO_CONST GimpParam *param,
|
||||||
|
gint *nreturn_vals,
|
||||||
|
GimpParam **return_vals)
|
||||||
|
{
|
||||||
|
static GimpParam values[2];
|
||||||
|
GimpRunModeType run_mode;
|
||||||
|
GimpPDBStatusType status;
|
||||||
|
gint32 image_id = -1;
|
||||||
|
gchar *command, *fname;
|
||||||
|
int stat;
|
||||||
|
|
||||||
|
*nreturn_vals = 1;
|
||||||
|
*return_vals = values;
|
||||||
|
|
||||||
|
status = GIMP_PDB_CALLING_ERROR;
|
||||||
|
if (strcmp (name, "file_rawphoto_load")) goto done;
|
||||||
|
|
||||||
|
status = GIMP_PDB_EXECUTION_ERROR;
|
||||||
|
fname = param[1].data.d_string;
|
||||||
|
command = g_malloc (strlen(fname)+20);
|
||||||
|
if (!command) goto done;
|
||||||
|
/*
|
||||||
|
Is the file really a raw photo? If not, try loading it
|
||||||
|
as a regular JPEG or TIFF.
|
||||||
|
*/
|
||||||
|
sprintf (command, "dcraw -i '%s'\n",fname);
|
||||||
|
fputs (command, stderr);
|
||||||
|
stat = system (command);
|
||||||
|
g_free (command);
|
||||||
|
if (stat) {
|
||||||
|
if (stat > 0x200)
|
||||||
|
g_message (_("The \"rawphoto\" plugin won't work because "
|
||||||
|
"there is no \"dcraw\" executable in your path."));
|
||||||
|
if (!strcasecmp (fname + strlen(fname) - 4, ".jpg"))
|
||||||
|
*return_vals = gimp_run_procedure2
|
||||||
|
("file_jpeg_load", nreturn_vals, nparams, param);
|
||||||
|
else
|
||||||
|
*return_vals = gimp_run_procedure2
|
||||||
|
("file_tiff_load", nreturn_vals, nparams, param);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
gimp_get_data ("plug_in_rawphoto", &cfg);
|
||||||
|
status = GIMP_PDB_CANCEL;
|
||||||
|
run_mode = param[0].data.d_int32;
|
||||||
|
if (run_mode == GIMP_RUN_INTERACTIVE)
|
||||||
|
if (!load_dialog (param[1].data.d_string)) goto done;
|
||||||
|
|
||||||
|
status = GIMP_PDB_EXECUTION_ERROR;
|
||||||
|
image_id = load_image (param[1].data.d_string);
|
||||||
|
if (image_id == -1) goto done;
|
||||||
|
|
||||||
|
*nreturn_vals = 2;
|
||||||
|
values[1].type = GIMP_PDB_IMAGE;
|
||||||
|
values[1].data.d_image = image_id;
|
||||||
|
status = GIMP_PDB_SUCCESS;
|
||||||
|
gimp_set_data ("plug_in_rawphoto", &cfg, sizeof cfg);
|
||||||
|
|
||||||
|
done:
|
||||||
|
values[0].type = GIMP_PDB_STATUS;
|
||||||
|
values[0].data.d_status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint32 load_image (gchar *filename)
|
||||||
|
{
|
||||||
|
int tile_height, depth, width, height, row, nrows;
|
||||||
|
FILE *pfp;
|
||||||
|
gint32 image, layer;
|
||||||
|
GimpDrawable *drawable;
|
||||||
|
GimpPixelRgn pixel_region;
|
||||||
|
guchar *pixel;
|
||||||
|
char *command, nl;
|
||||||
|
|
||||||
|
setlocale (LC_NUMERIC, "C");
|
||||||
|
command = g_malloc (strlen(filename)+100);
|
||||||
|
if (!command) return -1;
|
||||||
|
sprintf (command,
|
||||||
|
"dcraw -c%s%s%s%s%s%s -b %0.2f -H %d '%s'\n",
|
||||||
|
cfg.check_val[0] ? " -q 0":"",
|
||||||
|
cfg.check_val[1] ? " -h":"",
|
||||||
|
cfg.check_val[2] ? " -f":"",
|
||||||
|
cfg.check_val[3] ? " -d":"",
|
||||||
|
cfg.check_val[4] ? " -a":"",
|
||||||
|
cfg.check_val[5] ? " -w":"",
|
||||||
|
cfg.spin_val[0], (int) cfg.spin_val[1],
|
||||||
|
filename );
|
||||||
|
fputs (command, stderr);
|
||||||
|
pfp = popen (command, "r");
|
||||||
|
g_free (command);
|
||||||
|
if (!pfp) {
|
||||||
|
perror ("dcraw");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fscanf (pfp, "P%d %d %d 255%c", &depth, &width, &height, &nl) != 4
|
||||||
|
|| (depth-5)/2 ) {
|
||||||
|
pclose (pfp);
|
||||||
|
g_message ("Not a raw digital camera image.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
depth = depth*2 - 9;
|
||||||
|
image = gimp_image_new (width, height, depth == 3 ? GIMP_RGB : GIMP_GRAY);
|
||||||
|
if (image == -1) {
|
||||||
|
pclose (pfp);
|
||||||
|
g_message ("Can't allocate new image.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
gimp_image_set_filename (image, filename);
|
||||||
|
|
||||||
|
/* Create the "background" layer to hold the image... */
|
||||||
|
layer = gimp_layer_new (image, "Background", width, height,
|
||||||
|
depth == 3 ? GIMP_RGB_IMAGE : GIMP_GRAY_IMAGE,
|
||||||
|
100, GIMP_NORMAL_MODE);
|
||||||
|
gimp_image_add_layer (image, layer, 0);
|
||||||
|
|
||||||
|
/* Get the drawable and set the pixel region for our load... */
|
||||||
|
drawable = gimp_drawable_get (layer);
|
||||||
|
gimp_pixel_rgn_init (&pixel_region, drawable, 0, 0, drawable->width,
|
||||||
|
drawable->height, TRUE, FALSE);
|
||||||
|
|
||||||
|
/* Temporary buffers... */
|
||||||
|
tile_height = gimp_tile_height();
|
||||||
|
pixel = g_new (guchar, tile_height * width * depth);
|
||||||
|
|
||||||
|
/* Load the image... */
|
||||||
|
for (row = 0; row < height; row += tile_height) {
|
||||||
|
nrows = height - row;
|
||||||
|
if (nrows > tile_height)
|
||||||
|
nrows = tile_height;
|
||||||
|
fread (pixel, width * depth, nrows, pfp);
|
||||||
|
gimp_pixel_rgn_set_rect (&pixel_region, pixel, 0, row, width, nrows);
|
||||||
|
}
|
||||||
|
|
||||||
|
pclose (pfp);
|
||||||
|
g_free (pixel);
|
||||||
|
|
||||||
|
gimp_drawable_flush (drawable);
|
||||||
|
gimp_drawable_detach (drawable);
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GIMP_CHECK_VERSION(1,3,23)
|
||||||
|
/* this is set to true after OK click in any dialog */
|
||||||
|
gboolean result = FALSE;
|
||||||
|
|
||||||
|
static void callback_ok (GtkWidget * widget, gpointer data)
|
||||||
|
{
|
||||||
|
result = TRUE;
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (data));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define NCHECK (sizeof cfg.check_val / sizeof (gboolean))
|
||||||
|
|
||||||
|
gint load_dialog (gchar * name)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
|
GtkWidget *table;
|
||||||
|
GtkObject *adj;
|
||||||
|
GtkWidget *widget;
|
||||||
|
int i;
|
||||||
|
static const char *label[9] =
|
||||||
|
{ "Quick interpolation", "Half-size interpolation",
|
||||||
|
"Four color interpolation", "Grayscale document",
|
||||||
|
"Automatic white balance", "Camera white balance",
|
||||||
|
"Brightness", "Highlight mode" };
|
||||||
|
|
||||||
|
gimp_ui_init ("rawphoto", TRUE);
|
||||||
|
|
||||||
|
dialog = gimp_dialog_new (_("Raw Photo Loader " PLUG_IN_VERSION), "rawphoto",
|
||||||
|
#if !GIMP_CHECK_VERSION(1,3,23)
|
||||||
|
gimp_standard_help_func, "rawphoto",
|
||||||
|
GTK_WIN_POS_MOUSE,
|
||||||
|
FALSE, TRUE, FALSE,
|
||||||
|
_("OK"), callback_ok, NULL, NULL, NULL, TRUE,
|
||||||
|
FALSE, _("Cancel"), gtk_widget_destroy, NULL,
|
||||||
|
1, NULL, FALSE, TRUE, NULL);
|
||||||
|
gtk_signal_connect
|
||||||
|
(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
|
||||||
|
#else
|
||||||
|
NULL, 0,
|
||||||
|
gimp_standard_help_func, "rawphoto",
|
||||||
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||||
|
GTK_STOCK_OK, GTK_RESPONSE_OK,
|
||||||
|
NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
table = gtk_table_new (9, 2, FALSE);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER(table), 6);
|
||||||
|
gtk_box_pack_start
|
||||||
|
(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, FALSE, FALSE, 0);
|
||||||
|
gtk_widget_show (table);
|
||||||
|
|
||||||
|
for (i=0; i < NCHECK; i++) {
|
||||||
|
widget = gtk_check_button_new_with_label
|
||||||
|
(_(label[i]));
|
||||||
|
gtk_toggle_button_set_active
|
||||||
|
(GTK_TOGGLE_BUTTON (widget), cfg.check_val[i]);
|
||||||
|
gtk_table_attach
|
||||||
|
(GTK_TABLE(table), widget, 0, 2, i, i+1, GTK_FILL, GTK_FILL, 0, 0);
|
||||||
|
gtk_signal_connect (GTK_OBJECT (widget), "toggled",
|
||||||
|
GTK_SIGNAL_FUNC (gimp_toggle_button_update),
|
||||||
|
&cfg.check_val[i]);
|
||||||
|
gtk_widget_show (widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=NCHECK; i < NCHECK+2; i++) {
|
||||||
|
widget = gtk_label_new (_(label[i]));
|
||||||
|
gtk_misc_set_alignment (GTK_MISC (widget), 1.0, 0.5);
|
||||||
|
gtk_misc_set_padding (GTK_MISC (widget), 10, 0);
|
||||||
|
gtk_table_attach
|
||||||
|
(GTK_TABLE(table), widget, 0, 1, i, i+1, GTK_FILL, GTK_FILL, 0, 0);
|
||||||
|
gtk_widget_show (widget);
|
||||||
|
if (i == NCHECK+1)
|
||||||
|
widget = gimp_spin_button_new
|
||||||
|
(&adj, cfg.spin_val[i-NCHECK], 0, 9, 1, 9, 1, 1, 0);
|
||||||
|
else
|
||||||
|
widget = gimp_spin_button_new
|
||||||
|
(&adj, cfg.spin_val[i-NCHECK], 0.01, 4.0, 0.01, 0.1, 0.1, 0.1, 2);
|
||||||
|
gtk_table_attach
|
||||||
|
(GTK_TABLE(table), widget, 1, 2, i, i+1, GTK_FILL, GTK_FILL, 0, 0);
|
||||||
|
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
|
||||||
|
GTK_SIGNAL_FUNC (gimp_float_adjustment_update),
|
||||||
|
&cfg.spin_val[i-NCHECK]);
|
||||||
|
gtk_widget_show (widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_widget_show (dialog);
|
||||||
|
|
||||||
|
#if !GIMP_CHECK_VERSION(1,3,23)
|
||||||
|
gtk_main();
|
||||||
|
gdk_flush();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
#else
|
||||||
|
i = gimp_dialog_run (GIMP_DIALOG (dialog));
|
||||||
|
gtk_widget_destroy (dialog);
|
||||||
|
return i == GTK_RESPONSE_OK;
|
||||||
|
#endif
|
||||||
|
}
|
33
update_dcraw
Normal file
33
update_dcraw
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# Call this script to update dcraw files to latest version.
|
||||||
|
# "wget", "rcs" and "lynx" packages are required for the update
|
||||||
|
|
||||||
|
wget -N https://www.dechifro.org/dcraw/parse.c
|
||||||
|
wget -N https://www.dechifro.org/dcraw/fujiturn.c
|
||||||
|
wget -N https://www.dechifro.org/dcraw/rawphoto.c
|
||||||
|
wget -N https://www.dechifro.org/dcraw/clean_crw.c
|
||||||
|
wget -N https://www.dechifro.org/dcraw/fuji_green.c
|
||||||
|
mv badpixels .badpixels
|
||||||
|
wget -N https://www.dechifro.org/dcraw/.badpixels
|
||||||
|
mv .badpixels badpixels
|
||||||
|
( URL="https://www.dechifro.org/dcraw/" ; echo -e "$URL:\n" ; LC_ALL=C lynx -display_charset=utf-8 -dump "$URL" | sed '1d;3,4d' ) >README
|
||||||
|
OLDVERSION=`sed -ne 's/^Version:[[:space:]]*\([0-9.]\+\)[[:space:]]*$/\1/p' dcraw.spec`
|
||||||
|
NEWVERSION=`lynx -dump https://www.dechifro.org/dcraw/archive/ | sed -n -e 's/^.*dcraw-\([0-9.]\+\)\.tar\.gz.*$/\1/p' |sort -nr |head -1`
|
||||||
|
wget -N https://www.dechifro.org/dcraw/archive/dcraw-${NEWVERSION}.tar.gz
|
||||||
|
sed -i -e "s/^\(Version:[[:space:]]*\)[0-9.]\+[[:space:]]*$/\1${NEWVERSION}/" dcraw.spec
|
||||||
|
tar --strip-components=1 -xf dcraw-${OLDVERSION}.tar.gz dcraw/dcraw.c
|
||||||
|
rm dcraw-${OLDVERSION}.tar.gz
|
||||||
|
wget -N https://www.dechifro.org/dcraw/RCS/dcraw.c,v
|
||||||
|
rlog dcraw.c >dcraw.log
|
||||||
|
rm -f dcraw.c dcraw.c,v
|
||||||
|
wget -N https://www.dechifro.org/dcraw/RCS/parse.c,v
|
||||||
|
rlog parse.c >parse.log
|
||||||
|
rm parse.c,v
|
||||||
|
echo
|
||||||
|
echo "********************************************************************"
|
||||||
|
echo "********************************************************************"
|
||||||
|
echo "Please check, whether packaged file list is up to date."
|
||||||
|
echo "You can look at dcraw.log and parse.log for the complete change log."
|
||||||
|
echo "Before submit, please call:"
|
||||||
|
echo "rm dcraw.log parse.log"
|
Loading…
Reference in New Issue
Block a user