X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fdemux%2Fcdg.c;h=c7a3b6ec7a84fd9298511d08c270e66a5758a388;hb=5f118ca94b8b9e25b78e72e781c94fb2376541bb;hp=b4b49c4fbbad850a1d186fb78527788a26413e6d;hpb=13ae40b0efc4f1b1ce205d9a057537047fcab3f4;p=vlc diff --git a/modules/demux/cdg.c b/modules/demux/cdg.c index b4b49c4fbb..c7a3b6ec7a 100644 --- a/modules/demux/cdg.c +++ b/modules/demux/cdg.c @@ -29,27 +29,24 @@ # include "config.h" #endif -#include +#include #include #include -#include - /***************************************************************************** * Module descriptor *****************************************************************************/ static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); -vlc_module_begin(); - set_description( N_("CDG demuxer") ); - set_category( CAT_INPUT ); - set_subcategory( SUBCAT_INPUT_DEMUX ); - set_capability( "demux", 3 ); - set_callbacks( Open, Close ); - add_shortcut( "cdg" ); - add_shortcut( "subtitle" ); -vlc_module_end(); +vlc_module_begin () + set_description( N_("CDG demuxer") ) + set_category( CAT_INPUT ) + set_subcategory( SUBCAT_INPUT_DEMUX ) + set_capability( "demux", 3 ) + set_callbacks( Open, Close ) + add_shortcut( "cdg", "subtitle" ) +vlc_module_end () /***************************************************************************** * Local prototypes @@ -94,7 +91,7 @@ static int Open( vlc_object_t * p_this ) p_demux->p_sys = p_sys = malloc( sizeof( demux_sys_t ) ); /* */ - es_format_Init( &p_sys->fmt, VIDEO_ES, VLC_FOURCC('C','D','G', ' ' ) ); + es_format_Init( &p_sys->fmt, VIDEO_ES, VLC_CODEC_CDG ); p_sys->fmt.video.i_width = 300-2*6; p_sys->fmt.video.i_height = 216-2*12 ; @@ -102,7 +99,7 @@ static int Open( vlc_object_t * p_this ) /* There is CDG_FRAME_RATE frames per second */ date_Init( &p_sys->pts, CDG_FRAME_RATE, 1 ); - date_Set( &p_sys->pts, 1 ); + date_Set( &p_sys->pts, 0 ); return VLC_SUCCESS; } @@ -125,11 +122,14 @@ static int Demux( demux_t *p_demux ) } p_block->i_dts = - p_block->i_pts = date_Increment( &p_sys->pts, 1 ); + p_block->i_pts = VLC_TS_0 + date_Get( &p_sys->pts ); es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts ); es_out_Send( p_demux->out, p_sys->p_es, p_block ); + + date_Increment( &p_sys->pts, 1 ); + return 1; } @@ -149,11 +149,14 @@ static void Close ( vlc_object_t * p_this ) *****************************************************************************/ static int Control( demux_t *p_demux, int i_query, va_list args ) { - switch( i_query ) - { - default: - return demux_vaControlHelper( p_demux->s, 0, -1, - 8*CDG_FRAME_SIZE*CDG_FRAME_RATE, CDG_FRAME_SIZE, i_query, args ); - } + int i_ret = demux_vaControlHelper( p_demux->s, 0, -1, + 8*CDG_FRAME_SIZE*CDG_FRAME_RATE, CDG_FRAME_SIZE, + i_query, args ); + if( !i_ret && ( i_query == DEMUX_SET_POSITION || i_query == DEMUX_SET_TIME ) ) + date_Set( &p_demux->p_sys->pts, + stream_Tell( p_demux->s ) / CDG_FRAME_SIZE * + INT64_C(1000000) / CDG_FRAME_RATE ); + + return i_ret; }