in cdaudio.cpp, line 413:
int
cd_update(struct disc_info *disc, struct disc_status status)
{
if(!(disc->disc_present = status.status_present))
return -1;
disc->disc_mode = status.status_mode;
memcpy(&disc->disc_time, &status.status_disc_time, sizeof(struct
disc_timeval));
memcpy(&disc->disc_track_time, &status.status_track_time, sizeof(struct
disc_timeval));
if (status.status_current_track != 0)
disc->disc_current_track = status.status_current_track;
else {
disc->disc_current_track = 0;
===> while(disc->disc_current_track < disc->disc_total_tracks &&
cd_msf_to_frames(disc->disc_time) >=
cd_msf_to_frames(disc->disc_track[disc->disc_current_track].track_pos) )
disc->disc_current_track++;
}
return 0;
}
disc->disc_total_tracks hasn't been initialized yet (0xCDCDCDCD), and it's
being used
to determine how many tracks get added :-(
the fix:
the disc_info struct being passed in is a member variable of
class CDPMO:public PhysicalMediaOutput
in it's Init function,
Error CDPMO::Init(OutputInfo *info)
the class zeroes out that member variable: (line 216)
memset(&dinfo, 0, sizeof(struct disc_info));
but it's already used the member by that time, (line 196)
if (cd_stat(m_cdDesc, &dinfo, false) < 0) {
===
the fix is to move the memset line of code to somewhere near the beginning
of the
CDPMO::Init() function.
-Jason
_______________________________________________
[EMAIL PROTECTED]
http://www.freeamp.org/mailman/listinfo/freeamp-dev