use super::event::*;
use super::openjpeg::*;
use super::t1::*;
use super::t1_ht_luts::*;
use super::thread::*;
use super::malloc::*;
extern "C" {
fn memcpy(
_: *mut core::ffi::c_void,
_: *const core::ffi::c_void,
_: usize,
) -> *mut core::ffi::c_void;
fn memset(_: *mut core::ffi::c_void, _: core::ffi::c_int, _: usize) -> *mut core::ffi::c_void;
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct dec_mel {
pub data: *mut OPJ_UINT8,
pub tmp: OPJ_UINT64,
pub bits: core::ffi::c_int,
pub size: core::ffi::c_int,
pub unstuff: OPJ_BOOL,
pub k: core::ffi::c_int,
pub num_runs: core::ffi::c_int,
pub runs: OPJ_UINT64,
}
pub type dec_mel_t = dec_mel;
#[repr(C)]
#[derive(Copy, Clone)]
pub struct rev_struct {
pub data: *mut OPJ_UINT8,
pub tmp: OPJ_UINT64,
pub bits: OPJ_UINT32,
pub size: core::ffi::c_int,
pub unstuff: OPJ_BOOL,
}
pub type rev_struct_t = rev_struct;
#[repr(C)]
#[derive(Copy, Clone)]
pub struct frwd_struct {
pub data: *const OPJ_UINT8,
pub tmp: OPJ_UINT64,
pub bits: OPJ_UINT32,
pub unstuff: OPJ_BOOL,
pub size: core::ffi::c_int,
pub X: OPJ_UINT32,
}
pub type frwd_struct_t = frwd_struct;
static mut only_cleanup_pass_is_decoded: OPJ_BOOL = 0i32;
#[inline]
fn population_count(mut val: OPJ_UINT32) -> OPJ_UINT32 {
val.count_ones()
}
#[inline]
fn count_leading_zeros(mut val: OPJ_UINT32) -> OPJ_UINT32 {
val.leading_zeros()
}
#[inline]
unsafe fn read_le_uint32(mut dataIn: *const core::ffi::c_void) -> OPJ_UINT32 {
*(dataIn as *mut OPJ_UINT32)
}
#[inline]
unsafe fn mel_read(mut melp: *mut dec_mel_t) {
let mut val: OPJ_UINT32 = 0;
let mut bits: core::ffi::c_int = 0;
let mut t: OPJ_UINT32 = 0;
let mut unstuff: OPJ_BOOL = 0;
if (*melp).bits > 32i32 {
return;
} val = 0xffffffffu32;
if (*melp).size > 4i32 {
val = read_le_uint32((*melp).data as *const core::ffi::c_void); (*melp).data = (*melp).data.offset(4); (*melp).size -= 4i32
} else if (*melp).size > 0i32 {
let mut m: OPJ_UINT32 = 0; let mut v: OPJ_UINT32 = 0; let mut i = 0i32; while (*melp).size > 1i32 {
let fresh0 = (*melp).data;
(*melp).data = (*melp).data.offset(1);
let mut v_0 = *fresh0 as OPJ_UINT32;
let mut m_0 = !((0xffu32) << i);
val = val & m_0 | v_0 << i;
(*melp).size -= 1;
i += 8i32
}
let fresh1 = (*melp).data; (*melp).data = (*melp).data.offset(1); v = *fresh1 as OPJ_UINT32;
v |= 0xfu32;
m = !((0xffu32) << i);
val = val & m | v << i;
(*melp).size -= 1
}
bits = 32i32 - (*melp).unstuff; t = val & 0xffu32; unstuff = (val & 0xffu32 == 0xffu32) as core::ffi::c_int; bits -= unstuff; t <<= 8i32 - unstuff;
t |= val >> 8i32 & 0xffu32;
unstuff = (val >> 8i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
bits -= unstuff;
t <<= 8i32 - unstuff;
t |= val >> 16i32 & 0xffu32;
unstuff = (val >> 16i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
bits -= unstuff;
t <<= 8i32 - unstuff;
t |= val >> 24i32 & 0xffu32;
(*melp).unstuff = (val >> 24i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
(*melp).tmp |= (t as OPJ_UINT64) << (64i32 - bits - (*melp).bits);
(*melp).bits += bits;
}
#[inline]
unsafe fn mel_decode(mut melp: *mut dec_mel_t) {
const mel_exp: [core::ffi::c_int; 13] = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 4, 5];
if (*melp).bits < 6i32 {
mel_read(melp);
}
while (*melp).bits >= 6i32 && (*melp).num_runs < 8i32 {
let mut eval = mel_exp[(*melp).k as usize]; let mut run = 0i32;
if (*melp).tmp & (1u64) << 63i32 != 0 {
run = (1i32) << eval;
run -= 1; (*melp).k = if ((*melp).k + 1i32) < 12i32 {
((*melp).k) + 1i32
} else {
12i32
}; (*melp).tmp <<= 1i32; (*melp).bits -= 1i32;
run <<= 1i32
} else {
run = ((*melp).tmp >> (63i32 - eval)) as core::ffi::c_int & (((1i32) << eval) - 1i32);
(*melp).k = if (*melp).k - 1i32 > 0i32 {
((*melp).k) - 1i32
} else {
0i32
}; (*melp).tmp <<= eval + 1i32; (*melp).bits -= eval + 1i32; run = (run << 1i32) + 1i32
} eval = (*melp).num_runs * 7i32; (*melp).runs &= !((0x3f as OPJ_UINT64) << eval);
(*melp).runs |= (run as OPJ_UINT64) << eval;
(*melp).num_runs += 1
}
}
#[inline]
unsafe fn mel_init(
mut melp: *mut dec_mel_t,
mut bbuf: *mut OPJ_UINT8,
mut lcup: core::ffi::c_int,
mut scup: core::ffi::c_int,
) -> bool {
let mut num: core::ffi::c_int = 0; let mut i: core::ffi::c_int = 0; (*melp).data = bbuf.offset(lcup as isize).offset(-(scup as isize)); (*melp).bits = 0i32; (*melp).tmp = 0 as OPJ_UINT64; (*melp).unstuff = 0i32; (*melp).size = scup - 1i32; (*melp).k = 0i32; (*melp).num_runs = 0i32;
(*melp).runs = 0 as OPJ_UINT64;
num = 4i32 - ((*melp).data as usize & 0x3) as core::ffi::c_int;
i = 0i32;
while i < num {
let mut d: OPJ_UINT64 = 0; let mut d_bits: core::ffi::c_int = 0;
if (*melp).unstuff != 0i32 && *(*melp).data.offset(0) as core::ffi::c_int > 0x8fi32 {
return false;
}
d = if (*melp).size > 0i32 {
*(*melp).data as core::ffi::c_int
} else {
0xffi32
} as OPJ_UINT64;
if (*melp).size == 1i32 {
d |= 0xfu64
}
let fresh2 = (*melp).size; (*melp).size -= 1; (*melp).data = (*melp).data.offset((fresh2 > 0i32) as isize); d_bits = 8i32 - (*melp).unstuff; (*melp).tmp = (*melp).tmp << d_bits | d;
(*melp).bits += d_bits;
(*melp).unstuff = (d & 0xffu64 == 0xffu64) as core::ffi::c_int;
i += 1
}
(*melp).tmp <<= 64i32 - (*melp).bits;
true
}
#[inline]
unsafe fn mel_get_run(mut melp: *mut dec_mel_t) -> core::ffi::c_int {
let mut t: core::ffi::c_int = 0;
if (*melp).num_runs == 0i32 {
mel_decode(melp); } t = ((*melp).runs & 0x7fu64) as core::ffi::c_int;
(*melp).runs >>= 7i32;
(*melp).num_runs -= 1;
t
}
#[inline]
unsafe fn rev_read(mut vlcp: *mut rev_struct_t) {
let mut val: OPJ_UINT32 = 0;
let mut tmp: OPJ_UINT32 = 0;
let mut bits: OPJ_UINT32 = 0;
let mut unstuff: OPJ_BOOL = 0;
if (*vlcp).bits > 32u32 {
return;
}
val = 0 as OPJ_UINT32;
if (*vlcp).size > 3i32 {
val = read_le_uint32((*vlcp).data.offset(-3) as *const core::ffi::c_void); (*vlcp).data = (*vlcp).data.offset(-4); (*vlcp).size -= 4i32
} else if (*vlcp).size > 0i32 {
let mut i = 24i32; while (*vlcp).size > 0i32 {
let fresh3 = (*vlcp).data; (*vlcp).data = (*vlcp).data.offset(-1);
let mut v = *fresh3 as OPJ_UINT32;
val |= v << i;
(*vlcp).size -= 1;
i -= 8i32
}
}
tmp = val >> 24i32; bits = (8u32).wrapping_sub(
if (*vlcp).unstuff != 0 && val >> 24i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
); unstuff = (val >> 24i32 > 0x8fu32) as core::ffi::c_int; tmp |= (val >> 16i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val >> 16i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val >> 16i32 & 0xffu32 > 0x8fu32) as core::ffi::c_int;
tmp |= (val >> 8i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val >> 8i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val >> 8i32 & 0xffu32 > 0x8fu32) as core::ffi::c_int;
tmp |= (val & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val & 0xffu32 > 0x8fu32) as core::ffi::c_int;
(*vlcp).tmp |= (tmp as OPJ_UINT64) << (*vlcp).bits;
(*vlcp).bits = ((*vlcp).bits as core::ffi::c_uint).wrapping_add(bits) as OPJ_UINT32;
(*vlcp).unstuff = unstuff;
}
#[inline]
unsafe fn rev_init(
mut vlcp: *mut rev_struct_t,
mut data: *mut OPJ_UINT8,
mut lcup: core::ffi::c_int,
mut scup: core::ffi::c_int,
) {
let mut d: OPJ_UINT32 = 0;
let mut num: core::ffi::c_int = 0;
let mut tnum: core::ffi::c_int = 0;
let mut i: core::ffi::c_int = 0;
(*vlcp).data = data.offset(lcup as isize).offset(-2);
(*vlcp).size = scup - 2i32; let fresh4 = (*vlcp).data; (*vlcp).data = (*vlcp).data.offset(-1); d = *fresh4 as OPJ_UINT32; (*vlcp).tmp = (d >> 4i32) as OPJ_UINT64;
(*vlcp).bits = (4i32 - ((*vlcp).tmp & 7u64 == 7u64) as core::ffi::c_int) as OPJ_UINT32;
(*vlcp).unstuff = (d | 0xfu32 > 0x8fu32) as core::ffi::c_int;
num = 1i32 + ((*vlcp).data as usize & 0x3) as core::ffi::c_int;
tnum = if num < (*vlcp).size {
num
} else {
(*vlcp).size
};
i = 0i32;
while i < tnum {
let mut d_0: OPJ_UINT64 = 0;
let mut d_bits: OPJ_UINT32 = 0;
let fresh5 = (*vlcp).data; (*vlcp).data = (*vlcp).data.offset(-1);
d_0 = *fresh5 as OPJ_UINT64;
d_bits = (8u32).wrapping_sub(if (*vlcp).unstuff != 0 && d_0 & 0x7fu64 == 0x7fu64 {
1u32
} else {
0u32
});
(*vlcp).tmp |= d_0 << (*vlcp).bits;
(*vlcp).bits = ((*vlcp).bits as core::ffi::c_uint).wrapping_add(d_bits) as OPJ_UINT32;
(*vlcp).unstuff = (d_0 > 0x8fu64) as core::ffi::c_int;
i += 1
}
(*vlcp).size -= tnum;
rev_read(vlcp);
}
#[inline]
unsafe fn rev_fetch(mut vlcp: *mut rev_struct_t) -> OPJ_UINT32 {
if (*vlcp).bits < 32u32 {
rev_read(vlcp); if (*vlcp).bits < 32u32 {
rev_read(vlcp);
}
}
(*vlcp).tmp as OPJ_UINT32
}
#[inline]
unsafe fn rev_advance(mut vlcp: *mut rev_struct_t, mut num_bits: OPJ_UINT32) -> OPJ_UINT32 {
assert!(num_bits <= (*vlcp).bits); (*vlcp).tmp >>= num_bits; (*vlcp).bits = ((*vlcp).bits as core::ffi::c_uint).wrapping_sub(num_bits) as OPJ_UINT32;
(*vlcp).tmp as OPJ_UINT32
}
#[inline]
unsafe fn rev_read_mrp(mut mrp: *mut rev_struct_t) {
let mut val: OPJ_UINT32 = 0;
let mut tmp: OPJ_UINT32 = 0;
let mut bits: OPJ_UINT32 = 0;
let mut unstuff: OPJ_BOOL = 0;
if (*mrp).bits > 32u32 {
return;
}
val = 0 as OPJ_UINT32;
if (*mrp).size > 3i32 {
val = read_le_uint32((*mrp).data.offset(-3) as *const core::ffi::c_void); (*mrp).data = (*mrp).data.offset(-4); (*mrp).size -= 4i32
} else if (*mrp).size > 0i32 {
let mut i = 24i32; while (*mrp).size > 0i32 {
let fresh6 = (*mrp).data; (*mrp).data = (*mrp).data.offset(-1);
let mut v = *fresh6 as OPJ_UINT32;
val |= v << i;
(*mrp).size -= 1;
i -= 8i32
}
}
tmp = val >> 24i32;
bits = (8u32).wrapping_sub(
if (*mrp).unstuff != 0 && val >> 24i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
);
unstuff = (val >> 24i32 > 0x8fu32) as core::ffi::c_int;
tmp |= (val >> 16i32 & 0xffu32) << bits; bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val >> 16i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val >> 16i32 & 0xffu32 > 0x8fu32) as core::ffi::c_int;
tmp |= (val >> 8i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val >> 8i32 & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val >> 8i32 & 0xffu32 > 0x8fu32) as core::ffi::c_int;
tmp |= (val & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(
if unstuff != 0 && val & 0x7fu32 == 0x7fu32 {
1u32
} else {
0u32
},
)) as OPJ_UINT32;
unstuff = (val & 0xffu32 > 0x8fu32) as core::ffi::c_int;
(*mrp).tmp |= (tmp as OPJ_UINT64) << (*mrp).bits;
(*mrp).bits = ((*mrp).bits as core::ffi::c_uint).wrapping_add(bits) as OPJ_UINT32;
(*mrp).unstuff = unstuff;
}
#[inline]
unsafe fn rev_init_mrp(
mut mrp: *mut rev_struct_t,
mut data: *mut OPJ_UINT8,
mut lcup: core::ffi::c_int,
mut len2: core::ffi::c_int,
) {
let mut num: core::ffi::c_int = 0;
let mut i: core::ffi::c_int = 0;
(*mrp).data = data.offset(lcup as isize).offset(len2 as isize).offset(-1);
(*mrp).size = len2;
(*mrp).unstuff = 1i32;
(*mrp).bits = 0 as OPJ_UINT32;
(*mrp).tmp = 0 as OPJ_UINT64;
num = 1i32 + ((*mrp).data as usize & 0x3) as core::ffi::c_int;
i = 0i32;
while i < num {
let mut d: OPJ_UINT64 = 0;
let mut d_bits: OPJ_UINT32 = 0;
let fresh7 = (*mrp).size;
(*mrp).size -= 1;
d = if fresh7 > 0i32 {
let fresh8 = (*mrp).data;
(*mrp).data = (*mrp).data.offset(-1);
*fresh8 as core::ffi::c_int
} else {
0i32
} as OPJ_UINT64;
d_bits = (8u32).wrapping_sub(if (*mrp).unstuff != 0 && d & 0x7fu64 == 0x7fu64 {
1u32
} else {
0u32
});
(*mrp).tmp |= d << (*mrp).bits;
(*mrp).bits = ((*mrp).bits as core::ffi::c_uint).wrapping_add(d_bits) as OPJ_UINT32;
(*mrp).unstuff = (d > 0x8fu64) as core::ffi::c_int;
i += 1
}
rev_read_mrp(mrp);
}
#[inline]
unsafe fn rev_fetch_mrp(mut mrp: *mut rev_struct_t) -> OPJ_UINT32 {
if (*mrp).bits < 32u32 {
rev_read_mrp(mrp); if (*mrp).bits < 32u32 {
rev_read_mrp(mrp);
}
}
(*mrp).tmp as OPJ_UINT32
}
#[inline]
unsafe fn rev_advance_mrp(mut mrp: *mut rev_struct_t, mut num_bits: OPJ_UINT32) -> OPJ_UINT32 {
assert!(num_bits <= (*mrp).bits); (*mrp).tmp >>= num_bits;
(*mrp).bits = ((*mrp).bits as core::ffi::c_uint).wrapping_sub(num_bits) as OPJ_UINT32;
(*mrp).tmp as OPJ_UINT32
}
#[inline]
unsafe fn decode_init_uvlc(
mut vlc: OPJ_UINT32,
mut mode: OPJ_UINT32,
mut u: *mut OPJ_UINT32,
) -> OPJ_UINT32 {
static mut dec: [OPJ_UINT8; 8] = [
(3i32 | (5i32) << 2i32 | (5i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(2i32 | (2i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(3i32 | (1i32) << 2i32 | (3i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(2i32 | (2i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
];
let mut consumed_bits = 0 as OPJ_UINT32;
if mode == 0u32 {
let fresh9 = &mut (*u.offset(1));
*fresh9 = 1 as OPJ_UINT32;
*u.offset(0) = *fresh9
} else if mode <= 2u32 {
let mut d: OPJ_UINT32 = 0; let mut suffix_len: OPJ_UINT32 = 0; d = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d & 0x3u32) as OPJ_UINT32 as OPJ_UINT32;
suffix_len = d >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len) as OPJ_UINT32;
d = (d >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len).wrapping_sub(1u32));
*u.offset(0) = if mode == 1u32 {
d.wrapping_add(1u32)
} else {
1u32
};
*u.offset(1) = if mode == 1u32 {
1u32
} else {
d.wrapping_add(1u32)
}
} else if mode == 3u32 {
let mut d1 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d1 & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d1 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32;
if d1 & 0x3u32 > 2u32 {
let mut suffix_len_0: OPJ_UINT32 = 0;
*u.offset(1) = (vlc & 1u32).wrapping_add(1u32).wrapping_add(1u32);
consumed_bits = consumed_bits.wrapping_add(1);
vlc >>= 1i32;
suffix_len_0 = d1 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_0) as OPJ_UINT32;
d1 = (d1 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_0).wrapping_sub(1u32));
*u.offset(0) = d1.wrapping_add(1u32)
} else {
let mut d2: OPJ_UINT32 = 0;
let mut suffix_len_1: OPJ_UINT32 = 0;
d2 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d2 & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d2 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32; suffix_len_1 = d1 >> 2i32 & 0x7u32; consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_1) as OPJ_UINT32; d1 = (d1 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_1).wrapping_sub(1u32));
*u.offset(0) = d1.wrapping_add(1u32);
vlc >>= suffix_len_1;
suffix_len_1 = d2 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_1) as OPJ_UINT32;
d2 = (d2 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_1).wrapping_sub(1u32));
*u.offset(1) = d2.wrapping_add(1u32)
}
} else if mode == 4u32 {
let mut d1_0: OPJ_UINT32 = 0; let mut d2_0: OPJ_UINT32 = 0; let mut suffix_len_2: OPJ_UINT32 = 0; d1_0 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d1_0 & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d1_0 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32; d2_0 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d2_0 & 0x3u32;
consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d2_0 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32;
suffix_len_2 = d1_0 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_2) as OPJ_UINT32;
d1_0 = (d1_0 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_2).wrapping_sub(1u32));
*u.offset(0) = d1_0.wrapping_add(3u32);
vlc >>= suffix_len_2;
suffix_len_2 = d2_0 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_2) as OPJ_UINT32;
d2_0 = (d2_0 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_2).wrapping_sub(1u32));
*u.offset(1) = d2_0.wrapping_add(3u32)
}
consumed_bits
}
#[inline]
unsafe fn decode_noninit_uvlc(
mut vlc: OPJ_UINT32,
mut mode: OPJ_UINT32,
mut u: *mut OPJ_UINT32,
) -> OPJ_UINT32 {
static mut dec: [OPJ_UINT8; 8] = [
(3i32 | (5i32) << 2i32 | (5i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(2i32 | (2i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(3i32 | (1i32) << 2i32 | (3i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
(2i32 | (2i32) << 5i32) as OPJ_UINT8,
(1i32 | (1i32) << 5i32) as OPJ_UINT8,
];
let mut consumed_bits = 0 as OPJ_UINT32;
if mode == 0u32 {
let fresh10 = &mut (*u.offset(1));
*fresh10 = 1 as OPJ_UINT32;
*u.offset(0) = *fresh10
} else if mode <= 2u32 {
let mut d: OPJ_UINT32 = 0; let mut suffix_len: OPJ_UINT32 = 0; d = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d & 0x3u32) as OPJ_UINT32 as OPJ_UINT32;
suffix_len = d >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len) as OPJ_UINT32;
d = (d >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len).wrapping_sub(1u32));
*u.offset(0) = if mode == 1u32 {
d.wrapping_add(1u32)
} else {
1u32
};
*u.offset(1) = if mode == 1u32 {
1u32
} else {
d.wrapping_add(1u32)
}
} else if mode == 3u32 {
let mut d1: OPJ_UINT32 = 0; let mut d2: OPJ_UINT32 = 0; let mut suffix_len_0: OPJ_UINT32 = 0; d1 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d1 & 0x3u32; consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d1 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32; d2 = dec[(vlc & 0x7u32) as usize] as OPJ_UINT32; vlc >>= d2 & 0x3u32;
consumed_bits =
(consumed_bits as core::ffi::c_uint).wrapping_add(d2 & 0x3u32) as OPJ_UINT32 as OPJ_UINT32;
suffix_len_0 = d1 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_0) as OPJ_UINT32;
d1 = (d1 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_0).wrapping_sub(1u32));
*u.offset(0) = d1.wrapping_add(1u32);
vlc >>= suffix_len_0;
suffix_len_0 = d2 >> 2i32 & 0x7u32;
consumed_bits = (consumed_bits as core::ffi::c_uint).wrapping_add(suffix_len_0) as OPJ_UINT32;
d2 = (d2 >> 5i32).wrapping_add(vlc & ((1u32) << suffix_len_0).wrapping_sub(1u32));
*u.offset(1) = d2.wrapping_add(1u32)
}
consumed_bits
}
#[inline]
unsafe fn frwd_read(mut msp: *mut frwd_struct_t) {
let mut val: OPJ_UINT32 = 0; let mut bits: OPJ_UINT32 = 0; let mut t: OPJ_UINT32 = 0;
let mut unstuff: OPJ_BOOL = 0;
assert!((*msp).bits <= 32u32);
val = 0u32;
if (*msp).size > 3i32 {
val = read_le_uint32((*msp).data as *const core::ffi::c_void);
(*msp).data = (*msp).data.offset(4); (*msp).size -= 4i32
} else if (*msp).size > 0i32 {
let mut i = 0i32; val = if (*msp).X != 0u32 {
0xffffffffu32
} else {
0u32
}; while (*msp).size > 0i32 {
let fresh11 = (*msp).data; (*msp).data = (*msp).data.offset(1);
let mut v = *fresh11 as OPJ_UINT32;
let mut m = !((0xffu32) << i);
val = val & m | v << i;
(*msp).size -= 1;
i += 8i32
}
} else {
val = if (*msp).X != 0u32 {
0xffffffffu32
} else {
0u32
}
}
bits = (8u32).wrapping_sub(if (*msp).unstuff != 0 { 1u32 } else { 0u32 }); t = val & 0xffu32; unstuff = (val & 0xffu32 == 0xffu32) as core::ffi::c_int; t |= (val >> 8i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(if unstuff != 0 {
1u32
} else {
0u32
})) as OPJ_UINT32;
unstuff = (val >> 8i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
t |= (val >> 16i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(if unstuff != 0 {
1u32
} else {
0u32
})) as OPJ_UINT32;
unstuff = (val >> 16i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
t |= (val >> 24i32 & 0xffu32) << bits;
bits = (bits as core::ffi::c_uint).wrapping_add((8u32).wrapping_sub(if unstuff != 0 {
1u32
} else {
0u32
})) as OPJ_UINT32;
(*msp).unstuff = (val >> 24i32 & 0xffu32 == 0xffu32) as core::ffi::c_int;
(*msp).tmp |= (t as OPJ_UINT64) << (*msp).bits;
(*msp).bits = ((*msp).bits as core::ffi::c_uint).wrapping_add(bits) as OPJ_UINT32;
}
#[inline]
unsafe fn frwd_init(
mut msp: *mut frwd_struct_t,
mut data: *const OPJ_UINT8,
mut size: core::ffi::c_int,
mut X: OPJ_UINT32,
) {
let mut num: core::ffi::c_int = 0;
let mut i: core::ffi::c_int = 0;
(*msp).data = data;
(*msp).tmp = 0 as OPJ_UINT64;
(*msp).bits = 0 as OPJ_UINT32;
(*msp).unstuff = 0i32;
(*msp).size = size;
(*msp).X = X;
assert!((*msp).X == 0u32 || (*msp).X == 0xffu32);
num = 4i32 - ((*msp).data as usize & 0x3) as core::ffi::c_int;
i = 0i32;
while i < num {
let mut d: OPJ_UINT64 = 0;
let fresh12 = (*msp).size;
(*msp).size -= 1;
d = if fresh12 > 0i32 {
let fresh13 = (*msp).data;
(*msp).data = (*msp).data.offset(1);
*fresh13 as core::ffi::c_uint
} else {
(*msp).X
} as OPJ_UINT64;
(*msp).tmp |= d << (*msp).bits;
(*msp).bits = ((*msp).bits as core::ffi::c_uint)
.wrapping_add((8u32).wrapping_sub(if (*msp).unstuff != 0 { 1u32 } else { 0u32 }))
as OPJ_UINT32;
(*msp).unstuff = (d & 0xffu64 == 0xffu64) as core::ffi::c_int;
i += 1
}
frwd_read(msp);
}
#[inline]
unsafe fn frwd_advance(mut msp: *mut frwd_struct_t, mut num_bits: OPJ_UINT32) {
assert!(num_bits <= (*msp).bits);
(*msp).tmp >>= num_bits;
(*msp).bits = ((*msp).bits as core::ffi::c_uint).wrapping_sub(num_bits) as OPJ_UINT32;
}
#[inline]
unsafe fn frwd_fetch(mut msp: *mut frwd_struct_t) -> OPJ_UINT32 {
if (*msp).bits < 32u32 {
frwd_read(msp);
if (*msp).bits < 32u32 {
frwd_read(msp);
}
}
(*msp).tmp as OPJ_UINT32
}
unsafe fn opj_t1_allocate_buffers(
mut t1: &mut opj_t1_t,
mut w: OPJ_UINT32,
mut h: OPJ_UINT32,
) -> OPJ_BOOL {
let mut flagssize: usize = 0;
assert!(w <= 1024u32);
assert!(h <= 1024u32);
assert!(w.wrapping_mul(h) <= 4096u32);
let datasize = w * h;
t1.data.resize(datasize as usize);
flagssize = 132usize * core::mem::size_of::<OPJ_UINT32>() * 4; flagssize += 528; t1.flags.resize(flagssize);
t1.w = w;
t1.h = h;
1i32
}
pub(crate) unsafe fn opj_t1_ht_decode_cblk(
mut t1: &mut opj_t1_t,
mut cblk: *mut opj_tcd_cblk_dec_t,
mut _orient: OPJ_UINT32,
mut roishift: OPJ_UINT32,
mut cblksty: OPJ_UINT32,
mut p_manager: &mut opj_event_mgr,
mut p_manager_mutex: *mut opj_mutex_t,
mut _check_pterm: OPJ_BOOL,
) -> OPJ_BOOL {
let mut cblkdata = std::ptr::null_mut::<OPJ_BYTE>(); let mut coded_data = std::ptr::null_mut::<OPJ_UINT8>(); let mut decoded_data = std::ptr::null_mut::<OPJ_UINT32>();
let mut zero_bplanes: OPJ_UINT32 = 0;
let mut num_passes: OPJ_UINT32 = 0;
let mut lengths1: OPJ_UINT32 = 0;
let mut lengths2: OPJ_UINT32 = 0;
let mut width: OPJ_INT32 = 0;
let mut height: OPJ_INT32 = 0;
let mut stride: OPJ_INT32 = 0;
let mut pflags = std::ptr::null_mut::<OPJ_UINT32>();
let mut sigma1 = std::ptr::null_mut::<OPJ_UINT32>();
let mut sigma2 = std::ptr::null_mut::<OPJ_UINT32>();
let mut mbr1 = std::ptr::null_mut::<OPJ_UINT32>();
let mut mbr2 = std::ptr::null_mut::<OPJ_UINT32>();
let mut sip = std::ptr::null_mut::<OPJ_UINT32>();
let mut sip_shift: OPJ_UINT32 = 0;
let mut p: OPJ_UINT32 = 0;
let mut zero_bplanes_p1: OPJ_UINT32 = 0;
let mut lcup: core::ffi::c_int = 0;
let mut scup: core::ffi::c_int = 0;
let mut mel = dec_mel_t {
data: std::ptr::null_mut::<OPJ_UINT8>(),
tmp: 0,
bits: 0,
size: 0,
unstuff: 0,
k: 0,
num_runs: 0,
runs: 0,
};
let mut vlc = rev_struct_t {
data: std::ptr::null_mut::<OPJ_UINT8>(),
tmp: 0,
bits: 0,
size: 0,
unstuff: 0,
};
let mut magsgn = frwd_struct_t {
data: std::ptr::null::<OPJ_UINT8>(),
tmp: 0,
bits: 0,
unstuff: 0,
size: 0,
X: 0,
};
let mut sigprop = frwd_struct_t {
data: std::ptr::null::<OPJ_UINT8>(),
tmp: 0,
bits: 0,
unstuff: 0,
size: 0,
X: 0,
};
let mut magref = rev_struct_t {
data: std::ptr::null_mut::<OPJ_UINT8>(),
tmp: 0,
bits: 0,
size: 0,
unstuff: 0,
};
let mut lsp = std::ptr::null_mut::<OPJ_UINT8>();
let mut line_state = std::ptr::null_mut::<OPJ_UINT8>();
let mut run: core::ffi::c_int = 0;
let mut vlc_val: OPJ_UINT32 = 0;
let mut qinf: [OPJ_UINT32; 2] = [0; 2];
let mut c_q: OPJ_UINT32 = 0;
let mut sp = std::ptr::null_mut::<OPJ_UINT32>();
let mut x: OPJ_INT32 = 0;
let mut y: OPJ_INT32 = 0;
let mut stripe_causal = (cblksty & 0x8u32 != 0u32) as core::ffi::c_int;
let mut cblk_len = 0 as OPJ_UINT32;
if roishift != 0u32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(
p_manager,
EVT_ERROR,
"We do not support ROI in decoding HT codeblocks\n",
);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if opj_t1_allocate_buffers(
t1,
((*cblk).x1 - (*cblk).x0) as OPJ_UINT32,
((*cblk).y1 - (*cblk).y0) as OPJ_UINT32,
) == 0
{
return 0i32;
}
if (*cblk).Mb == 0u32 {
return 1i32;
}
zero_bplanes = (*cblk).Mb.wrapping_add(1u32).wrapping_sub((*cblk).numbps);
cblk_len = 0 as OPJ_UINT32;
let mut i: OPJ_UINT32 = 0;
i = 0 as OPJ_UINT32;
while i < (*cblk).numchunks {
cblk_len = (cblk_len as core::ffi::c_uint)
.wrapping_add((*(*cblk).chunks.offset(i as isize)).len) as OPJ_UINT32;
i += 1;
}
if (*cblk).numchunks > 1u32 || t1.mustuse_cblkdatabuffer != 0 {
let mut i_0: OPJ_UINT32 = 0;
if cblk_len > t1.cblkdatabuffersize {
cblkdata = opj_realloc(
t1.cblkdatabuffer as *mut core::ffi::c_void,
cblk_len as size_t,
) as *mut OPJ_BYTE;
if cblkdata.is_null() {
return 0i32;
}
t1.cblkdatabuffer = cblkdata;
t1.cblkdatabuffersize = cblk_len
}
cblkdata = t1.cblkdatabuffer;
if cblkdata.is_null() {
return 0i32;
}
cblk_len = 0 as OPJ_UINT32;
i_0 = 0 as OPJ_UINT32;
while i_0 < (*cblk).numchunks {
memcpy(
cblkdata.offset(cblk_len as isize) as *mut core::ffi::c_void,
(*(*cblk).chunks.offset(i_0 as isize)).data as *const core::ffi::c_void,
(*(*cblk).chunks.offset(i_0 as isize)).len as usize,
);
cblk_len = (cblk_len as core::ffi::c_uint)
.wrapping_add((*(*cblk).chunks.offset(i_0 as isize)).len) as OPJ_UINT32;
i_0 += 1;
}
} else if (*cblk).numchunks == 1u32 {
cblkdata = (*(*cblk).chunks.offset(0)).data
} else {
return 1i32;
}
coded_data = cblkdata;
decoded_data = t1.data.as_mut_ptr() as *mut OPJ_UINT32;
num_passes = if (*cblk).numsegs > 0u32 {
(*(*cblk).segs.offset(0)).real_num_passes
} else {
0u32
};
num_passes = (num_passes as core::ffi::c_uint).wrapping_add(if (*cblk).numsegs > 1u32 {
(*(*cblk).segs.offset(1)).real_num_passes
} else {
0u32
}) as OPJ_UINT32;
lengths1 = if num_passes > 0u32 {
(*(*cblk).segs.offset(0)).len
} else {
0u32
};
lengths2 = if num_passes > 1u32 {
(*(*cblk).segs.offset(1)).len
} else {
0u32
};
width = (*cblk).x1 - (*cblk).x0;
height = (*cblk).y1 - (*cblk).y0;
stride = width;
pflags = t1.flags.as_mut_ptr() as *mut OPJ_UINT32;
sigma1 = pflags;
sigma2 = sigma1.offset(132);
mbr1 = sigma2.offset(132);
mbr2 = mbr1.offset(132);
sip = sigma1; sip_shift = 0 as OPJ_UINT32; if num_passes > 1u32 && lengths2 == 0u32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_WARNING,
"A malformed codeblock that has more than one coding pass, but zero length for 2nd and potentially the 3rd pass in an HT codeblock.\n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
num_passes = 1 as OPJ_UINT32
}
if num_passes > 3u32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"We do not support more than 3 coding passes in an HT codeblock; This codeblocks has %d passes.\n", num_passes);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if (*cblk).Mb > 30u32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"32 bits are not enough to decode this codeblock, since the number of bitplane, %d, is larger than 30.\n", (*cblk).Mb);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if zero_bplanes > (*cblk).Mb {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. Decoding this codeblock is stopped. There are %d zero bitplanes in %d bitplanes.\n", zero_bplanes,
(*cblk).Mb);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
} else if zero_bplanes == (*cblk).Mb && num_passes > 1u32 {
if only_cleanup_pass_is_decoded == 0i32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
if only_cleanup_pass_is_decoded == 0i32 {
only_cleanup_pass_is_decoded = 1i32;
event_msg!(p_manager, EVT_WARNING,
"Malformed HT codeblock. When the number of zero planes bitplanes is equal to the number of bitplanes, only the cleanup pass makes sense, but we have %d passes in this codeblock. Therefore, only the cleanup pass will be decoded. This message will not be displayed again.\n",
num_passes);
}
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
}
num_passes = 1 as OPJ_UINT32
}
p = (*cblk).numbps;
zero_bplanes_p1 = zero_bplanes.wrapping_add(1u32);
if lengths1 < 2u32 || lengths1 > cblk_len || lengths1.wrapping_add(lengths2) > cblk_len {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(
p_manager,
EVT_ERROR,
"Malformed HT codeblock. Invalid codeblock length values.\n",
);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
lcup = lengths1 as core::ffi::c_int; scup = ((*coded_data.offset((lcup - 1i32) as isize) as core::ffi::c_int) << 4i32)
+ (*coded_data.offset((lcup - 2i32) as isize) as core::ffi::c_int & 0xfi32);
if scup < 2i32 || scup > lcup || scup > 4079i32 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. One of the following condition is not met: 2 <= Scup <= min(Lcup, 4079)\n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if !mel_init(&mut mel, coded_data, lcup, scup) {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(
p_manager,
EVT_ERROR,
"Malformed HT codeblock. Incorrect MEL segment sequence.\n"
);
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
rev_init(&mut vlc, coded_data, lcup, scup);
frwd_init(&mut magsgn, coded_data, lcup - scup, 0xff as OPJ_UINT32);
if num_passes > 1u32 {
frwd_init(
&mut sigprop,
coded_data.offset(lengths1 as isize),
lengths2 as core::ffi::c_int,
0 as OPJ_UINT32,
);
}
if num_passes > 2u32 {
rev_init_mrp(
&mut magref,
coded_data,
lengths1 as core::ffi::c_int,
lengths2 as core::ffi::c_int,
);
}
line_state = mbr2.offset(132) as *mut OPJ_UINT8;
lsp = line_state; *lsp.offset(0) = 0 as OPJ_UINT8; run = mel_get_run(&mut mel); qinf[1_usize] = 0 as OPJ_UINT32; qinf[0_usize] = qinf[1_usize]; c_q = 0 as OPJ_UINT32; sp = decoded_data;
x = 0i32;
while x < width {
let mut U_q: [OPJ_UINT32; 2] = [0; 2]; let mut uvlc_mode: OPJ_UINT32 = 0;
let mut consumed_bits: OPJ_UINT32 = 0;
let mut m_n: OPJ_UINT32 = 0;
let mut v_n: OPJ_UINT32 = 0;
let mut ms_val: OPJ_UINT32 = 0;
let mut locs: OPJ_UINT32 = 0;
vlc_val = rev_fetch(&mut vlc);
qinf[0_usize] = vlc_tbl0[(c_q << 7i32 | vlc_val & 0x7fu32) as usize] as OPJ_UINT32;
if c_q == 0u32 {
run -= 2i32; qinf[0_usize] = if run == -(1i32) { qinf[0_usize] } else { 0u32 };
if run < 0i32 {
run = mel_get_run(&mut mel)
}
}
c_q = (qinf[0_usize] & 0x10u32) >> 4i32 | (qinf[0_usize] & 0xe0u32) >> 5i32;
vlc_val = rev_advance(&mut vlc, qinf[0_usize] & 0x7u32);
*sip |= ((qinf[0_usize] & 0x30u32) >> 4i32 | (qinf[0_usize] & 0xc0u32) >> 2i32) << sip_shift;
qinf[1_usize] = 0 as OPJ_UINT32;
if (x + 2i32) < width {
qinf[1_usize] = vlc_tbl0[(c_q << 7i32 | vlc_val & 0x7fu32) as usize] as OPJ_UINT32;
if c_q == 0u32 {
run -= 2i32; qinf[1_usize] = if run == -(1i32) { qinf[1_usize] } else { 0u32 };
if run < 0i32 {
run = mel_get_run(&mut mel)
}
}
c_q = (qinf[1_usize] & 0x10u32) >> 4i32 | (qinf[1_usize] & 0xe0u32) >> 5i32;
vlc_val = rev_advance(&mut vlc, qinf[1_usize] & 0x7u32)
}
*sip |= (qinf[1_usize] & 0x30u32 | (qinf[1_usize] & 0xc0u32) << 2i32)
<< (4u32).wrapping_add(sip_shift); sip = sip.offset(if x & 0x7i32 != 0 { 1i32 } else { 0i32 } as isize); sip_shift ^= 0x10u32;
uvlc_mode = (qinf[0_usize] & 0x8u32) >> 3i32 | (qinf[1_usize] & 0x8u32) >> 2i32;
if uvlc_mode == 3u32 {
run -= 2i32; uvlc_mode =
(uvlc_mode as core::ffi::c_uint)
.wrapping_add(if run == -(1i32) { 1i32 } else { 0i32 } as core::ffi::c_uint)
as OPJ_UINT32; if run < 0i32 {
run = mel_get_run(&mut mel)
}
}
consumed_bits = decode_init_uvlc(vlc_val, uvlc_mode, U_q.as_mut_ptr());
if U_q[0_usize] > zero_bplanes_p1 || U_q[1_usize] > zero_bplanes_p1 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. Decoding this codeblock is stopped. U_q is larger than zero bitplanes + 1 \n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
vlc_val = rev_advance(&mut vlc, consumed_bits);
locs = 0xff as OPJ_UINT32;
if x + 4i32 > width {
locs >>= (x + 4i32 - width) << 1i32
} locs = if height > 1i32 {
locs
} else {
(locs) & 0x55u32
};
if ((qinf[0_usize] & 0xf0u32) >> 4i32 | qinf[1_usize] & 0xf0u32) & !locs != 0 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. VLC code produces significant samples outside the codeblock area.\n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if qinf[0_usize] & 0x10u32 != 0 {
let mut val: OPJ_UINT32 = 0; ms_val = frwd_fetch(&mut magsgn); m_n = U_q[0_usize].wrapping_sub(qinf[0_usize] >> 12i32 & 1u32);
frwd_advance(&mut magsgn, m_n); val = ms_val << 31i32; v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32); v_n |= ((qinf[0_usize] & 0x100u32) >> 8i32) << m_n; v_n |= 1u32; *sp.offset(0) = val | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs & 0x1u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[0_usize] & 0x20u32 != 0 {
let mut val_0: OPJ_UINT32 = 0; let mut t: OPJ_UINT32 = 0; ms_val = frwd_fetch(&mut magsgn); m_n = U_q[0_usize].wrapping_sub(qinf[0_usize] >> 13i32 & 1u32); frwd_advance(&mut magsgn, m_n); val_0 = ms_val << 31i32; v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32); v_n |= ((qinf[0_usize] & 0x200u32) >> 9i32) << m_n;
v_n |= 1u32;
*sp.offset(stride as isize) = val_0 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32);
t = (*lsp.offset(0) as core::ffi::c_int & 0x7fi32) as OPJ_UINT32; v_n = (32u32).wrapping_sub(count_leading_zeros(v_n));
*lsp.offset(0) = (0x80u32 | (if t > v_n { t } else { v_n })) as OPJ_UINT8
} else if locs & 0x2u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
} lsp = lsp.offset(1); sp = sp.offset(1);
if qinf[0_usize] & 0x40u32 != 0 {
let mut val_1: OPJ_UINT32 = 0; ms_val = frwd_fetch(&mut magsgn); m_n = U_q[0_usize].wrapping_sub(qinf[0_usize] >> 14i32 & 1u32);
frwd_advance(&mut magsgn, m_n);
val_1 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[0_usize] & 0x400u32) >> 10i32) << m_n;
v_n |= 1u32;
*sp.offset(0) = val_1 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs & 0x4u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
*lsp.offset(0) = 0 as OPJ_UINT8;
if qinf[0_usize] & 0x80u32 != 0 {
let mut val_2: OPJ_UINT32 = 0;
ms_val = frwd_fetch(&mut magsgn);
m_n = U_q[0_usize].wrapping_sub(qinf[0_usize] >> 15i32 & 1u32);
frwd_advance(&mut magsgn, m_n);
val_2 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[0_usize] & 0x800u32) >> 11i32) << m_n;
v_n |= 1u32;
*sp.offset(stride as isize) = val_2 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32);
*lsp.offset(0) = (0x80u32 | (32u32).wrapping_sub(count_leading_zeros(v_n))) as OPJ_UINT8
} else if locs & 0x8u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
} sp = sp.offset(1);
if qinf[1_usize] & 0x10u32 != 0 {
let mut val_3: OPJ_UINT32 = 0; ms_val = frwd_fetch(&mut magsgn);
m_n = U_q[1_usize].wrapping_sub(qinf[1_usize] >> 12i32 & 1u32);
frwd_advance(&mut magsgn, m_n);
val_3 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[1_usize] & 0x100u32) >> 8i32) << m_n;
v_n |= 1u32;
*sp.offset(0) = val_3 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs & 0x10u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[1_usize] & 0x20u32 != 0 {
let mut val_4: OPJ_UINT32 = 0;
let mut t_0: OPJ_UINT32 = 0;
ms_val = frwd_fetch(&mut magsgn);
m_n = U_q[1_usize].wrapping_sub(qinf[1_usize] >> 13i32 & 1u32); frwd_advance(&mut magsgn, m_n);
val_4 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[1_usize] & 0x200u32) >> 9i32) << m_n;
v_n |= 1u32;
*sp.offset(stride as isize) = val_4 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32);
t_0 = (*lsp.offset(0) as core::ffi::c_int & 0x7fi32) as OPJ_UINT32;
v_n = (32u32).wrapping_sub(count_leading_zeros(v_n));
*lsp.offset(0) = (0x80u32 | (if t_0 > v_n { t_0 } else { v_n })) as OPJ_UINT8
} else if locs & 0x20u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
} lsp = lsp.offset(1); sp = sp.offset(1); if qinf[1_usize] & 0x40u32 != 0 {
let mut val_5: OPJ_UINT32 = 0; ms_val = frwd_fetch(&mut magsgn); m_n = U_q[1_usize].wrapping_sub(qinf[1_usize] >> 14i32 & 1u32);
frwd_advance(&mut magsgn, m_n);
val_5 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[1_usize] & 0x400u32) >> 10i32) << m_n;
v_n |= 1u32;
*sp.offset(0) = val_5 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs & 0x40u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
*lsp.offset(0) = 0 as OPJ_UINT8;
if qinf[1_usize] & 0x80u32 != 0 {
let mut val_6: OPJ_UINT32 = 0;
ms_val = frwd_fetch(&mut magsgn);
m_n = U_q[1_usize].wrapping_sub(qinf[1_usize] >> 15i32 & 1u32);
frwd_advance(&mut magsgn, m_n);
val_6 = ms_val << 31i32;
v_n = ms_val & ((1u32) << m_n).wrapping_sub(1u32);
v_n |= ((qinf[1_usize] & 0x800u32) >> 11i32) << m_n;
v_n |= 1u32;
*sp.offset(stride as isize) = val_6 | v_n.wrapping_add(2u32) << p.wrapping_sub(1u32);
*lsp.offset(0) = (0x80u32 | (32u32).wrapping_sub(count_leading_zeros(v_n))) as OPJ_UINT8
} else if locs & 0x80u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
}
sp = sp.offset(1);
x += 4i32
}
y = 2i32;
while y < height {
let mut sip_0 = std::ptr::null_mut::<OPJ_UINT32>(); let mut ls0: OPJ_UINT8 = 0; let mut x_0: OPJ_INT32 = 0; sip_shift ^= 0x2u32; sip_shift &= 0xffffffefu32; sip_0 = if y & 0x4i32 != 0 { sigma2 } else { sigma1 }; lsp = line_state; ls0 = *lsp.offset(0);
*lsp.offset(0) = 0 as OPJ_UINT8;
sp = decoded_data.offset((y * stride) as isize);
c_q = 0 as OPJ_UINT32;
x_0 = 0i32;
while x_0 < width {
let mut U_q_0: [OPJ_UINT32; 2] = [0; 2];
let mut uvlc_mode_0: OPJ_UINT32 = 0;
let mut consumed_bits_0: OPJ_UINT32 = 0;
let mut m_n_0: OPJ_UINT32 = 0;
let mut v_n_0: OPJ_UINT32 = 0;
let mut ms_val_0: OPJ_UINT32 = 0;
let mut locs_0: OPJ_UINT32 = 0;
c_q |= (ls0 as core::ffi::c_int >> 7i32) as core::ffi::c_uint; c_q |= (*lsp.offset(1) as core::ffi::c_int >> 5i32 & 0x4i32) as core::ffi::c_uint; vlc_val = rev_fetch(&mut vlc);
qinf[0_usize] = vlc_tbl1[(c_q << 7i32 | vlc_val & 0x7fu32) as usize] as OPJ_UINT32;
if c_q == 0u32 {
run -= 2i32;
qinf[0_usize] = if run == -(1i32) { qinf[0_usize] } else { 0u32 };
if run < 0i32 {
run = mel_get_run(&mut mel)
}
}
c_q = (qinf[0_usize] & 0x40u32) >> 5i32 | (qinf[0_usize] & 0x80u32) >> 6i32;
vlc_val = rev_advance(&mut vlc, qinf[0_usize] & 0x7u32);
*sip_0 |=
((qinf[0_usize] & 0x30u32) >> 4i32 | (qinf[0_usize] & 0xc0u32) >> 2i32) << sip_shift;
qinf[1_usize] = 0 as OPJ_UINT32;
if (x_0 + 2i32) < width {
c_q |= (*lsp.offset(1) as core::ffi::c_int >> 7i32) as core::ffi::c_uint;
c_q |= (*lsp.offset(2) as core::ffi::c_int >> 5i32 & 0x4i32) as core::ffi::c_uint;
qinf[1_usize] = vlc_tbl1[(c_q << 7i32 | vlc_val & 0x7fu32) as usize] as OPJ_UINT32;
if c_q == 0u32 {
run -= 2i32;
qinf[1_usize] = if run == -(1i32) { qinf[1_usize] } else { 0u32 };
if run < 0i32 {
run = mel_get_run(&mut mel)
}
}
c_q = (qinf[1_usize] & 0x40u32) >> 5i32 | (qinf[1_usize] & 0x80u32) >> 6i32;
vlc_val = rev_advance(&mut vlc, qinf[1_usize] & 0x7u32)
}
*sip_0 |= (qinf[1_usize] & 0x30u32 | (qinf[1_usize] & 0xc0u32) << 2i32)
<< (4u32).wrapping_add(sip_shift);
sip_0 = sip_0.offset(if x_0 & 0x7i32 != 0 { 1i32 } else { 0i32 } as isize);
sip_shift ^= 0x10u32;
uvlc_mode_0 = (qinf[0_usize] & 0x8u32) >> 3i32 | (qinf[1_usize] & 0x8u32) >> 2i32;
consumed_bits_0 = decode_noninit_uvlc(vlc_val, uvlc_mode_0, U_q_0.as_mut_ptr());
vlc_val = rev_advance(&mut vlc, consumed_bits_0);
if qinf[0_usize] & 0xf0u32 & (qinf[0_usize] & 0xf0u32).wrapping_sub(1u32) != 0 {
let mut E = ls0 as core::ffi::c_uint & 0x7fu32; E = if E > *lsp.offset(1) as core::ffi::c_uint & 0x7fu32 {
E
} else {
(*lsp.offset(1) as core::ffi::c_uint) & 0x7fu32
};
U_q_0[0_usize] = (U_q_0[0_usize] as core::ffi::c_uint).wrapping_add(if E > 2u32 {
E.wrapping_sub(2u32)
} else {
0u32
}) as OPJ_UINT32
}
if qinf[1_usize] & 0xf0u32 & (qinf[1_usize] & 0xf0u32).wrapping_sub(1u32) != 0 {
let mut E_0 = *lsp.offset(1) as core::ffi::c_uint & 0x7fu32; E_0 = if E_0 > *lsp.offset(2) as core::ffi::c_uint & 0x7fu32 {
E_0
} else {
(*lsp.offset(2) as core::ffi::c_uint) & 0x7fu32
};
U_q_0[1_usize] = (U_q_0[1_usize] as core::ffi::c_uint).wrapping_add(if E_0 > 2u32 {
E_0.wrapping_sub(2u32)
} else {
0u32
}) as OPJ_UINT32
} if U_q_0[0_usize] > zero_bplanes_p1 || U_q_0[1_usize] > zero_bplanes_p1 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. Decoding this codeblock is stopped. U_q islarger than bitplanes + 1 \n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
ls0 = *lsp.offset(2);
let fresh14 = &mut (*lsp.offset(2));
*fresh14 = 0 as OPJ_UINT8;
*lsp.offset(1) = *fresh14;
locs_0 = 0xff as OPJ_UINT32;
if x_0 + 4i32 > width {
locs_0 >>= (x_0 + 4i32 - width) << 1i32
}
locs_0 = if y + 2i32 <= height {
locs_0
} else {
(locs_0) & 0x55u32
};
if ((qinf[0_usize] & 0xf0u32) >> 4i32 | qinf[1_usize] & 0xf0u32) & !locs_0 != 0 {
if !p_manager_mutex.is_null() {
opj_mutex_lock(p_manager_mutex);
}
event_msg!(p_manager, EVT_ERROR,
"Malformed HT codeblock. VLC code produces significant samples outside the codeblock area.\n");
if !p_manager_mutex.is_null() {
opj_mutex_unlock(p_manager_mutex);
}
return 0i32;
}
if qinf[0_usize] & 0x10u32 != 0 {
let mut val_7: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[0_usize].wrapping_sub(qinf[0_usize] >> 12i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_7 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[0_usize] & 0x100u32) >> 8i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(0) = val_7 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs_0 & 0x1u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[0_usize] & 0x20u32 != 0 {
let mut val_8: OPJ_UINT32 = 0; let mut t_1: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn);
m_n_0 = U_q_0[0_usize].wrapping_sub(qinf[0_usize] >> 13i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_8 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[0_usize] & 0x200u32) >> 9i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(stride as isize) = val_8 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32);
t_1 = (*lsp.offset(0) as core::ffi::c_int & 0x7fi32) as OPJ_UINT32; v_n_0 = (32u32).wrapping_sub(count_leading_zeros(v_n_0));
*lsp.offset(0) = (0x80u32 | (if t_1 > v_n_0 { t_1 } else { v_n_0 })) as OPJ_UINT8
} else if locs_0 & 0x2u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
}
lsp = lsp.offset(1);
sp = sp.offset(1);
if qinf[0_usize] & 0x40u32 != 0 {
let mut val_9: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[0_usize].wrapping_sub(qinf[0_usize] >> 14i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_9 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[0_usize] & 0x400u32) >> 10i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(0) = val_9 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs_0 & 0x4u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[0_usize] & 0x80u32 != 0 {
let mut val_10: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[0_usize].wrapping_sub(qinf[0_usize] >> 15i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_10 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[0_usize] & 0x800u32) >> 11i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(stride as isize) = val_10 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32);
*lsp.offset(0) = (0x80u32 | (32u32).wrapping_sub(count_leading_zeros(v_n_0))) as OPJ_UINT8
} else if locs_0 & 0x8u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
}
sp = sp.offset(1);
if qinf[1_usize] & 0x10u32 != 0 {
let mut val_11: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[1_usize].wrapping_sub(qinf[1_usize] >> 12i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_11 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[1_usize] & 0x100u32) >> 8i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(0) = val_11 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs_0 & 0x10u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[1_usize] & 0x20u32 != 0 {
let mut val_12: OPJ_UINT32 = 0; let mut t_2: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn);
m_n_0 = U_q_0[1_usize].wrapping_sub(qinf[1_usize] >> 13i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_12 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[1_usize] & 0x200u32) >> 9i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(stride as isize) = val_12 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32);
t_2 = (*lsp.offset(0) as core::ffi::c_int & 0x7fi32) as OPJ_UINT32; v_n_0 = (32u32).wrapping_sub(count_leading_zeros(v_n_0));
*lsp.offset(0) = (0x80u32 | (if t_2 > v_n_0 { t_2 } else { v_n_0 })) as OPJ_UINT8
} else if locs_0 & 0x20u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
}
lsp = lsp.offset(1);
sp = sp.offset(1);
if qinf[1_usize] & 0x40u32 != 0 {
let mut val_13: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[1_usize].wrapping_sub(qinf[1_usize] >> 14i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_13 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[1_usize] & 0x400u32) >> 10i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(0) = val_13 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32)
} else if locs_0 & 0x40u32 != 0 {
*sp.offset(0) = 0 as OPJ_UINT32
}
if qinf[1_usize] & 0x80u32 != 0 {
let mut val_14: OPJ_UINT32 = 0; ms_val_0 = frwd_fetch(&mut magsgn); m_n_0 = U_q_0[1_usize].wrapping_sub(qinf[1_usize] >> 15i32 & 1u32);
frwd_advance(&mut magsgn, m_n_0);
val_14 = ms_val_0 << 31i32;
v_n_0 = ms_val_0 & ((1u32) << m_n_0).wrapping_sub(1u32);
v_n_0 |= ((qinf[1_usize] & 0x800u32) >> 11i32) << m_n_0;
v_n_0 |= 1u32;
*sp.offset(stride as isize) = val_14 | v_n_0.wrapping_add(2u32) << p.wrapping_sub(1u32);
*lsp.offset(0) = (0x80u32 | (32u32).wrapping_sub(count_leading_zeros(v_n_0))) as OPJ_UINT8
} else if locs_0 & 0x80u32 != 0 {
*sp.offset(stride as isize) = 0 as OPJ_UINT32
}
sp = sp.offset(1);
x_0 += 4i32
}
y += 2i32;
if num_passes > 1u32 && y & 3i32 == 0i32 {
if num_passes > 2u32 {
let mut cur_sig = if y & 0x4i32 != 0 { sigma1 } else { sigma2 };
let mut dpp = decoded_data.offset(((y - 4i32) * stride) as isize); let mut half = (1u32) << p.wrapping_sub(2u32);
let mut i_1: OPJ_INT32 = 0;
i_1 = 0i32;
while i_1 < width {
let mut cwd = rev_fetch_mrp(&mut magref); let fresh15 = cur_sig; cur_sig = cur_sig.offset(1); let mut sig = *fresh15; let mut col_mask = 0xfu32;
let mut dp = dpp.offset(i_1 as isize);
if sig != 0 {
let mut j: core::ffi::c_int = 0;
j = 0i32;
while j < 8i32 {
if sig & col_mask != 0 {
let mut sample_mask = 0x11111111u32 & col_mask; if sig & sample_mask != 0 {
let mut sym: OPJ_UINT32 = 0; assert!(*dp.offset(0) != 0u32);
sym = cwd & 1u32;
let fresh16 = &mut (*dp.offset(0)); *fresh16 ^= (1u32).wrapping_sub(sym) << p.wrapping_sub(1u32); let fresh17 = &mut (*dp.offset(0));
*fresh17 |= half;
cwd >>= 1i32
}
sample_mask = (sample_mask as core::ffi::c_uint).wrapping_add(sample_mask)
as OPJ_UINT32 as OPJ_UINT32;
if sig & sample_mask != 0 {
let mut sym_0: OPJ_UINT32 = 0;
assert!(*dp.offset(stride as isize) != 0u32);
sym_0 = cwd & 1u32;
let fresh18 = &mut (*dp.offset(stride as isize));
*fresh18 ^= (1u32).wrapping_sub(sym_0) << p.wrapping_sub(1u32);
let fresh19 = &mut (*dp.offset(stride as isize));
*fresh19 |= half;
cwd >>= 1i32
}
sample_mask = (sample_mask as core::ffi::c_uint).wrapping_add(sample_mask)
as OPJ_UINT32 as OPJ_UINT32;
if sig & sample_mask != 0 {
let mut sym_1: OPJ_UINT32 = 0;
assert!(*dp.offset((2i32 * stride) as isize) != 0u32);
sym_1 = cwd & 1u32;
let fresh20 = &mut (*dp.offset((2i32 * stride) as isize));
*fresh20 ^= (1u32).wrapping_sub(sym_1) << p.wrapping_sub(1u32);
let fresh21 = &mut (*dp.offset((2i32 * stride) as isize));
*fresh21 |= half;
cwd >>= 1i32
}
sample_mask = (sample_mask as core::ffi::c_uint).wrapping_add(sample_mask)
as OPJ_UINT32 as OPJ_UINT32;
if sig & sample_mask != 0 {
let mut sym_2: OPJ_UINT32 = 0;
assert!(*dp.offset((3i32 * stride) as isize) != 0u32);
sym_2 = cwd & 1u32;
let fresh22 = &mut (*dp.offset((3i32 * stride) as isize));
*fresh22 ^= (1u32).wrapping_sub(sym_2) << p.wrapping_sub(1u32);
let fresh23 = &mut (*dp.offset((3i32 * stride) as isize));
*fresh23 |= half;
cwd >>= 1i32
}
sample_mask = (sample_mask as core::ffi::c_uint).wrapping_add(sample_mask)
as OPJ_UINT32 as OPJ_UINT32
}
col_mask <<= 4i32;
j += 1;
dp = dp.offset(1)
}
}
rev_advance_mrp(&mut magref, population_count(sig));
i_1 += 8i32
}
}
if y >= 4i32 {
let mut sig_0 = if y & 0x4i32 != 0 { sigma1 } else { sigma2 };
let mut mbr = if y & 0x4i32 != 0 { mbr1 } else { mbr2 };
let mut prev = 0 as OPJ_UINT32; let mut i_2: OPJ_INT32 = 0;
i_2 = 0i32;
while i_2 < width {
let mut t_3: OPJ_UINT32 = 0;
let mut z: OPJ_UINT32 = 0;
*mbr.offset(0) = *sig_0.offset(0); let fresh24 = &mut (*mbr.offset(0)); *fresh24 |= prev >> 28i32; let fresh25 = &mut (*mbr.offset(0)); *fresh25 |= *sig_0.offset(0) << 4i32; let fresh26 = &mut (*mbr.offset(0)); *fresh26 |= *sig_0.offset(0) >> 4i32;
let fresh27 = &mut (*mbr.offset(0));
*fresh27 |= *sig_0.offset(1) << 28i32;
prev = *sig_0.offset(0);
t_3 = *mbr.offset(0);
z = *mbr.offset(0);
z |= (t_3 & 0x77777777u32) << 1i32;
z |= (t_3 & 0xeeeeeeeeu32) >> 1i32;
*mbr.offset(0) = z & !*sig_0.offset(0);
i_2 += 8i32;
mbr = mbr.offset(1);
sig_0 = sig_0.offset(1)
}
}
if y >= 8i32 {
let mut cur_sig_0 = std::ptr::null_mut::<OPJ_UINT32>();
let mut cur_mbr = std::ptr::null_mut::<OPJ_UINT32>();
let mut nxt_sig = std::ptr::null_mut::<OPJ_UINT32>();
let mut nxt_mbr = std::ptr::null_mut::<OPJ_UINT32>();
let mut prev_0: OPJ_UINT32 = 0;
let mut val_15: OPJ_UINT32 = 0;
let mut i_3: OPJ_INT32 = 0;
cur_sig_0 = if y & 0x4i32 != 0 { sigma2 } else { sigma1 }; cur_mbr = if y & 0x4i32 != 0 { mbr2 } else { mbr1 }; nxt_sig = if y & 0x4i32 != 0 { sigma1 } else { sigma2 };
prev_0 = 0 as OPJ_UINT32;
i_3 = 0i32;
while i_3 < width {
let mut t_4 = *nxt_sig.offset(0);
t_4 |= prev_0 >> 28i32; t_4 |= *nxt_sig.offset(0) << 4i32; t_4 |= *nxt_sig.offset(0) >> 4i32; t_4 |= *nxt_sig.offset(1) << 28i32; prev_0 = *nxt_sig.offset(0); if stripe_causal == 0 {
let fresh28 = &mut (*cur_mbr.offset(0));
*fresh28 |= (t_4 & 0x11111111u32) << 3i32
}
let fresh29 = &mut (*cur_mbr.offset(0));
*fresh29 &= !*cur_sig_0.offset(0);
i_3 += 8i32;
cur_mbr = cur_mbr.offset(1);
cur_sig_0 = cur_sig_0.offset(1);
nxt_sig = nxt_sig.offset(1)
}
cur_sig_0 = if y & 0x4i32 != 0 { sigma2 } else { sigma1 }; cur_mbr = if y & 0x4i32 != 0 { mbr2 } else { mbr1 }; nxt_sig = if y & 0x4i32 != 0 { sigma1 } else { sigma2 }; nxt_mbr = if y & 0x4i32 != 0 { mbr1 } else { mbr2 };
val_15 = (3u32) << p.wrapping_sub(2u32);
i_3 = 0i32;
while i_3 < width {
let mut ux: OPJ_UINT32 = 0;
let mut tx: OPJ_UINT32 = 0;
let mut mbr_0 = *cur_mbr;
let mut new_sig = 0 as OPJ_UINT32;
if mbr_0 != 0 {
let mut n: OPJ_INT32 = 0; n = 0i32; while n < 8i32 {
let mut col_mask_0: OPJ_UINT32 = 0; let mut inv_sig: OPJ_UINT32 = 0; let mut end: OPJ_INT32 = 0;
let mut j_0: OPJ_INT32 = 0;
let mut cwd_0 = frwd_fetch(&mut sigprop);
let mut cnt = 0 as OPJ_UINT32;
let mut dp_0 = decoded_data.offset(((y - 8i32) * stride) as isize);
dp_0 = dp_0.offset((i_3 + n) as isize);
col_mask_0 = (0xfu32) << (4i32 * n);
inv_sig = !*cur_sig_0.offset(0);
end = if n + 4i32 + i_3 < width {
(n) + 4i32
} else {
(width) - i_3
};
j_0 = n;
while j_0 < end {
let mut sample_mask_0: OPJ_UINT32 = 0;
if col_mask_0 & mbr_0 != 0u32 {
sample_mask_0 = 0x11111111u32 & col_mask_0; if mbr_0 & sample_mask_0 != 0 {
assert!(*dp_0.offset(0) == 0u32);
if cwd_0 & 1u32 != 0 {
let mut t_5: OPJ_UINT32 = 0; new_sig |= sample_mask_0; t_5 = (0x32u32) << (j_0 * 4i32); mbr_0 |= t_5 & inv_sig
}
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_0 =
(sample_mask_0 as core::ffi::c_uint).wrapping_add(sample_mask_0) as OPJ_UINT32;
if mbr_0 & sample_mask_0 != 0 {
assert!(*dp_0.offset(stride as isize) == 0u32);
if cwd_0 & 1u32 != 0 {
let mut t_6: OPJ_UINT32 = 0;
new_sig |= sample_mask_0;
t_6 = (0x74u32) << (j_0 * 4i32);
mbr_0 |= t_6 & inv_sig
}
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_0 =
(sample_mask_0 as core::ffi::c_uint).wrapping_add(sample_mask_0) as OPJ_UINT32;
if mbr_0 & sample_mask_0 != 0 {
assert!(*dp_0.offset((2i32 * stride) as isize) == 0u32);
if cwd_0 & 1u32 != 0 {
let mut t_7: OPJ_UINT32 = 0;
new_sig |= sample_mask_0;
t_7 = (0xe8u32) << (j_0 * 4i32);
mbr_0 |= t_7 & inv_sig
}
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_0 =
(sample_mask_0 as core::ffi::c_uint).wrapping_add(sample_mask_0) as OPJ_UINT32;
if mbr_0 & sample_mask_0 != 0 {
assert!(*dp_0.offset((3i32 * stride) as isize) == 0u32);
if cwd_0 & 1u32 != 0 {
let mut t_8: OPJ_UINT32 = 0;
new_sig |= sample_mask_0;
t_8 = (0xc0u32) << (j_0 * 4i32);
mbr_0 |= t_8 & inv_sig
}
cwd_0 >>= 1i32;
cnt += 1;
}
}
j_0 += 1;
dp_0 = dp_0.offset(1);
col_mask_0 <<= 4i32
}
if new_sig & (0xffffu32) << (4i32 * n) != 0 {
let mut col_mask_1: OPJ_UINT32 = 0; let mut j_1: OPJ_INT32 = 0; let mut dp_1 = decoded_data.offset(((y - 8i32) * stride) as isize);
dp_1 = dp_1.offset((i_3 + n) as isize);
col_mask_1 = (0xfu32) << (4i32 * n);
j_1 = n;
while j_1 < end {
let mut sample_mask_1: OPJ_UINT32 = 0;
if col_mask_1 & new_sig != 0u32 {
sample_mask_1 = 0x11111111u32 & col_mask_1;
if new_sig & sample_mask_1 != 0 {
assert!(*dp_1.offset(0) == 0u32);
let fresh30 = &mut (*dp_1.offset(0)); *fresh30 |= (cwd_0 & 1u32) << 31i32 | val_15;
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_1 = (sample_mask_1 as core::ffi::c_uint).wrapping_add(sample_mask_1)
as OPJ_UINT32;
if new_sig & sample_mask_1 != 0 {
assert!(*dp_1.offset(stride as isize) == 0u32);
let fresh31 = &mut (*dp_1.offset(stride as isize));
*fresh31 |= (cwd_0 & 1u32) << 31i32 | val_15;
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_1 = (sample_mask_1 as core::ffi::c_uint).wrapping_add(sample_mask_1)
as OPJ_UINT32;
if new_sig & sample_mask_1 != 0 {
assert!(*dp_1.offset((2i32 * stride) as isize) == 0u32);
let fresh32 = &mut (*dp_1.offset((2i32 * stride) as isize));
*fresh32 |= (cwd_0 & 1u32) << 31i32 | val_15;
cwd_0 >>= 1i32;
cnt += 1;
}
sample_mask_1 = (sample_mask_1 as core::ffi::c_uint).wrapping_add(sample_mask_1)
as OPJ_UINT32;
if new_sig & sample_mask_1 != 0 {
assert!(*dp_1.offset((3i32 * stride) as isize) == 0u32);
let fresh33 = &mut (*dp_1.offset((3i32 * stride) as isize));
*fresh33 |= (cwd_0 & 1u32) << 31i32 | val_15;
cwd_0 >>= 1i32;
cnt += 1;
}
}
j_1 += 1; dp_1 = dp_1.offset(1);
col_mask_1 <<= 4i32
}
}
frwd_advance(&mut sigprop, cnt);
cnt = 0 as OPJ_UINT32;
if n == 4i32 {
let mut t_9 = new_sig >> 28i32;
t_9 |= (t_9 & 0xeu32) >> 1i32 | (t_9 & 7u32) << 1i32;
let fresh34 = &mut (*cur_mbr.offset(1));
*fresh34 |= t_9 & !*cur_sig_0.offset(1)
}
n += 4i32
}
}
new_sig |= *cur_sig_0.offset(0); ux = (new_sig & 0x88888888u32) >> 3i32;
tx = ux | ux << 4i32 | ux >> 4i32;
if i_3 > 0i32 {
let fresh35 = &mut (*nxt_mbr.offset(-(1i32) as isize));
*fresh35 |= ux << 28i32 & !*nxt_sig.offset(-(1i32) as isize)
}
let fresh36 = &mut (*nxt_mbr.offset(0));
*fresh36 |= tx & !*nxt_sig.offset(0);
let fresh37 = &mut (*nxt_mbr.offset(1));
*fresh37 |= ux >> 28i32 & !*nxt_sig.offset(1);
i_3 += 8i32;
cur_sig_0 = cur_sig_0.offset(1);
cur_mbr = cur_mbr.offset(1);
nxt_sig = nxt_sig.offset(1);
nxt_mbr = nxt_mbr.offset(1)
}
cur_sig_0 = if y & 0x4i32 != 0 { sigma2 } else { sigma1 };
memset(
cur_sig_0 as *mut core::ffi::c_void,
0i32,
(((width as OPJ_UINT32).wrapping_add(7u32) >> 3i32).wrapping_add(1u32) << 2i32) as usize,
);
}
}
}
if num_passes > 1u32 {
let mut st: OPJ_INT32 = 0;
let mut y_0: OPJ_INT32 = 0;
if num_passes > 2u32 && (height & 3i32 == 1i32 || height & 3i32 == 2i32) {
let mut cur_sig_1 = if height & 0x4i32 != 0 { sigma2 } else { sigma1 }; let mut dpp_0 = decoded_data.offset(((height & 0xfffffci32) * stride) as isize);
let mut half_0 = (1u32) << p.wrapping_sub(2u32);
let mut i_4: OPJ_INT32 = 0;
i_4 = 0i32;
while i_4 < width {
let mut cwd_1 = rev_fetch_mrp(&mut magref);
let fresh38 = cur_sig_1;
cur_sig_1 = cur_sig_1.offset(1);
let mut sig_1 = *fresh38;
let mut col_mask_2 = 0xf as OPJ_UINT32;
let mut dp_2 = dpp_0.offset(i_4 as isize);
if sig_1 != 0 {
let mut j_2: core::ffi::c_int = 0;
j_2 = 0i32;
while j_2 < 8i32 {
if sig_1 & col_mask_2 != 0 {
let mut sample_mask_2 = 0x11111111u32 & col_mask_2;
if sig_1 & sample_mask_2 != 0 {
let mut sym_3: OPJ_UINT32 = 0;
assert!(*dp_2.offset(0) != 0u32);
sym_3 = cwd_1 & 1u32;
let fresh39 = &mut (*dp_2.offset(0));
*fresh39 ^= (1u32).wrapping_sub(sym_3) << p.wrapping_sub(1u32);
let fresh40 = &mut (*dp_2.offset(0));
*fresh40 |= half_0;
cwd_1 >>= 1i32
}
sample_mask_2 =
(sample_mask_2 as core::ffi::c_uint).wrapping_add(sample_mask_2) as OPJ_UINT32;
if sig_1 & sample_mask_2 != 0 {
let mut sym_4: OPJ_UINT32 = 0;
assert!(*dp_2.offset(stride as isize) != 0u32);
sym_4 = cwd_1 & 1u32;
let fresh41 = &mut (*dp_2.offset(stride as isize));
*fresh41 ^= (1u32).wrapping_sub(sym_4) << p.wrapping_sub(1u32);
let fresh42 = &mut (*dp_2.offset(stride as isize));
*fresh42 |= half_0;
cwd_1 >>= 1i32
}
sample_mask_2 =
(sample_mask_2 as core::ffi::c_uint).wrapping_add(sample_mask_2) as OPJ_UINT32;
if sig_1 & sample_mask_2 != 0 {
let mut sym_5: OPJ_UINT32 = 0;
assert!(*dp_2.offset((2i32 * stride) as isize) != 0u32);
sym_5 = cwd_1 & 1u32;
let fresh43 = &mut (*dp_2.offset((2i32 * stride) as isize));
*fresh43 ^= (1u32).wrapping_sub(sym_5) << p.wrapping_sub(1u32);
let fresh44 = &mut (*dp_2.offset((2i32 * stride) as isize));
*fresh44 |= half_0;
cwd_1 >>= 1i32
}
sample_mask_2 =
(sample_mask_2 as core::ffi::c_uint).wrapping_add(sample_mask_2) as OPJ_UINT32;
if sig_1 & sample_mask_2 != 0 {
let mut sym_6: OPJ_UINT32 = 0;
assert!(*dp_2.offset((3i32 * stride) as isize) != 0u32);
sym_6 = cwd_1 & 1u32;
let fresh45 = &mut (*dp_2.offset((3i32 * stride) as isize));
*fresh45 ^= (1u32).wrapping_sub(sym_6) << p.wrapping_sub(1u32);
let fresh46 = &mut (*dp_2.offset((3i32 * stride) as isize));
*fresh46 |= half_0;
cwd_1 >>= 1i32
}
sample_mask_2 =
(sample_mask_2 as core::ffi::c_uint).wrapping_add(sample_mask_2) as OPJ_UINT32
}
col_mask_2 <<= 4i32;
j_2 += 1;
dp_2 = dp_2.offset(1)
}
}
rev_advance_mrp(&mut magref, population_count(sig_1));
i_4 += 8i32
}
}
if height & 3i32 == 1i32 || height & 3i32 == 2i32 {
let mut sig_2 = if height & 0x4i32 != 0 { sigma2 } else { sigma1 };
let mut mbr_1 = if height & 0x4i32 != 0 { mbr2 } else { mbr1 };
let mut prev_1 = 0 as OPJ_UINT32;
let mut i_5: OPJ_INT32 = 0;
i_5 = 0i32;
while i_5 < width {
let mut t_10: OPJ_UINT32 = 0;
let mut z_0: OPJ_UINT32 = 0;
*mbr_1.offset(0) = *sig_2.offset(0);
let fresh47 = &mut (*mbr_1.offset(0)); *fresh47 |= prev_1 >> 28i32; let fresh48 = &mut (*mbr_1.offset(0)); *fresh48 |= *sig_2.offset(0) << 4i32; let fresh49 = &mut (*mbr_1.offset(0));
*fresh49 |= *sig_2.offset(0) >> 4i32;
let fresh50 = &mut (*mbr_1.offset(0));
*fresh50 |= *sig_2.offset(1) << 28i32;
prev_1 = *sig_2.offset(0);
t_10 = *mbr_1.offset(0);
z_0 = *mbr_1.offset(0);
z_0 |= (t_10 & 0x77777777u32) << 1i32;
z_0 |= (t_10 & 0xeeeeeeeeu32) >> 1i32;
*mbr_1.offset(0) = z_0 & !*sig_2.offset(0);
i_5 += 8i32;
mbr_1 = mbr_1.offset(1);
sig_2 = sig_2.offset(1)
}
}
st = height;
st -= if height > 6i32 {
((height + 1i32) & 3i32) + 3i32
} else {
height
};
y_0 = st;
while y_0 < height {
let mut cur_sig_2 = std::ptr::null_mut::<OPJ_UINT32>();
let mut cur_mbr_0 = std::ptr::null_mut::<OPJ_UINT32>();
let mut nxt_sig_0 = std::ptr::null_mut::<OPJ_UINT32>();
let mut nxt_mbr_0 = std::ptr::null_mut::<OPJ_UINT32>();
let mut val_16: OPJ_UINT32 = 0;
let mut i_6: OPJ_INT32 = 0;
let mut pattern = 0xffffffffu32; if height - y_0 == 3i32 {
pattern = 0x77777777u32
} else if height - y_0 == 2i32 {
pattern = 0x33333333u32
} else if height - y_0 == 1i32 {
pattern = 0x11111111u32
}
if height - y_0 > 4i32 {
let mut prev_2 = 0 as OPJ_UINT32; let mut i_7: OPJ_INT32 = 0; cur_sig_2 = if y_0 & 0x4i32 != 0 { sigma2 } else { sigma1 }; cur_mbr_0 = if y_0 & 0x4i32 != 0 { mbr2 } else { mbr1 }; nxt_sig_0 = if y_0 & 0x4i32 != 0 { sigma1 } else { sigma2 };
i_7 = 0i32;
while i_7 < width {
let mut t_11 = *nxt_sig_0.offset(0);
t_11 |= prev_2 >> 28i32;
t_11 |= *nxt_sig_0.offset(0) << 4i32;
t_11 |= *nxt_sig_0.offset(0) >> 4i32;
t_11 |= *nxt_sig_0.offset(1) << 28i32;
prev_2 = *nxt_sig_0.offset(0);
if stripe_causal == 0 {
let fresh51 = &mut (*cur_mbr_0.offset(0));
*fresh51 |= (t_11 & 0x11111111u32) << 3i32
}
let fresh52 = &mut (*cur_mbr_0.offset(0));
*fresh52 &= !*cur_sig_2.offset(0);
i_7 += 8i32;
cur_mbr_0 = cur_mbr_0.offset(1);
cur_sig_2 = cur_sig_2.offset(1);
nxt_sig_0 = nxt_sig_0.offset(1)
}
}
cur_sig_2 = if y_0 & 0x4i32 != 0 { sigma2 } else { sigma1 }; cur_mbr_0 = if y_0 & 0x4i32 != 0 { mbr2 } else { mbr1 };
nxt_sig_0 = if y_0 & 0x4i32 != 0 { sigma1 } else { sigma2 };
nxt_mbr_0 = if y_0 & 0x4i32 != 0 { mbr1 } else { mbr2 };
val_16 = (3u32) << p.wrapping_sub(2u32);
i_6 = 0i32;
while i_6 < width {
let mut mbr_2 = *cur_mbr_0 & pattern;
let mut new_sig_0 = 0 as OPJ_UINT32;
let mut ux_0: OPJ_UINT32 = 0;
let mut tx_0: OPJ_UINT32 = 0;
if mbr_2 != 0 {
let mut n_0: OPJ_INT32 = 0;
n_0 = 0i32;
while n_0 < 8i32 {
let mut col_mask_3: OPJ_UINT32 = 0;
let mut inv_sig_0: OPJ_UINT32 = 0;
let mut end_0: OPJ_INT32 = 0;
let mut j_3: OPJ_INT32 = 0;
let mut cwd_2 = frwd_fetch(&mut sigprop);
let mut cnt_0 = 0 as OPJ_UINT32;
let mut dp_3 = decoded_data.offset((y_0 * stride) as isize);
dp_3 = dp_3.offset((i_6 + n_0) as isize);
col_mask_3 = (0xfu32) << (4i32 * n_0);
inv_sig_0 = !*cur_sig_2.offset(0) & pattern;
end_0 = if n_0 + 4i32 + i_6 < width {
(n_0) + 4i32
} else {
(width) - i_6
};
j_3 = n_0;
while j_3 < end_0 {
let mut sample_mask_3: OPJ_UINT32 = 0;
if col_mask_3 & mbr_2 != 0u32 {
sample_mask_3 = 0x11111111u32 & col_mask_3;
if mbr_2 & sample_mask_3 != 0 {
assert!(*dp_3.offset(0) == 0u32);
if cwd_2 & 1u32 != 0 {
let mut t_12: OPJ_UINT32 = 0;
new_sig_0 |= sample_mask_3;
t_12 = (0x32u32) << (j_3 * 4i32);
mbr_2 |= t_12 & inv_sig_0
}
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_3 =
(sample_mask_3 as core::ffi::c_uint).wrapping_add(sample_mask_3) as OPJ_UINT32;
if mbr_2 & sample_mask_3 != 0 {
assert!(*dp_3.offset(stride as isize) == 0u32);
if cwd_2 & 1u32 != 0 {
let mut t_13: OPJ_UINT32 = 0;
new_sig_0 |= sample_mask_3;
t_13 = (0x74u32) << (j_3 * 4i32);
mbr_2 |= t_13 & inv_sig_0
}
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_3 =
(sample_mask_3 as core::ffi::c_uint).wrapping_add(sample_mask_3) as OPJ_UINT32;
if mbr_2 & sample_mask_3 != 0 {
assert!(*dp_3.offset((2i32 * stride) as isize) == 0u32);
if cwd_2 & 1u32 != 0 {
let mut t_14: OPJ_UINT32 = 0;
new_sig_0 |= sample_mask_3;
t_14 = (0xe8u32) << (j_3 * 4i32);
mbr_2 |= t_14 & inv_sig_0
}
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_3 =
(sample_mask_3 as core::ffi::c_uint).wrapping_add(sample_mask_3) as OPJ_UINT32;
if mbr_2 & sample_mask_3 != 0 {
assert!(*dp_3.offset((3i32 * stride) as isize) == 0u32);
if cwd_2 & 1u32 != 0 {
let mut t_15: OPJ_UINT32 = 0;
new_sig_0 |= sample_mask_3;
t_15 = (0xc0u32) << (j_3 * 4i32);
mbr_2 |= t_15 & inv_sig_0
}
cwd_2 >>= 1i32;
cnt_0 += 1;
}
}
j_3 += 1;
dp_3 = dp_3.offset(1);
col_mask_3 <<= 4i32
}
if new_sig_0 & (0xffffu32) << (4i32 * n_0) != 0 {
let mut col_mask_4: OPJ_UINT32 = 0;
let mut j_4: OPJ_INT32 = 0;
let mut dp_4 = decoded_data.offset((y_0 * stride) as isize);
dp_4 = dp_4.offset((i_6 + n_0) as isize);
col_mask_4 = (0xfu32) << (4i32 * n_0);
j_4 = n_0;
while j_4 < end_0 {
let mut sample_mask_4: OPJ_UINT32 = 0;
if col_mask_4 & new_sig_0 != 0u32 {
sample_mask_4 = 0x11111111u32 & col_mask_4;
if new_sig_0 & sample_mask_4 != 0 {
assert!(*dp_4.offset(0) == 0u32);
let fresh53 = &mut (*dp_4.offset(0));
*fresh53 |= (cwd_2 & 1u32) << 31i32 | val_16;
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_4 =
(sample_mask_4 as core::ffi::c_uint).wrapping_add(sample_mask_4) as OPJ_UINT32;
if new_sig_0 & sample_mask_4 != 0 {
assert!(*dp_4.offset(stride as isize) == 0u32);
let fresh54 = &mut (*dp_4.offset(stride as isize));
*fresh54 |= (cwd_2 & 1u32) << 31i32 | val_16;
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_4 =
(sample_mask_4 as core::ffi::c_uint).wrapping_add(sample_mask_4) as OPJ_UINT32;
if new_sig_0 & sample_mask_4 != 0 {
assert!(*dp_4.offset((2i32 * stride) as isize) == 0u32);
let fresh55 = &mut (*dp_4.offset((2i32 * stride) as isize));
*fresh55 |= (cwd_2 & 1u32) << 31i32 | val_16;
cwd_2 >>= 1i32;
cnt_0 += 1;
}
sample_mask_4 =
(sample_mask_4 as core::ffi::c_uint).wrapping_add(sample_mask_4) as OPJ_UINT32;
if new_sig_0 & sample_mask_4 != 0 {
assert!(*dp_4.offset((3i32 * stride) as isize) == 0u32);
let fresh56 = &mut (*dp_4.offset((3i32 * stride) as isize));
*fresh56 |= (cwd_2 & 1u32) << 31i32 | val_16;
cwd_2 >>= 1i32;
cnt_0 += 1;
}
}
j_4 += 1;
dp_4 = dp_4.offset(1);
col_mask_4 <<= 4i32
}
}
frwd_advance(&mut sigprop, cnt_0);
cnt_0 = 0 as OPJ_UINT32;
if n_0 == 4i32 {
let mut t_16 = new_sig_0 >> 28i32;
t_16 |= (t_16 & 0xeu32) >> 1i32 | (t_16 & 7u32) << 1i32;
let fresh57 = &mut (*cur_mbr_0.offset(1));
*fresh57 |= t_16 & !*cur_sig_2.offset(1)
}
n_0 += 4i32
}
}
new_sig_0 |= *cur_sig_2.offset(0);
ux_0 = (new_sig_0 & 0x88888888u32) >> 3i32;
tx_0 = ux_0 | ux_0 << 4i32 | ux_0 >> 4i32;
if i_6 > 0i32 {
let fresh58 = &mut (*nxt_mbr_0.offset(-(1i32) as isize));
*fresh58 |= ux_0 << 28i32 & !*nxt_sig_0.offset(-(1i32) as isize)
}
let fresh59 = &mut (*nxt_mbr_0.offset(0));
*fresh59 |= tx_0 & !*nxt_sig_0.offset(0);
let fresh60 = &mut (*nxt_mbr_0.offset(1));
*fresh60 |= ux_0 >> 28i32 & !*nxt_sig_0.offset(1);
i_6 += 8i32;
cur_sig_2 = cur_sig_2.offset(1);
cur_mbr_0 = cur_mbr_0.offset(1);
nxt_sig_0 = nxt_sig_0.offset(1);
nxt_mbr_0 = nxt_mbr_0.offset(1)
}
y_0 += 4i32
}
}
let mut x_1: OPJ_INT32 = 0;
let mut y_1: OPJ_INT32 = 0;
y_1 = 0i32;
while y_1 < height {
let mut sp_0 = (decoded_data as *mut OPJ_INT32).offset((y_1 * stride) as isize);
x_1 = 0i32;
while x_1 < width {
let mut val_17 = *sp_0 & 0x7fffffffi32;
*sp_0 = if *sp_0 as OPJ_UINT32 & 0x80000000u32 != 0 {
-val_17
} else {
val_17
};
x_1 += 1;
sp_0 = sp_0.offset(1)
}
y_1 += 1
}
1i32
}