mirror of
https://github.com/DreamSourceLab/DSView.git
synced 2025-01-23 13:42:55 +08:00
Decode the data while collection the data, the step 1
This commit is contained in:
parent
21799ffe00
commit
bf05fdf055
@ -66,6 +66,7 @@ DecoderStack::DecoderStack(pv::SigSession *session,
|
|||||||
_mark_index = -1;
|
_mark_index = -1;
|
||||||
_decoder_status = decoder_status;
|
_decoder_status = decoder_status;
|
||||||
_stask_stauts = NULL;
|
_stask_stauts = NULL;
|
||||||
|
_is_capture_end = true;
|
||||||
|
|
||||||
_stack.push_back(new decode::Decoder(dec));
|
_stack.push_back(new decode::Decoder(dec));
|
||||||
|
|
||||||
@ -610,8 +611,6 @@ void DecoderStack::execute_decode_stack()
|
|||||||
// Get the intial sample count
|
// Get the intial sample count
|
||||||
_sample_count = _snapshot->get_sample_count();
|
_sample_count = _snapshot->get_sample_count();
|
||||||
|
|
||||||
dsv_info("%s%llu", "decoder sample count: ", _sample_count);
|
|
||||||
|
|
||||||
// Create the decoders
|
// Create the decoders
|
||||||
for(auto dec : _stack)
|
for(auto dec : _stack)
|
||||||
{
|
{
|
||||||
@ -630,9 +629,15 @@ void DecoderStack::execute_decode_stack()
|
|||||||
|
|
||||||
prev_di = di;
|
prev_di = di;
|
||||||
decode_start = dec->decode_start();
|
decode_start = dec->decode_start();
|
||||||
decode_end = min(dec->decode_end(), _sample_count-1);
|
|
||||||
|
if (_session->is_realtime_mode() == false)
|
||||||
|
decode_end = min(dec->decode_end(), _sample_count-1);
|
||||||
|
else
|
||||||
|
decode_end = max(dec->decode_end(), decode_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dsv_info("decoder start sample:%llu, end sample:%llu, count:%llu", decode_start, decode_end, decode_end - decode_start + 1);
|
||||||
|
|
||||||
// Start the session
|
// Start the session
|
||||||
srd_session_metadata_set(session, SRD_CONF_SAMPLERATE,
|
srd_session_metadata_set(session, SRD_CONF_SAMPLERATE,
|
||||||
g_variant_new_uint64((uint64_t)_samplerate));
|
g_variant_new_uint64((uint64_t)_samplerate));
|
||||||
|
@ -164,6 +164,14 @@ public:
|
|||||||
return _decoder_status;
|
return _decoder_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool is_capture_end(){
|
||||||
|
return _is_capture_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void set_capture_end_flag(bool isEnd){
|
||||||
|
_is_capture_end = isEnd;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void decode_data(const uint64_t decode_start, const uint64_t decode_end, srd_session *const session);
|
void decode_data(const uint64_t decode_start, const uint64_t decode_end, srd_session *const session);
|
||||||
void execute_decode_stack();
|
void execute_decode_stack();
|
||||||
@ -196,6 +204,7 @@ private:
|
|||||||
|
|
||||||
decode_task_status *_stask_stauts;
|
decode_task_status *_stask_stauts;
|
||||||
mutable std::mutex _output_mutex;
|
mutable std::mutex _output_mutex;
|
||||||
|
bool _is_capture_end;
|
||||||
|
|
||||||
friend class DecoderStackTest::TwoDecoderStack;
|
friend class DecoderStackTest::TwoDecoderStack;
|
||||||
};
|
};
|
||||||
|
@ -74,6 +74,7 @@ public:
|
|||||||
#define DSV_MSG_COLLECT_END 5004
|
#define DSV_MSG_COLLECT_END 5004
|
||||||
#define DSV_MSG_END_COLLECT_WORK_PREV 5005
|
#define DSV_MSG_END_COLLECT_WORK_PREV 5005
|
||||||
#define DSV_MSG_END_COLLECT_WORK 5006
|
#define DSV_MSG_END_COLLECT_WORK 5006
|
||||||
|
#define DSV_MSG_REV_END_PACKET 5007
|
||||||
|
|
||||||
#define DSV_MSG_DEVICE_LIST_UPDATED 6000
|
#define DSV_MSG_DEVICE_LIST_UPDATED 6000
|
||||||
#define DSV_MSG_BEGIN_DEVICE_OPTIONS 6001 //Begin show device options dialog.
|
#define DSV_MSG_BEGIN_DEVICE_OPTIONS 6001 //Begin show device options dialog.
|
||||||
|
@ -478,6 +478,23 @@ namespace pv
|
|||||||
_is_working = true;
|
_is_working = true;
|
||||||
_callback->trigger_message(DSV_MSG_START_COLLECT_WORK);
|
_callback->trigger_message(DSV_MSG_START_COLLECT_WORK);
|
||||||
|
|
||||||
|
if (_device_agent.get_work_mode() == LOGIC)
|
||||||
|
{
|
||||||
|
for (auto de : _decode_traces)
|
||||||
|
{
|
||||||
|
de->decoder()->set_capture_end_flag(false);
|
||||||
|
|
||||||
|
// On real-time mode, create the decode task when capture started.
|
||||||
|
if (is_realtime_mode())
|
||||||
|
{
|
||||||
|
de->decoder()->frame_ended();
|
||||||
|
de->frame_ended();
|
||||||
|
add_decode_task(de);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start a timer, for able to refresh the view per (1000 / 30)ms
|
||||||
if (is_realtime_mode()){
|
if (is_realtime_mode()){
|
||||||
_refresh_rt_timer.Start(1000 / 30);
|
_refresh_rt_timer.Start(1000 / 30);
|
||||||
}
|
}
|
||||||
@ -1251,12 +1268,11 @@ namespace pv
|
|||||||
_dso_data->snapshot()->capture_ended();
|
_dso_data->snapshot()->capture_ended();
|
||||||
_analog_data->snapshot()->capture_ended();
|
_analog_data->snapshot()->capture_ended();
|
||||||
|
|
||||||
for (auto trace : _decode_traces)
|
int mode = _device_agent.get_work_mode();
|
||||||
{
|
|
||||||
trace->decoder()->frame_ended();
|
// Post a message to start all decode tasks.
|
||||||
trace->frame_ended();
|
if (mode == LOGIC)
|
||||||
add_decode_task(trace);
|
_callback->trigger_message(DSV_MSG_REV_END_PACKET);
|
||||||
}
|
|
||||||
|
|
||||||
if (packet->status != SR_PKT_OK)
|
if (packet->status != SR_PKT_OK)
|
||||||
{
|
{
|
||||||
@ -1266,10 +1282,8 @@ namespace pv
|
|||||||
|
|
||||||
_callback->frame_ended();
|
_callback->frame_ended();
|
||||||
|
|
||||||
if (_device_agent.get_work_mode() != LOGIC)
|
if (mode != LOGIC)
|
||||||
{
|
|
||||||
set_session_time(QDateTime::currentDateTime());
|
set_session_time(QDateTime::currentDateTime());
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1943,7 +1957,7 @@ namespace pv
|
|||||||
|
|
||||||
case DSV_MSG_TRIG_NEXT_COLLECT:
|
case DSV_MSG_TRIG_NEXT_COLLECT:
|
||||||
{
|
{
|
||||||
if (_is_working)
|
if (_is_working && is_repeat_mode())
|
||||||
{
|
{
|
||||||
if (_repeat_intvl > 0)
|
if (_repeat_intvl > 0)
|
||||||
{
|
{
|
||||||
@ -1974,6 +1988,25 @@ namespace pv
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DSV_MSG_REV_END_PACKET:
|
||||||
|
{
|
||||||
|
if (_device_agent.get_work_mode() == LOGIC)
|
||||||
|
{
|
||||||
|
for (auto de : _decode_traces)
|
||||||
|
{
|
||||||
|
de->decoder()->set_capture_end_flag(true);
|
||||||
|
|
||||||
|
// If is not the real-time mode, try to create all decode tasks.
|
||||||
|
if (is_realtime_mode() == false){
|
||||||
|
de->decoder()->frame_ended();
|
||||||
|
de->frame_ended();
|
||||||
|
add_decode_task(de);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case DSV_MSG_COLLECT_END:
|
case DSV_MSG_COLLECT_END:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -374,7 +374,6 @@ private:
|
|||||||
void set_cur_snap_samplerate(uint64_t samplerate);
|
void set_cur_snap_samplerate(uint64_t samplerate);
|
||||||
void math_disable();
|
void math_disable();
|
||||||
|
|
||||||
private:
|
|
||||||
bool exec_capture();
|
bool exec_capture();
|
||||||
void exit_capture();
|
void exit_capture();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user