#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_input.h>
-
-
-#include <errno.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#include <ctype.h>
+#include <vlc_memory.h>
#include <vlc_demux.h>
-#include <vlc_charset.h>
#include "asademux.h"
#define SUB_TYPE_LONGTEXT \
N_("Force the subtiles format. Use \"auto\", the set of supported values varies.")
-vlc_module_begin();
- set_shortname( N_("Subtitles (asa demuxer)"));
- set_description( N_("Text subtitles parser") );
- set_capability( "demux", 50 );
- set_category( CAT_INPUT );
- set_subcategory( SUBCAT_INPUT_DEMUX );
+vlc_module_begin ()
+ set_shortname( N_("Subtitles (asa demuxer)"))
+ set_description( N_("Text subtitles parser") )
+ set_capability( "demux", 50 )
+ set_category( CAT_INPUT )
+ set_subcategory( SUBCAT_INPUT_DEMUX )
add_float( "sub-fps", 0.0, NULL,
N_("Frames per second"),
- SUB_FPS_LONGTEXT, true );
+ SUB_FPS_LONGTEXT, true )
add_integer( "sub-delay", 0, NULL,
N_("Subtitles delay"),
- SUB_DELAY_LONGTEXT, true );
+ SUB_DELAY_LONGTEXT, true )
add_string( "sub-type", "auto", NULL, N_("Subtitles format"),
- SUB_TYPE_LONGTEXT, true );
- set_callbacks( Open, Close );
+ SUB_TYPE_LONGTEXT, true )
+ set_callbacks( Open, Close )
- add_shortcut( "asademux" );
-vlc_module_end();
+ add_shortcut( "asademux" )
+vlc_module_end ()
/*****************************************************************************
* Prototypes:
demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys;
es_format_t fmt;
- input_thread_t *p_input;
float f_fps;
char *psz_type;
int64_t i_ssize;
if( strcmp( p_demux->psz_demux, "asademux" ) )
{
- msg_Dbg( p_demux, "asademux discarded" );
return VLC_EGENERIC;
}
p_sys->i_microsecperframe = 40000;
/* Get the FPS */
- p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
- if( p_input )
- {
- f_fps = var_GetFloat( p_input, "sub-original-fps" );
- if( f_fps >= 1.0 )
- p_sys->i_microsecperframe = (int64_t)( (float)1000000 / f_fps );
+ f_fps = var_CreateGetFloat( p_demux, "sub-original-fps" );
+ if( f_fps >= 1.0 )
+ p_sys->i_microsecperframe = (int64_t)( (float)1000000 / f_fps );
- msg_Dbg( p_demux, "Movie fps: %f", f_fps );
- vlc_object_release( p_input );
- }
+ msg_Dbg( p_demux, "Movie fps: %f", f_fps );
/* Check for override of the fps */
f_fps = var_CreateGetFloat( p_demux, "sub-fps" );
}
if( !p_detect->fmt )
{
- msg_Err( p_demux, "detected %s subtitle format, no asa support" );
+ msg_Err( p_demux, "detected %s subtitle format, no asa support", p_detect->name );
free( p_sys );
return VLC_EGENERIC;
}
p_sys->i_length = p_sys->subtitle[p_sys->i_subtitles-1].i_stop;
/* +1 to avoid 0 */
if( p_sys->i_length <= 0 )
- p_sys->i_length = p_sys->subtitle[p_sys->i_subtitles-1].i_start+1;
+ p_sys->i_length = p_sys->subtitle[p_sys->i_subtitles-1].i_start + VLC_TS_0;
}
/* *** add subtitle ES *** */
if( p_detect->fmt->target == ASAI_TARGET_SSA )
{
- es_format_Init( &fmt, SPU_ES, VLC_FOURCC( 's','s','a',' ' ) );
+ es_format_Init( &fmt, SPU_ES, VLC_CODEC_SSA );
}
else
{
- es_format_Init( &fmt, SPU_ES, VLC_FOURCC( 's','u','b','t' ) );
+ es_format_Init( &fmt, SPU_ES, VLC_CODEC_SUBT );
}
p_sys->es = es_out_Add( p_demux->out, &fmt );
subtitle_t *p_subtitle;
char *psz_text;
+ VLC_UNUSED(p_arg);
+
if( p_sys->i_subtitles >= p_sys->i_subs_alloc )
{
p_sys->i_subs_alloc += 500;
- if( !( p_sys->subtitle = realloc( p_sys->subtitle, sizeof(subtitle_t)
- * p_sys->i_subs_alloc ) ) )
+ if( !( p_sys->subtitle = realloc_or_free( p_sys->subtitle,
+ sizeof(subtitle_t) * p_sys->i_subs_alloc ) ) )
{
return VLC_ENOMEM;
}
continue;
}
- p_block->i_pts = p_sys->subtitle[p_sys->i_subtitle].i_start;
- p_block->i_dts = p_block->i_pts;
- if( p_sys->subtitle[p_sys->i_subtitle].i_stop > 0 )
+ p_block->i_pts = VLC_TS_0 + p_sys->subtitle[p_sys->i_subtitle].i_start;
+ p_block->i_dts = VLC_TS_0 + p_block->i_pts;
+ if( p_sys->subtitle[p_sys->i_subtitle].i_stop >= 0 )
{
p_block->i_length =
p_sys->subtitle[p_sys->i_subtitle].i_stop - p_block->i_pts;
memcpy( p_block->p_buffer,
p_sys->subtitle[p_sys->i_subtitle].psz_text, i_len );
- if( p_block->i_pts > 0 )
+ if( p_block->i_pts > VLC_TS_INVALID )
{
es_out_Send( p_demux->out, p_sys->es, p_block );
}