+/*
+ Set up internal state so that we play a given track.
+ */
+static bool
+cdda_play_track( access_t *p_access, track_t i_track )
+{
+ cdda_data_t *p_cdda = (cdda_data_t *) p_access->p_sys;
+
+ dbg_print((INPUT_DBG_CALL), "called track: %d\n", i_track);
+
+ if (i_track > p_cdda->i_tracks)
+ {
+ msg_Err( p_access, "CD has %d tracks, and you requested track %d",
+ p_cdda->i_tracks, i_track );
+ return false;
+ }
+
+ p_cdda->i_track = i_track;
+
+ /* set up the frame boundaries for this particular track */
+ p_cdda->first_frame = p_cdda->i_lsn =
+ cdio_get_track_lsn(p_cdda->p_cdio, i_track);
+
+ p_cdda->last_frame = cdio_get_track_lsn(p_cdda->p_cdio, i_track+1) - 1;
+
+#if LIBCDIO_VERSION_NUM >= 73
+ if (p_cdda->b_audio_ctl)
+ {
+ lsn_t i_last_lsn;
+ if ( p_cdda->b_nav_mode )
+ i_last_lsn = p_cdda->last_disc_frame;
+ else
+ i_last_lsn = cdio_get_track_last_lsn(p_cdda->p_cdio, i_track);
+ cdda_audio_play(p_cdda->p_cdio, p_cdda->i_lsn, i_last_lsn);
+ }
+#endif
+
+ return true;
+}
+