- ******************************************************************************/
-static int InitThread ( vout_thread_t *p_vout );
-static void RunThread ( vout_thread_t *p_vout );
-static void ErrorThread ( vout_thread_t *p_vout );
-static void EndThread ( vout_thread_t *p_vout );
-static void DestroyThread ( vout_thread_t *p_vout, int i_status );
-static void Print ( vout_thread_t *p_vout, int i_x, int i_y,
- int i_h_align, int i_v_align, unsigned char *psz_text );
-static void SetBufferArea ( vout_thread_t *p_vout, int i_x, int i_y, int i_w, int i_h );
-static void SetBufferPicture ( vout_thread_t *p_vout, picture_t *p_pic );
-static void RenderPicture ( vout_thread_t *p_vout, picture_t *p_pic );
-static void RenderPictureInfo ( vout_thread_t *p_vout, picture_t *p_pic );
-static void RenderSubPicture ( vout_thread_t *p_vout, subpicture_t *p_subpic );
-static void RenderInterface ( vout_thread_t *p_vout );
-static int RenderIdle ( vout_thread_t *p_vout );
-static void RenderInfo ( vout_thread_t *p_vout );
-static int Manage ( vout_thread_t *p_vout );
-static int Align ( vout_thread_t *p_vout, int *pi_x, int *pi_y,
- int i_width, int i_height, int i_h_align, int i_v_align );
-
-/******************************************************************************
+ *****************************************************************************/
+static int BinaryLog ( u32 i );
+static void MaskToShift ( int *pi_left, int *pi_right, u32 i_mask );
+static int InitThread ( vout_thread_t *p_vout );
+static void RunThread ( vout_thread_t *p_vout );
+static void ErrorThread ( vout_thread_t *p_vout );
+static void EndThread ( vout_thread_t *p_vout );
+static void DestroyThread ( vout_thread_t *p_vout, int i_status );
+static void Print ( vout_thread_t *p_vout, int i_x, int i_y,
+ int i_h_align, int i_v_align,
+ unsigned char *psz_text );
+static void SetBuffers ( vout_thread_t *p_vout, void *, void * );
+static void SetBufferArea ( vout_thread_t *p_vout, int i_x, int i_y,
+ int i_w, int i_h );
+static void SetBufferPicture ( vout_thread_t *p_vout, picture_t *p_pic );
+static void RenderPicture ( vout_thread_t *p_vout, picture_t *p_pic );
+static void RenderPictureInfo ( vout_thread_t *p_vout, picture_t *p_pic );
+static void RenderSubPicture ( vout_thread_t *p_vout, picture_t *p_pic,
+ subpicture_t *p_subpic );
+static int RenderIdle ( vout_thread_t *p_vout );
+static void RenderInfo ( vout_thread_t *p_vout );
+static int Manage ( vout_thread_t *p_vout );
+static int Align ( vout_thread_t *p_vout, int *pi_x,
+ int *pi_y, int i_width, int i_height,
+ int i_h_align, int i_v_align );
+static void SetPalette ( p_vout_thread_t p_vout, u16 *red,
+ u16 *green, u16 *blue, u16 *transp );
+
+/*****************************************************************************
+ * vout_InitBank: initialize the video output bank.
+ *****************************************************************************/
+void vout_InitBank ( void )
+{
+ p_vout_bank->i_count = 0;
+
+ vlc_mutex_init( &p_vout_bank->lock );
+}
+
+/*****************************************************************************
+ * vout_EndBank: empty the video output bank.
+ *****************************************************************************
+ * This function ends all unused video outputs and empties the bank in
+ * case of success.
+ *****************************************************************************/
+void vout_EndBank ( void )
+{
+ /* Ask all remaining video outputs to die */
+ while( p_vout_bank->i_count )
+ {
+ vout_DestroyThread(
+ p_vout_bank->pp_vout[ --p_vout_bank->i_count ], NULL );
+ }
+
+ vlc_mutex_destroy( &p_vout_bank->lock );
+}
+
+/*****************************************************************************