[beast/devel: 7/28] BSE: FLAC: handle errors which call flac error callback
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/devel: 7/28] BSE: FLAC: handle errors which call flac error callback
- Date: Sat, 4 May 2013 03:52:49 +0000 (UTC)
commit 231f8a2137f8102be2cf1082837ba5236ea7045c
Author: Stefan Westerfeld <stefan space twc de>
Date: Fri Mar 8 15:25:32 2013 +0100
BSE: FLAC: handle errors which call flac error callback
bse/bsedatahandle-flac.cc | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/bse/bsedatahandle-flac.cc b/bse/bsedatahandle-flac.cc
index 59c59cc..4d89e2a 100644
--- a/bse/bsedatahandle-flac.cc
+++ b/bse/bsedatahandle-flac.cc
@@ -61,11 +61,19 @@ private:
}
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
+
+ // pass error status from flac callback to caller
+ bool m_error_occurred;
+ FLAC__StreamDecoderErrorStatus m_error_status;
+
static void
flac_error_callback (const FLAC__StreamDecoder *decoder,
FLAC__StreamDecoderErrorStatus status,
void *client_data)
{
+ DataHandleFlac *dh = static_cast<DataHandleFlac *> (client_data);
+ dh->m_error_occurred = true;
+ dh->m_error_status = status;
}
protected:
@@ -143,7 +151,11 @@ public:
if (voffset >= m_buffer_start + m_buffer.size())
{
// try to read on, probably we'll have just the samples we need, then
- FLAC__bool mdok = FLAC__stream_decoder_process_single (m_decoder);
+ m_error_occurred = false;
+ FLAC__bool decode_ok = FLAC__stream_decoder_process_single (m_decoder);
+
+ if (!decode_ok || m_error_occurred)
+ return -1;
}
if (voffset >= m_buffer_start && voffset < m_buffer_start + m_buffer.size())
@@ -155,8 +167,9 @@ public:
}
// need to seek to get to the right location
+ m_error_occurred = false;
FLAC__bool seek_ok = FLAC__stream_decoder_seek_absolute (m_decoder, voffset / m_n_channels);
- if (!seek_ok)
+ if (!seek_ok || m_error_occurred)
return -1;
if (voffset == m_buffer_start)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]