From df475dedd76054704d94df6520499917f5e454b0 Mon Sep 17 00:00:00 2001 From: rwillenbacher Date: Wed, 19 May 2021 22:14:49 +0200 Subject: [PATCH] fix for inter trellis quant, vbv_delay and mpeg1 run/level vlc escape --- src/y262/ratectrl.c | 6 ++++-- src/y262/transform.c | 2 +- src/y262/y262.c | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/y262/ratectrl.c b/src/y262/ratectrl.c index e7eb192..a59f1f7 100644 --- a/src/y262/ratectrl.c +++ b/src/y262/ratectrl.c @@ -647,8 +647,9 @@ void y262_ratectrl_start_picture( y262_t *ps_y262, int32_t i_header_bits ) else { i64_occupancy_ticks = ( ( ( ( int64_t ) 90000 ) * ( i_occupancy_bits + !!ps_ratectrl->i64_vbv_occupancy_fractional ) ) + ( ps_ratectrl->i_vbvrate - 1 ) ) / ps_ratectrl->i_vbvrate; + i_vbv_delay = ( int32_t ) i64_occupancy_ticks; } - ps_y262->ps_input_picture->i_vbv_delay = ( int32_t ) i64_occupancy_ticks; + ps_y262->ps_input_picture->i_vbv_delay = i_vbv_delay; } else { @@ -672,9 +673,10 @@ void y262_ratectrl_start_picture( y262_t *ps_y262, int32_t i_header_bits ) else { i64_occupancy_ticks = ( ( ( ( int64_t ) 90000 ) * ( i_occupancy_bits + !!ps_ratectrl->i64_vbv_occupancy_fractional ) ) + ( ps_ratectrl->i_vbvrate - 1 ) ) / ps_ratectrl->i_vbvrate; + i_vbv_delay = ( int32_t ) i64_occupancy_ticks; } } - ps_y262->ps_input_picture->i_vbv_delay = ( int32_t ) i64_occupancy_ticks; + ps_y262->ps_input_picture->i_vbv_delay = i_vbv_delay; } } diff --git a/src/y262/transform.c b/src/y262/transform.c index 4f72834..1e32a46 100644 --- a/src/y262/transform.c +++ b/src/y262/transform.c @@ -652,7 +652,7 @@ int32_t y262_quant8x8_trellis_fw( y262_t *ps_y262, y262_slice_t *ps_slice, int16 i_dc = 0; i_start = 0; pui8_qmat = ps_y262->rgui8_non_intra_quantiser_matrix; - y262_quant8x8_inter_fw( ps_y262, rgi16_levels, 8, ps_y262->rgui16_non_intra_quantizer_matrices[ i_quantizer ] ); + i_nz = y262_quant8x8_inter_fw( ps_y262, rgi16_levels, 8, ps_y262->rgui16_non_intra_quantizer_matrices[ i_quantizer ] ); } if( i_nz ) diff --git a/src/y262/y262.c b/src/y262/y262.c index 764ed9d..3ddd975 100644 --- a/src/y262/y262.c +++ b/src/y262/y262.c @@ -2142,8 +2142,8 @@ void y262_write_intra_block_mpeg1( y262_t *ps_y262, y262_slice_t *ps_slice, int3 if( i_level_sign < -127 ) { - y262_bitstream_write( ps_bitstream, ( -127 & 0xff ), 8 ); - y262_bitstream_write( ps_bitstream, i_level_sign & 0xff, 8 ); + y262_bitstream_write( ps_bitstream, 0x80, 8 ); + y262_bitstream_write( ps_bitstream, ( i_level_sign + 256 ) & 0xff, 8 ); } else if( i_level_sign < 128 ) { @@ -2293,8 +2293,8 @@ void y262_write_inter_block_mpeg1( y262_t *ps_y262, y262_slice_t *ps_slice, int3 if( i_level_sign < -127 ) { - y262_bitstream_write( ps_bitstream, ( -127 & 0xff ), 8 ); - y262_bitstream_write( ps_bitstream, i_level_sign & 0xff, 8 ); + y262_bitstream_write( ps_bitstream, 0x80, 8 ); + y262_bitstream_write( ps_bitstream, ( i_level_sign + 256 ) & 0xff, 8 ); } else if( i_level_sign < 128 ) {