From 4cec401930c5e4644fa8a1061d4893c06fc1a143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C4=B0nan?= Date: Mon, 3 Oct 2011 12:55:25 +0200 Subject: [PATCH] now we can read any ppm header --- encode.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/encode.c b/encode.c index 3fcb4f5..c6da4d6 100644 --- a/encode.c +++ b/encode.c @@ -143,14 +143,45 @@ int main(int argc, char **argv) fprintf(stderr, "couldnt open ppm file\n"); return 1; } - const char *ppm_head = "P6 320 240 255\n"; - - if (strncmp(ppm_head, ppm_p, strlen(ppm_head))) { + char *ppm_c = (char *)ppm_p; + size_t ppm_i = 0; + if (ppm_size < width * height * 3 || ppm_c[ppm_i++] != 'P' || ppm_c[ppm_i++] != '6') { fprintf(stderr, "unsupported image file\n"); return 1; } - pixel = (uint8_t *)ppm_p + strlen(ppm_head); + char ppm_buff[16]; + int ppm_int[3]; + for (int n = 0; n < 3; n++) { + for (; ppm_i < ppm_size; ppm_i++) { + if (ppm_c[ppm_i] >= '0' && ppm_c[ppm_i] <= '9') + break; + if (ppm_c[ppm_i] == '#') + for (; ppm_i < ppm_size && ppm_c[ppm_i] != '\n'; ppm_i++); + } + for (int i = 0; i < 16; i++) + ppm_buff[i] = 0; + for (int i = 0; ppm_i < ppm_size && i < 15; i++, ppm_i++) { + ppm_buff[i] = ppm_c[ppm_i]; + if (ppm_buff[i] < '0' || ppm_buff[i] > '9') { + ppm_buff[i] = 0; + break; + } + } + if (ppm_i >= ppm_size) { + fprintf(stderr, "broken image file\n"); + return 1; + } + ppm_int[n] = atoi(ppm_buff); + ppm_i++; + } + + if (ppm_int[0] != width || ppm_int[1] != height || ppm_int[2] != 255) { + fprintf(stderr, "unsupported image file\n"); + return 1; + } + + pixel = (uint8_t *)ppm_p + ppm_i; char *pcm_name = "default"; if (argc > 2)