/*****************************************************************************
* goom.c: based on libgoom (see http://ios.free.fr/?page=projet&quoi=1)
*****************************************************************************
- * Copyright (C) 2003 VideoLAN
+ * Copyright (C) 2003 the VideoLAN team
* $Id$
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h> /* malloc(), free() */
#include <string.h> /* strdup() */
#include <errno.h>
#include <vlc/vlc.h>
-#include <vlc/input.h>
-#include <vlc/aout.h>
-#include <vlc/vout.h>
-#include "aout_internal.h"
-
-#ifndef WIN32
-#include "goom_core.h"
+#include <vlc_aout.h>
+#include <vlc_vout.h>
+#include <vlc_block.h>
+#include <vlc_input.h>
+
+#ifdef USE_GOOM_TREE
+# ifdef OLD_GOOM
+# include "goom_core.h"
+# define PluginInfo void
+# define goom_update(a,b,c,d,e,f) goom_update(b,c,d,e,f)
+# define goom_close(a) goom_close()
+# define goom_init(a,b) NULL; goom_init(a,b,0); goom_set_font(0,0,0)
+# else
+# include "goom.h"
+# endif
+#else
+# include <goom/goom.h>
#endif
/*****************************************************************************
#define WIDTH_TEXT N_("Goom display width")
#define HEIGHT_TEXT N_("Goom display height")
-#define RES_LONGTEXT N_("Allows you to change the resolution of the " \
+#define RES_LONGTEXT N_("This allows you to set the resolution of the " \
"Goom display (bigger resolution will be prettier but more CPU intensive).")
#define SPEED_TEXT N_("Goom animation speed")
-#define SPEED_LONGTEXT N_("Allows you to reduce the speed of the animation " \
- "(default 6, max 10).")
+#define SPEED_LONGTEXT N_("This allows you to set the animation speed " \
+ "(between 1 and 10, defaults to 6).")
#define MAX_SPEED 10
vlc_module_begin();
+ set_shortname( _("Goom"));
set_description( _("Goom effect") );
- set_capability( "audio filter", 0 );
+ set_category( CAT_AUDIO );
+ set_subcategory( SUBCAT_AUDIO_VISUAL );
+ set_capability( "visualization", 0 );
add_integer( "goom-width", 320, NULL,
WIDTH_TEXT, RES_LONGTEXT, VLC_FALSE );
add_integer( "goom-height", 240, NULL,
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-#define MAX_BLOCKS 10
+#define MAX_BLOCKS 100
#define GOOM_DELAY 400000
typedef struct
aout_filter_sys_t *p_sys;
goom_thread_t *p_thread;
vlc_value_t width, height;
+ video_format_t fmt;
+
if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2' )
|| p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
{
- msg_Warn( p_filter, "Bad input or output format" );
+ msg_Warn( p_filter, "bad input or output format" );
return VLC_EGENERIC;
}
if ( !AOUT_FMTS_SIMILAR( &p_filter->input, &p_filter->output ) )
var_Create( p_thread, "goom-height", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
var_Get( p_thread, "goom-height", &height );
- p_thread->p_vout =
- vout_Request( p_filter, NULL, width.i_int, height.i_int,
- VLC_FOURCC('R','V','3','2'),
- VOUT_ASPECT_FACTOR * width.i_int/height.i_int );
+ memset( &fmt, 0, sizeof(video_format_t) );
+
+ fmt.i_width = fmt.i_visible_width = width.i_int;
+ fmt.i_height = fmt.i_visible_height = height.i_int;
+ fmt.i_chroma = VLC_FOURCC('R','V','3','2');
+ fmt.i_aspect = VOUT_ASPECT_FACTOR * width.i_int/height.i_int;
+ fmt.i_sar_num = fmt.i_sar_den = 1;
+
+ p_thread->p_vout = vout_Request( p_filter, NULL, &fmt );
if( p_thread->p_vout == NULL )
{
msg_Err( p_filter, "no suitable vout module" );
audio_date_t i_pts;
int16_t p_data[2][512];
int i_data = 0, i_count = 0;
+ PluginInfo *p_plugin_info;
var_Get( p_this, "goom-width", &width );
var_Get( p_this, "goom-height", &height );
speed.i_int = MAX_SPEED - speed.i_int;
if( speed.i_int < 0 ) speed.i_int = 0;
- goom_init( width.i_int, height.i_int, 0 );
- goom_set_font( NULL, NULL, NULL );
+ p_plugin_info = goom_init( width.i_int, height.i_int );
while( !p_thread->b_die )
{
/* Frame dropping if necessary */
if( aout_DateGet( &i_pts ) + GOOM_DELAY <= mdate() ) continue;
- plane = goom_update( p_data, 0, 0.0, p_thread->psz_title, NULL );
+ plane = goom_update( p_plugin_info, p_data, 0, 0.0,
+ p_thread->psz_title, NULL );
if( p_thread->psz_title )
{
vout_DisplayPicture( p_thread->p_vout, p_pic );
}
- goom_close();
+ goom_close( p_plugin_info );
}
/*****************************************************************************
aout_filter_sys_t *p_sys = p_filter->p_sys;
/* Stop Goom Thread */
- p_sys->p_thread->b_die = VLC_TRUE;
+ vlc_object_kill( p_sys->p_thread );
vlc_mutex_lock( &p_sys->p_thread->lock );
vlc_cond_signal( &p_sys->p_thread->wait );
vlc_thread_join( p_sys->p_thread );
/* Free data */
- vout_Request( p_filter, p_sys->p_thread->p_vout, 0, 0, 0, 0 );
+ vout_Request( p_filter, p_sys->p_thread->p_vout, 0 );
vlc_mutex_destroy( &p_sys->p_thread->lock );
vlc_cond_destroy( &p_sys->p_thread->wait );
vlc_object_detach( p_sys->p_thread );
if( p_input )
{
- char *psz = strrchr( p_input->psz_source, '/' );
-
- if( psz )
- {
- psz++;
- }
- else
- {
- psz = p_input->psz_source;
- }
- if( psz && *psz )
+ psz_title = strdup( input_item_GetTitle( input_GetItem( p_input ) ) );
+ if( EMPTY_STR( psz_title ) )
{
- psz_title = strdup( psz );
+ free( psz_title );
+ char *psz = strrchr( input_GetItem(p_input)->psz_uri, '/' );
+
+ if( psz )
+ {
+ psz++;
+ }
+ else
+ {
+ psz = input_GetItem(p_input)->psz_uri;
+ }
+ if( psz && *psz )
+ {
+ psz_title = strdup( psz );
+ }
}
vlc_object_release( p_input );
}