Changes to queue in CABAC didn't get propagated to PCM code.
}
}
-void x264_cabac_encode_init( x264_cabac_t *cb, uint8_t *p_data, uint8_t *p_end )
+void x264_cabac_encode_init_core( x264_cabac_t *cb )
{
cb->i_low = 0;
cb->i_range = 0x01FE;
cb->i_queue = -9; // the first bit will be shifted away and not written
cb->i_bytes_outstanding = 0;
+}
+
+void x264_cabac_encode_init( x264_cabac_t *cb, uint8_t *p_data, uint8_t *p_end )
+{
+ x264_cabac_encode_init_core( cb );
cb->p_start = p_data;
cb->p = p_data;
cb->p_end = p_end;
cb->i_queue += 9;
x264_cabac_putbyte( cb );
x264_cabac_putbyte( cb );
- cb->i_low <<= 8 - cb->i_queue;
+ cb->i_low <<= -cb->i_queue;
cb->i_low |= (0x35a4e4f5 >> (h->i_frame & 31) & 1) << 10;
- cb->i_queue = 8;
+ cb->i_queue = 0;
x264_cabac_putbyte( cb );
while( cb->i_bytes_outstanding > 0 )
/* init the contexts given i_slice_type, the quantif and the model */
void x264_cabac_context_init( x264_cabac_t *cb, int i_slice_type, int i_qp, int i_model );
-/* encoder only: */
+void x264_cabac_encode_init_core( x264_cabac_t *cb );
void x264_cabac_encode_init ( x264_cabac_t *cb, uint8_t *p_data, uint8_t *p_end );
void x264_cabac_encode_decision_c( x264_cabac_t *cb, int i_ctx, int b );
void x264_cabac_encode_decision_asm( x264_cabac_t *cb, int i_ctx, int b );
memcpy( cb->p + i*8, h->mb.pic.p_fenc[2] + i*FENC_STRIDE, 8 );
cb->p += 64;
- cb->i_low = 0;
- cb->i_range = 0x01FE;
- cb->i_queue = -1;
- cb->i_bytes_outstanding = 0;
+ x264_cabac_encode_init_core( cb );
h->stat.frame.i_tex_bits += x264_cabac_pos( cb ) - i_mb_pos_tex;
return;