Commit 3100bc8d authored by DreamSourceLab's avatar DreamSourceLab

Merge branch 'release-v0.95'

Conflicts:
	NEWS
parents 1cd64200 dc3263c0
......@@ -103,7 +103,7 @@ set(DS_DESCRIPTION "A GUI for instruments of DreamSourceLab")
set(DS_VERSION_MAJOR 0)
set(DS_VERSION_MINOR 9)
set(DS_VERSION_MICRO 4)
set(DS_VERSION_MICRO 5)
set(DS_VERSION_STRING
${DS_VERSION_MAJOR}.${DS_VERSION_MINOR}.${DS_VERSION_MICRO}
)
......@@ -144,6 +144,7 @@ set(DSView_SOURCES
pv/dialogs/storeprogress.cpp
pv/dialogs/streamoptions.cpp
pv/dialogs/waitingdialog.cpp
pv/dialogs/dsomeasure.cpp
pv/dock/dsotriggerdock.cpp
pv/dock/measuredock.cpp
pv/dock/searchdock.cpp
......@@ -189,6 +190,7 @@ set(DSView_HEADERS
pv/dialogs/storeprogress.h
pv/dialogs/streamoptions.h
pv/dialogs/waitingdialog.h
pv/dialogs/dsomeasure.h
pv/dock/dsotriggerdock.h
pv/dock/measuredock.h
pv/dock/searchdock.h
......
......@@ -24,8 +24,8 @@
<file>icons/start.png</file>
<file>icons/dsl_logo.png</file>
<file>icons/logo.png</file>
<file>icons/decoder-hidden.png</file>
<file>icons/decoder-shown.png</file>
<file>icons/hidden.png</file>
<file>icons/shown.png</file>
<file>icons/instant.png</file>
<file>icons/trigger_dis.png</file>
<file>icons/file_dis.png</file>
......@@ -55,5 +55,6 @@
<file>icons/instant_dis_cn.png</file>
<file>icons/start_dis.png</file>
<file>icons/start_dis_cn.png</file>
<file>icons/settings.png</file>
</qresource>
</RCC>
......@@ -3,4 +3,6 @@ rm ./cmake_install.cmake
rm -r ./CMakeFiles
rm ./Makefile
rm ./CMakeCache.txt
find . -name 'moc_*.cpp*' | xargs rm -rf
find . -name 'qrc_*.cpp' | xargs rm -rf
echo "rm cmake cache end..."
DSView/icons/about.png

5.95 KB | W: | H:

DSView/icons/about.png

954 Bytes | W: | H:

DSView/icons/about.png
DSView/icons/about.png
DSView/icons/about.png
DSView/icons/about.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/add.png

198 Bytes | W: | H:

DSView/icons/add.png

260 Bytes | W: | H:

DSView/icons/add.png
DSView/icons/add.png
DSView/icons/add.png
DSView/icons/add.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/capture.png

5.87 KB | W: | H:

DSView/icons/capture.png

860 Bytes | W: | H:

DSView/icons/capture.png
DSView/icons/capture.png
DSView/icons/capture.png
DSView/icons/capture.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/del.png

566 Bytes | W: | H:

DSView/icons/del.png

624 Bytes | W: | H:

DSView/icons/del.png
DSView/icons/del.png
DSView/icons/del.png
DSView/icons/del.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/down-arrow.png

165 Bytes | W: | H:

DSView/icons/down-arrow.png

248 Bytes | W: | H:

DSView/icons/down-arrow.png
DSView/icons/down-arrow.png
DSView/icons/down-arrow.png
DSView/icons/down-arrow.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/dsl_logo.png

16.4 KB | W: | H:

DSView/icons/dsl_logo.png

16 KB | W: | H:

DSView/icons/dsl_logo.png
DSView/icons/dsl_logo.png
DSView/icons/dsl_logo.png
DSView/icons/dsl_logo.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/file.png

1.16 KB | W: | H:

DSView/icons/file.png

1012 Bytes | W: | H:

DSView/icons/file.png
DSView/icons/file.png
DSView/icons/file.png
DSView/icons/file.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/file_dis.png

811 Bytes | W: | H:

DSView/icons/file_dis.png

641 Bytes | W: | H:

DSView/icons/file_dis.png
DSView/icons/file_dis.png
DSView/icons/file_dis.png
DSView/icons/file_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/gear.png

1.54 KB | W: | H:

DSView/icons/gear.png

1.97 KB | W: | H:

DSView/icons/gear.png
DSView/icons/gear.png
DSView/icons/gear.png
DSView/icons/gear.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/instant.png

1.22 KB | W: | H:

DSView/icons/instant.png

1.06 KB | W: | H:

DSView/icons/instant.png
DSView/icons/instant.png
DSView/icons/instant.png
DSView/icons/instant.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/logo.png

15.8 KB | W: | H:

DSView/icons/logo.png

15.6 KB | W: | H:

DSView/icons/logo.png
DSView/icons/logo.png
DSView/icons/logo.png
DSView/icons/logo.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/logo_color.png

2.34 KB | W: | H:

DSView/icons/logo_color.png

2.15 KB | W: | H:

DSView/icons/logo_color.png
DSView/icons/logo_color.png
DSView/icons/logo_color.png
DSView/icons/logo_color.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/logo_noColor.png

1.86 KB | W: | H:

DSView/icons/logo_noColor.png

1.68 KB | W: | H:

DSView/icons/logo_noColor.png
DSView/icons/logo_noColor.png
DSView/icons/logo_noColor.png
DSView/icons/logo_noColor.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/measure.png

1.26 KB | W: | H:

DSView/icons/measure.png

1.11 KB | W: | H:

DSView/icons/measure.png
DSView/icons/measure.png
DSView/icons/measure.png
DSView/icons/measure.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/measure_dis.png

1.14 KB | W: | H:

DSView/icons/measure_dis.png

1002 Bytes | W: | H:

DSView/icons/measure_dis.png
DSView/icons/measure_dis.png
DSView/icons/measure_dis.png
DSView/icons/measure_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/next.png

5.73 KB | W: | H:

DSView/icons/next.png

699 Bytes | W: | H:

DSView/icons/next.png
DSView/icons/next.png
DSView/icons/next.png
DSView/icons/next.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/open.png

5.67 KB | W: | H:

DSView/icons/open.png

692 Bytes | W: | H:

DSView/icons/open.png
DSView/icons/open.png
DSView/icons/open.png
DSView/icons/open.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/params.png

1.35 KB | W: | H:

DSView/icons/params.png

1.18 KB | W: | H:

DSView/icons/params.png
DSView/icons/params.png
DSView/icons/params.png
DSView/icons/params.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/params_dis.png

1.31 KB | W: | H:

DSView/icons/params_dis.png

1.13 KB | W: | H:

DSView/icons/params_dis.png
DSView/icons/params_dis.png
DSView/icons/params_dis.png
DSView/icons/params_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/pre.png

5.71 KB | W: | H:

DSView/icons/pre.png

681 Bytes | W: | H:

DSView/icons/pre.png
DSView/icons/pre.png
DSView/icons/pre.png
DSView/icons/pre.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/protocol.png

1.11 KB | W: | H:

DSView/icons/protocol.png

967 Bytes | W: | H:

DSView/icons/protocol.png
DSView/icons/protocol.png
DSView/icons/protocol.png
DSView/icons/protocol.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/protocol_dis.png

1.06 KB | W: | H:

DSView/icons/protocol_dis.png

931 Bytes | W: | H:

DSView/icons/protocol_dis.png
DSView/icons/protocol_dis.png
DSView/icons/protocol_dis.png
DSView/icons/protocol_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/save.png

5.53 KB | W: | H:

DSView/icons/save.png

502 Bytes | W: | H:

DSView/icons/save.png
DSView/icons/save.png
DSView/icons/save.png
DSView/icons/save.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/search-bar.png

1.65 KB | W: | H:

DSView/icons/search-bar.png

1.48 KB | W: | H:

DSView/icons/search-bar.png
DSView/icons/search-bar.png
DSView/icons/search-bar.png
DSView/icons/search-bar.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/search-bar_dis.png

1.53 KB | W: | H:

DSView/icons/search-bar_dis.png

1.36 KB | W: | H:

DSView/icons/search-bar_dis.png
DSView/icons/search-bar_dis.png
DSView/icons/search-bar_dis.png
DSView/icons/search-bar_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/search.png

251 Bytes | W: | H:

DSView/icons/search.png

313 Bytes | W: | H:

DSView/icons/search.png
DSView/icons/search.png
DSView/icons/search.png
DSView/icons/search.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/slider-handle.png

1.15 KB | W: | H:

DSView/icons/slider-handle.png

1.18 KB | W: | H:

DSView/icons/slider-handle.png
DSView/icons/slider-handle.png
DSView/icons/slider-handle.png
DSView/icons/slider-handle.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/start.png

1.21 KB | W: | H:

DSView/icons/start.png

1.05 KB | W: | H:

DSView/icons/start.png
DSView/icons/start.png
DSView/icons/start.png
DSView/icons/start.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/stop.png

789 Bytes | W: | H:

DSView/icons/stop.png

628 Bytes | W: | H:

DSView/icons/stop.png
DSView/icons/stop.png
DSView/icons/stop.png
DSView/icons/stop.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/trigger.png

1007 Bytes | W: | H:

DSView/icons/trigger.png

840 Bytes | W: | H:

DSView/icons/trigger.png
DSView/icons/trigger.png
DSView/icons/trigger.png
DSView/icons/trigger.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/trigger_dis.png

978 Bytes | W: | H:

DSView/icons/trigger_dis.png

820 Bytes | W: | H:

DSView/icons/trigger_dis.png
DSView/icons/trigger_dis.png
DSView/icons/trigger_dis.png
DSView/icons/trigger_dis.png
  • 2-up
  • Swipe
  • Onion skin
DSView/icons/wiki.png

2.55 KB | W: | H:

DSView/icons/wiki.png

2.72 KB | W: | H:

DSView/icons/wiki.png
DSView/icons/wiki.png
DSView/icons/wiki.png
DSView/icons/wiki.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -47,7 +47,7 @@ const float AnalogSnapshot::LogEnvelopeScaleFactor =
const uint64_t AnalogSnapshot::EnvelopeDataUnit = 64*1024; // bytes
AnalogSnapshot::AnalogSnapshot(const sr_datafeed_analog &analog, uint64_t _total_sample_len, unsigned int channel_num) :
Snapshot(sizeof(uint16_t), _total_sample_len, channel_num)
Snapshot(sizeof(uint16_t)*channel_num, _total_sample_len, channel_num)
{
boost::lock_guard<boost::recursive_mutex> lock(_mutex);
memset(_envelope_levels, 0, sizeof(_envelope_levels));
......@@ -66,7 +66,7 @@ void AnalogSnapshot::append_payload(
const sr_datafeed_analog &analog)
{
boost::lock_guard<boost::recursive_mutex> lock(_mutex);
append_data(analog.data, analog.num_samples);
append_data(analog.data, analog.num_samples);
// Generate the first mip-map from the data
append_payload_to_envelope_levels();
......
......@@ -40,15 +40,20 @@ Annotation::Annotation(const srd_proto_data *const pdata) :
(const srd_proto_data_annotation*)pdata->data;
assert(pda);
_format = pda->ann_class;
_format = pda->ann_class;
const char *const *annotations = (char**)pda->ann_text;
const char *const *annotations = (char**)pda->ann_text;
while(*annotations) {
_annotations.push_back(QString::fromUtf8(*annotations));
_annotations.push_back(QString::fromUtf8(*annotations));
annotations++;
}
}
Annotation::~Annotation()
{
_annotations.clear();
}
uint64_t Annotation::start_sample() const
{
return _start_sample;
......
......@@ -35,6 +35,7 @@ class Annotation
{
public:
Annotation(const srd_proto_data *const pdata);
~Annotation();
uint64_t start_sample() const;
uint64_t end_sample() const;
......
......@@ -46,6 +46,10 @@ Decoder::~Decoder()
for (map<string, GVariant*>::const_iterator i = _options.begin();
i != _options.end(); i++)
g_variant_unref((*i).second);
for (map<string, GVariant*>::const_iterator i = _options_back.begin();
i != _options_back.end(); i++)
g_variant_unref((*i).second);
}
const srd_decoder* Decoder::decoder() const
......@@ -130,6 +134,7 @@ set< shared_ptr<pv::data::Logic> > Decoder::get_data()
srd_decoder_inst* Decoder::create_decoder_inst(srd_session *session, int unit_size) const
{
(void)unit_size;
GHashTable *const opt_hash = g_hash_table_new_full(g_str_hash,
g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
......@@ -164,7 +169,7 @@ srd_decoder_inst* Decoder::create_decoder_inst(srd_session *session, int unit_si
g_hash_table_insert(probes, (*i).first->id, gvar);
}
srd_inst_channel_set_all(decoder_inst, probes, unit_size);
srd_inst_channel_set_all(decoder_inst, probes);
return decoder_inst;
}
......
......@@ -38,6 +38,11 @@ Row::Row(const srd_decoder *decoder, const srd_decoder_annotation_row *row) :
{
}
Row::~Row()
{
}
const srd_decoder* Row::decoder() const
{
return _decoder;
......
......@@ -36,6 +36,7 @@ class Row
{
public:
Row();
~Row();
Row(const srd_decoder *decoder,
const srd_decoder_annotation_row *row = NULL);
......
......@@ -34,6 +34,11 @@ RowData::RowData() :
{
}
RowData::~RowData()
{
_annotations.clear();
}
uint64_t RowData::get_max_sample() const
{
if (_annotations.empty())
......
......@@ -33,6 +33,7 @@ class RowData
{
public:
RowData();
~RowData();
public:
uint64_t get_max_sample() const;
......
......@@ -88,6 +88,8 @@ DecoderStack::~DecoderStack()
// _decode_thread.join();
// }
stop_decode();
_stack.clear();
clear();
}
const std::list< boost::shared_ptr<decode::Decoder> >&
......@@ -335,7 +337,7 @@ void DecoderStack::decode_data(
{
//uint8_t chunk[DecodeChunkLength];
uint8_t *chunk = NULL;
chunk = (uint8_t *)realloc(chunk, DecodeChunkLength);
//chunk = (uint8_t *)realloc(chunk, DecodeChunkLength);
const uint64_t chunk_sample_count =
DecodeChunkLength / _snapshot->unit_size();
......@@ -349,10 +351,10 @@ void DecoderStack::decode_data(
const uint64_t chunk_end = min(
i + chunk_sample_count, sample_count);
_snapshot->get_samples(chunk, i, chunk_end);
chunk = _snapshot->get_samples(i, chunk_end);
if (srd_session_send(session, i, i + sample_count, chunk,
(chunk_end - i) * unit_size) != SRD_OK) {
(chunk_end - i) * unit_size, unit_size) != SRD_OK) {
_error_message = tr("Decoder reported an error");
break;
}
......
......@@ -173,7 +173,7 @@ private:
QString _error_message;
std::auto_ptr<boost::thread> _decode_thread;
std::unique_ptr<boost::thread> _decode_thread;
decode_state _decode_state;
bool _options_changed;
......
......@@ -45,6 +45,8 @@ const float DsoSnapshot::LogEnvelopeScaleFactor =
logf(EnvelopeScaleFactor);
const uint64_t DsoSnapshot::EnvelopeDataUnit = 4*1024; // bytes
const int DsoSnapshot::VrmsScaleFactor = 1 << 8;
DsoSnapshot::DsoSnapshot(const sr_datafeed_dso &dso, uint64_t _total_sample_len, unsigned int channel_num, bool instant) :
Snapshot(sizeof(uint16_t), _total_sample_len, channel_num),
_envelope_en(false),
......@@ -73,14 +75,14 @@ void DsoSnapshot::append_payload(const sr_datafeed_dso &dso)
// Generate the first mip-map from the data
if (_envelope_en)
append_payload_to_envelope_levels();
append_payload_to_envelope_levels(dso.samplerate_tog);
}
}
void DsoSnapshot::enable_envelope(bool enable)
{
if (!_envelope_done & enable)
append_payload_to_envelope_levels();
if (!_envelope_done && enable)
append_payload_to_envelope_levels(true);
_envelope_en = enable;
}
......@@ -144,26 +146,25 @@ void DsoSnapshot::reallocate_envelope(Envelope &e)
}
}
void DsoSnapshot::append_payload_to_envelope_levels()
void DsoSnapshot::append_payload_to_envelope_levels(bool header)
{
unsigned int i;
for (i = 0; i < _channel_num; i++) {
for (unsigned int i = 0; i < _channel_num; i++) {
Envelope &e0 = _envelope_levels[i][0];
uint64_t prev_length;
EnvelopeSample *dest_ptr;
// Expand the data buffer to fit the new samples
prev_length = e0.length;
e0.length = get_sample_count() / EnvelopeScaleFactor;
if (header)
prev_length = 0;
else
prev_length = e0.length;
e0.length = _sample_count / EnvelopeScaleFactor;
// Break off if there are no new samples to compute
// if (e0.length == prev_length)
// return;
if (e0.length == 0)
return;
if (e0.length == prev_length)
prev_length = 0;
// Expand the data buffer to fit the new samples
reallocate_envelope(e0);
dest_ptr = e0.samples + prev_length;
......@@ -171,17 +172,6 @@ void DsoSnapshot::append_payload_to_envelope_levels()
// Iterate through the samples to populate the first level mipmap
const uint8_t *const stop_src_ptr = (uint8_t*)_data +
e0.length * EnvelopeScaleFactor * _channel_num;
// for (const uint16_t *src_ptr = (uint16_t*)_data +
// prev_length * EnvelopeScaleFactor;
// src_ptr < end_src_ptr; src_ptr += EnvelopeScaleFactor)
// {
// const EnvelopeSample sub_sample = {
// *min_element(src_ptr, src_ptr + EnvelopeScaleFactor),
// *max_element(src_ptr, src_ptr + EnvelopeScaleFactor),
// };
// *dest_ptr++ = sub_sample;
// }
for (const uint8_t *src_ptr = (uint8_t*)_data +
prev_length * EnvelopeScaleFactor * _channel_num + i;
src_ptr < stop_src_ptr; src_ptr += EnvelopeScaleFactor * _channel_num)
......@@ -194,14 +184,13 @@ void DsoSnapshot::append_payload_to_envelope_levels()
EnvelopeSample sub_sample;
sub_sample.min = *begin_src_ptr;
sub_sample.max = *begin_src_ptr;
begin_src_ptr += _channel_num;
//begin_src_ptr += _channel_num;
while (begin_src_ptr < end_src_ptr)
{
sub_sample.min = min(sub_sample.min, *begin_src_ptr);
sub_sample.max = max(sub_sample.max, *begin_src_ptr);
begin_src_ptr += _channel_num;
}
*dest_ptr++ = sub_sample;
}
......@@ -248,5 +237,72 @@ void DsoSnapshot::append_payload_to_envelope_levels()
_envelope_done = true;
}
double DsoSnapshot::cal_vrms(double zero_off, int index) const
{
assert(index >= 0);
assert(index < _channel_num);
// root-meam-squart value
double vrms_pre = 0;
double vrms = 0;
double tmp;
// Iterate through the samples to populate the first level mipmap
const uint8_t *const stop_src_ptr = (uint8_t*)_data +
_sample_count * _channel_num;
for (const uint8_t *src_ptr = (uint8_t*)_data + index;
src_ptr < stop_src_ptr; src_ptr += VrmsScaleFactor * _channel_num)
{
const uint8_t * begin_src_ptr =
src_ptr;
const uint8_t *const end_src_ptr =
src_ptr + VrmsScaleFactor * _channel_num;
while (begin_src_ptr < end_src_ptr)
{
tmp = (zero_off - *begin_src_ptr);
vrms += tmp * tmp;
begin_src_ptr += _channel_num;
}
vrms = vrms_pre + vrms / _sample_count;
vrms_pre = vrms;
}
vrms = std::pow(vrms, 0.5);
return vrms;
}
double DsoSnapshot::cal_vmean(int index) const
{
assert(index >= 0);
assert(index < _channel_num);
// mean value
double vmean_pre = 0;
double vmean = 0;
// Iterate through the samples to populate the first level mipmap
const uint8_t *const stop_src_ptr = (uint8_t*)_data +
_sample_count * _channel_num;
for (const uint8_t *src_ptr = (uint8_t*)_data + index;
src_ptr < stop_src_ptr; src_ptr += VrmsScaleFactor * _channel_num)
{
const uint8_t * begin_src_ptr =
src_ptr;
const uint8_t *const end_src_ptr =
src_ptr + VrmsScaleFactor * _channel_num;
while (begin_src_ptr < end_src_ptr)
{
vmean += *begin_src_ptr;
begin_src_ptr += _channel_num;
}
vmean = vmean_pre + vmean / _sample_count;
vmean_pre = vmean;
}
return vmean;
}
} // namespace data
} // namespace pv
......@@ -67,6 +67,8 @@ private:
static const float LogEnvelopeScaleFactor;
static const uint64_t EnvelopeDataUnit;
static const int VrmsScaleFactor;
public:
DsoSnapshot(const sr_datafeed_dso &dso, uint64_t _total_sample_len, unsigned int channel_num, bool instant);
......@@ -82,10 +84,13 @@ public:
void enable_envelope(bool enable);
double cal_vrms(double zero_off, int index) const;
double cal_vmean(int index) const;
private:
void reallocate_envelope(Envelope &l);
void append_payload_to_envelope_levels();
void append_payload_to_envelope_levels(bool header);
private:
struct Envelope _envelope_levels[2*DS_MAX_DSO_PROBES_NUM][ScaleStepCount];
......
......@@ -61,6 +61,37 @@ GroupSnapshot::GroupSnapshot(const boost::shared_ptr<LogicSnapshot> &_logic_snap
_sample_count = _logic_snapshot->get_sample_count();
_unit_size = _logic_snapshot->unit_size();
_index_list = index_list;
_mask = 0;
std::list<int>::iterator j = _index_list.begin();
while(j != _index_list.end())
_mask |= value_mask[(*j++)];
for (int i=0; i<32; i++) {
_bubble_start[i] = -1;
_bubble_end[i] = -1;
}
uint16_t mask = _mask;
int i = 0;
int k = 0;
int zero = 0;
int zero_pre = 0;
// max bubble count: 31
do {
if (mask & 0x1) {
if (_bubble_start[k] != -1 &&
_bubble_end[k] == -1)
_bubble_end[k++] = i - zero_pre;
} else {
if (_bubble_start[k] == -1) {
_bubble_start[k] = i - zero;
zero_pre = zero;
}
zero++;
}
i++;
}while(mask >>= 1);
append_payload();
}
......@@ -95,21 +126,25 @@ const uint16_t* GroupSnapshot::get_samples(
assert(start_sample <= end_sample);
int64_t i;
uint64_t pow;
uint16_t tmpl, tmpr;
boost::lock_guard<boost::recursive_mutex> lock(_mutex);
uint16_t *const data = new uint16_t[end_sample - start_sample];
// memcpy(data, (uint16_t*)_data + start_sample, sizeof(uint16_t) *
// (end_sample - start_sample));
memset(data, 0, sizeof(uint16_t) * (end_sample - start_sample));
// memset(data, 0, sizeof(uint16_t) * (end_sample - start_sample));
for(i = start_sample; i < end_sample; i++) {
std::list<int>::iterator j = _index_list.begin();
pow = 0;
while(j != _index_list.end()) {
*(data + i - start_sample) += ((*((uint16_t*)_data + i) & value_mask[(*j)]) >> ((*j) - pow));
pow++;
j++;
if (_unit_size == 2)
tmpl = *((uint16_t*)_data + i) & _mask;
else
tmpl = *((uint8_t*)_data + i) & _mask;
for(int j=0; _bubble_start[j] != -1; j++) {
tmpr = tmpl & (0xffff >> (16 - _bubble_start[j]));
tmpl >>= _bubble_end[j];
tmpl <<= _bubble_start[j];
tmpl += tmpr;
}
*(data + i - start_sample) = tmpl;
}
return data;
}
......@@ -170,61 +205,26 @@ void GroupSnapshot::append_payload_to_envelope_levels()
// Iterate through the samples to populate the first level mipmap
uint16_t group_value[EnvelopeScaleFactor];
const uint16_t *const end_src_ptr = (uint16_t*)_data +
e0.length * EnvelopeScaleFactor;
for (const uint16_t *src_ptr = (uint16_t*)_data +
prev_length * EnvelopeScaleFactor;
src_ptr < end_src_ptr; src_ptr += EnvelopeScaleFactor)
const uint8_t *const end_src_ptr = (uint8_t*)_data +
e0.length * EnvelopeScaleFactor * _unit_size;
for (const uint8_t *src_ptr = (uint8_t*)_data +
prev_length * EnvelopeScaleFactor * _unit_size;
src_ptr < end_src_ptr; src_ptr += EnvelopeScaleFactor * _unit_size)
{
int pow;
// for(i = 0; i < EnvelopeScaleFactor; i++) {
// group_value[i] = 0;
// std::list<int>::iterator j = _index_list.begin();
// pow = 0;
// while(j != _index_list.end()) {
// group_value[i] += ((*(src_ptr + i) & value_mask[(*j)]) >> ((*j) - pow));
// pow++;
// j++;
// }
// }
group_value[0] = 0;
group_value[1] = 0;
group_value[2] = 0;
group_value[3] = 0;
group_value[4] = 0;
group_value[5] = 0;
group_value[6] = 0;
group_value[7] = 0;
group_value[8] = 0;
group_value[9] = 0;
group_value[10] = 0;
group_value[11] = 0;
group_value[12] = 0;
group_value[13] = 0;
group_value[14] = 0;