Hi,
I removed some mp3s and mixxx crashed when I tried to load one of the
removed tracks from library. There was no check if the file exists in
slotLoadPlayer2 (track.cpp), so I copied one from slotLoadPlayer1.
Greetings,
Martin
Index: src/track.cpp
===================================================================
--- src/track.cpp (revision 1889)
+++ src/track.cpp (working copy)
@@ -841,6 +841,7 @@
return;
}
}
+ else return; // empty filename
if (m_pTrackPlayer1)
{
@@ -895,6 +896,22 @@
void Track::slotLoadPlayer2(TrackInfoObject * pTrackInfoObject, bool bStartFromEndPos)
{
+ QString filename = pTrackInfoObject->getLocation();
+ if (!filename.isEmpty())
+ {
+ // Check if filename is valid
+ QFileInfo finfo(filename);
+ if (!finfo.exists())
+ {
+ qDebug() << "Song in library not found on at" << filename << "on disk.";
+ qDebug() << "Removing from library...";
+ m_pTrackCollection->removeTrack(pTrackInfoObject); //Remove the track from the library.
+ m_pView->m_pTrackTableView->repaintEverything(); //Refresh the library view.
+ return;
+ }
+ }
+ else return; // empty filename
+
if (m_pTrackPlayer2)
{
m_pTrackPlayer2->setOverviewWidget(0);
@@ -921,7 +938,6 @@
// Set waveform summary display
m_pTrackPlayer2->setOverviewWidget(m_pView->m_pOverviewCh2);
- m_pTrackPlayer2->setDurationControlObject(ControlObject::getControl(ConfigKey("[Channel2]","duration")));
// Set control for beat start position for use in EngineTemporal and
// VisualTemporalBuffer. HACK.
@@ -931,6 +947,7 @@
// Set Engine file BPM ControlObject
m_pTrackPlayer2->setBpmControlObject(ControlObject::getControl(ConfigKey("[Channel2]","file_bpm")));
+ m_pTrackPlayer2->setDurationControlObject(ControlObject::getControl(ConfigKey("[Channel2]","duration")));
// Set duration in playpos widget
// if (m_pView->m_pNumberPosCh2)
Index: src/soundsourcemp3.cpp
===================================================================
--- src/soundsourcemp3.cpp (revision 1889)
+++ src/soundsourcemp3.cpp (working copy)
@@ -83,7 +83,10 @@
//qDebug("channels %i",m_iChannels);
// Find average frame size
- m_iAvgFrameSize = length()/currentframe;
+ if(currentframe)
+ m_iAvgFrameSize = length()/currentframe;
+ else
+ m_iAvgFrameSize = 0;
mad_header_finish (&Header);
if (currentframe==0)
@@ -608,7 +611,7 @@
int SoundSourceMp3::findFrame(int pos)
{
// Guess position of frame in m_qSeekList based on average frame size
- MadSeekFrameType * temp = m_qSeekList.at(math_min(m_qSeekList.count()-1, (unsigned int)(pos/m_iAvgFrameSize)));
+ MadSeekFrameType * temp = m_qSeekList.at(math_min(m_qSeekList.count()-1, m_iAvgFrameSize ? (unsigned int)(pos/m_iAvgFrameSize) : 0));
/*
if (temp!=0)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel