diff options
Diffstat (limited to 'audio/wmcdplay/files/patch-aa')
-rw-r--r-- | audio/wmcdplay/files/patch-aa | 199 |
1 files changed, 75 insertions, 124 deletions
diff --git a/audio/wmcdplay/files/patch-aa b/audio/wmcdplay/files/patch-aa index 1ce21d1cb74b..498347e738ac 100644 --- a/audio/wmcdplay/files/patch-aa +++ b/audio/wmcdplay/files/patch-aa @@ -1,51 +1,30 @@ ---- cdctl.h.orig Sat Dec 5 23:23:28 1998 -+++ cdctl.h Sat Dec 5 23:23:27 1998 -@@ -11,7 +11,7 @@ - // define these if you have troubles, otherwise they slow responses - // #define _CDCTL_STOP_BEFORE_PLAY - // #define _CDCTL_START_BEFORE_PLAY --// #define _CDCTL_HARD_STOP -+#define _CDCTL_HARD_STOP - - #include <stdio.h> - #include <stdlib.h> -@@ -20,8 +20,7 @@ +--- cdctl.h.orig Sun Dec 13 12:43:20 1998 ++++ cdctl.h Sun Dec 13 12:43:20 1998 +@@ -30,7 +30,8 @@ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> --#include <malloc.h> -#include <linux/cdrom.h> +#include <sys/cdio.h> ++#define CD_MSF_OFFSET 150 // CD status values #define ssData 0 -@@ -67,6 +66,9 @@ - #define FALSE 0 - #endif - -+#define CD_MSF_OFFSET 150 -+#define CDROM_DATA_TRACK 4 -+ - class CDCtl - { - public: -@@ -102,12 +104,11 @@ +@@ -113,10 +114,10 @@ case acStop: - #ifdef _CDCTL_HARD_STOP -- ioctl(cdfd,CDROMSTOP); -+ ioctl(cdfd,CDIOCSTOP); - #endif - #ifndef _CDCTL_HARD_STOP + #ifdef _CDCTL_SOFT_STOP - ioctl(cdfd,CDROMSTART); + ioctl(cdfd,CDIOCSTART); #endif -- - break; - case acPlay: - status_state=ssPlaying; -@@ -115,10 +116,10 @@ - tskOurPlay=TRUE; + #ifndef _CDCTL_SOFT_STOP +- ioctl(cdfd,CDROMSTOP); ++ ioctl(cdfd,CDIOCSTOP); + #endif + tskOurPlay=false; + +@@ -127,10 +128,10 @@ + tskOurPlay=true; break; case acPause: - ioctl(cdfd,CDROMPAUSE); @@ -57,7 +36,7 @@ break; case acPrev: newtrk--; -@@ -145,13 +146,13 @@ +@@ -157,13 +158,13 @@ } break; case acEject: @@ -73,58 +52,65 @@ status_state=ssNoCD; break; } -@@ -160,9 +161,15 @@ +@@ -172,9 +173,13 @@ } void doStatus(){ if(cdfdopen){ - struct cdrom_subchnl sc; -- sc.cdsc_format=CDROM_LBA; +- sc.cdsc_format=CDROM_MSF; - if(ioctl(cdfd, CDROMSUBCHNL, &sc)){ -+ struct ioc_read_subchannel irs; ++ struct ioc_read_subchannel sc; + struct cd_sub_channel_info csci; -+ -+ memset(&irs, 0, sizeof(irs)); -+ irs.data=&csci; -+ irs.data_len=sizeof(csci); -+ irs.address_format=CD_LBA_FORMAT; -+ irs.data_format=CD_MEDIA_CATALOG; -+ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &irs)){ ++ sc.address_format=CD_MSF_FORMAT; ++ sc.data=&csci; ++ sc.data_len=sizeof(csci); ++ sc.data_format=CD_MEDIA_CATALOG; ++ if(ioctl(cdfd, CDIOCREADSUBCHANNEL, &sc)){ if(status_state!=ssNoCD) status_state=ssTrayOpen; status_track=0; -@@ -171,18 +178,18 @@ - else{ +@@ -185,18 +190,18 @@ if(status_state==ssNoCD || status_state==ssTrayOpen) readTOC(); + int start,now,stop; - switch(sc.cdsc_audiostatus){ - case CDROM_AUDIO_PLAY: + switch(csci.header.audio_status){ + case CD_AS_PLAY_IN_PROGRESS: if(status_state==ssStopped) - tskOurPlay=FALSE; + tskOurPlay=false; status_state=ssPlaying; break; - case CDROM_AUDIO_PAUSED: + case CD_AS_PLAY_PAUSED: if(status_state==ssStopped) - tskOurPlay=FALSE; + tskOurPlay=false; status_state=ssPaused; break; - case CDROM_AUDIO_COMPLETED: + case CD_AS_PLAY_COMPLETED: + if(tskOurPlay){ + status_state=ssPlaying; + selecttrack(); +@@ -212,7 +217,7 @@ if(tskOurPlay){ - selecttrack(); - doStatus(); -@@ -194,7 +201,7 @@ - default: - status_state=ssStopped; + start = cd_trklist[status_track].track_start; + stop = start + cd_trklist[status_track].track_len - _CDCTL_SENSITIVITY; +- now = ((sc.cdsc_absaddr.msf.minute) * 60 + sc.cdsc_absaddr.msf.second) * 75 + sc.cdsc_absaddr.msf.frame - CD_MSF_OFFSET; ++ now = ((csci.what.position.absaddr.msf.minute) * 60 + csci.what.position.absaddr.msf.second) * 75 + csci.what.position.absaddr.msf.frame - CD_MSF_OFFSET; + if(now>0 && (now<start || now>=stop)){ + status_state=ssPlaying; + selecttrack(); +@@ -227,7 +232,7 @@ + + status_state=ssStopped; } - trackinfo(&sc); + trackinfo(&csci); if(cd_trklist[status_track].track_data) status_state=ssData; } -@@ -202,19 +209,21 @@ +@@ -235,19 +240,21 @@ } void setVolume(int l, int r){ if(cdfdopen){ @@ -154,11 +140,7 @@ } } int getVolumeL(){ -@@ -260,36 +269,67 @@ - return status_pos-cd_trklist[status_track].track_start; - } - private: -+#if 0 +@@ -296,12 +303,30 @@ void readTOC(){ if(cd_trklist!=NULL) free(cd_trklist); @@ -167,84 +149,53 @@ - cd_tracks=hdr.cdth_trk1; + struct ioc_toc_header hdr; + ioctl(cdfd, CDIOREADTOCHEADER, &hdr); -+ cd_tracks=hdr.ending_track - hdr.starting_track + 1; ++ cd_tracks=hdr.ending_track; cd_trklist=(struct CDTrack *)malloc(cd_tracks*sizeof(struct CDTrack)); -- struct cdrom_tocentry te; -+ struct ioc_read_toc_single_entry te; ++#ifdef __FreeBSD__ ++ struct ioc_read_toc_entry te; ++ ++ te.data_len = (cd_tracks + 1) * sizeof(struct cd_toc_entry); ++ te.data = (struct cd_toc_entry *)malloc(te.data_len); ++ te.address_format = CD_LBA_FORMAT; ++ te.starting_track = 0; ++ ioctl(cdfd, CDIOREADTOCENTRYS, &te); ++ for(int i = 0; i < cd_tracks; i++) { ++ cd_trklist[i].track_data = te.data[i].control & 4 ? true : false; ++ cd_trklist[i].track_start = ntohl(te.data[i].addr.lba); ++ cd_trklist[i].track_len = ntohl(te.data[i + 1].addr.lba) ++ - cd_trklist[i].track_start; ++ } ++ cd_len = ntohl(te.data[cd_tracks].addr.lba); ++ free(te.data); ++#else + struct cdrom_tocentry te; int prev_addr=0; ++ for(int i=0;i<=cd_tracks;i++){ if(i==cd_tracks) -- te.cdte_track=CDROM_LEADOUT; -+ te.track=CDROM_LEADOUT; - else -- te.cdte_track=i+1; -- te.cdte_format=CDROM_LBA; -- ioctl(cdfd, CDROMREADTOCENTRY, &te); -+ te.track=i+1; -+ te.address_format=CD_LBA_FORMAT; -+ ioctl(cdfd, CDIOREADTOCENTRY, &te); - if(i>0) -- cd_trklist[i-1].track_len = te.cdte_addr.lba - prev_addr; -- prev_addr=te.cdte_addr.lba; -+ cd_trklist[i-1].track_len = ntohl(te.entry.addr.lba) - prev_addr; -+ prev_addr=ntohl(te.entry.addr.lba); - if(i<cd_tracks){ -- cd_trklist[i].track_data = te.cdte_ctrl & CDROM_DATA_TRACK ? TRUE : FALSE; -- cd_trklist[i].track_start = te.cdte_addr.lba; -+ cd_trklist[i].track_data = te.entry.control & CDROM_DATA_TRACK ? TRUE : FALSE; -+ cd_trklist[i].track_start = ntohl(te.entry.addr.lba); - } + te.cdte_track=CDROM_LEADOUT; +@@ -320,10 +345,11 @@ else -- cd_len = te.cdte_addr.lba; -+ cd_len = ntohl(te.entry.addr.lba); + cd_len = this_addr; } -+ ++#endif } - void trackinfo(struct cdrom_subchnl *subchnl){ -+#else -+void readTOC(void) { -+ struct ioc_toc_header hdr; -+ struct ioc_read_toc_entry te; -+ int i; -+ -+ if(cdfd != -1) { -+ if(cd_trklist != NULL) free(cd_trklist); -+ -+ ioctl(cdfd, CDIOREADTOCHEADER, &hdr); -+ cd_tracks = hdr.ending_track; -+ cd_trklist = (struct CDTrack *)malloc(cd_tracks * sizeof(struct CDTrack)); -+ -+ te.data_len = (cd_tracks + 1) * sizeof(struct cd_toc_entry); -+ te.data = (struct cd_toc_entry *)malloc(te.data_len); -+ te.address_format = CD_LBA_FORMAT; -+ te.starting_track = 0; -+ ioctl(cdfd, CDIOREADTOCENTRYS, &te); -+ for(i = 0; i < cd_tracks; i++) { -+ cd_trklist[i].track_start = ntohl(te.data[i].addr.lba); -+ cd_trklist[i].track_len = ntohl(te.data[i + 1].addr.lba) - -+ cd_trklist[i].track_start; -+ cd_trklist[i].track_data = (te.data[i].control & 4); -+ } -+ free(te.data); -+ } -+} -+#endif -+ + void trackinfo(struct cd_sub_channel_info *subchnl){ if(status_state==ssPlaying || status_state==ssPaused){ -- status_pos=subchnl->cdsc_absaddr.lba; -+ status_pos=ntohl(subchnl->what.position.absaddr.lba); +- status_pos=((subchnl->cdsc_absaddr.msf.minute) * 60 + subchnl->cdsc_absaddr.msf.second) * 75 + subchnl->cdsc_absaddr.msf.frame - CD_MSF_OFFSET; ++ status_pos=((subchnl->what.position.absaddr.msf.minute) * 60 + subchnl->what.position.absaddr.msf.second) * 75 + subchnl->what.position.absaddr.msf.frame - CD_MSF_OFFSET; for(status_track=0;status_track<cd_tracks;status_track++){ if(status_pos<cd_trklist[status_track].track_start+cd_trklist[status_track].track_len) break; -@@ -297,24 +337,24 @@ +@@ -331,24 +357,24 @@ } } void play(){ - struct cdrom_msf pmsf; + struct ioc_play_msf pmsf; - int abs0=status_pos+CD_MSF_OFFSET; - int abs1=cd_trklist[status_track].track_start+cd_trklist[status_track].track_len-1+CD_MSF_OFFSET; + int abs0=status_pos + CD_MSF_OFFSET; + int abs1=cd_trklist[status_track].track_start + cd_trklist[status_track].track_len - 1 + CD_MSF_OFFSET; - pmsf.cdmsf_min0=abs0/(75*60); - pmsf.cdmsf_min1=abs1/(75*60); - pmsf.cdmsf_sec0=(abs0%(75*60))/75; @@ -272,8 +223,8 @@ } void select(int trk){ status_track=trk; -@@ -323,10 +363,10 @@ - if(cd_trklist[status_track].track_data){ +@@ -357,10 +383,10 @@ + if(cd_trklist[status_track].track_data){ #ifdef _CDCTL_HARD_STOP - ioctl(cdfd,CDROMSTOP); @@ -283,5 +234,5 @@ - ioctl(cdfd,CDROMSTART); + ioctl(cdfd,CDIOCSTART); #endif + tskOurPlay=false; - } |