+/* Thread helpers */
+static picture_t *ChromaGetPicture( filter_t *p_filter )
+{
+ picture_t *p_pic = (picture_t *)p_filter->p_owner;
+ p_filter->p_owner = NULL;
+ return p_pic;
+}
+
+static int ChromaCreate( vout_thread_t *p_vout )
+{
+ filter_t *p_chroma;
+
+ /* Choose the best module */
+ p_chroma = p_vout->p_chroma = vlc_object_create( p_vout, sizeof(filter_t) );
+
+ vlc_object_attach( p_chroma, p_vout );
+
+ /* TODO: Set the fmt_in and fmt_out stuff here */
+ p_chroma->fmt_in.video = p_vout->fmt_render;
+ p_chroma->fmt_out.video = p_vout->fmt_out;
+
+ p_chroma->fmt_out.video.i_rmask = p_vout->output.i_rmask;
+ p_chroma->fmt_out.video.i_gmask = p_vout->output.i_gmask;
+ p_chroma->fmt_out.video.i_bmask = p_vout->output.i_bmask;
+ p_chroma->fmt_out.video.i_rrshift = p_vout->output.i_rrshift;
+ p_chroma->fmt_out.video.i_lrshift = p_vout->output.i_lrshift;
+ p_chroma->fmt_out.video.i_rgshift = p_vout->output.i_rgshift;
+ p_chroma->fmt_out.video.i_lgshift = p_vout->output.i_lgshift;
+ p_chroma->fmt_out.video.i_rbshift = p_vout->output.i_rbshift;
+ p_chroma->fmt_out.video.i_lbshift = p_vout->output.i_lbshift;
+ p_chroma->p_module = module_Need( p_chroma, "video filter2", NULL, 0 );
+
+ if( p_chroma->p_module == NULL )
+ {
+ msg_Err( p_vout, "no chroma module for %4.4s to %4.4s",
+ (char*)&p_vout->render.i_chroma,
+ (char*)&p_vout->output.i_chroma );
+
+ vlc_object_release( p_vout->p_chroma );
+ p_vout->p_chroma = NULL;
+ return VLC_EGENERIC;
+ }
+ p_chroma->pf_vout_buffer_new = ChromaGetPicture;
+ return VLC_SUCCESS;
+}
+static void ChromaDestroy( vout_thread_t *p_vout )
+{
+ assert( !p_vout->b_direct && p_vout->p_chroma );
+
+ module_Unneed( p_vout->p_chroma, p_vout->p_chroma->p_module );
+ vlc_object_release( p_vout->p_chroma );
+ p_vout->p_chroma = NULL;
+}
+
+
+