X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fdemux%2Fcdg.c;h=6cc401fc5737bef64d3b4ebb29e5853a4c7a8b63;hb=f870d44caf89f71e3142fc92b6cdd64df4feebe1;hp=bb971aae1006cf873e9931f296cc053dbaa3af99;hpb=fd592d264ac3a8a83585f61b889f4ceafa1d35b4;p=vlc diff --git a/modules/demux/cdg.c b/modules/demux/cdg.c index bb971aae10..6cc401fc57 100644 --- a/modules/demux/cdg.c +++ b/modules/demux/cdg.c @@ -2,7 +2,7 @@ * cdg.c : cdg file demux module for vlc ***************************************************************************** * Copyright (C) 2007 Laurent Aimar - * $Id: $ + * $Id$ * * Authors: Laurent Aimar * @@ -25,7 +25,12 @@ * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include @@ -36,15 +41,15 @@ static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); -vlc_module_begin(); - set_description( _("CDG demuxer") ); - set_category( CAT_INPUT ); - set_subcategory( SUBCAT_INPUT_DEMUX ); - set_capability( "demux2", 2 ); - 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" ) + add_shortcut( "subtitle" ) +vlc_module_end () /***************************************************************************** * Local prototypes @@ -73,7 +78,7 @@ static int Open( vlc_object_t * p_this ) /* Identify cdg file by extension, as there is no simple way to * detect it */ - if( !demux2_IsPathExtension( p_demux, ".cdg" ) && !demux2_IsForced( p_demux, "cdg" ) ) + if( !demux_IsPathExtension( p_demux, ".cdg" ) && !demux_IsForced( p_demux, "cdg" ) ) return VLC_EGENERIC; /* CDG file size has to be multiple of CDG_FRAME_SIZE (it works even @@ -89,7 +94,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 ; @@ -97,7 +102,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; } @@ -120,11 +125,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; } @@ -144,11 +152,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 demux2_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; }