/*! 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. */ static bool vcdplayer_inc_play_item(access_t *p_access) { vcdplayer_t *p_vcdplayer = (vcdplayer_t *)p_access->p_sys; int noi; dbg_print(INPUT_DBG_CALL, "called pli: %d", p_vcdplayer->pdi); 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++; if ( p_vcdplayer->pdi < 0 || p_vcdplayer->pdi >= noi ) return false; 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)); return vcdplayer_play_single_item(p_access, trans_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 "next" field of a LID which moves us to a different LID. */ vlc_bool_t vcdplayer_inc_play_item( input_thread_t *p_input ) { thread_vcd_data_t * p_vcd= (thread_vcd_data_t *)p_input->p_access_data; int noi; dbg_print(INPUT_DBG_CALL, "called pli: %d", p_vcd->pdi); if ( NULL == p_vcd || NULL == p_vcd->pxd.pld ) return VLC_FALSE; noi = vcdinf_pld_get_noi(p_vcd->pxd.pld); if ( noi <= 0 ) return VLC_FALSE; /* Handle delays like autowait or wait here? */ p_vcd->pdi++; if ( p_vcd->pdi < 0 || p_vcd->pdi >= noi ) return VLC_FALSE; else { uint16_t trans_itemid_num=vcdinf_pld_get_play_item(p_vcd->pxd.pld, p_vcd->pdi); vcdinfo_itemid_t trans_itemid; if (VCDINFO_INVALID_ITEMID == trans_itemid_num) return VLC_FALSE; vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid); dbg_print(INPUT_DBG_PBC, " play-item[%d]: %s", p_vcd->pdi, vcdinfo_pin2str (trans_itemid_num)); return VLC_SUCCESS == VCDPlay( p_input, trans_itemid ); } }
void 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", itemid.num, itemid.type); if (!vcdplayer_pbc_is_on(p_vcdplayer)) { vcdplayer_play_single_item(p_access, itemid); } else { /* PBC on - Itemid.num is LID. */ vcdinfo_obj_t *p_vcdinfo = p_vcdplayer->vcd; if (p_vcdinfo == NULL) return; 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; uint16_t trans_itemid_num; if (p_vcdplayer->pxd.psd == NULL) return; trans_itemid_num = vcdinf_psd_get_itemid(p_vcdplayer->pxd.psd); vcdinfo_classify_itemid(trans_itemid_num, &trans_itemid); p_vcdplayer->i_loop = 1; p_vcdplayer->loop_item = trans_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: ; } } }