mirror of
https://github.com/mpv-player/mpv
synced 2025-02-17 13:17:13 +00:00
stream_cdda.c: Reorder functions to avoid forward declarations.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31511 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
f07956632e
commit
899caa91f1
@ -125,9 +125,112 @@ const m_option_t cdda_opts[] = {
|
||||
{NULL, NULL, 0, 0, 0, 0, NULL}
|
||||
};
|
||||
|
||||
static int seek(stream_t* s,off_t pos);
|
||||
static int fill_buffer(stream_t* s, char* buffer, int max_len);
|
||||
static void close_cdda(stream_t* s);
|
||||
#ifndef CONFIG_LIBCDIO
|
||||
static void cdparanoia_callback(long inpos, int function) {
|
||||
#else
|
||||
static void cdparanoia_callback(long int inpos, paranoia_cb_mode_t function) {
|
||||
#endif
|
||||
}
|
||||
|
||||
static int fill_buffer(stream_t* s, char* buffer, int max_len) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
cd_track_t *cd_track;
|
||||
int16_t * buf;
|
||||
int i;
|
||||
|
||||
if((p->sector < p->start_sector) || (p->sector > p->end_sector)) {
|
||||
s->eof = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
buf = paranoia_read(p->cdp,cdparanoia_callback);
|
||||
if (!buf)
|
||||
return 0;
|
||||
|
||||
#if HAVE_BIGENDIAN
|
||||
for(i=0;i<CD_FRAMESIZE_RAW/2;i++)
|
||||
buf[i]=le2me_16(buf[i]);
|
||||
#endif
|
||||
|
||||
p->sector++;
|
||||
memcpy(buffer,buf,CD_FRAMESIZE_RAW);
|
||||
|
||||
for(i=0;i<p->cd->tracks;i++){
|
||||
if(p->cd->disc_toc[i].dwStartSector==p->sector-1) {
|
||||
cd_track = cd_info_get_track(p->cd_info, i+1);
|
||||
//printf("Track %d, sector=%d\n", i, p->sector-1);
|
||||
if( cd_track!=NULL ) {
|
||||
mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return CD_FRAMESIZE_RAW;
|
||||
}
|
||||
|
||||
static int seek(stream_t* s,off_t newpos) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
cd_track_t *cd_track;
|
||||
int sec;
|
||||
int current_track=0, seeked_track=0;
|
||||
int seek_to_track = 0;
|
||||
int i;
|
||||
|
||||
s->pos = newpos;
|
||||
sec = s->pos/CD_FRAMESIZE_RAW;
|
||||
if (s->pos < 0 || sec > p->end_sector) {
|
||||
s->eof = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//printf("pos: %d, sec: %d ## %d\n", (int)s->pos, (int)sec, CD_FRAMESIZE_RAW);
|
||||
//printf("sector: %d new: %d\n", p->sector, sec );
|
||||
|
||||
for(i=0;i<p->cd->tracks;i++){
|
||||
// printf("trk #%d: %d .. %d\n",i,p->cd->disc_toc[i].dwStartSector,p->cd->disc_toc[i+1].dwStartSector);
|
||||
if( p->sector>=p->cd->disc_toc[i].dwStartSector && p->sector<p->cd->disc_toc[i+1].dwStartSector ) {
|
||||
current_track = i;
|
||||
}
|
||||
if( sec>=p->cd->disc_toc[i].dwStartSector && sec<p->cd->disc_toc[i+1].dwStartSector ) {
|
||||
seeked_track = i;
|
||||
seek_to_track = sec == p->cd->disc_toc[i].dwStartSector;
|
||||
}
|
||||
}
|
||||
//printf("current: %d, seeked: %d\n", current_track, seeked_track);
|
||||
if (current_track != seeked_track && !seek_to_track) {
|
||||
//printf("Track %d, sector=%d\n", seeked_track, sec);
|
||||
cd_track = cd_info_get_track(p->cd_info, seeked_track+1);
|
||||
if( cd_track!=NULL ) {
|
||||
mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
|
||||
}
|
||||
|
||||
}
|
||||
#if 0
|
||||
if(sec < p->start_sector)
|
||||
sec = p->start_sector;
|
||||
else if(sec > p->end_sector)
|
||||
sec = p->end_sector;
|
||||
#endif
|
||||
|
||||
p->sector = sec;
|
||||
// s->pos = sec*CD_FRAMESIZE_RAW;
|
||||
|
||||
//printf("seek: %d, sec: %d\n", (int)s->pos, sec);
|
||||
paranoia_seek(p->cdp,sec,SEEK_SET);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void close_cdda(stream_t* s) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
paranoia_free(p->cdp);
|
||||
cdda_close(p->cd);
|
||||
cd_info_free(p->cd_info);
|
||||
free(p);
|
||||
}
|
||||
|
||||
static int get_track_by_sector(cdda_priv *p, unsigned int sector) {
|
||||
int i;
|
||||
@ -357,113 +460,6 @@ static int open_cdda(stream_t *st,int m, void* opts, int* file_format) {
|
||||
return STREAM_OK;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_LIBCDIO
|
||||
static void cdparanoia_callback(long inpos, int function) {
|
||||
#else
|
||||
static void cdparanoia_callback(long int inpos, paranoia_cb_mode_t function) {
|
||||
#endif
|
||||
}
|
||||
|
||||
static int fill_buffer(stream_t* s, char* buffer, int max_len) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
cd_track_t *cd_track;
|
||||
int16_t * buf;
|
||||
int i;
|
||||
|
||||
if((p->sector < p->start_sector) || (p->sector > p->end_sector)) {
|
||||
s->eof = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
buf = paranoia_read(p->cdp,cdparanoia_callback);
|
||||
if (!buf)
|
||||
return 0;
|
||||
|
||||
#if HAVE_BIGENDIAN
|
||||
for(i=0;i<CD_FRAMESIZE_RAW/2;i++)
|
||||
buf[i]=le2me_16(buf[i]);
|
||||
#endif
|
||||
|
||||
p->sector++;
|
||||
memcpy(buffer,buf,CD_FRAMESIZE_RAW);
|
||||
|
||||
for(i=0;i<p->cd->tracks;i++){
|
||||
if(p->cd->disc_toc[i].dwStartSector==p->sector-1) {
|
||||
cd_track = cd_info_get_track(p->cd_info, i+1);
|
||||
//printf("Track %d, sector=%d\n", i, p->sector-1);
|
||||
if( cd_track!=NULL ) {
|
||||
mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return CD_FRAMESIZE_RAW;
|
||||
}
|
||||
|
||||
static int seek(stream_t* s,off_t newpos) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
cd_track_t *cd_track;
|
||||
int sec;
|
||||
int current_track=0, seeked_track=0;
|
||||
int seek_to_track = 0;
|
||||
int i;
|
||||
|
||||
s->pos = newpos;
|
||||
sec = s->pos/CD_FRAMESIZE_RAW;
|
||||
if (s->pos < 0 || sec > p->end_sector) {
|
||||
s->eof = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//printf("pos: %d, sec: %d ## %d\n", (int)s->pos, (int)sec, CD_FRAMESIZE_RAW);
|
||||
//printf("sector: %d new: %d\n", p->sector, sec );
|
||||
|
||||
for(i=0;i<p->cd->tracks;i++){
|
||||
// printf("trk #%d: %d .. %d\n",i,p->cd->disc_toc[i].dwStartSector,p->cd->disc_toc[i+1].dwStartSector);
|
||||
if( p->sector>=p->cd->disc_toc[i].dwStartSector && p->sector<p->cd->disc_toc[i+1].dwStartSector ) {
|
||||
current_track = i;
|
||||
}
|
||||
if( sec>=p->cd->disc_toc[i].dwStartSector && sec<p->cd->disc_toc[i+1].dwStartSector ) {
|
||||
seeked_track = i;
|
||||
seek_to_track = sec == p->cd->disc_toc[i].dwStartSector;
|
||||
}
|
||||
}
|
||||
//printf("current: %d, seeked: %d\n", current_track, seeked_track);
|
||||
if (current_track != seeked_track && !seek_to_track) {
|
||||
//printf("Track %d, sector=%d\n", seeked_track, sec);
|
||||
cd_track = cd_info_get_track(p->cd_info, seeked_track+1);
|
||||
if( cd_track!=NULL ) {
|
||||
mp_msg(MSGT_SEEK, MSGL_INFO, "\n%s\n", cd_track->name);
|
||||
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CDDA_TRACK=%d\n", cd_track->track_nb);
|
||||
}
|
||||
|
||||
}
|
||||
#if 0
|
||||
if(sec < p->start_sector)
|
||||
sec = p->start_sector;
|
||||
else if(sec > p->end_sector)
|
||||
sec = p->end_sector;
|
||||
#endif
|
||||
|
||||
p->sector = sec;
|
||||
// s->pos = sec*CD_FRAMESIZE_RAW;
|
||||
|
||||
//printf("seek: %d, sec: %d\n", (int)s->pos, sec);
|
||||
paranoia_seek(p->cdp,sec,SEEK_SET);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void close_cdda(stream_t* s) {
|
||||
cdda_priv* p = (cdda_priv*)s->priv;
|
||||
paranoia_free(p->cdp);
|
||||
cdda_close(p->cd);
|
||||
cd_info_free(p->cd_info);
|
||||
free(p);
|
||||
}
|
||||
|
||||
const stream_info_t stream_info_cdda = {
|
||||
"CDDA",
|
||||
"cdda",
|
||||
|
Loading…
Reference in New Issue
Block a user