void cd_playtoggle() { //added on 01/03/99 by Matt Mueller if (nocdaudio) return; //end addition -MM #ifdef __DJGPP__ if(bcd_now_playing()) #elif defined __SDL__ if(SDL_CDStatus(cdrom)==CD_PLAYING) #else if(0) #endif { cd_stop(); cd_playing=0; } else if(!cd_used) { cd_currenttrack = 0; cd_playtrack(cd_currenttrack); } else { cd_resume(); } cd_used = 1; }
/* * Description: Pause or Resume the Current Track. */ static void open_close() { if ( cd_is_paused ()) { cd_resume (); } else if ( cd_current_track ()) { cd_pause (); } }
void play_release() { struct disc_status status; if(!disc_present) return; cd_poll(cd_fd, &status); switch(status.status_mode) { case CDAUDIO_PLAYING: cd_pause(cd_fd); return; case CDAUDIO_PAUSED: cd_resume(cd_fd); return; default: cd_play(cd_fd, play_track); } }
static GstStateChangeReturn cdplayer_change_state (GstElement * element, GstStateChange transition) { CDPlayer *cdp; GstState state = GST_STATE (element); GstState pending = GST_STATE_PENDING (element); g_return_val_if_fail (GST_IS_CDPLAYER (element), GST_STATE_CHANGE_FAILURE); cdp = CDPLAYER (element); switch (pending) { case GST_STATE_READY: if (state != GST_STATE_PAUSED) { if (cd_init (CDPLAYER_CD (cdp), cdp->device) == FALSE) { return GST_STATE_CHANGE_FAILURE; } cdp->num_tracks = cdp->cd.num_tracks; cdp->cddb_discid = cd_cddb_discid (CDPLAYER_CD (cdp)); } break; case GST_STATE_PAUSED: /* ready->paused is not useful */ if (state != GST_STATE_READY) { if (cd_pause (CDPLAYER_CD (cdp)) == FALSE) { return GST_STATE_CHANGE_FAILURE; } cdp->paused = TRUE; } break; case GST_STATE_PLAYING: if (cdp->paused == TRUE) { if (cd_resume (CDPLAYER_CD (cdp)) == FALSE) { return GST_STATE_CHANGE_FAILURE; } cdp->paused = FALSE; } else { if (cd_start (CDPLAYER_CD (cdp), cdp->start_track, cdp->end_track) == FALSE) { return GST_STATE_CHANGE_FAILURE; } } break; case GST_STATE_NULL: /* stop & close fd */ if (cd_stop (CDPLAYER_CD (cdp)) == FALSE || cd_close (CDPLAYER_CD (cdp)) == FALSE) { return GST_STATE_CHANGE_FAILURE; } break; default: break; } if (GST_ELEMENT_CLASS (parent_class)->change_state) { GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); } return GST_STATE_CHANGE_SUCCESS; }
static GstStateChangeReturn gst_cdaudio_change_state (GstElement * element, GstStateChange transition) { GstCDAudio *cdaudio; GstStateChangeReturn ret; gint res; cdaudio = GST_CDAUDIO (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: if ((res = cd_init_device (cdaudio->device)) < 0) goto init_failed; cdaudio->cd_desc = res; /* close tray */ if ((res = cd_close (cdaudio->cd_desc)) < 0) goto close_failed; if ((res = cd_stat (cdaudio->cd_desc, &cdaudio->info)) < 0) { /* we just give a warning here */ GST_ELEMENT_WARNING (cdaudio, LIBRARY, INIT, ("Could not retrieve CD track info."), (NULL)); } else { debug_track_info (cdaudio); cdaudio->discid = cddb_discid (cdaudio->cd_desc); /* FIXME, post message with discid */ } cdaudio->was_playing = FALSE; break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: { if (cdaudio->was_playing) res = cd_resume (cdaudio->cd_desc); else res = cd_play (cdaudio->cd_desc, 1); if (res < 0) goto play_failed; cdaudio->was_playing = TRUE; g_timer_start (cdaudio->timer); break; } default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: if ((res = cd_pause (cdaudio->cd_desc)) < 0) goto pause_failed; g_timer_stop (cdaudio->timer); break; case GST_STATE_CHANGE_PAUSED_TO_READY: if ((res = cd_stop (cdaudio->cd_desc)) < 0) goto stop_failed; if ((res = cd_finish (cdaudio->cd_desc)) < 0) goto finish_failed; cdaudio->cd_desc = -1; break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return ret; /* ERRORS */ init_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not init CD device %s. (%d)", cdaudio->device, res), (NULL)); cdaudio->cd_desc = -1; return GST_STATE_CHANGE_FAILURE; } close_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not close CD tray for device %s. (%d)", cdaudio->device, res), (NULL)); return GST_STATE_CHANGE_FAILURE; } play_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not play CD device %s. (%d)", cdaudio->device, res), (NULL)); return GST_STATE_CHANGE_FAILURE; } pause_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not pause CD device %s. (%d)", cdaudio->device, res), (NULL)); return GST_STATE_CHANGE_FAILURE; } stop_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not stop CD device %s. (%d)", cdaudio->device, res), (NULL)); return GST_STATE_CHANGE_FAILURE; } finish_failed: { GST_ELEMENT_ERROR (cdaudio, LIBRARY, INIT, ("Could not finish CD device %s. (%d)", cdaudio->device, res), (NULL)); return GST_STATE_CHANGE_FAILURE; } }
int main() { char cmd[20]; int done = 0; int ret, trk, a, b; if (cd_init() < 0) { printf("Error initialising libcda (%s)\n", cd_error); return 1; } show_cmds(); do { printf(">>> "); fflush(stdout); scanf("%s", cmd); switch (cmd[0]) { case '?': show_cmds(); break; case 'p': trk = input_int("Track"); ret = cd_play(trk); if (ret != 0) printf("Error occurred (%s)\n", cd_error); break; case 'r': a = input_int("First track"); b = input_int("Last track"); ret = cd_play_range(a, b); if (ret != 0) printf("Error occurred (%s)\n", cd_error); break; case 'f': trk = input_int("Start track"); ret = cd_play_from(trk); if (ret != 0) printf("Error occurred (%s)\n", cd_error); break; case 'P': trk = cd_current_track(); if (trk) printf("Playing track %d\n", trk); else printf("Not playing\n"); break; case 'w': cd_pause(); break; case 'W': cd_resume(); break; case 'S': ret = cd_is_paused(); if (ret) printf("Paused\n"); else printf("Not paused\n"); break; case 's': cd_stop(); break; case 'i': ret = cd_get_tracks(&a, &b); if (ret != 0) printf("Error occurred (%s)\n", cd_error); else printf("First track: %d\nLast track: %d\n", a, b); break; case 'a': trk = input_int("Track"); ret = cd_is_audio(trk); if (ret < 0) printf("Error occurred (%s)\n", cd_error); else printf("Track %d is %s\n", trk, (ret ? "audio" : "data")); break; case 'v': a = input_int("Left (0-255)"); b = input_int("Right (0-255)"); cd_set_volume(a, b); break; case 'V': cd_get_volume(&a, &b); printf("Left volume: %d\nRight volume: %d\n", a, b); break; case 'e': cd_eject(); break; case 'c': cd_close(); break; case 'q': done = 1; break; default: printf("Unrecognised command: `%c'\n", cmd[0]); } } while (!done); cd_exit(); return 0; }