#define VOUT_ALIGN_BOTTOM 0x0008
#define VOUT_ALIGN_VMASK 0x000C
-#define MAX_JITTER_SAMPLES 20
-
/* scaling factor (applied to i_zoom in vout_thread_t) */
#define ZOOM_FP_FACTOR 1000
VLC_EXPORT( void, vout_DisplayPicture, ( vout_thread_t *, picture_t * ) );
VLC_EXPORT( void, vout_LinkPicture, ( vout_thread_t *, picture_t * ) );
VLC_EXPORT( void, vout_UnlinkPicture, ( vout_thread_t *, picture_t * ) );
-VLC_EXPORT( void, vout_PlacePicture, ( const vout_thread_t *, unsigned int, unsigned int, unsigned int *, unsigned int *, unsigned int *, unsigned int * ) );
/**
* Return the spu_t object associated to a vout_thread_t.
return PP_OUTPUTPICTURE[0];
}
-/**
- * Calculate image window coordinates
- *
- * This function will be accessed by plugins. It calculates the relative
- * position of the output window and the image window.
- */
-void vout_PlacePicture( const vout_thread_t *p_vout,
- unsigned int i_width, unsigned int i_height,
- unsigned int *restrict pi_x,
- unsigned int *restrict pi_y,
- unsigned int *restrict pi_width,
- unsigned int *restrict pi_height )
-{
- if( i_width <= 0 || i_height <= 0 )
- {
- *pi_width = *pi_height = *pi_x = *pi_y = 0;
- return;
- }
-
- if( p_vout->b_autoscale )
- {
- *pi_width = i_width;
- *pi_height = i_height;
- }
- else
- {
- int i_zoom = p_vout->i_zoom;
- /* be realistic, scaling factor confined between .2 and 10. */
- if( i_zoom > 10 * ZOOM_FP_FACTOR ) i_zoom = 10 * ZOOM_FP_FACTOR;
- else if( i_zoom < ZOOM_FP_FACTOR / 5 ) i_zoom = ZOOM_FP_FACTOR / 5;
-
- unsigned int i_original_width, i_original_height;
-
- if( p_vout->fmt_in.i_sar_num >= p_vout->fmt_in.i_sar_den )
- {
- i_original_width = p_vout->fmt_in.i_visible_width *
- p_vout->fmt_in.i_sar_num / p_vout->fmt_in.i_sar_den;
- i_original_height = p_vout->fmt_in.i_visible_height;
- }
- else
- {
- i_original_width = p_vout->fmt_in.i_visible_width;
- i_original_height = p_vout->fmt_in.i_visible_height *
- p_vout->fmt_in.i_sar_den / p_vout->fmt_in.i_sar_num;
- }
-#ifdef WIN32
- /* On windows, inner video window exceeding container leads to black screen */
- *pi_width = __MIN( i_width, i_original_width * i_zoom / ZOOM_FP_FACTOR );
- *pi_height = __MIN( i_height, i_original_height * i_zoom / ZOOM_FP_FACTOR );
-#else
- *pi_width = i_original_width * i_zoom / ZOOM_FP_FACTOR ;
- *pi_height = i_original_height * i_zoom / ZOOM_FP_FACTOR ;
-#endif
- }
-
- int64_t i_scaled_width = p_vout->fmt_in.i_visible_width * (int64_t)p_vout->fmt_in.i_sar_num *
- *pi_height / p_vout->fmt_in.i_visible_height / p_vout->fmt_in.i_sar_den;
- int64_t i_scaled_height = p_vout->fmt_in.i_visible_height * (int64_t)p_vout->fmt_in.i_sar_den *
- *pi_width / p_vout->fmt_in.i_visible_width / p_vout->fmt_in.i_sar_num;
-
- if( i_scaled_width <= 0 || i_scaled_height <= 0 )
- {
- msg_Warn( p_vout, "ignoring broken aspect ratio" );
- i_scaled_width = *pi_width;
- i_scaled_height = *pi_height;
- }
-
- if( i_scaled_width > *pi_width )
- *pi_height = i_scaled_height;
- else
- *pi_width = i_scaled_width;
-
- switch( p_vout->i_alignment & VOUT_ALIGN_HMASK )
- {
- case VOUT_ALIGN_LEFT:
- *pi_x = 0;
- break;
- case VOUT_ALIGN_RIGHT:
- *pi_x = i_width - *pi_width;
- break;
- default:
- *pi_x = ( i_width - *pi_width ) / 2;
- }
-
- switch( p_vout->i_alignment & VOUT_ALIGN_VMASK )
- {
- case VOUT_ALIGN_TOP:
- *pi_y = 0;
- break;
- case VOUT_ALIGN_BOTTOM:
- *pi_y = i_height - *pi_height;
- break;
- default:
- *pi_y = ( i_height - *pi_height ) / 2;
- }
-}
-
#undef vout_AllocatePicture
/**
* Allocate a new picture in the heap.