jp3d/jpwl/mj2/jpip: Fix resource leaks (#1226)
[openjpeg.git] / src / bin / jpip / opj_jpip_transcode.c
1 /*
2  * $Id$
3  *
4  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
5  * Copyright (c) 2002-2014, Professor Benoit Macq
6  * Copyright (c) 2010-2011, Kaori Hagihara
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include <stdio.h>
32 #include "openjpip.h"
33
34 /*! \file
35  *  \brief jpip_to_jp2 is a program to convert JPT- JPP- stream to JP2 file
36  *
37  *  \section impinst Implementing instructions
38  *  This program takes two arguments. \n
39  *   -# Input JPT or JPP file
40  *   -# Output JP2 file\n
41  *   % ./jpip_to_jp2 input.jpt output.jp2
42  *   or
43  *   % ./jpip_to_jp2 input.jpp output.jp2
44  */
45 static int jpip_to_jp2(char *argv[])
46 {
47     jpip_dec_param_t *dec;
48
49     dec = init_jpipdecoder(OPJ_TRUE);
50
51     if (!(fread_jpip(argv[1], dec))) {
52         destroy_jpipdecoder(&dec);
53         return 1;
54     }
55
56     decode_jpip(dec);
57
58     if (!(fwrite_jp2k(argv[2], dec))) {
59         destroy_jpipdecoder(&dec);
60         return 1;
61     }
62
63     /* output_log( OPJ_TRUE, OPJ_FALSE, OPJ_TRUE, dec); */
64
65     destroy_jpipdecoder(&dec);
66
67     return 0;
68 }
69
70 /*! \file
71  *  \brief jpip_to_j2k is a program to convert JPT- JPP- stream to J2K file
72  *
73  *  \section impinst Implementing instructions
74  *  This program takes two arguments. \n
75  *   -# Input  JPT or JPP file
76  *   -# Output J2K file\n
77  *   % ./jpip_to_j2k input.jpt output.j2k
78  *   or
79  *   % ./jpip_to_j2k input.jpp output.j2k
80  */
81 static int jpip_to_j2k(char *argv[])
82 {
83     jpip_dec_param_t *dec;
84
85     dec = init_jpipdecoder(OPJ_FALSE);
86
87     if (!(fread_jpip(argv[1], dec))) {
88         destroy_jpipdecoder(&dec);
89         return 1;
90     }
91
92     decode_jpip(dec);
93
94     if (!(fwrite_jp2k(argv[2], dec))) {
95         destroy_jpipdecoder(&dec);
96         return 1;
97     }
98
99     /*  output_log( OPJ_TRUE, OPJ_FALSE, OPJ_FALSE, dec); */
100
101     destroy_jpipdecoder(&dec);
102
103     return 0;
104 }
105
106 int main(int argc, char *argv[])
107 {
108     char *ext;
109     if (argc < 3) {
110         fprintf(stderr, "Too few arguments:\n");
111         fprintf(stderr, " - input  jpt or jpp file\n");
112         fprintf(stderr, " - output j2k file\n");
113         return 1;
114     }
115
116     ext = strrchr(argv[2], '.');
117     if (ext) {
118         /* strcasecmp ? */
119         if (strcmp(ext, ".jp2") == 0) {
120             return jpip_to_jp2(argv);
121         }
122         if (strcmp(ext, ".j2k") == 0) {
123             return jpip_to_j2k(argv);
124         }
125     }
126
127     fprintf(stderr, "Invalid file extension for output file: %s\n", argv[2]);
128     return 1;
129 }