Commit c5f75658 authored by Marian Durkovic's avatar Marian Durkovic

VOUT_SET_ZOOM can't be relative, since it doesn't work if user saved

anything else than zoom=1.0 in Preferences.
Reworked it to always go through InitWindowsize() 
parent 3887b077
...@@ -254,7 +254,7 @@ static inline int vout_Control( vout_thread_t *p_vout, int i_query, ... ) ...@@ -254,7 +254,7 @@ static inline int vout_Control( vout_thread_t *p_vout, int i_query, ... )
enum output_query_e enum output_query_e
{ {
VOUT_SET_ZOOM, /* arg1= double res= */ VOUT_SET_ZOOM,
VOUT_SET_STAY_ON_TOP, /* arg1= vlc_bool_t res= */ VOUT_SET_STAY_ON_TOP, /* arg1= vlc_bool_t res= */
VOUT_REPARENT, VOUT_REPARENT,
VOUT_SNAPSHOT, VOUT_SNAPSHOT,
......
...@@ -484,18 +484,13 @@ int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow, ...@@ -484,18 +484,13 @@ int VlcProc::controlWindow( intf_thread_t *pIntf, void *pWindow,
{ {
case VOUT_SET_ZOOM: case VOUT_SET_ZOOM:
{ {
double fArg = va_arg( args, double );
if( pThis->m_pVout ) if( pThis->m_pVout )
{ {
// Compute requested vout dimensions
int width = (int)( pThis->m_pVout->i_window_width * fArg );
int height = (int)( pThis->m_pVout->i_window_height * fArg );
// Post a resize vout command // Post a resize vout command
CmdResizeVout *pCmd = CmdResizeVout *pCmd =
new CmdResizeVout( pThis->getIntf(), pWindow, new CmdResizeVout( pThis->getIntf(), pWindow,
width, height ); pThis->m_pVout->i_window_width,
pThis->m_pVout->i_window_height );
AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() ); AsyncQueue *pQueue = AsyncQueue::instance( pThis->getIntf() );
pQueue->remove( "resize vout" ); pQueue->remove( "resize vout" );
pQueue->push( CmdGenericPtr( pCmd ) ); pQueue->push( CmdGenericPtr( pCmd ) );
......
...@@ -364,11 +364,9 @@ int VideoWindow::ControlWindow( void *p_window, int i_query, va_list args ) ...@@ -364,11 +364,9 @@ int VideoWindow::ControlWindow( void *p_window, int i_query, va_list args )
{ {
if( !b_auto_size ) break; if( !b_auto_size ) break;
double f_arg = va_arg( args, double );
/* Update dimensions */ /* Update dimensions */
wxSizeEvent event( wxSize((int)(p_vout->i_window_width * f_arg), wxSizeEvent event( wxSize( p_vout->i_window_width,
(int)(p_vout->i_window_height * f_arg)), p_vout->i_window_height ),
UpdateSize_Event ); UpdateSize_Event );
......
...@@ -900,12 +900,10 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args ) ...@@ -900,12 +900,10 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args )
return vout_ControlWindow( p_vout, return vout_ControlWindow( p_vout,
(void *)p_vout->p_sys->hparent, i_query, args ); (void *)p_vout->p_sys->hparent, i_query, args );
f_arg = va_arg( args, double );
/* Update dimensions */ /* Update dimensions */
rect_window.top = rect_window.left = 0; rect_window.top = rect_window.left = 0;
rect_window.right = p_vout->i_window_width * f_arg; rect_window.right = p_vout->i_window_width;
rect_window.bottom = p_vout->i_window_height * f_arg; rect_window.bottom = p_vout->i_window_height;
AdjustWindowRect( &rect_window, p_vout->p_sys->i_window_style, 0 ); AdjustWindowRect( &rect_window, p_vout->p_sys->i_window_style, 0 );
SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0, SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0,
......
...@@ -216,11 +216,11 @@ vlc_module_begin(); ...@@ -216,11 +216,11 @@ vlc_module_begin();
set_category( CAT_VIDEO ); set_category( CAT_VIDEO );
set_subcategory( SUBCAT_VIDEO_VOUT ); set_subcategory( SUBCAT_VIDEO_VOUT );
#ifdef MODULE_NAME_IS_wingapi #ifdef MODULE_NAME_IS_wingapi
set_shortname( "Windows GAPI" ); set_shortname( _("Windows GAPI") );
set_description( _("Windows GAPI video output") ); set_description( _("Windows GAPI video output") );
set_capability( "video output", 20 ); set_capability( "video output", 20 );
#else #else
set_shortname( "Windows GDI" ); set_shortname( _("Windows GDI") );
set_description( _("Windows GDI video output") ); set_description( _("Windows GDI video output") );
set_capability( "video output", 10 ); set_capability( "video output", 10 );
#endif #endif
...@@ -1294,12 +1294,10 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args ) ...@@ -1294,12 +1294,10 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args )
return vout_ControlWindow( p_vout, return vout_ControlWindow( p_vout,
(void *)p_vout->p_sys->hparent, i_query, args ); (void *)p_vout->p_sys->hparent, i_query, args );
f_arg = va_arg( args, double );
/* Update dimensions */ /* Update dimensions */
rect_window.top = rect_window.left = 0; rect_window.top = rect_window.left = 0;
rect_window.right = p_vout->i_window_width * f_arg; rect_window.right = p_vout->i_window_width;
rect_window.bottom = p_vout->i_window_height * f_arg; rect_window.bottom = p_vout->i_window_height;
AdjustWindowRect( &rect_window, p_vout->p_sys->i_window_style, 0 ); AdjustWindowRect( &rect_window, p_vout->p_sys->i_window_style, 0 );
SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0, SetWindowPos( p_vout->p_sys->hwnd, 0, 0, 0,
......
...@@ -2298,16 +2298,13 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args ) ...@@ -2298,16 +2298,13 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args )
return vout_ControlWindow( p_vout, return vout_ControlWindow( p_vout,
(void *)p_vout->p_sys->p_win->owner_window, i_query, args); (void *)p_vout->p_sys->p_win->owner_window, i_query, args);
f_arg = va_arg( args, double );
vlc_mutex_lock( &p_vout->p_sys->lock ); vlc_mutex_lock( &p_vout->p_sys->lock );
/* Update dimensions */ /* Update dimensions */
/* FIXME: export InitWindowSize() from vout core */
XResizeWindow( p_vout->p_sys->p_display, XResizeWindow( p_vout->p_sys->p_display,
p_vout->p_sys->p_win->base_window, p_vout->p_sys->p_win->base_window,
p_vout->i_window_width * f_arg, p_vout->i_window_width,
p_vout->i_window_height * f_arg ); p_vout->i_window_height );
vlc_mutex_unlock( &p_vout->p_sys->lock ); vlc_mutex_unlock( &p_vout->p_sys->lock );
return VLC_SUCCESS; return VLC_SUCCESS;
......
...@@ -231,13 +231,13 @@ void vout_IntfInit( vout_thread_t *p_vout ) ...@@ -231,13 +231,13 @@ void vout_IntfInit( vout_thread_t *p_vout )
var_Change( p_vout, "crop", VLC_VAR_DELCHOICE, &val, 0 ); var_Change( p_vout, "crop", VLC_VAR_DELCHOICE, &val, 0 );
val.psz_string = ""; text.psz_string = _("Default"); val.psz_string = ""; text.psz_string = _("Default");
var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text ); var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text );
val.psz_string = "001:1"; text.psz_string = "1:1"; val.psz_string = "001:1"; text.psz_string = _("1:1");
var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text ); var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text );
val.psz_string = "004:3"; text.psz_string = "4:3"; val.psz_string = "004:3"; text.psz_string = _("4:3");
var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text ); var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text );
val.psz_string = "16:9"; text.psz_string = "16:9"; val.psz_string = "16:9"; text.psz_string = _("16:9");
var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text ); var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text );
val.psz_string = "221:100"; text.psz_string = "221:100"; val.psz_string = "221:100"; text.psz_string = _("221:100");
var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text ); var_Change( p_vout, "crop", VLC_VAR_ADDCHOICE, &val, &text );
var_AddCallback( p_vout, "crop", CropCallback, NULL ); var_AddCallback( p_vout, "crop", CropCallback, NULL );
...@@ -308,8 +308,6 @@ void vout_IntfInit( vout_thread_t *p_vout ) ...@@ -308,8 +308,6 @@ void vout_IntfInit( vout_thread_t *p_vout )
/* Initialize the dimensions of the video window */ /* Initialize the dimensions of the video window */
InitWindowSize( p_vout, &p_vout->i_window_width, InitWindowSize( p_vout, &p_vout->i_window_width,
&p_vout->i_window_height ); &p_vout->i_window_height );
msg_Dbg( p_vout, "window size: %dx%d", p_vout->i_window_width,
p_vout->i_window_height );
/* Add a variable to indicate if the window should be on top of others */ /* Add a variable to indicate if the window should be on top of others */
var_Create( p_vout, "video-on-top", VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); var_Create( p_vout, "video-on-top", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
...@@ -560,7 +558,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width, ...@@ -560,7 +558,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width,
{ {
*pi_width = (int)( i_width * ll_zoom / FP_FACTOR ); *pi_width = (int)( i_width * ll_zoom / FP_FACTOR );
*pi_height = (int)( i_height * ll_zoom / FP_FACTOR ); *pi_height = (int)( i_height * ll_zoom / FP_FACTOR );
return; goto initwsize_end;
} }
else if( i_width > 0 ) else if( i_width > 0 )
{ {
...@@ -568,7 +566,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width, ...@@ -568,7 +566,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width,
*pi_height = (int)( p_vout->fmt_in.i_visible_height * ll_zoom * *pi_height = (int)( p_vout->fmt_in.i_visible_height * ll_zoom *
p_vout->fmt_in.i_sar_den * i_width / p_vout->fmt_in.i_sar_num / p_vout->fmt_in.i_sar_den * i_width / p_vout->fmt_in.i_sar_num /
FP_FACTOR / p_vout->fmt_in.i_visible_width ); FP_FACTOR / p_vout->fmt_in.i_visible_width );
return; goto initwsize_end;
} }
else if( i_height > 0 ) else if( i_height > 0 )
{ {
...@@ -576,7 +574,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width, ...@@ -576,7 +574,7 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width,
*pi_width = (int)( p_vout->fmt_in.i_visible_width * ll_zoom * *pi_width = (int)( p_vout->fmt_in.i_visible_width * ll_zoom *
p_vout->fmt_in.i_sar_num * i_height / p_vout->fmt_in.i_sar_den / p_vout->fmt_in.i_sar_num * i_height / p_vout->fmt_in.i_sar_den /
FP_FACTOR / p_vout->fmt_in.i_visible_height ); FP_FACTOR / p_vout->fmt_in.i_visible_height );
return; goto initwsize_end;
} }
if( p_vout->fmt_in.i_sar_num >= p_vout->fmt_in.i_sar_den ) if( p_vout->fmt_in.i_sar_num >= p_vout->fmt_in.i_sar_den )
...@@ -594,6 +592,10 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width, ...@@ -594,6 +592,10 @@ static void InitWindowSize( vout_thread_t *p_vout, unsigned *pi_width,
p_vout->fmt_in.i_sar_den / p_vout->fmt_in.i_sar_num / FP_FACTOR ); p_vout->fmt_in.i_sar_den / p_vout->fmt_in.i_sar_num / FP_FACTOR );
} }
initwsize_end:
msg_Dbg( p_vout, "window size: %dx%d", p_vout->i_window_width,
p_vout->i_window_height );
#undef FP_FACTOR #undef FP_FACTOR
} }
...@@ -604,7 +606,9 @@ static int ZoomCallback( vlc_object_t *p_this, char const *psz_cmd, ...@@ -604,7 +606,9 @@ static int ZoomCallback( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t oldval, vlc_value_t newval, void *p_data ) vlc_value_t oldval, vlc_value_t newval, void *p_data )
{ {
vout_thread_t *p_vout = (vout_thread_t *)p_this; vout_thread_t *p_vout = (vout_thread_t *)p_this;
vout_Control( p_vout, VOUT_SET_ZOOM, newval.f_float ); InitWindowSize( p_vout, &p_vout->i_window_width,
&p_vout->i_window_height );
vout_Control( p_vout, VOUT_SET_ZOOM );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
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