X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fvcdx%2Fvcdplayer.c;h=21ca35dfcb8ffd0916be826211ebeffc2a771d85;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=0ee65db145fd470ecd0450c22b5123de0d93ae55;hpb=3305b049e7f587b23359a1c9047fb5763d19c1dc;p=vlc diff --git a/modules/access/vcdx/vcdplayer.c b/modules/access/vcdx/vcdplayer.c index 0ee65db145..21ca35dfcb 100644 --- a/modules/access/vcdx/vcdplayer.c +++ b/modules/access/vcdx/vcdplayer.c @@ -43,21 +43,21 @@ #include extern void VCDSetOrigin ( access_t *p_access, lsn_t i_lsn, track_t i_track, - const vcdinfo_itemid_t * p_itemid ); + const vcdinfo_itemid_t * p_itemid ); /*! Return true if playback control (PBC) is on */ -bool -vcdplayer_pbc_is_on( const vcdplayer_t *p_vcdplayer ) +bool +vcdplayer_pbc_is_on( const vcdplayer_t *p_vcdplayer ) { - return VCDINFO_INVALID_ENTRY != p_vcdplayer->i_lid; + return VCDINFO_INVALID_ENTRY != p_vcdplayer->i_lid; } /* Given an itemid, return the size for the object (via information previously stored when opening the vcd). */ static size_t -vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid) +vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; @@ -83,8 +83,8 @@ vcdplayer_get_item_size(access_t * p_access, vcdinfo_itemid_t itemid) } } -static void -vcdplayer_update_entry( access_t * p_access, uint16_t ofs, +static void +vcdplayer_update_entry( access_t * p_access, uint16_t ofs, uint16_t *entry, const char *label) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; @@ -101,14 +101,14 @@ vcdplayer_update_entry( access_t * p_access, uint16_t ofs, } } -/* Handles navigation when NOT in PBC reaching the end of a play item. +/* Handles navigation when NOT in PBC reaching the end of a play item. - The navigations rules here may be sort of made up, but the intent + The navigations rules here may be sort of made up, but the intent is to do something that's probably right or helpful. return true if the caller should return. */ -vcdplayer_read_status_t +vcdplayer_read_status_t vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; @@ -119,33 +119,33 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) case VCDINFO_ITEM_TYPE_ENTRY: { if ( ! vcdplayer_play_next( p_access ) ) { - return READ_END; + return READ_END; } break; } - case VCDINFO_ITEM_TYPE_SPAREID2: - dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), + case VCDINFO_ITEM_TYPE_SPAREID2: + dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), "SPAREID2" ); if (p_vcdplayer->in_still) { - dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), + dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), "End of still spareid2" ); *wait_time = 255; return READ_STILL_FRAME ; } return READ_END; - case VCDINFO_ITEM_TYPE_NOTFOUND: + case VCDINFO_ITEM_TYPE_NOTFOUND: LOG_ERR ("NOTFOUND outside PBC -- not supposed to happen"); return READ_ERROR; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: LOG_ERR ("LID outside PBC -- not supposed to happen"); return READ_ERROR; case VCDINFO_ITEM_TYPE_SEGMENT: /* Hack: Just go back and do still again */ /* FIXME */ - if (p_vcdplayer->in_still) + if (p_vcdplayer->in_still) { - dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), + dbg_print( (INPUT_DBG_STILL|INPUT_DBG_LSN), "End of still Segment" ); *wait_time = 10; return READ_STILL_FRAME; @@ -159,10 +159,10 @@ vcdplayer_non_pbc_nav ( access_t *p_access, uint8_t *wait_time ) Set reading to play an entire track. */ static void -_vcdplayer_set_track(access_t * p_access, track_t i_track) +_vcdplayer_set_track(access_t * p_access, track_t i_track) { vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys; - if (i_track < 1 || i_track > p_vcdplayer->i_tracks) + if (i_track < 1 || i_track > p_vcdplayer->i_tracks) return; else { const vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; @@ -172,8 +172,8 @@ _vcdplayer_set_track(access_t * p_access, track_t i_track) itemid.type = VCDINFO_ITEM_TYPE_TRACK; p_vcdplayer->in_still = 0; - VCDSetOrigin(p_access, vcdinfo_get_track_lsn(p_vcdinfo, i_track), - i_track, &itemid); + VCDSetOrigin(p_access, vcdinfo_get_track_lsn(p_vcdinfo, i_track), + i_track, &itemid); dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcdplayer->i_lsn); } @@ -183,7 +183,7 @@ _vcdplayer_set_track(access_t * p_access, track_t i_track) Set reading to play an entry */ static void -_vcdplayer_set_entry(access_t * p_access, unsigned int num) +_vcdplayer_set_entry(access_t * p_access, unsigned int num) { vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; @@ -200,9 +200,9 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num) p_vcdplayer->i_still = 0; VCDSetOrigin(p_access, vcdinfo_get_entry_lsn(p_vcdinfo, num), - vcdinfo_get_track(p_vcdinfo, num), &itemid); + vcdinfo_get_track(p_vcdinfo, num), &itemid); - dbg_print(INPUT_DBG_LSN, "LSN: %u, track_end LSN: %u", + dbg_print(INPUT_DBG_LSN, "LSN: %u, track_end LSN: %u", p_vcdplayer->i_lsn, p_vcdplayer->track_end_lsn); } } @@ -211,7 +211,7 @@ _vcdplayer_set_entry(access_t * p_access, unsigned int num) Set reading to play an segment (e.g. still frame) */ static void -_vcdplayer_set_segment(access_t * p_access, unsigned int num) +_vcdplayer_set_segment(access_t * p_access, unsigned int num) { vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; @@ -224,16 +224,16 @@ _vcdplayer_set_segment(access_t * p_access, unsigned int num) vcdinfo_itemid_t itemid; if (VCDINFO_NULL_LSN==p_vcdplayer->i_lsn) { - LOG_ERR("%s %d", + LOG_ERR("%s %d", "Error in getting current segment number", num); return; } - + itemid.num = num; itemid.type = VCDINFO_ITEM_TYPE_SEGMENT; VCDSetOrigin(p_access, vcdinfo_get_seg_lsn(p_vcdinfo, num), 0, &itemid); - + dbg_print(INPUT_DBG_LSN, "LSN: %u", p_vcdplayer->i_lsn); } } @@ -252,19 +252,19 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) p_vcdplayer->i_still = 0; switch (itemid.type) { - case VCDINFO_ITEM_TYPE_SEGMENT: + case VCDINFO_ITEM_TYPE_SEGMENT: { - vcdinfo_video_segment_type_t segtype + vcdinfo_video_segment_type_t segtype = vcdinfo_get_video_type(p_vcdinfo, itemid.num); segnum_t i_segs = vcdinfo_get_num_segments(p_vcdinfo); - dbg_print(INPUT_DBG_PBC, "%s (%d), itemid.num: %d", - vcdinfo_video_type2str(p_vcdinfo, itemid.num), + dbg_print(INPUT_DBG_PBC, "%s (%d), itemid.num: %d", + vcdinfo_video_type2str(p_vcdinfo, itemid.num), (int) segtype, itemid.num); if (itemid.num >= i_segs) return false; _vcdplayer_set_segment(p_access, itemid.num); - + switch (segtype) { case VCDINFO_FILES_VIDEO_NTSC_STILL: @@ -276,17 +276,17 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) default: p_vcdplayer->i_still = 0; } - + break; } - + case VCDINFO_ITEM_TYPE_TRACK: dbg_print(INPUT_DBG_PBC, "track %d", itemid.num); if (itemid.num < 1 || itemid.num > p_vcdplayer->i_tracks) return false; _vcdplayer_set_track(p_access, itemid.num); break; - - case VCDINFO_ITEM_TYPE_ENTRY: + + case VCDINFO_ITEM_TYPE_ENTRY: { unsigned int i_entries = vcdinfo_get_num_entries(p_vcdinfo); dbg_print(INPUT_DBG_PBC, "entry %d", itemid.num); @@ -294,7 +294,7 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) _vcdplayer_set_entry(p_access, itemid.num); break; } - + case VCDINFO_ITEM_TYPE_LID: LOG_ERR("%s", "Should have converted p_vcdplayer above"); return false; @@ -309,7 +309,7 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) LOG_ERR("item type %d not implemented.", itemid.type); return false; } - + p_vcdplayer->play_item = itemid; /* Some players like xine, have a fifo queue of audio and video buffers @@ -319,20 +319,20 @@ vcdplayer_play_single_item( access_t * p_access, vcdinfo_itemid_t itemid) return true; } -/* - Set's start origin and size for subsequent seeks. +/* + Set's start origin and size for subsequent seeks. input: p_vcdplayer->i_lsn, p_vcdplayer->play_item changed: p_vcdplayer->origin_lsn, p_vcdplayer->end_lsn */ -void +void vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track, - const vcdinfo_itemid_t *p_itemid) + const vcdinfo_itemid_t *p_itemid) { 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 ) + if( VCDINFO_NULL_LSN == i_lsn ) { LOG_ERR("%s %d", "Invalid LSN for track", i_track); return; @@ -344,21 +344,21 @@ vcdplayer_set_origin(access_t *p_access, lsn_t i_lsn, track_t i_track, p_vcdplayer->end_lsn = p_vcdplayer->i_lsn + i_size; p_vcdplayer->origin_lsn = p_vcdplayer->i_lsn; 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 + + 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", - p_vcdplayer->i_lsn, p_vcdplayer->end_lsn, - p_vcdplayer->play_item.num, p_vcdplayer->play_item.type); + dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN), + "lsn %u, end LSN: %u item.num %d, item.type %d", + p_vcdplayer->i_lsn, p_vcdplayer->end_lsn, + p_vcdplayer->play_item.num, p_vcdplayer->play_item.type); } /*! 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 + 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. */ static bool @@ -373,9 +373,9 @@ vcdplayer_inc_play_item(access_t *p_access) if ( NULL == p_vcdplayer || NULL == p_vcdplayer->pxd.pld ) return false; noi = vcdinf_pld_get_noi(p_vcdplayer->pxd.pld); - + if ( noi <= 0 ) return false; - + /* Handle delays like autowait or wait here? */ p_vcdplayer->pdi++; @@ -383,12 +383,12 @@ vcdplayer_inc_play_item(access_t *p_access) if ( p_vcdplayer->pdi < 0 || p_vcdplayer->pdi >= noi ) return false; else { - uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcdplayer->pxd.pld, + uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcdplayer->pxd.pld, p_vcdplayer->pdi); vcdinfo_itemid_t trans_itemid; if (VCDINFO_INVALID_ITEMID == trans_itemid_num) return false; - + vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid); dbg_print(INPUT_DBG_PBC, " play-item[%d]: %s", p_vcdplayer->pdi, vcdinfo_pin2str (trans_itemid_num)); @@ -401,7 +401,7 @@ vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid) { vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys; - dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d", + dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d", itemid.num, itemid.type); if (!vcdplayer_pbc_is_on(p_vcdplayer)) { @@ -415,9 +415,9 @@ vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid) p_vcdplayer->i_lid = itemid.num; vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), itemid.num); - + switch (p_vcdplayer->pxd.descriptor_type) { - + case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST: { vcdinfo_itemid_t trans_itemid; @@ -431,17 +431,17 @@ vcdplayer_play(access_t *p_access, vcdinfo_itemid_t itemid) vcdplayer_play_single_item(p_access, trans_itemid); break; } - + case PSD_TYPE_PLAY_LIST: { if (p_vcdplayer->pxd.pld == NULL) return; p_vcdplayer->pdi = -1; vcdplayer_inc_play_item(p_access); break; } - + case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: - + default: ; } @@ -457,20 +457,20 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) /* We are in playback control. */ vcdinfo_itemid_t itemid; - /* The end of an entry is really the end of the associated + /* The end of an entry is really the end of the associated sequence (or track). */ - - if ( (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) && + + if ( (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) && (p_vcdplayer->i_lsn < p_vcdplayer->end_lsn) ) { /* Set up to just continue to the next entry */ p_vcdplayer->play_item.num++; - dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), + dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "continuing into next entry: %u", p_vcdplayer->play_item.num); vcdplayer_play_single_item( p_access, p_vcdplayer->play_item ); /* p_vcdplayer->update_title(); */ return READ_BLOCK; } - + switch (p_vcdplayer->pxd.descriptor_type) { case PSD_TYPE_END_LIST: return READ_END; @@ -482,13 +482,13 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) /* Set up for caller process wait time given. */ if (p_vcdplayer->i_still) { *wait_time = vcdinf_get_wait_time(p_vcdplayer->pxd.pld); - dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), - "playlist wait time: %d", *wait_time); + dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), + "playlist wait time: %d", *wait_time); return READ_STILL_FRAME; } /* Wait time has been processed; continue with next entry. */ - vcdplayer_update_entry( p_access, + vcdplayer_update_entry( p_access, vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld), &itemid.num, "next" ); itemid.type = VCDINFO_ITEM_TYPE_LID; @@ -500,20 +500,20 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) { uint16_t timeout_offs = vcdinf_get_timeout_offset(p_vcdplayer->pxd.psd); uint16_t max_loop = vcdinf_get_loop_count(p_vcdplayer->pxd.psd); - vcdinfo_offset_t *offset_timeout_LID = + vcdinfo_offset_t *offset_timeout_LID = vcdinfo_get_offset_t(p_vcdplayer->vcd, timeout_offs); - - dbg_print(INPUT_DBG_PBC, "looped: %d, max_loop %d", + + dbg_print(INPUT_DBG_PBC, "looped: %d, max_loop %d", p_vcdplayer->i_loop, max_loop); - + /* Set up for caller process wait time given. */ if (p_vcdplayer->i_still) { - *wait_time = vcdinf_get_timeout_time(p_vcdplayer->pxd.psd); - dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), - "playlist wait_time: %d", *wait_time); - return READ_STILL_FRAME; - } - + *wait_time = vcdinf_get_timeout_time(p_vcdplayer->pxd.psd); + dbg_print((INPUT_DBG_PBC|INPUT_DBG_STILL), + "playlist wait_time: %d", *wait_time); + return READ_STILL_FRAME; + } + /* Wait time has been processed; continue with next entry. */ /* Handle any looping given. */ if ( max_loop == 0 || p_vcdplayer->i_loop < max_loop ) { @@ -523,10 +523,10 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) /* if (p_vcdplayer->i_still) p_vcdplayer->force_redisplay();*/ return READ_BLOCK; } - + /* Looping finished and wait finished. Move to timeout entry or next entry, or handle still. */ - + if (NULL != offset_timeout_LID) { /* Handle timeout_LID */ itemid.num = offset_timeout_LID->lid; @@ -541,12 +541,12 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) unsigned int bsn=vcdinf_get_bsn(p_vcdplayer->pxd.psd); int rand_selection=bsn + (int) ((i_selections+0.0)*rand()/(RAND_MAX+1.0)); - lid_t rand_lid=vcdinfo_selection_get_lid (p_vcdplayer->vcd, - p_vcdplayer->i_lid, - rand_selection); + lid_t rand_lid=vcdinfo_selection_get_lid (p_vcdplayer->vcd, + p_vcdplayer->i_lid, + rand_selection); itemid.num = rand_lid; itemid.type = VCDINFO_ITEM_TYPE_LID; - dbg_print(INPUT_DBG_PBC, "random selection %d, lid: %d", + dbg_print(INPUT_DBG_PBC, "random selection %d, lid: %d", rand_selection - bsn, rand_lid); vcdplayer_play( p_access, itemid ); return READ_BLOCK; @@ -558,16 +558,16 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) } break; } - case VCDINFO_ITEM_TYPE_NOTFOUND: + case VCDINFO_ITEM_TYPE_NOTFOUND: LOG_ERR( "NOTFOUND in PBC -- not supposed to happen" ); break; - case VCDINFO_ITEM_TYPE_SPAREID2: + case VCDINFO_ITEM_TYPE_SPAREID2: LOG_ERR( "SPAREID2 in PBC -- not supposed to happen" ); break; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: LOG_ERR( "LID in PBC -- not supposed to happen" ); break; - + default: ; } @@ -579,8 +579,8 @@ vcdplayer_pbc_nav ( access_t * p_access, uint8_t *wait_time ) /*! Read block into p_buf and return the status back. - This routine is a bit complicated because on reaching the end of - a track or entry we may automatically advance to the item, or + This routine is a bit complicated because on reaching the end of + a track or entry we may automatically advance to the item, or interpret the next item in the playback-control list. */ vcdplayer_read_status_t @@ -593,14 +593,14 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; if ( p_vcdplayer->i_lsn > p_vcdplayer->end_lsn ) { vcdplayer_read_status_t read_status; - + /* We've run off of the end of this entry. Do we continue or stop? */ - dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), + dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), "end reached, cur: %u, end: %u\n", p_vcdplayer->i_lsn, p_vcdplayer->end_lsn); handle_item_continuation: - read_status = vcdplayer_pbc_is_on( p_vcdplayer ) - ? vcdplayer_pbc_nav( p_access, &wait_time ) + read_status = vcdplayer_pbc_is_on( p_vcdplayer ) + ? vcdplayer_pbc_nav( p_access, &wait_time ) : vcdplayer_non_pbc_nav( p_access, &wait_time ); if (READ_STILL_FRAME == read_status) { @@ -611,11 +611,11 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) if (READ_BLOCK != read_status) return read_status; } - /* Read the next block. - + /* Read the next block. + Important note: we probably speed things up by removing "data" and the memcpy to it by extending vcd_image_source_read_mode2 - to allow a mode to do what's below in addition to its + to allow a mode to do what's below in addition to its "raw" and "block" mode. It also would probably improve the modularity a little bit as well. */ @@ -624,38 +624,38 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) CdIo *p_img = vcdinfo_get_cd_image(p_vcdplayer->vcd); typedef struct { uint8_t subheader [CDIO_CD_SUBHEADER_SIZE]; - uint8_t data [M2F2_SECTOR_SIZE]; + uint8_t data [M2F2_SECTOR_SIZE]; uint8_t spare [4]; } vcdsector_t; vcdsector_t vcd_sector; do { - if (cdio_read_mode2_sector(p_img, &vcd_sector, - p_vcdplayer->i_lsn, true)!=0) { + if (cdio_read_mode2_sector(p_img, &vcd_sector, + p_vcdplayer->i_lsn, true)!=0) { dbg_print(INPUT_DBG_LSN, "read error\n"); - p_vcdplayer->i_lsn++; + p_vcdplayer->i_lsn++; return READ_ERROR; } p_vcdplayer->i_lsn++; if ( p_vcdplayer->i_lsn >= p_vcdplayer->end_lsn ) { /* We've run off of the end of this entry. Do we continue or stop? */ - dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), - "end reached in reading, cur: %u, end: %u\n", + dbg_print( (INPUT_DBG_LSN|INPUT_DBG_PBC), + "end reached in reading, cur: %u, end: %u\n", p_vcdplayer->i_lsn, p_vcdplayer->end_lsn); break; } - + /* Check header ID for a padding sector and simply discard these. It is alleged that VCD's put these in to keep the bitrate constant. */ } while((vcd_sector.subheader[2]&~0x01)==0x60); - if ( p_vcdplayer->i_lsn >= p_vcdplayer->end_lsn ) + if ( p_vcdplayer->i_lsn >= p_vcdplayer->end_lsn ) /* We've run off of the end of this entry. Do we continue or stop? */ goto handle_item_continuation; - + memcpy (p_buf, vcd_sector.data, M2F2_SECTOR_SIZE); return READ_BLOCK; } @@ -666,7 +666,7 @@ vcdplayer_read (access_t * p_access, uint8_t *p_buf) Return false if there was some problem. */ -bool +bool vcdplayer_play_default( access_t * p_access ) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; @@ -674,14 +674,14 @@ vcdplayer_play_default( access_t * p_access ) vcdinfo_itemid_t itemid; if (!p_vcdplayer) { - dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), - "null p_vcdplayer" ); + dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), + "null p_vcdplayer" ); return VLC_EGENERIC; } - + - dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), - "current: %d" , p_vcdplayer->play_item.num); + dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), + "current: %d" , p_vcdplayer->play_item.num); itemid.type = p_vcdplayer->play_item.type; @@ -689,7 +689,7 @@ vcdplayer_play_default( access_t * p_access ) #if defined(LIBVCD_VERSION) lid_t lid=vcdinfo_get_multi_default_lid(p_vcdplayer->vcd, p_vcdplayer->i_lid, - p_vcdplayer->i_lsn); + p_vcdplayer->i_lsn); if (VCDINFO_INVALID_LID != lid) { itemid.num = lid; @@ -700,35 +700,35 @@ vcdplayer_play_default( access_t * p_access ) return VLC_EGENERIC; } -#else +#else vcdinfo_lid_get_pxd(p_vcdplayer->vcd, &(p_vcdplayer->pxd), p_vcdplayer->i_lid); - + switch (p_vcdplayer->pxd.descriptor_type) { case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST: if (p_vcdplayer->pxd.psd == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinfo_get_default_offset(p_vcdplayer->vcd, - p_vcdplayer->i_lid), - &itemid.num, "default"); + vcdplayer_update_entry( p_access, + vcdinfo_get_default_offset(p_vcdplayer->vcd, + p_vcdplayer->i_lid), + &itemid.num, "default"); break; - case PSD_TYPE_PLAY_LIST: + case PSD_TYPE_PLAY_LIST: case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: LOG_WARN( "There is no PBC 'default' selection here" ); return false; } #endif /* LIBVCD_VERSION (< 0.7.21) */ - + } else { - /* PBC is not on. "default" selection beginning of current + /* PBC is not on. "default" selection beginning of current selection . */ - + itemid.num = p_vcdplayer->play_item.num; - + } /** ??? p_vcdplayer->update_title(); ***/ @@ -742,7 +742,7 @@ vcdplayer_play_default( access_t * p_access ) Return false if there was some problem. */ -bool +bool vcdplayer_play_next( access_t * p_access ) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; @@ -752,8 +752,8 @@ vcdplayer_play_next( access_t * p_access ) if (!p_vcdplayer) return false; - dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), - "current: %d" , p_vcdplayer->play_item.num); + dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), + "current: %d" , p_vcdplayer->play_item.num); p_vcdinfo = p_vcdplayer->vcd; @@ -762,25 +762,25 @@ vcdplayer_play_next( access_t * p_access ) if (vcdplayer_pbc_is_on(p_vcdplayer)) { vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid); - + switch (p_vcdplayer->pxd.descriptor_type) { case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST: if (p_vcdplayer->pxd.psd == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_psd_get_next_offset(p_vcdplayer->pxd.psd), - &itemid.num, "next"); + vcdplayer_update_entry( p_access, + vcdinf_psd_get_next_offset(p_vcdplayer->pxd.psd), + &itemid.num, "next"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - case PSD_TYPE_PLAY_LIST: + case PSD_TYPE_PLAY_LIST: if (p_vcdplayer->pxd.pld == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld), - &itemid.num, "next"); + vcdplayer_update_entry( p_access, + vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld), + &itemid.num, "next"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - + case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: LOG_WARN( "There is no PBC 'next' selection here" ); @@ -789,43 +789,43 @@ vcdplayer_play_next( access_t * p_access ) } else { /* PBC is not on. "Next" selection is play_item.num+1 if possible. */ - + int max_entry = 0; switch (p_vcdplayer->play_item.type) { - case VCDINFO_ITEM_TYPE_ENTRY: - case VCDINFO_ITEM_TYPE_SEGMENT: - case VCDINFO_ITEM_TYPE_TRACK: - + case VCDINFO_ITEM_TYPE_ENTRY: + case VCDINFO_ITEM_TYPE_SEGMENT: + case VCDINFO_ITEM_TYPE_TRACK: + switch (p_vcdplayer->play_item.type) { - case VCDINFO_ITEM_TYPE_ENTRY: - max_entry = p_vcdplayer->i_entries; - break; - case VCDINFO_ITEM_TYPE_SEGMENT: - max_entry = p_vcdplayer->i_segments; - break; - case VCDINFO_ITEM_TYPE_TRACK: - max_entry = p_vcdplayer->i_tracks; - break; + case VCDINFO_ITEM_TYPE_ENTRY: + max_entry = p_vcdplayer->i_entries; + break; + case VCDINFO_ITEM_TYPE_SEGMENT: + max_entry = p_vcdplayer->i_segments; + break; + case VCDINFO_ITEM_TYPE_TRACK: + max_entry = p_vcdplayer->i_tracks; + break; default: ; /* Handle exceptional cases below */ } - + if (p_vcdplayer->play_item.num+1 < max_entry) { - itemid.num = p_vcdplayer->play_item.num+1; + itemid.num = p_vcdplayer->play_item.num+1; } else { - LOG_WARN( "At the end - non-PBC 'next' not possible here" ); - return false; + LOG_WARN( "At the end - non-PBC 'next' not possible here" ); + return false; } - + break; - - case VCDINFO_ITEM_TYPE_LID: + + case VCDINFO_ITEM_TYPE_LID: { - /* Should have handled above. */ - LOG_WARN( "Internal inconsistency - should not have gotten here." ); - return false; + /* Should have handled above. */ + LOG_WARN( "Internal inconsistency - should not have gotten here." ); + return false; } - default: + default: return false; } } @@ -841,40 +841,40 @@ vcdplayer_play_next( access_t * p_access ) Return false if there was some problem. */ -bool +bool vcdplayer_play_prev( access_t * p_access ) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; vcdinfo_itemid_t itemid; - dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), - "current: %d" , p_vcdplayer->play_item.num); + dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), + "current: %d" , p_vcdplayer->play_item.num); itemid = p_vcdplayer->play_item; if (vcdplayer_pbc_is_on(p_vcdplayer)) { vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid); - + switch (p_vcdplayer->pxd.descriptor_type) { case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST: if (p_vcdplayer->pxd.psd == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_psd_get_prev_offset(p_vcdplayer->pxd.psd), - &itemid.num, "prev"); + vcdplayer_update_entry( p_access, + vcdinf_psd_get_prev_offset(p_vcdplayer->pxd.psd), + &itemid.num, "prev"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - case PSD_TYPE_PLAY_LIST: + case PSD_TYPE_PLAY_LIST: if (p_vcdplayer->pxd.pld == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_pld_get_prev_offset(p_vcdplayer->pxd.pld), - &itemid.num, "prev"); + vcdplayer_update_entry( p_access, + vcdinf_pld_get_prev_offset(p_vcdplayer->pxd.pld), + &itemid.num, "prev"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - + case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: LOG_WARN( "There is no PBC 'prev' selection here" ); @@ -883,17 +883,17 @@ vcdplayer_play_prev( access_t * p_access ) } else { /* PBC is not on. "Prev" selection is play_item.num-1 if possible. */ - - int min_entry = (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) + + int min_entry = (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) ? 0 : 1; - + if (p_vcdplayer->play_item.num > min_entry) { itemid.num = p_vcdplayer->play_item.num-1; } else { LOG_WARN( "At the beginning - non-PBC 'prev' not possible here" ); return false; } - + } /** ??? p_vcdplayer->update_title(); ***/ @@ -907,40 +907,40 @@ vcdplayer_play_prev( access_t * p_access ) Return false if there was some problem. */ -bool +bool vcdplayer_play_return( access_t * p_access ) { vcdplayer_t *p_vcdplayer= (vcdplayer_t *)p_access->p_sys; vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; vcdinfo_itemid_t itemid; - dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), - "current: %d" , p_vcdplayer->play_item.num); + dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), + "current: %d" , p_vcdplayer->play_item.num); itemid = p_vcdplayer->play_item; if (vcdplayer_pbc_is_on(p_vcdplayer)) { vcdinfo_lid_get_pxd(p_vcdinfo, &(p_vcdplayer->pxd), p_vcdplayer->i_lid); - + switch (p_vcdplayer->pxd.descriptor_type) { case PSD_TYPE_SELECTION_LIST: case PSD_TYPE_EXT_SELECTION_LIST: if (p_vcdplayer->pxd.psd == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_psd_get_return_offset(p_vcdplayer->pxd.psd), - &itemid.num, "return"); + vcdplayer_update_entry( p_access, + vcdinf_psd_get_return_offset(p_vcdplayer->pxd.psd), + &itemid.num, "return"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - case PSD_TYPE_PLAY_LIST: + case PSD_TYPE_PLAY_LIST: if (p_vcdplayer->pxd.pld == NULL) return false; - vcdplayer_update_entry( p_access, - vcdinf_pld_get_return_offset(p_vcdplayer->pxd.pld), - &itemid.num, "return"); + vcdplayer_update_entry( p_access, + vcdinf_pld_get_return_offset(p_vcdplayer->pxd.pld), + &itemid.num, "return"); itemid.type = VCDINFO_ITEM_TYPE_LID; break; - + case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: LOG_WARN( "There is no PBC 'return' selection here" ); @@ -949,11 +949,11 @@ vcdplayer_play_return( access_t * p_access ) } else { /* PBC is not on. "Return" selection is min_entry if possible. */ - - p_vcdplayer->play_item.num = - (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) + + p_vcdplayer->play_item.num = + (VCDINFO_ITEM_TYPE_ENTRY == p_vcdplayer->play_item.type) ? 0 : 1; - + } /** ??? p_vcdplayer->update_title(); ***/ @@ -962,7 +962,7 @@ vcdplayer_play_return( access_t * p_access ) } -/* +/* * Local variables: * c-file-style: "gnu" * tab-width: 8