trailing bits are removed even if reorder false and bitlist empty

This commit is contained in:
mazzol_a 2025-03-12 16:38:18 +01:00
parent a74fb2bcd1
commit 3c79e8d7b2
2 changed files with 34 additions and 6 deletions

View File

@ -358,13 +358,13 @@ void DataProcessor::ProcessAnImage(sls_receiver_header &header, size_t &size,
if (framePadding && nump < generalData->packetsPerFrame) if (framePadding && nump < generalData->packetsPerFrame)
PadMissingPackets(header, data); PadMissingPackets(header, data);
if (reorder && ctbDbitList.empty()) { // rearrange ctb digital bits
Reorder(size, data);
}
// rearrange ctb digital bits (if ctbDbitlist is not empty)
if (!ctbDbitList.empty()) { if (!ctbDbitList.empty()) {
ArrangeDbitData(size, data); ArrangeDbitData(size, data);
} else if (reorder) {
Reorder(size, data);
} else if (ctbDbitOffset > 0) {
RemoveTrailingBits(size, data);
} }
// 'stream Image' check has to be done here before crop image // 'stream Image' check has to be done here before crop image
@ -536,6 +536,29 @@ void DataProcessor::PadMissingPackets(sls_receiver_header header, char *data) {
} }
} }
void DataProcessor::RemoveTrailingBits(size_t &size, char *data) {
const size_t nAnalogDataBytes = generalData->GetNumberOfAnalogDatabytes();
const size_t nDigitalDataBytes = generalData->GetNumberOfDigitalDatabytes();
const size_t nTransceiverDataBytes =
generalData->GetNumberOfTransceiverDatabytes();
const size_t ctbDigitalDataBytes = nDigitalDataBytes - ctbDbitOffset;
// no digital data
if (ctbDigitalDataBytes == 0) {
LOG(logWARNING)
<< "No digital data for call back, yet ctbDbitOffset is non zero.";
return;
}
// update size and copy data
memmove(data + nAnalogDataBytes,
data + nAnalogDataBytes + ctbDigitalDataBytes,
ctbDigitalDataBytes + nTransceiverDataBytes);
size = nAnalogDataBytes + ctbDigitalDataBytes + nTransceiverDataBytes;
}
void DataProcessor::Reorder(size_t &size, char *data) { void DataProcessor::Reorder(size_t &size, char *data) {
const size_t nAnalogDataBytes = generalData->GetNumberOfAnalogDatabytes(); const size_t nAnalogDataBytes = generalData->GetNumberOfAnalogDatabytes();
const size_t nDigitalDataBytes = generalData->GetNumberOfDigitalDatabytes(); const size_t nDigitalDataBytes = generalData->GetNumberOfDigitalDatabytes();

View File

@ -107,6 +107,11 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
*/ */
void Reorder(size_t &size, char *data); void Reorder(size_t &size, char *data);
/**
* remove trailing bits in digital data stream
*/
void RemoveTrailingBits(size_t &size, char *data);
private: private:
void RecordFirstIndex(uint64_t fnum); void RecordFirstIndex(uint64_t fnum);
@ -172,7 +177,7 @@ class DataProcessor : private virtual slsDetectorDefs, public ThreadObject {
uint32_t streamingTimerInMs; uint32_t streamingTimerInMs;
uint32_t streamingStartFnum; uint32_t streamingStartFnum;
uint32_t currentFreqCount{0}; uint32_t currentFreqCount{0};
struct timespec timerbegin {}; struct timespec timerbegin{};
bool framePadding; bool framePadding;
std::vector<int> ctbDbitList; std::vector<int> ctbDbitList;
bool reorder{false}; // true if data should be reordered TODO: add as mode bool reorder{false}; // true if data should be reordered TODO: add as mode