#include "vlc_filter.h"
#include "filter_common.h"
#include "vlc_image.h"
+#include "osd.h"
#ifdef LoadImage
# undef LoadImage
add_file( "logo-file", NULL, NULL, FILE_TEXT, FILE_LONGTEXT, VLC_FALSE );
add_integer( "logo-x", -1, NULL, POSX_TEXT, POSX_LONGTEXT, VLC_FALSE );
- add_integer( "logo-y", -1, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_FALSE );
+ add_integer( "logo-y", 0, NULL, POSY_TEXT, POSY_LONGTEXT, VLC_FALSE );
add_integer_with_range( "logo-transparency", 255, 0, 255, NULL,
TRANS_TEXT, TRANS_LONGTEXT, VLC_FALSE );
add_integer( "logo-position", 6, NULL, POS_TEXT, POS_LONGTEXT, VLC_TRUE );
free( p_sys );
return VLC_EGENERIC;
}
-
+
p_sys->i_width = p_sys->p_pic->p[Y_PLANE].i_visible_pitch;
p_sys->i_height = p_sys->p_pic->p[Y_PLANE].i_visible_lines;
vout_sys_t *p_sys = p_vout->p_sys;
picture_t *p_pic;
int i_index;
+ video_format_t fmt = {0};
I_OUTPUTPICTURES = 0;
p_vout->output.i_height = p_vout->render.i_height;
p_vout->output.i_aspect = p_vout->render.i_aspect;
+ fmt.i_width = fmt.i_visible_width = p_vout->render.i_width;
+ fmt.i_height = fmt.i_visible_height = p_vout->render.i_height;
+ fmt.i_x_offset = fmt.i_y_offset = 0;
+ fmt.i_chroma = p_vout->render.i_chroma;
+ fmt.i_aspect = p_vout->render.i_aspect;
+ fmt.i_sar_num = p_vout->render.i_aspect * fmt.i_height / fmt.i_width;
+ fmt.i_sar_den = VOUT_ASPECT_FACTOR;
+
/* Load the video blending filter */
p_sys->p_blend = vlc_object_create( p_vout, sizeof(filter_t) );
vlc_object_attach( p_sys->p_blend, p_vout );
/* Try to open the real video output */
msg_Dbg( p_vout, "spawning the real video output" );
- p_sys->p_vout =
- vout_Create( p_vout, p_vout->render.i_width, p_vout->render.i_height,
- p_vout->render.i_chroma, p_vout->render.i_aspect );
+ p_sys->p_vout = vout_Create( p_vout, &fmt );
/* Everything failed */
if( p_sys->p_vout == NULL )
var_AddCallback( p_input->p_libvlc, "logo-transparency", LogoCallback, p_sys );
vlc_object_release( p_input );
- p_sys->b_absolute = VLC_TRUE;
- if( p_sys->posx < 0 || p_sys->posy < 0 )
- {
- p_sys->b_absolute = VLC_FALSE;
- p_sys->posx = 0; p_sys->posy = 0;
- }
-
p_sys->p_pic = LoadImage( p_this, p_sys->psz_filename );
if( !p_sys->p_pic )
{
}
vout_CopyPicture( p_filter, &p_region->picture, p_sys->p_pic );
- p_region->i_x = 0;
- p_region->i_y = 0;
- p_spu->i_x = p_sys->posx;
- p_spu->i_y = p_sys->posy;
- p_spu->i_flags = p_sys->pos;
+
+ /* where to locate the logo: */
+ if( p_sys->posx < 0 || p_sys->posy < 0 )
+ { /* set to one of the 9 relative locations */
+ p_spu->i_flags = p_sys->pos;
+ p_spu->i_x = 0;
+ p_spu->i_y = 0;
+ p_spu->b_absolute = VLC_FALSE;
+ }
+ else
+ { /* set to an absolute xy, referenced to upper left corner */
+ p_spu->i_flags = OSD_ALIGN_LEFT | OSD_ALIGN_TOP;
+ p_spu->i_x = p_sys->posx;
+ p_spu->i_y = p_sys->posy;
+ p_spu->b_absolute = VLC_TRUE;
+ }
+
p_spu->p_region = p_region;
p_spu->i_alpha = p_sys->i_trans;