opj_j2k_check_poc_val(): fix starting index for checking layer dimension
[openjpeg.git] / src / lib / openjpip / ihdrbox_manager.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 <stdlib.h>
33 #include <assert.h>
34 #include "ihdrbox_manager.h"
35
36 ihdrbox_param_t * gene_ihdrbox(metadatalist_param_t *metadatalist,
37                                Byte_t *jpipstream)
38 {
39     ihdrbox_param_t *ihdrbox;
40     metadata_param_t *meta;
41     box_param_t *jp2h, *ihdr;
42     int bpc_val;
43
44     jp2h = NULL;
45     meta = metadatalist->first;
46     while (meta) {
47         if (meta->boxlist) {
48             jp2h = search_box("jp2h", meta->boxlist);
49             if (jp2h) {
50                 break;
51             }
52         }
53         meta = meta->next;
54     }
55     if (!jp2h) {
56         fprintf(stderr, "jp2h box not found\n");
57         return NULL;
58     }
59
60     ihdr = gene_boxbyTypeinStream(jpipstream, get_DBoxoff(jp2h), get_DBoxlen(jp2h),
61                                   "ihdr");
62
63     if (!ihdr) {
64         fprintf(stderr, "ihdr box not found\n");
65         return NULL;
66     }
67
68     ihdrbox = (ihdrbox_param_t *)malloc(sizeof(ihdrbox_param_t));
69
70     ihdrbox->height = big4(jpipstream + get_DBoxoff(ihdr));
71     ihdrbox->width  = big4(jpipstream + get_DBoxoff(ihdr) + 4);
72     ihdrbox->nc     = big2(jpipstream + get_DBoxoff(ihdr) + 8);
73     bpc_val = *(jpipstream + get_DBoxoff(ihdr) + 10) + 1;
74     assert(bpc_val >= 0 && bpc_val <= 255);
75     ihdrbox->bpc    = (Byte_t)bpc_val;
76
77     free(ihdr);
78
79     return ihdrbox;
80 }
81