static gboolean burleigh_exp_read_header(BurleighExpHeader *header, gchar *buf, GError **error) { GwySIUnit *yunits = NULL, *dummy = NULL; gchar *p, *line; gwy_clear(header, 1); p = buf; /* Magic header */ if (!(line = gwy_str_next_line(&p)) || strncmp(line, MAGIC, MAGIC_SIZE) != 0) { err_FILE_TYPE(error, "Burleigh export"); return FALSE; } /* Skip all other lines starting with a dot */ while ((line = gwy_str_next_line(&p))) { if (sscanf(line, ".Binary Format, Header Length=%u, Integer %u bits", &header->length, &header->bpp)) header->binary = TRUE; if (!line || !p || p[0] != '.') break; } if (!line) { err_FILE_TYPE(error, "Burleigh export"); return FALSE; } if (!parse_scale(&p, "X Scale", &header->xscale, &header->xyunits, error)) return FALSE; if (!parse_dim(&p, "X Pixel", &header->xres, error)) return FALSE; if (!parse_scale(&p, "Y Scale", &header->yscale, &yunits, error)) return FALSE; /* FIXME: Check sanity */ g_object_unref(yunits); if (!parse_dim(&p, "Y Pixel", &header->yres, error)) return FALSE; if (!parse_scale(&p, "Z Scale", &header->zscale, &header->zunits, error)) return FALSE; if (!parse_scale(&p, "Z Res.(value/digital)", &header->zres, &dummy, error)) return FALSE; g_object_unref(dummy); if (!header->binary) header->length = p - buf; return TRUE; }
int parse(char *av, t_env *world) { int i; i = 0; if (parse_dim(av, world) != 0) return (-1); world->map = malloc(sizeof(int *) * (MYSIZE + 1)); while (i <= MYSIZE) { world->map[i] = malloc(sizeof(int) * (MXSIZE + 1)); i++; } if (world->map == NULL) return (-1); parse_map(av, world); return (0); }
int main(int argc, char *argv[]) { char *fin, *fout; FILE *fpin, *fpout; uint8_t *inbuf, *outbuf; uint8_t *inbuf_u, *outbuf_u; uint8_t *inbuf_v, *outbuf_v; int f, frames; int width, height, target_width, target_height; exec_name = argv[0]; if (argc < 5) { printf("Incorrect parameters:\n"); usage(); return 1; } fin = argv[1]; fout = argv[4]; if (!parse_dim(argv[2], &width, &height)) { printf("Incorrect parameters: %s\n", argv[2]); usage(); return 1; } if (!parse_dim(argv[3], &target_width, &target_height)) { printf("Incorrect parameters: %s\n", argv[3]); usage(); return 1; } fpin = fopen(fin, "rb"); if (fpin == NULL) { printf("Can't open file %s to read\n", fin); usage(); return 1; } fpout = fopen(fout, "wb"); if (fpout == NULL) { printf("Can't open file %s to write\n", fout); usage(); return 1; } if (argc >= 6) frames = atoi(argv[5]); else frames = INT_MAX; printf("Input size: %dx%d\n", width, height); printf("Target size: %dx%d, Frames: ", target_width, target_height); if (frames == INT_MAX) printf("All\n"); else printf("%d\n", frames); inbuf = (uint8_t *)malloc(width * height * 3 / 2); outbuf = (uint8_t *)malloc(target_width * target_height * 3 / 2); inbuf_u = inbuf + width * height; inbuf_v = inbuf_u + width * height / 4; outbuf_u = outbuf + target_width * target_height; outbuf_v = outbuf_u + target_width * target_height / 4; f = 0; while (f < frames) { if (fread(inbuf, width * height * 3 / 2, 1, fpin) != 1) break; vp9_resize_frame420(inbuf, width, inbuf_u, inbuf_v, width / 2, height, width, outbuf, target_width, outbuf_u, outbuf_v, target_width / 2, target_height, target_width); fwrite(outbuf, target_width * target_height * 3 / 2, 1, fpout); f++; } printf("%d frames processed\n", f); fclose(fpin); fclose(fpout); free(inbuf); free(outbuf); return 0; }