diff options
Diffstat (limited to 'src/input/vcd/vcdplayer.c')
-rw-r--r-- | src/input/vcd/vcdplayer.c | 288 |
1 files changed, 144 insertions, 144 deletions
diff --git a/src/input/vcd/vcdplayer.c b/src/input/vcd/vcdplayer.c index 7f9189cba..5e36e125e 100644 --- a/src/input/vcd/vcdplayer.c +++ b/src/input/vcd/vcdplayer.c @@ -1,22 +1,22 @@ -/* +/* $Id: vcdplayer.c,v 1.20 2007/02/21 23:17:14 dgp85 Exp $ - + Copyright (C) 2002, 2003, 2004, 2005 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - + */ #ifdef HAVE_CONFIG_H @@ -64,15 +64,15 @@ static void _vcdplayer_set_origin(vcdplayer_t *p_vcdplayer); Return true if playback control (PBC) is on */ bool -vcdplayer_pbc_is_on(const vcdplayer_t *p_vcdplayer) +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(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) +_vcdplayer_get_item_size(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) { switch (itemid.type) { case VCDINFO_ITEM_TYPE_ENTRY: @@ -125,17 +125,17 @@ _vcdplayer_get_item_size(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) /*! Take a format string and expand escape sequences, that is sequences that - begin with %, with information from the current VCD. + begin with %, with information from the current VCD. The expanded string is returned. Here is a list of escape sequences: - %A : The album information + %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. + %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 publisher ID %p : The preparer ID %S : If we are in a segment (menu), the kind of segment %T : The track number @@ -174,7 +174,7 @@ vcdplayer_format_str(vcdplayer_t *p_vcdplayer, const char format_str[]) saw_control_prefix = !saw_control_prefix; break; case 'A': - add_format_str_info(vcdinfo_strip_trail(vcdinfo_get_album_id(p_vcdinfo), + add_format_str_info(vcdinfo_strip_trail(vcdinfo_get_album_id(p_vcdinfo), MAX_ALBUM_LEN)); break; @@ -197,19 +197,19 @@ vcdplayer_format_str(vcdplayer_t *p_vcdplayer, const char format_str[]) strncat(tp, "Track", TEMP_STR_LEN-(tp-temp_str)); tp += strlen("Track"); break; - case VCDINFO_ITEM_TYPE_ENTRY: + case VCDINFO_ITEM_TYPE_ENTRY: strncat(tp, "Entry", TEMP_STR_LEN-(tp-temp_str)); tp += strlen("Entry"); break; - case VCDINFO_ITEM_TYPE_SEGMENT: + case VCDINFO_ITEM_TYPE_SEGMENT: strncat(tp, "Segment", TEMP_STR_LEN-(tp-temp_str)); tp += strlen("Segment"); break; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: strncat(tp, "List ID", TEMP_STR_LEN-(tp-temp_str)); tp += strlen("List ID"); break; - case VCDINFO_ITEM_TYPE_SPAREID2: + case VCDINFO_ITEM_TYPE_SPAREID2: strncat(tp, "Navigation", TEMP_STR_LEN-(tp-temp_str)); tp += strlen("Navigation"); break; @@ -247,7 +247,7 @@ vcdplayer_format_str(vcdplayer_t *p_vcdplayer, const char format_str[]) if ( VCDINFO_ITEM_TYPE_SEGMENT==p_vcdplayer->play_item.type ) { char seg_type_str[30]; - snprintf(seg_type_str, sizeof(seg_type_str), " %s", + snprintf(seg_type_str, sizeof(seg_type_str), " %s", vcdinfo_video_type2str(p_vcdinfo, p_vcdplayer->play_item.num)); strncat(tp, seg_type_str, TEMP_STR_LEN-(tp-temp_str)); tp += strlen(seg_type_str); @@ -268,7 +268,7 @@ vcdplayer_format_str(vcdplayer_t *p_vcdplayer, const char format_str[]) break; default: - *tp++ = '%'; + *tp++ = '%'; *tp++ = format_str[i]; saw_control_prefix = false; } @@ -277,7 +277,7 @@ vcdplayer_format_str(vcdplayer_t *p_vcdplayer, const char format_str[]) } static void -_vcdplayer_update_entry(vcdinfo_obj_t *p_vcdinfo, uint16_t ofs, +_vcdplayer_update_entry(vcdinfo_obj_t *p_vcdinfo, uint16_t ofs, uint16_t *entry, const char *label) { if ( ofs == VCDINFO_INVALID_OFFSET ) { @@ -293,8 +293,8 @@ _vcdplayer_update_entry(vcdinfo_obj_t *p_vcdinfo, uint16_t ofs, } /*! - Update next/prev/return/default navigation buttons - (via p_vcdplayer->i_lid). Update size of play-item + Update next/prev/return/default navigation buttons + (via p_vcdplayer->i_lid). Update size of play-item (via p_vcdplayer->play_item). */ void @@ -307,51 +307,51 @@ vcdplayer_update_nav(vcdplayer_t *p_vcdplayer) int max_entry = 0; 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; - _vcdplayer_update_entry(p_vcdinfo, + _vcdplayer_update_entry(p_vcdinfo, vcdinf_psd_get_prev_offset(p_vcdplayer->pxd.psd), &(p_vcdplayer->prev_entry), "prev"); - - _vcdplayer_update_entry(p_vcdinfo, + + _vcdplayer_update_entry(p_vcdinfo, vcdinf_psd_get_next_offset(p_vcdplayer->pxd.psd), &(p_vcdplayer->next_entry), "next"); - - _vcdplayer_update_entry(p_vcdinfo, + + _vcdplayer_update_entry(p_vcdinfo, vcdinf_psd_get_return_offset(p_vcdplayer->pxd.psd), &(p_vcdplayer->return_entry), "return"); - _vcdplayer_update_entry(p_vcdinfo, - vcdinfo_get_default_offset(p_vcdinfo, + _vcdplayer_update_entry(p_vcdinfo, + vcdinfo_get_default_offset(p_vcdinfo, p_vcdplayer->i_lid), &(p_vcdplayer->default_entry), "default"); break; case PSD_TYPE_PLAY_LIST: if (p_vcdplayer->pxd.pld == NULL) return; - _vcdplayer_update_entry(p_vcdinfo, + _vcdplayer_update_entry(p_vcdinfo, vcdinf_pld_get_prev_offset(p_vcdplayer->pxd.pld), &(p_vcdplayer->prev_entry), "prev"); - - _vcdplayer_update_entry(p_vcdinfo, + + _vcdplayer_update_entry(p_vcdinfo, vcdinf_pld_get_next_offset(p_vcdplayer->pxd.pld), &(p_vcdplayer->next_entry), "next"); - - _vcdplayer_update_entry(p_vcdinfo, + + _vcdplayer_update_entry(p_vcdinfo, vcdinf_pld_get_return_offset(p_vcdplayer->pxd.pld), &(p_vcdplayer->return_entry), "return"); p_vcdplayer->default_entry = VCDINFO_INVALID_ENTRY; break; case PSD_TYPE_END_LIST: - p_vcdplayer->origin_lsn = p_vcdplayer->i_lsn = p_vcdplayer->end_lsn + p_vcdplayer->origin_lsn = p_vcdplayer->i_lsn = p_vcdplayer->end_lsn = VCDINFO_NULL_LSN; /* Fall through */ case PSD_TYPE_COMMAND_LIST: - p_vcdplayer->next_entry = p_vcdplayer->prev_entry + p_vcdplayer->next_entry = p_vcdplayer->prev_entry = p_vcdplayer->return_entry = VCDINFO_INVALID_ENTRY; p_vcdplayer->default_entry = VCDINFO_INVALID_ENTRY; break; @@ -363,53 +363,53 @@ vcdplayer_update_nav(vcdplayer_t *p_vcdplayer) } /* PBC is not on. Set up for simplified next, prev, and return. */ - + 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: + case VCDINFO_ITEM_TYPE_ENTRY: max_entry = p_vcdplayer->i_entries; min_entry = 0; /* Can remove when Entries start at 1. */ p_vcdplayer->i_track = vcdinfo_get_track(p_vcdinfo, play_item); - p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, + p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, p_vcdplayer->i_track); break; - case VCDINFO_ITEM_TYPE_SEGMENT: + case VCDINFO_ITEM_TYPE_SEGMENT: max_entry = p_vcdplayer->i_segments; p_vcdplayer->i_track = VCDINFO_INVALID_TRACK; - + break; - case VCDINFO_ITEM_TYPE_TRACK: + case VCDINFO_ITEM_TYPE_TRACK: max_entry = p_vcdplayer->i_tracks; p_vcdplayer->i_track = p_vcdplayer->play_item.num; - p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, + p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, p_vcdplayer->i_track); break; default: ; /* Handle exceptional cases below */ } - + _vcdplayer_set_origin(p_vcdplayer); /* Set next, prev, return and default to simple and hopefully useful values. */ - if (play_item+1 >= max_entry) + if (play_item+1 >= max_entry) p_vcdplayer->next_entry = VCDINFO_INVALID_ENTRY; - else + else p_vcdplayer->next_entry = play_item+1; - - if (play_item-1 >= min_entry) + + if (play_item-1 >= min_entry) p_vcdplayer->prev_entry = play_item-1; - else + else p_vcdplayer->prev_entry = VCDINFO_INVALID_ENTRY; - + p_vcdplayer->default_entry = play_item; p_vcdplayer->return_entry = min_entry; break; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: { /* Should have handled above. */ break; @@ -423,9 +423,9 @@ vcdplayer_update_nav(vcdplayer_t *p_vcdplayer) Set reading to play an entire track. */ static void -_vcdplayer_set_track(vcdplayer_t *p_vcdplayer, unsigned int i_track) +_vcdplayer_set_track(vcdplayer_t *p_vcdplayer, unsigned int i_track) { - if (i_track < 1 || i_track > p_vcdplayer->i_tracks) + if (i_track < 1 || i_track > p_vcdplayer->i_tracks) return; else { vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; @@ -449,7 +449,7 @@ _vcdplayer_set_track(vcdplayer_t *p_vcdplayer, unsigned int i_track) Set reading to play an entry */ static void -_vcdplayer_set_entry(vcdplayer_t *p_vcdplayer, unsigned int num) +_vcdplayer_set_entry(vcdplayer_t *p_vcdplayer, unsigned int num) { vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; const unsigned int i_entries = vcdinfo_get_num_entries(p_vcdinfo); @@ -466,14 +466,14 @@ _vcdplayer_set_entry(vcdplayer_t *p_vcdplayer, unsigned int num) p_vcdplayer->i_lsn = vcdinfo_get_entry_lsn(p_vcdinfo, num); p_vcdplayer->play_item = itemid; p_vcdplayer->i_track = vcdinfo_get_track(p_vcdinfo, num); - p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, + p_vcdplayer->track_lsn = vcdinfo_get_track_lsn(p_vcdinfo, p_vcdplayer->i_track); - p_vcdplayer->track_end_lsn = p_vcdplayer->track_lsn + + p_vcdplayer->track_end_lsn = p_vcdplayer->track_lsn + p_vcdplayer->track[p_vcdplayer->i_track-1].size; _vcdplayer_set_origin(p_vcdplayer); - dbg_print((INPUT_DBG_LSN|INPUT_DBG_PBC), "LSN: %u, track_end LSN: %u\n", + dbg_print((INPUT_DBG_LSN|INPUT_DBG_PBC), "LSN: %u, track_end LSN: %u\n", p_vcdplayer->i_lsn, p_vcdplayer->track_end_lsn); } } @@ -482,7 +482,7 @@ _vcdplayer_set_entry(vcdplayer_t *p_vcdplayer, unsigned int num) Set reading to play an segment (e.g. still frame) */ static void -_vcdplayer_set_segment(vcdplayer_t *p_vcdplayer, unsigned int num) +_vcdplayer_set_segment(vcdplayer_t *p_vcdplayer, unsigned int num) { vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; segnum_t i_segs = vcdinfo_get_num_segments(p_vcdinfo); @@ -497,17 +497,17 @@ _vcdplayer_set_segment(vcdplayer_t *p_vcdplayer, unsigned int num) p_vcdplayer->i_track = 0; if (VCDINFO_NULL_LSN==p_vcdplayer->i_lsn) { - LOG_ERR(p_vcdplayer, "%s %d\n", + LOG_ERR(p_vcdplayer, "%s %d\n", _("Error in getting current segment number"), num); return; } - + itemid.num = num; itemid.type = VCDINFO_ITEM_TYPE_SEGMENT; p_vcdplayer->play_item = itemid; _vcdplayer_set_origin(p_vcdplayer); - + dbg_print(INPUT_DBG_LSN, "LSN: %u\n", p_vcdplayer->i_lsn); } } @@ -519,29 +519,29 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) { vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; - dbg_print(INPUT_DBG_CALL, "called itemid.num: %d, itemid.type: %d\n", + dbg_print(INPUT_DBG_CALL, "called itemid.num: %d, itemid.type: %d\n", itemid.num, itemid.type); 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\n", - vcdinfo_video_type2str(p_vcdinfo, itemid.num), + dbg_print(INPUT_DBG_PBC, "%s (%d), itemid.num: %d\n", + vcdinfo_video_type2str(p_vcdinfo, itemid.num), (int) segtype, itemid.num); if (itemid.num >= i_segs) return; _vcdplayer_set_segment(p_vcdplayer, itemid.num); vcdinfo_get_seg_resolution(p_vcdinfo, itemid.num, - &(p_vcdplayer->max_x), + &(p_vcdplayer->max_x), &(p_vcdplayer->max_y)); - + switch (segtype) { case VCDINFO_FILES_VIDEO_NTSC_STILL: case VCDINFO_FILES_VIDEO_NTSC_STILL2: @@ -558,7 +558,7 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) case VCD_TYPE_VCD: case VCD_TYPE_VCD11: case VCD_TYPE_VCD2: - /* aspect ratio for VCD's is known to be 4:3 for any + /* aspect ratio for VCD's is known to be 4:3 for any type of VCD's */ p_vcdplayer->set_aspect_ratio(1); break; @@ -566,17 +566,17 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) } p_vcdplayer->i_still = 0; } - + break; } - + case VCDINFO_ITEM_TYPE_TRACK: dbg_print(INPUT_DBG_PBC, "track %d\n", itemid.num); if (itemid.num < 1 || itemid.num > p_vcdplayer->i_tracks) return; _vcdplayer_set_track(p_vcdplayer, 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\n", itemid.num); @@ -584,7 +584,7 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) _vcdplayer_set_entry(p_vcdplayer, itemid.num); break; } - + case VCDINFO_ITEM_TYPE_LID: LOG_ERR(p_vcdplayer, "%s\n", _("Should have converted this above")); break; @@ -598,7 +598,7 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) LOG_ERR(p_vcdplayer, "item type %d not implemented.\n", itemid.type); return; } - + p_vcdplayer->play_item = itemid; vcdplayer_update_nav(p_vcdplayer); @@ -613,7 +613,7 @@ vcdplayer_play_single_item(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) /* 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 @@ -626,9 +626,9 @@ _vcdplayer_inc_play_item(vcdplayer_t *p_vcdplayer) 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++; @@ -636,12 +636,12 @@ _vcdplayer_inc_play_item(vcdplayer_t *p_vcdplayer) 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\n", p_vcdplayer->pdi, vcdinfo_pin2str (trans_itemid_num)); @@ -653,7 +653,7 @@ _vcdplayer_inc_play_item(vcdplayer_t *p_vcdplayer) void vcdplayer_play(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) { - dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d\n", + dbg_print(INPUT_DBG_CALL, "called itemid.num: %d itemid.type: %d\n", itemid.num, itemid.type); if (!vcdplayer_pbc_is_on(p_vcdplayer)) { @@ -667,9 +667,9 @@ vcdplayer_play(vcdplayer_t *p_vcdplayer, 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; @@ -683,29 +683,29 @@ vcdplayer_play(vcdplayer_t *p_vcdplayer, vcdinfo_itemid_t itemid) vcdplayer_play_single_item(p_vcdplayer, trans_itemid); break; } - + case PSD_TYPE_PLAY_LIST: { if (p_vcdplayer->pxd.pld == NULL) return; p_vcdplayer->pdi = -1; _vcdplayer_inc_play_item(p_vcdplayer); break; } - + case PSD_TYPE_END_LIST: case PSD_TYPE_COMMAND_LIST: - + default: ; } } } -/* - 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 */ -static void +static void _vcdplayer_set_origin(vcdplayer_t *p_vcdplayer) { size_t size = _vcdplayer_get_item_size(p_vcdplayer, p_vcdplayer->play_item); @@ -713,7 +713,7 @@ _vcdplayer_set_origin(vcdplayer_t *p_vcdplayer) p_vcdplayer->end_lsn = p_vcdplayer->i_lsn + size; p_vcdplayer->origin_lsn = p_vcdplayer->i_lsn; - dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN), "end LSN: %u\n", + dbg_print((INPUT_DBG_CALL|INPUT_DBG_LSN), "end LSN: %u\n", p_vcdplayer->end_lsn); } @@ -730,29 +730,29 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) /* 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->track_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\n", p_vcdplayer->play_item.num); vcdplayer_play_single_item(p_vcdplayer, 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; break; case PSD_TYPE_PLAY_LIST: { int wait_time = vcdinf_get_wait_time(p_vcdplayer->pxd.pld); - + dbg_print(INPUT_DBG_PBC, "playlist wait_time: %d\n", wait_time); - + if (_vcdplayer_inc_play_item(p_vcdplayer)) return READ_BLOCK; @@ -773,18 +773,18 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) int wait_time = vcdinf_get_timeout_time(p_vcdplayer->pxd.psd); 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, "wait_time: %d, looped: %d, max_loop %d\n", + + dbg_print(INPUT_DBG_PBC, "wait_time: %d, looped: %d, max_loop %d\n", wait_time, p_vcdplayer->i_loop, max_loop); - + /* Set caller to handle wait time given. */ if (STILL_READING == p_vcdplayer->i_still && wait_time > 0) { p_vcdplayer->i_still = wait_time; return READ_STILL_FRAME; } - + /* Handle any looping given. */ if ( max_loop == 0 || p_vcdplayer->i_loop < max_loop ) { p_vcdplayer->i_loop++; @@ -793,10 +793,10 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) 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; @@ -811,12 +811,12 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) 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, + 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\n", + dbg_print(INPUT_DBG_PBC, "random selection %d, lid: %d\n", rand_selection - bsn, rand_lid); vcdplayer_play(p_vcdplayer, itemid); return READ_BLOCK; @@ -825,19 +825,19 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) RETURN_NULL_STILL ; } } - + break; } - case VCDINFO_ITEM_TYPE_NOTFOUND: + case VCDINFO_ITEM_TYPE_NOTFOUND: LOG_ERR(p_vcdplayer, "NOTFOUND in PBC -- not supposed to happen\n"); break; - case VCDINFO_ITEM_TYPE_SPAREID2: + case VCDINFO_ITEM_TYPE_SPAREID2: LOG_ERR(p_vcdplayer, "SPAREID2 in PBC -- not supposed to happen\n"); break; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: LOG_ERR(p_vcdplayer, "LID in PBC -- not supposed to happen\n"); break; - + default: ; } @@ -848,8 +848,8 @@ vcdplayer_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) return READ_BLOCK; } -/* Handles navigation when NOT in PBC reaching the end of a play item. - The navigations rules here we are sort of made up, but the intent +/* Handles navigation when NOT in PBC reaching the end of a play item. + The navigations rules here we are sort of made up, but the intent is to do something that's probably right or helpful. */ static vcdplayer_read_status_t @@ -859,22 +859,22 @@ vcdplayer_non_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) switch (p_vcdplayer->play_item.type) { case VCDINFO_ITEM_TYPE_TRACK: case VCDINFO_ITEM_TYPE_ENTRY: - if (p_vcdplayer->autoadvance + if (p_vcdplayer->autoadvance && p_vcdplayer->next_entry != VCDINFO_INVALID_ENTRY) { p_vcdplayer->play_item.num=p_vcdplayer->next_entry; vcdplayer_update_nav(p_vcdplayer); - } else + } else return READ_END; break; - case VCDINFO_ITEM_TYPE_SPAREID2: + case VCDINFO_ITEM_TYPE_SPAREID2: RETURN_NULL_STILL ; - case VCDINFO_ITEM_TYPE_NOTFOUND: + case VCDINFO_ITEM_TYPE_NOTFOUND: LOG_ERR(p_vcdplayer, "NOTFOUND outside PBC -- not supposed to happen\n"); return READ_END; break; - case VCDINFO_ITEM_TYPE_LID: + case VCDINFO_ITEM_TYPE_LID: LOG_ERR(p_vcdplayer, "LID outside PBC -- not supposed to happen\n"); return READ_END; break; @@ -890,26 +890,26 @@ vcdplayer_non_pbc_nav (vcdplayer_t *p_vcdplayer, uint8_t *p_buf) /*! Read i_len bytes into 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 -vcdplayer_read (vcdplayer_t *p_vcdplayer, uint8_t *p_buf, - const off_t i_len) +vcdplayer_read (vcdplayer_t *p_vcdplayer, uint8_t *p_buf, + const off_t i_len) { 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), - "end reached, cur: %u, end: %u\n", + 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_vcdplayer, p_buf) + read_status = vcdplayer_pbc_is_on(p_vcdplayer) + ? vcdplayer_pbc_nav(p_vcdplayer, p_buf) : vcdplayer_non_pbc_nav(p_vcdplayer, p_buf); if (READ_STILL_FRAME == read_status) { @@ -919,11 +919,11 @@ vcdplayer_read (vcdplayer_t *p_vcdplayer, 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. */ @@ -938,7 +938,7 @@ vcdplayer_read (vcdplayer_t *p_vcdplayer, uint8_t *p_buf, vcdsector_t vcd_sector; do { - if (cdio_read_mode2_sector(p_img, &vcd_sector, + 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++; @@ -948,36 +948,36 @@ vcdplayer_read (vcdplayer_t *p_vcdplayer, uint8_t *p_buf, 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; } } /* Do if needed */ -void +void vcdplayer_send_button_update(vcdplayer_t *p_vcdplayer, const int mode) { /* dbg_print(INPUT_DBG_CALL, "Called\n"); */ return; } -/* +/* * Local variables: * c-file-style: "gnu" * tab-width: 8 |