OpenJPEG  2.2.0
Data Structures | Macros | Functions
t1.c File Reference
#include "opj_includes.h"
#include "t1_luts.h"

Data Structures

struct  opj_t1_cblk_decode_processing_job_t
 

Macros

#define T1_FLAGS(x, y)   (t1->flags[x + 1 + ((y / 4) + 1) * (t1->w+2)])
 
#define opj_t1_setcurctx(curctx, ctxno)   curctx = &(mqc)->ctxs[(OPJ_UINT32)(ctxno)]
 
#define opj_t1_update_flags_macro(flags, flagsp, ci, s, stride, vsc)
 
#define opj_t1_dec_sigpass_step_mqc_macro(flags, flagsp, flags_stride, data, data_stride, ci, mqc, curctx, v, a, c, ct, oneplushalf, vsc)
 
#define opj_t1_dec_sigpass_mqc_internal(t1, bpno, vsc, w, h, flags_stride)
 
#define opj_t1_dec_refpass_step_mqc_macro(flags, data, data_stride, ci, mqc, curctx, v, a, c, ct, poshalf)
 
#define opj_t1_dec_refpass_mqc_internal(t1, bpno, w, h, flags_stride)
 
#define opj_t1_dec_clnpass_step_macro(check_flags, partial, flags, flagsp, flags_stride, data, data_stride, ci, mqc, curctx, v, a, c, ct, oneplushalf, vsc)
 
#define opj_t1_dec_clnpass_internal(t1, bpno, vsc, w, h, flags_stride)
 

Functions

static INLINE OPJ_UINT32 opj_t1_getctxtno_sc_or_spb_index (OPJ_UINT32 fX, OPJ_UINT32 pfX, OPJ_UINT32 nfX, OPJ_UINT32 ci)
 
static INLINE OPJ_BYTE opj_t1_getctxno_sc (OPJ_UINT32 lu)
 
static INLINE OPJ_BYTE opj_t1_getspb (OPJ_UINT32 lu)
 
static INLINE void opj_t1_enc_sigpass_step (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 bpno, OPJ_INT32 one, OPJ_INT32 *nmsedec, OPJ_BYTE type, OPJ_UINT32 ci, OPJ_UINT32 vsc)
 Encode significant pass. More...
 
static void opj_t1_dec_sigpass_mqc_64x64_novsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_sigpass_mqc_64x64_vsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_sigpass_mqc_generic_novsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_sigpass_mqc_generic_vsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_sigpass_mqc (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 cblksty)
 
static INLINE void opj_t1_enc_refpass_step (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 bpno, OPJ_INT32 one, OPJ_INT32 *nmsedec, OPJ_BYTE type, OPJ_UINT32 ci)
 Encode refinement pass step. More...
 
static void opj_t1_dec_refpass_mqc_64x64 (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_refpass_mqc_generic (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_refpass_mqc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_enc_clnpass_step (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 bpno, OPJ_INT32 one, OPJ_INT32 *nmsedec, OPJ_UINT32 agg, OPJ_UINT32 runlen, OPJ_UINT32 lim, OPJ_UINT32 cblksty)
 Encode clean-up pass step. More...
 
static void opj_t1_dec_clnpass_check_segsym (opj_t1_t *t1, OPJ_INT32 cblksty)
 
static void opj_t1_dec_clnpass_64x64_novsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_clnpass_64x64_vsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_clnpass_generic_novsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_clnpass_generic_vsc (opj_t1_t *t1, OPJ_INT32 bpno)
 
static void opj_t1_dec_clnpass (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 cblksty)
 
opj_t1_topj_t1_create (OPJ_BOOL isEncoder)
 Creates a new Tier 1 handle and initializes the look-up tables of the Tier-1 coder/decoder. More...
 
void opj_t1_destroy (opj_t1_t *p_t1)
 Destroys a previously created T1 handle. More...
 
static void opj_t1_destroy_wrapper (void *t1)
 
static void opj_t1_clbl_decode_processor (void *user_data, opj_tls_t *tls)
 
void opj_t1_decode_cblks (opj_thread_pool_t *tp, volatile OPJ_BOOL *pret, opj_tcd_tilecomp_t *tilec, opj_tccp_t *tccp, opj_event_mgr_t *p_manager, opj_mutex_t *p_manager_mutex, OPJ_BOOL check_pterm)
 Decode the code-blocks of a tile. More...
 
OPJ_BOOL opj_t1_encode_cblks (opj_t1_t *t1, opj_tcd_tile_t *tile, opj_tcp_t *tcp, const OPJ_FLOAT64 *mct_norms, OPJ_UINT32 mct_numcomps)
 Encode the code-blocks of a tile. More...
 
static int opj_t1_enc_is_term_pass (opj_tcd_cblk_enc_t *cblk, OPJ_UINT32 cblksty, OPJ_INT32 bpno, OPJ_UINT32 passtype)
 
Local static functions
static INLINE OPJ_BYTE opj_t1_getctxno_zc (opj_mqc_t *mqc, OPJ_UINT32 f)
 
static INLINE OPJ_UINT32 opj_t1_getctxno_mag (OPJ_UINT32 f)
 
static OPJ_INT16 opj_t1_getnmsedec_sig (OPJ_UINT32 x, OPJ_UINT32 bitpos)
 
static OPJ_INT16 opj_t1_getnmsedec_ref (OPJ_UINT32 x, OPJ_UINT32 bitpos)
 
static INLINE void opj_t1_update_flags (opj_flag_t *flagsp, OPJ_UINT32 ci, OPJ_UINT32 s, OPJ_UINT32 stride, OPJ_UINT32 vsc)
 
static INLINE void opj_t1_dec_sigpass_step_raw (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 oneplushalf, OPJ_UINT32 vsc, OPJ_UINT32 row)
 Decode significant pass. More...
 
static INLINE void opj_t1_dec_sigpass_step_mqc (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 oneplushalf, OPJ_UINT32 row, OPJ_UINT32 flags_stride, OPJ_UINT32 vsc)
 
static void opj_t1_enc_sigpass (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 *nmsedec, OPJ_BYTE type, OPJ_UINT32 cblksty)
 Encode significant pass. More...
 
static void opj_t1_dec_sigpass_raw (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 cblksty)
 Decode significant pass. More...
 
static void opj_t1_enc_refpass (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 *nmsedec, OPJ_BYTE type)
 Encode refinement pass. More...
 
static void opj_t1_dec_refpass_raw (opj_t1_t *t1, OPJ_INT32 bpno)
 Decode refinement pass. More...
 
static INLINE void opj_t1_dec_refpass_step_raw (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 poshalf, OPJ_UINT32 row)
 Decode refinement pass. More...
 
static INLINE void opj_t1_dec_refpass_step_mqc (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 poshalf, OPJ_UINT32 row)
 
static void opj_t1_dec_clnpass_step (opj_t1_t *t1, opj_flag_t *flagsp, OPJ_INT32 *datap, OPJ_INT32 oneplushalf, OPJ_UINT32 row, OPJ_UINT32 vsc)
 Decode clean-up pass. More...
 
static void opj_t1_enc_clnpass (opj_t1_t *t1, OPJ_INT32 bpno, OPJ_INT32 *nmsedec, OPJ_UINT32 cblksty)
 Encode clean-up pass. More...
 
static OPJ_FLOAT64 opj_t1_getwmsedec (OPJ_INT32 nmsedec, OPJ_UINT32 compno, OPJ_UINT32 level, OPJ_UINT32 orient, OPJ_INT32 bpno, OPJ_UINT32 qmfbid, OPJ_FLOAT64 stepsize, OPJ_UINT32 numcomps, const OPJ_FLOAT64 *mct_norms, OPJ_UINT32 mct_numcomps)
 mod fixed_quality More...
 
static void opj_t1_encode_cblk (opj_t1_t *t1, opj_tcd_cblk_enc_t *cblk, OPJ_UINT32 orient, OPJ_UINT32 compno, OPJ_UINT32 level, OPJ_UINT32 qmfbid, OPJ_FLOAT64 stepsize, OPJ_UINT32 cblksty, OPJ_UINT32 numcomps, opj_tcd_tile_t *tile, const OPJ_FLOAT64 *mct_norms, OPJ_UINT32 mct_numcomps)
 mod fixed_quality More...
 
static OPJ_BOOL opj_t1_decode_cblk (opj_t1_t *t1, opj_tcd_cblk_dec_t *cblk, OPJ_UINT32 orient, OPJ_UINT32 roishift, OPJ_UINT32 cblksty, opj_event_mgr_t *p_manager, opj_mutex_t *p_manager_mutex, OPJ_BOOL check_pterm)
 Decode 1 code-block. More...
 
static OPJ_BOOL opj_t1_allocate_buffers (opj_t1_t *t1, OPJ_UINT32 w, OPJ_UINT32 h)
 

Macro Definition Documentation

#define opj_t1_dec_clnpass_internal (   t1,
  bpno,
  vsc,
  w,
  h,
  flags_stride 
)
#define opj_t1_dec_clnpass_step_macro (   check_flags,
  partial,
  flags,
  flagsp,
  flags_stride,
  data,
  data_stride,
  ci,
  mqc,
  curctx,
  v,
  a,
  c,
  ct,
  oneplushalf,
  vsc 
)
Value:
{ \
if ( !check_flags || !(flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U)))) {\
do { \
if( !partial ) { \
OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U)); \
opj_t1_setcurctx(curctx, ctxt1); \
opj_mqc_decode_macro(v, mqc, curctx, a, c, ct); \
if( !v ) \
break; \
} \
{ \
flags, flagsp[-1], flagsp[1], \
ci); \
opj_t1_setcurctx(curctx, opj_t1_getctxno_sc(lu)); \
opj_mqc_decode_macro(v, mqc, curctx, a, c, ct); \
v = v ^ opj_t1_getspb(lu); \
data[ci*data_stride] = v ? -oneplushalf : oneplushalf; \
opj_t1_update_flags_macro(flags, flagsp, ci, v, flags_stride, vsc); \
} \
} while(0); \
} \
}
static INLINE OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f)
Definition: t1.c:210
#define T1_PI_THIS
Definition: t1.h:163
#define T1_SIGMA_THIS
Definition: t1.h:153
static INLINE OPJ_BYTE opj_t1_getspb(OPJ_UINT32 lu)
Definition: t1.c:257
static INLINE OPJ_UINT32 opj_t1_getctxtno_sc_or_spb_index(OPJ_UINT32 fX, OPJ_UINT32 pfX, OPJ_UINT32 nfX, OPJ_UINT32 ci)
Definition: t1.c:215
static INLINE OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 lu)
Definition: t1.c:245

Referenced by opj_t1_dec_clnpass_step().

#define opj_t1_dec_refpass_mqc_internal (   t1,
  bpno,
  w,
  h,
  flags_stride 
)
#define opj_t1_dec_refpass_step_mqc_macro (   flags,
  data,
  data_stride,
  ci,
  mqc,
  curctx,
  v,
  a,
  c,
  ct,
  poshalf 
)
Value:
{ \
if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == \
(T1_SIGMA_THIS << (ci * 3U))) { \
OPJ_UINT32 ctxt = opj_t1_getctxno_mag(flags >> (ci * 3U)); \
opj_t1_setcurctx(curctx, ctxt); \
opj_mqc_decode_macro(v, mqc, curctx, a, c, ct); \
data[ci*data_stride] += (v ^ (data[ci*data_stride] < 0)) ? poshalf : -poshalf; \
flags |= T1_MU_THIS << (ci * 3U); \
} \
}
static INLINE OPJ_UINT32 opj_t1_getctxno_mag(OPJ_UINT32 f)
Definition: t1.c:250
#define T1_PI_THIS
Definition: t1.h:163
#define T1_SIGMA_THIS
Definition: t1.h:153
#define T1_MU_THIS
Definition: t1.h:162

Referenced by opj_t1_dec_refpass_step_mqc().

#define opj_t1_dec_sigpass_mqc_internal (   t1,
  bpno,
  vsc,
  w,
  h,
  flags_stride 
)
#define opj_t1_dec_sigpass_step_mqc_macro (   flags,
  flagsp,
  flags_stride,
  data,
  data_stride,
  ci,
  mqc,
  curctx,
  v,
  a,
  c,
  ct,
  oneplushalf,
  vsc 
)
Value:
{ \
if ((flags & ((T1_SIGMA_THIS | T1_PI_THIS) << (ci * 3U))) == 0U && \
(flags & (T1_SIGMA_NEIGHBOURS << (ci * 3U))) != 0U) { \
OPJ_UINT32 ctxt1 = opj_t1_getctxno_zc(mqc, flags >> (ci * 3U)); \
opj_t1_setcurctx(curctx, ctxt1); \
opj_mqc_decode_macro(v, mqc, curctx, a, c, ct); \
if (v) { \
flags, \
flagsp[-1], flagsp[1], \
ci); \
OPJ_UINT32 ctxt2 = opj_t1_getctxno_sc(lu); \
OPJ_UINT32 spb = opj_t1_getspb(lu); \
opj_t1_setcurctx(curctx, ctxt2); \
opj_mqc_decode_macro(v, mqc, curctx, a, c, ct); \
v = v ^ spb; \
data[ci*data_stride] = v ? -oneplushalf : oneplushalf; \
opj_t1_update_flags_macro(flags, flagsp, ci, v, flags_stride, vsc); \
} \
flags |= T1_PI_THIS << (ci * 3U); \
} \
}
static INLINE OPJ_BYTE opj_t1_getctxno_zc(opj_mqc_t *mqc, OPJ_UINT32 f)
Definition: t1.c:210
#define T1_PI_THIS
Definition: t1.h:163
#define T1_SIGMA_THIS
Definition: t1.h:153
#define T1_SIGMA_NEIGHBOURS
Definition: t1.h:158
static INLINE OPJ_BYTE opj_t1_getspb(OPJ_UINT32 lu)
Definition: t1.c:257
static INLINE OPJ_UINT32 opj_t1_getctxtno_sc_or_spb_index(OPJ_UINT32 fX, OPJ_UINT32 pfX, OPJ_UINT32 nfX, OPJ_UINT32 ci)
Definition: t1.c:215
static INLINE OPJ_BYTE opj_t1_getctxno_sc(OPJ_UINT32 lu)
Definition: t1.c:245

Referenced by opj_t1_dec_sigpass_step_mqc().

#define opj_t1_update_flags_macro (   flags,
  flagsp,
  ci,
  s,
  stride,
  vsc 
)
Value:
{ \
/* east */ \
flagsp[-1] |= T1_SIGMA_5 << (3U * ci); \
\
/* mark target as significant */ \
flags |= ((s << T1_CHI_1_I) | T1_SIGMA_4) << (3U * ci); \
\
/* west */ \
flagsp[1] |= T1_SIGMA_3 << (3U * ci); \
\
/* north-west, north, north-east */ \
if (ci == 0U && !(vsc)) { \
opj_flag_t* north = flagsp - (stride); \
*north |= (s << T1_CHI_5_I) | T1_SIGMA_16; \
north[-1] |= T1_SIGMA_17; \
north[1] |= T1_SIGMA_15; \
} \
\
/* south-west, south, south-east */ \
if (ci == 3U) { \
opj_flag_t* south = flagsp + (stride); \
*south |= (s << T1_CHI_0_I) | T1_SIGMA_1; \
south[-1] |= T1_SIGMA_2; \
south[1] |= T1_SIGMA_0; \
} \
}
#define T1_SIGMA_15
Definition: t1.h:106
#define T1_SIGMA_16
Definition: t1.h:107
#define T1_CHI_1_I
Definition: t1.h:113
#define T1_SIGMA_2
Definition: t1.h:93
#define T1_CHI_5_I
Definition: t1.h:127
#define T1_SIGMA_17
Definition: t1.h:108
#define T1_SIGMA_0
We hold the state of individual data points for the T1 encoder using a single 32-bit flags word to ho...
Definition: t1.h:91
#define T1_SIGMA_4
Definition: t1.h:95
#define T1_SIGMA_5
Definition: t1.h:96
#define T1_SIGMA_3
Definition: t1.h:94
#define T1_SIGMA_1
Definition: t1.h:92
#define T1_CHI_0_I
Definition: t1.h:111

Referenced by opj_t1_update_flags().

Function Documentation

static void opj_t1_clbl_decode_processor ( void *  user_data,
opj_tls_t tls 
)
static
static void opj_t1_dec_clnpass ( opj_t1_t t1,
OPJ_INT32  bpno,
OPJ_INT32  cblksty 
)
static
static void opj_t1_dec_clnpass_64x64_novsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_clnpass_64x64_vsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_clnpass_check_segsym ( opj_t1_t t1,
OPJ_INT32  cblksty 
)
static
static void opj_t1_dec_clnpass_generic_novsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_clnpass_generic_vsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_refpass_mqc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_refpass_mqc_64x64 ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_refpass_mqc_generic ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_sigpass_mqc ( opj_t1_t t1,
OPJ_INT32  bpno,
OPJ_INT32  cblksty 
)
static
static void opj_t1_dec_sigpass_mqc_64x64_novsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_sigpass_mqc_64x64_vsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_sigpass_mqc_generic_novsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_dec_sigpass_mqc_generic_vsc ( opj_t1_t t1,
OPJ_INT32  bpno 
)
static
static void opj_t1_destroy_wrapper ( void *  t1)
static
static void opj_t1_enc_clnpass_step ( opj_t1_t t1,
opj_flag_t flagsp,
OPJ_INT32 datap,
OPJ_INT32  bpno,
OPJ_INT32  one,
OPJ_INT32 nmsedec,
OPJ_UINT32  agg,
OPJ_UINT32  runlen,
OPJ_UINT32  lim,
OPJ_UINT32  cblksty 
)
static
static int opj_t1_enc_is_term_pass ( opj_tcd_cblk_enc_t cblk,
OPJ_UINT32  cblksty,
OPJ_INT32  bpno,
OPJ_UINT32  passtype 
)
static
static INLINE void opj_t1_enc_refpass_step ( opj_t1_t t1,
opj_flag_t flagsp,
OPJ_INT32 datap,
OPJ_INT32  bpno,
OPJ_INT32  one,
OPJ_INT32 nmsedec,
OPJ_BYTE  type,
OPJ_UINT32  ci 
)
static
static INLINE void opj_t1_enc_sigpass_step ( opj_t1_t t1,
opj_flag_t flagsp,
OPJ_INT32 datap,
OPJ_INT32  bpno,
OPJ_INT32  one,
OPJ_INT32 nmsedec,
OPJ_BYTE  type,
OPJ_UINT32  ci,
OPJ_UINT32  vsc 
)
static
static INLINE OPJ_BYTE opj_t1_getctxno_sc ( OPJ_UINT32  lu)
static
static INLINE OPJ_UINT32 opj_t1_getctxtno_sc_or_spb_index ( OPJ_UINT32  fX,
OPJ_UINT32  pfX,
OPJ_UINT32  nfX,
OPJ_UINT32  ci 
)
static
static INLINE OPJ_BYTE opj_t1_getspb ( OPJ_UINT32  lu)
static