Fix crash while updating RGB parade and waveform

Closes #6349.
This commit is contained in:
Lawrence Lee
2021-09-02 21:52:59 -07:00
parent 38f15e1852
commit 0db17f99dd
2 changed files with 6 additions and 1 deletions

View File

@@ -1181,7 +1181,8 @@ void HistogramArea::update(
bhistRaw = histBlueRaw; bhistRaw = histBlueRaw;
break; break;
case ScopeType::PARADE: case ScopeType::PARADE:
case ScopeType::WAVEFORM: case ScopeType::WAVEFORM: {
MyWriterLock wave_lock(wave_mutex);
waveform_scale = waveformScale; waveform_scale = waveformScale;
rwave = waveformRed; rwave = waveformRed;
gwave = waveformGreen; gwave = waveformGreen;
@@ -1189,6 +1190,7 @@ void HistogramArea::update(
lwave = waveformLuma; lwave = waveformLuma;
parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = true; parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = true;
break; break;
}
case ScopeType::VECTORSCOPE_HS: case ScopeType::VECTORSCOPE_HS:
vectorscope_scale = vectorscopeScale; vectorscope_scale = vectorscopeScale;
vect_hs = vectorscopeHS; vect_hs = vectorscopeHS;
@@ -1313,6 +1315,7 @@ void HistogramArea::updateBackBuffer ()
cr->unset_dash(); cr->unset_dash();
MyReaderLock wave_lock(wave_mutex);
if (valid && (scopeType == ScopeType::HISTOGRAM || scopeType == ScopeType::HISTOGRAM_RAW)) { if (valid && (scopeType == ScopeType::HISTOGRAM || scopeType == ScopeType::HISTOGRAM_RAW)) {
bool rawMode = scopeType == ScopeType::HISTOGRAM_RAW; bool rawMode = scopeType == ScopeType::HISTOGRAM_RAW;
@@ -1429,6 +1432,7 @@ void HistogramArea::updateBackBuffer ()
} else if (scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS) { } else if (scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS) {
drawVectorscope(cr, w, h); drawVectorscope(cr, w, h);
} }
wave_lock.release();
// Draw the frame's border // Draw the frame's border
style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height()); style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height());

View File

@@ -169,6 +169,7 @@ protected:
bool vect_hc_buffer_dirty, vect_hs_buffer_dirty; bool vect_hc_buffer_dirty, vect_hs_buffer_dirty;
int waveform_scale; int waveform_scale;
array2D<int> rwave, gwave, bwave, lwave; array2D<int> rwave, gwave, bwave, lwave;
MyRWMutex wave_mutex;
std::vector<unsigned char> parade_buffer_r; std::vector<unsigned char> parade_buffer_r;
std::vector<unsigned char> parade_buffer_g; std::vector<unsigned char> parade_buffer_g;
std::vector<unsigned char> parade_buffer_b; std::vector<unsigned char> parade_buffer_b;