Mercurial > sdl-ios-xcode
annotate test/testcdrom.c @ 821:30168104389f
Date: Sat, 14 Feb 2004 14:52:40 +0200
From: "Mike Gorchak"
Subject: Batch of the QNX6 fixes for the SDL
1. Updated readme.QNX
2. Fixed crashes during intensive window updating under fast machines (got over 200 rectangles for update).
3. Fixed double-buffered fullscreen modes, now it works as needed.
4. Fixed Photon detection algorithm.
5. Fixed HWSURFACE update function.
6. Added SDL_PHOTON_FULLSCREEN_REFRESH environment variable support for control refresh rates under Photon.
7. Added 640x400 fullscreen mode emulation via 640x480 (if videodriver not supports original 640x400 mode of course) shifted by 40 vertical pixels from begin, to center it. It's needed for some old DOS games which ran in doubled 320x200 mode.
8. Added available video ram amount support.
8. Added hardware surface allocation/deallocation support if current videomode and videodriver supports it.
9. Added hardware filling support.
10. Added hardware blits support (simple and colorkeyed).
And I've added to testvidinfo test color-keyed blits benchmark (maybe need to add alpha blits benchmark too ?). Currently Photon not supporting any alpha hardware blittings (all drivers lack of alpha blitting code support, only software alpha blitting exist in photon, which is hundreds times slowest than the SDL's one). So I've not added the alpha support. I suppose new QNX 6.3 will have the hardware alpha support, so when it will be done, I'll add alpha support.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 14 Feb 2004 20:22:21 +0000 |
parents | 9c6717a1c66f |
children | be9c9c8f6d53 |
rev | line source |
---|---|
0 | 1 |
2 /* Test the SDL CD-ROM audio functions */ | |
3 | |
4 #include <stdlib.h> | |
5 #include <stdio.h> | |
6 #include <ctype.h> | |
7 | |
8 #include "SDL.h" | |
9 | |
10 | |
11 static void PrintStatus(int driveindex, SDL_CD *cdrom) | |
12 { | |
13 CDstatus status; | |
14 char *status_str; | |
15 | |
16 status = SDL_CDStatus(cdrom); | |
17 switch (status) { | |
18 case CD_TRAYEMPTY: | |
19 status_str = "tray empty"; | |
20 break; | |
21 case CD_STOPPED: | |
22 status_str = "stopped"; | |
23 break; | |
24 case CD_PLAYING: | |
25 status_str = "playing"; | |
26 break; | |
27 case CD_PAUSED: | |
28 status_str = "paused"; | |
29 break; | |
30 case CD_ERROR: | |
31 status_str = "error state"; | |
32 break; | |
33 } | |
34 printf("Drive %d status: %s\n", driveindex, status_str); | |
35 if ( status >= CD_PLAYING ) { | |
36 int m, s, f; | |
37 FRAMES_TO_MSF(cdrom->cur_frame, &m, &s, &f); | |
38 printf("Currently playing track %d, %d:%2.2d\n", | |
39 cdrom->track[cdrom->cur_track].id, m, s); | |
40 } | |
41 } | |
42 | |
43 static void ListTracks(SDL_CD *cdrom) | |
44 { | |
45 int i; | |
46 int m, s, f; | |
568
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
47 char* trtype; |
0 | 48 |
49 SDL_CDStatus(cdrom); | |
50 printf("Drive tracks: %d\n", cdrom->numtracks); | |
51 for ( i=0; i<cdrom->numtracks; ++i ) { | |
52 FRAMES_TO_MSF(cdrom->track[i].length, &m, &s, &f); | |
53 if ( f > 0 ) | |
54 ++s; | |
568
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
55 switch(cdrom->track[i].type) |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
56 { |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
57 case SDL_AUDIO_TRACK: |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
58 trtype="audio"; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
59 break; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
60 case SDL_DATA_TRACK: |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
61 trtype="data"; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
62 break; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
63 default: |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
64 trtype="unknown"; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
65 break; |
0cd6b268193b
Date: Thu, 16 Jan 2003 13:48:31 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
66 } |
613
9c6717a1c66f
Added MacOS X CD-ROM audio support (thanks Max and Darrell)
Sam Lantinga <slouken@libsdl.org>
parents:
568
diff
changeset
|
67 printf("\tTrack (index %d) %d: %d:%2.2d / %d [%s track]\n", i, |
9c6717a1c66f
Added MacOS X CD-ROM audio support (thanks Max and Darrell)
Sam Lantinga <slouken@libsdl.org>
parents:
568
diff
changeset
|
68 cdrom->track[i].id, m, s, cdrom->track[i].length, trtype); |
0 | 69 } |
70 } | |
71 | |
72 static void PrintUsage(char *argv0) | |
73 { | |
74 fprintf(stderr, "Usage: %s [drive#] [command] [command] ...\n", argv0); | |
75 fprintf(stderr, "Where 'command' is one of:\n"); | |
76 fprintf(stderr, " -status\n"); | |
77 fprintf(stderr, " -list\n"); | |
78 fprintf(stderr, " -play [first_track] [first_frame] [num_tracks] [num_frames]\n"); | |
79 fprintf(stderr, " -pause\n"); | |
80 fprintf(stderr, " -resume\n"); | |
81 fprintf(stderr, " -stop\n"); | |
82 fprintf(stderr, " -eject\n"); | |
83 fprintf(stderr, " -sleep <milliseconds>\n"); | |
84 } | |
85 | |
86 int main(int argc, char *argv[]) | |
87 { | |
88 int drive; | |
89 int i; | |
90 SDL_CD *cdrom; | |
91 | |
92 /* Initialize SDL first */ | |
93 if ( SDL_Init(SDL_INIT_CDROM) < 0 ) { | |
94 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); | |
95 exit(1); | |
96 } | |
97 atexit(SDL_Quit); | |
98 | |
99 /* Find out how many CD-ROM drives are connected to the system */ | |
100 if ( SDL_CDNumDrives() == 0 ) { | |
101 printf("No CD-ROM devices detected\n"); | |
102 exit(0); | |
103 } | |
104 printf("Drives available: %d\n", SDL_CDNumDrives()); | |
105 for ( i=0; i<SDL_CDNumDrives(); ++i ) { | |
106 printf("Drive %d: \"%s\"\n", i, SDL_CDName(i)); | |
107 } | |
108 | |
109 /* Open the CD-ROM */ | |
110 drive = 0; | |
111 i=1; | |
112 if ( argv[i] && isdigit(argv[i][0]) ) { | |
113 drive = atoi(argv[i++]); | |
114 } | |
115 cdrom = SDL_CDOpen(drive); | |
116 if ( cdrom == NULL ) { | |
117 fprintf(stderr, "Couldn't open drive %d: %s\n", drive, | |
118 SDL_GetError()); | |
119 exit(2); | |
120 } | |
121 #ifdef TEST_NULLCD | |
122 cdrom = NULL; | |
123 #endif | |
124 | |
125 /* Find out which function to perform */ | |
126 for ( ; argv[i]; ++i ) { | |
127 if ( strcmp(argv[i], "-status") == 0 ) { | |
128 /* PrintStatus(drive, cdrom); */ | |
129 } else | |
130 if ( strcmp(argv[i], "-list") == 0 ) { | |
131 ListTracks(cdrom); | |
132 } else | |
133 if ( strcmp(argv[i], "-play") == 0 ) { | |
134 int strack, sframe; | |
135 int ntrack, nframe; | |
136 | |
137 strack = 0; | |
138 if ( argv[i+1] && isdigit(argv[i+1][0]) ) { | |
139 strack = atoi(argv[++i]); | |
140 } | |
141 sframe = 0; | |
142 if ( argv[i+1] && isdigit(argv[i+1][0]) ) { | |
143 sframe = atoi(argv[++i]); | |
144 } | |
145 ntrack = 0; | |
146 if ( argv[i+1] && isdigit(argv[i+1][0]) ) { | |
147 ntrack = atoi(argv[++i]); | |
148 } | |
149 nframe = 0; | |
150 if ( argv[i+1] && isdigit(argv[i+1][0]) ) { | |
151 nframe = atoi(argv[++i]); | |
152 } | |
153 if ( CD_INDRIVE(SDL_CDStatus(cdrom)) ) { | |
154 if ( SDL_CDPlayTracks(cdrom, strack, sframe, | |
155 ntrack, nframe) < 0 ) { | |
156 fprintf(stderr, | |
157 "Couldn't play tracks %d/%d for %d/%d: %s\n", | |
158 strack, sframe, ntrack, nframe, SDL_GetError()); | |
159 } | |
160 } else { | |
161 fprintf(stderr, "No CD in drive!\n"); | |
162 } | |
163 } else | |
164 if ( strcmp(argv[i], "-pause") == 0 ) { | |
165 if ( SDL_CDPause(cdrom) < 0 ) { | |
166 fprintf(stderr, "Couldn't pause CD: %s\n", | |
167 SDL_GetError()); | |
168 } | |
169 } else | |
170 if ( strcmp(argv[i], "-resume") == 0 ) { | |
171 if ( SDL_CDResume(cdrom) < 0 ) { | |
172 fprintf(stderr, "Couldn't resume CD: %s\n", | |
173 SDL_GetError()); | |
174 } | |
175 } else | |
176 if ( strcmp(argv[i], "-stop") == 0 ) { | |
177 if ( SDL_CDStop(cdrom) < 0 ) { | |
178 fprintf(stderr, "Couldn't eject CD: %s\n", | |
179 SDL_GetError()); | |
180 } | |
181 } else | |
182 if ( strcmp(argv[i], "-eject") == 0 ) { | |
183 if ( SDL_CDEject(cdrom) < 0 ) { | |
184 fprintf(stderr, "Couldn't eject CD: %s\n", | |
185 SDL_GetError()); | |
186 } | |
187 } else | |
188 if ( (strcmp(argv[i], "-sleep") == 0) && | |
189 (argv[i+1] && isdigit(argv[i+1][0])) ) { | |
190 SDL_Delay(atoi(argv[++i])); | |
191 printf("Delayed %d milliseconds\n", atoi(argv[i])); | |
192 } else { | |
193 PrintUsage(argv[0]); | |
194 SDL_CDClose(cdrom); | |
195 exit(1); | |
196 } | |
197 } | |
198 PrintStatus(drive, cdrom); | |
199 SDL_CDClose(cdrom); | |
200 | |
201 return(0); | |
202 } |