Stack corruption error corrected with "tmp" variable
[openjpeg.git] / mj2 / mj2_to_frames.c
1 /* Copyright (c) 2003-2004, Fran�ois-Olivier Devaux
2 * Copyright (c) 2003-2004,  Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
3 * All rights reserved.
4 *
5 * All rights reserved. 
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #include <openjpeg.h>
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include "mj2.h"
33 #include "mj2_convert.h"
34
35 int ceildiv(int a, int b)
36 {
37   return (a + b - 1) / b;
38 }
39
40 int main(int argc, char **argv)
41 {
42   FILE *f=NULL;
43   char *src=NULL, *src_name=NULL;
44   char *dest=NULL, S1, S2, S3;
45   int len;
46   j2k_cp_t cp;
47   mj2_movie_t mj2_movie;
48
49
50   if (argc < 3) {
51     fprintf(stderr,
52             "usage: %s j2k-file image-file -reduce n (<- optional)\n",
53             argv[0]);
54     return 1;
55   }
56
57   f = fopen(argv[1], "rb");
58   if (!f) {
59     fprintf(stderr, "failed to open %s for reading\n", argv[1]);
60     return 1;
61   }
62
63   dest = argv[2];
64
65   cp.reduce_on = 0;
66   cp.reduce_value = 0;
67
68   /* OPTION REDUCE IS ACTIVE */
69   if (argc == 5) {
70     if (strcmp(argv[3], "-reduce")) {
71       fprintf(stderr,
72               "usage: options " "-reduce n"
73               " where n is the factor of reduction [%s]\n", argv[3]);
74       return 1;
75     }
76     cp.reduce_on = 1;
77     sscanf(argv[4], "%d", &cp.reduce_value);
78   }
79
80   while (*dest) {
81     dest++;
82   }
83   dest--;
84   S3 = *dest;
85   dest--;
86   S2 = *dest;
87   dest--;
88   S1 = *dest;
89
90   if (!((S1 == 'y' && S2 == 'u' && S3 == 'v')
91         || (S1 == 'Y' && S2 == 'U' && S3 == 'V'))) {
92     fprintf(stderr,
93             "!! Unrecognized format for outfile : %c%c%c [accept only *.yuv] !!\n",
94             S1, S2, S3);
95     fprintf(stderr,
96             "usage: j2k-file image-file -reduce n (<- optional)\n\n");
97
98     return 1;
99   }
100
101   fseek(f, 0, SEEK_END);
102   len = ftell(f);
103   fseek(f, 0, SEEK_SET);
104   src = (char *) malloc(len);
105   fread(src, 1, len, f);
106   fclose(f);
107
108   src_name = argv[1];
109   while (*src_name) {
110     src_name++;
111   }
112   src_name--;
113   S3 = *src_name;
114   src_name--;
115   S2 = *src_name;
116   src_name--;
117   S1 = *src_name;
118
119   /* MJ2 format */
120   if ((S1 == 'm' && S2 == 'j' && S3 == '2')
121       || (S1 == 'M' && S2 == 'J' && S3 == '2')) {
122     mj2_movie.num_stk = 0;
123     mj2_movie.num_htk = 0;
124     mj2_movie.num_vtk = 0;
125     mj2_movie.mj2file = argv[1];
126     if (mj2_decode(src, len, &mj2_movie, &cp, argv[2])) {
127       fprintf(stderr, "mj2_to_frames: failed to decode image!\n");
128       return 1;
129     }
130     mj2_memory_free(&mj2_movie);
131   } else {
132     fprintf(stderr,
133             "mj2_to_frames : Unknown format image *.%c%c%c [only *.mj2]!! \n",
134             S1, S2, S3);
135     fprintf(stderr,
136             "usage: j2k-file image-file -reduce n (<- optional)\n\n");
137
138     return 1;
139   }
140
141   free(src);
142
143   return 0;
144 }