]> git.sesse.net Git - vlc/blobdiff - modules/access/vcdx/vcdplayer.c
Nicer commits, faster breaking time and better-looking headers
[vlc] / modules / access / vcdx / vcdplayer.c
index a60d610edb8ff055655fb875428268524b36a14c..0a3fcf69eb9c3803d449bc42e87d127bdead8ef6 100644 (file)
@@ -17,7 +17,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*
@@ -30,8 +30,8 @@
  *****************************************************************************/
 
 #include <vlc/vlc.h>
-#include <vlc/input.h>
-#include <vlc/intf.h>
+#include <vlc_input.h>
+#include <vlc_interface.h>
 
 #include "vcd.h"
 #include "vcdplayer.h"
 #include <cdio/util.h>
 #include <libvcd/info.h>
 
-#ifdef WIN32
-#define sleep(A) Sleep((A)*1000)
-#endif
-
 extern void VCDSetOrigin ( access_t *p_access, lsn_t i_lsn, track_t i_track,
                           const vcdinfo_itemid_t * p_itemid );
 
@@ -83,7 +79,7 @@ vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid)
   case VCDINFO_ITEM_TYPE_NOTFOUND:
   case VCDINFO_ITEM_TYPE_SPAREID2:
   default:
-    LOG_ERR("%s %d", _("bad item type"), itemid.type);
+    LOG_ERR("%s %d", "bad item type", itemid.type);
     return 0;
   }
 }
@@ -195,7 +191,7 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num)
   const unsigned int   i_entries = vcdinfo_get_num_entries(p_vcdinfo);
 
   if (num >= i_entries) {
-    LOG_ERR("%s %d", _("bad entry number"), num);
+    LOG_ERR("%s %d", "bad entry number", num);
     return;
   } else {
     vcdinfo_itemid_t itemid;
@@ -223,14 +219,14 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num)
   segnum_t       i_segs    = vcdinfo_get_num_segments(p_vcdinfo);
 
   if (num >= i_segs) {
-    LOG_ERR("%s %d", _("bad segment number"), num);
+    LOG_ERR("%s %d", "bad segment number", num);
     return;
   } else {
     vcdinfo_itemid_t itemid;
 
     if (VCDINFO_NULL_LSN==p_vcdplayer->i_lsn) {
       LOG_ERR("%s %d", 
-              _("Error in getting current segment number"), num);
+              "Error in getting current segment number", num);
       return;
     }
     
@@ -301,7 +297,7 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
     }
     
   case VCDINFO_ITEM_TYPE_LID:
-    LOG_ERR("%s", _("Should have converted p_vcdplayer above"));
+    LOG_ERR("%s", "Should have converted p_vcdplayer above");
     return false;
     break;
 
@@ -330,7 +326,6 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid)
    changed: p_vcdplayer->origin_lsn, p_vcdplayer->end_lsn
 */
 
-/* FIXME: add parameters lsn, i_track, p_itemid and set accordingly. */
 void 
 vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
                     const vcdinfo_itemid_t *p_itemid)
@@ -338,6 +333,12 @@ vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
   vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys;
   const size_t i_size= vcdplayer_get_item_size(p_access, *p_itemid);
 
+  if( VCDINFO_NULL_LSN == i_lsn ) 
+  {
+      LOG_ERR("%s %d", "Invalid LSN for track", i_track);
+      return;
+  }
+
   p_vcdplayer->play_item.num  = p_itemid->num;
   p_vcdplayer->play_item.type = p_itemid->type;
   p_vcdplayer->i_lsn          = i_lsn;
@@ -346,6 +347,8 @@ vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
   p_vcdplayer->i_track        = i_track;
   p_vcdplayer->track_lsn      = vcdinfo_get_track_lsn(p_vcdplayer->vcd, 
                                                      i_track);
+  p_vcdplayer->track_end_lsn  = p_vcdplayer->track_lsn + 
+    vcdinfo_get_track_sect_count(p_vcdplayer->vcd, i_track);
 
   dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN), 
            "lsn %u, end LSN: %u item.num %d, item.type %d", 
@@ -550,7 +553,7 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time )
           return READ_BLOCK;
         } else if (p_vcdplayer->i_still) {
           /* Hack: Just go back and do still again */
-          sleep(1);
+          msleep(1000);
           return READ_STILL_FRAME;
         }
       }
@@ -695,6 +698,7 @@ vcdplayer_play_default( access_t * p_access )
       dbg_print(INPUT_DBG_PBC, "DEFAULT to %d", itemid.num);
     } else {
       dbg_print(INPUT_DBG_PBC, "no DEFAULT for LID %d", p_vcdplayer->i_lid);
+      return VLC_EGENERIC;
     }
 
 #else 
@@ -724,7 +728,7 @@ vcdplayer_play_default( access_t * p_access )
     /* PBC is not on. "default" selection beginning of current 
        selection . */
   
-    p_vcdplayer->play_item.num = p_vcdplayer->play_item.num;
+    itemid.num = p_vcdplayer->play_item.num;
     
   }
 
@@ -754,7 +758,7 @@ vcdplayer_play_next( access_t * p_access )
 
   p_vcdinfo = p_vcdplayer->vcd;
 
-  itemid.type = p_vcdplayer->play_item.type;
+  itemid = p_vcdplayer->play_item;
 
   if  (vcdplayer_pbc_is_on(p_vcdplayer)) {
 
@@ -848,7 +852,7 @@ vcdplayer_play_prev( access_t * p_access )
   dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 
             "current: %d" , p_vcdplayer->play_item.num);
 
-  itemid.type = p_vcdplayer->play_item.type;
+  itemid = p_vcdplayer->play_item;
 
   if  (vcdplayer_pbc_is_on(p_vcdplayer)) {
 
@@ -914,7 +918,7 @@ vcdplayer_play_return( access_t * p_access )
   dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 
             "current: %d" , p_vcdplayer->play_item.num);
 
-  itemid.type = p_vcdplayer->play_item.type;
+  itemid = p_vcdplayer->play_item;
 
   if  (vcdplayer_pbc_is_on(p_vcdplayer)) {