static void RenderYUVGrayPicture ( vout_thread_t *p_vout, picture_t *p_pic );
static void RenderYUV16Picture ( vout_thread_t *p_vout, picture_t *p_pic );
static void RenderYUV32Picture ( vout_thread_t *p_vout, picture_t *p_pic );
-static void RenderInfo ( vout_thread_t *p_vout );
+static void RenderPictureInfo ( vout_thread_t *p_vout, picture_t *p_pic );
static int RenderIdle ( vout_thread_t *p_vout, int i_level );
/*******************************************************************************
if( p_vout->b_active )
{
RenderPicture( p_vout, p_pic );
+ if( p_vout->b_info )
+ {
+ RenderPictureInfo( p_vout, p_pic );
+ }
}
vlc_mutex_lock( &p_vout->lock );
p_pic->i_status = p_pic->i_refcount ? DISPLAYED_PICTURE : DESTROYED_PICTURE;
i_idle_level = 0;
b_display = 1;
- /* Render additionnal informations */
- if( p_vout->b_active && p_vout->b_info )
- {
- RenderInfo( p_vout );
- }
-
/* Sleep until its display date */
mwait( pic_date );
}
/* Build gamma table */
for( i_index = 0; i_index < 256; i_index++ )
{
- //?? add contrast and brightness
i_gamma[i_index] = 255. * pow( (double)i_index / 255., p_vout->f_gamma );
}
p_vout->picture_render_time = mdate();
#endif
+ /* Change aspect ratio or resize frame to fit frame */
+ if( (p_pic->i_width > p_vout->i_width) || (p_pic->i_height > p_vout->i_height) )
+ {
+#ifdef VIDEO_X11
+ /* X11: window can be resized, so resize it - the picture won't be
+ * rendered since any alteration of the window size means recreating the
+ * XImages */
+ p_vout->i_new_width = p_pic->i_width;
+ p_vout->i_new_height = p_pic->i_height;
+ return;
+#else
+ /* Other drivers: the video output thread can't change its size, so
+ * we need to change the aspect ratio */
+ //????
+#endif
+ }
+
+ /* Choose appropriate rendering function */
switch( p_pic->i_type )
{
case YUV_420_PICTURE: /* YUV picture: YUV transformation */
}
/*******************************************************************************
- * RenderInfo: print additionnal informations on a picture
+ * RenderPictureInfo: print additionnal informations on a picture
*******************************************************************************
* This function will add informations such as fps and buffer size on a picture
*******************************************************************************/
-static void RenderInfo( vout_thread_t *p_vout )
+static void RenderPictureInfo( vout_thread_t *p_vout, picture_t *p_pic )
{
char psz_buffer[256]; /* string buffer */
#ifdef DEBUG
#endif
#ifdef STATS
- /* Print FPS rate in upper right corner */
+ /*
+ * Print FPS rate in upper right corner
+ */
if( p_vout->c_fps_samples > VOUT_FPS_SAMPLES )
{
sprintf( psz_buffer, "%.2f fps", (double) VOUT_FPS_SAMPLES * 1000000 /
vout_SysPrint( p_vout, p_vout->i_width, 0, 1, -1, psz_buffer );
}
- /* Print statistics in upper left corner */
+ /*
+ * Print statistics in upper left corner
+ */
sprintf( psz_buffer, "gamma=%.2f %ld frames (%.1f %% idle)",
p_vout->f_gamma, p_vout->c_fps_samples, p_vout->c_loops ?
(double ) p_vout->c_idle_loops * 100 / p_vout->c_loops : 100. );
#endif
#ifdef DEBUG
- /* Print heap state in lower left corner */
+ /*
+ * Print heap state in lower left corner
+ */
for( i_picture = 0; i_picture < VOUT_MAX_PICTURES; i_picture++ )
{
switch( p_vout->p_picture[i_picture].i_status )
#endif
#ifdef DEBUG_VIDEO
- /* Print rendering statistics in lower right corner */
- sprintf( psz_buffer, "picture rendering time: %lu us",
- (unsigned long) p_vout->picture_render_time );
+ /*
+ * Print picture info in lower right corner
+ */
+ switch( p_pic->i_type )
+ {
+ case YUV_420_PICTURE:
+ sprintf( psz_buffer, "YUV 4:2:0 picture, rendering time: %lu us",
+ (unsigned long) p_vout->picture_render_time );
+ break;
+ case YUV_422_PICTURE:
+ sprintf( psz_buffer, "YUV 4:2:2 picture, rendering time: %lu us",
+ (unsigned long) p_vout->picture_render_time );
+ break;
+ case YUV_444_PICTURE:
+ sprintf( psz_buffer, "YUV 4:4:4 picture, rendering time: %lu us",
+ (unsigned long) p_vout->picture_render_time );
+ break;
+ default:
+ sprintf( psz_buffer, "unknown picture, rendering time: %lu us",
+ (unsigned long) p_vout->picture_render_time );
+ break;
+ }
vout_SysPrint( p_vout, p_vout->i_width, p_vout->i_height, 1, 1, psz_buffer );
#endif
}