]> git.sesse.net Git - vlc/blobdiff - modules/demux/cdg.c
Fixed CDG seeking while used as a slave input.
[vlc] / modules / demux / cdg.c
index bb971aae1006cf873e9931f296cc053dbaa3af99..d9102884bc680ef0e3e2ac190daf5a51ddd05b26 100644 (file)
@@ -2,7 +2,7 @@
  * cdg.c : cdg file demux module for vlc
  *****************************************************************************
  * Copyright (C) 2007 Laurent Aimar
- * $Id$
+ * $Id$
  *
  * Authors: Laurent Aimar <fenrir # via.ecp.fr>
  *
  * Preamble
  *****************************************************************************/
 
-#include <vlc/vlc.h>
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 #include <vlc_demux.h>
 
 #include <vlc_codecs.h>
 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
@@ -144,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 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;
 }