Save a few bits in multislice encoding
authorJason Garrett-Glaser <darkshikari@gmail.com>
Fri, 9 Apr 2010 01:44:16 +0000 (18:44 -0700)
committerJason Garrett-Glaser <darkshikari@gmail.com>
Sat, 10 Apr 2010 21:15:11 +0000 (14:15 -0700)
Set the initial QP for each slice to the last QP of the previous slice.

encoder/encoder.c

index 829dc12..289f458 100644 (file)
@@ -1743,6 +1743,16 @@ static int x264_slice_write( x264_t *h )
 
     /* Slice header */
     x264_macroblock_thread_init( h );
+
+    /* If this isn't the first slice in the threadslice, set the slice QP
+     * equal to the last QP in the previous slice for more accurate
+     * CABAC initialization. */
+    if( h->sh.i_first_mb != h->i_threadslice_start * h->sps->i_mb_width )
+    {
+        h->sh.i_qp = h->mb.i_last_qp;
+        h->sh.i_qp_delta = h->sh.i_qp - h->pps->i_pic_init_qp;
+    }
+
     x264_slice_header_write( &h->out.bs, &h->sh, h->i_nal_ref_idc );
     if( h->param.b_cabac )
     {