#include "puzzled_frame.hh"
#include <DataFormats/clb_common_header.hh>
#include <DataFormats/infoword.hh>
#include "input_buffer_collector.hh"
#include <string.h>
#include <log.hh>
#include <utility>
#include <stdexcept>
Go to the source code of this file.
uint32_t calculate_number_of_items |
( |
Frame const & |
frame | ) |
|
Definition at line 35 of file puzzled_frame.cc.
38 uint32_t
const frame_length = frame.size();
40 uint32_t
const data_type = frame.getHeader()->DataType;
45 InfoWord
const*
const iw =
static_cast<const InfoWord*
>(
46 static_cast<const void*
>(frame.getPayload()));
48 const unsigned int audiowordsize = iw->audioWordSize();
50 nitems = (frame_length
55 throw std::runtime_error(
"Unknown data type");
bool is_acoustic(unsigned int dt)
bool is_optical(unsigned int dt)
std::vector< JHit > data_type
std::pair<unsigned int, unsigned int> opt_boundaries |
( |
CLBDataGram const & |
dg, |
|
|
std::size_t |
max_size |
|
) |
| |
Definition at line 89 of file puzzled_frame.cc.
93 std::size_t
const previous_packets_size =
94 dg.getCLBCommonHeader()->udpSequenceNumber()
97 std::size_t
const chunk_in_previous = previous_packets_size % 6;
99 unsigned int const head =
101 ? 6 - chunk_in_previous
104 unsigned int const tail =
107 return std::make_pair(head, tail);
Definition at line 116 of file puzzled_frame.cc.
124 ||
c.begin()->second->getCLBCommonHeader()->udpSequenceNumber() == 0
126 &&
"Precondition failed."
129 uint32_t current_seq_number = 0;
130 unsigned int previous_chunk = 0;
132 std::size_t
const max_size =
c.begin()->second->size();
137 PuzzledFrame::container_t::const_iterator it =
c.begin(), et =
c.end();
150 << current_seq_number
151 <<
" not present in optical frame "
153 <<
". Packet loss(?)";
157 char*
const dest = &frame.front() + size - previous_chunk;
159 std::size_t
const write_size = dg.
getPayloadSize() - bounds.first;
161 std::memcpy(dest, dg.
getPayload() + bounds.first, write_size);
163 size += write_size - previous_chunk;
165 char*
const dest = &frame.front() + size;
169 std::memcpy(dest, dg.
getPayload(), write_size);
175 previous_chunk = bounds.second;
181 if (previous_chunk != 0) {
182 LOG_DEBUG <<
"Missing last datagram(s) in optical frame "
184 <<
". Packet loss (?).";
187 size -= previous_chunk;
192 if (!
isTrailer(*
c.rbegin()->second->getCLBCommonHeader())) {
193 LOG_DEBUG <<
"Missing trailer in optical frame "
const char * getPayload() const
const CLBCommonHeader * getCLBCommonHeader() const
size_t getPayloadSize() const
void add(std::string const &tag)
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
std::pair< unsigned int, unsigned int > opt_boundaries(CLBDataGram const &dg, std::size_t max_size)
std::pair<unsigned int, unsigned int> acou_boundaries |
( |
CLBDataGram const & |
dg, |
|
|
std::size_t |
max_size, |
|
|
std::size_t |
item_size |
|
) |
| |
Definition at line 202 of file puzzled_frame.cc.
207 unsigned int head = 0;
208 unsigned int tail = 0;
210 if (dg.getCLBCommonHeader()->udpSequenceNumber() != 0) {
211 std::size_t
const previous_audio_size =
212 dg.getCLBCommonHeader()->udpSequenceNumber()
216 std::size_t
const chunk_in_previous = previous_audio_size % item_size;
218 head = chunk_in_previous ? item_size - chunk_in_previous : 0;
223 tail = (dg.size() -
sizeof(
CLBCommonHeader) -
sizeof(InfoWord)) % item_size;
226 return std::make_pair(head, tail);
Definition at line 234 of file puzzled_frame.cc.
239 uint32_t current_seq_number = 0;
240 unsigned int previous_chunk = 0;
242 std::size_t
const max_size =
c.begin()->second->size();
246 InfoWord
const& iw = *
static_cast<const InfoWord*
>(
247 static_cast<const void*
>(
c.begin()->second->getPayload()));
249 unsigned int const audio_word_size = iw.audioWordSize();
252 PuzzledFrame::container_t::const_iterator it =
c.begin(), et =
c.end();
266 << current_seq_number
267 <<
" not present in acoustic frame "
269 <<
". Packet loss(?)";
273 size -= previous_chunk;
276 char*
const dest = &frame.front() + size;
285 ++current_seq_number;
286 previous_chunk = bounds.second;
292 if (previous_chunk != 0) {
293 LOG_DEBUG <<
"Missing last datagram(s) in acoustic frame "
295 <<
". Packet loss (?).";
298 size -= previous_chunk;
const char * getPayload() const
const CLBCommonHeader * getCLBCommonHeader() const
size_t getPayloadSize() const
void add(std::string const &tag)
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
std::pair< unsigned int, unsigned int > acou_boundaries(CLBDataGram const &dg, std::size_t max_size, std::size_t item_size)