summaryrefslogtreecommitdiff
path: root/src/input/vcd/vcdplayer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/vcd/vcdplayer.h')
-rw-r--r--src/input/vcd/vcdplayer.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/src/input/vcd/vcdplayer.h b/src/input/vcd/vcdplayer.h
new file mode 100644
index 000000000..09bd84936
--- /dev/null
+++ b/src/input/vcd/vcdplayer.h
@@ -0,0 +1,297 @@
+/*
+ $Id: vcdplayer.h,v 1.1 2003/10/13 11:47:11 f1rmb Exp $
+
+ Copyright (C) 2002,2003 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
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ 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-1307, USA
+
+*/
+
+#ifndef _VCDPLAYER_H_
+#define _VCDPLAYER_H_
+
+#ifdef HAVE_VCDNAV
+#include <libvcd/info.h>
+#else
+#include "libvcd/info.h"
+#endif
+
+#ifdef ENABLE_NLS
+#include <locale.h>
+# include <libintl.h>
+# define _(String) dgettext ("libxine1", String)
+#else
+/* Stubs that do something close enough. */
+# define _(String) (String)
+#endif
+
+/*------------------------------------------------------------------
+ DEBUGGING
+---------------------------------------------------------------------*/
+
+/* Print *any* debug messages? */
+#define INPUT_DEBUG 1
+
+/* Debugging masks */
+
+#define INPUT_DBG_META 1 /* Meta information */
+#define INPUT_DBG_EVENT 2 /* input (keyboard/mouse) events */
+#define INPUT_DBG_MRL 4
+#define INPUT_DBG_EXT 8 /* Calls from external routines */
+#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_DBG_SEEK_SET 256 /* Seeks to set location */
+#define INPUT_DBG_SEEK_CUR 512 /* Seeks to find current location */
+#define INPUT_DBG_STILL 1024 /* Still-frame */
+#define INPUT_DBG_VCDINFO 2048 /* Debugging from VCDINFO */
+
+/* Current debugging setting use above masks to interpret meaning of value. */
+extern unsigned long int vcdplayer_debug;
+
+#if INPUT_DEBUG
+#define dbg_print(mask, s, args...) \
+ if (vcdplayer_debug & mask) \
+ fprintf(stderr, "%s: "s, __func__ , ##args)
+#else
+#define dbg_print(mask, s, args...)
+#endif
+
+/*------------------------------------------------------------------
+ General definitions and structures.
+---------------------------------------------------------------------*/
+
+#define VCDPLAYER_IN_STILL 65535
+
+/* Some configuration enumerations. */
+typedef enum {
+ VCDPLAYER_SLIDER_LENGTH_AUTO,
+ VCDPLAYER_SLIDER_LENGTH_TRACK,
+ VCDPLAYER_SLIDER_LENGTH_ENTRY,
+} vcdplayer_slider_length_t;
+
+typedef enum {
+ VCDPLAYER_AUTOPLAY_TRACK = VCDINFO_ITEM_TYPE_TRACK,
+ VCDPLAYER_AUTOPLAY_ENTRY = VCDINFO_ITEM_TYPE_ENTRY,
+ VCDPLAYER_AUTOPLAY_SEGMENT = VCDINFO_ITEM_TYPE_SEGMENT,
+ VCDPLAYER_AUTOPLAY_PBC = VCDINFO_ITEM_TYPE_LID,
+} vcdplayer_autoplay_t;
+
+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;
+
+typedef int (*generic_fn)();
+
+typedef struct vcdplayer_input_struct {
+ void *user_data; /* environment. Passed to called routines. */
+ int32_t buttonN;
+ vcdinfo_obj_t *vcd; /* Pointer to libvcd structures. */
+ int in_still; /* 0 if not in still,
+ -2 if in infinite loop
+ -5 if a still but haven't read wait time yet
+ >0 number of seconds yet to wait */
+
+ /*------------------------------------------------------------------
+ Callback functions - players and higher-level routines can use
+ this to customize their behavior when using this player-independent
+ code.
+ ---------------------------------------------------------------------*/
+
+ generic_fn log_msg; /* function to log a message in the player */
+ generic_fn log_err; /* function to log an error in the player */
+
+
+ /* Function to flush any audio or video buffers */
+ void (*flush_buffers) (void);
+
+ /* Function to flush sleep for a number of milliseconds. */
+ void (*sleep) (unsigned int usecs);
+
+ /* Function to flush sleep for a number of milliseconds. */
+ void (*force_redisplay) (void);
+
+ /* Function to handle player events. Returns true if play item changed. */
+ bool (*handle_events) (void);
+
+ /* Function to update title of selection. */
+ void (*update_title) ();
+
+ /*-------------------------------------------------------------
+ Playback control fields
+ --------------------------------------------------------------*/
+ int cur_lid; /* LID that play item is in. Implies PBC is.
+ on. VCDPLAYER_BAD_ENTRY if not none or
+ not in PBC */
+ PsdListDescriptor pxd; /* If PBC is on, the relevant PSD/PLD */
+ int pdi; /* current pld index of pxd. -1 if
+ no index*/
+
+ 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 selection list.
+ */
+ track_t cur_track; /* current track number. */
+
+ /*-----------------------------------
+ Navigation and location fields
+ ------------------------------------*/
+ uint16_t next_entry; /* where to go if next is pressed,
+ VCDPLAYER_BAD_ENTRY if none */
+ uint16_t prev_entry; /* where to fo if prev is pressed,
+ VCDPLAYER_BAD_ENTRY if none */
+ uint16_t return_entry; /* Entry index to use if return is pressed */
+ uint16_t default_entry; /* Default selection entry. */
+
+ lsn_t cur_lsn; /* LSN of where we are right now */
+ lsn_t end_lsn; /* LSN of end of current entry/segment/track. */
+ lsn_t origin_lsn; /* LSN of start of slider position. */
+ 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). */
+
+ /*--------------------------------------------------------------
+ Medium information
+ ---------------------------------------------------------------*/
+
+ char *current_vcd_device; /* VCD device currently open */
+ bool opened; /* true if initialized */
+
+ track_t num_tracks; /* Number of tracks in medium */
+ segnum_t num_segments; /* Number of segments in medium */
+ unsigned int num_entries; /* Number of entries in medium */
+ lid_t num_LIDs; /* Number of LIDs in medium */
+
+ /* Tracks, segment, and entry information. The number of entries for
+ each is given by the corresponding num_* field above. */
+ vcdplayer_play_item_info *track;
+ vcdplayer_play_item_info *segment;
+ vcdplayer_play_item_info *entry;
+
+ /*--------------------------------------------------------------
+ Configuration variables
+ ---------------------------------------------------------------*/
+
+ /* What type to use on autoplay */
+ vcdplayer_autoplay_t default_autoplay;
+
+ /* When hitting end of entry or track do we advance automatically
+ to next entry/track or stop? Only valid if PBC is off. */
+ bool autoadvance;
+
+ /* Do next/prev wrap around? Only valid if PBC is off. */
+ bool wrap_next_prev;
+
+ /* Show and be able to select rejected LIDs? */
+ bool show_rejected;
+
+ /* Whether GUI slider is track size or entry size. */
+ vcdplayer_slider_length_t slider_length;
+
+} vcdplayer_input_t;
+
+/* 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 vcdplayer_input_t *this);
+
+/*!
+ Take a format string and expand escape sequences, that is sequences that
+ begin with %, with information from the current VCD.
+ The expanded string is returned. Here is a list of escape sequences:
+
+ %A : The album information
+ %C : The VCD volume count - the number of CD's in the collection.
+ %c : The VCD volume num - the number of the CD in the collection.
+ %F : The VCD Format, e.g. VCD 1.0, VCD 1.1, VCD 2.0, or SVCD
+ %I : The current entry/segment/playback type, e.g. ENTRY, TRACK, SEGMENT...
+ %L : The playlist ID prefixed with " LID" if it exists
+ %N : The current number of the above - a decimal number
+ %P : The publisher ID
+ %p : The preparer ID
+ %V : The volume set ID
+ %v : The volume ID
+ A number between 1 and the volume count.
+ %% : a %
+*/
+char *
+vcdplayer_format_str(vcdplayer_input_t *this, const char format_str[]);
+
+/*!
+ Update next/prev/return/default navigation buttons.
+*/
+void
+vcdplayer_update_nav(vcdplayer_input_t *this);
+
+/*! Update the player title text. */
+void
+vcdplayer_update_title_display(vcdplayer_input_t *this);
+
+/*! Play title part. If part is -1, use the first title. */
+void
+vcdplayer_play(vcdplayer_input_t *this, vcdinfo_itemid_t itemid);
+
+bool
+vcdplayer_open(vcdplayer_input_t *this, char *intended_vcd_device);
+
+/*!
+ Read nlen bytes into buf and return the status back.
+*/
+vcdplayer_read_status_t
+vcdplayer_read (vcdplayer_input_t *this, uint8_t *buf, const off_t nlen);
+
+/*!
+ seek position, return new position
+
+ if seeking failed, -1 is returned
+*/
+off_t
+vcdplayer_seek (vcdplayer_input_t *this, off_t offset, int origin);
+
+/*!
+ Get the number of tracks or titles of the VCD. The result is stored
+ in "titles".
+ */
+void
+vcdplayer_send_button_update(vcdplayer_input_t *this, int mode);
+
+lid_t
+vcdplayer_selection2lid (vcdplayer_input_t *this, int entry_num);
+
+#endif /* _VCDPLAYER_H_ */
+/*
+ * Local variables:
+ * c-file-style: "gnu"
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ */