43 virtual int get_N_byte(uint8_t *buf, uint32_t length) = 0;
50 std::unique_ptr<uint8_t[]>
buf;
75 virtual int32_t
put_N_bytes(uint8_t *src, uint32_t length) = 0;
76 virtual int32_t
flush(std::ofstream &dst) = 0;
81 std::vector<uint8_t>
buf;
91 int32_t
flush(std::ofstream &dst)
override;
127 for (uint32_t i = 0; i < num; ++i) {
148 this->bits = bc.
bits;
149 this->node_buf.reserve(bc.
node_buf.size());
150 for (
size_t i = 0; i < bc.
node_buf.size(); ++i) {
151 this->node_buf.push_back(bc.
node_buf[i]);
239 for (
int i = 0; i < N; i++) {
242 cwd +=
static_cast<uint32_t
>(bit);
266 for (
size_t i = 0; i <
buf.size(); ++i) {
286 for (
int i = n - 1; n >= 0; --n) {
292 for (
int i = 0; i <
bits; ++i) {
333 void set_node(uint32_t l, uint32_t i, uint32_t pi) {
358 std::unique_ptr<tagtree_node[]>
node;
372 uint32_t num_nodes_current_level, width_current_level, height_current_level;
378 num_nodes_current_level = width_current_level * height_current_level;
380 width_current_level =
ceil_int(width_current_level, 2);
381 height_current_level =
ceil_int(height_current_level, 2);
382 if (num_nodes_current_level <= 1) {
392 uint32_t node_index = 0, parent_num = 0, depth =
level - 1;
393 uint32_t parent_index, row_parent_index;
397 current_node = &
node[node_index];
399 num_nodes_current_level = width_current_level * height_current_level;
400 if (num_nodes_current_level <= 1) {
403 parent_num += num_nodes_current_level;
404 row_parent_index = parent_num;
405 for (uint32_t i = 0; i < height_current_level; i++) {
406 parent_index = row_parent_index;
407 for (uint32_t j = 0; j < width_current_level; j++) {
408 current_node->
set_node(depth, node_index, parent_index);
409 parent_node = &
node[parent_index];
412 current_node = &
node[node_index];
414 if (j % 2 == 1 && j != width_current_level - 1) {
419 row_parent_index +=
ceil_int(width_current_level, 2);
422 width_current_level =
ceil_int(width_current_level, 2);
423 height_current_level =
ceil_int(height_current_level, 2);
428 current_node->
set_node(depth, node_index,
432 for (uint32_t i = 0; i < this->
num_nodes; ++i) {
439 uint16_t val = this->node[children[0]].get_value();
440 for (
int &j : children) {
441 uint16_t tmp = this->node[j].get_value();
442 val = (val > tmp) ? tmp : val;
Definition: codestream.hpp:96
uint8_t tmp_byte
Definition: codestream.hpp:106
void add_buf_node(uint8_t *buf, uint32_t len)
Definition: codestream.hpp:157
std::vector< uint32_t > node_length
Definition: codestream.hpp:101
uint8_t get_specific_byte(uint32_t bufpos)
Definition: codestream.hpp:188
buf_chain & operator=(const buf_chain &bc)
Definition: codestream.hpp:139
uint32_t node_pos
Definition: codestream.hpp:102
void flush_bits()
Definition: codestream.hpp:181
uint8_t last_byte
Definition: codestream.hpp:107
void check_last_FF()
Definition: codestream.hpp:182
uint32_t total_length
Definition: codestream.hpp:98
uint32_t num_nodes
Definition: codestream.hpp:99
uint8_t get_bit()
Definition: codestream.hpp:223
uint32_t pos
Definition: codestream.hpp:103
buf_chain(uint32_t num)
Definition: codestream.hpp:124
uint32_t current_length
Definition: codestream.hpp:105
void activate(int n)
Definition: codestream.hpp:174
buf_chain()
Definition: codestream.hpp:111
void set_buf_node(uint32_t index, uint8_t *buf, uint32_t len)
Definition: codestream.hpp:163
void copy_N_bytes(uint8_t *&buf, uint32_t N)
Definition: codestream.hpp:209
uint32_t get_total_length() const
Definition: codestream.hpp:187
uint8_t * get_current_address()
Definition: codestream.hpp:199
uint16_t get_word()
Definition: codestream.hpp:217
uint32_t get_N_bits(uint8_t N)
Definition: codestream.hpp:236
void activate()
Definition: codestream.hpp:168
std::vector< uint8_t * > node_buf
Definition: codestream.hpp:100
uint8_t get_byte()
Definition: codestream.hpp:189
uint8_t bits
Definition: codestream.hpp:108
uint8_t * current_buf
Definition: codestream.hpp:104
Definition: codestream.hpp:69
virtual int32_t put_N_bytes(uint8_t *src, uint32_t length)=0
virtual int32_t put_byte(uint8_t byte)=0
virtual ~j2c_destination_base()=default
virtual int32_t flush(std::ofstream &dst)=0
virtual int32_t put_word(uint16_t word)=0
virtual int32_t put_dword(uint32_t put_dword)=0
Definition: codestream.hpp:79
size_t get_length() const
~j2c_dst_memory() override=default
int32_t put_dword(uint32_t dword) override
uint32_t pos
Definition: codestream.hpp:82
int32_t put_N_bytes(uint8_t *src, uint32_t length) override
j2c_dst_memory()
Definition: codestream.hpp:85
int32_t put_byte(uint8_t byte) override
int32_t put_word(uint16_t word) override
int32_t flush(std::ofstream &dst) override
std::vector< uint8_t > buf
Definition: codestream.hpp:81
Definition: codestream.hpp:39
virtual uint8_t get_byte()=0
virtual ~j2c_source_base()=default
virtual int get_N_byte(uint8_t *buf, uint32_t length)=0
virtual uint16_t get_word()=0
Definition: codestream.hpp:48
int get_N_byte(uint8_t *buf, uint32_t length) override
Definition: codestream_source.cpp:48
uint32_t len
Definition: codestream.hpp:52
uint16_t get_word() override
Definition: codestream_source.cpp:55
uint8_t get_byte() override
Definition: codestream_source.cpp:38
int rewind_2bytes()
Definition: codestream_source.cpp:64
void alloc_memory(uint32_t length)
Definition: codestream_source.cpp:32
uint8_t * get_buf_pos()
Definition: codestream.hpp:64
std::unique_ptr< uint8_t[]> buf
Definition: codestream.hpp:50
j2c_src_memory()
Definition: codestream.hpp:55
uint32_t pos
Definition: codestream.hpp:51
int forward_Nbytes(uint32_t N)
Definition: codestream_source.cpp:73
Definition: codestream.hpp:311
std::vector< int32_t > child_index
Definition: codestream.hpp:316
int32_t index
Definition: codestream.hpp:314
uint16_t current_value
Definition: codestream.hpp:318
uint8_t level
Definition: codestream.hpp:313
bool is_set() const
Definition: codestream.hpp:352
uint8_t get_state() const
Definition: codestream.hpp:343
int32_t get_index() const
Definition: codestream.hpp:340
void add_child(int32_t val=0)
Definition: codestream.hpp:338
tagtree_node()
Definition: codestream.hpp:323
int32_t get_parent_index() const
Definition: codestream.hpp:341
std::vector< int32_t > get_child_index()
Definition: codestream.hpp:342
bool set_flag
Definition: codestream.hpp:320
uint16_t get_value() const
Definition: codestream.hpp:347
uint8_t state
Definition: codestream.hpp:317
uint8_t get_level() const
Definition: codestream.hpp:339
uint16_t get_current_value() const
Definition: codestream.hpp:345
void set_current_value(uint16_t cv)
Definition: codestream.hpp:346
void set_node(uint32_t l, uint32_t i, uint32_t pi)
Definition: codestream.hpp:333
void set_state(uint8_t s)
Definition: codestream.hpp:344
void set_value(uint16_t v)
Definition: codestream.hpp:348
uint16_t value
Definition: codestream.hpp:319
int32_t parent_index
Definition: codestream.hpp:315
Definition: codestream.hpp:355
uint32_t num_nodes
Definition: codestream.hpp:359
const uint32_t num_cblk_y
Definition: codestream.hpp:361
uint8_t level
Definition: codestream.hpp:357
tagtree(const uint32_t nx, const uint32_t ny)
Definition: codestream.hpp:371
void build() const
Definition: codestream.hpp:431
std::unique_ptr< tagtree_node[]> node
Definition: codestream.hpp:358
const uint32_t num_cblk_x
Definition: codestream.hpp:360
#define ceil_int(a, b)
Definition: utils.hpp:36