#pragma once #include #include namespace dsp { namespace meteor { const uint64_t MSUMR_SYNC_WORD = 0x0218A7A392DD9ABF; const uint8_t MSUMR_SYNC_BYTES[8] = { 0x02, 0x18, 0xA7, 0xA3, 0x92, 0xDD, 0x9A, 0xBF }; class MSUMRDemux : public generic_block { public: MSUMRDemux() {} MSUMRDemux(stream* in) { init(in); } void init(stream* in) { _in = in; generic_block::registerInput(_in); generic_block::registerOutput(&msumr1Out); generic_block::registerOutput(&msumr2Out); generic_block::registerOutput(&msumr3Out); generic_block::registerOutput(&msumr4Out); generic_block::registerOutput(&msumr5Out); generic_block::registerOutput(&msumr6Out); generic_block::_block_init = true; } void setInput(stream* in) { assert(generic_block::_block_init); std::lock_guard lck(generic_block::ctrlMtx); generic_block::tempStop(); generic_block::unregisterInput(_in); _in = in; generic_block::registerInput(_in); generic_block::tempStart(); } int run() { int count = _in->read(); if (count < 0) { return -1; } int pixels = 0; for (int i = 0; i < 11790; i += 30) { for (int j = 0; j < 4; j++) { msumr1Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10), 10, _in->readBuf); msumr2Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 1), 10, _in->readBuf); msumr3Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 2), 10, _in->readBuf); msumr4Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 3), 10, _in->readBuf); msumr5Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 4), 10, _in->readBuf); msumr6Out.writeBuf[pixels + j] = (uint16_t)readBits((50 * 8) + (i * 8) + (j * 10) + (40 * 5), 10, _in->readBuf); } pixels += 4; } if (!msumr1Out.swap(1572)) { return -1; } if (!msumr2Out.swap(1572)) { return -1; } if (!msumr3Out.swap(1572)) { return -1; } if (!msumr4Out.swap(1572)) { return -1; } if (!msumr5Out.swap(1572)) { return -1; } if (!msumr6Out.swap(1572)) { return -1; } _in->flush(); return count; } stream msumr1Out; stream msumr2Out; stream msumr3Out; stream msumr4Out; stream msumr5Out; stream msumr6Out; private: stream* _in; }; } }