X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fvcdx%2Fvcdplayer.h;h=3e894f453c25550bbd00e081859518d4865d5089;hb=82f0bbdcc3a50c45c2b51d7263d3386a48ef9158;hp=d75d0f67d54364f8b42fec07a9430feb5b4fcf83;hpb=ba3b2639faa7bb59abbd3c29ef2c8663161a6094;p=vlc diff --git a/modules/access/vcdx/vcdplayer.h b/modules/access/vcdx/vcdplayer.h index d75d0f67d5..3e894f453c 100644 --- a/modules/access/vcdx/vcdplayer.h +++ b/modules/access/vcdx/vcdplayer.h @@ -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 + * Authors: Rocky Bernstein * * 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 @@ -16,21 +16,26 @@ * * 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 +#include +#include +#include #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 */ @@ -42,122 +47,183 @@ #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 */ -#if (defined LIBVCD_VERSION_NUM) && (LIBVCD_VERSION_NUM >= 21) - PsdListDescriptor_t pxd; /* If PBC is on, the relevant + PsdListDescriptor_t pxd; /* If PBC is on, the relevant PSD/PLD */ -#else - PsdListDescriptor pxd; /* If PBC is on, the relevant - PSD/PLD */ -#endif - int pdi; /* current pld index of pxd. -1 if + 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