summaryrefslogtreecommitdiff
path: root/codec
diff options
context:
space:
mode:
authorFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2008-08-08 13:15:36 +0000
committerFrancois-Olivier Devaux <fodevaux@users.noreply.github.com>2008-08-08 13:15:36 +0000
commit4da178b0d83b6009e82bca1d9b7b2d5e1bceb6ad (patch)
tree64c51414914c6c23c4992f8f0cb1cce309f8c6fe /codec
parentf4bbad86155c84d56d3860cd77b405c16884fe63 (diff)
Modified the way raw images with more that 8bpp are read and written
Diffstat (limited to 'codec')
-rw-r--r--codec/convert.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/codec/convert.c b/codec/convert.c
index e56d1311..3f3384df 100644
--- a/codec/convert.c
+++ b/codec/convert.c
@@ -2013,19 +2013,30 @@ opj_image_t* rawtoimage(const char *filename, opj_cparameters_t *parameters, raw
}
}
}
- else
+ else if(raw_cp->rawBitDepth <= 16)
{
- unsigned short value = 0;
+ unsigned short value;
for(compno = 0; compno < numcomps; compno++) {
for (i = 0; i < w * h; i++) {
- if (!fread(&value, 2, 1, f)) {
+ unsigned char temp;
+ if (!fread(&temp, 1, 1, f)) {
fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
return NULL;
}
+ value = temp << 8;
+ if (!fread(&temp, 1, 1, f)) {
+ fprintf(stderr,"Error reading raw file. End of file probably reached.\n");
+ return NULL;
+ }
+ value += temp;
image->comps[compno].data[i] = raw_cp->rawSigned?(short)value:value;
}
}
}
+ else {
+ fprintf(stderr,"OpenJPEG cannot encode raw components with bit depth higher than 16 bits.\n");
+ return NULL;
+ }
if (fread(&ch, 1, 1, f)) {
fprintf(stderr,"Warning. End of raw file not reached... processing anyway\n");
@@ -2103,8 +2114,12 @@ int imagetoraw(opj_image_t * image, const char *outfile)
ptr = image->comps[compno].data;
for (line = 0; line < h; line++) {
for(row = 0; row < w; row++) {
- curr = (signed short int) (*ptr & mask);
- fwrite(&curr, sizeof(signed short int), 1, rawFile);
+ unsigned char temp;
+ curr = (signed short int) (*ptr & mask);
+ temp = curr >> 8;
+ fwrite(&temp, 1, 1, rawFile);
+ temp = curr;
+ fwrite(&temp, 1, 1, rawFile);
ptr++;
}
}
@@ -2116,8 +2131,12 @@ int imagetoraw(opj_image_t * image, const char *outfile)
ptr = image->comps[compno].data;
for (line = 0; line < h; line++) {
for(row = 0; row < w; row++) {
- curr = (unsigned short int) (*ptr & mask);
- fwrite(&curr, sizeof(unsigned short int), 1, rawFile);
+ unsigned char temp;
+ curr = (unsigned short int) (*ptr & mask);
+ temp = curr >> 8;
+ fwrite(&temp, 1, 1, rawFile);
+ temp = curr;
+ fwrite(&temp, 1, 1, rawFile);
ptr++;
}
}