Commit 8d990276 authored by Vincent Seguin's avatar Vincent Seguin

Resize qui fonctionne.

parent 0fe4da87
...@@ -248,6 +248,10 @@ ...@@ -248,6 +248,10 @@
#define VOUT_GRAYSCALE_VAR "vlc_grayscale" #define VOUT_GRAYSCALE_VAR "vlc_grayscale"
#define VOUT_GRAYSCALE_DEFAULT 0 #define VOUT_GRAYSCALE_DEFAULT 0
/* Environment variable for fullscreen output mode, and default value */
#define VOUT_FULLSCREEN_VAR "vlc_fullscreen"
#define VOUT_FULLSCREEN_DEFAULT 0
/* Default gamma */ /* Default gamma */
#define VOUT_GAMMA 0. #define VOUT_GAMMA 0.
......
...@@ -49,28 +49,6 @@ typedef void (vout_convert_t)( p_vout_thread_t p_vout, void *p_pic, ...@@ -49,28 +49,6 @@ typedef void (vout_convert_t)( p_vout_thread_t p_vout, void *p_pic,
int i_width, int i_height, int i_eol, int i_pic_eol, int i_width, int i_height, int i_eol, int i_pic_eol,
int i_scale, int i_matrix_coefficients ); int i_scale, int i_matrix_coefficients );
/*******************************************************************************
* vout_scale_t: horizontal scaling function
*******************************************************************************
* The convertion function only perform a vertical scaling. Horizontal scaling
* is done later using this function.
* Parameters:
* p_vout video output thread
* p_src source address (start address in picture)
* p_dst destination address (start address in picture)
* i_width source width
* i_height source height
* i_line_width source total pixels per line
* i_dst_line_width destination total pixels per line
* i_scale if non 0, horizontal scaling is 1 - 1/i_scale
* Conditions:
* i_height % 16
* i_scale < 0 if p_src == p_dst
*******************************************************************************/
typedef void (vout_scale_t)( p_vout_thread_t p_vout, void *p_src, void *p_dst,
int i_width, int i_height, int i_line_width,
int i_dst_line_width, int i_scale );
/******************************************************************************* /*******************************************************************************
* vout_thread_t: video output thread descriptor * vout_thread_t: video output thread descriptor
******************************************************************************* *******************************************************************************
...@@ -91,18 +69,18 @@ typedef struct vout_thread_s ...@@ -91,18 +69,18 @@ typedef struct vout_thread_s
int * pi_status; /* temporary status flag */ int * pi_status; /* temporary status flag */
p_vout_sys_t p_sys; /* system output method */ p_vout_sys_t p_sys; /* system output method */
/* Current display properties */ /* Current display properties */
boolean_t b_info; /* print additionnal informations */ boolean_t b_grayscale; /* color or grayscale display */
boolean_t b_grayscale; /* color or grayscale display */
int i_width; /* current output method width */ int i_width; /* current output method width */
int i_height; /* current output method height */ int i_height; /* current output method height */
int i_bytes_per_line;/* bytes per line (including virtual) */ int i_bytes_per_line;/* bytes per line (including virtual) */
int i_screen_depth; /* bits per pixel */ int i_screen_depth; /* bits per pixel */
int i_bytes_per_pixel; /* real screen depth */ int i_bytes_per_pixel; /* real screen depth */
int i_horizontal_scale; /* horizontal display scale */
int i_vertical_scale; /* vertical display scale */
float f_gamma; /* gamma */ float f_gamma; /* gamma */
/* Pictures and rendering properties */
boolean_t b_info; /* print additionnal informations */
#ifdef STATS #ifdef STATS
/* Statistics - these numbers are not supposed to be accurate, but are a /* Statistics - these numbers are not supposed to be accurate, but are a
* good indication of the thread status */ * good indication of the thread status */
...@@ -123,18 +101,16 @@ typedef struct vout_thread_s ...@@ -123,18 +101,16 @@ typedef struct vout_thread_s
vout_convert_t * p_ConvertYUV420; /* YUV 4:2:0 converter */ vout_convert_t * p_ConvertYUV420; /* YUV 4:2:0 converter */
vout_convert_t * p_ConvertYUV422; /* YUV 4:2:2 converter */ vout_convert_t * p_ConvertYUV422; /* YUV 4:2:2 converter */
vout_convert_t * p_ConvertYUV444; /* YUV 4:4:4 converter */ vout_convert_t * p_ConvertYUV444; /* YUV 4:4:4 converter */
vout_scale_t * p_Scale; /* scaler */
} vout_thread_t; } vout_thread_t;
/* Flags for changes - these flags are set in the i_changes field when another /* Flags for changes - these flags are set in the i_changes field when another
* thread changed a variable */ * thread changed a variable */
#define VOUT_INFO_CHANGE 0x0001 /* b_info changed */ #define VOUT_INFO_CHANGE 0x0001 /* b_info changed */
#define VOUT_GRAYSCALE_CHANGE 0x0002 /* b_grayscale changed */ #define VOUT_GRAYSCALE_CHANGE 0x0002 /* b_grayscale changed */
#define VOUT_SIZE_CHANGE 0x0004 /* size changed */ #define VOUT_SIZE_CHANGE 0x0008 /* size changed */
#define VOUT_DEPTH_CHANGE 0x0008 /* depth changed */ #define VOUT_DEPTH_CHANGE 0x0010 /* depth changed */
#define VOUT_RATIO_CHANGE 0x0010 /* display ratio changed */ #define VOUT_GAMMA_CHANGE 0x0080 /* gamma changed */
#define VOUT_GAMMA_CHANGE 0x0020 /* gamma changed */ #define VOUT_NODISPLAY_CHANGE 0xffff /* changes which forbidden display */
#define VOUT_NODISPLAY_CHANGE 0xffdc /* changes which forbiden the display */
/******************************************************************************* /*******************************************************************************
* Prototypes * Prototypes
......
...@@ -222,45 +222,6 @@ int intf_ProcessKey( intf_thread_t *p_intf, int i_key ) ...@@ -222,45 +222,6 @@ int intf_ProcessKey( intf_thread_t *p_intf, int i_key )
vlc_mutex_unlock( &p_intf->p_vout->change_lock ); vlc_mutex_unlock( &p_intf->p_vout->change_lock );
} }
break; break;
case 'x': /* horizontal aspect ratio - */
if( (p_intf->p_vout != NULL) && (p_intf->p_vout->i_horizontal_scale > -INTF_SCALE_LIMIT) )
{
vlc_mutex_lock( &p_intf->p_vout->change_lock );
p_intf->p_vout->i_horizontal_scale--;
p_intf->p_vout->i_changes |= VOUT_RATIO_CHANGE;
vlc_mutex_unlock( &p_intf->p_vout->change_lock );
}
break;
case 'X': /* horizontal aspect ratio + */
if( (p_intf->p_vout != NULL) && (p_intf->p_vout->i_horizontal_scale < INTF_SCALE_LIMIT) )
{
vlc_mutex_lock( &p_intf->p_vout->change_lock );
p_intf->p_vout->i_horizontal_scale++;
p_intf->p_vout->i_changes |= VOUT_RATIO_CHANGE;
vlc_mutex_unlock( &p_intf->p_vout->change_lock );
}
break;
case 'y': /* vertical aspect ratio - */
if( (p_intf->p_vout != NULL) && (p_intf->p_vout->i_vertical_scale > -INTF_SCALE_LIMIT) )
{
vlc_mutex_lock( &p_intf->p_vout->change_lock );
p_intf->p_vout->i_vertical_scale--;
p_intf->p_vout->i_changes |= VOUT_RATIO_CHANGE;
vlc_mutex_unlock( &p_intf->p_vout->change_lock );
}
break;
case 'Y': /* horizontal aspect ratio + */
if( (p_intf->p_vout != NULL) && (p_intf->p_vout->i_vertical_scale < INTF_SCALE_LIMIT) )
{
vlc_mutex_lock( &p_intf->p_vout->change_lock );
p_intf->p_vout->i_vertical_scale++;
p_intf->p_vout->i_changes |= VOUT_RATIO_CHANGE;
vlc_mutex_unlock( &p_intf->p_vout->change_lock );
}
break;
case 'f': /* toggle fullscreen */
//??
break;
case ' ': /* toggle info */ case ' ': /* toggle info */
if( p_intf->p_vout != NULL ) if( p_intf->p_vout != NULL )
{ {
......
...@@ -61,6 +61,7 @@ static const struct option longopts[] = ...@@ -61,6 +61,7 @@ static const struct option longopts[] =
{ "novideo", 0, 0, OPT_NOVIDEO }, { "novideo", 0, 0, OPT_NOVIDEO },
{ "grayscale", 0, 0, 'g' }, { "grayscale", 0, 0, 'g' },
{ "color", 0, 0, OPT_COLOR }, { "color", 0, 0, OPT_COLOR },
{ "fullscreen", 0, 0, 'f' },
/* VLAN management options */ /* VLAN management options */
{ "novlans", 0, 0, OPT_NOVLANS }, { "novlans", 0, 0, OPT_NOVLANS },
...@@ -69,7 +70,7 @@ static const struct option longopts[] = ...@@ -69,7 +70,7 @@ static const struct option longopts[] =
}; };
/* Short options */ /* Short options */
static const char *psz_shortopts = "hg"; static const char *psz_shortopts = "hgf";
/******************************************************************************* /*******************************************************************************
* Global variable program_data - this is the one and only, see main.h * Global variable program_data - this is the one and only, see main.h
...@@ -350,6 +351,9 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] ) ...@@ -350,6 +351,9 @@ static int GetConfiguration( int i_argc, char *ppsz_argv[], char *ppsz_env[] )
case OPT_COLOR: /* --color */ case OPT_COLOR: /* --color */
main_PutIntVariable( VOUT_GRAYSCALE_VAR, 0 ); main_PutIntVariable( VOUT_GRAYSCALE_VAR, 0 );
break; break;
case 'f': /* -f, --fullscreen */
main_PutIntVariable( VOUT_FULLSCREEN_VAR, 1 );
break;
/* VLAN management options */ /* VLAN management options */
case OPT_NOVLANS: /* --novlans */ case OPT_NOVLANS: /* --novlans */
...@@ -428,7 +432,6 @@ static void Usage( void ) ...@@ -428,7 +432,6 @@ static void Usage( void )
" [esc], q quit\n" \ " [esc], q quit\n" \
" +, -, m change volume, mute\n" \ " +, -, m change volume, mute\n" \
" g, G, c change gamma, toggle grayscale\n" \ " g, G, c change gamma, toggle grayscale\n" \
" x, X, y, Y, f change aspect ratio, toggle fullscreen\n" \
" 0 - 9 select channel\n" \ " 0 - 9 select channel\n" \
" [space] toggle info printing\n" \ " [space] toggle info printing\n" \
); );
......
...@@ -71,11 +71,6 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_ ...@@ -71,11 +71,6 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_
/* Initialize some fields used by the system-dependant method - these fields will /* Initialize some fields used by the system-dependant method - these fields will
* probably be modified by the method, and are only preferences */ * probably be modified by the method, and are only preferences */
#ifdef DEBUG
p_vout->b_info = 1;
#else
p_vout->b_info = 0;
#endif
p_vout->b_grayscale = main_GetIntVariable( VOUT_GRAYSCALE_VAR, p_vout->b_grayscale = main_GetIntVariable( VOUT_GRAYSCALE_VAR,
VOUT_GRAYSCALE_DEFAULT ); VOUT_GRAYSCALE_DEFAULT );
p_vout->i_width = i_width; p_vout->i_width = i_width;
...@@ -83,13 +78,15 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_ ...@@ -83,13 +78,15 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_
p_vout->i_bytes_per_line = i_width * 2; p_vout->i_bytes_per_line = i_width * 2;
p_vout->i_screen_depth = 15; p_vout->i_screen_depth = 15;
p_vout->i_bytes_per_pixel = 2; p_vout->i_bytes_per_pixel = 2;
p_vout->i_horizontal_scale = 0;
p_vout->i_vertical_scale = 0;
p_vout->f_gamma = VOUT_GAMMA; p_vout->f_gamma = VOUT_GAMMA;
intf_DbgMsg("wished configuration: %dx%d,%d (%d bytes/pixel, %d bytes/line), scaling %+d:%+d, gray=%d\n", #ifdef DEBUG
p_vout->b_info = 1;
#else
p_vout->b_info = 0;
#endif
intf_DbgMsg("wished configuration: %dx%d,%d (%d bytes/pixel, %d bytes/line)\n",
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth, p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line, p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line );
p_vout->i_horizontal_scale, p_vout->i_vertical_scale, p_vout->b_grayscale );
/* Create and initialize system-dependant method - this function issues its /* Create and initialize system-dependant method - this function issues its
* own error messages */ * own error messages */
...@@ -98,10 +95,9 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_ ...@@ -98,10 +95,9 @@ vout_thread_t * vout_CreateThread ( char *psz_display, int i_root_
free( p_vout ); free( p_vout );
return( NULL ); return( NULL );
} }
intf_DbgMsg("actual configuration: %dx%d,%d (%d bytes/pixel, %d bytes/line), scaling %+d:%+d, gray=%d\n", intf_DbgMsg("actual configuration: %dx%d,%d (%d bytes/pixel, %d bytes/line)\n",
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth, p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line, p_vout->i_bytes_per_pixel, p_vout->i_bytes_per_line );
p_vout->i_horizontal_scale, p_vout->i_vertical_scale, p_vout->b_grayscale );
#ifdef STATS #ifdef STATS
/* Initialize statistics fields */ /* Initialize statistics fields */
...@@ -828,37 +824,64 @@ static void RenderBlank( vout_thread_t *p_vout ) ...@@ -828,37 +824,64 @@ static void RenderBlank( vout_thread_t *p_vout )
*******************************************************************************/ *******************************************************************************/
static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_blank ) static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_blank )
{ {
int i_display_height, i_display_width; /* display dimensions */
int i_height, i_width; /* source picture dimensions */
int i_scaled_height; /* scaled height of the picture */
int i_aspect_scale; /* aspect ratio vertical scale */
int i_eol; /* end of line offset for source */
byte_t * p_convert_dst; /* convertion destination */
#ifdef STATS #ifdef STATS
/* Start recording render time */ /* Start recording render time */
p_vout->render_time = mdate(); p_vout->render_time = mdate();
#endif #endif
/* Mark last picture date */ /* Mark last picture date */
p_vout->last_picture_date = p_pic->date; p_vout->last_picture_date = p_pic->date;
i_width = p_pic->i_width;
/* Blank screen if required */ i_height = p_pic->i_height;
if( b_blank ) i_display_width = p_vout->i_width;
i_display_height = p_vout->i_height;
/* Select scaling depending of aspect ratio */
switch( p_pic->i_aspect_ratio )
{ {
// ????? RenderBlank( p_vout ); case AR_3_4_PICTURE:
i_aspect_scale = (4 * i_height - 3 * i_width) ?
1 + 3 * i_width / ( 4 * i_height - 3 * i_width ) : 0;
break;
case AR_16_9_PICTURE:
i_aspect_scale = ( 16 * i_height - 9 * i_width ) ?
1 + 9 * i_width / ( 16 * i_height - 9 * i_width ) : 0;
break;
case AR_221_1_PICTURE:
i_aspect_scale = ( 221 * i_height - 100 * i_width ) ?
1 + 100 * i_width / ( 221 * i_height - 100 * i_width ) : 0;
break;
case AR_SQUARE_PICTURE:
default:
i_aspect_scale = 0;
} }
i_scaled_height = (i_aspect_scale ? i_height * (i_aspect_scale - 1) / i_aspect_scale : i_height);
/*
* Prepare scaling /* Crop picture if too large for the screen */
*/ if( i_width > i_display_width )
if( (p_pic->i_width > p_vout->i_width) || (p_pic->i_height > p_vout->i_height) )
{ {
#ifdef VIDEO_X11 i_eol = i_width - i_display_width / 16 * 16;
/* X11: window can be resized, so resize it - the picture won't be i_width = i_display_width / 16 * 16;
* rendered since any alteration of the window size means recreating the }
* XImages */ else
/* p_vout->i_new_width = p_pic->i_width; {
p_vout->i_new_height = p_pic->i_height;*/ i_eol = 0;
#else }
/* Other drivers: the video output thread can't change its size, so if( i_scaled_height > i_display_height )
* we need to change the aspect ratio */ {
//???? i_height = (i_aspect_scale * i_display_height / (i_aspect_scale - 1)) / 2 * 2;
#endif i_scaled_height = i_display_height;
} }
p_convert_dst = vout_SysGetPicture( p_vout ) +
( i_display_width - i_width ) / 2 * p_vout->i_bytes_per_pixel +
( i_display_height - i_scaled_height ) / 2 * p_vout->i_bytes_per_line;
/* /*
* Choose appropriate rendering function and render picture * Choose appropriate rendering function and render picture
...@@ -866,27 +889,26 @@ static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_b ...@@ -866,27 +889,26 @@ static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_b
switch( p_pic->i_type ) switch( p_pic->i_type )
{ {
case YUV_420_PICTURE: case YUV_420_PICTURE:
p_vout->p_ConvertYUV420( p_vout, vout_SysGetPicture( p_vout ), p_vout->p_ConvertYUV420( p_vout, p_convert_dst,
p_pic->p_y, p_pic->p_u, p_pic->p_v, p_pic->p_y, p_pic->p_u, p_pic->p_v,
p_pic->i_width, p_pic->i_height, 0, 0, i_width, i_height, i_eol,
4, p_pic->i_matrix_coefficients ); p_vout->i_bytes_per_line / p_vout->i_bytes_per_pixel - i_width,
i_aspect_scale, p_pic->i_matrix_coefficients );
break; break;
case YUV_422_PICTURE: case YUV_422_PICTURE:
/* ??? p_vout->p_convert_yuv_420( p_vout, p_vout->p_ConvertYUV422( p_vout, p_convert_dst,
p_pic->p_y, p_pic->p_u, p_pic->p_v, p_pic->p_y, p_pic->p_u, p_pic->p_v,
i_chroma_width, i_chroma_height, i_width, i_height, i_eol,
p_vout->i_width / 2, p_vout->i_height, p_vout->i_bytes_per_line / p_vout->i_bytes_per_pixel - i_width,
p_vout->i_bytes_per_line, i_aspect_scale, p_pic->i_matrix_coefficients );
0, 0, 0 ); break;
*/ break;
case YUV_444_PICTURE: case YUV_444_PICTURE:
/* ??? p_vout->p_convert_yuv_420( p_vout, p_vout->p_ConvertYUV444( p_vout, p_convert_dst,
p_pic->p_y, p_pic->p_u, p_pic->p_v, p_pic->p_y, p_pic->p_u, p_pic->p_v,
i_chroma_width, i_chroma_height, i_width, i_height, i_eol,
p_vout->i_width, p_vout->i_height, p_vout->i_bytes_per_line / p_vout->i_bytes_per_pixel - i_width,
p_vout->i_bytes_per_line, i_aspect_scale, p_pic->i_matrix_coefficients );
0, 0, 0 ); break;
*/ break;
#ifdef DEBUG #ifdef DEBUG
default: default:
intf_DbgMsg("error: unknown picture type %d\n", p_pic->i_type ); intf_DbgMsg("error: unknown picture type %d\n", p_pic->i_type );
...@@ -894,11 +916,6 @@ static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_b ...@@ -894,11 +916,6 @@ static int RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, boolean_t b_b
#endif #endif
} }
/*
* Terminate scaling
*/
//??
#ifdef STATS #ifdef STATS
/* End recording render time */ /* End recording render time */
p_vout->render_time = mdate() - p_vout->render_time; p_vout->render_time = mdate() - p_vout->render_time;
...@@ -1010,10 +1027,8 @@ static int RenderInfo( vout_thread_t *p_vout, boolean_t b_blank ) ...@@ -1010,10 +1027,8 @@ static int RenderInfo( vout_thread_t *p_vout, boolean_t b_blank )
break; break;
} }
} }
sprintf( psz_buffer, "%s %dx%d:%d scaling %+d:%+d g%+.2f pic: %d/%d/%d", sprintf( psz_buffer, "%dx%d:%d g%+.2f pic: %d/%d/%d",
p_vout->b_grayscale ? "gray" : "rgb",
p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth, p_vout->i_width, p_vout->i_height, p_vout->i_screen_depth,
p_vout->i_horizontal_scale, p_vout->i_vertical_scale,
p_vout->f_gamma, i_reserved_pic, i_ready_pic, p_vout->f_gamma, i_reserved_pic, i_ready_pic,
VOUT_MAX_PICTURES ); VOUT_MAX_PICTURES );
vout_SysPrint( p_vout, 0, p_vout->i_height, -1, 1, psz_buffer ); vout_SysPrint( p_vout, 0, p_vout->i_height, -1, 1, psz_buffer );
...@@ -1035,7 +1050,8 @@ static int Manage( vout_thread_t *p_vout ) ...@@ -1035,7 +1050,8 @@ static int Manage( vout_thread_t *p_vout )
} }
/* Clear changes flags which does not need management or have been handled */ /* Clear changes flags which does not need management or have been handled */
p_vout->i_changes &= ~(VOUT_INFO_CHANGE | VOUT_GAMMA_CHANGE | VOUT_GRAYSCALE_CHANGE); p_vout->i_changes &= ~(VOUT_GAMMA_CHANGE | VOUT_GRAYSCALE_CHANGE |
VOUT_INFO_CHANGE );
/* Detect unauthorized changes */ /* Detect unauthorized changes */
if( p_vout->i_changes ) if( p_vout->i_changes )
......
...@@ -214,7 +214,7 @@ int vout_SysManage( vout_thread_t *p_vout ) ...@@ -214,7 +214,7 @@ int vout_SysManage( vout_thread_t *p_vout )
if( p_vout->i_changes & VOUT_SIZE_CHANGE ) if( p_vout->i_changes & VOUT_SIZE_CHANGE )
{ {
intf_DbgMsg("resizing window\n"); intf_DbgMsg("resizing window\n");
p_vout->i_changes &= ~VOUT_SIZE_CHANGE; p_vout->i_changes &= ~VOUT_SIZE_CHANGE;
/* Resize window */ /* Resize window */
XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->window, XResizeWindow( p_vout->p_sys->p_display, p_vout->p_sys->window,
......
...@@ -72,12 +72,6 @@ static void ConvertYUV422RGB32( p_vout_thread_t p_vout, u32 *p_pic, yuv_data ...@@ -72,12 +72,6 @@ static void ConvertYUV422RGB32( p_vout_thread_t p_vout, u32 *p_pic, yuv_data
int i_width, int i_height, int i_eol, int i_pic_eol, int i_scale, int i_matrix_coefficients ); int i_width, int i_height, int i_eol, int i_pic_eol, int i_scale, int i_matrix_coefficients );
static void ConvertYUV444RGB32( p_vout_thread_t p_vout, u32 *p_pic, yuv_data_t *p_y, yuv_data_t *p_u, yuv_data_t *p_v, static void ConvertYUV444RGB32( p_vout_thread_t p_vout, u32 *p_pic, yuv_data_t *p_y, yuv_data_t *p_u, yuv_data_t *p_v,
int i_width, int i_height, int i_eol, int i_pic_eol, int i_scale, int i_matrix_coefficients ); int i_width, int i_height, int i_eol, int i_pic_eol, int i_scale, int i_matrix_coefficients );
static void Scale16 ( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta );
static void Scale24 ( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta );
static void Scale32 ( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta );
/******************************************************************************* /*******************************************************************************
* CLIP_BYTE macro: boundary detection * CLIP_BYTE macro: boundary detection
...@@ -516,19 +510,16 @@ static void SetTables( vout_thread_t *p_vout ) ...@@ -516,19 +510,16 @@ static void SetTables( vout_thread_t *p_vout )
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray16;
p_vout->p_Scale = (vout_scale_t *) Scale16;
break; break;
case 24: case 24:
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray24;
p_vout->p_Scale = (vout_scale_t *) Scale24;
break; break;
case 32: case 32:
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32;
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertY4Gray32;
p_vout->p_Scale = (vout_scale_t *) Scale32;
break; break;
} }
} }
...@@ -542,19 +533,16 @@ static void SetTables( vout_thread_t *p_vout ) ...@@ -542,19 +533,16 @@ static void SetTables( vout_thread_t *p_vout )
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB16; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB16;
p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB16; p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB16;
p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB16; p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB16;
p_vout->p_Scale = (vout_scale_t *) Scale16;
break; break;
case 24: case 24:
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB24; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB24;
p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB24; p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB24;
p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB24; p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB24;
p_vout->p_Scale = (vout_scale_t *) Scale24;
break; break;
case 32: case 32:
p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB32; p_vout->p_ConvertYUV420 = (vout_convert_t *) ConvertYUV420RGB32;
p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB32; p_vout->p_ConvertYUV422 = (vout_convert_t *) ConvertYUV422RGB32;
p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB32; p_vout->p_ConvertYUV444 = (vout_convert_t *) ConvertYUV444RGB32;
p_vout->p_Scale = (vout_scale_t *) Scale32;
break; break;
} }
} }
...@@ -822,33 +810,6 @@ static void ConvertYUV444RGB32( p_vout_thread_t p_vout, u32 *p_pic, ...@@ -822,33 +810,6 @@ static void ConvertYUV444RGB32( p_vout_thread_t p_vout, u32 *p_pic,
CONVERT_YUV_RGB( 444 ) CONVERT_YUV_RGB( 444 )
} }
/*******************************************************************************
* Scale16: 15 or 16 bpp picture scaling
*******************************************************************************/
static void Scale16( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta )
{
//???
}
/*******************************************************************************
* Scale24: 24 bpp picture scaling
*******************************************************************************/
static void Scale24( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta )
{
//???
}
/*******************************************************************************
* Scale32: 32 bpp picture scaling
*******************************************************************************/
static void Scale32( p_vout_thread_t p_vout, void *p_pic, void *p_buffer,
int i_width, int i_height, int i_eol, int i_pic_eol, float f_alpha, float f_beta )
{
//???
}
//-------------------- walken code follow -------------------------------- //-------------------- walken code follow --------------------------------
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment