- if( p_vout->chroma.p_module->pf_deactivate )
- p_vout->chroma.p_module->pf_deactivate( VLC_OBJECT(p_vout) );
- p_vout->chroma.p_module->pf_activate( VLC_OBJECT(p_vout) );
+ if( p_vout->chroma.p_module )
+ {
+ if( p_vout->chroma.p_module->pf_deactivate )
+ p_vout->chroma.p_module->pf_deactivate( VLC_OBJECT(p_vout) );
+ p_vout->chroma.p_module->pf_activate( VLC_OBJECT(p_vout) );
+ }
+ }
+
+ if( p_vout->i_changes & VOUT_PICTURE_BUFFERS_CHANGE )
+ {
+ /* This happens when the picture buffers need to be recreated.
+ * This is useful on multimonitor displays for instance.
+ *
+ * Warning: This only works when the vout creates only 1 picture
+ * buffer!! */
+ p_vout->i_changes &= ~VOUT_PICTURE_BUFFERS_CHANGE;
+
+ if( !p_vout->b_direct )
+ {
+ module_Unneed( p_vout, p_vout->chroma.p_module );
+ }
+
+ vlc_mutex_lock( &p_vout->picture_lock );
+
+ p_vout->pf_end( p_vout );
+
+ I_OUTPUTPICTURES = I_RENDERPICTURES = 0;
+
+ p_vout->b_error = InitThread( p_vout );
+
+ vlc_mutex_unlock( &p_vout->picture_lock );