fixed bug in jpeg2000 decoding
[swftools.git] / src / swfrender.c
index e31e478..e9df12d 100644 (file)
@@ -15,6 +15,7 @@
 static struct options_t options[] = {
 {"h", "help"},
 {"o", "output"},
+{"p", "pages"},
 {"l", "legacy"},
 {"V", "version"},
 {"X", "width"},
@@ -26,6 +27,7 @@ static int ng = 1;
 static char*filename = 0;
 static char*outputname = "output.png";
 static int quantize = 0;
+static char*pagerange = 0;
 
 static int width = 0;
 static int height = 0;
@@ -52,6 +54,9 @@ int args_callback_option(char*name,char*val)
     } else if(!strcmp(name, "q")) {
        quantize = 1;
        return 0;
+    } else if(!strcmp(name, "p")) {
+       pagerange = val;
+       return 1;
     } else if(!strcmp(name, "s")) {
        char*s = strdup(val);
        char*c = strchr(s, '=');
@@ -123,13 +128,14 @@ int main(int argn, char*argv[])
        fi = open(filename, O_RDONLY|O_BINARY);
        if (fi<=0) { 
            fprintf(stderr,"Couldn't open %s\n", filename);
-           perror(argv[1]);
+           perror(filename);
            exit(1);
        }
        if(swf_ReadSWF(fi,&swf)<0) { 
            fprintf(stderr,"%s is not a valid SWF file or contains errors.\n",argv[1]);
            close(fi);
        }
+       assert(swf.movieSize.xmax > swf.movieSize.xmin && swf.movieSize.ymax > swf.movieSize.ymin);
        RENDERBUF buf;
        swf_Render_Init(&buf, 0,0, (swf.movieSize.xmax - swf.movieSize.xmin) / 20,
                                   (swf.movieSize.ymax - swf.movieSize.ymin) / 20, 2, 1);
@@ -145,11 +151,11 @@ int main(int argn, char*argv[])
 
        gfxsource_t*src = gfxsource_swf_create();
        for(p=params;p;p=p->next) {
-           src->set_parameter(src, p->name, p->value);
+           src->setparameter(src, p->name, p->value);
        }
        gfxdocument_t*doc = src->open(src, filename);
        for(p=params;p;p=p->next) {
-           doc->set_parameter(doc, p->name, p->value);
+           doc->setparameter(doc, p->name, p->value);
        }
        if(!doc) {
            fprintf(stderr,"Couldn't open %s\n", filename);
@@ -170,6 +176,8 @@ int main(int argn, char*argv[])
 
        int t;
        for(t=1;t<=doc->num_pages;t++) {
+            if(!is_in_range(t, pagerange))
+                continue;
            gfxpage_t* page = doc->getpage(doc, t);
            dev->startpage(dev, page->width, page->height);
            page->render(page, dev);