Fix moodbar segfault when playing broken mp3
When playing a broken mp3 (eg empty file) clementine crashed if moodbar was enabled.
This commit is contained in:
parent
c0f4ab8591
commit
1ecee037c7
|
@ -158,13 +158,15 @@ void MoodbarBuilder::Normalize(QList<Rgb>* vals, double Rgb::*member) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray MoodbarBuilder::Finish(int width) {
|
QByteArray MoodbarBuilder::Finish(int width) {
|
||||||
Normalize(&frames_, &Rgb::r);
|
|
||||||
Normalize(&frames_, &Rgb::g);
|
|
||||||
Normalize(&frames_, &Rgb::b);
|
|
||||||
|
|
||||||
QByteArray ret;
|
QByteArray ret;
|
||||||
ret.resize(width * 3);
|
ret.resize(width * 3);
|
||||||
char* data = ret.data();
|
char* data = ret.data();
|
||||||
|
if (frames_.count() == 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
Normalize(&frames_, &Rgb::r);
|
||||||
|
Normalize(&frames_, &Rgb::g);
|
||||||
|
Normalize(&frames_, &Rgb::b);
|
||||||
|
|
||||||
for (int i = 0; i < width; ++i) {
|
for (int i = 0; i < width; ++i) {
|
||||||
Rgb rgb;
|
Rgb rgb;
|
||||||
|
|
|
@ -181,8 +181,10 @@ GstBusSyncReply MoodbarPipeline::BusCallbackSync(GstBus*, GstMessage* msg,
|
||||||
|
|
||||||
void MoodbarPipeline::Stop(bool success) {
|
void MoodbarPipeline::Stop(bool success) {
|
||||||
success_ = success;
|
success_ = success;
|
||||||
data_ = builder_->Finish(1000);
|
if (builder_ != nullptr) {
|
||||||
builder_.reset();
|
data_ = builder_->Finish(1000);
|
||||||
|
builder_.reset();
|
||||||
|
}
|
||||||
|
|
||||||
emit Finished(success);
|
emit Finished(success);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue