diff options
-rw-r--r-- | client/decoder.cc | 3 | ||||
-rw-r--r-- | client/decoder.h | 5 | ||||
-rw-r--r-- | client/mainwindow.cc | 4 | ||||
-rw-r--r-- | client/miav_client.cc | 2 | ||||
-rw-r--r-- | client/networksender.cc | 17 | ||||
-rw-r--r-- | client/networksender.h | 8 | ||||
-rw-r--r-- | client/player.cc | 13 | ||||
-rw-r--r-- | client/xvaccelrenderer.cc | 10 | ||||
-rw-r--r-- | client/xvaccelrenderer.h | 5 |
9 files changed, 41 insertions, 26 deletions
diff --git a/client/decoder.cc b/client/decoder.cc index ef2185c..1a85db7 100644 --- a/client/decoder.cc +++ b/client/decoder.cc @@ -44,8 +44,9 @@ #include "libdv_wrapper.h" -Decoder::Decoder(): closesem(1) +Decoder::Decoder(NetworkSender *ns): closesem(1) { + sender = ns; running = true; memset(pframe, 0, sizeof(pframe)); // Init an empty frame qApp->installEventFilter(this); diff --git a/client/decoder.h b/client/decoder.h index 6cb6a22..a8fb4f9 100644 --- a/client/decoder.h +++ b/client/decoder.h @@ -32,12 +32,13 @@ #include <QMutex> #include "dv.h" +#include "networksender.h" class Decoder : public QThread { Q_OBJECT public: - Decoder(); + Decoder(NetworkSender *sender); ~Decoder(); char *getFrame(); @@ -60,6 +61,8 @@ private: char pframe[DVPACKAGE_SIZE]; // Player frame QMutex mutex; + + NetworkSender *sender; }; #endif/*__MIAV_DECODER_H__*/ diff --git a/client/mainwindow.cc b/client/mainwindow.cc index dd05b69..fa73a9e 100644 --- a/client/mainwindow.cc +++ b/client/mainwindow.cc @@ -152,11 +152,7 @@ void MainWindow::snapshot_clicked() { MIaV::control.shoot(); - char rgb[720 * 576 * 4]; - - // QImage screenshot((uchar*)rgb, 720, 576, QImage::Format_RGB32); QImage screenshot((uchar*)rgb, 720, 576, QImage::Format_RGB32); - // decoder->snapshot(rgb); decoder->snapshot((char*)screenshot.bits()); QPixmap *p = new QPixmap(); diff --git a/client/miav_client.cc b/client/miav_client.cc index e34eaf6..38b8894 100644 --- a/client/miav_client.cc +++ b/client/miav_client.cc @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) MIaV::initInfo(&info); NetworkSender sender; - Decoder decoder; + Decoder decoder(&sender); MainWindow mainwindow(&decoder); Player player(mainwindow.getVideoWidget(), &decoder); diff --git a/client/networksender.cc b/client/networksender.cc index 7b286aa..21c107c 100644 --- a/client/networksender.cc +++ b/client/networksender.cc @@ -29,11 +29,26 @@ #include "info.h" NetworkSender::NetworkSender() -{} +{ + ip = "192.168.0.10"; + port = 6666; +} NetworkSender::~NetworkSender() {} +void NetworkSender::newConnection(char *cpr) +{ +} + +void NetworkSender::pushFrame(char* frame, bool freeze, bool snapshot) +{ +} + +void NetworkSender::endConnection() +{ +} + void NetworkSender::run() { // MIaV::info->info("The NetworkSender thread is running."); diff --git a/client/networksender.h b/client/networksender.h index 9276ea3..89c522a 100644 --- a/client/networksender.h +++ b/client/networksender.h @@ -35,7 +35,15 @@ public: NetworkSender(); ~NetworkSender(); + void newConnection(char *cpr); + void pushFrame(char* frame, bool freeze, bool snapshot); + void endConnection(); + void run(); + +private: + std::string ip; + unsigned short port; }; #endif/*__MIAV_NETWORKSENDER_H__*/ diff --git a/client/player.cc b/client/player.cc index a7d0a7c..44e9cc9 100644 --- a/client/player.cc +++ b/client/player.cc @@ -29,14 +29,13 @@ #define WIDTH 720 #define HEIGHT 576 -Player::Player(QWidget *w, Decoder *d) +Player::Player(QWidget *w, Decoder *d) : + render(w, WIDTH, HEIGHT) { widget = w; decoder = d; dvdecoder = new LibDVWrapper(DV::ColorBest, DV::PAL, DV::YUV_422); - render.init(widget, WIDTH, HEIGHT); - connect(this, SIGNAL(timeout()), this, SLOT(show_frame())); dvdecoder->setOutputBuffer(render.getDisplayData()); @@ -44,7 +43,6 @@ Player::Player(QWidget *w, Decoder *d) Player::~Player() { - render.end(); delete dvdecoder; } @@ -53,9 +51,10 @@ void Player::show_frame() char *frame; frame = decoder->pframeAcquire(); // Acquire frame data - dvdecoder->decode(frame); + dvdecoder->decode(frame); // Decode the DV frame to YUV decoder->pframeRelease(); // Release frame data + // Scale the video in aspect: if((double)widget->width() / WIDTH < (double)widget->height() / HEIGHT) { render.width = widget->width(); render.height = (unsigned int)((double)render.width / (double)WIDTH * (double)HEIGHT); @@ -64,8 +63,6 @@ void Player::show_frame() render.width = (unsigned int)((double)render.height / (double)HEIGHT * (double)WIDTH); } - // render.width = widget->width(); - // render.height = widget->height(); - + // Display the YUV frame render.display(WIDTH, HEIGHT); } diff --git a/client/xvaccelrenderer.cc b/client/xvaccelrenderer.cc index 4ba8a9f..984c57a 100644 --- a/client/xvaccelrenderer.cc +++ b/client/xvaccelrenderer.cc @@ -30,28 +30,24 @@ #define VERBOSE_XV //________________Wrapper around Xv_______________ -XvAccelRender::XvAccelRender( void ) +XvAccelRender::XvAccelRender(QWidget *window, uint32_t w, uint32_t h) { xvimage = NULL; -} -uint8_t XvAccelRender::init(QWidget *window, uint32_t w, uint32_t h) -{ #ifdef VERBOSE_XV printf("Xv start\n"); #endif width = w; height = h; - return GUI_XvInit(window, w, h); + GUI_XvInit(window, w, h); } -uint8_t XvAccelRender::end(void) +XvAccelRender::~XvAccelRender() { GUI_XvEnd( ); #ifdef VERBOSE_XV printf("Xv end\n"); #endif - return 1; } char *XvAccelRender::getDisplayData() diff --git a/client/xvaccelrenderer.h b/client/xvaccelrenderer.h index 3d70e91..a9cd383 100644 --- a/client/xvaccelrenderer.h +++ b/client/xvaccelrenderer.h @@ -28,9 +28,8 @@ typedef unsigned int uint32_t; class XvAccelRender { public: - XvAccelRender(); - uint8_t init(QWidget *window, uint32_t w, uint32_t h); - uint8_t end(void); + XvAccelRender(QWidget *window, uint32_t w, uint32_t h); + ~XvAccelRender(); uint8_t display(uint32_t w, uint32_t h); unsigned int width, height; |