OpenJPH
Open-source implementation of JPEG2000 Part-15
Loading...
Searching...
No Matches
ojph_mem.cpp
Go to the documentation of this file.
1//***************************************************************************/
2// This software is released under the 2-Clause BSD license, included
3// below.
4//
5// Copyright (c) 2019, Aous Naman
6// Copyright (c) 2019, Kakadu Software Pty Ltd, Australia
7// Copyright (c) 2019, The University of New South Wales, Australia
8//
9// Redistribution and use in source and binary forms, with or without
10// modification, are permitted provided that the following conditions are
11// met:
12//
13// 1. Redistributions of source code must retain the above copyright
14// notice, this list of conditions and the following disclaimer.
15//
16// 2. Redistributions in binary form must reproduce the above copyright
17// notice, this list of conditions and the following disclaimer in the
18// documentation and/or other materials provided with the distribution.
19//
20// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
23// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
26// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31//***************************************************************************/
32// This file is part of the OpenJPH software implementation.
33// File: ojph_mem.cpp
34// Author: Aous Naman
35// Date: 28 August 2019
36//***************************************************************************/
37
38
39#include <new>
40#include "ojph_mem.h"
41
42namespace ojph {
43
45 //
46 //
47 //
48 //
49 //
51
53 template<>
54 void line_buf::finalize_alloc<si32>(mem_fixed_allocator *p)
55 {
56 assert(p != 0 && size != 0);
57 i32 = p->post_alloc_data<si32>(size, pre_size);
58 }
59
61 template<>
62 void line_buf::finalize_alloc<float>(mem_fixed_allocator *p)
63 {
64 assert(p != 0 && size != 0);
65 f32 = p->post_alloc_data<float>(size, pre_size);
66 }
67
69 template<>
70 void line_buf::finalize_alloc<si64>(mem_fixed_allocator *p)
71 {
72 assert(p != 0 && size != 0);
73 i64 = p->post_alloc_data<si64>(size, pre_size);
74 }
75
77 template<>
78 void line_buf::wrap(si32 *buffer, size_t num_ele, ui32 pre_size)
79 {
80 this->i32 = buffer;
81 this->size = num_ele;
82 this->pre_size = pre_size;
84 }
85
87 template<>
88 void line_buf::wrap(float *buffer, size_t num_ele, ui32 pre_size)
89 {
90 this->f32 = buffer;
91 this->size = num_ele;
92 this->pre_size = pre_size;
93 this->flags = LFT_32BIT;
94 }
95
97 template<>
98 void line_buf::wrap(si64 *buffer, size_t num_ele, ui32 pre_size)
99 {
100 this->i64 = buffer;
101 this->size = num_ele;
102 this->pre_size = pre_size;
104 }
105
107 //
108 //
109 //
110 //
111 //
113
116 {
117 ui32 extended_bytes = needed_bytes + (ui32)sizeof(coded_lists);
118
119 if (store == NULL)
120 {
121 ui32 bytes = ojph_max(extended_bytes, chunk_size);
122 ui32 store_bytes = stores_list::eval_store_bytes(bytes);
123 store = (stores_list*)malloc(store_bytes);
124 cur_store = store = new (store) stores_list(bytes);
125 total_allocated += store_bytes;
126 }
127
128 if (cur_store->available < extended_bytes)
129 {
130 ui32 bytes = ojph_max(extended_bytes, chunk_size);
131 ui32 store_bytes = stores_list::eval_store_bytes(bytes);
132 cur_store->next_store = (stores_list*)malloc(store_bytes);
134 total_allocated += store_bytes;
135 }
136
137 p = new (cur_store->data) coded_lists(needed_bytes);
138
139 assert(cur_store->available >= extended_bytes);
140 cur_store->available -= extended_bytes;
141 cur_store->data += extended_bytes;
142 }
143
144}
float * f32
Definition ojph_mem.h:174
void wrap(T *buffer, size_t num_ele, ui32 pre_size)
void get_buffer(ui32 needed_bytes, coded_lists *&p)
Definition ojph_mem.cpp:115
int64_t si64
Definition ojph_defs.h:57
int32_t si32
Definition ojph_defs.h:55
uint32_t ui32
Definition ojph_defs.h:54
#define ojph_max(a, b)
Definition ojph_defs.h:73
static ui32 eval_store_bytes(ui32 available_bytes)
Definition ojph_mem.h:235