+Changes between 1.0.0-rc1 and 1.1.0-git:
+----------------------------------------
+
+
Changes between 0.9.9a and 1.0.0-rc1:
------------------------------------
AC_COPYRIGHT([Copyright 2002-2009 the VideoLAN team])
-AC_INIT(vlc, 1.0.0-rc1)
+AC_INIT(vlc, 1.1.0-git)
VERSION_MAJOR="1"
-VERSION_MINOR="0"
+VERSION_MINOR="1"
VERSION_REVISION="0"
-VERSION_EXTRA="-rc1"
+VERSION_EXTRA="-git"
PKGDIR="vlc"
AC_SUBST(PKGDIR)
[ --enable-dc1394 dc1394 access module (default disabled)])
if test "${enable_dc1394}" = "yes"
then
- AC_CHECK_HEADERS(libraw1394/raw1394.h, [
- AC_CHECK_LIB( raw1394, raw1394_get_nodecount, [
- AC_CHECK_HEADERS(libdc1394/dc1394_control.h , [
-dnl AC_CHECK_LIB( dc1394_control, dc1394_setup_capture, [
- VLC_ADD_PLUGIN([dc1394])
- VLC_ADD_LIBS([dc1394],[-ldc1394_control -lraw1394])
-dnl ],
-dnl [
-dnl AC_MSG_ERROR([libdc1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library])
-dnl ])
- ],
- [
- AC_MSG_ERROR([libdc1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library])
- ])
+ dnl
+ dnl Check for libraw1394
+ dnl
+ PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1,
+ [
+ VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libraw1394`])
+ VLC_ADD_CPPFLAGS([dc1394],[`${PKG_CONFIG} --cflags libraw1394`])
],
+ [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])]
+ )
+
+ dnl
+ dnl Check for libdc1394
+ dnl
+ PKG_CHECK_MODULES(LIBDC1394, libdc1394-2 >= 2.0.2,
[
- AC_MSG_ERROR([libraw1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library])
- ])
- ],
- [
- AC_MSG_ERROR([libraw1394 is mandatory for the dc1394 input module. try --disable-dc1394 or install this library])
- ])
+ VLC_ADD_PLUGIN([dc1394])
+ VLC_ADD_LIBS([dc1394],[`${PKG_CONFIG} --libs libdc1394-2`])
+ VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libdc1394-2`])
+ ],
+ [AC_MSG_ERROR([Couldn't find libdc1394 >= 2.0.2, install libdc1394 development package])]
+ )
fi
dnl
[ --enable-dv dv input module (default disabled)])
if test "${enable_dv}" = "yes"
then
- AC_ARG_WITH(dv-raw1394,
- [ --with-dv-raw1394=PATH libraw1394 headers and libraries])
- AC_ARG_WITH(dv-raw1394-tree,
- [ --with-dv-raw1394=PATH libraw1394 tree for static linking])
-
- if test -z "${with_dv_raw1394}" -a "${with_dv_raw1394}" != ""
- then
- AC_MSG_CHECKING(for raw1394 headers in ${with_dv_raw1394})
- if test -f ${with_dv_raw1394}/include/libraw1394/raw1394.h
- then
- dnl Use ${with_dv_raw1394}/include/libraw1394/raw1394.h
- AC_MSG_RESULT(yes)
- VLC_ADD_PLUGIN([access_dv])
- VLC_ADD_LIBS([access_dv],[-L${with_dv_raw1394}/lib -lraw1394 -lpthread])
- VLC_ADD_CPPFLAGS([access_dv],[-I${with_dv_raw1394}/include])
- else
- dnl No libraw1394 could be found, sorry
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot find ${with_dv_raw1394}/include/libraw1394/raw1394.h])
- fi
- else
- AC_CHECK_HEADERS(libraw1394/raw1394.h,
- [ VLC_ADD_PLUGIN([access_dv])
- VLC_ADD_LIBS([access_dv],[-lraw1394 -lavc1394])
- ],[
- if test -n "${enable_dv}"
- then
- AC_MSG_ERROR([cannot find libraw1394 headers])
- fi
- ])
- fi
-
- dnl Check for static linking of libraw1394
- if test -z "${with_dv_raw1394_tree}" -a "${with_dv_raw1394_tree}" != ""
- then
- AC_MSG_CHECKING(for libraw1394.a in ${with_dv_raw1394_tree})
- real_dv_raw1394_tree="`cd ${with_dv_raw1394_tree} 2>/dev/null && pwd`"
- if test -z "${real_dv_raw1394_tree}"
- then
- dnl The given directory can't be found
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot cd to ${real_dv_raw1394_tree}])
- fi
- if test -f "${real_dv_raw1394_tree}/src/.libs/libraw1394.a"
- then
- dnl Use a custom libraw1394
- AC_MSG_RESULT(${real_dv_raw1394_tree}/src/.libs/libraw1394.a)
- VLC_ADD_PLUGIN([access_dv])
- VLC_ADD_LIBS([access_dv],[-L${real_dv_raw1394_tree}/src/.libs -lraw1394])
- VLC_ADD_CPPFLAGS([access_dv],[-I${real_dv_raw1394_tree}])
- else
- dnl The given libraw1394 wasn't built
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot find ${real_dv_raw1394_tree}/src/.libs/libraw1394.a, make sure you compiled libraw1394 in ${with_dv_raw1394_tree}])
- fi
- fi
+ dnl
+ dnl Check for libraw1394
+ dnl
+ PKG_CHECK_MODULES(LIBRAW1394, libraw1394 >= 2.0.1,
+ [
+ VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libraw1394`])
+ VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libraw1394`])
+ ],
+ [AC_MSG_ERROR([Couldn't find libraw1394 >= 2.0.1, install libraw1394 development package])]
+ )
dnl
dnl Check for libavc1394
dnl
-
- AC_ARG_WITH(dv-avc1394,
- [ --with-dv-avc1394=PATH libavc1394 headers and libraries])
- AC_ARG_WITH(dv-avc1394-tree,
- [ --with-dv-avc1394=PATH libavc1394 tree for static linking])
-
- if test -z "${with_dv_avc1394}" -a "${with_dv_avc1394}" != ""
- then
- AC_MSG_CHECKING(for avc1394 headers in ${with_dv_avc1394})
- if test -f ${with_dv_avc1394}/include/libavc1394/avc1394.h
- then
- dnl Use ${with_dv_avc1394}/include/libavc1394/avc1394.h
- AC_MSG_RESULT(yes)
- VLC_ADD_LIBS([access_dv],[-L${with_dv_avc1394}/lib -lavc1394 -lrom1394 -lpthread])
- VLC_ADD_CPPFLAGS([access_dv],[-I${with_avc1394}/include])
- else
- dnl No libavc1394 could be found, sorry
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot find ${with_dv_avc1394}/include/libavc1394/avc1394.h])
- fi
- else
- AC_CHECK_HEADERS(libavc1394/avc1394.h,
- [ VLC_ADD_LIBS([access_dv],[-lavc1394 -lrom1394 -lpthread])
- ],[
- if test -n "${enable_dv}"
- then
- AC_MSG_ERROR([cannot find libavc1394 headers])
- fi
- ])
- fi
-
- dnl Check for static linking of libavc1394
- if test -z "${with_dv_avc1394_tree}" -a "${with_dv_avc1394_tree}" != ""
- then
- AC_MSG_CHECKING(for libavc1394.a in ${with_dv_avc1394_tree})
- real_dv_avc1394_tree="`cd ${with_dv_avc1394_tree} 2>/dev/null && pwd`"
- if test -z "${real_dv_avc1394_tree}"
- then
- dnl The given directory can't be found
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot cd to ${real_dv_avc1394_tree}])
- fi
- if test -f "${real_dv_avc1394_tree}/src/.libs/libavc1394.a"
- then
- dnl Use a custom libavc1394
- AC_MSG_RESULT(${real_dv_avc1394_tree}/src/.libs/libavc1394.a)
- VLC_ADD_LIBS([access_dv],[-L${real_dv_avc1394_tree}/src/.libs -lavc1394 -lrom1394 -lpthread])
- VLC_ADD_CPPFLAGS([access_dv],[-I${real_dv_avc1394_tree}])
- else
- dnl The given libavc1394 wasn't built
- AC_MSG_RESULT(no)
- AC_MSG_ERROR([cannot find ${real_dv_avc1394_tree}/src/.libs/libavc1394.a, make sure you compiled libavc1394 in ${with_dv_avc1394_tree}])
- fi
- fi
+ PKG_CHECK_MODULES(LIBAVC1394, libavc1394 >= 0.5.3,
+ [
+ VLC_ADD_PLUGIN([access_dv])
+ VLC_ADD_LIBS([access_dv],[`${PKG_CONFIG} --libs libavc1394`])
+ VLC_ADD_CPPFLAGS([access_dv],[`${PKG_CONFIG} --cflags libavc1394`])
+ ],
+ [AC_MSG_ERROR([Couldn't find libavc1394 >= 0.5.1, install libavc1394 development package])]
+ )
fi
dnl
if( ppsz_name ) *ppsz_name = sub_format_tag_to_fourcc[i].psz_name;
}
-/**
- * Structure to hold information concerning subtitles.
- * Used between demuxers and decoders of subtitles.
- */
-typedef struct es_sys_t
-{
- char *psz_header; /* for 'ssa ' and 'subt' */
-
- /* for spudec */
- unsigned int i_orig_height;
- unsigned int i_orig_width;
- unsigned int i_origin_x;
- unsigned int i_origin_y;
- unsigned int i_scale_h;
- unsigned int i_scale_v;
- unsigned int i_alpha;
- bool b_smooth;
- mtime_t i_fade_in;
- mtime_t i_fade_out;
- unsigned int i_align;
- mtime_t i_time_offset;
- bool b_forced_subs;
- unsigned int palette[16];
- unsigned int colors[4];
-
-} subtitle_data_t;
-
#endif /* "codecs.h" */
/* "rate" has changed */
INPUT_EVENT_RATE,
- /* At least one of "position" or "time" or "length" has changed */
- INPUT_EVENT_TIMES,
+ /* At least one of "position" or "time" */
+ INPUT_EVENT_POSITION,
+
+ /* "length" has changed */
+ INPUT_EVENT_LENGTH,
/* A title has been added or removed or selected.
* It imply that chapter has changed (not chapter event is sent) */
#define STYLE_UNDERLINE 32
#define STYLE_STRIKEOUT 64
-static const text_style_t default_text_style = { NULL, 22, 0xffffff, 0xff, STYLE_OUTLINE,
- 0x000000, 0xff, 0x000000, 0xff, 0xffffff, 0x80, 0xffffff, 0xff, 1, 0, -1 };
+/**
+ * Create a default text style
+ */
+VLC_EXPORT( text_style_t *, text_style_New, ( void ) );
+
+/**
+ * Copy a text style into another
+ */
+VLC_EXPORT( text_style_t *, text_style_Copy, ( text_style_t *, const text_style_t * ) );
+
+/**
+ * Duplicate a text style
+ */
+VLC_EXPORT( text_style_t *, text_style_Duplicate, ( const text_style_t * ) );
+
+/**
+ * Delete a text style created by text_style_New or text_style_Duplicate
+ */
+VLC_EXPORT( void, text_style_Delete, ( text_style_t * ) );
/**
* OSD menu button states
* object. The types are declared in the include file include/vlc_osd.h
* @see vlc_osd.h
*/
-VLC_EXPORT( int, osd_ShowTextRelative, ( spu_t *, int, const char *, text_style_t *, int, int, int, mtime_t ) );
-VLC_EXPORT( int, osd_ShowTextAbsolute, ( spu_t *, int, const char *, text_style_t *, int, int, int, mtime_t, mtime_t ) );
+VLC_EXPORT( int, osd_ShowTextRelative, ( spu_t *, int, const char *, const text_style_t *, int, int, int, mtime_t ) );
+VLC_EXPORT( int, osd_ShowTextAbsolute, ( spu_t *, int, const char *, const text_style_t *, int, int, int, mtime_t, mtime_t ) );
VLC_EXPORT( void, osd_Message, ( spu_t *, int, char *, ... ) LIBVLC_FORMAT( 3, 4 ) );
/**
* Vout text and widget overlays
**********************************************************************/
-/**
- * Show text on the video for some time
- * \param p_vout pointer to the vout the text is to be showed on
- * \param i_channel Subpicture channel
- * \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
- * \param i_flags flags for alignment and such
- * \param i_hmargin horizontal margin in pixels
- * \param i_vmargin vertical margin in pixels
- * \param i_duration Amount of time the text is to be shown.
- */
-VLC_EXPORT( int, vout_ShowTextRelative, ( vout_thread_t *, int, char *, text_style_t *, int, int, int, mtime_t ) );
+VLC_EXPORT( int, vout_ShowTextRelative, ( vout_thread_t *, int, char *, const text_style_t *, int, int, int, mtime_t ) );
-/**
- * Show text on the video from a given start date to a given end date
- * \param p_vout pointer to the vout the text is to be showed on
- * \param i_channel Subpicture channel
- * \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
- * \param i_flags flags for alignment and such
- * \param i_hmargin horizontal margin in pixels
- * \param i_vmargin vertical margin in pixels
- * \param i_start the time when this string is to appear on the video
- * \param i_stop the time when this string should stop to be displayed
- * if this is 0 the string will be shown untill the next string
- * is about to be shown
- */
-VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, const char *, text_style_t *, int, int, int, mtime_t, mtime_t ) );
+VLC_EXPORT( int, vout_ShowTextAbsolute, ( vout_thread_t *, int, const char *, const text_style_t *, int, int, int, mtime_t, mtime_t ) );
/**
* Write an informative message at the default location,
free( psz_name );
return VLC_EGENERIC;
}
-
+
p_sys->p_ev->p_frame = NULL;
p_sys->p_ev->pp_last = &p_sys->p_ev->p_frame;
p_sys->p_ev->p_access = p_access;
access_sys_t *p_sys = p_access->p_sys;
block_t *p_block = NULL;
-#if 0
- if( !p_access->psz_demux )
- {
- free( p_access->psz_demux );
- p_access->psz_demux = strdup( "rawdv" );
- }
-#endif
-
vlc_mutex_lock( &p_sys->lock );
p_block = p_sys->p_frame;
//msg_Dbg( p_access, "sending frame %p",p_block );
p_sys = p_access->p_sys;
/* skip empty packets */
- if ( length > 16 )
+ if( length > 16 )
{
unsigned char * p = ( unsigned char* ) &data[ 3 ];
int section_type = p[ 0 ] >> 5; /* section type is in bits 5 - 7 */
raw1394handle_t handle;
/* get a raw1394 handle */
- if ( !( handle = raw1394_new_handle() ) )
+ if( !( handle = raw1394_new_handle() ) )
{
msg_Err( p_access, "raw1394 - failed to get handle: %m." );
return VLC_EGENERIC;
}
- if ( ( n_ports = raw1394_get_port_info( handle, pinf, 16 ) ) < 0 )
+ if( ( n_ports = raw1394_get_port_info( handle, pinf, 16 ) ) < 0 )
{
msg_Err( p_access, "raw1394 - failed to get port info: %m." );
raw1394_destroy_handle( handle );
raw1394handle_t handle;
/* get a raw1394 handle */
-#ifdef RAW1394_V_0_8
-
- handle = raw1394_get_handle();
-#else
-
handle = raw1394_new_handle();
-#endif
-
- if ( !handle )
+ if( !handle )
{
msg_Err( p_access, "raw1394 - failed to get handle: %m." );
return NULL;
}
- if ( ( n_ports = raw1394_get_port_info( handle, pinf, 16 ) ) < 0 )
+ if( ( n_ports = raw1394_get_port_info( handle, pinf, 16 ) ) < 0 )
{
msg_Err( p_access, "raw1394 - failed to get port info: %m." );
raw1394_destroy_handle( handle );
}
/* tell raw1394 which host adapter to use */
- if ( raw1394_set_port( handle, port ) < 0 )
+ if( raw1394_set_port( handle, port ) < 0 )
{
msg_Err( p_access, "raw1394 - failed to set set port: %m." );
return NULL;
static raw1394handle_t AVCOpen( access_t *p_access, int port )
{
access_sys_t *p_sys = p_access->p_sys;
- int numcards;
struct raw1394_portinfo pinf[ 16 ];
+ int numcards;
p_sys->p_avc1394 = raw1394_new_handle();
if( !p_sys->p_avc1394 )
}
}
-
static int AVCResetHandler( raw1394handle_t handle, unsigned int generation )
{
raw1394_update_generation( handle, generation );
* MarginV, Effect, Text */
decoder_sys_t *p_sys = p_dec->p_sys;
subpicture_t *p_spu = p_spu_in;
- ssa_style_t *p_style = NULL;
+ ssa_style_t *p_ssa_style = NULL;
char *psz_new_subtitle = NULL;
char *psz_buffer_sub = NULL;
char *psz_style = NULL;
for( i = 0; i < p_sys->i_ssa_styles; i++ )
{
if( !strcmp( p_sys->pp_ssa_styles[i]->psz_stylename, psz_style ) )
- p_style = p_sys->pp_ssa_styles[i];
+ p_ssa_style = p_sys->pp_ssa_styles[i];
}
free( psz_style );
p_spu->p_region->psz_text = psz_new_subtitle;
- if( p_style == NULL )
+ if( p_ssa_style == NULL )
{
p_spu->p_region->i_align = SUBPICTURE_ALIGN_BOTTOM | p_sys->i_align;
p_spu->p_region->i_x = p_sys->i_align ? 20 : 0;
}
else
{
- msg_Dbg( p_dec, "style is: %s", p_style->psz_stylename);
- p_spu->p_region->p_style = &p_style->font_style;
- p_spu->p_region->i_align = p_style->i_align;
- if( p_style->i_align & SUBPICTURE_ALIGN_LEFT )
+ msg_Dbg( p_dec, "style is: %s", p_ssa_style->psz_stylename );
+ p_spu->p_region->p_style = text_style_Duplicate( &p_ssa_style->font_style );
+ p_spu->p_region->i_align = p_ssa_style->i_align;
+ if( p_ssa_style->i_align & SUBPICTURE_ALIGN_LEFT )
{
- p_spu->p_region->i_x = (i_margin_l) ? i_margin_l : p_style->i_margin_h;
+ p_spu->p_region->i_x = (i_margin_l) ? i_margin_l : p_ssa_style->i_margin_h;
}
- else if( p_style->i_align & SUBPICTURE_ALIGN_RIGHT )
+ else if( p_ssa_style->i_align & SUBPICTURE_ALIGN_RIGHT )
{
- p_spu->p_region->i_x = (i_margin_r) ? i_margin_r : p_style->i_margin_h;
+ p_spu->p_region->i_x = (i_margin_r) ? i_margin_r : p_ssa_style->i_margin_h;
}
- p_spu->p_region->i_y = (i_margin_v) ? i_margin_v : p_style->i_margin_v;
+ p_spu->p_region->i_y = (i_margin_v) ? i_margin_v : p_ssa_style->i_margin_v;
}
}
&i_border, &i_outline, &i_shadow, &i_align, &i_margin_l,
&i_margin_r, &i_margin_v ) == 16 )
{
- ssa_style_t *p_style = malloc( sizeof(ssa_style_t) );
+ ssa_style_t *p_ssa_style = malloc( sizeof(ssa_style_t) );
- p_style->psz_stylename = strdup( psz_temp_stylename );
- p_style->font_style.psz_fontname = strdup( psz_temp_fontname );
- p_style->font_style.i_font_size = i_font_size;
+ p_ssa_style->psz_stylename = strdup( psz_temp_stylename );
+ p_ssa_style->font_style.psz_fontname = strdup( psz_temp_fontname );
+ p_ssa_style->font_style.i_font_size = i_font_size;
- ParseColor( psz_temp_color1, &p_style->font_style.i_font_color, NULL );
- ParseColor( psz_temp_color4, &p_style->font_style.i_shadow_color, NULL );
- p_style->font_style.i_outline_color = p_style->font_style.i_shadow_color;
- p_style->font_style.i_font_alpha = p_style->font_style.i_outline_alpha
- = p_style->font_style.i_shadow_alpha = 0x00;
- p_style->font_style.i_style_flags = 0;
- if( i_bold ) p_style->font_style.i_style_flags |= STYLE_BOLD;
- if( i_italic ) p_style->font_style.i_style_flags |= STYLE_ITALIC;
+ ParseColor( psz_temp_color1, &p_ssa_style->font_style.i_font_color, NULL );
+ ParseColor( psz_temp_color4, &p_ssa_style->font_style.i_shadow_color, NULL );
+ p_ssa_style->font_style.i_outline_color = p_ssa_style->font_style.i_shadow_color;
+ p_ssa_style->font_style.i_font_alpha = p_ssa_style->font_style.i_outline_alpha
+ = p_ssa_style->font_style.i_shadow_alpha = 0x00;
+ p_ssa_style->font_style.i_style_flags = 0;
+ if( i_bold ) p_ssa_style->font_style.i_style_flags |= STYLE_BOLD;
+ if( i_italic ) p_ssa_style->font_style.i_style_flags |= STYLE_ITALIC;
if( i_border == 1 )
- p_style->font_style.i_style_flags |= (STYLE_ITALIC | STYLE_OUTLINE);
+ p_ssa_style->font_style.i_style_flags |= (STYLE_ITALIC | STYLE_OUTLINE);
else if( i_border == 3 )
{
- p_style->font_style.i_style_flags |= STYLE_BACKGROUND;
- p_style->font_style.i_background_color = p_style->font_style.i_shadow_color;
- p_style->font_style.i_background_alpha = p_style->font_style.i_shadow_alpha;
+ p_ssa_style->font_style.i_style_flags |= STYLE_BACKGROUND;
+ p_ssa_style->font_style.i_background_color = p_ssa_style->font_style.i_shadow_color;
+ p_ssa_style->font_style.i_background_alpha = p_ssa_style->font_style.i_shadow_alpha;
}
- p_style->font_style.i_shadow_width = i_shadow;
- p_style->font_style.i_outline_width = i_outline;
+ p_ssa_style->font_style.i_shadow_width = i_shadow;
+ p_ssa_style->font_style.i_outline_width = i_outline;
- p_style->i_align = 0;
+ p_ssa_style->i_align = 0;
if( i_align == 1 || i_align == 5 || i_align == 9 )
- p_style->i_align |= SUBPICTURE_ALIGN_LEFT;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_LEFT;
if( i_align == 3 || i_align == 7 || i_align == 11 )
- p_style->i_align |= SUBPICTURE_ALIGN_RIGHT;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_RIGHT;
if( i_align < 4 )
- p_style->i_align |= SUBPICTURE_ALIGN_BOTTOM;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_BOTTOM;
else if( i_align < 8 )
- p_style->i_align |= SUBPICTURE_ALIGN_TOP;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_TOP;
- p_style->i_margin_h = ( p_style->i_align & SUBPICTURE_ALIGN_RIGHT ) ?
+ p_ssa_style->i_margin_h = ( p_ssa_style->i_align & SUBPICTURE_ALIGN_RIGHT ) ?
i_margin_r : i_margin_l;
- p_style->i_margin_v = i_margin_v;
- p_style->i_margin_percent_h = 0;
- p_style->i_margin_percent_v = 0;
+ p_ssa_style->i_margin_v = i_margin_v;
+ p_ssa_style->i_margin_percent_h = 0;
+ p_ssa_style->i_margin_percent_v = 0;
- p_style->font_style.i_karaoke_background_color = 0xffffff;
- p_style->font_style.i_karaoke_background_alpha = 0xff;
+ p_ssa_style->font_style.i_karaoke_background_color = 0xffffff;
+ p_ssa_style->font_style.i_karaoke_background_alpha = 0xff;
- TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_style );
+ TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_ssa_style );
}
else msg_Warn( p_dec, "SSA v4 styleline parsing failed" );
}
&i_underline, &i_strikeout, &i_scale_x, &i_scale_y, &i_spacing, &i_border, &i_outline,
&i_shadow, &i_align, &i_margin_l, &i_margin_r, &i_margin_v ) == 21 )
{
- ssa_style_t *p_style = malloc( sizeof(ssa_style_t) );
-
- p_style->psz_stylename = strdup( psz_temp_stylename );
- p_style->font_style.psz_fontname = strdup( psz_temp_fontname );
- p_style->font_style.i_font_size = i_font_size;
- ParseColor( psz_temp_color1, &p_style->font_style.i_font_color,
- &p_style->font_style.i_font_alpha );
- ParseColor( psz_temp_color3, &p_style->font_style.i_outline_color,
- &p_style->font_style.i_outline_alpha );
- ParseColor( psz_temp_color4, &p_style->font_style.i_shadow_color,
- &p_style->font_style.i_shadow_alpha );
-
- p_style->font_style.i_style_flags = 0;
- if( i_bold ) p_style->font_style.i_style_flags |= STYLE_BOLD;
- if( i_italic ) p_style->font_style.i_style_flags |= STYLE_ITALIC;
- if( i_underline ) p_style->font_style.i_style_flags |= STYLE_UNDERLINE;
- if( i_strikeout ) p_style->font_style.i_style_flags |= STYLE_STRIKEOUT;
- if( i_border == 1 ) p_style->font_style.i_style_flags |= (STYLE_ITALIC | STYLE_OUTLINE);
+ ssa_style_t *p_ssa_style = malloc( sizeof(ssa_style_t) );
+
+ p_ssa_style->psz_stylename = strdup( psz_temp_stylename );
+ p_ssa_style->font_style.psz_fontname = strdup( psz_temp_fontname );
+ p_ssa_style->font_style.i_font_size = i_font_size;
+ ParseColor( psz_temp_color1, &p_ssa_style->font_style.i_font_color,
+ &p_ssa_style->font_style.i_font_alpha );
+ ParseColor( psz_temp_color3, &p_ssa_style->font_style.i_outline_color,
+ &p_ssa_style->font_style.i_outline_alpha );
+ ParseColor( psz_temp_color4, &p_ssa_style->font_style.i_shadow_color,
+ &p_ssa_style->font_style.i_shadow_alpha );
+
+ p_ssa_style->font_style.i_style_flags = 0;
+ if( i_bold ) p_ssa_style->font_style.i_style_flags |= STYLE_BOLD;
+ if( i_italic ) p_ssa_style->font_style.i_style_flags |= STYLE_ITALIC;
+ if( i_underline ) p_ssa_style->font_style.i_style_flags |= STYLE_UNDERLINE;
+ if( i_strikeout ) p_ssa_style->font_style.i_style_flags |= STYLE_STRIKEOUT;
+ if( i_border == 1 ) p_ssa_style->font_style.i_style_flags |= (STYLE_ITALIC | STYLE_OUTLINE);
else if( i_border == 3 )
{
- p_style->font_style.i_style_flags |= STYLE_BACKGROUND;
- p_style->font_style.i_background_color = p_style->font_style.i_shadow_color;
- p_style->font_style.i_background_alpha = p_style->font_style.i_shadow_alpha;
+ p_ssa_style->font_style.i_style_flags |= STYLE_BACKGROUND;
+ p_ssa_style->font_style.i_background_color = p_ssa_style->font_style.i_shadow_color;
+ p_ssa_style->font_style.i_background_alpha = p_ssa_style->font_style.i_shadow_alpha;
}
- p_style->font_style.i_shadow_width = ( i_border == 1 ) ? i_shadow : 0;
- p_style->font_style.i_outline_width = ( i_border == 1 ) ? i_outline : 0;
- p_style->font_style.i_spacing = i_spacing;
- //p_style->font_style.f_angle = f_angle;
+ p_ssa_style->font_style.i_shadow_width = ( i_border == 1 ) ? i_shadow : 0;
+ p_ssa_style->font_style.i_outline_width = ( i_border == 1 ) ? i_outline : 0;
+ p_ssa_style->font_style.i_spacing = i_spacing;
+ //p_ssa_style->font_style.f_angle = f_angle;
- p_style->i_align = 0;
+ p_ssa_style->i_align = 0;
if( i_align == 0x1 || i_align == 0x4 || i_align == 0x7 )
- p_style->i_align |= SUBPICTURE_ALIGN_LEFT;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_LEFT;
if( i_align == 0x3 || i_align == 0x6 || i_align == 0x9 )
- p_style->i_align |= SUBPICTURE_ALIGN_RIGHT;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_RIGHT;
if( i_align == 0x7 || i_align == 0x8 || i_align == 0x9 )
- p_style->i_align |= SUBPICTURE_ALIGN_TOP;
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_TOP;
if( i_align == 0x1 || i_align == 0x2 || i_align == 0x3 )
- p_style->i_align |= SUBPICTURE_ALIGN_BOTTOM;
- p_style->i_margin_h = ( p_style->i_align & SUBPICTURE_ALIGN_RIGHT ) ?
+ p_ssa_style->i_align |= SUBPICTURE_ALIGN_BOTTOM;
+ p_ssa_style->i_margin_h = ( p_ssa_style->i_align & SUBPICTURE_ALIGN_RIGHT ) ?
i_margin_r : i_margin_l;
- p_style->i_margin_v = i_margin_v;
- p_style->i_margin_percent_h = 0;
- p_style->i_margin_percent_v = 0;
+ p_ssa_style->i_margin_v = i_margin_v;
+ p_ssa_style->i_margin_percent_h = 0;
+ p_ssa_style->i_margin_percent_v = 0;
- p_style->font_style.i_karaoke_background_color = 0xffffff;
- p_style->font_style.i_karaoke_background_alpha = 0xff;
+ p_ssa_style->font_style.i_karaoke_background_color = 0xffffff;
+ p_ssa_style->font_style.i_karaoke_background_alpha = 0xff;
/*TODO: Ignored: angle i_scale_x|y (fontscaling), i_encoding */
- TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_style );
+ TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_ssa_style );
}
else msg_Dbg( p_dec, "SSA V4+ styleline parsing failed" );
}
continue;
free( p_sys->pp_ssa_styles[i]->psz_stylename );
+ //FIXME: Make font_style a pointer and use text_style_* functions
free( p_sys->pp_ssa_styles[i]->font_style.psz_fontname );
free( p_sys->pp_ssa_styles[i] );
}
static ssa_style_t *ParseStyle( decoder_sys_t *p_sys, char *psz_subtitle )
{
- ssa_style_t *p_style = NULL;
+ ssa_style_t *p_ssa_style = NULL;
char *psz_style = GrabAttributeValue( "style", psz_subtitle );
if( psz_style )
for( i = 0; i < p_sys->i_ssa_styles; i++ )
{
if( !strcmp( p_sys->pp_ssa_styles[i]->psz_stylename, psz_style ) )
- p_style = p_sys->pp_ssa_styles[i];
+ p_ssa_style = p_sys->pp_ssa_styles[i];
}
free( psz_style );
}
- return p_style;
+ return p_ssa_style;
}
static int ParsePositionAttributeList( char *psz_subtitle, int *i_align,
if( p_text_region != NULL )
{
- ssa_style_t *p_style = NULL;
+ ssa_style_t *p_ssa_style = NULL;
p_text_region->psz_text = NULL;
p_text_region->psz_html = strndup( psz_subtitle, i_len );
return NULL;
}
- p_style = ParseStyle( p_sys, p_text_region->psz_html );
- if( !p_style )
+ p_ssa_style = ParseStyle( p_sys, p_text_region->psz_html );
+ if( !p_ssa_style )
{
int i;
for( i = 0; i < p_sys->i_ssa_styles; i++ )
{
if( !strcasecmp( p_sys->pp_ssa_styles[i]->psz_stylename, "Default" ) )
- p_style = p_sys->pp_ssa_styles[i];
+ p_ssa_style = p_sys->pp_ssa_styles[i];
}
}
- if( p_style )
+ if( p_ssa_style )
{
- msg_Dbg( p_dec, "style is: %s", p_style->psz_stylename );
+ msg_Dbg( p_dec, "style is: %s", p_ssa_style->psz_stylename );
- p_text_region->p_style = &p_style->font_style;
- p_text_region->i_align = p_style->i_align;
+ p_text_region->p_style = text_style_Duplicate( &p_ssa_style->font_style );
+ p_text_region->i_align = p_ssa_style->i_align;
/* TODO: Setup % based offsets properly, without adversely affecting
* everything else in vlc. Will address with separate patch,
* to prevent this one being any more complicated.
- * p_style->i_margin_percent_h;
- * p_style->i_margin_percent_v;
+ * p_ssa_style->i_margin_percent_h;
+ * p_ssa_style->i_margin_percent_v;
*/
- p_text_region->i_x = p_style->i_margin_h;
- p_text_region->i_y = p_style->i_margin_v;
+ p_text_region->i_x = p_ssa_style->i_margin_h;
+ p_text_region->i_y = p_ssa_style->i_margin_v;
}
else
{
decoder_sys_t *p_sys = p_dec->p_sys;
char *psz_node;
- ssa_style_t *p_style = NULL;
+ ssa_style_t *p_ssa_style = NULL;
int i_style_level = 0;
int i_metadata_level = 0;
case 2:
if( !strcasecmp( "style", psz_node ) )
{
- TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_style );
+ TAB_APPEND( p_sys->i_ssa_styles, p_sys->pp_ssa_styles, p_ssa_style );
- p_style = NULL;
+ p_ssa_style = NULL;
i_style_level--;
}
break;
{
i_style_level++;
- p_style = calloc( 1, sizeof(ssa_style_t) );
- if( ! p_style )
+ p_ssa_style = calloc( 1, sizeof(ssa_style_t) );
+ if( !p_ssa_style )
{
free( psz_node );
return;
{
ssa_style_t *p_default_style = p_sys->pp_ssa_styles[i];
- memcpy( p_style, p_default_style, sizeof( ssa_style_t ) );
- p_style->font_style.psz_fontname = strdup( p_style->font_style.psz_fontname );
- p_style->psz_stylename = NULL;
+ memcpy( p_ssa_style, p_default_style, sizeof( ssa_style_t ) );
+ //FIXME: Make font_style a pointer. Actually we double copy some data here,
+ // we use text_style_Copy to avoid copying psz_fontname, though .
+ text_style_Copy( &p_ssa_style->font_style, &p_default_style->font_style );
+ p_ssa_style->psz_stylename = NULL;
}
}
if( psz_name && psz_value )
{
if( !strcasecmp( "name", psz_name ) )
- p_style->psz_stylename = strdup( psz_value);
+ p_ssa_style->psz_stylename = strdup( psz_value );
}
free( psz_name );
free( psz_value );
{
if( !strcasecmp( "face", psz_name ) )
{
- free( p_style->font_style.psz_fontname );
- p_style->font_style.psz_fontname = strdup( psz_value );
+ free( p_ssa_style->font_style.psz_fontname );
+ p_ssa_style->font_style.psz_fontname = strdup( psz_value );
}
else if( !strcasecmp( "size", psz_name ) )
{
int i_value = atoi( psz_value );
if( ( i_value >= -5 ) && ( i_value <= 5 ) )
- p_style->font_style.i_font_size +=
- ( i_value * p_style->font_style.i_font_size ) / 10;
+ p_ssa_style->font_style.i_font_size +=
+ ( i_value * p_ssa_style->font_style.i_font_size ) / 10;
else if( i_value < -5 )
- p_style->font_style.i_font_size = - i_value;
+ p_ssa_style->font_style.i_font_size = - i_value;
else if( i_value > 5 )
- p_style->font_style.i_font_size = i_value;
+ p_ssa_style->font_style.i_font_size = i_value;
}
else
- p_style->font_style.i_font_size = atoi( psz_value );
+ p_ssa_style->font_style.i_font_size = atoi( psz_value );
}
else if( !strcasecmp( "italic", psz_name ) )
{
if( !strcasecmp( "yes", psz_value ))
- p_style->font_style.i_style_flags |= STYLE_ITALIC;
+ p_ssa_style->font_style.i_style_flags |= STYLE_ITALIC;
else
- p_style->font_style.i_style_flags &= ~STYLE_ITALIC;
+ p_ssa_style->font_style.i_style_flags &= ~STYLE_ITALIC;
}
else if( !strcasecmp( "weight", psz_name ) )
{
if( !strcasecmp( "bold", psz_value ))
- p_style->font_style.i_style_flags |= STYLE_BOLD;
+ p_ssa_style->font_style.i_style_flags |= STYLE_BOLD;
else
- p_style->font_style.i_style_flags &= ~STYLE_BOLD;
+ p_ssa_style->font_style.i_style_flags &= ~STYLE_BOLD;
}
else if( !strcasecmp( "underline", psz_name ) )
{
if( !strcasecmp( "yes", psz_value ))
- p_style->font_style.i_style_flags |= STYLE_UNDERLINE;
+ p_ssa_style->font_style.i_style_flags |= STYLE_UNDERLINE;
else
- p_style->font_style.i_style_flags &= ~STYLE_UNDERLINE;
+ p_ssa_style->font_style.i_style_flags &= ~STYLE_UNDERLINE;
}
else if( !strcasecmp( "color", psz_name ) )
{
if( *psz_value == '#' )
{
unsigned long col = strtol(psz_value+1, NULL, 16);
- p_style->font_style.i_font_color = (col & 0x00ffffff);
- p_style->font_style.i_font_alpha = (col >> 24) & 0xff;
+ p_ssa_style->font_style.i_font_color = (col & 0x00ffffff);
+ p_ssa_style->font_style.i_font_alpha = (col >> 24) & 0xff;
}
}
else if( !strcasecmp( "outline-color", psz_name ) )
if( *psz_value == '#' )
{
unsigned long col = strtol(psz_value+1, NULL, 16);
- p_style->font_style.i_outline_color = (col & 0x00ffffff);
- p_style->font_style.i_outline_alpha = (col >> 24) & 0xff;
+ p_ssa_style->font_style.i_outline_color = (col & 0x00ffffff);
+ p_ssa_style->font_style.i_outline_alpha = (col >> 24) & 0xff;
}
}
else if( !strcasecmp( "outline-level", psz_name ) )
{
- p_style->font_style.i_outline_width = atoi( psz_value );
+ p_ssa_style->font_style.i_outline_width = atoi( psz_value );
}
else if( !strcasecmp( "shadow-color", psz_name ) )
{
if( *psz_value == '#' )
{
unsigned long col = strtol(psz_value+1, NULL, 16);
- p_style->font_style.i_shadow_color = (col & 0x00ffffff);
- p_style->font_style.i_shadow_alpha = (col >> 24) & 0xff;
+ p_ssa_style->font_style.i_shadow_color = (col & 0x00ffffff);
+ p_ssa_style->font_style.i_shadow_alpha = (col >> 24) & 0xff;
}
}
else if( !strcasecmp( "shadow-level", psz_name ) )
{
- p_style->font_style.i_shadow_width = atoi( psz_value );
+ p_ssa_style->font_style.i_shadow_width = atoi( psz_value );
}
else if( !strcasecmp( "back-color", psz_name ) )
{
if( *psz_value == '#' )
{
unsigned long col = strtol(psz_value+1, NULL, 16);
- p_style->font_style.i_karaoke_background_color = (col & 0x00ffffff);
- p_style->font_style.i_karaoke_background_alpha = (col >> 24) & 0xff;
+ p_ssa_style->font_style.i_karaoke_background_color = (col & 0x00ffffff);
+ p_ssa_style->font_style.i_karaoke_background_alpha = (col >> 24) & 0xff;
}
}
else if( !strcasecmp( "spacing", psz_name ) )
{
- p_style->font_style.i_spacing = atoi( psz_value );
+ p_ssa_style->font_style.i_spacing = atoi( psz_value );
}
}
free( psz_name );
if( !strcasecmp( "alignment", psz_name ) )
{
if( !strcasecmp( "TopLeft", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_LEFT;
else if( !strcasecmp( "TopCenter", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_TOP;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_TOP;
else if( !strcasecmp( "TopRight", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_RIGHT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_TOP | SUBPICTURE_ALIGN_RIGHT;
else if( !strcasecmp( "MiddleLeft", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_LEFT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_LEFT;
else if( !strcasecmp( "MiddleCenter", psz_value ) )
- p_style->i_align = 0;
+ p_ssa_style->i_align = 0;
else if( !strcasecmp( "MiddleRight", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_RIGHT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_RIGHT;
else if( !strcasecmp( "BottomLeft", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_BOTTOM | SUBPICTURE_ALIGN_LEFT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_BOTTOM | SUBPICTURE_ALIGN_LEFT;
else if( !strcasecmp( "BottomCenter", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_BOTTOM;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_BOTTOM;
else if( !strcasecmp( "BottomRight", psz_value ) )
- p_style->i_align = SUBPICTURE_ALIGN_BOTTOM | SUBPICTURE_ALIGN_RIGHT;
+ p_ssa_style->i_align = SUBPICTURE_ALIGN_BOTTOM | SUBPICTURE_ALIGN_RIGHT;
}
else if( !strcasecmp( "horizontal-margin", psz_name ) )
{
if( strchr( psz_value, '%' ) )
{
- p_style->i_margin_h = 0;
- p_style->i_margin_percent_h = atoi( psz_value );
+ p_ssa_style->i_margin_h = 0;
+ p_ssa_style->i_margin_percent_h = atoi( psz_value );
}
else
{
- p_style->i_margin_h = atoi( psz_value );
- p_style->i_margin_percent_h = 0;
+ p_ssa_style->i_margin_h = atoi( psz_value );
+ p_ssa_style->i_margin_percent_h = 0;
}
}
else if( !strcasecmp( "vertical-margin", psz_name ) )
{
if( strchr( psz_value, '%' ) )
{
- p_style->i_margin_v = 0;
- p_style->i_margin_percent_v = atoi( psz_value );
+ p_ssa_style->i_margin_v = 0;
+ p_ssa_style->i_margin_percent_v = atoi( psz_value );
}
else
{
- p_style->i_margin_v = atoi( psz_value );
- p_style->i_margin_percent_v = 0;
+ p_ssa_style->i_margin_v = atoi( psz_value );
+ p_ssa_style->i_margin_percent_v = 0;
}
}
}
break;
}
}
- free( p_style );
+ free( p_ssa_style );
}
if( !p_intf->p_sys )
return VLC_ENOMEM;
- p_sys->p_style = malloc( sizeof( text_style_t ) );
+ p_sys->p_style = text_style_New();
if( !p_sys->p_style )
{
free( p_intf->p_sys );
return VLC_ENOMEM;
}
- vlc_memcpy( p_sys->p_style, &default_text_style, sizeof( text_style_t ) );
p_intf->pf_run = Run;
p_sys->p_image = image_HandlerCreate( p_this );
if( !p_sys->p_image )
{
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys );
return VLC_ENOMEM;
}
if( p_sys->p_overlay )
picture_Release( p_sys->p_overlay );
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys );
}
subpicture_region_Delete( p_region );
return NULL;
}
- p_region->p_style = p_style;
+ p_region->p_style = text_style_Duplicate( p_style );
p_region->i_align = OSD_ALIGN_LEFT | OSD_ALIGN_TOP;
if( p_sys->p_text->pf_render_text )
msg_Dbg( p_this, "Closing" );
#ifndef __x86_64__
+ /* If the fullscreen window is still open, close it */
+ if( p_vout->b_fullscreen )
+ {
+ p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;
+ if( p_vout->p_sys->b_embedded )
+ {
+ aglManage( p_vout );
+ var_SetBool( p_vout->p_parent, "fullscreen", false );
+ }
+ else
+ Manage( p_vout );
+ }
+
if( p_vout->p_sys->b_embedded )
{
if( p_vout->p_sys->agl_ctx )
/* Set the Widget to the correct Size */
/* Function has to be called by the parent
- Parent has to care about resizing himself*/
+ Parent has to care about resizing itself */
void VideoWidget::SetSizing( unsigned int w, unsigned int h )
{
msg_Dbg( p_intf, "Video is resizing to: %i %i", w, h );
case INPUT_EVENT_RATE:
event = new IMEvent( ItemRateChanged_Type, 0 );
break;
- case INPUT_EVENT_TIMES:
+ case INPUT_EVENT_POSITION:
+ //case INPUT_EVENT_LENGTH:
event = new IMEvent( PositionUpdate_Type, 0 );
break;
videoIsActive = false;
/* Try to resize, except when you are in Fullscreen mode */
- if( !isFullScreen() ) doComponentsUpdate();
+ doComponentsUpdate();
}
/* Call from WindowControl function */
void askReleaseVideo( );
void askVideoToResize( unsigned int, unsigned int );
void askVideoToShow( unsigned int, unsigned int );
- void askVideoToToggle();
void askBgWidgetToToggle();
void askUpdate();
void minimalViewToggled( bool );
psz_help = config_CategoryHelpGet( p_item->value.i );
if( psz_help )
{
- config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ config_data->psz_help = strdup( psz_help );
}
else
{
const char *psz_help = config_CategoryHelpGet( p_item->value.i );
if( psz_help )
{
- config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ config_data->psz_help = strdup( psz_help );
}
else
{
psz_help = config_CategoryHelpGet( p_item->value.i );
if( psz_help )
{
- config_data->psz_help = wraptext( strdup( psz_help ), 72 );
+ config_data->psz_help = strdup( psz_help );
}
else
{
if( p_overlay->format.i_chroma == VLC_FOURCC('T','E','X','T') )
{
p_region->psz_text = strdup( p_overlay->data.p_text );
- p_region->p_style = malloc( sizeof(struct text_style_t) );
- if( p_region->p_style )
- *p_region->p_style = p_overlay->fontstyle;
+ p_region->p_style = text_style_Duplicate( p_overlay->p_fontstyle );
}
else
{
bool b_active;
video_format_t format;
- struct text_style_t fontstyle;
+ struct text_style_t *p_fontstyle;
union {
picture_t *p_pic;
char *p_text;
p_ovl->b_active = false;
vout_InitFormat( &p_ovl->format, VLC_FOURCC( '\0','\0','\0','\0') , 0, 0,
VOUT_ASPECT_FACTOR );
- memcpy( &p_ovl->fontstyle, &default_text_style, sizeof(struct text_style_t) );
+ p_ovl->p_fontstyle = text_style_New();
p_ovl->data.p_text = NULL;
return p_ovl;
{
if( p_ovl->data.p_text != NULL )
free( p_ovl->data.p_text );
+ text_style_Delete( p_ovl->p_fontstyle );
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_results->fontstyle.i_font_alpha = p_ovl->fontstyle.i_font_alpha;
+ p_results->fontstyle.i_font_alpha = p_ovl->p_fontstyle->i_font_alpha;
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_results->fontstyle.i_font_color = p_ovl->fontstyle.i_font_color;
+ p_results->fontstyle.i_font_color = p_ovl->p_fontstyle->i_font_color;
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_results->fontstyle.i_font_size = p_ovl->fontstyle.i_font_size;
+ p_results->fontstyle.i_font_size = p_ovl->p_fontstyle->i_font_size;
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_ovl->fontstyle.i_font_alpha = p_params->fontstyle.i_font_alpha;
+ p_ovl->p_fontstyle->i_font_alpha = p_params->fontstyle.i_font_alpha;
p_sys->b_updated = p_ovl->b_active;
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_ovl->fontstyle.i_font_color = p_params->fontstyle.i_font_color;
+ p_ovl->p_fontstyle->i_font_color = p_params->fontstyle.i_font_color;
p_sys->b_updated = p_ovl->b_active;
return VLC_SUCCESS;
}
if( p_ovl == NULL )
return VLC_EGENERIC;
- p_ovl->fontstyle.i_font_size = p_params->fontstyle.i_font_size;
+ p_ovl->p_fontstyle->i_font_size = p_params->fontstyle.i_font_size;
p_sys->b_updated = p_ovl->b_active;
return VLC_SUCCESS;
}
return VLC_ENOMEM;
vlc_mutex_init( &p_sys->lock );
- p_sys->p_style = malloc( sizeof( text_style_t ) );
- memcpy( p_sys->p_style, &default_text_style, sizeof( text_style_t ) );
+ p_sys->p_style = text_style_New();
config_ChainParse( p_filter, CFG_PREFIX, ppsz_filter_options,
p_filter->p_cfg );
filter_t *p_filter = (filter_t *)p_this;
filter_sys_t *p_sys = p_filter->p_sys;
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee );
/* Delete the marquee variables */
p_spu->p_region->i_x = p_sys->i_xoff;
p_spu->p_region->i_y = p_sys->i_yoff;
- p_spu->p_region->p_style = p_sys->p_style;
+ p_spu->p_region->p_style = text_style_Duplicate( p_sys->p_style );
out:
vlc_mutex_unlock( &p_sys->lock );
}
p_sys->psz_marquee[p_sys->i_length] = '\0';
- p_sys->p_style = malloc( sizeof( text_style_t ));
+ p_sys->p_style = text_style_New();
if( p_sys->p_style == NULL )
{
free( p_sys->psz_marquee );
free( p_sys );
return VLC_ENOMEM;
}
- memcpy( p_sys->p_style, &default_text_style, sizeof( text_style_t ));
p_sys->i_xoff = var_CreateGetInteger( p_filter, CFG_PREFIX "x" );
p_sys->i_yoff = var_CreateGetInteger( p_filter, CFG_PREFIX "y" );
if( FetchRSS( p_filter ) )
{
msg_Err( p_filter, "failed while fetching RSS ... too bad" );
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee );
vlc_mutex_unlock( &p_sys->lock );
vlc_mutex_destroy( &p_sys->lock );
if( p_sys->i_feeds == 0 )
{
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee );
vlc_mutex_unlock( &p_sys->lock );
vlc_mutex_destroy( &p_sys->lock );
{
if( p_sys->p_feeds[i_feed].i_items == 0 )
{
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee );
FreeRSS( p_filter );
vlc_mutex_unlock( &p_sys->lock );
vlc_mutex_lock( &p_sys->lock );
- free( p_sys->p_style );
+ text_style_Delete( p_sys->p_style );
free( p_sys->psz_marquee );
free( p_sys->psz_urls );
FreeRSS( p_filter );
p_spu->b_absolute = false;
}
- p_spu->p_region->p_style = p_sys->p_style;
+ p_spu->p_region->p_style = text_style_Duplicate( p_sys->p_style );
if( p_feed->p_pic )
{
NPError
NPN_PostURL(NPP instance, const char* url, const char* window,
- uint32 len, const char* buf, NPBool file)
+ uint32_t len, const char* buf, NPBool file)
{
return CallNPN_PostURLProc(gNetscapeFuncs.posturl, instance,
url, window, len, buf, file);
}
NPError
-NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32 len,
+NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32_t len,
const char* buf, NPBool file, void* notifyData)
{
return CallNPN_PostURLNotifyProc(gNetscapeFuncs.posturlnotify,
type, window, stream_ptr);
}
-int32
-NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer)
+int32_t
+NPN_Write(NPP instance, NPStream* stream, int32_t len, void* buffer)
{
return CallNPN_WriteProc(gNetscapeFuncs.write, instance,
stream, len, buffer);
return CallNPN_UserAgentProc(gNetscapeFuncs.uagent, instance);
}
-void*
-NPN_MemAlloc(uint32 size)
+void *NPN_MemAlloc(uint32_t size)
{
return CallNPN_MemAllocProc(gNetscapeFuncs.memalloc, size);
}
CallNPN_MemFreeProc(gNetscapeFuncs.memfree, ptr);
}
-uint32 NPN_MemFlush(uint32 size)
+uint32_t NPN_MemFlush(uint32_t size)
{
return CallNPN_MemFlushProc(gNetscapeFuncs.memflush, size);
}
***********************************************************************/
/* Function prototypes */
-NPError Private_New(NPMIMEType pluginType, NPP instance, uint16 mode,
- int16 argc, char* argn[], char* argv[], NPSavedData* saved);
+NPError Private_New(NPMIMEType pluginType, NPP instance, uint16_t mode,
+ int16_t argc, char* argn[], char* argv[], NPSavedData* saved);
NPError Private_Destroy(NPP instance, NPSavedData** save);
NPError Private_SetWindow(NPP instance, NPWindow* window);
NPError Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
- NPBool seekable, uint16* stype);
-int32 Private_WriteReady(NPP instance, NPStream* stream);
-int32 Private_Write(NPP instance, NPStream* stream, int32 offset,
- int32 len, void* buffer);
+ NPBool seekable, uint16_t* stype);
+int32_t Private_WriteReady(NPP instance, NPStream* stream);
+int32_t Private_Write(NPP instance, NPStream* stream, int32_t offset,
+ int32_t len, void* buffer);
void Private_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
NPError Private_DestroyStream(NPP instance, NPStream* stream, NPError reason);
void Private_URLNotify(NPP instance, const char* url,
/* function implementations */
NPError
-Private_New(NPMIMEType pluginType, NPP instance, uint16 mode,
- int16 argc, char* argn[], char* argv[], NPSavedData* saved)
+Private_New(NPMIMEType pluginType, NPP instance, uint16_t mode,
+ int16_t argc, char* argn[], char* argv[], NPSavedData* saved)
{
NPError ret;
PLUGINDEBUGSTR("New");
NPError
Private_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
- NPBool seekable, uint16* stype)
+ NPBool seekable, uint16_t* stype)
{
NPError err;
PLUGINDEBUGSTR("NewStream");
return err;
}
-int32
+int32_t
Private_WriteReady(NPP instance, NPStream* stream)
{
unsigned int result;
return result;
}
-int32
-Private_Write(NPP instance, NPStream* stream, int32 offset, int32 len,
+int32_t
+Private_Write(NPP instance, NPStream* stream, int32_t offset, int32_t len,
void* buffer)
{
unsigned int result;
return g_pNavigatorFuncs->geturl(instance, url, target);
}
-NPError NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData)
+NPError NPN_PostURLNotify(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file, void* notifyData)
{
int navMinorVers = g_pNavigatorFuncs->version & 0xFF;
NPError err;
}
-NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file)
+NPError NPN_PostURL(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file)
{
return g_pNavigatorFuncs->posturl(instance, url, window, len, buf, file);
}
/* Provides len bytes of data.
*/
-int32 NPN_Write(NPP instance, NPStream *stream,
- int32 len, void *buffer)
+int32_t NPN_Write(NPP instance, NPStream *stream,
+ int32_t len, void *buffer)
{
int navMinorVersion = g_pNavigatorFuncs->version & 0xFF;
- int32 result;
+ int32_t result;
if( navMinorVersion >= NPVERS_HAS_STREAMOUTPUT ) {
result = g_pNavigatorFuncs->write(instance, stream, len, buffer);
/* allocates memory from the Navigator's memory space. Necessary so that
* saved instance data may be freed by Navigator when exiting.
*/
-void* NPN_MemAlloc(uint32 size)
+void *NPN_MemAlloc(uint32 size)
{
return g_pNavigatorFuncs->memalloc(size);
}
function onEnd()\r
{\r
document.getElementById("state").innerHTML = "End...";\r
+ doStop();\r
}\r
\r
var liveFeedText = new Array("Live", "((Live))", "(( Live ))", "(( Live ))");\r
/* parse plugin arguments */
for( int i = 0; i < argc ; i++ )
{
- fprintf(stderr, "argn=%s, argv=%s\n", argn[i], argv[i]);
+ /* fprintf(stderr, "argn=%s, argv=%s\n", argn[i], argv[i]); */
if( !strcmp( argn[i], "target" )
|| !strcmp( argn[i], "mrl")
}
else if( !strcmp( argn[i], "toolbar" ) )
{
-/* FIXME: Remove this when toolbar functionality has been implemented on\
+/* FIXME: Remove this when toolbar functionality has been implemented on
* MacOS X and Win32 for Firefox/Mozilla/Safari. */
#ifdef XP_UNIX
b_toolbar = boolValue(argv[i]);
libvlc_exception_init(&ex);
libvlc_instance = libvlc_new(ppsz_argc, ppsz_argv, &ex);
-
if( libvlc_exception_raised(&ex) )
{
libvlc_exception_clear(&ex);
return false;
}
- VlcPlugin *p_plugin = (VlcPlugin*)instance->pdata;
-
+ VlcPlugin* p_plugin = reinterpret_cast<VlcPlugin*>(instance->pdata);
if( p_plugin == NULL )
{
return false;
{
/* set/change parent window */
libvlc_video_set_parent(p_vlc, (libvlc_drawable_t)drawable, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
}
clip.right = window->clipRect.right;
libvlc_video_set_viewport(p_vlc, p_plugin->getMD(&ex), &view, &clip, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
/* remember new window */
{
/* change/set parent */
libvlc_video_set_parent(p_vlc, 0, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
curwin.window = NULL;
/* change/set parent */
libvlc_video_set_parent(p_vlc, (libvlc_drawable_t)drawable, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
/* remember new window */
/* change/set parent */
libvlc_video_set_parent(p_vlc, 0, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
curwin.window = NULL;
/* set/change parent window */
libvlc_video_set_parent( p_vlc, (libvlc_drawable_t) video, &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
/* remember window */
{
/* change/set parent */
libvlc_video_set_parent(p_vlc, 0, &ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "Exception: %s\n", libvlc_exception_get_message(&ex) );
libvlc_exception_clear(&ex);
curwin.window = NULL;
}
libvlc_exception_init( &ex );
libvlc_media_player_t *p_md = p_plugin->getMD(&ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
i_playing = p_plugin->playlist_isplaying( &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
vlc_toolbar_clicked_t clicked;
else
p_plugin->playlist_play( &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
}
break;
case clicked_Stop:
{
p_plugin->playlist_stop(&ex);
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
}
break;
case clicked_Fullscreen:
{
p_plugin->set_fullscreen( 1, &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
}
break;
case clicked_Unmute:
{
libvlc_audio_toggle_mute( p_plugin->getVLC(), &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
}
break;
( ((float)i_xPos-4.0 ) / ( ((float)i_width-8.0)/100) );
libvlc_media_player_set_time( p_md, f_length, &ex );
- if( libvlc_exception_raised(&ex) )
- fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
libvlc_exception_clear( &ex );
}
}
goto error;
}
- if (asprintf (&temporary, "%s.%u", permanent, getpid ()) == -1)
+ if (asprintf (&temporary, "%s.%u", permanent,
+#ifdef UNDER_CE
+ GetCurrentProcessId ()
+#else
+ getpid ()
+#endif
+ ) == -1)
{
temporary = NULL;
module_list_free (list);
libvlc_event_listeners_group_t * p_lg;
int i,j ;
- vlc_mutex_destroy( &p_em->event_sending_lock );
- vlc_mutex_destroy( &p_em->object_lock );
+ vlc_mutex_lock( &p_em->event_sending_lock );
+ vlc_mutex_lock( &p_em->object_lock );
for( i = 0; i < vlc_array_count(&p_em->listeners_groups); i++)
{
free( p_lg );
}
vlc_array_clear( &p_em->listeners_groups );
+
+ vlc_mutex_unlock( &p_em->object_lock );
+ vlc_mutex_unlock( &p_em->event_sending_lock );
+
libvlc_release( p_em->p_libvlc_instance );
+
+ vlc_mutex_destroy( &p_em->event_sending_lock );
+ vlc_mutex_destroy( &p_em->object_lock );
+
free( p_em );
}
libvlc_exception_t * p_e )
{
libvlc_event_listeners_group_t * listeners_group;
+
+ vlc_mutex_lock( &p_em->object_lock );
+
listeners_group = malloc(sizeof(libvlc_event_listeners_group_t));
if( !listeners_group )
{
+ vlc_mutex_unlock( &p_em->object_lock );
+
libvlc_exception_raise( p_e, "No Memory left" );
return;
}
listeners_group->event_type = event_type;
vlc_array_init( &listeners_group->listeners );
- vlc_mutex_lock( &p_em->object_lock );
vlc_array_append( &p_em->listeners_groups, listeners_group );
vlc_mutex_unlock( &p_em->object_lock );
}
if( !array_listeners_cached )
{
fprintf(stderr, "Can't alloc memory in libvlc_event_send" );
+ vlc_mutex_unlock( &p_em->object_lock );
return;
}
if( !listeners_group )
{
+ vlc_mutex_unlock( &p_em->object_lock );
free( array_listeners_cached );
return;
}
listener_cached->pf_callback( p_event, listener_cached->p_user_data );
listener_cached++;
}
- vlc_mutex_unlock( &p_em->event_sending_lock );
free( array_listeners_cached );
+
+ vlc_mutex_unlock( &p_em->event_sending_lock );
}
/*
libvlc_event_listener_t * listener;
int i;
+ vlc_mutex_lock( &p_event_manager->object_lock );
+
listener = malloc(sizeof(libvlc_event_listener_t));
if( !listener )
{
+ vlc_mutex_unlock( &p_event_manager->object_lock );
+
libvlc_exception_raise( p_e, "No Memory left" );
return;
}
listener->p_user_data = p_user_data;
listener->pf_callback = pf_callback;
- vlc_mutex_lock( &p_event_manager->object_lock );
for( i = 0; i < vlc_array_count(&p_event_manager->listeners_groups); i++ )
{
listeners_group = vlc_array_item_at_index(&p_event_manager->listeners_groups, i);
return;
}
}
- vlc_mutex_unlock( &p_event_manager->object_lock );
free(listener);
+
+ vlc_mutex_unlock( &p_event_manager->object_lock );
+
libvlc_exception_raise( p_e,
"This object event manager doesn't know about '%s' events",
libvlc_event_type_name(event_type));
libvlc_event_listener_t * listener;
int i, j;
- vlc_mutex_lock( &p_event_manager->event_sending_lock );
vlc_mutex_lock( &p_event_manager->object_lock );
+
for( i = 0; i < vlc_array_count(&p_event_manager->listeners_groups); i++)
{
listeners_group = vlc_array_item_at_index(&p_event_manager->listeners_groups, i);
free( listener );
vlc_array_remove( &listeners_group->listeners, j );
vlc_mutex_unlock( &p_event_manager->object_lock );
- vlc_mutex_unlock( &p_event_manager->event_sending_lock );
return;
}
}
}
}
+
vlc_mutex_unlock( &p_event_manager->object_lock );
- vlc_mutex_unlock( &p_event_manager->event_sending_lock );
libvlc_exception_raise( p_e,
"This object event manager doesn't know about '%s,%p,%p' event observer",
**************************************************************************/
void libvlc_media_list_player_release( libvlc_media_list_player_t * p_mlp )
{
- free(p_mlp);
+ if( !p_mlp )
+ return;
+
+ vlc_mutex_lock( &p_mlp->object_lock );
+
+ p_mlp->i_refcount--;
+ if( p_mlp->i_refcount > 0 )
+ {
+ vlc_mutex_unlock( &p_mlp->object_lock );
+ return;
+ }
+ vlc_mutex_unlock( &p_mlp->object_lock );
+ vlc_mutex_destroy( &p_mlp->object_lock );
+
+ libvlc_event_manager_release( p_mlp->p_event_manager );
+ libvlc_media_player_release( p_mlp->p_mi );
+
+ if( p_mlp->p_mlist )
+ {
+ uninstall_playlist_observer( p_mlp );
+ libvlc_media_list_release( p_mlp->p_mlist );
+ }
+
+ free( p_mlp->current_playing_item_path );
+ free( p_mlp );
}
/**************************************************************************
libvlc_media_set_state( p_mi->p_md, libvlc_state, NULL );
libvlc_event_send( p_mi->p_event_manager, &event );
}
- else if( newval.i_int == INPUT_EVENT_TIMES )
+ else if( newval.i_int == INPUT_EVENT_POSITION )
{
if( var_GetInteger( p_input, "state" ) != PLAYING_S )
return VLC_SUCCESS; /* Don't send the position while stopped */
/* Snapshot initialization */
libvlc_event_manager_register_event_type( p_mi->p_event_manager,
libvlc_MediaPlayerSnapshotTaken, p_e );
+
/* Attach a var callback to the global object to provide the glue between
vout_thread that generates the event and media_player that re-emits it
with its own event manager
libvlc_exception_t *p_e )
{
libvlc_media_player_t * p_mi;
- p_mi = libvlc_media_player_new( p_md->p_libvlc_instance, p_e );
+ p_mi = libvlc_media_player_new( p_md->p_libvlc_instance, p_e );
if( !p_mi )
return NULL;
}
p_mi = libvlc_media_player_new( p_libvlc_instance, p_e );
-
if( !p_mi )
return NULL;
p_mi->p_md = libvlc_media_new_from_input_item(
p_libvlc_instance,
input_GetItem( p_input ), p_e );
-
if( !p_mi->p_md )
{
libvlc_media_player_destroy( p_mi );
input_thread_t *p_input_thread;
libvlc_exception_t p_e;
- libvlc_exception_init( &p_e );
-
if( !p_mi )
return;
+ libvlc_exception_init( &p_e );
+
/* Detach Callback from the main libvlc object */
var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
"vout-snapshottaken", SnapshotTakenCallback, p_mi );
return;
}
vlc_mutex_unlock( &p_mi->object_lock );
+
+ /* Detach Callback from the main libvlc object */
+ var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
+ "vout-snapshottaken", SnapshotTakenCallback, p_mi );
+
vlc_mutex_destroy( &p_mi->object_lock );
release_input_thread( p_mi, true );
else
{
input_thread_t * p_input_thread = libvlc_get_input_thread( p_mi, p_e );
-
if( !p_input_thread )
return;
* set_nsobject
**************************************************************************/
void libvlc_media_player_set_nsobject( libvlc_media_player_t *p_mi,
- void * drawable,
- libvlc_exception_t *p_e )
+ void * drawable,
+ libvlc_exception_t *p_e )
{
(void) p_e;
p_mi->drawable.nsobject = drawable;
if( p_input_thread )
{
- p_vout = vlc_object_find( p_input_thread, VLC_OBJECT_VOUT, FIND_CHILD );
+ p_vout = input_GetVout( p_input_thread );
if( !p_vout )
{
libvlc_exception_raise( p_exception, "No active video output" );
{
vout_thread_t *p_vout;
- p_vout = vlc_object_find( p_input_thread, VLC_OBJECT_VOUT, FIND_CHILD );
+ p_vout = input_GetVout( p_input_thread );
if( p_vout )
{
has_vout = true;
char *psz_format = (char *)va_arg( args, char * );
char *psz_value;
-
+
if( vasprintf( &psz_value, psz_format, args ) == -1 )
return VLC_EGENERIC;
mtime_t i_time = (mtime_t)va_arg( args, mtime_t );
mtime_t i_length = (mtime_t)va_arg( args, mtime_t );
- /* Fix for buffering delay */
- const mtime_t i_delay = EsOutGetBuffering( out );
+ input_SendEventLength( p_sys->p_input, i_length );
- i_time -= i_delay;
- if( i_time < 0 )
- i_time = 0;
+ if( !p_sys->b_buffering )
+ {
+ /* Fix for buffering delay */
+ const mtime_t i_delay = EsOutGetBuffering( out );
- if( i_length > 0 )
- f_position -= (double)i_delay / i_length;
- if( f_position < 0 )
- f_position = 0;
+ i_time -= i_delay;
+ if( i_time < 0 )
+ i_time = 0;
- if( !p_sys->b_buffering )
- input_SendEventTimes( p_sys->p_input, f_position, i_time, i_length );
+ if( i_length > 0 )
+ f_position -= (double)i_delay / i_length;
+ if( f_position < 0 )
+ f_position = 0;
+
+ input_SendEventPosition( p_sys->p_input, f_position, i_time );
+ }
return VLC_SUCCESS;
}
case ES_OUT_SET_JITTER:
Trigger( p_input, INPUT_EVENT_ABORT );
}
-void input_SendEventTimes( input_thread_t *p_input,
- double f_position, mtime_t i_time, mtime_t i_length )
+void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time )
{
vlc_value_t val;
val.i_time = i_time;
var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL );
+ Trigger( p_input, INPUT_EVENT_POSITION );
+}
+void input_SendEventLength( input_thread_t *p_input, mtime_t i_length )
+{
+ vlc_value_t val;
+
/* FIXME ugly + what about meta change event ? */
- if( var_GetTime( p_input, "length" ) != i_length )
- input_item_SetDuration( p_input->p->p_item, i_length );
+ if( var_GetTime( p_input, "length" ) == i_length )
+ return;
+
+ input_item_SetDuration( p_input->p->p_item, i_length );
+
val.i_time = i_length;
var_Change( p_input, "length", VLC_VAR_SETVALUE, &val, NULL );
- Trigger( p_input, INPUT_EVENT_TIMES );
+ Trigger( p_input, INPUT_EVENT_LENGTH );
}
void input_SendEventStatistics( input_thread_t *p_input )
{
*****************************************************************************/
void input_SendEventDead( input_thread_t *p_input );
void input_SendEventAbort( input_thread_t *p_input );
-void input_SendEventTimes( input_thread_t *p_input, double f_position, mtime_t i_time, mtime_t i_length );
+void input_SendEventPosition( input_thread_t *p_input, double f_position, mtime_t i_time );
+void input_SendEventLength( input_thread_t *p_input, mtime_t i_length );
void input_SendEventStatistics( input_thread_t *p_input );
void input_SendEventRate( input_thread_t *p_input, int i_rate );
void input_SendEventAudioDelay( input_thread_t *p_input, mtime_t i_delay );
i_length = 0;
if( i_length <= 0 )
i_length = input_item_GetDuration( p_input->p->p_item );
- input_SendEventTimes( p_input, 0.0, 0, i_length );
+ input_SendEventLength( p_input, i_length );
+
+ input_SendEventPosition( p_input, 0.0, 0 );
if( !p_input->b_preparsing )
{
subpicture_region_ChainDelete
subpicture_region_Delete
subpicture_region_New
+text_style_Copy
+text_style_Delete
+text_style_Duplicate
+text_style_New
tls_ClientCreate
tls_ClientDelete
ToLocale
char psz_tmpname[sizeof (psz_filename) + 12];
snprintf (psz_tmpname, sizeof (psz_tmpname), "%s.%"PRIu32, psz_filename,
- (uint32_t)getpid ());
+#ifdef UNDER_CE
+ (uint32_t)GetCurrentProcessId ()
+#else
+ (uint32_t)getpid ()
+#endif
+ );
file = utf8_fopen( psz_tmpname, "wb" );
if (file == NULL)
goto error;
* \param p_spu pointer to the subpicture queue the text is to be showed on
* \param i_channel Subpicture channel
* \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
+ * \param p_style Pointer to a struct with text style info (it is duplicated)
* \param i_flags flags for alignment and such
* \param i_hmargin horizontal margin in pixels
* \param i_vmargin vertical margin in pixels
* \param i_duration Amount of time the text is to be shown.
*/
int osd_ShowTextRelative( spu_t *p_spu, int i_channel,
- const char *psz_string, text_style_t *p_style,
+ const char *psz_string, const text_style_t *p_style,
int i_flags, int i_hmargin, int i_vmargin,
mtime_t i_duration )
{
* \param p_spu pointer to the subpicture queue the text is to be showed on
* \param i_channel Subpicture channel
* \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
+ * \param p_style Pointer to a struct with text style info (it is duplicated)
* \param i_flags flags for alignment and such
* \param i_hmargin horizontal margin in pixels
* \param i_vmargin vertical margin in pixels
* is about to be shown
*/
int osd_ShowTextAbsolute( spu_t *p_spu_channel, int i_channel,
- const char *psz_string, text_style_t *p_style,
+ const char *psz_string, const text_style_t *p_style,
int i_flags, int i_hmargin, int i_vmargin,
mtime_t i_start, mtime_t i_stop )
{
/* Needed by str_format_time */
#include <time.h>
+#include <limits.h>
/* Needed by str_format_meta */
#include <vlc_input.h>
* \param p_vout pointer to the vout the text is to be showed on
* \param i_channel Subpicture channel
* \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
+ * \param p_style Pointer to a struct with text style info (it is duplicated if non NULL)
* \param i_flags flags for alignment and such
* \param i_hmargin horizontal margin in pixels
* \param i_vmargin vertical margin in pixels
* \param i_duration Amount of time the text is to be shown.
*/
int vout_ShowTextRelative( vout_thread_t *p_vout, int i_channel,
- char *psz_string, text_style_t *p_style,
+ char *psz_string, const text_style_t *p_style,
int i_flags, int i_hmargin, int i_vmargin,
mtime_t i_duration )
{
* \param p_vout pointer to the vout the text is to be showed on
* \param i_channel Subpicture channel
* \param psz_string The text to be shown
- * \param p_style Pointer to a struct with text style info
+ * \param p_style Pointer to a struct with text style info (it is duplicated if non NULL)
* \param i_flags flags for alignment and such
* \param i_hmargin horizontal margin in pixels
* \param i_vmargin vertical margin in pixels
* is about to be shown
*/
int vout_ShowTextAbsolute( vout_thread_t *p_vout, int i_channel,
- const char *psz_string, text_style_t *p_style,
+ const char *psz_string, const text_style_t *p_style,
int i_flags, int i_hmargin, int i_vmargin,
mtime_t i_start, mtime_t i_stop )
{
- (void)p_style;
subpicture_t *p_spu;
video_format_t fmt;
- /* (void)p_style; FIXME: <-- why ask for this if it's unused?!? */
if( !psz_string ) return VLC_EGENERIC;
p_spu->p_region->i_align = i_flags & SUBPICTURE_ALIGN_MASK;
p_spu->p_region->i_x = i_hmargin;
p_spu->p_region->i_y = i_vmargin;
+ if( p_style )
+ p_spu->p_region->p_style = text_style_Duplicate( p_style );
spu_DisplaySubpicture( p_vout->p_spu, p_spu );
va_end( args );
}
}
+
+/* */
+text_style_t *text_style_New( void )
+{
+ text_style_t *p_style = calloc( 1, sizeof(*p_style) );
+ if( !p_style )
+ return NULL;
+
+ /* initialize to default text style */
+ p_style->psz_fontname = NULL;
+ p_style->i_font_size = 22;
+ p_style->i_font_color = 0xffffff;
+ p_style->i_font_alpha = 0xff;
+ p_style->i_style_flags = STYLE_OUTLINE;
+ p_style->i_outline_color = 0x000000;
+ p_style->i_outline_alpha = 0xff;
+ p_style->i_shadow_color = 0x000000;
+ p_style->i_shadow_alpha = 0xff;
+ p_style->i_background_color = 0xffffff;
+ p_style->i_background_alpha = 0x80;
+ p_style->i_karaoke_background_color = 0xffffff;
+ p_style->i_karaoke_background_alpha = 0xff;
+ p_style->i_outline_width = 1;
+ p_style->i_shadow_width = 0;
+ p_style->i_spacing = -1;
+
+ return p_style;
+}
+
+text_style_t *text_style_Copy( text_style_t *p_dst, const text_style_t *p_src )
+{
+ if( !p_src )
+ return p_dst;
+
+ /* */
+ if( p_dst->psz_fontname )
+ free( p_dst->psz_fontname );
+
+ /* */
+ *p_dst = *p_src;
+
+ /* */
+ if( p_dst->psz_fontname )
+ p_dst->psz_fontname = strdup( p_dst->psz_fontname );
+
+ return p_dst;
+}
+
+text_style_t *text_style_Duplicate( const text_style_t *p_src )
+{
+ if( !p_src )
+ return NULL;
+
+ text_style_t *p_dst = calloc( 1, sizeof(*p_dst) );
+ if( p_dst )
+ text_style_Copy( p_dst, p_src );
+ return p_dst;
+}
+
+void text_style_Delete( text_style_t *p_style )
+{
+ if( p_style )
+ free( p_style->psz_fontname );
+ free( p_style );
+}
+
free( p_region->psz_text );
free( p_region->psz_html );
- //free( p_region->p_style ); FIXME --fenrir plugin does not allocate the memory for it. I think it might lead to segfault, video renderer can live longer than the decoder
+ if( p_region->p_style )
+ text_style_Delete( p_region->p_style );
free( p_region );
}