|
|
|
@ -35,6 +35,10 @@
@@ -35,6 +35,10 @@
|
|
|
|
|
#include "UDPLink.h" |
|
|
|
|
#include <QDebug> |
|
|
|
|
|
|
|
|
|
QByteArray imageRecBuffer1 = QByteArray(376*240,255); |
|
|
|
|
QByteArray imageRecBuffer2 = QByteArray(376*240,255); |
|
|
|
|
static int part = 0; |
|
|
|
|
|
|
|
|
|
QGCVideoMainWindow::QGCVideoMainWindow(QWidget *parent) : |
|
|
|
|
QMainWindow(parent), |
|
|
|
|
link(QHostAddress::Any, 5555), |
|
|
|
@ -70,29 +74,179 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
@@ -70,29 +74,179 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
|
|
|
|
|
// Output bytes and load Lenna!
|
|
|
|
|
|
|
|
|
|
QString bytes; |
|
|
|
|
QString index; |
|
|
|
|
QString ascii; |
|
|
|
|
for (int i=0; i<data.size(); i++) { |
|
|
|
|
unsigned char v = data[i]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO FIXME Fabian
|
|
|
|
|
// RAW hardcoded to 22x22
|
|
|
|
|
int imgWidth = 376; |
|
|
|
|
int imgHeight = 240; |
|
|
|
|
int imgColors = 255; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//const int headerSize = 15;
|
|
|
|
|
|
|
|
|
|
// Construct PGM header
|
|
|
|
|
QString header("P5\n%1 %2\n%3\n"); |
|
|
|
|
header = header.arg(imgWidth).arg(imgHeight).arg(imgColors); |
|
|
|
|
|
|
|
|
|
unsigned char i0 = data[0]; |
|
|
|
|
|
|
|
|
|
switch (i0) |
|
|
|
|
{ |
|
|
|
|
case 0x01: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x02: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 2; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x03: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*2] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*2] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 4; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x04: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*3] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*3] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 8; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x05: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*4] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*4] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 16; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x06: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*5] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*5] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 32; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x07: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*6] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*6] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 64; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 0x08: |
|
|
|
|
{ |
|
|
|
|
for (int i=4; i<data.size()/4; i++) |
|
|
|
|
{ |
|
|
|
|
imageRecBuffer1[i+45124/4*7] = data[i*4]; |
|
|
|
|
imageRecBuffer2[i+45124/4*7] = data[i*4+1]; |
|
|
|
|
} |
|
|
|
|
part = part | 128; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(part==255) |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
QByteArray tmpImage1(header.toStdString().c_str(), header.toStdString().size()); |
|
|
|
|
tmpImage1.append(imageRecBuffer1); |
|
|
|
|
QByteArray tmpImage2(header.toStdString().c_str(), header.toStdString().size()); |
|
|
|
|
tmpImage2.append(imageRecBuffer2); |
|
|
|
|
|
|
|
|
|
// Load image into window
|
|
|
|
|
//QImage test(":images/patterns/lenna.jpg");
|
|
|
|
|
QImage image1; |
|
|
|
|
QImage image2; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (imageRecBuffer1.isNull()) |
|
|
|
|
{ |
|
|
|
|
qDebug()<< "could not convertToPGM()"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!image1.loadFromData(tmpImage1, "PGM")) |
|
|
|
|
{ |
|
|
|
|
qDebug()<< "could not create extracted image1"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (imageRecBuffer2.isNull()) |
|
|
|
|
{ |
|
|
|
|
qDebug()<< "could not convertToPGM()"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!image2.loadFromData(tmpImage2, "PGM")) |
|
|
|
|
{ |
|
|
|
|
qDebug()<< "could not create extracted image2"; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
tmpImage1.clear(); |
|
|
|
|
tmpImage2.clear(); |
|
|
|
|
//ui->video1Widget->copyImage(test);
|
|
|
|
|
ui->video2Widget->copyImage(image1); |
|
|
|
|
ui->video3Widget->copyImage(image2); |
|
|
|
|
//ui->video4Widget->copyImage(test);
|
|
|
|
|
part = 0; |
|
|
|
|
imageRecBuffer1.clear(); |
|
|
|
|
imageRecBuffer2.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
index.append(QString().sprintf("%02x ", i0)); |
|
|
|
|
|
|
|
|
|
for (int j=0; j<data.size(); j++) { |
|
|
|
|
unsigned char v = data[j]; |
|
|
|
|
bytes.append(QString().sprintf("%02x ", v)); |
|
|
|
|
if (data.at(i) > 31 && data.at(i) < 127) |
|
|
|
|
if (data.at(j) > 31 && data.at(j) < 127) |
|
|
|
|
{ |
|
|
|
|
ascii.append(data.at(i)); |
|
|
|
|
ascii.append(data.at(j)); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
ascii.append(219); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
qDebug() << "Received" << data.size() << "bytes"; |
|
|
|
|
qDebug() << bytes; |
|
|
|
|
qDebug() << "ASCII:" << ascii; |
|
|
|
|
qDebug() << "index: " <<index; |
|
|
|
|
//qDebug() << bytes;
|
|
|
|
|
//qDebug() << "ASCII:" << ascii;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Load image into window
|
|
|
|
|
QImage test(":images/patterns/lenna.jpg"); |
|
|
|
|
|
|
|
|
|
ui->video1Widget->copyImage(test); |
|
|
|
|
ui->video2Widget->copyImage(test); |
|
|
|
|
ui->video3Widget->copyImage(test); |
|
|
|
|
ui->video4Widget->copyImage(test); |
|
|
|
|
} |
|
|
|
|