testcdrom.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /* Test the SDL CD-ROM audio functions */
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. #include "SDL.h"
  6. static void PrintStatus(int driveindex, SDL_CD *cdrom)
  7. {
  8. CDstatus status;
  9. char *status_str;
  10. status = SDL_CDStatus(cdrom);
  11. switch (status) {
  12. case CD_TRAYEMPTY:
  13. status_str = "tray empty";
  14. break;
  15. case CD_STOPPED:
  16. status_str = "stopped";
  17. break;
  18. case CD_PLAYING:
  19. status_str = "playing";
  20. break;
  21. case CD_PAUSED:
  22. status_str = "paused";
  23. break;
  24. case CD_ERROR:
  25. status_str = "error state";
  26. break;
  27. }
  28. printf("Drive %d status: %sn", driveindex, status_str);
  29. if ( status >= CD_PLAYING ) {
  30. int m, s, f;
  31. FRAMES_TO_MSF(cdrom->cur_frame, &m, &s, &f);
  32. printf("Currently playing track %d, %d:%2.2dn",
  33. cdrom->track[cdrom->cur_track].id, m, s);
  34. }
  35. }
  36. static void ListTracks(SDL_CD *cdrom)
  37. {
  38. int i;
  39. int m, s, f;
  40. SDL_CDStatus(cdrom);
  41. printf("Drive tracks: %dn", cdrom->numtracks);
  42. for ( i=0; i<cdrom->numtracks; ++i ) {
  43. FRAMES_TO_MSF(cdrom->track[i].length, &m, &s, &f);
  44. if ( f > 0 )
  45. ++s;
  46. printf("tTrack (index %d) %d: %d:%2.2dn", i,
  47. cdrom->track[i].id, m, s);
  48. }
  49. }
  50. static void PrintUsage(char *argv0)
  51. {
  52. fprintf(stderr, "Usage: %s [drive#] [command] [command] ...n", argv0);
  53. fprintf(stderr, "Where 'command' is one of:n");
  54. fprintf(stderr, " -statusn");
  55. fprintf(stderr, " -listn");
  56. fprintf(stderr, " -play [first_track] [first_frame] [num_tracks] [num_frames]n");
  57. fprintf(stderr, " -pausen");
  58. fprintf(stderr, " -resumen");
  59. fprintf(stderr, " -stopn");
  60. fprintf(stderr, " -ejectn");
  61. fprintf(stderr, " -sleep <milliseconds>n");
  62. }
  63. int main(int argc, char *argv[])
  64. {
  65. int drive;
  66. int i;
  67. SDL_CD *cdrom;
  68. /* Initialize SDL first */
  69. if ( SDL_Init(SDL_INIT_CDROM) < 0 ) {
  70. fprintf(stderr, "Couldn't initialize SDL: %sn",SDL_GetError());
  71. exit(1);
  72. }
  73. atexit(SDL_Quit);
  74. /* Find out how many CD-ROM drives are connected to the system */
  75. if ( SDL_CDNumDrives() == 0 ) {
  76. printf("No CD-ROM devices detectedn");
  77. exit(0);
  78. }
  79. printf("Drives available: %dn", SDL_CDNumDrives());
  80. for ( i=0; i<SDL_CDNumDrives(); ++i ) {
  81. printf("Drive %d:  "%s"n", i, SDL_CDName(i));
  82. }
  83. /* Open the CD-ROM */
  84. drive = 0;
  85. i=1;
  86. if ( argv[i] && isdigit(argv[i][0]) ) {
  87. drive = atoi(argv[i++]);
  88. }
  89. cdrom = SDL_CDOpen(drive);
  90. if ( cdrom == NULL ) {
  91. fprintf(stderr, "Couldn't open drive %d: %sn", drive,
  92. SDL_GetError());
  93. exit(2);
  94. }
  95. #ifdef TEST_NULLCD
  96. cdrom = NULL;
  97. #endif
  98. /* Find out which function to perform */
  99. for ( ; argv[i]; ++i ) {
  100. if ( strcmp(argv[i], "-status") == 0 ) {
  101. /* PrintStatus(drive, cdrom); */
  102. } else
  103. if ( strcmp(argv[i], "-list") == 0 ) {
  104. ListTracks(cdrom);
  105. } else
  106. if ( strcmp(argv[i], "-play") == 0 ) {
  107. int strack, sframe;
  108. int ntrack, nframe;
  109. strack = 0;
  110. if ( argv[i+1] && isdigit(argv[i+1][0]) ) {
  111. strack = atoi(argv[++i]);
  112. }
  113. sframe = 0;
  114. if ( argv[i+1] && isdigit(argv[i+1][0]) ) {
  115. sframe = atoi(argv[++i]);
  116. }
  117. ntrack = 0;
  118. if ( argv[i+1] && isdigit(argv[i+1][0]) ) {
  119. ntrack = atoi(argv[++i]);
  120. }
  121. nframe = 0;
  122. if ( argv[i+1] && isdigit(argv[i+1][0]) ) {
  123. nframe = atoi(argv[++i]);
  124. }
  125. if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) {
  126. if ( SDL_CDPlayTracks(cdrom, strack, sframe,
  127. ntrack, nframe) < 0 ) {
  128. fprintf(stderr,
  129. "Couldn't play tracks %d/%d for %d/%d: %sn",
  130. strack, sframe, ntrack, nframe, SDL_GetError());
  131. }
  132. } else {
  133. fprintf(stderr, "No CD in drive!n");
  134. }
  135. } else
  136. if ( strcmp(argv[i], "-pause") == 0 ) {
  137. if ( SDL_CDPause(cdrom) < 0 ) {
  138. fprintf(stderr, "Couldn't pause CD: %sn",
  139. SDL_GetError());
  140. }
  141. } else
  142. if ( strcmp(argv[i], "-resume") == 0 ) {
  143. if ( SDL_CDResume(cdrom) < 0 ) {
  144. fprintf(stderr, "Couldn't resume CD: %sn",
  145. SDL_GetError());
  146. }
  147. } else
  148. if ( strcmp(argv[i], "-stop") == 0 ) {
  149. if ( SDL_CDStop(cdrom) < 0 ) {
  150. fprintf(stderr, "Couldn't eject CD: %sn",
  151. SDL_GetError());
  152. }
  153. } else
  154. if ( strcmp(argv[i], "-eject") == 0 ) {
  155. if ( SDL_CDEject(cdrom) < 0 ) {
  156. fprintf(stderr, "Couldn't eject CD: %sn",
  157. SDL_GetError());
  158. }
  159. } else
  160. if ( (strcmp(argv[i], "-sleep") == 0) &&
  161. (argv[i+1] && isdigit(argv[i+1][0])) ) {
  162. SDL_Delay(atoi(argv[++i]));
  163. printf("Delayed %d millisecondsn", atoi(argv[i]));
  164. } else {
  165. PrintUsage(argv[0]);
  166. SDL_CDClose(cdrom);
  167. exit(1);
  168. }
  169. }
  170. PrintStatus(drive, cdrom);
  171. SDL_CDClose(cdrom);
  172. return(0);
  173. }