diff -urw x264-snapshot-20080423-2245.orig/common/frame.c x264-snapshot-20080423-2245/common/frame.c --- x264-snapshot-20080423-2245.orig/common/frame.c Wed Apr 23 21:45:06 2008 +++ x264-snapshot-20080423-2245/common/frame.c Thu Apr 24 04:42:03 2008 @@ -120,17 +120,19 @@ for( j = 0; j < h->param.i_bframe + 2; j++ ) CHECKED_MALLOC( frame->i_row_satds[i][j], i_lines/16 * sizeof(int) ); + if( h->param.i_threads > 1 ) { x264_pthread_mutex_init( &frame->mutex, NULL ); x264_pthread_cond_init( &frame->cv, NULL ); + } return frame; fail: - x264_frame_delete( frame ); + x264_frame_delete( h, frame ); return NULL; } -void x264_frame_delete( x264_frame_t *frame ) +void x264_frame_delete( x264_t *h, x264_frame_t *frame ) { int i, j; for( i = 0; i < 4; i++ ) @@ -147,8 +149,10 @@ x264_free( frame->mv[1] ); x264_free( frame->ref[0] ); x264_free( frame->ref[1] ); + if( h->param.i_threads > 1 ) { x264_pthread_mutex_destroy( &frame->mutex ); x264_pthread_cond_destroy( &frame->cv ); + } x264_free( frame ); } diff -urw x264-snapshot-20080423-2245.orig/common/frame.h x264-snapshot-20080423-2245/common/frame.h --- x264-snapshot-20080423-2245.orig/common/frame.h Wed Apr 23 21:45:06 2008 +++ x264-snapshot-20080423-2245/common/frame.h Thu Apr 24 04:31:14 2008 @@ -101,7 +101,7 @@ } x264_deblock_function_t; x264_frame_t *x264_frame_new( x264_t *h ); -void x264_frame_delete( x264_frame_t *frame ); +void x264_frame_delete( x264_t *h, x264_frame_t *frame ); int x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src ); diff -urw x264-snapshot-20080423-2245.orig/encoder/encoder.c x264-snapshot-20080423-2245/encoder/encoder.c --- x264-snapshot-20080423-2245.orig/encoder/encoder.c Wed Apr 23 21:45:06 2008 +++ x264-snapshot-20080423-2245/encoder/encoder.c Thu Apr 24 04:31:58 2008 @@ -1940,13 +1940,13 @@ /* frames */ for( i = 0; h->frames.current[i]; i++ ) - x264_frame_delete( h->frames.current[i] ); + x264_frame_delete( h, h->frames.current[i] ); for( i = 0; h->frames.next[i]; i++ ) - x264_frame_delete( h->frames.next[i] ); + x264_frame_delete( h, h->frames.next[i] ); for( i = 0; h->frames.unused[i]; i++ ) - x264_frame_delete( h->frames.unused[i] ); + x264_frame_delete( h, h->frames.unused[i] ); for( i = 0; h->frames.reference[i]; i++ ) - x264_frame_delete( h->frames.reference[i] ); + x264_frame_delete( h, h->frames.reference[i] ); /* rc */ x264_ratecontrol_delete( h );