@ -493,18 +493,18 @@ static void encode_sigpass(Jpeg2000T1Context *t1, int width, int height, int ban
for ( y0 = 0 ; y0 < height ; y0 + = 4 )
for ( x = 0 ; x < width ; x + + )
for ( y = y0 ; y < height & & y < y0 + 4 ; y + + ) {
if ( ! ( t1 - > flags [ y + 1 ] [ x + 1 ] & JPEG2000_T1_SIG ) & & ( t1 - > flags [ y + 1 ] [ x + 1 ] & JPEG2000_T1_SIG_NB ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , bandno ) ,
bit = t1 - > data [ y ] [ x ] & mask ? 1 : 0 ;
if ( ! ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & JPEG2000_T1_SIG ) & & ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & JPEG2000_T1_SIG_NB ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , bandno ) ,
bit = t1 - > data [ ( y ) * t1 - > stride + x ] & mask ? 1 : 0 ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , bit ) ;
if ( bit ) {
int xorbit ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , & xorbit ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ^ xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ y ] [ x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , & xorbit ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ^ xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ ( y ) * t1 - > stride + x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ;
}
t1 - > flags [ y + 1 ] [ x + 1 ] | = JPEG2000_T1_VIS ;
t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] | = JPEG2000_T1_VIS ;
}
}
}
@ -515,11 +515,11 @@ static void encode_refpass(Jpeg2000T1Context *t1, int width, int height, int *nm
for ( y0 = 0 ; y0 < height ; y0 + = 4 )
for ( x = 0 ; x < width ; x + + )
for ( y = y0 ; y < height & & y < y0 + 4 ; y + + )
if ( ( t1 - > flags [ y + 1 ] [ x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) = = JPEG2000_T1_SIG ) {
int ctxno = ff_jpeg2000_getrefctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] ) ;
* nmsedec + = getnmsedec_ref ( t1 - > data [ y ] [ x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ y ] [ x ] & mask ? 1 : 0 ) ;
t1 - > flags [ y + 1 ] [ x + 1 ] | = JPEG2000_T1_REF ;
if ( ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) = = JPEG2000_T1_SIG ) {
int ctxno = ff_jpeg2000_getrefctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] ) ;
* nmsedec + = getnmsedec_ref ( t1 - > data [ ( y ) * t1 - > stride + x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ ( y ) * t1 - > stride + x ] & mask ? 1 : 0 ) ;
t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] | = JPEG2000_T1_REF ;
}
}
@ -529,15 +529,15 @@ static void encode_clnpass(Jpeg2000T1Context *t1, int width, int height, int ban
for ( y0 = 0 ; y0 < height ; y0 + = 4 )
for ( x = 0 ; x < width ; x + + ) {
if ( y0 + 3 < height & & ! (
( t1 - > flags [ y0 + 1 ] [ x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ y0 + 2 ] [ x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ y0 + 3 ] [ x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ y0 + 4 ] [ x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) ) )
( t1 - > flags [ ( y0 + 1 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ ( y0 + 2 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ ( y0 + 3 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) | |
( t1 - > flags [ ( y0 + 4 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG_NB | JPEG2000_T1_VIS | JPEG2000_T1_SIG ) ) ) )
{
// aggregation mode
int rlen ;
for ( rlen = 0 ; rlen < 4 ; rlen + + )
if ( t1 - > data [ y0 + rlen ] [ x ] & mask )
if ( t1 - > data [ ( y0 + rlen ) * t1 - > stride + x ] & mask )
break ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + MQC_CX_RL , rlen ! = 4 ) ;
if ( rlen = = 4 )
@ -545,34 +545,34 @@ static void encode_clnpass(Jpeg2000T1Context *t1, int width, int height, int ban
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + MQC_CX_UNI , rlen > > 1 ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + MQC_CX_UNI , rlen & 1 ) ;
for ( y = y0 + rlen ; y < y0 + 4 ; y + + ) {
if ( ! ( t1 - > flags [ y + 1 ] [ x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , bandno ) ;
if ( ! ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , bandno ) ;
if ( y > y0 + rlen )
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ y ] [ x ] & mask ? 1 : 0 ) ;
if ( t1 - > data [ y ] [ x ] & mask ) { // newly significant
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ ( y ) * t1 - > stride + x ] & mask ? 1 : 0 ) ;
if ( t1 - > data [ ( y ) * t1 - > stride + x ] & mask ) { // newly significant
int xorbit ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , & xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ y ] [ x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ^ xorbit ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , & xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ ( y ) * t1 - > stride + x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ^ xorbit ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ;
}
}
t1 - > flags [ y + 1 ] [ x + 1 ] & = ~ JPEG2000_T1_VIS ;
t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & = ~ JPEG2000_T1_VIS ;
}
} else {
for ( y = y0 ; y < y0 + 4 & & y < height ; y + + ) {
if ( ! ( t1 - > flags [ y + 1 ] [ x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , bandno ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ y ] [ x ] & mask ? 1 : 0 ) ;
if ( t1 - > data [ y ] [ x ] & mask ) { // newly significant
if ( ! ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & ( JPEG2000_T1_SIG | JPEG2000_T1_VIS ) ) ) {
int ctxno = ff_jpeg2000_getsigctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , bandno ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , t1 - > data [ ( y ) * t1 - > stride + x ] & mask ? 1 : 0 ) ;
if ( t1 - > data [ ( y ) * t1 - > stride + x ] & mask ) { // newly significant
int xorbit ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ y + 1 ] [ x + 1 ] , & xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ y ] [ x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ^ xorbit ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ y + 1 ] [ x + 1 ] > > 15 ) ;
int ctxno = ff_jpeg2000_getsgnctxno ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] , & xorbit ) ;
* nmsedec + = getnmsedec_sig ( t1 - > data [ ( y ) * t1 - > stride + x ] , bpno + NMSEDEC_FRACBITS ) ;
ff_mqc_encode ( & t1 - > mqc , t1 - > mqc . cx_states + ctxno , ( t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ^ xorbit ) ;
ff_jpeg2000_set_significance ( t1 , x , y , t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] > > 15 ) ;
}
}
t1 - > flags [ y + 1 ] [ x + 1 ] & = ~ JPEG2000_T1_VIS ;
t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] & = ~ JPEG2000_T1_VIS ;
}
}
}
@ -584,16 +584,15 @@ static void encode_cblk(Jpeg2000EncoderContext *s, Jpeg2000T1Context *t1, Jpeg20
int pass_t = 2 , passno , x , y , max = 0 , nmsedec , bpno ;
int64_t wmsedec = 0 ;
for ( y = 0 ; y < height + 2 ; y + + )
memset ( t1 - > flags [ y ] , 0 , ( width + 2 ) * sizeof ( int ) ) ;
memset ( t1 - > flags , 0 , t1 - > stride * ( height + 2 ) * sizeof ( * t1 - > flags ) ) ;
for ( y = 0 ; y < height ; y + + ) {
for ( x = 0 ; x < width ; x + + ) {
if ( t1 - > data [ y ] [ x ] < 0 ) {
t1 - > flags [ y + 1 ] [ x + 1 ] | = JPEG2000_T1_SGN ;
t1 - > data [ y ] [ x ] = - t1 - > data [ y ] [ x ] ;
if ( t1 - > data [ ( y ) * t1 - > stride + x ] < 0 ) {
t1 - > flags [ ( y + 1 ) * t1 - > stride + x + 1 ] | = JPEG2000_T1_SGN ;
t1 - > data [ ( y ) * t1 - > stride + x ] = - t1 - > data [ ( y ) * t1 - > stride + x ] ;
}
max = FFMAX ( max , t1 - > data [ y ] [ x ] ) ;
max = FFMAX ( max , t1 - > data [ ( y ) * t1 - > stride + x ] ) ;
}
}
@ -827,6 +826,8 @@ static int encode_tile(Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int tileno
for ( compno = 0 ; compno < s - > ncomponents ; compno + + ) {
Jpeg2000Component * comp = s - > tile [ tileno ] . comp + compno ;
t1 . stride = ( 1 < < codsty - > log2_cblk_width ) + 2 ;
av_log ( s - > avctx , AV_LOG_DEBUG , " dwt \n " ) ;
if ( ( ret = ff_dwt_encode ( & comp - > dwt , comp - > i_data ) ) < 0 )
return ret ;
@ -862,14 +863,14 @@ static int encode_tile(Jpeg2000EncoderContext *s, Jpeg2000Tile *tile, int tileno
int y , x ;
if ( codsty - > transform = = FF_DWT53 ) {
for ( y = yy0 ; y < yy1 ; y + + ) {
int * ptr = t1 . data [ y - yy0 ] ;
int * ptr = t1 . data + ( y - yy0 ) * t1 . stride ;
for ( x = xx0 ; x < xx1 ; x + + ) {
* ptr + + = comp - > i_data [ ( comp - > coord [ 0 ] [ 1 ] - comp - > coord [ 0 ] [ 0 ] ) * y + x ] < < NMSEDEC_FRACBITS ;
}
}
} else {
for ( y = yy0 ; y < yy1 ; y + + ) {
int * ptr = t1 . data [ y - yy0 ] ;
int * ptr = t1 . data + ( y - yy0 ) * t1 . stride ;
for ( x = xx0 ; x < xx1 ; x + + ) {
* ptr = ( comp - > i_data [ ( comp - > coord [ 0 ] [ 1 ] - comp - > coord [ 0 ] [ 0 ] ) * y + x ] ) ;
* ptr = ( int64_t ) * ptr * ( int64_t ) ( 16384 * 65536 / band - > i_stepsize ) > > 15 - NMSEDEC_FRACBITS ;