]> git.sesse.net Git - vlc/blobdiff - modules/access/vcdx/vcdplayer.h
Removes trailing spaces. Removes tabs.
[vlc] / modules / access / vcdx / vcdplayer.h
index 600a121d24348c4a95c1d3ed461a240521150161..3e894f453c25550bbd00e081859518d4865d5089 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
- * Copyright (C) 2003, 2004 Rocky Bernstein (for VideoLAN)
+ * Copyright (C) 2003, 2004 Rocky Bernstein (for the VideoLAN team)
  * $Id$
  *
- * Authors: Rocky Bernstein <rocky@panix.com> 
+ * Authors: Rocky Bernstein <rocky@panix.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  * 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.
  *****************************************************************************/
 
-/* VCD Player header. More or less media-player independent */
+/* VCD Player header. More or less media-player independent. Or at least
+   that is the goal. So we prefer bool to vlc_bool.
+ */
 
 #ifndef _VCDPLAYER_H_
 #define _VCDPLAYER_H_
 
 #include <libvcd/info.h>
+#include <vlc_meta.h>
+#include <vlc_input.h>
+#include <vlc_access.h>
 
 #define INPUT_DBG_META        1 /* Meta information */
 #define INPUT_DBG_EVENT       2 /* input (keyboard/mouse) events */
 #define INPUT_DBG_MRL         4 /* MRL parsing */
 #define INPUT_DBG_EXT         8 /* Calls from external routines */
-#define INPUT_DBG_CALL       16 /* all calls */
+#define INPUT_DBG_CALL       16 /* routine calls */
 #define INPUT_DBG_LSN        32 /* LSN changes */
 #define INPUT_DBG_PBC        64 /* Playback control */
 #define INPUT_DBG_CDIO      128 /* Debugging from CDIO */
 #define INPUT_DEBUG 1
 #if INPUT_DEBUG
 #define dbg_print(mask, s, args...) \
-   if (p_vcd && p_vcd->i_debug & mask) \
-     msg_Dbg(p_input, "%s: "s, __func__ , ##args)
+   if (p_vcdplayer && p_vcdplayer->i_debug & mask) \
+     msg_Dbg(p_access, "%s: "s, __func__ , ##args)
 #else
-#define dbg_print(mask, s, args...) 
+#define dbg_print(mask, s, args...)
 #endif
 
-#define LOG_ERR(args...)  msg_Err( p_input, args )
-#define LOG_WARN(args...) msg_Warn( p_input, args )
+#define LOG_ERR(args...)  msg_Err( p_access, args )
+#define LOG_WARN(args...) msg_Warn( p_access, args )
 
-/* vcdplayer_read return status */
-typedef enum {
-  READ_BLOCK,
-  READ_STILL_FRAME,
-  READ_ERROR,
-  READ_END,
-} vcdplayer_read_status_t;
+/*------------------------------------------------------------------
+  General definitions and structures.
+---------------------------------------------------------------------*/
+
+/* Value for indefinite wait period on a still frame */
+#define STILL_INDEFINITE_WAIT 255
+/* Value when we have yet to finish reading blocks of a frame. */
+#define STILL_READING          -5
+
+typedef struct {
+  lsn_t  start_LSN; /* LSN where play item starts */
+  size_t size;      /* size in sector units of play item. */
+} vcdplayer_play_item_info_t;
 
 /*****************************************************************************
- * thread_vcd_data_t: VCD information
+ * vcdplayer_t: VCD information
  *****************************************************************************/
-typedef struct thread_vcd_data_s
+typedef struct vcdplayer_input_s
 {
   vcdinfo_obj_t *vcd;                   /* CD device descriptor */
-  bool           in_still;              /*  true if in still */
-  bool           b_svd;                 /*  true if we have SVD info */
-  unsigned int num_tracks;              /* Nb of tracks (titles) */
-  unsigned int num_segments;            /* Nb of segments */
-  unsigned int num_entries;             /* Nb of entries */
-  unsigned int num_lids;                /* Nb of List IDs */
-  vcdinfo_itemid_t play_item;           /* play-item, VCDPLAYER_BAD_ENTRY 
-                                           if none */
-  int          cur_lid;                 /* LID that play item is in. Implies 
-                                           PBC is on. VCDPLAYER_BAD_ENTRY if 
+
+  /*------------------------------------------------------------------
+    User-settable options
+   --------------------------------------------------------------*/
+  unsigned int i_debug;                 /* Debugging mask */
+  unsigned int i_blocks_per_read;       /* number of blocks per read */
+
+  /*-------------------------------------------------------------
+     Playback control fields
+   --------------------------------------------------------------*/
+  bool         in_still;                /* true if in still */
+  int          i_lid;                   /* LID that play item is in. Implies
+                                           PBC is on. VCDPLAYER_BAD_ENTRY if
                                            not none or not in PBC */
-  PsdListDescriptor_t pxd;              /* If PBC is on, the relevant 
-                                           PSD/PLD */
-  int          pdi;                     /* current pld index of pxd. -1 if 
+  PsdListDescriptor_t pxd;              /* If PBC is on, the relevant
+                                            PSD/PLD */
+  int          pdi;                     /* current pld index of pxd. -1 if
                                            no index*/
-  vcdinfo_itemid_t loop_item;           /* Where do we loop back to? 
-                                           Meaningful only in a selection 
+  vcdinfo_itemid_t play_item;           /* play-item, VCDPLAYER_BAD_ENTRY
+                                           if none */
+  vcdinfo_itemid_t loop_item;           /* Where do we loop back to?
+                                           Meaningful only in a selection
                                            list */
-  int          loop_count;              /* # of times play-item has been 
-                                           played. Meaningful only in a 
+  int          i_loop;                  /* # of times play-item has been
+                                           played. Meaningful only in a
                                            selection list.              */
-  track_t      cur_track;               /* Current track number */
-  lsn_t        cur_lsn;                 /* Current logical sector number */
-  lsn_t        end_lsn;                 /* LSN of end of current 
-                                           entry/segment/track. */
+  track_t      i_track;                 /* current track number */
+
+  /*-----------------------------------
+     location fields
+   ------------------------------------*/
+  lsn_t        i_lsn;                   /* LSN of where we are right now */
+  lsn_t        end_lsn;                 /* LSN of end of current
+                                           entry/segment/track. This block
+                                           can be read (and is not one after
+                                           the "end").
+                                        */
   lsn_t        origin_lsn;              /* LSN of start of seek/slider */
-  lsn_t *      p_sectors;               /* Track sectors */
+  lsn_t        track_lsn;               /* LSN of start track origin of track
+                                           we are in. */
+  lsn_t        track_end_lsn;           /* LSN of end of current track (if
+                                           entry). */
   lsn_t *      p_entries;               /* Entry points */
   lsn_t *      p_segments;              /* Segments */
   bool         b_valid_ep;              /* Valid entry points flag */
-  vlc_bool_t   b_end_of_track;          /* If the end of track was reached */
-  int          i_debug;                 /* Debugging mask */
+  bool         b_end_of_track;          /* If the end of track was reached */
+
+  /*--------------------------------------------------------------
+    (S)VCD Medium information
+   ---------------------------------------------------------------*/
+
+  char        *psz_source;              /* (S)VCD drive or image filename */
+  bool         b_svd;                   /* true if we have SVD info */
+  vlc_meta_t  *p_meta;
+  track_t      i_tracks;                /* # of playable MPEG tracks. This is
+                                           generally one less than the number
+                                           of CD tracks as the first CD track
+                                           is an ISO-9660 track and is not
+                                           playable.
+                                        */
+  unsigned int i_segments;              /* # of segments */
+  unsigned int i_entries;               /* # of entries */
+  unsigned int i_lids;                  /* # of List IDs */
+
+  /* Tracks, segment, and entry information. The number of entries for
+     each is given by the corresponding i_* field above.  */
+  vcdplayer_play_item_info_t *track;
+  vcdplayer_play_item_info_t *segment;
+  vcdplayer_play_item_info_t *entry;
+
+  unsigned int i_titles;                /* # of navigatable titles. */
+
+  /*
+     # tracks + menu for segments + menu for LIDs
+   */
+  input_title_t *p_title[CDIO_CD_MAX_TRACKS+2];
 
   /* Probably gets moved into another structure...*/
-  intf_thread_t *         p_intf;
-  int                     i_audio_nb;
-  int                     i_still_time;
-  vlc_bool_t              b_end_of_cell;
-  
-} thread_vcd_data_t;
+  intf_thread_t *p_intf;
+  int            i_audio_nb;
+  int            i_still;
+  bool           b_end_of_cell;
+  bool           b_track_length; /* Use track as max unit in seek */
+  input_thread_t *p_input;
+  access_t       *p_access;
+} vcdplayer_t;
 
-/*!
-  Get the next play-item in the list given in the LIDs. Note play-item
-  here refers to list of play-items for a single LID It shouldn't be
-  confused with a user's list of favorite things to play or the 
-  "next" field of a LID which moves us to a different LID.
- */
-bool vcdplayer_inc_play_item( input_thread_t *p_input );
+/* vcdplayer_read return status */
+typedef enum {
+  READ_BLOCK,
+  READ_STILL_FRAME,
+  READ_ERROR,
+  READ_END,
+} vcdplayer_read_status_t;
+
+
+/* ----------------------------------------------------------------------
+   Function Prototypes
+  -----------------------------------------------------------------------*/
 
 /*!
   Return true if playback control (PBC) is on
 */
-bool vcdplayer_pbc_is_on(const thread_vcd_data_t *p_this);
+bool vcdplayer_pbc_is_on(const vcdplayer_t *p_vcdplayer);
 
 /*!
   Play item assocated with the "default" selection.
 
   Return false if there was some problem.
 */
-bool vcdplayer_play_default( input_thread_t * p_input );
+bool vcdplayer_play_default( access_t * p_access );
 
 /*!
   Play item assocated with the "next" selection.
 
   Return false if there was some problem.
 */
-bool vcdplayer_play_next( input_thread_t * p_input );
+bool vcdplayer_play_next( access_t * p_access );
 
 /*!
   Play item assocated with the "prev" selection.
 
   Return false if there was some problem.
 */
-bool vcdplayer_play_prev( input_thread_t * p_input );
+bool vcdplayer_play_prev( access_t * p_access );
 
 /*!
   Play item assocated with the "return" selection.
 
   Return false if there was some problem.
 */
-bool
-vcdplayer_play_return( input_thread_t * p_input );
+bool vcdplayer_play_return( access_t * p_access );
+
+/*
+   Set's start origin and size for subsequent seeks.
+   input: p_vcd->i_lsn, p_vcd->play_item
+   changed: p_vcd->origin_lsn, p_vcd->end_lsn
+*/
+void vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track,
+                          const vcdinfo_itemid_t *p_itemid);
+
+void vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid);
 
-vcdplayer_read_status_t vcdplayer_pbc_nav ( input_thread_t * p_input );
-vcdplayer_read_status_t vcdplayer_non_pbc_nav ( input_thread_t * p_input );
+vcdplayer_read_status_t vcdplayer_read (access_t * p_access_t, uint8_t *p_buf);
 
 #endif /* _VCDPLAYER_H_ */
-/* 
+/*
  * Local variables:
  *  c-file-style: "gnu"
  *  tab-width: 8