- int i;
-
- /* Initialize output method, it allocates direct buffers for us */
- if( vout_InitWrapper( p_vout ) )
- return VLC_EGENERIC;
-
- p_vout->p->p_picture_displayed = NULL;
-
- if( !I_OUTPUTPICTURES )
- {
- msg_Err( p_vout, "plugin was unable to allocate at least "
- "one direct buffer" );
- vout_EndWrapper( p_vout );
- return VLC_EGENERIC;
- }
-
- if( I_OUTPUTPICTURES > VOUT_MAX_PICTURES )
- {
- msg_Err( p_vout, "plugin allocated too many direct buffers, "
- "our internal buffers must have overflown." );
- vout_EndWrapper( p_vout );
- return VLC_EGENERIC;
- }
-
- msg_Dbg( p_vout, "got %i direct buffer(s)", I_OUTPUTPICTURES );
-
- if( !p_vout->fmt_out.i_width || !p_vout->fmt_out.i_height )
- {
- p_vout->fmt_out.i_width = p_vout->fmt_out.i_visible_width =
- p_vout->output.i_width;
- p_vout->fmt_out.i_height = p_vout->fmt_out.i_visible_height =
- p_vout->output.i_height;
- p_vout->fmt_out.i_x_offset = p_vout->fmt_out.i_y_offset = 0;
-
- p_vout->fmt_out.i_chroma = p_vout->output.i_chroma;
- }
- if( !p_vout->fmt_out.i_sar_num || !p_vout->fmt_out.i_sar_num )
- {
- p_vout->fmt_out.i_sar_num = p_vout->output.i_aspect *
- p_vout->fmt_out.i_height;
- p_vout->fmt_out.i_sar_den = VOUT_ASPECT_FACTOR *
- p_vout->fmt_out.i_width;
- }
-
- vlc_ureduce( &p_vout->fmt_out.i_sar_num, &p_vout->fmt_out.i_sar_den,
- p_vout->fmt_out.i_sar_num, p_vout->fmt_out.i_sar_den, 0 );
-
- /* FIXME removed the need of both fmt_* and heap infos */
- /* Calculate shifts from system-updated masks */
- PictureHeapFixRgb( &p_vout->render );
- VideoFormatImportRgb( &p_vout->fmt_render, &p_vout->render );
-
- PictureHeapFixRgb( &p_vout->output );
- VideoFormatImportRgb( &p_vout->fmt_out, &p_vout->output );
-
- /* print some usefull debug info about different vout formats
- */
- msg_Dbg( p_vout, "pic render sz %ix%i, of (%i,%i), vsz %ix%i, 4cc %4.4s, sar %i:%i, msk r0x%x g0x%x b0x%x",
- p_vout->fmt_render.i_width, p_vout->fmt_render.i_height,
- p_vout->fmt_render.i_x_offset, p_vout->fmt_render.i_y_offset,
- p_vout->fmt_render.i_visible_width,
- p_vout->fmt_render.i_visible_height,
- (char*)&p_vout->fmt_render.i_chroma,
- p_vout->fmt_render.i_sar_num, p_vout->fmt_render.i_sar_den,
- p_vout->fmt_render.i_rmask, p_vout->fmt_render.i_gmask, p_vout->fmt_render.i_bmask );
-
- msg_Dbg( p_vout, "pic in sz %ix%i, of (%i,%i), vsz %ix%i, 4cc %4.4s, sar %i:%i, msk r0x%x g0x%x b0x%x",
- p_vout->fmt_in.i_width, p_vout->fmt_in.i_height,
- p_vout->fmt_in.i_x_offset, p_vout->fmt_in.i_y_offset,
- p_vout->fmt_in.i_visible_width,
- p_vout->fmt_in.i_visible_height,
- (char*)&p_vout->fmt_in.i_chroma,
- p_vout->fmt_in.i_sar_num, p_vout->fmt_in.i_sar_den,
- p_vout->fmt_in.i_rmask, p_vout->fmt_in.i_gmask, p_vout->fmt_in.i_bmask );
-
- msg_Dbg( p_vout, "pic out sz %ix%i, of (%i,%i), vsz %ix%i, 4cc %4.4s, sar %i:%i, msk r0x%x g0x%x b0x%x",
- p_vout->fmt_out.i_width, p_vout->fmt_out.i_height,
- p_vout->fmt_out.i_x_offset, p_vout->fmt_out.i_y_offset,
- p_vout->fmt_out.i_visible_width,
- p_vout->fmt_out.i_visible_height,
- (char*)&p_vout->fmt_out.i_chroma,
- p_vout->fmt_out.i_sar_num, p_vout->fmt_out.i_sar_den,
- p_vout->fmt_out.i_rmask, p_vout->fmt_out.i_gmask, p_vout->fmt_out.i_bmask );
-
- assert( p_vout->output.i_width == p_vout->render.i_width &&
- p_vout->output.i_height == p_vout->render.i_height &&
- p_vout->output.i_chroma == p_vout->render.i_chroma );
- /* Check whether we managed to create direct buffers similar to
- * the render buffers, ie same size and chroma */
-
- /* Cool ! We have direct buffers, we can ask the decoder to
- * directly decode into them ! Map the first render buffers to
- * the first direct buffers, but keep the first direct buffer
- * for memcpy operations */
- for( i = 1; i < VOUT_MAX_PICTURES; i++ )
- {
- if( p_vout->p_picture[ i ].i_type != DIRECT_PICTURE &&
- I_RENDERPICTURES >= VOUT_MIN_DIRECT_PICTURES - 1 &&
- p_vout->p_picture[ i - 1 ].i_type == DIRECT_PICTURE )
- {
- /* We have enough direct buffers so there's no need to
- * try to use system memory buffers. */
- break;
- }
- PP_RENDERPICTURE[ I_RENDERPICTURES ] = &p_vout->p_picture[ i ];
- I_RENDERPICTURES++;
- }