vcdplayer.c

来自「VLC媒体播放程序」· C语言 代码 · 共 561 行 · 第 1/2 页

C
561
字号
                                                       p_vcd->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_vcd->pdi, vcdinfo_pin2str (trans_itemid_num));    return VLC_SUCCESS == VCDPlay( p_input, trans_itemid );  }}/*!  Play item assocated with the "default" selection.  Return false if there was some problem.*/boolvcdplayer_play_default( input_thread_t * p_input ){  thread_vcd_data_t *p_vcd= (thread_vcd_data_t *)p_input->p_access_data;  vcdinfo_itemid_t   itemid;  dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 	     "current: %d" , p_vcd->play_item.num);  itemid.type = p_vcd->play_item.type;  if  (vcdplayer_pbc_is_on(p_vcd)) {    lid_t lid=vcdinfo_get_multi_default_lid(p_vcd->vcd, p_vcd->cur_lid,					    itemid.num);    if (VCDINFO_INVALID_LID != lid) {      itemid.num  = lid;      itemid.type = VCDINFO_ITEM_TYPE_LID;      dbg_print(INPUT_DBG_PBC, "DEFAULT to %d\n", itemid.num);    } else {      dbg_print(INPUT_DBG_PBC, "no DEFAULT for LID %d\n", p_vcd->cur_lid);    }      } else {    /* PBC is not on. "default" selection beginning of current        selection . */      p_vcd->play_item.num = p_vcd->play_item.num;      }  /** ??? p_vcd->update_title(); ***/  return VLC_SUCCESS == VCDPlay( p_input, itemid );}/*!  Play item assocated with the "next" selection.  Return false if there was some problem.*/boolvcdplayer_play_next( input_thread_t * p_input ){  thread_vcd_data_t *p_vcd= (thread_vcd_data_t *)p_input->p_access_data;  vcdinfo_obj_t     *obj;  vcdinfo_itemid_t   itemid;  if (!p_vcd) return false;  dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 	     "current: %d" , p_vcd->play_item.num);  obj = p_vcd->vcd;  itemid.type = p_vcd->play_item.type;  if  (vcdplayer_pbc_is_on(p_vcd)) {    vcdinfo_lid_get_pxd(obj, &(p_vcd->pxd), p_vcd->cur_lid);        switch (p_vcd->pxd.descriptor_type) {    case PSD_TYPE_SELECTION_LIST:    case PSD_TYPE_EXT_SELECTION_LIST:      if (p_vcd->pxd.psd == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_psd_get_next_offset(p_vcd->pxd.psd), 			      &itemid.num, "next");      itemid.type = VCDINFO_ITEM_TYPE_LID;      break;    case PSD_TYPE_PLAY_LIST:       if (p_vcd->pxd.pld == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_pld_get_next_offset(p_vcd->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" );      return false;    }  } else {    /* PBC is not on. "Next" selection is play_item.num+1 if possible. */      int max_entry = 0;    switch (p_vcd->play_item.type) {    case VCDINFO_ITEM_TYPE_ENTRY:     case VCDINFO_ITEM_TYPE_SEGMENT:     case VCDINFO_ITEM_TYPE_TRACK:             switch (p_vcd->play_item.type) {      case VCDINFO_ITEM_TYPE_ENTRY: 	max_entry = p_vcd->num_entries;	break;      case VCDINFO_ITEM_TYPE_SEGMENT: 	max_entry = p_vcd->num_segments;	break;      case VCDINFO_ITEM_TYPE_TRACK: 	max_entry = p_vcd->num_tracks;	break;      default: ; /* Handle exceptional cases below */      }            if (p_vcd->play_item.num+1 < max_entry) {	itemid.num = p_vcd->play_item.num+1;      } else {	LOG_WARN( "At the end - non-PBC 'next' not possible here" );	return false;      }            break;          case VCDINFO_ITEM_TYPE_LID:       {	/* Should have handled above. */	LOG_WARN( "Internal inconsistency - should not have gotten here." );	return false;      }    default:       return false;    }  }  /** ??? p_vcd->update_title(); ***/  return VLC_SUCCESS == VCDPlay( p_input, itemid );}/*!  Play item assocated with the "prev" selection.  Return false if there was some problem.*/boolvcdplayer_play_prev( input_thread_t * p_input ){  thread_vcd_data_t *p_vcd= (thread_vcd_data_t *)p_input->p_access_data;  vcdinfo_obj_t     *obj  = p_vcd->vcd;  vcdinfo_itemid_t   itemid;  dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 	     "current: %d" , p_vcd->play_item.num);  itemid.type = p_vcd->play_item.type;  if  (vcdplayer_pbc_is_on(p_vcd)) {    vcdinfo_lid_get_pxd(obj, &(p_vcd->pxd), p_vcd->cur_lid);        switch (p_vcd->pxd.descriptor_type) {    case PSD_TYPE_SELECTION_LIST:    case PSD_TYPE_EXT_SELECTION_LIST:      if (p_vcd->pxd.psd == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_psd_get_prev_offset(p_vcd->pxd.psd), 			      &itemid.num, "prev");      itemid.type = VCDINFO_ITEM_TYPE_LID;      break;    case PSD_TYPE_PLAY_LIST:       if (p_vcd->pxd.pld == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_pld_get_prev_offset(p_vcd->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" );      return false;    }  } else {    /* PBC is not on. "Prev" selection is play_item.num-1 if possible. */      int min_entry = (VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type)       ? 0 : 1;        if (p_vcd->play_item.num > min_entry) {      itemid.num = p_vcd->play_item.num-1;    } else {      LOG_WARN( "At the beginning - non-PBC 'prev' not possible here" );      return false;    }        }  /** ??? p_vcd->update_title(); ***/  return VLC_SUCCESS == VCDPlay( p_input, itemid );}/*!  Play item assocated with the "return" selection.  Return false if there was some problem.*/boolvcdplayer_play_return( input_thread_t * p_input ){  thread_vcd_data_t *p_vcd= (thread_vcd_data_t *)p_input->p_access_data;  vcdinfo_obj_t     *obj  = p_vcd->vcd;  vcdinfo_itemid_t   itemid;  dbg_print( (INPUT_DBG_CALL|INPUT_DBG_PBC), 	     "current: %d" , p_vcd->play_item.num);  itemid.type = p_vcd->play_item.type;  if  (vcdplayer_pbc_is_on(p_vcd)) {    vcdinfo_lid_get_pxd(obj, &(p_vcd->pxd), p_vcd->cur_lid);        switch (p_vcd->pxd.descriptor_type) {    case PSD_TYPE_SELECTION_LIST:    case PSD_TYPE_EXT_SELECTION_LIST:      if (p_vcd->pxd.psd == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_psd_get_return_offset(p_vcd->pxd.psd), 			      &itemid.num, "return");      itemid.type = VCDINFO_ITEM_TYPE_LID;      break;    case PSD_TYPE_PLAY_LIST:       if (p_vcd->pxd.pld == NULL) return false;      vcdplayer_update_entry( p_input, 			      vcdinf_pld_get_return_offset(p_vcd->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" );      return false;    }  } else {    /* PBC is not on. "Return" selection is min_entry if possible. */      p_vcd->play_item.num = (VCDINFO_ITEM_TYPE_ENTRY == p_vcd->play_item.type)       ? 0 : 1;      }  /** ??? p_vcd->update_title(); ***/  return VLC_SUCCESS == VCDPlay( p_input, itemid );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?