From cbc9984a17b3452da4fee397aac912f1e9f7a4c3 Mon Sep 17 00:00:00 2001 From: Joseph Redmon Date: Wed, 10 Jun 2015 00:11:41 -0700 Subject: [PATCH] NIPS --- Makefile | 19 +- cfg/detection.cfg | 204 -- cfg/{rescore.cfg => yolo.cfg} | 9 +- data/dog.jpg | Bin 0 -> 162407 bytes data/eagle.jpg | Bin 0 -> 141886 bytes data/horses.jpg | Bin 0 -> 133495 bytes data/person.jpg | Bin 0 -> 113880 bytes src/captcha.c | 2 + src/convolutional_layer.c | 9 + src/crop_layer_kernels.cu | 8 +- src/darknet.c | 24 + src/data.c | 2 +- src/detection.c | 428 +-- src/detection_layer.c | 69 +- src/detection_layer.h | 2 +- src/image.c | 242 +- src/image.h | 14 +- src/layer.h | 4 +- src/parser.c | 7 +- src/stb_image.h | 6437 +++++++++++++++++++++++++++++++++ src/stb_image_write.h | 730 ++++ 21 files changed, 7440 insertions(+), 770 deletions(-) delete mode 100644 cfg/detection.cfg rename cfg/{rescore.cfg => yolo.cfg} (97%) create mode 100644 data/dog.jpg create mode 100644 data/eagle.jpg create mode 100644 data/horses.jpg create mode 100644 data/person.jpg create mode 100644 src/stb_image.h create mode 100644 src/stb_image_write.h diff --git a/Makefile b/Makefile index 4ebac6de..bc3b9bf7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,7 @@ GPU=1 +OPENCV=1 DEBUG=0 + ARCH= -arch=sm_52 VPATH=./src/ @@ -9,9 +11,9 @@ OBJDIR=./obj/ CC=gcc NVCC=nvcc OPTS=-Ofast -LDFLAGS=`pkg-config --libs opencv` -lm -pthread -lstdc++ -COMMON=`pkg-config --cflags opencv` -I/usr/local/cuda/include/ -CFLAGS=-Wall -Wfatal-errors +LDFLAGS= -lm -pthread -lstdc++ +COMMON= -I/usr/local/cuda/include/ +CFLAGS=-Wall -Wfatal-errors ifeq ($(DEBUG), 1) OPTS=-O0 -g @@ -19,9 +21,16 @@ endif CFLAGS+=$(OPTS) +ifeq ($(OPENCV), 1) +COMMON+= -DOPENCV +CFLAGS+= -DOPENCV +LDFLAGS+= `pkg-config --libs opencv` +COMMON+= `pkg-config --cflags opencv` +endif + ifeq ($(GPU), 1) -COMMON+=-DGPU -CFLAGS+=-DGPU +COMMON+= -DGPU +CFLAGS+= -DGPU LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand endif diff --git a/cfg/detection.cfg b/cfg/detection.cfg deleted file mode 100644 index 3f3b50ed..00000000 --- a/cfg/detection.cfg +++ /dev/null @@ -1,204 +0,0 @@ -[net] -batch=64 -subdivisions=4 -height=448 -width=448 -channels=3 -learning_rate=0.01 -momentum=0.9 -decay=0.0005 -seen = 0 - -[crop] -crop_width=448 -crop_height=448 -flip=0 -angle=0 -saturation = 2 -exposure = 2 - -[convolutional] -filters=64 -size=7 -stride=2 -pad=1 -activation=ramp - -[convolutional] -filters=192 -size=3 -stride=2 -pad=1 -activation=ramp - -[convolutional] -filters=128 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=3 -stride=2 -pad=1 -activation=ramp - -[convolutional] -filters=128 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=128 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=3 -stride=2 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=256 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=1024 -size=3 -stride=2 -pad=1 -activation=ramp - -[convolutional] -filters=512 -size=1 -stride=1 -pad=1 -activation=ramp - -[convolutional] -filters=1024 -size=3 -stride=1 -pad=1 -activation=ramp - -[convolutional] -size=3 -stride=1 -pad=1 -filters=1024 -activation=ramp - -[convolutional] -size=3 -stride=2 -pad=1 -filters=1024 -activation=ramp - -[convolutional] -size=3 -stride=1 -pad=1 -filters=1024 -activation=ramp - -[convolutional] -size=3 -stride=1 -pad=1 -filters=1024 -activation=ramp - -[connected] -output=4096 -activation=ramp - -[dropout] -probability=.5 - -[connected] -output=1225 -activation=logistic - -[detection] -classes=20 -coords=4 -rescore=0 -nuisance = 1 -background=1 diff --git a/cfg/rescore.cfg b/cfg/yolo.cfg similarity index 97% rename from cfg/rescore.cfg rename to cfg/yolo.cfg index 954c1582..8426bf99 100644 --- a/cfg/rescore.cfg +++ b/cfg/yolo.cfg @@ -1,6 +1,6 @@ [net] -batch=64 -subdivisions=4 +batch=1 +subdivisions=1 height=448 width=448 channels=3 @@ -199,6 +199,7 @@ activation=logistic [detection] classes=20 coords=4 -rescore=1 -nuisance = 0 +rescore=0 +joint=1 +objectness = 0 background=0 diff --git a/data/dog.jpg b/data/dog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..deadd795870e92cadb443f1793750522832e6583 GIT binary patch literal 162407 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 X=a57QZMfaWN%X}gbW+3fCeQ!b&a5oT literal 0 HcmV?d00001 diff --git a/data/eagle.jpg b/data/eagle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b7509505b01a766bbf637dcbb1e2c5f24903ac5 GIT binary patch literal 141886 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 X$xsGJ9{%-|uyT5)jbl<9JD>mABxdr5 literal 0 HcmV?d00001 diff --git a/data/horses.jpg b/data/horses.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a761f46ba08ed459af026b59f6b91b6fa597dd1 GIT binary patch literal 133495 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 j`h%HPf?GiIOe8@u` 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 literal 0 HcmV?d00001 diff --git a/src/captcha.c b/src/captcha.c index ca6dfe06..e369ffbc 100644 --- a/src/captcha.c +++ b/src/captcha.c @@ -62,7 +62,9 @@ void decode_captcha(char *cfgfile, char *weightfile) float *predictions = network_predict(net, X); image out = float_to_image(300, 57, 1, predictions); show_image(out, "decoded"); + #ifdef OPENCV cvWaitKey(0); + #endif free_image(im); } } diff --git a/src/convolutional_layer.c b/src/convolutional_layer.c index 67c36c39..e29d9957 100644 --- a/src/convolutional_layer.c +++ b/src/convolutional_layer.c @@ -227,6 +227,15 @@ image get_convolutional_filter(convolutional_layer l, int i) return float_to_image(w,h,c,l.filters+i*h*w*c); } +void rgbgr_filters(convolutional_layer l) +{ + int i; + for(i = 0; i < l.n; ++i){ + image im = get_convolutional_filter(l, i); + if (im.c == 3) rgbgr_image(im); + } +} + image *get_filters(convolutional_layer l) { image *filters = calloc(l.n, sizeof(image)); diff --git a/src/crop_layer_kernels.cu b/src/crop_layer_kernels.cu index 98d1ef47..d60cc0a7 100644 --- a/src/crop_layer_kernels.cu +++ b/src/crop_layer_kernels.cu @@ -114,9 +114,9 @@ __global__ void levels_image_kernel(float *image, float *rand, int batch, int w, size_t offset = id * h * w * 3; image += offset; - float r = image[x + w*(y + h*2)]; + float r = image[x + w*(y + h*0)]; float g = image[x + w*(y + h*1)]; - float b = image[x + w*(y + h*0)]; + float b = image[x + w*(y + h*2)]; float3 rgb = make_float3(r,g,b); if(train){ float3 hsv = rgb_to_hsv_kernel(rgb); @@ -124,9 +124,9 @@ __global__ void levels_image_kernel(float *image, float *rand, int batch, int w, hsv.z *= exposure; rgb = hsv_to_rgb_kernel(hsv); } - image[x + w*(y + h*2)] = rgb.x*scale + translate; + image[x + w*(y + h*0)] = rgb.x*scale + translate; image[x + w*(y + h*1)] = rgb.y*scale + translate; - image[x + w*(y + h*0)] = rgb.z*scale + translate; + image[x + w*(y + h*2)] = rgb.z*scale + translate; } __global__ void forward_crop_layer_kernel(float *input, float *rand, int size, int c, int h, int w, int crop_height, int crop_width, int train, int flip, float angle, float *output) diff --git a/src/darknet.c b/src/darknet.c index 779d620f..0679ffe8 100644 --- a/src/darknet.c +++ b/src/darknet.c @@ -73,6 +73,25 @@ void partial(char *cfgfile, char *weightfile, char *outfile, int max) save_weights(net, outfile); } +#include "convolutional_layer.h" +void rgbgr_filters(convolutional_layer l); +void rgbgr_net(char *cfgfile, char *weightfile, char *outfile) +{ + network net = parse_network_cfg(cfgfile); + if(weightfile){ + load_weights(&net, weightfile); + } + int i; + for(i = 0; i < net.n; ++i){ + layer l = net.layers[i]; + if(l.type == CONVOLUTIONAL){ + rgbgr_filters(l); + break; + } + } + save_weights(net, outfile); +} + void visualize(char *cfgfile, char *weightfile) { network net = parse_network_cfg(cfgfile); @@ -80,11 +99,14 @@ void visualize(char *cfgfile, char *weightfile) load_weights(&net, weightfile); } visualize_network(net); + #ifdef OPENCV cvWaitKey(0); + #endif } int main(int argc, char **argv) { + //test_resize("data/cat.png"); //test_box(); //test_convolutional_layer(); if(argc < 2){ @@ -114,6 +136,8 @@ int main(int argc, char **argv) run_captcha(argc, argv); } else if (0 == strcmp(argv[1], "change")){ change_rate(argv[2], atof(argv[3]), (argc > 4) ? atof(argv[4]) : 0); + } else if (0 == strcmp(argv[1], "rgbgr")){ + rgbgr_net(argv[2], argv[3], argv[4]); } else if (0 == strcmp(argv[1], "partial")){ partial(argv[2], argv[3], argv[4], atoi(argv[5])); } else if (0 == strcmp(argv[1], "visualize")){ diff --git a/src/data.c b/src/data.c index 425d216c..ad485920 100644 --- a/src/data.c +++ b/src/data.c @@ -69,7 +69,7 @@ matrix load_image_paths_gray(char **paths, int n, int w, int h) X.cols = 0; for(i = 0; i < n; ++i){ - image im = load_image(paths[i], w, h); + image im = load_image(paths[i], w, h, 1); X.vals[i] = im.data; X.cols = im.h*im.w*im.c; } diff --git a/src/detection.c b/src/detection.c index 29b67d9a..ac93efb3 100644 --- a/src/detection.c +++ b/src/detection.c @@ -6,31 +6,24 @@ char *class_names[] = {"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"}; -char *inet_class_names[] = {"bg", "accordion", "airplane", "ant", "antelope", "apple", "armadillo", "artichoke", "axe", "baby bed", "backpack", "bagel", "balance beam", "banana", "band aid", "banjo", "baseball", "basketball", "bathing cap", "beaker", "bear", "bee", "bell pepper", "bench", "bicycle", "binder", "bird", "bookshelf", "bow tie", "bow", "bowl", "brassiere", "burrito", "bus", "butterfly", "camel", "can opener", "car", "cart", "cattle", "cello", "centipede", "chain saw", "chair", "chime", "cocktail shaker", "coffee maker", "computer keyboard", "computer mouse", "corkscrew", "cream", "croquet ball", "crutch", "cucumber", "cup or mug", "diaper", "digital clock", "dishwasher", "dog", "domestic cat", "dragonfly", "drum", "dumbbell", "electric fan", "elephant", "face powder", "fig", "filing cabinet", "flower pot", "flute", "fox", "french horn", "frog", "frying pan", "giant panda", "goldfish", "golf ball", "golfcart", "guacamole", "guitar", "hair dryer", "hair spray", "hamburger", "hammer", "hamster", "harmonica", "harp", "hat with a wide brim", "head cabbage", "helmet", "hippopotamus", "horizontal bar", "horse", "hotdog", "iPod", "isopod", "jellyfish", "koala bear", "ladle", "ladybug", "lamp", "laptop", "lemon", "lion", "lipstick", "lizard", "lobster", "maillot", "maraca", "microphone", "microwave", "milk can", "miniskirt", "monkey", "motorcycle", "mushroom", "nail", "neck brace", "oboe", "orange", "otter", "pencil box", "pencil sharpener", "perfume", "person", "piano", "pineapple", "ping-pong ball", "pitcher", "pizza", "plastic bag", "plate rack", "pomegranate", "popsicle", "porcupine", "power drill", "pretzel", "printer", "puck", "punching bag", "purse", "rabbit", "racket", "ray", "red panda", "refrigerator", "remote control", "rubber eraser", "rugby ball", "ruler", "salt or pepper shaker", "saxophone", "scorpion", "screwdriver", "seal", "sheep", "ski", "skunk", "snail", "snake", "snowmobile", "snowplow", "soap dispenser", "soccer ball", "sofa", "spatula", "squirrel", "starfish", "stethoscope", "stove", "strainer", "strawberry", "stretcher", "sunglasses", "swimming trunks", "swine", "syringe", "table", "tape player", "tennis ball", "tick", "tie", "tiger", "toaster", "traffic light", "train", "trombone", "trumpet", "turtle", "tv or monitor", "unicycle", "vacuum", "violin", "volleyball", "waffle iron", "washer", "water bottle", "watercraft", "whale", "wine bottle", "zebra"}; -#define AMNT 3 -void draw_detection(image im, float *box, int side, char *label) + +void draw_detection(image im, float *box, int side, int bg, char *label) { int classes = 20; - int elems = 4+classes; + int elems = 4+classes+bg; int j; int r, c; for(r = 0; r < side; ++r){ for(c = 0; c < side; ++c){ - j = (r*side + c) * elems; - //printf("%d\n", j); - //printf("Prob: %f\n", box[j]); + j = (r*side + c) * elems + bg; int class = max_index(box+j, classes); - if(box[j+class] > .05){ - //int z; - //for(z = 0; z < classes; ++z) printf("%f %s\n", box[j+z], class_names[z]); + if(box[j+class] > .2){ printf("%f %s\n", box[j+class], class_names[class]); float red = get_color(0,class,classes); float green = get_color(1,class,classes); float blue = get_color(2,class,classes); - //float maxheight = distance_from_edge(r, side); - //float maxwidth = distance_from_edge(c, side); j += classes; float x = box[j+0]; float y = box[j+1]; @@ -40,7 +33,6 @@ void draw_detection(image im, float *box, int side, char *label) float h = box[j+3]; //*maxheight; h = h*h; w = w*w; - //printf("coords %f %f %f %f\n", x, y, w, h); int left = (x-w/2)*im.w; int right = (x+w/2)*im.w; @@ -52,184 +44,9 @@ void draw_detection(image im, float *box, int side, char *label) } } } - //printf("Done\n"); show_image(im, label); } -void draw_localization(image im, float *box) -{ - int classes = 20; - int class; - for(class = 0; class < classes; ++class){ - //int z; - //for(z = 0; z < classes; ++z) printf("%f %s\n", box[j+z], class_names[z]); - float red = get_color(0,class,classes); - float green = get_color(1,class,classes); - float blue = get_color(2,class,classes); - - int j = class*4; - float x = box[j+0]; - float y = box[j+1]; - float w = box[j+2]; //*maxheight; - float h = box[j+3]; //*maxwidth; - //printf("coords %f %f %f %f\n", x, y, w, h); - - int left = (x-w/2)*im.w; - int right = (x+w/2)*im.w; - int top = (y-h/2)*im.h; - int bot = (y+h/2)*im.h; - draw_box(im, left, top, right, bot, red, green, blue); - } - //printf("Done\n"); -} - -void train_localization(char *cfgfile, char *weightfile) -{ - srand(time(0)); - data_seed = time(0); - char *base = basecfg(cfgfile); - printf("%s\n", base); - float avg_loss = -1; - network net = parse_network_cfg(cfgfile); - if(weightfile){ - load_weights(&net, weightfile); - } - printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); - int imgs = 128; - int classes = 20; - int i = net.seen/imgs; - data train, buffer; - - char **paths; - list *plist; - plist = get_paths("/home/pjreddie/data/voc/loc.2012val.txt"); - paths = (char **)list_to_array(plist); - pthread_t load_thread = load_data_localization_thread(imgs, paths, plist->size, classes, net.w, net.h, &buffer); - clock_t time; - while(1){ - i += 1; - time=clock(); - pthread_join(load_thread, 0); - train = buffer; - load_thread = load_data_localization_thread(imgs, paths, plist->size, classes, net.w, net.h, &buffer); - - printf("Loaded: %lf seconds\n", sec(clock()-time)); - time=clock(); - float loss = train_network(net, train); - - //TODO - #ifdef GPU - float *out = get_network_output_gpu(net); - #else - float *out = get_network_output(net); - #endif - image im = float_to_image(net.w, net.h, 3, train.X.vals[127]); - image copy = copy_image(im); - draw_localization(copy, &(out[63*80])); - draw_localization(copy, train.y.vals[127]); - show_image(copy, "box"); - cvWaitKey(0); - free_image(copy); - - net.seen += imgs; - if (avg_loss < 0) avg_loss = loss; - avg_loss = avg_loss*.9 + loss*.1; - printf("%d: %f, %f avg, %lf seconds, %d images\n", i, loss, avg_loss, sec(clock()-time), i*imgs); - if(i%100==0){ - char buff[256]; - sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i); - save_weights(net, buff); - } - free_data(train); - } -} - -void train_detection_teststuff(char *cfgfile, char *weightfile) -{ - srand(time(0)); - data_seed = time(0); - int imgnet = 0; - char *base = basecfg(cfgfile); - printf("%s\n", base); - float avg_loss = -1; - network net = parse_network_cfg(cfgfile); - if(weightfile){ - load_weights(&net, weightfile); - } - detection_layer layer = get_network_detection_layer(net); - net.learning_rate = 0; - net.decay = 0; - printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); - int imgs = 128; - int i = net.seen/imgs; - data train, buffer; - - int classes = layer.classes; - int background = layer.background; - int side = sqrt(get_detection_layer_locations(layer)); - - char **paths; - list *plist; - if (imgnet){ - plist = get_paths("/home/pjreddie/data/imagenet/det.train.list"); - }else{ - plist = get_paths("/home/pjreddie/data/voc/val_2012.txt"); - //plist = get_paths("/home/pjreddie/data/voc/no_2007_test.txt"); - //plist = get_paths("/home/pjreddie/data/coco/trainval.txt"); - //plist = get_paths("/home/pjreddie/data/voc/all2007-2012.txt"); - } - paths = (char **)list_to_array(plist); - pthread_t load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer); - clock_t time; - cost_layer clayer = net.layers[net.n-1]; - while(1){ - i += 1; - time=clock(); - pthread_join(load_thread, 0); - train = buffer; - load_thread = load_data_detection_thread(imgs, paths, plist->size, classes, net.w, net.h, side, side, background, &buffer); - - /* - image im = float_to_image(net.w, net.h, 3, train.X.vals[114]); - image copy = copy_image(im); - draw_detection(copy, train.y.vals[114], 7); - free_image(copy); - */ - - int z; - int count = 0; - float sx, sy, sw, sh; - sx = sy = sw = sh = 0; - for(z = 0; z < clayer.batch*clayer.inputs; z += 24){ - if(clayer.delta[z+20]){ - ++count; - sx += fabs(clayer.delta[z+20])*64; - sy += fabs(clayer.delta[z+21])*64; - sw += fabs(clayer.delta[z+22])*448; - sh += fabs(clayer.delta[z+23])*448; - } - } - printf("Avg error: %f, %f, %f x %f\n", sx/count, sy/count, sw/count, sh/count); - - printf("Loaded: %lf seconds\n", sec(clock()-time)); - time=clock(); - float loss = train_network(net, train); - net.seen += imgs; - if (avg_loss < 0) avg_loss = loss; - avg_loss = avg_loss*.9 + loss*.1; - printf("%d: %f, %f avg, %lf seconds, %d images\n", i, loss, avg_loss, sec(clock()-time), i*imgs); - if(i == 100){ - //net.learning_rate *= 10; - } - if(i%100==0){ - char buff[256]; - sprintf(buff, "/home/pjreddie/imagenet_backup/%s_%d.weights",base, i); - save_weights(net, buff); - } - free_data(train); - } -} - void train_detection(char *cfgfile, char *weightfile) { srand(time(0)); @@ -249,7 +66,7 @@ void train_detection(char *cfgfile, char *weightfile) data train, buffer; int classes = layer.classes; - int background = layer.background; + int background = (layer.background || layer.objectness); int side = sqrt(get_detection_layer_locations(layer)); char **paths; @@ -301,7 +118,7 @@ void train_detection(char *cfgfile, char *weightfile) } } -void predict_detections(network net, data d, float threshold, int offset, int classes, int nuisance, int background, int num_boxes, int per_box) +void predict_detections(network net, data d, float threshold, int offset, int classes, int objectness, int background, int num_boxes, int per_box) { matrix pred = network_predict_data(net, d); int j, k, class; @@ -311,16 +128,16 @@ void predict_detections(network net, data d, float threshold, int offset, int cl int index = k/per_box; int row = index / num_boxes; int col = index % num_boxes; - if (nuisance) scale = 1.-pred.vals[j][k]; + if (objectness) scale = 1.-pred.vals[j][k]; for (class = 0; class < classes; ++class){ - int ci = k+classes+background+nuisance; + int ci = k+classes+(background || objectness); float x = (pred.vals[j][ci + 0] + col)/num_boxes; float y = (pred.vals[j][ci + 1] + row)/num_boxes; float w = pred.vals[j][ci + 2]; // distance_from_edge(row, num_boxes); float h = pred.vals[j][ci + 3]; // distance_from_edge(col, num_boxes); w = pow(w, 2); h = pow(h, 2); - float prob = scale*pred.vals[j][k+class+background+nuisance]; + float prob = scale*pred.vals[j][k+class+(background || objectness)]; if(prob < threshold) continue; printf("%d %d %f %f %f %f %f\n", offset + j, class, prob, x, y, w, h); } @@ -339,19 +156,15 @@ void validate_detection(char *cfgfile, char *weightfile) fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); srand(time(0)); - //list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt"); list *plist = get_paths("/home/pjreddie/data/voc/test.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/train.txt"); char **paths = (char **)list_to_array(plist); int classes = layer.classes; - int nuisance = layer.nuisance; - int background = (layer.background && !nuisance); + int objectness = layer.objectness; + int background = layer.background; int num_boxes = sqrt(get_detection_layer_locations(layer)); - int per_box = 4+classes+background+nuisance; + int per_box = 4+classes+(background || objectness); int num_output = num_boxes*num_boxes*per_box; int m = plist->size; @@ -372,9 +185,7 @@ void validate_detection(char *cfgfile, char *weightfile) thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t])); } - //clock_t time; for(i = nthreads; i <= splits; i += nthreads){ - //time=clock(); for(t = 0; t < nthreads; ++t){ pthread_join(thr[t], 0); val[t] = buf[t]; @@ -385,223 +196,22 @@ void validate_detection(char *cfgfile, char *weightfile) thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t])); } - //fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time)); fprintf(stderr, "%d\n", i); for(t = 0; t < nthreads; ++t){ - predict_detections(net, val[t], .001, (i-nthreads+t)*m/splits, classes, nuisance, background, num_boxes, per_box); + predict_detections(net, val[t], .001, (i-nthreads+t)*m/splits, classes, objectness, background, num_boxes, per_box); free_data(val[t]); } } fprintf(stderr, "Total Detection Time: %f Seconds\n", (double)(time(0) - start)); } -void do_mask(network net, data d, int offset, int classes, int nuisance, int background, int num_boxes, int per_box) -{ - matrix pred = network_predict_data(net, d); - int j, k; - for(j = 0; j < pred.rows; ++j){ - printf("%d ", offset + j); - for(k = 0; k < pred.cols; k += per_box){ - float scale = 1.-pred.vals[j][k]; - printf("%f ", scale); - } - printf("\n"); - } - free_matrix(pred); -} - -void mask_detection(char *cfgfile, char *weightfile) -{ - network net = parse_network_cfg(cfgfile); - if(weightfile){ - load_weights(&net, weightfile); - } - detection_layer layer = get_network_detection_layer(net); - fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); - srand(time(0)); - - list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/test.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/train.txt"); - char **paths = (char **)list_to_array(plist); - - int classes = layer.classes; - int nuisance = layer.nuisance; - int background = (layer.background && !nuisance); - int num_boxes = sqrt(get_detection_layer_locations(layer)); - - int per_box = 4+classes+background+nuisance; - int num_output = num_boxes*num_boxes*per_box; - - int m = plist->size; - int i = 0; - int splits = 100; - - int nthreads = 4; - int t; - data *val = calloc(nthreads, sizeof(data)); - data *buf = calloc(nthreads, sizeof(data)); - pthread_t *thr = calloc(nthreads, sizeof(data)); - for(t = 0; t < nthreads; ++t){ - int num = (i+1+t)*m/splits - (i+t)*m/splits; - char **part = paths+((i+t)*m/splits); - thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t])); - } - - clock_t time; - for(i = nthreads; i <= splits; i += nthreads){ - time=clock(); - for(t = 0; t < nthreads; ++t){ - pthread_join(thr[t], 0); - val[t] = buf[t]; - } - for(t = 0; t < nthreads && i < splits; ++t){ - int num = (i+1+t)*m/splits - (i+t)*m/splits; - char **part = paths+((i+t)*m/splits); - thr[t] = load_data_thread(part, num, 0, 0, num_output, net.w, net.h, &(buf[t])); - } - - fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time)); - for(t = 0; t < nthreads; ++t){ - do_mask(net, val[t], (i-nthreads+t)*m/splits, classes, nuisance, background, num_boxes, per_box); - free_data(val[t]); - } - time=clock(); - } -} - -void validate_detection_post(char *cfgfile, char *weightfile) -{ - network net = parse_network_cfg(cfgfile); - if(weightfile){ - load_weights(&net, weightfile); - } - set_batch_network(&net, 1); - - network post = parse_network_cfg("cfg/localize.cfg"); - load_weights(&post, "/home/pjreddie/imagenet_backup/localize_1000.weights"); - set_batch_network(&post, 1); - - detection_layer layer = get_network_detection_layer(net); - fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); - srand(time(0)); - - //list *plist = get_paths("/home/pjreddie/data/voc/test_2007.txt"); - list *plist = get_paths("/home/pjreddie/data/voc/val_2012.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/test.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/val.expanded.txt"); - //list *plist = get_paths("/home/pjreddie/data/voc/train.txt"); - char **paths = (char **)list_to_array(plist); - - int classes = layer.classes; - int nuisance = layer.nuisance; - int background = (layer.background && !nuisance); - int num_boxes = sqrt(get_detection_layer_locations(layer)); - - int per_box = 4+classes+background+nuisance; - - int m = plist->size; - int i = 0; - float threshold = .01; - - clock_t time = clock(); - for(i = 0; i < m; ++i){ - image im = load_image_color(paths[i], 0, 0); - if(i % 100 == 0) { - fprintf(stderr, "%d: Loaded: %lf seconds\n", i, sec(clock()-time)); - time = clock(); - } - image sized = resize_image(im, net.w, net.h); - float *out = network_predict(net, sized.data); - free_image(sized); - int k, class; - //show_image(im, "original"); - int num_output = num_boxes*num_boxes*per_box; - //image cp1 = copy_image(im); - //draw_detection(cp1, out, 7, "before"); - for(k = 0; k < num_output; k += per_box){ - float *post_out = 0; - float scale = 1.; - int index = k/per_box; - int row = index / num_boxes; - int col = index % num_boxes; - if (nuisance) scale = 1.-out[k]; - for (class = 0; class < classes; ++class){ - int ci = k+classes+background+nuisance; - float x = (out[ci + 0] + col)/num_boxes; - float y = (out[ci + 1] + row)/num_boxes; - float w = out[ci + 2]; //* distance_from_edge(row, num_boxes); - float h = out[ci + 3]; //* distance_from_edge(col, num_boxes); - w = w*w; - h = h*h; - float prob = scale*out[k+class+background+nuisance]; - if (prob >= threshold) { - x *= im.w; - y *= im.h; - w *= im.w; - h *= im.h; - w += 32; - h += 32; - int left = (x - w/2); - int top = (y - h/2); - int right = (x + w/2); - int bot = (y+h/2); - if (left < 0) left = 0; - if (right > im.w) right = im.w; - if (top < 0) top = 0; - if (bot > im.h) bot = im.h; - - image crop = crop_image(im, left, top, right-left, bot-top); - image resize = resize_image(crop, post.w, post.h); - if (!post_out){ - post_out = network_predict(post, resize.data); - } - /* - draw_localization(resize, post_out); - show_image(resize, "second"); - fprintf(stderr, "%s\n", class_names[class]); - cvWaitKey(0); - */ - int index = 4*class; - float px = post_out[index+0]; - float py = post_out[index+1]; - float pw = post_out[index+2]; - float ph = post_out[index+3]; - px = (px * crop.w + left) / im.w; - py = (py * crop.h + top) / im.h; - pw = (pw * crop.w) / im.w; - ph = (ph * crop.h) / im.h; - - out[ci + 0] = px*num_boxes - col; - out[ci + 1] = py*num_boxes - row; - out[ci + 2] = sqrt(pw); - out[ci + 3] = sqrt(ph); - /* - show_image(crop, "cropped"); - cvWaitKey(0); - */ - free_image(crop); - free_image(resize); - printf("%d %d %f %f %f %f %f\n", i, class, prob, px, py, pw, ph); - } - } - } - /* - image cp2 = copy_image(im); - draw_detection(cp2, out, 7, "after"); - cvWaitKey(0); - */ - } -} - void test_detection(char *cfgfile, char *weightfile) { network net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); } + detection_layer layer = get_network_detection_layer(net); int im_size = 448; set_batch_network(&net, 1); srand(2222222); @@ -617,10 +227,12 @@ void test_detection(char *cfgfile, char *weightfile) time=clock(); float *predictions = network_predict(net, X); printf("%s: Predicted in %f seconds.\n", filename, sec(clock()-time)); - draw_detection(im, predictions, 7, "YOLO#SWAG#BLAZEIT"); + draw_detection(im, predictions, 7, layer.background || layer.objectness, "predictions"); free_image(im); free_image(sized); + #ifdef OPENCV cvWaitKey(0); + #endif } } @@ -635,9 +247,5 @@ void run_detection(int argc, char **argv) char *weights = (argc > 4) ? argv[4] : 0; if(0==strcmp(argv[2], "test")) test_detection(cfg, weights); else if(0==strcmp(argv[2], "train")) train_detection(cfg, weights); - else if(0==strcmp(argv[2], "teststuff")) train_detection_teststuff(cfg, weights); - else if(0==strcmp(argv[2], "trainloc")) train_localization(cfg, weights); else if(0==strcmp(argv[2], "valid")) validate_detection(cfg, weights); - else if(0==strcmp(argv[2], "mask")) mask_detection(cfg, weights); - else if(0==strcmp(argv[2], "validpost")) validate_detection_post(cfg, weights); } diff --git a/src/detection_layer.c b/src/detection_layer.c index fcae7f31..c628f18b 100644 --- a/src/detection_layer.c +++ b/src/detection_layer.c @@ -10,15 +10,15 @@ int get_detection_layer_locations(detection_layer l) { - return l.inputs / (l.classes+l.coords+l.rescore+l.background); + return l.inputs / (l.classes+l.coords+l.joint+(l.background || l.objectness)); } int get_detection_layer_output_size(detection_layer l) { - return get_detection_layer_locations(l)*(l.background + l.classes + l.coords); + return get_detection_layer_locations(l)*((l.background || l.objectness) + l.classes + l.coords); } -detection_layer make_detection_layer(int batch, int inputs, int classes, int coords, int rescore, int background, int nuisance) +detection_layer make_detection_layer(int batch, int inputs, int classes, int coords, int joint, int rescore, int background, int objectness) { detection_layer l = {0}; l.type = DETECTION; @@ -28,7 +28,8 @@ detection_layer make_detection_layer(int batch, int inputs, int classes, int coo l.classes = classes; l.coords = coords; l.rescore = rescore; - l.nuisance = nuisance; + l.objectness = objectness; + l.joint = joint; l.cost = calloc(1, sizeof(float)); l.does_cost=1; l.background = background; @@ -47,28 +48,6 @@ detection_layer make_detection_layer(int batch, int inputs, int classes, int coo return l; } -void dark_zone(detection_layer l, int class, int start, network_state state) -{ - int index = start+l.background+class; - int size = l.classes+l.coords+l.background; - int location = (index%(7*7*size)) / size ; - int r = location / 7; - int c = location % 7; - int dr, dc; - for(dr = -1; dr <= 1; ++dr){ - for(dc = -1; dc <= 1; ++dc){ - if(!(dr || dc)) continue; - if((r + dr) > 6 || (r + dr) < 0) continue; - if((c + dc) > 6 || (c + dc) < 0) continue; - int di = (dr*7 + dc) * size; - if(state.truth[index+di]) continue; - l.output[index + di] = 0; - //if(!state.truth[start+di]) continue; - //l.output[start + di] = 1; - } - } -} - typedef struct{ float dx, dy, dw, dh; } dbox; @@ -258,24 +237,6 @@ void test_box() wiou = ((1-wiou)*(1-wiou) - iou)/(.00001); hiou = ((1-hiou)*(1-hiou) - iou)/(.00001); printf("manual %f %f %f %f\n", xiou, yiou, wiou, hiou); - /* - - while(count++ < 300){ - dbox d = diou(a, b); - printf("%f %f %f %f\n", a.x, a.y, a.w, a.h); - a.x += .1*d.dx; - a.w += .1*d.dw; - a.y += .1*d.dy; - a.h += .1*d.dh; - printf("inter: %f\n", box_intersection(a, b)); - printf("union: %f\n", box_union(a, b)); - printf("IOU: %f\n", box_iou(a, b)); - if(d.dx==0 && d.dw==0 && d.dy==0 && d.dh==0) { - printf("break!!!\n"); - break; - } - } - */ } dbox diou(box a, box b) @@ -308,10 +269,10 @@ void forward_detection_layer(const detection_layer l, network_state state) int locations = get_detection_layer_locations(l); int i,j; for(i = 0; i < l.batch*locations; ++i){ - int mask = (!state.truth || state.truth[out_i + l.background + l.classes + 2]); + int mask = (!state.truth || state.truth[out_i + (l.background || l.objectness) + l.classes + 2]); float scale = 1; - if(l.rescore) scale = state.input[in_i++]; - else if(l.nuisance){ + if(l.joint) scale = state.input[in_i++]; + else if(l.objectness){ l.output[out_i++] = 1-state.input[in_i++]; scale = mask; } @@ -320,7 +281,7 @@ void forward_detection_layer(const detection_layer l, network_state state) for(j = 0; j < l.classes; ++j){ l.output[out_i++] = scale*state.input[in_i++]; } - if(l.nuisance){ + if(l.objectness){ }else if(l.background){ softmax_array(l.output + out_i - l.classes-l.background, l.classes+l.background, l.output + out_i - l.classes-l.background); @@ -337,7 +298,7 @@ void forward_detection_layer(const detection_layer l, network_state state) int size = get_detection_layer_output_size(l) * l.batch; memset(l.delta, 0, size * sizeof(float)); for (i = 0; i < l.batch*locations; ++i) { - int classes = l.nuisance+l.classes; + int classes = l.objectness+l.classes; int offset = i*(classes+l.coords); for (j = offset; j < offset+classes; ++j) { *(l.cost) += pow(state.truth[j] - l.output[j], 2); @@ -372,7 +333,7 @@ void forward_detection_layer(const detection_layer l, network_state state) l.delta[j+1] = 4 * (state.truth[j+1] - l.output[j+1]); l.delta[j+2] = 4 * (state.truth[j+2] - l.output[j+2]); l.delta[j+3] = 4 * (state.truth[j+3] - l.output[j+3]); - if(0){ + if(l.rescore){ for (j = offset; j < offset+classes; ++j) { if(state.truth[j]) state.truth[j] = iou; l.delta[j] = state.truth[j] - l.output[j]; @@ -392,21 +353,21 @@ void backward_detection_layer(const detection_layer l, network_state state) for(i = 0; i < l.batch*locations; ++i){ float scale = 1; float latent_delta = 0; - if(l.rescore) scale = state.input[in_i++]; - else if (l.nuisance) state.delta[in_i++] = -l.delta[out_i++]; + if(l.joint) scale = state.input[in_i++]; + else if (l.objectness) state.delta[in_i++] = -l.delta[out_i++]; else if (l.background) state.delta[in_i++] = scale*l.delta[out_i++]; for(j = 0; j < l.classes; ++j){ latent_delta += state.input[in_i]*l.delta[out_i]; state.delta[in_i++] = scale*l.delta[out_i++]; } - if (l.nuisance) { + if (l.objectness) { }else if (l.background) gradient_array(l.output + out_i, l.coords, LOGISTIC, l.delta + out_i); for(j = 0; j < l.coords; ++j){ state.delta[in_i++] = l.delta[out_i++]; } - if(l.rescore) state.delta[in_i-l.coords-l.classes-l.rescore-l.background] = latent_delta; + if(l.joint) state.delta[in_i-l.coords-l.classes-l.joint] = latent_delta; } } diff --git a/src/detection_layer.h b/src/detection_layer.h index dfc5db97..38d96eec 100644 --- a/src/detection_layer.h +++ b/src/detection_layer.h @@ -6,7 +6,7 @@ typedef layer detection_layer; -detection_layer make_detection_layer(int batch, int inputs, int classes, int coords, int rescore, int background, int nuisance); +detection_layer make_detection_layer(int batch, int inputs, int classes, int coords, int joint, int rescore, int background, int objectness); void forward_detection_layer(const detection_layer l, network_state state); void backward_detection_layer(const detection_layer l, network_state state); int get_detection_layer_output_size(detection_layer l); diff --git a/src/image.c b/src/image.c index 948d3253..45911031 100644 --- a/src/image.c +++ b/src/image.c @@ -3,6 +3,11 @@ #include #include +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "stb_image_write.h" + int windows = 0; float colors[6][3] = { {1,0,1}, {0,0,1},{0,1,1},{0,1,0},{1,1,0},{1,0,0} }; @@ -159,10 +164,22 @@ image copy_image(image p) return copy; } -void show_image(image p, char *name) +void rgbgr_image(image im) +{ + int i; + for(i = 0; i < im.w*im.h; ++i){ + float swap = im.data[i]; + im.data[i] = im.data[i+im.w*im.h*2]; + im.data[i+im.w*im.h*2] = swap; + } +} + +#ifdef OPENCV +void show_image_cv(image p, char *name) { int x,y,k; image copy = copy_image(p); + rgbgr_image(copy); //normalize_image(copy); char buff[256]; @@ -197,8 +214,36 @@ void show_image(image p, char *name) cvShowImage(buff, disp); cvReleaseImage(&disp); } +#endif -void save_image(image p, char *name) +void show_image(image p, char *name) +{ + #ifdef OPENCV + show_image_cv(p, name); + #else + fprintf(stderr, "Not compiled with OpenCV, saving to %s.png instead\n", name); + save_image(p, name); + #endif +} + +void save_image(image im, char *name) +{ + char buff[256]; + //sprintf(buff, "%s (%d)", name, windows); + sprintf(buff, "%s.png", name); + unsigned char *data = calloc(im.w*im.h*im.c, sizeof(char)); + int i,k; + for(k = 0; k < im.c; ++k){ + for(i = 0; i < im.w*im.h; ++i){ + data[i*im.c+k] = (unsigned char) (255*im.data[i + k*im.w*im.h]); + } + } + int success = stbi_write_png(buff, im.w, im.h, im.c, data, im.w*im.c); + if(!success) fprintf(stderr, "Failed to write image %s\n", buff); +} + +/* +void save_image_cv(image p, char *name) { int x,y,k; image copy = copy_image(p); @@ -221,6 +266,7 @@ void save_image(image p, char *name) cvSaveImage(buff, disp,0); cvReleaseImage(&disp); } +*/ void show_image_layers(image p, char *name) { @@ -296,26 +342,6 @@ void scale_image(image m, float s) for(i = 0; i < m.h*m.w*m.c; ++i) m.data[i] *= s; } -image ipl_to_image(IplImage* src) -{ - unsigned char *data = (unsigned char *)src->imageData; - int h = src->height; - int w = src->width; - int c = src->nChannels; - int step = src->widthStep; - image out = make_image(w, h, c); - int i, j, k, count=0;; - - for(k= 0; k < c; ++k){ - for(i = 0; i < h; ++i){ - for(j = 0; j < w; ++j){ - out.data[count++] = data[i*step + j*c + k]/255.; - } - } - } - return out; -} - image crop_image(image im, int dx, int dy, int w, int h) { image cropped = make_image(w, h, im.c); @@ -355,9 +381,9 @@ void rgb_to_hsv(image im) float h, s, v; for(j = 0; j < im.h; ++j){ for(i = 0; i < im.w; ++i){ - r = get_pixel(im, i , j, 2); + r = get_pixel(im, i , j, 0); g = get_pixel(im, i , j, 1); - b = get_pixel(im, i , j, 0); + b = get_pixel(im, i , j, 2); float max = three_way_max(r,g,b); float min = three_way_min(r,g,b); float delta = max - min; @@ -417,9 +443,9 @@ void hsv_to_rgb(image im) r = v; g = p; b = q; } } - set_pixel(im, i, j, 2, r); + set_pixel(im, i, j, 0, r); set_pixel(im, i, j, 1, g); - set_pixel(im, i, j, 0, b); + set_pixel(im, i, j, 2, b); } } } @@ -429,7 +455,7 @@ image grayscale_image(image im) assert(im.c == 3); int i, j, k; image gray = make_image(im.w, im.h, im.c); - float scale[] = {0.114, 0.587, 0.299}; + float scale[] = {0.587, 0.299, 0.114}; for(k = 0; k < im.c; ++k){ for(j = 0; j < im.h; ++j){ for(i = 0; i < im.w; ++i){ @@ -497,21 +523,21 @@ void saturate_exposure_image(image im, float sat, float exposure) } /* -image saturate_image(image im, float sat) -{ - image gray = grayscale_image(im); - image blend = blend_image(im, gray, sat); - free_image(gray); - constrain_image(blend); - return blend; -} + image saturate_image(image im, float sat) + { + image gray = grayscale_image(im); + image blend = blend_image(im, gray, sat); + free_image(gray); + constrain_image(blend); + return blend; + } -image brightness_image(image im, float b) -{ - image bright = make_image(im.w, im.h, im.c); - return bright; -} -*/ + image brightness_image(image im, float b) + { + image bright = make_image(im.w, im.h, im.c); + return bright; + } + */ float billinear_interpolate(image im, float x, float y, int c) { @@ -550,7 +576,7 @@ image resize_image(image im, int w, int h) void test_resize(char *filename) { - image im = load_image(filename, 0,0); + image im = load_image(filename, 0,0, 3); image small = resize_image(im, 65, 63); image big = resize_image(im, 513, 512); image crop = crop_image(im, 50, 10, 100, 100); @@ -562,11 +588,12 @@ void test_resize(char *filename) image sat2 = copy_image(im); saturate_image(sat2, 2); - exposure_image(sat2, 2); image sat5 = copy_image(im); - saturate_image(sat5, 2); - exposure_image(sat5, .5); + saturate_image(sat5, 5); + + image sat10 = copy_image(im); + saturate_image(sat10, 10); image exp2 = copy_image(im); saturate_image(exp2, .5); @@ -580,8 +607,7 @@ void test_resize(char *filename) show_image(gray, "gray"); show_image(sat2, "sat2"); show_image(sat5, "sat5"); - show_image(exp2, "exp2"); - show_image(exp5, "exp5"); + show_image(sat10, "sat10"); /* show_image(small, "smaller"); show_image(big, "bigger"); @@ -591,44 +617,100 @@ void test_resize(char *filename) show_image(rot2, "rot2"); show_image(test, "test"); */ + #ifdef OPENCV cvWaitKey(0); + #endif +} + +#ifdef OPENCV +image ipl_to_image(IplImage* src) +{ + unsigned char *data = (unsigned char *)src->imageData; + int h = src->height; + int w = src->width; + int c = src->nChannels; + int step = src->widthStep; + image out = make_image(w, h, c); + int i, j, k, count=0;; + + for(k= 0; k < c; ++k){ + for(i = 0; i < h; ++i){ + for(j = 0; j < w; ++j){ + out.data[count++] = data[i*step + j*c + k]/255.; + } + } + } + return out; +} + +image load_image_cv(char *filename, int channels) +{ + IplImage* src = 0; + int flag = -1; + if (channels == 0) flag = -1; + else if (channels == 1) flag = 0; + else if (channels == 3) flag = 1; + else { + fprintf(stderr, "OpenCV can't force load with %d channels\n", channels); + } + + if( (src = cvLoadImage(filename, flag)) == 0 ) + { + printf("Cannot load file image %s\n", filename); + exit(0); + } + image out = ipl_to_image(src); + cvReleaseImage(&src); + rgbgr_image(out); + return out; +} + +#endif + + +image load_image_stb(char *filename, int channels) +{ + int w, h, c; + unsigned char *data = stbi_load(filename, &w, &h, &c, channels); + if (!data) { + printf("Cannot load file image %s\n", filename); + exit(0); + } + if(channels) c = channels; + int i,j,k; + image im = make_image(w, h, c); + for(k = 0; k < c; ++k){ + for(j = 0; j < h; ++j){ + for(i = 0; i < w; ++i){ + int dst_index = i + w*j + w*h*k; + int src_index = k + c*i + c*w*j; + im.data[dst_index] = (float)data[src_index]/255.; + } + } + } + free(data); + return im; +} + +image load_image(char *filename, int w, int h, int c) +{ + #ifdef OPENCV + image out = load_image_cv(filename, c); + #else + image out = load_image_stb(filename, c); + #endif + + if((h && w) && (h != out.h || w != out.w)){ + image resized = resize_image(out, w, h); + free_image(out); + out = resized; + } + return out; } image load_image_color(char *filename, int w, int h) { - IplImage* src = 0; - if( (src = cvLoadImage(filename, 1)) == 0 ) - { - printf("Cannot load file image %s\n", filename); - exit(0); - } - image out = ipl_to_image(src); - cvReleaseImage(&src); - if((h && w) && (h != out.h || w != out.w)){ - //printf("resize\n"); - image resized = resize_image(out, w, h); - free_image(out); - out = resized; - } - return out; -} - -image load_image(char *filename, int w, int h) -{ - IplImage* src = 0; - if( (src = cvLoadImage(filename,-1)) == 0 ) - { - printf("Cannot load file image %s\n", filename); - exit(0); - } - image out = ipl_to_image(src); - if((h && w) && (h != out.h || w != out.w)){ - image resized = resize_image(out, w, h); - free_image(out); - out = resized; - } - cvReleaseImage(&src); - return out; + return load_image(filename, w, h, 3); } image get_image_layer(image m, int l) diff --git a/src/image.h b/src/image.h index 0cffc7bb..af6682eb 100644 --- a/src/image.h +++ b/src/image.h @@ -2,8 +2,17 @@ #define IMAGE_H +#include +#include +#include +#include +#include + +#ifdef OPENCV #include "opencv2/highgui/highgui_c.h" #include "opencv2/imgproc/imgproc_c.h" +#endif + typedef struct { int h; int w; @@ -26,6 +35,7 @@ void saturate_image(image im, float sat); void exposure_image(image im, float sat); void saturate_exposure_image(image im, float sat, float exposure); void hsv_to_rgb(image im); +void rgbgr_image(image im); image collapse_image_layers(image source, int border); image collapse_images_horz(image *ims, int n); @@ -43,11 +53,9 @@ image make_image(int w, int h, int c); image make_empty_image(int w, int h, int c); image float_to_image(int w, int h, int c, float *data); image copy_image(image p); -image load_image(char *filename, int w, int h); +image load_image(char *filename, int w, int h, int c); image load_image_color(char *filename, int w, int h); -image ipl_to_image(IplImage* src); - float get_pixel(image m, int x, int y, int c); float get_pixel_extend(image m, int x, int y, int c); void set_pixel(image m, int x, int y, int c, float val); diff --git a/src/layer.h b/src/layer.h index 86e64a35..7255f499 100644 --- a/src/layer.h +++ b/src/layer.h @@ -44,8 +44,10 @@ typedef struct { int coords; int background; int rescore; - int nuisance; + int objectness; int does_cost; + int joint; + float probability; float scale; int *indexes; diff --git a/src/parser.c b/src/parser.c index 48567a11..c0db443d 100644 --- a/src/parser.c +++ b/src/parser.c @@ -164,10 +164,11 @@ detection_layer parse_detection(list *options, size_params params) { int coords = option_find_int(options, "coords", 1); int classes = option_find_int(options, "classes", 1); - int rescore = option_find_int(options, "rescore", 1); - int nuisance = option_find_int(options, "nuisance", 0); + int rescore = option_find_int(options, "rescore", 0); + int joint = option_find_int(options, "joint", 0); + int objectness = option_find_int(options, "objectness", 0); int background = option_find_int(options, "background", 1); - detection_layer layer = make_detection_layer(params.batch, params.inputs, classes, coords, rescore, background, nuisance); + detection_layer layer = make_detection_layer(params.batch, params.inputs, classes, coords, joint, rescore, background, objectness); option_unused(options); return layer; } diff --git a/src/stb_image.h b/src/stb_image.h new file mode 100644 index 00000000..d0fa9c21 --- /dev/null +++ b/src/stb_image.h @@ -0,0 +1,6437 @@ +/* stb_image - v2.06 - public domain image loader - http://nothings.org/stb_image.h + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) + PNG 1/2/4/8-bit-per-channel (16 bpc not supported) + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + + Revision 2.00 release notes: + + - Progressive JPEG is now supported. + + - PPM and PGM binary formats are now supported, thanks to Ken Miller. + + - x86 platforms now make use of SSE2 SIMD instructions for + JPEG decoding, and ARM platforms can use NEON SIMD if requested. + This work was done by Fabian "ryg" Giesen. SSE2 is used by + default, but NEON must be enabled explicitly; see docs. + + With other JPEG optimizations included in this version, we see + 2x speedup on a JPEG on an x86 machine, and a 1.5x speedup + on a JPEG on an ARM machine, relative to previous versions of this + library. The same results will not obtain for all JPGs and for all + x86/ARM machines. (Note that progressive JPEGs are significantly + slower to decode than regular JPEGs.) This doesn't mean that this + is the fastest JPEG decoder in the land; rather, it brings it + closer to parity with standard libraries. If you want the fastest + decode, look elsewhere. (See "Philosophy" section of docs below.) + + See final bullet items below for more info on SIMD. + + - Added STBI_MALLOC, STBI_REALLOC, and STBI_FREE macros for replacing + the memory allocator. Unlike other STBI libraries, these macros don't + support a context parameter, so if you need to pass a context in to + the allocator, you'll have to store it in a global or a thread-local + variable. + + - Split existing STBI_NO_HDR flag into two flags, STBI_NO_HDR and + STBI_NO_LINEAR. + STBI_NO_HDR: suppress implementation of .hdr reader format + STBI_NO_LINEAR: suppress high-dynamic-range light-linear float API + + - You can suppress implementation of any of the decoders to reduce + your code footprint by #defining one or more of the following + symbols before creating the implementation. + + STBI_NO_JPEG + STBI_NO_PNG + STBI_NO_BMP + STBI_NO_PSD + STBI_NO_TGA + STBI_NO_GIF + STBI_NO_HDR + STBI_NO_PIC + STBI_NO_PNM (.ppm and .pgm) + + - You can request *only* certain decoders and suppress all other ones + (this will be more forward-compatible, as addition of new decoders + doesn't require you to disable them explicitly): + + STBI_ONLY_JPEG + STBI_ONLY_PNG + STBI_ONLY_BMP + STBI_ONLY_PSD + STBI_ONLY_TGA + STBI_ONLY_GIF + STBI_ONLY_HDR + STBI_ONLY_PIC + STBI_ONLY_PNM (.ppm and .pgm) + + Note that you can define multiples of these, and you will get all + of them ("only x" and "only y" is interpreted to mean "only x&y"). + + - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still + want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB + + - Compilation of all SIMD code can be suppressed with + #define STBI_NO_SIMD + It should not be necessary to disable SIMD unless you have issues + compiling (e.g. using an x86 compiler which doesn't support SSE + intrinsics or that doesn't support the method used to detect + SSE2 support at run-time), and even those can be reported as + bugs so I can refine the built-in compile-time checking to be + smarter. + + - The old STBI_SIMD system which allowed installing a user-defined + IDCT etc. has been removed. If you need this, don't upgrade. My + assumption is that almost nobody was doing this, and those who + were will find the built-in SIMD more satisfactory anyway. + + - RGB values computed for JPEG images are slightly different from + previous versions of stb_image. (This is due to using less + integer precision in SIMD.) The C code has been adjusted so + that the same RGB values will be computed regardless of whether + SIMD support is available, so your app should always produce + consistent results. But these results are slightly different from + previous versions. (Specifically, about 3% of available YCbCr values + will compute different RGB results from pre-1.49 versions by +-1; + most of the deviating values are one smaller in the G channel.) + + - If you must produce consistent results with previous versions of + stb_image, #define STBI_JPEG_OLD and you will get the same results + you used to; however, you will not get the SIMD speedups for + the YCbCr-to-RGB conversion step (although you should still see + significant JPEG speedup from the other changes). + + Please note that STBI_JPEG_OLD is a temporary feature; it will be + removed in future versions of the library. It is only intended for + near-term back-compatibility use. + + + Latest revision history: + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) additional corruption checking + stbi_set_flip_vertically_on_load + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPEG, including x86 SSE2 & ARM NEON SIMD + progressive JPEG + PGM/PPM support + STBI_MALLOC,STBI_REALLOC,STBI_FREE + STBI_NO_*, STBI_ONLY_* + GIF bugfix + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support (both grayscale and paletted) + optimize PNG + fix bug in interlaced PNG with user-specified channel count + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Bug fixes & warning fixes + Sean Barrett (jpeg, png, bmp) Marc LeBlanc + Nicolas Schulz (hdr, psd) Christpher Lloyd + Jonathan Dummer (tga) Dave Moore + Jean-Marc Lienher (gif) Won Chun + Tom Seddon (pic) the Horde3D community + Thatcher Ulrich (psd) Janez Zemva + Ken Miller (pgm, ppm) Jonathan Blow + Laurent Gomila + Aruelien Pocheville + Extensions, features Ryamond Barbiero + Jetro Lauha (stbi_info) David Woo + Martin "SpartanJ" Golini (stbi_info) Martin Golini + James "moose2000" Brown (iPhone PNG) Roy Eltham + Ben "Disch" Wenger (io callbacks) Luke Graham + Omar Cornut (1/2/4-bit PNG) Thomas Ruf + Nicolas Guillemot (vertical flip) John Bartholomew + Ken Hamada + Optimizations & bugfixes Cort Stratton + Fabian "ryg" Giesen Blazej Dariusz Roszkowski + Arseny Kapoulkine Thibault Reuille + Paul Du Bois + Guillaume George + If your name should be here but Jerry Jansson + isn't, let Sean know. Hayaki Saito + Johan Duparc + Ronny Chevalier + Michal Cichon + Tero Hanninen + Sergio Gonzalez + Cass Everitt + Engin Manap + Martins Mozeiko + Joseph Thomson + Phil Jordan + +License: + This software is in the public domain. Where that dedication is not + recognized, you are granted a perpetual, irrevocable license to copy + and modify this file however you want. + +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 16-bit-per-channel PNG +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - no 1-bit BMP +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you said 0 +// stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *comp -- outputs # of image components in image file +// int req_comp -- if non-zero, # of image components requested in result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'req_comp' if req_comp is non-zero, or *comp otherwise. +// If req_comp is non-zero, *comp has the number of components that _would_ +// have been output otherwise. E.g. if you set req_comp to 4, you will always +// get RGBA output, but you can check *comp to see if it's trivially opaque +// because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *comp will be unchanged. The function stbi_failure_reason() +// can be queried for an extremely brief, end-user unfriendly explanation +// of why the load failed. Define STBI_NO_FAILURE_STRINGS to avoid +// compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly +// more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to maintain", +// and for best performance I may provide less-easy-to-use APIs that give higher +// performance, in addition to the easy to use ones. Nevertheless, it's important +// to keep in mind that from the standpoint of you, a client of this library, +// all you care about is #1 and #3, and stb libraries do not emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// make more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// The output of the JPEG decoder is slightly different from versions where +// SIMD support was introduced (that is, for versions before 1.49). The +// difference is only +-1 in the 8-bit RGB channels, and only on a small +// fraction of pixels. You can force the pre-1.49 behavior by defining +// STBI_JPEG_OLD, but this will disable some of the SIMD decoding path +// and hence cost some performance. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image now supports loading HDR images in general, and currently +// the Radiance .HDR file format, although the support is provided +// generically. You can still load any file through the existing interface; +// if you attempt to load an HDR file, it will be automatically remapped to +// LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; +// both of these constants can be reconfigured through this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// By default we convert iphone-formatted PNGs back to RGB, even though +// they are internally encoded differently. You can disable this conversion +// by by calling stbi_convert_iphone_png_to_rgb(0), in which case +// you will always just get the native iphone "format" through (which +// is BGR stored in RGB). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// + + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum +{ + STBI_default = 0, // only used for req_comp + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +typedef unsigned char stbi_uc; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct +{ + int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read + void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative + int (*eof) (void *user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *comp, int req_comp); +STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *comp, int req_comp); +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *comp, int req_comp); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); +// for stbi_load_from_file, file pointer is left pointing immediately after image +#endif + +#ifndef STBI_NO_LINEAR + STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *comp, int req_comp); + STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); + STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp); + + #ifndef STBI_NO_STDIO + STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *comp, int req_comp); + #endif +#endif + +#ifndef STBI_NO_HDR + STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); + STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif + +#ifndef STBI_NO_LINEAR + STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); + STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_HDR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename); +STBIDEF int stbi_is_hdr_from_file(FILE *f); +#endif // STBI_NO_STDIO + + +// get a VERY brief reason for failure +// NOT THREADSAFE +STBIDEF const char *stbi_failure_reason (void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free (void *retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); +STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); + +#endif + + + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); +STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + +STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); + + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ + || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ + || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ + || defined(STBI_ONLY_ZLIB) + #ifndef STBI_ONLY_JPEG + #define STBI_NO_JPEG + #endif + #ifndef STBI_ONLY_PNG + #define STBI_NO_PNG + #endif + #ifndef STBI_ONLY_BMP + #define STBI_NO_BMP + #endif + #ifndef STBI_ONLY_PSD + #define STBI_NO_PSD + #endif + #ifndef STBI_ONLY_TGA + #define STBI_NO_TGA + #endif + #ifndef STBI_ONLY_GIF + #define STBI_NO_GIF + #endif + #ifndef STBI_ONLY_HDR + #define STBI_NO_HDR + #endif + #ifndef STBI_ONLY_PIC + #define STBI_NO_PIC + #endif + #ifndef STBI_ONLY_PNM + #define STBI_NO_PNM + #endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + + +#include +#include // ptrdiff_t on osx +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + + +#ifndef _MSC_VER + #ifdef __cplusplus + #define stbi_inline inline + #else + #define stbi_inline + #endif +#else + #define stbi_inline __forceinline +#endif + + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL + #define stbi_lrot(x,y) _lrotl(x,y) +#else + #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y)))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && defined(STBI_REALLOC) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) +// ok +#else +#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p,sz) realloc(p,sz) +#define STBI_FREE(p) free(p) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) +// NOTE: not clear do we actually need this for the 64-bit path? +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// (but compiling with -msse2 allows the compiler to use SSE2 everywhere; +// this is just broken and gcc are jerks for not fixing it properly +// http://www.virtualdub.org/blog/pivot/entry.php?id=363 ) +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && defined(STBI__X86_TARGET) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info,1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +static int stbi__sse2_available() +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +static int stbi__sse2_available() +{ +#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later + // GCC 4.8+ has a nice way to do this + return __builtin_cpu_supports("sse2"); +#else + // portable way to do this, preferably without using GCC inline ASM? + // just bail for now. + return 0; +#endif +} +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +// assume GCC or Clang on ARM targets +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct +{ + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void *io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original; +} stbi__context; + + +static void stbi__refill_buffer(stbi__context *s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; + s->img_buffer_end = (stbi_uc *) buffer+len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void *user, char *data, int size) +{ + return (int) fread(data,1,size,(FILE*) user); +} + +static void stbi__stdio_skip(void *user, int n) +{ + fseek((FILE*) user, n, SEEK_CUR); +} + +static int stbi__stdio_eof(void *user) +{ + return feof((FILE*) user); +} + +static stbi_io_callbacks stbi__stdio_callbacks = +{ + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context *s, FILE *f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); +} + +//static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context *s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 bytes + s->img_buffer = s->img_buffer_original; +} + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context *s); +static stbi_uc *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context *s); +static stbi_uc *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context *s); +static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context *s); +static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s); +static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context *s); +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context *s); +static stbi_uc *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context *s); +static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context *s); +static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp); +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); +#endif + +// this is not threadsafe +static const char *stbi__g_failure_reason; + +STBIDEF const char *stbi_failure_reason(void) +{ + return stbi__g_failure_reason; +} + +static int stbi__err(const char *str) +{ + stbi__g_failure_reason = str; + return 0; +} + +static void *stbi__malloc(size_t size) +{ + return STBI_MALLOC(size); +} + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS + #define stbi__err(x,y) 0 +#elif defined(STBI_FAILURE_USERMSG) + #define stbi__err(x,y) stbi__err(y) +#else + #define stbi__err(x,y) stbi__err(x) +#endif + +#define stbi__errpf(x,y) ((float *) (stbi__err(x,y)?NULL:NULL)) +#define stbi__errpuc(x,y) ((unsigned char *) (stbi__err(x,y)?NULL:NULL)) + +STBIDEF void stbi_image_free(void *retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load = flag_true_if_should_flip; +} + +static unsigned char *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_PNG + if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_GIF + if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_PSD + if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_PIC + if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp); + #endif + #ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp); + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr = stbi__hdr_load(s, x,y,comp,req_comp); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } + #endif + + #ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s,x,y,comp,req_comp); + #endif + + return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); +} + +static unsigned char *stbi__load_flip(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result = stbi__load_main(s, x, y, comp, req_comp); + + if (stbi__vertically_flip_on_load && result != NULL) { + int w = *x, h = *y; + int depth = req_comp ? req_comp : *comp; + int row,col,z; + stbi_uc temp; + + // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once + for (row = 0; row < (h>>1); row++) { + for (col = 0; col < w; col++) { + for (z = 0; z < depth; z++) { + temp = result[(row * w + col) * depth + z]; + result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z]; + result[((h - row - 1) * w + col) * depth + z] = temp; + } + } + } + } + + return result; +} + +static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int w = *x, h = *y; + int depth = req_comp ? req_comp : *comp; + int row,col,z; + float temp; + + // @OPTIMIZE: use a bigger temp buffer and memcpy multiple pixels at once + for (row = 0; row < (h>>1); row++) { + for (col = 0; col < w; col++) { + for (z = 0; z < depth; z++) { + temp = result[(row * w + col) * depth + z]; + result[(row * w + col) * depth + z] = result[((h - row - 1) * w + col) * depth + z]; + result[((h - row - 1) * w + col) * depth + z] = temp; + } + } + } + } +} + + +#ifndef STBI_NO_STDIO + +static FILE *stbi__fopen(char const *filename, char const *mode) +{ + FILE *f; +#if defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f=0; +#else + f = fopen(filename, mode); +#endif + return f; +} + + +STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + unsigned char *result; + if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *result; + stbi__context s; + stbi__start_file(&s,f); + result = stbi__load_flip(&s,x,y,comp,req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} +#endif //!STBI_NO_STDIO + +STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__load_flip(&s,x,y,comp,req_comp); +} + +STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__load_flip(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_LINEAR +static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + unsigned char *data; + #ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp); + if (hdr_data) + stbi__float_postprocess(hdr_data,x,y,comp,req_comp); + return hdr_data; + } + #endif + data = stbi__load_flip(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); +} + +STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) +{ + float *result; + FILE *f = stbi__fopen(filename, "rb"); + if (!f) return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f,x,y,comp,req_comp); + fclose(f); + return result; +} + +STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) +{ + stbi__context s; + stbi__start_file(&s,f); + return stbi__loadf_main(&s,x,y,comp,req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__hdr_test(&s); + #else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; + #endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr (char const *filename) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result=0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE *f) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_file(&s,f); + return stbi__hdr_test(&s); + #else + return 0; + #endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) +{ + #ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); + return stbi__hdr_test(&s); + #else + return 0; + #endif +} + +static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; +static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; + +#ifndef STBI_NO_LINEAR +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } +STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } + + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum +{ + STBI__SCAN_load=0, + STBI__SCAN_type, + STBI__SCAN_header +}; + +static void stbi__refill_buffer(stbi__context *s) +{ + int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start+1; + *s->img_buffer = 0; + } else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context *s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +stbi_inline static int stbi__at_eof(stbi__context *s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} + +static void stbi__skip(stbi__context *s, int n) +{ + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} + +static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) +{ + if (s->io.read) { + int blen = (int) (s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); + res = (count == (n-blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer+n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } else + return 0; +} + +static int stbi__get16be(stbi__context *s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} + +static stbi__uint32 stbi__get32be(stbi__context *s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} + +static int stbi__get16le(stbi__context *s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} + +static stbi__uint32 stbi__get32le(stbi__context *s) +{ + stbi__uint32 z = stbi__get16le(s); + return z + (stbi__get16le(s) << 16); +} + +#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings + + +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); +} + +static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) +{ + int i,j; + unsigned char *good; + + if (req_comp == img_n) return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char *) stbi__malloc(req_comp * x * y); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j=0; j < (int) y; ++j) { + unsigned char *src = data + j * x * img_n ; + unsigned char *dest = good + j * x * req_comp; + + #define COMBO(a,b) ((a)*8+(b)) + #define CASE(a,b) case COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp components; + // avoid switch per pixel, so use switch per scanline and massive macros + switch (COMBO(img_n, req_comp)) { + CASE(1,2) dest[0]=src[0], dest[1]=255; break; + CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; + CASE(2,1) dest[0]=src[0]; break; + CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; + CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; + CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; + CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; + CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break; + CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; + CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; + CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + default: STBI_ASSERT(0); + } + #undef CASE + } + + STBI_FREE(data); + return good; +} + +#ifndef STBI_NO_LINEAR +static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) +{ + int i,k,n; + float *output = (float *) stbi__malloc(x * y * comp * sizeof(float)); + if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); + } + if (k < comp) output[i*comp + k] = data[i*comp+k]/255.0f; + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int) (x)) +static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) +{ + int i,k,n; + stbi_uc *output = (stbi_uc *) stbi__malloc(x * y * comp); + if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } + // compute number of non-alpha components + if (comp & 1) n = comp; else n = comp-1; + for (i=0; i < x*y; ++i) { + for (k=0; k < n; ++k) { + float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + if (k < comp) { + float z = data[i*comp+k] * 255 + 0.5f; + if (z < 0) z = 0; + if (z > 255) z = 255; + output[i*comp + k] = (stbi_uc) stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct +{ + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct +{ + stbi__context *s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi_uc dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + +// sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + +// definition of jpeg image component + struct + { + int id; + int h,v; + int tq; + int hd,ha; + int dc_pred; + + int x,y,w2,h2; + stbi_uc *data; + void *raw_data, *raw_coeff; + stbi_uc *linebuf; + short *coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + + int scan_n, order[4]; + int restart_interval, todo; + +// kernels + void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); + stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman *h, int *count) +{ + int i,j,k=0,code; + // build size list for each symbol (from JPEG spec) + for (i=0; i < 16; ++i) + for (j=0; j < count[i]; ++j) + h->size[k++] = (stbi_uc) (i+1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for(j=1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16) (code++); + if (code-1 >= (1 << j)) return stbi__err("bad code lengths","Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16-j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i=0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS-s); + int m = 1 << (FAST_BITS-s); + for (j=0; j < m; ++j) { + h->fast[c+j] = (stbi_uc) i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) +{ + int i; + for (i=0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) k += (-1 << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = (stbi__int16) ((k << 8) + (run << 4) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg *j) +{ + do { + int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + if (c != 0) { + j->marker = (unsigned char) c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) +{ + unsigned int temp; + int c,k; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k=FAST_BITS+1 ; ; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); + + sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB + k = stbi_lrot(j->code_buffer, n); + STBI_ASSERT(n >= 0 && n < (int) (sizeof(stbi__bmask)/sizeof(*stbi__bmask))); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & ~sgn); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) +{ + unsigned int k; + if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) +{ + unsigned int k; + if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static stbi_uc stbi__jpeg_dezigzag[64+15] = +{ + 0, 1, 8, 16, 9, 2, 3, 10, + 17, 24, 32, 25, 18, 11, 4, 5, + 12, 19, 26, 33, 40, 48, 41, 34, + 27, 20, 13, 6, 7, 14, 21, 28, + 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, + 58, 59, 52, 45, 38, 31, 39, 46, + 53, 60, 61, 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63 +}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi_uc *dequant) +{ + int diff,dc,k; + int t; + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data,0,64*sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) * dequant[zig]); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) break; // end block + k += 16; + } else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) +{ + int diff,dc; + int t; + if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data,0,64*sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + diff = t ? stbi__extend_receive(j, t) : 0; + + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short) (dc << j->succ_low); + } else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short) (1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) +{ + int k; + if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c,r,s; + if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) ((r >> 8) << shift); + } else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short) (stbi__extend_receive(j,s) << shift); + } + } + } while (k <= j->spec_end); + } else { + // refinement scan for these AC coefficients + + short bit = (short) (1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short *p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } else { + k = j->spec_start; + do { + int r,s; + int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh + if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } else { + if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short *p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit)==0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } else { + if (r == 0) { + *p = (short) s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int) x > 255) { + if (x < 0) return 0; + if (x > 255) return 255; + } + return (stbi_uc) x; +} + +#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) +#define stbi__fsh(x) ((x) << 12) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ + int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2+p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3*stbi__f2f(-1.847759065f); \ + t3 = p1 + p2*stbi__f2f( 0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2+p3); \ + t1 = stbi__fsh(p2-p3); \ + x0 = t0+t3; \ + x3 = t0-t3; \ + x1 = t1+t2; \ + x2 = t1-t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0+t2; \ + p4 = t1+t3; \ + p1 = t0+t3; \ + p2 = t1+t2; \ + p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ + t0 = t0*stbi__f2f( 0.298631336f); \ + t1 = t1*stbi__f2f( 2.053119869f); \ + t2 = t2*stbi__f2f( 3.072711026f); \ + t3 = t3*stbi__f2f( 1.501321110f); \ + p1 = p5 + p1*stbi__f2f(-0.899976223f); \ + p2 = p5 + p2*stbi__f2f(-2.562915447f); \ + p3 = p3*stbi__f2f(-1.961570560f); \ + p4 = p4*stbi__f2f(-0.390180644f); \ + t3 += p1+p4; \ + t2 += p2+p3; \ + t1 += p2+p4; \ + t0 += p1+p3; + +static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) +{ + int i,val[64],*v=val; + stbi_uc *o; + short *d = data; + + // columns + for (i=0; i < 8; ++i,++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 + && d[40]==0 && d[48]==0 && d[56]==0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] << 2; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; + } else { + STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; x1 += 512; x2 += 512; x3 += 512; + v[ 0] = (x0+t3) >> 10; + v[56] = (x0-t3) >> 10; + v[ 8] = (x1+t2) >> 10; + v[48] = (x1-t2) >> 10; + v[16] = (x2+t1) >> 10; + v[40] = (x2-t1) >> 10; + v[24] = (x3+t0) >> 10; + v[32] = (x3-t0) >> 10; + } + } + + for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128<<17); + x1 += 65536 + (128<<17); + x2 += 65536 + (128<<17); + x3 += 65536 + (128<<17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0+t3) >> 17); + o[7] = stbi__clamp((x0-t3) >> 17); + o[1] = stbi__clamp((x1+t2) >> 17); + o[6] = stbi__clamp((x1-t2) >> 17); + o[2] = stbi__clamp((x2+t1) >> 17); + o[5] = stbi__clamp((x2-t1) >> 17); + o[3] = stbi__clamp((x3+t0) >> 17); + o[4] = stbi__clamp((x3-t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + + // dot product constant: even elems=x, odd elems=y + #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) + + // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) + // out(1) = c1[even]*x + c1[odd]*y + #define dct_rot(out0,out1, x,y,c0,c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + + // out = in << 12 (in 16-bit, out 32-bit) + #define dct_widen(out, in) \ + __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + + // wide add + #define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + + // wide sub + #define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + + // butterfly a/b, add bias, then shift by "s" and pack + #define dct_bfly32o(out0, out1, a,b,bias,s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ + } + + // 8-bit interleave step (for transposes) + #define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + + // 16-bit interleave step (for transposes) + #define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + + #define dct_pass(bias,shift) \ + { \ + /* even part */ \ + dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ + dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0,row7, x0,x7,bias,shift); \ + dct_bfly32o(row1,row6, x1,x6,bias,shift); \ + dct_bfly32o(row2,row5, x2,x5,bias,shift); \ + dct_bfly32o(row3,row4, x3,x4,bias,shift); \ + } + + __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); + __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); + __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); + __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); + __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); + __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); + + // load + row0 = _mm_load_si128((const __m128i *) (data + 0*8)); + row1 = _mm_load_si128((const __m128i *) (data + 1*8)); + row2 = _mm_load_si128((const __m128i *) (data + 2*8)); + row3 = _mm_load_si128((const __m128i *) (data + 3*8)); + row4 = _mm_load_si128((const __m128i *) (data + 4*8)); + row5 = _mm_load_si128((const __m128i *) (data + 5*8)); + row6 = _mm_load_si128((const __m128i *) (data + 6*8)); + row7 = _mm_load_si128((const __m128i *) (data + 7*8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i *) out, p0); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p2); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p1); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; + _mm_storel_epi64((__m128i *) out, p3); out += out_stride; + _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ + dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ + dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ + dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ + } + + // load + row0 = vld1q_s16(data + 0*8); + row1 = vld1q_s16(data + 1*8); + row2 = vld1q_s16(data + 2*8); + row3 = vld1q_s16(data + 3*8); + row4 = vld1q_s16(data + 4*8); + row5 = vld1q_s16(data + 5*8); + row6 = vld1q_s16(data + 6*8); + row7 = vld1q_s16(data + 7*8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } +#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } +#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } +#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); out += out_stride; + vst1_u8(out, p1); out += out_stride; + vst1_u8(out, p2); out += out_stride; + vst1_u8(out, p3); out += out_stride; + vst1_u8(out, p4); out += out_stride; + vst1_u8(out, p5); out += out_stride; + vst1_u8(out, p6); out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg *j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } + x = stbi__get8(j->s); + if (x != 0xff) return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg *j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg *z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i,j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get corrupt data + // rather than no data + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + STBI_SIMD_ALIGN(short, data[64]); + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x)*8; + int y2 = (j*z->img_comp[n].v + y)*8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } else { + if (z->scan_n == 1) { + int i,j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a time, + // in trivial scanline order + // number of blocks to do just depends on how many actual "pixels" this + // component has, independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } else { // interleaved + int i,j,k,x,y; + for (j=0; j < z->img_mcu_y; ++j) { + for (i=0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in order + for (k=0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's just determined + // by the basic H and V specified for the component + for (y=0; y < z->img_comp[n].v; ++y) { + for (x=0; x < z->img_comp[n].h; ++x) { + int x2 = (i*z->img_comp[n].h + x); + int y2 = (j*z->img_comp[n].v + y); + short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved MCU, + // so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short *data, stbi_uc *dequant) +{ + int i; + for (i=0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg *z) +{ + if (z->progressive) { + // dequantize and idct the data + int i,j,n; + for (n=0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x+7) >> 3; + int h = (z->img_comp[n].y+7) >> 3; + for (j=0; j < h; ++j) { + for (i=0; i < w; ++i) { + short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg *z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker","Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s)-2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4; + int t = q & 15,i; + if (p != 0) return stbi__err("bad DQT type","Corrupt JPEG"); + if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); + for (i=0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = stbi__get8(z->s); + L -= 65; + } + return L==0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s)-2; + while (L > 0) { + stbi_uc *v; + int sizes[16],i,n=0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); + for (i=0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; + v = z->huff_dc[th].values; + } else { + if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; + v = z->huff_ac[th].values; + } + for (i=0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L==0; + } + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + stbi__skip(z->s, stbi__get16be(z->s)-2); + return 1; + } + return 0; +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg *z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); + if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); + for (i=0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) return 0; // no match + z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); + z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } else { + if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__process_frame_header(stbi__jpeg *z, int scan) +{ + stbi__context *s = z->s; + int Lf,p,i,q, h_max=1,v_max=1,c; + Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG + p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG + s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires + c = stbi__get8(s); + if (c != 3 && c != 1) return stbi__err("bad component count","Corrupt JPEG"); // JFIF requires + s->img_n = c; + for (i=0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); + + for (i=0; i < s->img_n; ++i) { + z->img_comp[i].id = stbi__get8(s); + if (z->img_comp[i].id != i+1) // JFIF requires + if (z->img_comp[i].id != i) // some version of jpegtran outputs non-JFIF-compliant files! + return stbi__err("bad component ID","Corrupt JPEG"); + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); + z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) return 1; + + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + + for (i=0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; + + for (i=0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].raw_data = stbi__malloc(z->img_comp[i].w2 * z->img_comp[i].h2+15); + + if (z->img_comp[i].raw_data == NULL) { + for(--i; i >= 0; --i) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].data = NULL; + } + return stbi__err("outofmem", "Out of memory"); + } + // align blocks for idct using mmx/sse + z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); + z->img_comp[i].linebuf = NULL; + if (z->progressive) { + z->img_comp[i].coeff_w = (z->img_comp[i].w2 + 7) >> 3; + z->img_comp[i].coeff_h = (z->img_comp[i].h2 + 7) >> 3; + z->img_comp[i].raw_coeff = STBI_MALLOC(z->img_comp[i].coeff_w * z->img_comp[i].coeff_h * 64 * sizeof(short) + 15); + z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); + } else { + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) +{ + int m; + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); + if (scan == STBI__SCAN_type) return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z,m)) return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll scan + if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) return 0; + return 1; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg *j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) return 0; + if (!stbi__parse_entropy_coded_data(j)) return 0; + if (j->marker == STBI__MARKER_none ) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } else if (x != 0) { + return stbi__err("junk before marker", "Corrupt JPEG"); + } + } + // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 + } + } else { + if (!stbi__process_marker(j, m)) return 0; + } + m = stbi__get_marker(j); + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) + +static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i=0; i < w; ++i) + out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc *input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0]*3 + input[1] + 2); + for (i=1; i < w-1; ++i) { + int n = 3*input[i]+2; + out[i*2+0] = stbi__div4(n+input[i-1]); + out[i*2+1] = stbi__div4(n+input[i+1]); + } + out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); + out[i*2+1] = input[w-1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) + +static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i,t0,t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + out[0] = stbi__div4(t1+2); + for (i=1; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i=0,t0,t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3*in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w-1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i *) (out + i*2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i*2, o); +#endif + + // "previous" value for next iter + t1 = 3*in_near[i+7] + in_far[i+7]; + } + + t0 = t1; + t1 = 3*in_near[i] + in_far[i]; + out[i*2] = stbi__div16(3*t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3*in_near[i]+in_far[i]; + out[i*2-1] = stbi__div16(3*t0 + t1 + 8); + out[i*2 ] = stbi__div16(3*t1 + t0 + 8); + } + out[w*2-1] = stbi__div4(t1+2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i,j; + STBI_NOTUSED(in_far); + for (i=0; i < w; ++i) + for (j=0; j < hs; ++j) + out[i*hs+j] = in_near[i]; + return out; +} + +#ifdef STBI_JPEG_OLD +// this is the same YCbCr-to-RGB calculation that stb_image has used +// historically before the algorithm changes in 1.49 +#define float2fixed(x) ((int) ((x) * 65536 + 0.5)) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 16) + 32768; // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr*float2fixed(1.40200f); + g = y_fixed - cr*float2fixed(0.71414f) - cb*float2fixed(0.34414f); + b = y_fixed + cb*float2fixed(1.77200f); + r >>= 16; + g >>= 16; + b >>= 16; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#else +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) +{ + int i; + for (i=0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* float2fixed(1.40200f); + g = y_fixed + (cr*-float2fixed(0.71414f)) + ((cb*-float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); + __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); + __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); + __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); + __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i+7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i *) (out + 0), o0); + _mm_storeu_si128((__m128i *) (out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there demand? + if (step == 4) { + // this is a fairly straightforward implementation and not super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); + int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); + int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); + int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); + + for (; i+7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8*4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1<<19); // rounding + int r,g,b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr* float2fixed(1.40200f); + g = y_fixed + cr*-float2fixed(0.71414f) + ((cb*-float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb* float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } + if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } + if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg *j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + #ifndef STBI_JPEG_OLD + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + #endif + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + #ifndef STBI_JPEG_OLD + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + #endif + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg *j) +{ + int i; + for (i=0; i < j->s->img_n; ++i) { + if (j->img_comp[i].raw_data) { + STBI_FREE(j->img_comp[i].raw_data); + j->img_comp[i].raw_data = NULL; + j->img_comp[i].data = NULL; + } + if (j->img_comp[i].raw_coeff) { + STBI_FREE(j->img_comp[i].raw_coeff); + j->img_comp[i].raw_coeff = 0; + j->img_comp[i].coeff = 0; + } + if (j->img_comp[i].linebuf) { + STBI_FREE(j->img_comp[i].linebuf); + j->img_comp[i].linebuf = NULL; + } + } +} + +typedef struct +{ + resample_row_func resample; + stbi_uc *line0,*line1; + int hs,vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) +{ + int n, decode_n; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n; + + if (z->s->img_n == 3 && n < 3) + decode_n = 1; + else + decode_n = z->s->img_n; + + // resample and color-convert + { + int k; + unsigned int i,j; + stbi_uc *output; + stbi_uc *coutput[4]; + + stbi__resample res_comp[4]; + + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs-1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; + else r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc *) stbi__malloc(n * z->s->img_x * z->s->img_y + 1); + if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } + + // now go ahead and resample + for (j=0; j < z->s->img_y; ++j) { + stbi_uc *out = output + n * z->s->img_x * j; + for (k=0; k < decode_n; ++k) { + stbi__resample *r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample(z->img_comp[k].linebuf, + y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, + r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc *y = coutput[0]; + if (z->s->img_n == 3) { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); + } else + for (i=0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } else { + stbi_uc *y = coutput[0]; + if (n == 1) + for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; + else + for (i=0; i < z->s->img_x; ++i) *out++ = y[i], *out++ = 255; + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) *comp = z->s->img_n; // report original components, not output + return output; + } +} + +static unsigned char *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__jpeg j; + j.s = s; + stbi__setup_jpeg(&j); + return load_jpeg_image(&j, x,y,comp,req_comp); +} + +static int stbi__jpeg_test(stbi__context *s) +{ + int r; + stbi__jpeg j; + j.s = s; + stbi__setup_jpeg(&j); + r = stbi__decode_jpeg_header(&j, STBI__SCAN_type); + stbi__rewind(s); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind( j->s ); + return 0; + } + if (x) *x = j->s->img_x; + if (y) *y = j->s->img_y; + if (comp) *comp = j->s->img_n; + return 1; +} + +static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__jpeg j; + j.s = s; + return stbi__jpeg_info_raw(&j, x, y, comp); +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct +{ + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[288]; + stbi__uint16 value[288]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16-bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman *z, stbi_uc *sizelist, int num) +{ + int i,k=0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i=0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i=1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i=1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16) code; + z->firstsymbol[i] = (stbi__uint16) k; + code = (code + sizes[i]); + if (sizes[i]) + if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); + z->maxcode[i] = code << (16-i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i=0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); + z->size [c] = (stbi_uc ) s; + z->value[c] = (stbi__uint16) i; + if (s <= STBI__ZFAST_BITS) { + int k = stbi__bit_reverse(next_code[s],s); + while (k < (1 << STBI__ZFAST_BITS)) { + z->fast[k] = fastv; + k += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct +{ + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char *zout; + char *zout_start; + char *zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) +{ + if (z->zbuffer >= z->zbuffer_end) return 0; + return *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf *z) +{ + do { + STBI_ASSERT(z->code_buffer < (1U << z->num_bits)); + z->code_buffer |= stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) +{ + unsigned int k; + if (z->num_bits < n) stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s,k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s=STBI__ZFAST_BITS+1; ; ++s) + if (k < z->maxcode[s]) + break; + if (s == 16) return -1; // invalid code! + // code size is s, so: + b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; + STBI_ASSERT(z->size[b] == s); + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) +{ + int b,s; + if (a->num_bits < 16) stbi__fill_bits(a); + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes +{ + char *q; + int cur, limit; + z->zout = zout; + if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); + cur = (int) (z->zout - z->zout_start); + limit = (int) (z->zout_end - z->zout_start); + while (cur + n > limit) + limit *= 2; + q = (char *) STBI_REALLOC(z->zout_start, limit); + if (q == NULL) return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static int stbi__zlength_base[31] = { + 3,4,5,6,7,8,9,10,11,13, + 15,17,19,23,27,31,35,43,51,59, + 67,83,99,115,131,163,195,227,258,0,0 }; + +static int stbi__zlength_extra[31]= +{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + +static int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, +257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + +static int stbi__zdist_extra[32] = +{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +static int stbi__parse_huffman_block(stbi__zbuf *a) +{ + char *zout = a->zout; + for(;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) return 0; + zout = a->zout; + } + *zout++ = (char) z; + } else { + stbi_uc *p; + int len,dist; + if (z == 256) { + a->zout = zout; + return 1; + } + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) return 0; + zout = a->zout; + } + p = (stbi_uc *) (zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { do *zout++ = v; while (--len); } + } else { + if (len) { do *zout++ = *p++; while (--len); } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf *a) +{ + static stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286+32+137];//padding for maximum single op + stbi_uc codelength_sizes[19]; + int i,n; + + int hlit = stbi__zreceive(a,5) + 257; + int hdist = stbi__zreceive(a,5) + 1; + int hclen = stbi__zreceive(a,4) + 4; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i=0; i < hclen; ++i) { + int s = stbi__zreceive(a,3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; + + n = 0; + while (n < hlit + hdist) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc) c; + else if (c == 16) { + c = stbi__zreceive(a,2)+3; + memset(lencodes+n, lencodes[n-1], c); + n += c; + } else if (c == 17) { + c = stbi__zreceive(a,3)+3; + memset(lencodes+n, 0, c); + n += c; + } else { + STBI_ASSERT(c == 18); + c = stbi__zreceive(a,7)+11; + memset(lencodes+n, 0, c); + n += c; + } + } + if (n != hlit+hdist) return stbi__err("bad codelengths","Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; + return 1; +} + +static int stbi__parse_uncomperssed_block(stbi__zbuf *a) +{ + stbi_uc header[4]; + int len,nlen,k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + STBI_ASSERT(a->num_bits == 0); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf *a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec + if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +// @TODO: should statically initialize these for optimal thread safety +static stbi_uc stbi__zdefault_length[288], stbi__zdefault_distance[32]; +static void stbi__init_zdefaults(void) +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} + +static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a,1); + type = stbi__zreceive(a,2); + if (type == 0) { + if (!stbi__parse_uncomperssed_block(a)) return 0; + } else if (type == 3) { + return 0; + } else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zdefault_distance[31]) stbi__init_zdefaults(); + if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , 288)) return 0; + if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; + } else { + if (!stbi__compute_huffman_codes(a)) return 0; + } + if (!stbi__parse_huffman_block(a)) return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(initial_size); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int) (a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) +{ + stbi__zbuf a; + char *p = (char *) stbi__malloc(16384); + if (p == NULL) return NULL; + a.zbuffer = (stbi_uc *) buffer; + a.zbuffer_end = (stbi_uc *) buffer+len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) *outlen = (int) (a.zout - a.zout_start); + return a.zout_start; + } else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc *) ibuffer; + a.zbuffer_end = (stbi_uc *) ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int) (a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct +{ + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context *s) +{ + static stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; + int i; + for (i=0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); + return 1; +} + +typedef struct +{ + stbi__context *s; + stbi_uc *idata, *expanded, *out; +} stbi__png; + + +enum { + STBI__F_none=0, + STBI__F_sub=1, + STBI__F_up=2, + STBI__F_avg=3, + STBI__F_paeth=4, + // synthetic filters used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = +{ + STBI__F_none, + STBI__F_sub, + STBI__F_none, + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p-a); + int pb = abs(p-b); + int pc = abs(p-c); + if (pa <= pb && pa <= pc) return a; + if (pb <= pc) return b; + return c; +} + +static stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) +{ + stbi__context *s = a->s; + stbi__uint32 i,j,stride = x*out_n; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); + a->out = (stbi_uc *) stbi__malloc(x * y * out_n); // extra bytes to write off the end into + if (!a->out) return stbi__err("outofmem", "Out of memory"); + + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + if (s->img_x == x && s->img_y == y) { + if (raw_len != img_len) return stbi__err("not enough pixels","Corrupt PNG"); + } else { // interlaced: + if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + } + + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *prior = cur - stride; + int filter = *raw++; + int filter_bytes = img_n; + int width = x; + if (filter > 4) + return stbi__err("invalid filter","Corrupt PNG"); + + if (depth < 8) { + STBI_ASSERT(img_width_bytes <= x); + cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + + // if first row, use special filter that doesn't sample previous row + if (j == 0) filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k=0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none : cur[k] = raw[k]; break; + case STBI__F_sub : cur[k] = raw[k]; break; + case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; + case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; + case STBI__F_avg_first : cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1)*img_n; + #define CASE(f) \ + case f: \ + for (k=0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: memcpy(cur, raw, nk); break; + CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break; + CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break; + CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break; + CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break; + CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break; + } + #undef CASE + raw += nk; + } else { + STBI_ASSERT(img_n+1 == out_n); + #define CASE(f) \ + case f: \ + for (i=x-1; i >= 1; --i, cur[img_n]=255,raw+=img_n,cur+=out_n,prior+=out_n) \ + for (k=0; k < img_n; ++k) + switch (filter) { + CASE(STBI__F_none) cur[k] = raw[k]; break; + CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-out_n]); break; + CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-out_n])>>1)); break; + CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],prior[k],prior[k-out_n])); break; + CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-out_n] >> 1)); break; + CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-out_n],0,0)); break; + } + #undef CASE + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j=0; j < y; ++j) { + stbi_uc *cur = a->out + stride*j; + stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit + // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than desired. + // we can allocate enough data that this never writes out of memory, but it + // could also overwrite the next scanline. can it overwrite non-empty data + // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. + // so we need to explicitly clamp the final ones + + if (depth == 4) { + for (k=x*img_n; k >= 2; k-=2, ++in) { + *cur++ = scale * ((*in >> 4) ); + *cur++ = scale * ((*in ) & 0x0f); + } + if (k > 0) *cur++ = scale * ((*in >> 4) ); + } else if (depth == 2) { + for (k=x*img_n; k >= 4; k-=4, ++in) { + *cur++ = scale * ((*in >> 6) ); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in ) & 0x03); + } + if (k > 0) *cur++ = scale * ((*in >> 6) ); + if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); + } else if (depth == 1) { + for (k=x*img_n; k >= 8; k-=8, ++in) { + *cur++ = scale * ((*in >> 7) ); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in ) & 0x01); + } + if (k > 0) *cur++ = scale * ((*in >> 7) ); + if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + // insert alpha = 255 + stbi_uc *cur = a->out + stride*j; + int i; + if (img_n == 1) { + for (i=x-1; i >= 0; --i) { + cur[i*2+1] = 255; + cur[i*2+0] = cur[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i=x-1; i >= 0; --i) { + cur[i*4+3] = 255; + cur[i*4+2] = cur[i*3+2]; + cur[i*4+1] = cur[i*3+1]; + cur[i*4+0] = cur[i*3+0]; + } + } + } + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) +{ + stbi_uc *final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); + + // de-interlacing + final = (stbi_uc *) stbi__malloc(a->s->img_x * a->s->img_y * out_n); + for (p=0; p < 7; ++p) { + int xorig[] = { 0,4,0,2,0,1,0 }; + int yorig[] = { 0,0,4,0,2,0,1 }; + int xspc[] = { 8,8,4,4,2,2,1 }; + int yspc[] = { 8,8,8,4,4,2,2 }; + int i,j,x,y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j=0; j < y; ++j) { + for (i=0; i < x; ++i) { + int out_y = j*yspc[p]+yorig[p]; + int out_x = i*xspc[p]+xorig[p]; + memcpy(final + out_y*a->s->img_x*out_n + out_x*out_n, + a->out + (j*x+i)*out_n, out_n); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i=0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } else { + for (i=0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc *) stbi__malloc(pixel_count * pal_img_n); + if (p == NULL) return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p += 3; + } + } else { + for (i=0; i < pixel_count; ++i) { + int n = orig[i]*4; + p[0] = palette[n ]; + p[1] = palette[n+1]; + p[2] = palette[n+2]; + p[3] = palette[n+3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load = 0; +static int stbi__de_iphone_flag = 0; + +STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag = flag_true_if_should_convert; +} + +static void stbi__de_iphone(stbi__png *z) +{ + stbi__context *s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc *p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i=0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + p[0] = p[2] * 255 / a; + p[1] = p[1] * 255 / a; + p[2] = t * 255 / a; + } else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } else { + // convert bgr to rgb + for (i=0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a,b,c,d) (((a) << 24) + ((b) << 16) + ((c) << 8) + (d)) + +static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n=0; + stbi_uc has_trans=0, tc[3]; + stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; + int first=1,k,interlace=0, color=0, depth=0, is_iphone=0; + stbi__context *s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) return 0; + + if (scan == STBI__SCAN_type) return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C','g','B','I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I','H','D','R'): { + int comp,filter; + if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); + first = 0; + if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); + s->img_x = stbi__get32be(s); if (s->img_x > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); + s->img_y = stbi__get32be(s); if (s->img_y > (1 << 24)) return stbi__err("too large","Very large image (corrupt?)"); + depth = stbi__get8(s); if (depth != 1 && depth != 2 && depth != 4 && depth != 8) return stbi__err("1/2/4/8-bit only","PNG not supported: 1/2/4/8-bit only"); + color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); + if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); + comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); + filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); + interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); + if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) return 1; + } else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case STBI__PNG_TYPE('P','L','T','E'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); + for (i=0; i < pal_len; ++i) { + palette[i*4+0] = stbi__get8(s); + palette[i*4+1] = stbi__get8(s); + palette[i*4+2] = stbi__get8(s); + palette[i*4+3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t','R','N','S'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } + if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); + if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); + pal_img_n = 4; + for (i=0; i < c.length; ++i) + palette[i*4+3] = stbi__get8(s); + } else { + if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); + if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); + has_trans = 1; + for (k=0; k < s->img_n; ++k) + tc[k] = (stbi_uc) (stbi__get16be(s) & 255) * stbi__depth_scale_table[depth]; // non 8-bit images will be larger + } + break; + } + + case STBI__PNG_TYPE('I','D','A','T'): { + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); + if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + stbi_uc *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + p = (stbi_uc *) STBI_REALLOC(z->idata, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I','E','N','D'): { + stbi__uint32 raw_len, bpl; + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = (s->img_x * depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); + if (z->expanded == NULL) return 0; // zlib should set error + STBI_FREE(z->idata); z->idata = NULL; + if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n+1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, depth, color, interlace)) return 0; + if (has_trans) + if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } + STBI_FREE(z->expanded); z->expanded = NULL; + return 1; + } + + default: + // if critical, fail + if (first) return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + #ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); + #endif + return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static unsigned char *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp) +{ + unsigned char *result=NULL; + if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + result = stbi__convert_format(result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) *n = p->s->img_out_n; + } + STBI_FREE(p->out); p->out = NULL; + STBI_FREE(p->expanded); p->expanded = NULL; + STBI_FREE(p->idata); p->idata = NULL; + + return result; +} + +static unsigned char *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x,y,comp,req_comp); +} + +static int stbi__png_test(stbi__context *s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind( p->s ); + return 0; + } + if (x) *x = p->s->img_x; + if (y) *y = p->s->img_y; + if (comp) *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context *s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') return 0; + if (stbi__get8(s) != 'M') return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context *s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n=0; + if (z == 0) return -1; + if (z >= 0x10000) n += 16, z >>= 16; + if (z >= 0x00100) n += 8, z >>= 8; + if (z >= 0x00010) n += 4, z >>= 4; + if (z >= 0x00004) n += 2, z >>= 2; + if (z >= 0x00002) n += 1, z >>= 1; + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +static int stbi__shiftsigned(int v, int shift, int bits) +{ + int result; + int z=0; + + if (shift < 0) v <<= -shift; + else v >>= shift; + result = v; + + z = bits; + while (z < 8) { + result += v >> z; + z += bits; + } + return result; +} + +static stbi_uc *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *out; + unsigned int mr=0,mg=0,mb=0,ma=0, fake_a=0; + stbi_uc pal[256][4]; + int psize=0,i,j,compress=0,width; + int bpp, flip_vertically, pad, target, offset, hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + offset = stbi__get32le(s); + hsz = stbi__get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); + bpp = stbi__get16le(s); + if (bpp == 1) return stbi__errpuc("monochrome", "BMP type not supported: 1-bit"); + flip_vertically = ((int) s->img_y) > 0; + s->img_y = abs((int) s->img_y); + if (hsz == 12) { + if (bpp < 24) + psize = (offset - 14 - 24) / 3; + } else { + compress = stbi__get32le(s); + if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (bpp == 16 || bpp == 32) { + mr = mg = mb = 0; + if (compress == 0) { + if (bpp == 32) { + mr = 0xffu << 16; + mg = 0xffu << 8; + mb = 0xffu << 0; + ma = 0xffu << 24; + fake_a = 1; // @TODO: check for cases like alpha value is all 0 and switch it to 255 + STBI_NOTUSED(fake_a); + } else { + mr = 31u << 10; + mg = 31u << 5; + mb = 31u << 0; + } + } else if (compress == 3) { + mr = stbi__get32le(s); + mg = stbi__get32le(s); + mb = stbi__get32le(s); + // not documented, but generated by photoshop and handled by mspaint + if (mr == mg && mg == mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } else { + STBI_ASSERT(hsz == 108 || hsz == 124); + mr = stbi__get32le(s); + mg = stbi__get32le(s); + mb = stbi__get32le(s); + ma = stbi__get32le(s); + stbi__get32le(s); // discard color space + for (i=0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + if (bpp < 16) + psize = (offset - 14 - hsz) >> 2; + } + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + out = (stbi_uc *) stbi__malloc(target * s->img_x * s->img_y); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + if (bpp < 16) { + int z=0; + if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } + for (i=0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (hsz != 12) stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, offset - 14 - hsz - psize * (hsz == 12 ? 3 : 4)); + if (bpp == 4) width = (s->img_x + 1) >> 1; + else if (bpp == 8) width = s->img_x; + else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } + pad = (-width)&3; + for (j=0; j < (int) s->img_y; ++j) { + for (i=0; i < (int) s->img_x; i += 2) { + int v=stbi__get8(s),v2=0; + if (bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + if (i+1 == (int) s->img_x) break; + v = (bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) out[z++] = 255; + } + stbi__skip(s, pad); + } + } else { + int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; + int z = 0; + int easy=0; + stbi__skip(s, offset - 14 - hsz); + if (bpp == 24) width = 3 * s->img_x; + else if (bpp == 16) width = 2*s->img_x; + else /* bpp = 32 and pad = 0 */ width=0; + pad = (-width) & 3; + if (bpp == 24) { + easy = 1; + } else if (bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); + } + for (j=0; j < (int) s->img_y; ++j) { + if (easy) { + for (i=0; i < (int) s->img_x; ++i) { + unsigned char a; + out[z+2] = stbi__get8(s); + out[z+1] = stbi__get8(s); + out[z+0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + if (target == 4) out[z++] = a; + } + } else { + for (i=0; i < (int) s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); + int a; + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + if (target == 4) out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + if (flip_vertically) { + stbi_uc t; + for (j=0; j < (int) s->img_y>>1; ++j) { + stbi_uc *p1 = out + j *s->img_x*target; + stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; + for (i=0; i < (int) s->img_x*target; ++i) { + t = p1[i], p1[i] = p2[i], p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) +{ + int tga_w, tga_h, tga_comp; + int sz; + stbi__get8(s); // discard Offset + sz = stbi__get8(s); // color type + if( sz > 1 ) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + sz = stbi__get8(s); // image type + // only RGB or grey allowed, +/- RLE + if ((sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11)) return 0; + stbi__skip(s,9); + tga_w = stbi__get16le(s); + if( tga_w < 1 ) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if( tga_h < 1 ) { + stbi__rewind(s); + return 0; // test height + } + sz = stbi__get8(s); // bits per pixel + // only RGB or RGBA or grey allowed + if ((sz != 8) && (sz != 16) && (sz != 24) && (sz != 32)) { + stbi__rewind(s); + return 0; + } + tga_comp = sz; + if (x) *x = tga_w; + if (y) *y = tga_h; + if (comp) *comp = tga_comp / 8; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context *s) +{ + int res; + int sz; + stbi__get8(s); // discard Offset + sz = stbi__get8(s); // color type + if ( sz > 1 ) return 0; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if ( (sz != 1) && (sz != 2) && (sz != 3) && (sz != 9) && (sz != 10) && (sz != 11) ) return 0; // only RGB or grey allowed, +/- RLE + stbi__get16be(s); // discard palette start + stbi__get16be(s); // discard palette length + stbi__get8(s); // discard bits per palette color entry + stbi__get16be(s); // discard x origin + stbi__get16be(s); // discard y origin + if ( stbi__get16be(s) < 1 ) return 0; // test width + if ( stbi__get16be(s) < 1 ) return 0; // test height + sz = stbi__get8(s); // bits per pixel + if ( (sz != 8) && (sz != 16) && (sz != 24) && (sz != 32) ) + res = 0; + else + res = 1; + stbi__rewind(s); + return res; +} + +static stbi_uc *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp = tga_bits_per_pixel / 8; + int tga_inverted = stbi__get8(s); + // image data + unsigned char *tga_data; + unsigned char *tga_palette = NULL; + int i, j; + unsigned char raw_data[4]; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + + // do a tiny bit of precessing + if ( tga_image_type >= 8 ) + { + tga_image_type -= 8; + tga_is_RLE = 1; + } + /* int tga_alpha_bits = tga_inverted & 15; */ + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // error check + if ( //(tga_indexed) || + (tga_width < 1) || (tga_height < 1) || + (tga_image_type < 1) || (tga_image_type > 3) || + ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16) && + (tga_bits_per_pixel != 24) && (tga_bits_per_pixel != 32)) + ) + { + return NULL; // we don't report this as a bad TGA because we don't even know if it's TGA + } + + // If I'm paletted, then I'll use the number of bits from the palette + if ( tga_indexed ) + { + tga_comp = tga_palette_bits / 8; + } + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) *comp = tga_comp; + + tga_data = (unsigned char*)stbi__malloc( (size_t)tga_width * tga_height * tga_comp ); + if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset ); + + if ( !tga_indexed && !tga_is_RLE) { + for (i=0; i < tga_height; ++i) { + int y = tga_inverted ? tga_height -i - 1 : i; + stbi_uc *tga_row = tga_data + y*tga_width*tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } else { + // do I need to load a palette? + if ( tga_indexed) + { + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start ); + // load the palette + tga_palette = (unsigned char*)stbi__malloc( tga_palette_len * tga_palette_bits / 8 ); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (!stbi__getn(s, tga_palette, tga_palette_len * tga_palette_bits / 8 )) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i=0; i < tga_width * tga_height; ++i) + { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if ( tga_is_RLE ) + { + if ( RLE_count == 0 ) + { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } else if ( !RLE_repeating ) + { + read_next_pixel = 1; + } + } else + { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if ( read_next_pixel ) + { + // load however much data we did have + if ( tga_indexed ) + { + // read in 1 byte, then perform the lookup + int pal_idx = stbi__get8(s); + if ( pal_idx >= tga_palette_len ) + { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_bits_per_pixel / 8; + for (j = 0; j*8 < tga_bits_per_pixel; ++j) + { + raw_data[j] = tga_palette[pal_idx+j]; + } + } else + { + // read in the data raw + for (j = 0; j*8 < tga_bits_per_pixel; ++j) + { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i*tga_comp+j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if ( tga_inverted ) + { + for (j = 0; j*2 < tga_height; ++j) + { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) + { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if ( tga_palette != NULL ) + { + STBI_FREE( tga_palette ); + } + } + + // swap RGB + if (tga_comp >= 3) + { + unsigned char* tga_pixel = tga_data; + for (i=0; i < tga_width * tga_height; ++i) + { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = + tga_x_origin = tga_y_origin = 0; + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context *s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static stbi_uc *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + int pixelCount; + int channelCount, compression; + int channel, i, count, len; + int w,h; + stbi_uc *out; + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6 ); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + // Make sure the depth is 8 bits. + if (stbi__get16be(s) != 8) + return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) + stbi__skip(s,stbi__get32be(s) ); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s) ); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s) ); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", "PSD has an unknown compression format"); + + // Create the destination image. + out = (stbi_uc *) stbi__malloc(4 * w*h); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w*h; + + // Initialize the data to zero. + //memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. + // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. + // Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceeded by a 2-byte data count for each row in the data, + // which we're going to just skip. + stbi__skip(s, h * channelCount * 2 ); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out+channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } else { + // Read the RLE data. + count = 0; + while (count < pixelCount) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source byte. + // (Interpret len as a negative 8-bit int.) + len ^= 0x0FF; + len += 2; + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + } + } + + } else { + // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) + // where each channel consists of an 8-bit value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc *p; + + p = out + channel; + if (channel > channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = channel == 3 ? 255 : 0; + } else { + // Read the data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + + if (req_comp && req_comp != 4) { + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + + if (comp) *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context *s,const char *str) +{ + int i; + for (i=0; i<4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context *s) +{ + int i; + + if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) + return 0; + + for(i=0;i<84;++i) + stbi__get8(s); + + if (!stbi__pic_is4(s,"PICT")) + return 0; + + return 1; +} + +typedef struct +{ + stbi_uc size,type,channel; +} stbi__pic_packet; + +static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) +{ + int mask=0x80, i; + + for (i=0; i<4; ++i, mask>>=1) { + if (channel & mask) { + if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); + dest[i]=stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) +{ + int mask=0x80,i; + + for (i=0;i<4; ++i, mask>>=1) + if (channel&mask) + dest[i]=src[i]; +} + +static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) +{ + int act_comp=0,num_packets=0,y,chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return stbi__errpuc("bad format","too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); + if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for(y=0; ytype) { + default: + return stbi__errpuc("bad format","packet has bad compression type"); + + case 0: {//uncompressed + int x; + + for(x=0;xchannel,dest)) + return 0; + break; + } + + case 1://Pure RLE + { + int left=width, i; + + while (left>0) { + stbi_uc count,value[4]; + + count=stbi__get8(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); + + if (count > left) + count = (stbi_uc) left; + + if (!stbi__readval(s,packet->channel,value)) return 0; + + for(i=0; ichannel,dest,value); + left -= count; + } + } + break; + + case 2: {//Mixed RLE + int left=width; + while (left>0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + int i; + + if (count==128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file","scanline overrun"); + + if (!stbi__readval(s,packet->channel,value)) + return 0; + + for(i=0;ichannel,dest,value); + } else { // Raw + ++count; + if (count>left) return stbi__errpuc("bad file","scanline overrun"); + + for(i=0;ichannel,dest)) + return 0; + } + left-=count; + } + break; + } + } + } + } + + return result; +} + +static stbi_uc *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp) +{ + stbi_uc *result; + int i, x,y; + + for (i=0; i<92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); + if ((1 << 28) / x < y) return stbi__errpuc("too large", "Image too large to decode"); + + stbi__get32be(s); //skip `ratio' + stbi__get16be(s); //skip `fields' + stbi__get16be(s); //skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc *) stbi__malloc(x*y*4); + memset(result, 0xff, x*y*4); + + if (!stbi__pic_load_core(s,x,y,comp, result)) { + STBI_FREE(result); + result=0; + } + *px = x; + *py = y; + if (req_comp == 0) req_comp = *comp; + result=stbi__convert_format(result,4,req_comp,x,y); + + return result; +} + +static int stbi__pic_test(stbi__context *s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct +{ + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct +{ + int w,h; + stbi_uc *out; // output buffer (always 4 components) + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[4096]; + stbi_uc *color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context *s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') return 0; + if (stbi__get8(s) != 'a') return 0; + return 1; +} + +static int stbi__gif_test(stbi__context *s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) +{ + int i; + for (i=0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments + + if (is_info) return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) +{ + stbi__gif g; + if (!stbi__gif_header(s, &g, comp, 1)) { + stbi__rewind( s ); + return 0; + } + if (x) *x = g.w; + if (y) *y = g.h; + return 1; +} + +static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) +{ + stbi_uc *p, *c; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) return; + + p = &g->out[g->cur_x + g->cur_y]; + c = &g->color_table[g->codes[code].suffix * 4]; + + if (c[3] >= 128) { + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) +{ + stbi_uc lzw_cs; + stbi__int32 len, code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw *p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (code = 0; code < clear; code++) { + g->codes[code].prefix = -1; + g->codes[code].first = (stbi_uc) code; + g->codes[code].suffix = (stbi_uc) code; + } + + // support no starting clear code + avail = clear+2; + oldcode = -1; + + len = 0; + for(;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32) stbi__get8(s) << valid_bits; + valid_bits += 8; + } else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s,len); + return g->out; + } else if (code <= avail) { + if (first) return stbi__errpuc("no clear code", "Corrupt GIF"); + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 4096) return stbi__errpuc("too many codes", "Corrupt GIF"); + p->prefix = (stbi__int16) oldcode; + p->first = g->codes[oldcode].first; + p->suffix = (code == avail) ? p->first : g->codes[code].first; + } else if (code == avail) + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16) code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +static void stbi__fill_gif_background(stbi__gif *g) +{ + int i; + stbi_uc *c = g->pal[g->bgindex]; + // @OPTIMIZE: write a dword at a time + for (i = 0; i < g->w * g->h * 4; i += 4) { + stbi_uc *p = &g->out[i]; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } +} + +// this function is designed to support animated gifs, although stb_image doesn't support it +static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp) +{ + int i; + stbi_uc *old_out = 0; + + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header + g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h); + if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory"); + stbi__fill_gif_background(g); + } else { + // animated-gif-only path + if (((g->eflags & 0x1C) >> 2) == 3) { + old_out = g->out; + g->out = (stbi_uc *) stbi__malloc(4 * g->w * g->h); + if (g->out == 0) return stbi__errpuc("outofmem", "Out of memory"); + memcpy(g->out, old_out, g->w*g->h*4); + } + } + + for (;;) { + switch (stbi__get8(s)) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc *o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); + g->color_table = (stbi_uc *) g->lpal; + } else if (g->flags & 0x80) { + for (i=0; i < 256; ++i) // @OPTIMIZE: stbi__jpeg_reset only the previous transparent + g->pal[i][3] = 255; + if (g->transparent >= 0 && (g->eflags & 0x01)) + g->pal[g->transparent][3] = 0; + g->color_table = (stbi_uc *) g->pal; + } else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (o == NULL) return NULL; + + if (req_comp && req_comp != 4) + o = stbi__convert_format(o, 4, req_comp, g->w, g->h); + return o; + } + + case 0x21: // Comment Extension. + { + int len; + if (stbi__get8(s) == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + stbi__get16le(s); // delay + g->transparent = stbi__get8(s); + } else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) + stbi__skip(s, len); + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc *) s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static stbi_uc *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + + u = stbi__gif_load_next(s, &g, comp, req_comp); + if (u == (stbi_uc *) s) u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + } + + return u; +} + +static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) +{ + return stbi__gif_info_raw(s,x,y,comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context *s) +{ + const char *signature = "#?RADIANCE\n"; + int i; + for (i=0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s); + stbi__rewind(s); + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) +{ + int len=0; + char c = '\0'; + + c = (char) stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN-1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char) stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) +{ + if ( input[3] != 0 ) { + float f1; + // Exponent + f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) output[1] = 1; + if (req_comp == 4) output[3] = 1; + } else { + switch (req_comp) { + case 4: output[3] = 1; /* fallthrough */ + case 3: output[0] = output[1] = output[2] = 0; + break; + case 2: output[1] = 1; /* fallthrough */ + case 1: output[0] = 0; + break; + } + } +} + +static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + int width, height; + stbi_uc *scanline; + float *hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1,c2, z; + + + // Check identifier + if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int) strtol(token, NULL, 10); + + *x = width; + *y = height; + + if (comp) *comp = 3; + if (req_comp == 0) req_comp = 3; + + // Read data + hdr_data = (float *) stbi__malloc(height * width * req_comp * sizeof(float)); + + // Load image data + // image data is stored as some number of sca + if ( width < 8 || width >= 32768) { + // Read flat data + for (j=0; j < height; ++j) { + for (i=0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); + } + } + } else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data as a decoded + // pixel (note this can't be a valid pixel--one of RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc) c1; + rgbe[1] = (stbi_uc) c2; + rgbe[2] = (stbi_uc) len; + rgbe[3] = (stbi_uc) stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } + if (scanline == NULL) scanline = (stbi_uc *) stbi__malloc(width * 4); + + for (k = 0; k < 4; ++k) { + i = 0; + while (i < width) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } else { + // Dump + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i=0; i < width; ++i) + stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); + } + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char *token; + int valid = 0; + + if (strcmp(stbi__hdr_gettoken(s,buffer), "#?RADIANCE") != 0) { + stbi__rewind( s ); + return 0; + } + + for(;;) { + token = stbi__hdr_gettoken(s,buffer); + if (token[0] == 0) break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; + } + + if (!valid) { + stbi__rewind( s ); + return 0; + } + token = stbi__hdr_gettoken(s,buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *y = (int) strtol(token, &token, 10); + while (*token == ' ') ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind( s ); + return 0; + } + token += 3; + *x = (int) strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') { + stbi__rewind( s ); + return 0; + } + stbi__skip(s,12); + hsz = stbi__get32le(s); + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) { + stbi__rewind( s ); + return 0; + } + if (hsz == 12) { + *x = stbi__get16le(s); + *y = stbi__get16le(s); + } else { + *x = stbi__get32le(s); + *y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) { + stbi__rewind( s ); + return 0; + } + *comp = stbi__get16le(s) / 8; + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) +{ + int channelCount; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind( s ); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind( s ); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + if (stbi__get16be(s) != 8) { + stbi__rewind( s ); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind( s ); + return 0; + } + *comp = 4; + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) +{ + int act_comp=0,num_packets=0,chained; + stbi__pic_packet packets[10]; + + stbi__skip(s, 92); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) return 0; + if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind( s ); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet *packet; + + if (num_packets==sizeof(packets)/sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind( s ); + return 0; + } + if (packet->size != 8) { + stbi__rewind( s ); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) +// Does not support 16-bit-per-channel + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context *s) +{ + char p, t; + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + return 1; +} + +static stbi_uc *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp) +{ + stbi_uc *out; + if (!stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n)) + return 0; + *x = s->img_x; + *y = s->img_y; + *comp = s->img_n; + + out = (stbi_uc *) stbi__malloc(s->img_n * s->img_x * s->img_y); + if (!out) return stbi__errpuc("outofmem", "Out of memory"); + stbi__getn(s, out, s->img_n * s->img_x * s->img_y); + + if (req_comp && req_comp != s->img_n) { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + if (out == NULL) return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) +{ + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char) stbi__get8(s); +} + +static int stbi__pnm_isdigit(char c) +{ + return c >= '0' && c <= '9'; +} + +static int stbi__pnm_getinteger(stbi__context *s, char *c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value*10 + (*c - '0'); + *c = (char) stbi__get8(s); + } + + return value; +} + +static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) +{ + int maxv; + char c, p, t; + + stbi__rewind( s ); + + // Get identifier + p = (char) stbi__get8(s); + t = (char) stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind( s ); + return 0; + } + + *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char) stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + + if (maxv > 255) + return stbi__err("max value > 255", "PPM image not 8-bit"); + else + return 1; +} +#endif + +static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) +{ + #ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) return 1; + #endif + + #ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) return 1; + #endif + + // test tga last because it's a crappy test! + #ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; + #endif + return stbi__err("unknown image type", "Image not of any known type, or corrupt"); +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) +{ + FILE *f = stbi__fopen(filename, "rb"); + int result; + if (!f) return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s,x,y,comp); + fseek(f,pos,SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_mem(&s,buffer,len); + return stbi__info_main(&s,x,y,comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); + return stbi__info_main(&s,x,y,comp); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 + 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG + 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) + progressive JPEG (stb) + PGM/PPM support (Ken Miller) + STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) + optimize PNG (ryg) + fix bug in interlaced PNG with user-specified channel count (stb) + 1.46 (2014-08-26) + fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG + 1.45 (2014-08-16) + fix MSVC-ARM internal compiler error by wrapping malloc + 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error messages + 1.40 (2014-06-22) + fix gcc struct-initialization warning + 1.39 (2014-06-15) + fix to TGA optimization when req_comp != number of components in TGA; + fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) + add support for BMP version 5 (more ignored fields) + 1.38 (2014-06-06) + suppress MSVC warnings on integer casts truncating values + fix accidental rename of 'skip' field of I/O + 1.37 (2014-06-04) + remove duplicate typedef + 1.36 (2014-06-03) + convert to header file single-file library + if de-iphone isn't set, load iphone images color-swapped instead of returning NULL + 1.35 (2014-05-27) + various warnings + fix broken STBI_SIMD path + fix bug where stbi_load_from_file no longer left file pointer in correct place + fix broken non-easy path for 32-bit BMP (possibly never used) + TGA optimization by Arseny Kapoulkine + 1.34 (unknown) + use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case + 1.33 (2011-07-14) + make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements + 1.32 (2011-07-13) + support for "info" function for all supported filetypes (SpartanJ) + 1.31 (2011-06-20) + a few more leak fixes, bug in PNG handling (SpartanJ) + 1.30 (2011-06-11) + added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway + error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) + fix inefficiency in decoding 32-bit BMP (David Woo) + 1.29 (2010-08-16) + various warning fixes from Aurelien Pocheville + 1.28 (2010-08-01) + fix bug in GIF palette transparency (SpartanJ) + 1.27 (2010-08-01) + cast-to-stbi_uc to fix warnings + 1.26 (2010-07-24) + fix bug in file buffering for PNG reported by SpartanJ + 1.25 (2010-07-17) + refix trans_data warning (Won Chun) + 1.24 (2010-07-12) + perf improvements reading from files on platforms with lock-heavy fgetc() + minor perf improvements for jpeg + deprecated type-specific functions so we'll get feedback if they're needed + attempt to fix trans_data warning (Won Chun) + 1.23 fixed bug in iPhone support + 1.22 (2010-07-10) + removed image *writing* support + stbi_info support from Jetro Lauha + GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) + 1.21 fix use of 'stbi_uc' in header (reported by jon blow) + 1.20 added support for Softimage PIC, by Tom Seddon + 1.19 bug in interlaced PNG corruption check (found by ryg) + 1.18 (2008-08-02) + fix a threading bug (local mutable static) + 1.17 support interlaced PNG + 1.16 major bugfix - stbi__convert_format converted one too many pixels + 1.15 initialize some fields for thread safety + 1.14 fix threadsafe conversion bug + header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance calc + 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free + 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR + 1.02 support for (subset of) HDR files, float interface for preferred access to them + 1.01 fix bug: possible bug in handling right-side up bmps... not sure + fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all + 1.00 interface to zlib that skips zlib header + 0.99 correct handling of alpha in palette + 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available + 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ diff --git a/src/stb_image_write.h b/src/stb_image_write.h new file mode 100644 index 00000000..10489707 --- /dev/null +++ b/src/stb_image_write.h @@ -0,0 +1,730 @@ +/* stb_image_write - v0.98 - public domain - http://nothings.org/stb/stb_image_write.h + writes out PNG/BMP/TGA images to C stdio - Sean Barrett 2010 + no warranty implied; use at your own risk + + + Before #including, + + #define STB_IMAGE_WRITE_IMPLEMENTATION + + in the file that you want to have the implementation. + + Will probably not work correctly with strict-aliasing optimizations. + +ABOUT: + + This header file is a library for writing images to C stdio. It could be + adapted to write to memory or a general streaming interface; let me know. + + The PNG output is not optimal; it is 20-50% larger than the file + written by a decent optimizing implementation. This library is designed + for source code compactness and simplicitly, not optimal image file size + or run-time performance. + +BUILDING: + + You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. + You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace + malloc,realloc,free. + You can define STBIW_MEMMOVE() to replace memmove() + +USAGE: + + There are four functions, one for each image file format: + + int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); + int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); + int stbi_write_hdr(char const *filename, int w, int h, int comp, const void *data); + + Each function returns 0 on failure and non-0 on success. + + The functions create an image file defined by the parameters. The image + is a rectangle of pixels stored from left-to-right, top-to-bottom. + Each pixel contains 'comp' channels of data stored interleaved with 8-bits + per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is + monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. + The *data pointer points to the first byte of the top-left-most pixel. + For PNG, "stride_in_bytes" is the distance in bytes from the first byte of + a row of pixels to the first byte of the next row of pixels. + + PNG creates output files with the same number of components as the input. + The BMP format expands Y to RGB in the file format and does not + output alpha. + + PNG supports writing rectangles of data even when the bytes storing rows of + data are not consecutive in memory (e.g. sub-rectangles of a larger image), + by supplying the stride between the beginning of adjacent rows. The other + formats do not. (Thus you cannot write a native-format BMP through the BMP + writer, both because it is in BGR order and because it may have padding + at the end of the line.) + + HDR expects linear float data. Since the format is always 32-bit rgb(e) + data, alpha (if provided) is discarded, and for monochrome data it is + replicated across all three channels. + +CREDITS: + + PNG/BMP/TGA + Sean Barrett + HDR + Baldur Karlsson + TGA monochrome: + Jean-Sebastien Guay + misc enhancements: + Tim Kelsey + bugfixes: + github:Chribba +*/ + +#ifndef INCLUDE_STB_IMAGE_WRITE_H +#define INCLUDE_STB_IMAGE_WRITE_H + +#ifdef __cplusplus +extern "C" { +#endif + +extern int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); +extern int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); +extern int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); +extern int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); + +#ifdef __cplusplus +} +#endif + +#endif//INCLUDE_STB_IMAGE_WRITE_H + +#ifdef STB_IMAGE_WRITE_IMPLEMENTATION + +#include +#include +#include +#include +#include + +#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && defined(STBIW_REALLOC) +// ok +#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) +// ok +#else +#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC." +#endif + +#ifndef STBIW_MALLOC +#define STBIW_MALLOC(sz) malloc(sz) +#define STBIW_REALLOC(p,sz) realloc(p,sz) +#define STBIW_FREE(p) free(p) +#endif +#ifndef STBIW_MEMMOVE +#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) +#endif + + +#ifndef STBIW_ASSERT +#include +#define STBIW_ASSERT(x) assert(x) +#endif + +typedef unsigned int stbiw_uint32; +typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; + +static void writefv(FILE *f, const char *fmt, va_list v) +{ + while (*fmt) { + switch (*fmt++) { + case ' ': break; + case '1': { unsigned char x = (unsigned char) va_arg(v, int); fputc(x,f); break; } + case '2': { int x = va_arg(v,int); unsigned char b[2]; + b[0] = (unsigned char) x; b[1] = (unsigned char) (x>>8); + fwrite(b,2,1,f); break; } + case '4': { stbiw_uint32 x = va_arg(v,int); unsigned char b[4]; + b[0]=(unsigned char)x; b[1]=(unsigned char)(x>>8); + b[2]=(unsigned char)(x>>16); b[3]=(unsigned char)(x>>24); + fwrite(b,4,1,f); break; } + default: + STBIW_ASSERT(0); + return; + } + } +} + +static void write3(FILE *f, unsigned char a, unsigned char b, unsigned char c) +{ + unsigned char arr[3]; + arr[0] = a, arr[1] = b, arr[2] = c; + fwrite(arr, 3, 1, f); +} + +static void write_pixels(FILE *f, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) +{ + unsigned char bg[3] = { 255, 0, 255}, px[3]; + stbiw_uint32 zero = 0; + int i,j,k, j_end; + + if (y <= 0) + return; + + if (vdir < 0) + j_end = -1, j = y-1; + else + j_end = y, j = 0; + + for (; j != j_end; j += vdir) { + for (i=0; i < x; ++i) { + unsigned char *d = (unsigned char *) data + (j*x+i)*comp; + if (write_alpha < 0) + fwrite(&d[comp-1], 1, 1, f); + switch (comp) { + case 1: fwrite(d, 1, 1, f); + break; + case 2: if (expand_mono) + write3(f, d[0],d[0],d[0]); // monochrome bmp + else + fwrite(d, 1, 1, f); // monochrome TGA + break; + case 4: + if (!write_alpha) { + // composite against pink background + for (k=0; k < 3; ++k) + px[k] = bg[k] + ((d[k] - bg[k]) * d[3])/255; + write3(f, px[1-rgb_dir],px[1],px[1+rgb_dir]); + break; + } + /* FALLTHROUGH */ + case 3: + write3(f, d[1-rgb_dir],d[1],d[1+rgb_dir]); + break; + } + if (write_alpha > 0) + fwrite(&d[comp-1], 1, 1, f); + } + fwrite(&zero,scanline_pad,1,f); + } +} + +static int outfile(char const *filename, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) +{ + FILE *f; + if (y < 0 || x < 0) return 0; + f = fopen(filename, "wb"); + if (f) { + va_list v; + va_start(v, fmt); + writefv(f, fmt, v); + va_end(v); + write_pixels(f,rgb_dir,vdir,x,y,comp,data,alpha,pad,expand_mono); + fclose(f); + } + return f != NULL; +} + +int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) +{ + int pad = (-x*3) & 3; + return outfile(filename,-1,-1,x,y,comp,1,(void *) data,0,pad, + "11 4 22 4" "4 44 22 444444", + 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header + 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header +} + +int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) +{ + int has_alpha = (comp == 2 || comp == 4); + int colorbytes = has_alpha ? comp-1 : comp; + int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 + return outfile(filename, -1,-1, x, y, comp, 0, (void *) data, has_alpha, 0, + "111 221 2222 11", 0,0,format, 0,0,0, 0,0,x,y, (colorbytes+has_alpha)*8, has_alpha*8); +} + +// ************************************************************************************************* +// Radiance RGBE HDR writer +// by Baldur Karlsson +#define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) + +void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) +{ + int exponent; + float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); + + if (maxcomp < 1e-32) { + rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; + } else { + float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; + + rgbe[0] = (unsigned char)(linear[0] * normalize); + rgbe[1] = (unsigned char)(linear[1] * normalize); + rgbe[2] = (unsigned char)(linear[2] * normalize); + rgbe[3] = (unsigned char)(exponent + 128); + } +} + +void stbiw__write_run_data(FILE *f, int length, unsigned char databyte) +{ + unsigned char lengthbyte = (unsigned char) (length+128); + STBIW_ASSERT(length+128 <= 255); + fwrite(&lengthbyte, 1, 1, f); + fwrite(&databyte, 1, 1, f); +} + +void stbiw__write_dump_data(FILE *f, int length, unsigned char *data) +{ + unsigned char lengthbyte = (unsigned char )(length & 0xff); + STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code + fwrite(&lengthbyte, 1, 1, f); + fwrite(data, length, 1, f); +} + +void stbiw__write_hdr_scanline(FILE *f, int width, int comp, unsigned char *scratch, const float *scanline) +{ + unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; + unsigned char rgbe[4]; + float linear[3]; + int x; + + scanlineheader[2] = (width&0xff00)>>8; + scanlineheader[3] = (width&0x00ff); + + /* skip RLE for images too small or large */ + if (width < 8 || width >= 32768) { + for (x=0; x < width; x++) { + switch (comp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*comp + 2]; + linear[1] = scanline[x*comp + 1]; + linear[0] = scanline[x*comp + 0]; + break; + case 2: /* fallthrough */ + case 1: linear[0] = linear[1] = linear[2] = scanline[x*comp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + fwrite(rgbe, 4, 1, f); + } + } else { + int c,r; + /* encode into scratch buffer */ + for (x=0; x < width; x++) { + switch(comp) { + case 4: /* fallthrough */ + case 3: linear[2] = scanline[x*comp + 2]; + linear[1] = scanline[x*comp + 1]; + linear[0] = scanline[x*comp + 0]; + break; + case 2: /* fallthrough */ + case 1: linear[0] = linear[1] = linear[2] = scanline[x*comp + 0]; + break; + } + stbiw__linear_to_rgbe(rgbe, linear); + scratch[x + width*0] = rgbe[0]; + scratch[x + width*1] = rgbe[1]; + scratch[x + width*2] = rgbe[2]; + scratch[x + width*3] = rgbe[3]; + } + + fwrite(scanlineheader, 4, 1, f); + + /* RLE each component separately */ + for (c=0; c < 4; c++) { + unsigned char *comp = &scratch[width*c]; + + x = 0; + while (x < width) { + // find first run + r = x; + while (r+2 < width) { + if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) + break; + ++r; + } + if (r+2 >= width) + r = width; + // dump up to first run + while (x < r) { + int len = r-x; + if (len > 128) len = 128; + stbiw__write_dump_data(f, len, &comp[x]); + x += len; + } + // if there's a run, output it + if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd + // find next byte after run + while (r < width && comp[r] == comp[x]) + ++r; + // output run up to r + while (x < r) { + int len = r-x; + if (len > 127) len = 127; + stbiw__write_run_data(f, len, comp[x]); + x += len; + } + } + } + } + } +} + +int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) +{ + int i; + FILE *f; + if (y <= 0 || x <= 0 || data == NULL) return 0; + f = fopen(filename, "wb"); + if (f) { + /* Each component is stored separately. Allocate scratch space for full output scanline. */ + unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); + fprintf(f, "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n" ); + fprintf(f, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n" , y, x); + for(i=0; i < y; i++) + stbiw__write_hdr_scanline(f, x, comp, scratch, data + comp*i*x); + STBIW_FREE(scratch); + fclose(f); + } + return f != NULL; +} + +///////////////////////////////////////////////////////// +// PNG + +// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() +#define stbiw__sbraw(a) ((int *) (a) - 2) +#define stbiw__sbm(a) stbiw__sbraw(a)[0] +#define stbiw__sbn(a) stbiw__sbraw(a)[1] + +#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) +#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) +#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) + +#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) +#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) +#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) + +static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) +{ + int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; + void *p = STBIW_REALLOC(*arr ? stbiw__sbraw(*arr) : 0, itemsize * m + sizeof(int)*2); + STBIW_ASSERT(p); + if (p) { + if (!*arr) ((int *) p)[1] = 0; + *arr = (void *) ((int *) p + 2); + stbiw__sbm(*arr) = m; + } + return *arr; +} + +static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) +{ + while (*bitcount >= 8) { + stbiw__sbpush(data, (unsigned char) *bitbuffer); + *bitbuffer >>= 8; + *bitcount -= 8; + } + return data; +} + +static int stbiw__zlib_bitrev(int code, int codebits) +{ + int res=0; + while (codebits--) { + res = (res << 1) | (code & 1); + code >>= 1; + } + return res; +} + +static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) +{ + int i; + for (i=0; i < limit && i < 258; ++i) + if (a[i] != b[i]) break; + return i; +} + +static unsigned int stbiw__zhash(unsigned char *data) +{ + stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); + hash ^= hash << 3; + hash += hash >> 5; + hash ^= hash << 4; + hash += hash >> 17; + hash ^= hash << 25; + hash += hash >> 6; + return hash; +} + +#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) +#define stbiw__zlib_add(code,codebits) \ + (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) +#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) +// default huffman tables +#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) +#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) +#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) +#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) +#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) +#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) + +#define stbiw__ZHASH 16384 + +unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) +{ + static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 }; + static unsigned char lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; + static unsigned short distc[] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 }; + static unsigned char disteb[] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 }; + unsigned int bitbuf=0; + int i,j, bitcount=0; + unsigned char *out = NULL; + unsigned char **hash_table[stbiw__ZHASH]; // 64KB on the stack! + if (quality < 5) quality = 5; + + stbiw__sbpush(out, 0x78); // DEFLATE 32K window + stbiw__sbpush(out, 0x5e); // FLEVEL = 1 + stbiw__zlib_add(1,1); // BFINAL = 1 + stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman + + for (i=0; i < stbiw__ZHASH; ++i) + hash_table[i] = NULL; + + i=0; + while (i < data_len-3) { + // hash next 3 bytes of data to be compressed + int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; + unsigned char *bestloc = 0; + unsigned char **hlist = hash_table[h]; + int n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32768) { // if entry lies within window + int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); + if (d >= best) best=d,bestloc=hlist[j]; + } + } + // when hash table entry is too long, delete half the entries + if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { + STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); + stbiw__sbn(hash_table[h]) = quality; + } + stbiw__sbpush(hash_table[h],data+i); + + if (bestloc) { + // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal + h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); + hlist = hash_table[h]; + n = stbiw__sbcount(hlist); + for (j=0; j < n; ++j) { + if (hlist[j]-data > i-32767) { + int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); + if (e > best) { // if next match is better, bail on current match + bestloc = NULL; + break; + } + } + } + } + + if (bestloc) { + int d = (int) (data+i - bestloc); // distance back + STBIW_ASSERT(d <= 32767 && best <= 258); + for (j=0; best > lengthc[j+1]-1; ++j); + stbiw__zlib_huff(j+257); + if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); + for (j=0; d > distc[j+1]-1; ++j); + stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); + if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); + i += best; + } else { + stbiw__zlib_huffb(data[i]); + ++i; + } + } + // write out final bytes + for (;i < data_len; ++i) + stbiw__zlib_huffb(data[i]); + stbiw__zlib_huff(256); // end of block + // pad with 0 bits to byte boundary + while (bitcount) + stbiw__zlib_add(0,1); + + for (i=0; i < stbiw__ZHASH; ++i) + (void) stbiw__sbfree(hash_table[i]); + + { + // compute adler32 on input + unsigned int i=0, s1=1, s2=0, blocklen = data_len % 5552; + int j=0; + while (j < data_len) { + for (i=0; i < blocklen; ++i) s1 += data[j+i], s2 += s1; + s1 %= 65521, s2 %= 65521; + j += blocklen; + blocklen = 5552; + } + stbiw__sbpush(out, (unsigned char) (s2 >> 8)); + stbiw__sbpush(out, (unsigned char) s2); + stbiw__sbpush(out, (unsigned char) (s1 >> 8)); + stbiw__sbpush(out, (unsigned char) s1); + } + *out_len = stbiw__sbn(out); + // make returned pointer freeable + STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); + return (unsigned char *) stbiw__sbraw(out); +} + +unsigned int stbiw__crc32(unsigned char *buffer, int len) +{ + static unsigned int crc_table[256]; + unsigned int crc = ~0u; + int i,j; + if (crc_table[1] == 0) + for(i=0; i < 256; i++) + for (crc_table[i]=i, j=0; j < 8; ++j) + crc_table[i] = (crc_table[i] >> 1) ^ (crc_table[i] & 1 ? 0xedb88320 : 0); + for (i=0; i < len; ++i) + crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; + return ~crc; +} + +#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=(unsigned char)(a),(o)[1]=(unsigned char)(b),(o)[2]=(unsigned char)(c),(o)[3]=(unsigned char)(d),(o)+=4) +#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); +#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) + +static void stbiw__wpcrc(unsigned char **data, int len) +{ + unsigned int crc = stbiw__crc32(*data - len - 4, len+4); + stbiw__wp32(*data, crc); +} + +static unsigned char stbiw__paeth(int a, int b, int c) +{ + int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); + if (pa <= pb && pa <= pc) return (unsigned char) a; + if (pb <= pc) return (unsigned char) b; + return (unsigned char) c; +} + +unsigned char *stbi_write_png_to_mem(unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) +{ + int ctype[5] = { -1, 0, 4, 2, 6 }; + unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; + unsigned char *out,*o, *filt, *zlib; + signed char *line_buffer; + int i,j,k,p,zlen; + + if (stride_bytes == 0) + stride_bytes = x * n; + + filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; + line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } + for (j=0; j < y; ++j) { + static int mapping[] = { 0,1,2,3,4 }; + static int firstmap[] = { 0,1,0,5,6 }; + int *mymap = j ? mapping : firstmap; + int best = 0, bestval = 0x7fffffff; + for (p=0; p < 2; ++p) { + for (k= p?best:0; k < 5; ++k) { + int type = mymap[k],est=0; + unsigned char *z = pixels + stride_bytes*j; + for (i=0; i < n; ++i) + switch (type) { + case 0: line_buffer[i] = z[i]; break; + case 1: line_buffer[i] = z[i]; break; + case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break; + case 3: line_buffer[i] = z[i] - (z[i-stride_bytes]>>1); break; + case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-stride_bytes],0)); break; + case 5: line_buffer[i] = z[i]; break; + case 6: line_buffer[i] = z[i]; break; + } + for (i=n; i < x*n; ++i) { + switch (type) { + case 0: line_buffer[i] = z[i]; break; + case 1: line_buffer[i] = z[i] - z[i-n]; break; + case 2: line_buffer[i] = z[i] - z[i-stride_bytes]; break; + case 3: line_buffer[i] = z[i] - ((z[i-n] + z[i-stride_bytes])>>1); break; + case 4: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-stride_bytes], z[i-stride_bytes-n]); break; + case 5: line_buffer[i] = z[i] - (z[i-n]>>1); break; + case 6: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; + } + } + if (p) break; + for (i=0; i < x*n; ++i) + est += abs((signed char) line_buffer[i]); + if (est < bestval) { bestval = est; best = k; } + } + } + // when we get here, best contains the filter type, and line_buffer contains the data + filt[j*(x*n+1)] = (unsigned char) best; + STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); + } + STBIW_FREE(line_buffer); + zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, 8); // increase 8 to get smaller but use more memory + STBIW_FREE(filt); + if (!zlib) return 0; + + // each tag requires 12 bytes of overhead + out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); + if (!out) return 0; + *out_len = 8 + 12+13 + 12+zlen + 12; + + o=out; + STBIW_MEMMOVE(o,sig,8); o+= 8; + stbiw__wp32(o, 13); // header length + stbiw__wptag(o, "IHDR"); + stbiw__wp32(o, x); + stbiw__wp32(o, y); + *o++ = 8; + *o++ = (unsigned char) ctype[n]; + *o++ = 0; + *o++ = 0; + *o++ = 0; + stbiw__wpcrc(&o,13); + + stbiw__wp32(o, zlen); + stbiw__wptag(o, "IDAT"); + STBIW_MEMMOVE(o, zlib, zlen); + o += zlen; + STBIW_FREE(zlib); + stbiw__wpcrc(&o, zlen); + + stbiw__wp32(o,0); + stbiw__wptag(o, "IEND"); + stbiw__wpcrc(&o,0); + + STBIW_ASSERT(o == out + *out_len); + + return out; +} + +int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) +{ + FILE *f; + int len; + unsigned char *png = stbi_write_png_to_mem((unsigned char *) data, stride_bytes, x, y, comp, &len); + if (!png) return 0; + f = fopen(filename, "wb"); + if (!f) { STBIW_FREE(png); return 0; } + fwrite(png, 1, len, f); + fclose(f); + STBIW_FREE(png); + return 1; +} +#endif // STB_IMAGE_WRITE_IMPLEMENTATION + +/* Revision history + 0.98 (2015-04-08) + added STBIW_MALLOC, STBIW_ASSERT etc + 0.97 (2015-01-18) + fixed HDR asserts, rewrote HDR rle logic + 0.96 (2015-01-17) + add HDR output + fix monochrome BMP + 0.95 (2014-08-17) + add monochrome TGA output + 0.94 (2014-05-31) + rename private functions to avoid conflicts with stb_image.h + 0.93 (2014-05-27) + warning fixes + 0.92 (2010-08-01) + casts to unsigned char to fix warnings + 0.91 (2010-07-17) + first public release + 0.90 first internal release +*/

JO)KMKE!d5KDD`bqhGuc!({?n!6J;4 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�!nQVmgH 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 C;nJ-D literal 0 HcmV?d00001 diff --git a/data/person.jpg b/data/person.jpg new file mode 100644 index 0000000000000000000000000000000000000000..61d377fff94d48c365b0cf18edcd4de38b229465 GIT binary patch literal 113880 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 X8MRAjo;TABaUtA+&>Z*4 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