Commit 7edb0918 authored by LM's avatar LM

Merge branch 'videostreaming' of https://github.com/fattonz/qgroundcontrol into v10release

parents 6454dd21 eda637f5
...@@ -37,7 +37,10 @@ ...@@ -37,7 +37,10 @@
QByteArray imageRecBuffer1 = QByteArray(376*240,255); QByteArray imageRecBuffer1 = QByteArray(376*240,255);
QByteArray imageRecBuffer2 = QByteArray(376*240,255); QByteArray imageRecBuffer2 = QByteArray(376*240,255);
QByteArray imageRecBuffer3 = QByteArray(376*240,255);
QByteArray imageRecBuffer4 = QByteArray(376*240,255);
static int part = 0; static int part = 0;
unsigned char last_id = 0;
QGCVideoMainWindow::QGCVideoMainWindow(QWidget *parent) : QGCVideoMainWindow::QGCVideoMainWindow(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
...@@ -75,6 +78,7 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data) ...@@ -75,6 +78,7 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
QString bytes; QString bytes;
QString index; QString index;
QString imageid;
QString ascii; QString ascii;
...@@ -93,90 +97,147 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data) ...@@ -93,90 +97,147 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
header = header.arg(imgWidth).arg(imgHeight).arg(imgColors); header = header.arg(imgWidth).arg(imgHeight).arg(imgColors);
unsigned char i0 = data[0]; unsigned char i0 = data[0];
unsigned char id = data[1];
index.append(QString().sprintf("%02x", i0));
imageid.append(QString().sprintf("%02x", id));
qDebug() << "Received" << data.size() << "bytes"<< " part: " <<index<< " imageid: " <<imageid;
switch (i0) switch (i0)
{ {
case 0x01: case 0x01:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{
imageRecBuffer1[i] = data[i*4+4];
imageRecBuffer2[i] = data[i*4+5]+127;
imageRecBuffer3[i] = data[i*4+6]+127;
imageRecBuffer4[i] = data[i*4+7];
}
if(id != last_id)
{ {
imageRecBuffer1[i] = data[i*4]; part = 0;
imageRecBuffer2[i] = data[i*4+1];
} }
part = part | 1; part = part | 1;
break; break;
} }
case 0x02: case 0x02:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{ {
imageRecBuffer1[i+45124/4] = data[i*4]; imageRecBuffer1[i+45120/4] = data[i*4+4];
imageRecBuffer2[i+45124/4] = data[i*4+1]; imageRecBuffer2[i+45120/4] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4] = data[i*4+7];
}
if(id != last_id)
{
part = 0;
} }
part = part | 2; part = part | 2;
break; break;
} }
case 0x03: case 0x03:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{
imageRecBuffer1[i+45120/4*2] = data[i*4+4];
imageRecBuffer2[i+45120/4*2] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*2] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*2] = data[i*4+7];
}
if(id != last_id)
{ {
imageRecBuffer1[i+45124/4*2] = data[i*4]; part = 0;
imageRecBuffer2[i+45124/4*2] = data[i*4+1];
} }
part = part | 4; part = part | 4;
break; break;
} }
case 0x04: case 0x04:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{ {
imageRecBuffer1[i+45124/4*3] = data[i*4]; imageRecBuffer1[i+45120/4*3] = data[i*4+4];
imageRecBuffer2[i+45124/4*3] = data[i*4+1]; imageRecBuffer2[i+45120/4*3] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*3] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*3] = data[i*4+7];
}
if(id != last_id)
{
part = 0;
} }
part = part | 8; part = part | 8;
break; break;
} }
case 0x05: case 0x05:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{
imageRecBuffer1[i+45120/4*4] = data[i*4+4];
imageRecBuffer2[i+45120/4*4] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*4] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*4] = data[i*4+7];
}
if(id != last_id)
{ {
imageRecBuffer1[i+45124/4*4] = data[i*4]; part = 0;
imageRecBuffer2[i+45124/4*4] = data[i*4+1];
} }
part = part | 16; part = part | 16;
break; break;
} }
case 0x06: case 0x06:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{ {
imageRecBuffer1[i+45124/4*5] = data[i*4]; imageRecBuffer1[i+45120/4*5] = data[i*4+4];
imageRecBuffer2[i+45124/4*5] = data[i*4+1]; imageRecBuffer2[i+45120/4*5] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*5] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*5] = data[i*4+7];
}
if(id != last_id)
{
part = 0;
} }
part = part | 32; part = part | 32;
break; break;
} }
case 0x07: case 0x07:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{ {
imageRecBuffer1[i+45124/4*6] = data[i*4]; imageRecBuffer1[i+45120/4*6] = data[i*4+4];
imageRecBuffer2[i+45124/4*6] = data[i*4+1]; imageRecBuffer2[i+45120/4*6] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*6] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*6] = data[i*4+7];
}
if(id != last_id)
{
part = 0;
} }
part = part | 64; part = part | 64;
break; break;
} }
case 0x08: case 0x08:
{ {
for (int i=4; i<data.size()/4; i++) for (int i=0; i<data.size()/4-1; i++)
{
imageRecBuffer1[i+45120/4*7] = data[i*4+4];
imageRecBuffer2[i+45120/4*7] = data[i*4+5]+127;
imageRecBuffer3[i+45120/4*7] = data[i*4+6]+127;
imageRecBuffer4[i+45120/4*7] = data[i*4+7];
}
if(id != last_id)
{ {
imageRecBuffer1[i+45124/4*7] = data[i*4]; part = 0;
imageRecBuffer2[i+45124/4*7] = data[i*4+1];
} }
part = part | 128; part = part | 128;
break; break;
} }
} }
last_id = id;
if(part==255) if(part==255)
{ {
...@@ -184,51 +245,84 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data) ...@@ -184,51 +245,84 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
tmpImage1.append(imageRecBuffer1); tmpImage1.append(imageRecBuffer1);
QByteArray tmpImage2(header.toStdString().c_str(), header.toStdString().size()); QByteArray tmpImage2(header.toStdString().c_str(), header.toStdString().size());
tmpImage2.append(imageRecBuffer2); tmpImage2.append(imageRecBuffer2);
QByteArray tmpImage3(header.toStdString().c_str(), header.toStdString().size());
tmpImage3.append(imageRecBuffer3);
QByteArray tmpImage4(header.toStdString().c_str(), header.toStdString().size());
tmpImage4.append(imageRecBuffer4);
// Load image into window // Load image into window
//QImage test(":images/patterns/lenna.jpg"); //QImage test(":images/patterns/lenna.jpg");
QImage image1; QImage image1;
QImage image2; QImage image2;
QImage image3;
QImage image4;
if (imageRecBuffer1.isNull()) if (imageRecBuffer1.isNull())
{ {
qDebug()<< "could not convertToPGM()"; qDebug()<< "could not convertToPGM()";
} }
if (!image1.loadFromData(tmpImage1, "PGM")) if (!image1.loadFromData(tmpImage1, "PGM"))
{ {
qDebug()<< "could not create extracted image1"; qDebug()<< "could not create extracted image1";
} }
if (imageRecBuffer2.isNull()) if (imageRecBuffer2.isNull())
{ {
qDebug()<< "could not convertToPGM()"; qDebug()<< "could not convertToPGM()";
} }
if (!image2.loadFromData(tmpImage2, "PGM")) if (!image2.loadFromData(tmpImage2, "PGM"))
{ {
qDebug()<< "could not create extracted image2"; qDebug()<< "could not create extracted image2";
} }
if (imageRecBuffer3.isNull())
{
qDebug()<< "could not convertToPGM()";
}
if (!image3.loadFromData(tmpImage3, "PGM"))
{
qDebug()<< "could not create extracted image3";
}
if (imageRecBuffer4.isNull())
{
qDebug()<< "could not convertToPGM()";
}
if (!image4.loadFromData(tmpImage4, "PGM"))
{
qDebug()<< "could not create extracted image3";
}
tmpImage1.clear(); tmpImage1.clear();
tmpImage2.clear(); tmpImage2.clear();
tmpImage3.clear();
tmpImage4.clear();
//ui->video1Widget->copyImage(test); //ui->video1Widget->copyImage(test);
ui->video2Widget->copyImage(image1); ui->video1Widget->copyImage(image1);
ui->video3Widget->copyImage(image2); ui->video2Widget->copyImage(image2);
//ui->video4Widget->copyImage(test); ui->video3Widget->copyImage(image3);
ui->video4Widget->copyImage(image4);
part = 0; part = 0;
imageRecBuffer1.clear(); imageRecBuffer1.clear();
imageRecBuffer2.clear(); imageRecBuffer2.clear();
imageRecBuffer3.clear();
imageRecBuffer4.clear();
} }
index.append(QString().sprintf("%02x ", i0));
for (int j=0; j<data.size(); j++) {
/* for (int j=0; j<data.size(); j++) {
unsigned char v = data[j]; unsigned char v = data[j];
bytes.append(QString().sprintf("%02x ", v)); bytes.append(QString().sprintf("%02x ", v));
if (data.at(j) > 31 && data.at(j) < 127) if (data.at(j) > 31 && data.at(j) < 127)
...@@ -240,9 +334,8 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data) ...@@ -240,9 +334,8 @@ void QGCVideoMainWindow::receiveBytes(LinkInterface* link, QByteArray data)
ascii.append(219); ascii.append(219);
} }
} }*/
qDebug() << "Received" << data.size() << "bytes";
qDebug() << "index: " <<index;
//qDebug() << bytes; //qDebug() << bytes;
//qDebug() << "ASCII:" << ascii; //qDebug() << "ASCII:" << ascii;
......
...@@ -129,7 +129,7 @@ QGCVideoWidget::QGCVideoWidget(QWidget* parent) ...@@ -129,7 +129,7 @@ QGCVideoWidget::QGCVideoWidget(QWidget* parent)
load(0.0f), load(0.0f),
offlineDirectory(""), offlineDirectory(""),
nextOfflineImage(""), nextOfflineImage(""),
hudInstrumentsEnabled(true), hudInstrumentsEnabled(false),
videoEnabled(false), videoEnabled(false),
xImageFactor(1.0), xImageFactor(1.0),
yImageFactor(1.0), yImageFactor(1.0),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment