]> granicus.if.org Git - libx264/commitdiff
Fix x264_encoder_reconfig with multithreading
authorFiona Glaser <fiona@x264.com>
Tue, 18 Aug 2009 22:46:26 +0000 (15:46 -0700)
committerFiona Glaser <fiona@x264.com>
Tue, 18 Aug 2009 22:46:26 +0000 (15:46 -0700)
New behavior: reconfigging the encoder will result in changes being applied
to each of the encoding threads as they finish encoding the current frame.

encoder/encoder.c

index 3d45afdab071a38b9639d7bfa758816b6d0267f6..3ce8d80c993ee3e016dd1292cd743b742cc66eeb 100644 (file)
@@ -882,6 +882,7 @@ fail:
  ****************************************************************************/
 int x264_encoder_reconfig( x264_t *h, x264_param_t *param )
 {
+    h = h->thread[h->i_thread_phase%h->param.i_threads];
 #define COPY(var) h->param.var = param->var
     COPY( i_frame_reference ); // but never uses more refs than initially specified
     COPY( i_bframe_bias );
@@ -1391,6 +1392,7 @@ static void x264_thread_sync_context( x264_t *dst, x264_t *src )
 
     // copy everything except the per-thread pointers and the constants.
     memcpy( &dst->i_frame, &src->i_frame, offsetof(x264_t, mb.type) - offsetof(x264_t, i_frame) );
+    dst->param = src->param;
     dst->stat = src->stat;
 }