mirror of https://github.com/mpv-player/mpv
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}
|
{NULL, NULL, 0, 0, 0, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
static int seek(stream_t* s,off_t pos);
|
#ifndef CONFIG_LIBCDIO
|
||||||
static int fill_buffer(stream_t* s, char* buffer, int max_len);
|
static void cdparanoia_callback(long inpos, int function) {
|
||||||
static void close_cdda(stream_t* s);
|
#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) {
|
static int get_track_by_sector(cdda_priv *p, unsigned int sector) {
|
||||||
int i;
|
int i;
|
||||||
|
@ -357,113 +460,6 @@ static int open_cdda(stream_t *st,int m, void* opts, int* file_format) {
|
||||||
return STREAM_OK;
|
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 = {
|
const stream_info_t stream_info_cdda = {
|
||||||
"CDDA",
|
"CDDA",
|
||||||
"cdda",
|
"cdda",
|
||||||
|
|
Loading…
Reference in New Issue