- vout_Print( p_font, p_vout->p_buffer[ p_vout->i_buffer_index ].p_data +
- p_subpic->i_x * p_vout->i_bytes_per_pixel +
- p_subpic->i_y * p_vout->i_bytes_per_line,
- p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line,
- p_subpic->type.text.i_char_color, p_subpic->type.text.i_border_color,
- p_subpic->type.text.i_bg_color, p_subpic->type.text.i_style,
- p_subpic->p_data );
- SetBufferArea( p_vout, p_subpic->i_x, p_subpic->i_y, i_width, i_height );
- }
- break;
-
+ case DVD_SUBPICTURE: /* DVD subpicture unit */
+ /* test if the picture really has to be displayed */
+ if( mdate() < p_subpic->begin_date )
+ {
+ /* not yet, see you later */
+ break;
+ }
+ if( mdate() > p_subpic->end_date )
+ {
+ /* too late, destroying the subpic */
+ vout_DestroySubPicture( p_vout, p_subpic );
+ break;
+ }
+ vout_RenderSPU( &p_vout->p_buffer[ p_vout->i_buffer_index ],
+ p_subpic, p_vout->i_bytes_per_pixel,
+ p_vout->i_bytes_per_line );
+ break;
+ case TEXT_SUBPICTURE: /* single line text */
+ /* Select default font if not specified */
+ p_font = p_subpic->type.text.p_font;
+ if( p_font == NULL )
+ {
+ p_font = p_vout->p_default_font;
+ }
+
+ /* Compute text size (width and height fields are ignored)
+ * and print it */
+ vout_TextSize( p_font, p_subpic->type.text.i_style,
+ p_subpic->p_data, &i_width, &i_height );
+ if( !Align( p_vout, &p_subpic->i_x, &p_subpic->i_y,
+ i_width, i_height, p_subpic->i_horizontal_align,
+ p_subpic->i_vertical_align ) )
+ {
+ vout_Print( p_font,
+ p_vout->p_buffer[ p_vout->i_buffer_index ].p_data +
+ p_subpic->i_x * p_vout->i_bytes_per_pixel +
+ p_subpic->i_y * p_vout->i_bytes_per_line,
+ p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line,
+ p_subpic->type.text.i_char_color,
+ p_subpic->type.text.i_border_color,
+ p_subpic->type.text.i_bg_color,
+ p_subpic->type.text.i_style, p_subpic->p_data );
+ SetBufferArea( p_vout, p_subpic->i_x, p_subpic->i_y,
+ i_width, i_height );
+ }
+ break;
+