X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fvideo_output%2Fcaca.c;h=c0287b3707f1b5117f3cb7b4adb8e156d5b95e8e;hb=ea93da268c6617a0c5c98a2125b9aa27eba19d6d;hp=218832850ef8d91b869f0581790c658e51d9c3a1;hpb=41f79cdb76a1617f32622c3ee9eafc923ff24a89;p=vlc diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c index 218832850e..c0287b3707 100644 --- a/modules/video_output/caca.c +++ b/modules/video_output/caca.c @@ -24,9 +24,17 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* ENOMEM */ -#include /* free() */ -#include /* strerror() */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include #include @@ -53,11 +61,6 @@ # define caca_set_display_title(x,y) caca_set_window_title(y) #endif -#include -#include -#include -#include - /***************************************************************************** * Local prototypes *****************************************************************************/ @@ -77,7 +80,7 @@ vlc_module_begin(); set_shortname( "Caca" ); set_category( CAT_VIDEO ); set_subcategory( SUBCAT_VIDEO_VOUT ); - set_description( _("Color ASCII art video output") ); + set_description( N_("Color ASCII art video output") ); set_capability( "video output", 12 ); set_callbacks( Create, Destroy ); vlc_module_end(); @@ -116,7 +119,7 @@ static int Create( vlc_object_t *p_this ) return VLC_EGENERIC; } - HANDLE hstdout = + hstdout = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL ); @@ -160,10 +163,7 @@ static int Create( vlc_object_t *p_this ) /* Allocate structure */ p_vout->p_sys = malloc( sizeof( vout_sys_t ) ); if( p_vout->p_sys == NULL ) - { - msg_Err( p_vout, "out of memory" ); return VLC_ENOMEM; - } p_vout->p_sys->p_cv = cucul_create_canvas(0, 0); if( !p_vout->p_sys->p_cv ) @@ -299,39 +299,91 @@ static int Manage( vout_thread_t *p_vout ) #else int ev; #endif - vlc_value_t val; - while( caca_get_event(p_vout->p_sys->p_dp, - CACA_EVENT_KEY_PRESS | CACA_EVENT_RESIZE, &ev, 0) ) + while( caca_get_event(p_vout->p_sys->p_dp, CACA_EVENT_ANY, &ev, 0) ) { - /* Acknowledge the resize */ + playlist_t *p_playlist; + vlc_value_t val; + #ifdef CACA_API_VERSION_1 - if( ev.type == CACA_EVENT_RESIZE ) +#ifdef CACA_EVENT_OPAQUE + switch( caca_get_event_type( &ev ) ) #else - if( ev == CACA_EVENT_RESIZE ) + switch( ev.type ) +#endif /* CACA_EVENT_OPAQUE */ +#else + switch( ev ) #endif { - caca_refresh_display( p_vout->p_sys->p_dp ); - continue; - } - + case CACA_EVENT_KEY_RELEASE: #ifdef CACA_API_VERSION_1 - switch( ev.data.key.ch ) +#ifdef CACA_EVENT_OPAQUE + switch( caca_get_event_key_ch( &ev ) ) +#else + switch( ev.data.key.ch ) +#endif /* CACA_EVENT_OPAQUE */ #else - switch( ev & 0x00ffffff ) + switch( ev & 0x00ffffff ) #endif - { - case 'q': - val.i_int = KEY_MODIFIER_CTRL | 'q'; + { + case 'q': + val.i_int = KEY_MODIFIER_CTRL | 'q'; + break; + case ' ': + val.i_int = KEY_SPACE; + break; + default: + continue; + } + + var_Set( p_vout->p_libvlc, "key-pressed", val ); + break; + case CACA_EVENT_RESIZE: + /* Acknowledge the resize */ + caca_refresh_display( p_vout->p_sys->p_dp ); + break; +#ifdef CACA_API_VERSION_1 + case CACA_EVENT_MOUSE_MOTION: + val.i_int = +#ifdef CACA_EVENT_OPAQUE + caca_get_event_mouse_x( &ev ) +#else + ev.data.mouse.x +#endif /* CACA_EVENT_OPAQUE */ + * p_vout->render.i_width + / cucul_get_canvas_width( p_vout->p_sys->p_cv ); + var_Set( p_vout, "mouse-x", val ); + val.i_int = +#ifdef CACA_EVENT_OPAQUE + caca_get_event_mouse_y( &ev ) +#else + ev.data.mouse.y +#endif /* CACA_EVENT_OPAQUE */ + * p_vout->render.i_height + / cucul_get_canvas_height( p_vout->p_sys->p_cv ); + var_Set( p_vout, "mouse-y", val ); + val.b_bool = true; + var_Set( p_vout, "mouse-moved", val ); break; - case ' ': - val.i_int = KEY_SPACE; + case CACA_EVENT_MOUSE_RELEASE: + val.b_bool = true; + var_Set( p_vout, "mouse-clicked", val ); break; + case CACA_EVENT_QUIT: + { + p_playlist = pl_Yield( p_vout ); + if( p_playlist ) + { + playlist_Stop( p_playlist ); + pl_Release( p_vout ); + } + vlc_object_kill( p_vout->p_libvlc ); + break; + } +#endif default: - continue; + break; } - - var_Set( p_vout->p_vlc, "key-pressed", val ); } return VLC_SUCCESS; @@ -342,7 +394,7 @@ static int Manage( vout_thread_t *p_vout ) *****************************************************************************/ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) { - cucul_set_color( p_vout->p_sys->p_cv, + cucul_set_color_ansi( p_vout->p_sys->p_cv, CUCUL_COLOR_DEFAULT, CUCUL_COLOR_BLACK ); cucul_clear_canvas( p_vout->p_sys->p_cv ); cucul_dither_bitmap( p_vout->p_sys->p_cv, 0, 0, @@ -356,6 +408,7 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic ) *****************************************************************************/ static void Display( vout_thread_t *p_vout, picture_t *p_pic ) { + VLC_UNUSED(p_pic); caca_refresh_display( p_vout->p_sys->p_dp ); }