/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * mainwindow.cc * * Thu Sep 18 19:30:14 CEST 2014 * Copyright 2014 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of SimpleRTP. * * SimpleRTP is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * SimpleRTP is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with SimpleRTP; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "mainwindow.h" #include #include MainWindow::MainWindow(QString v4ldev, QString adev, OutputStreamer &os, QList &isl) : v4l(v4ldev), aih(adev), ostreamer(os), islist(isl) { /* // Self view: connect(&v4l, SIGNAL(newImage(Frame)), this, SLOT(newImage(Frame))); */ setCentralWidget(new QLabel); memset(video, 0 ,sizeof(video)); int idx = 0; QList::iterator i = islist.begin(); while(i != islist.end()) { connect(*i, SIGNAL(newImage(int,Frame)), this, SLOT(newImage(int,Frame))); connect(*i, SIGNAL(newAudio(int,Frame)), &aoh, SLOT(newAudio(int,Frame))); video[idx] = new QLabel(NULL); video[idx]->resize(640,480); video[idx]->show(); i++; idx++; } /* connect(&aih, SIGNAL(newAudio(framelist_t)), this, SLOT(newAudio(framelist_t))); */ connect(&v4l, SIGNAL(newImage(Frame)), &ostreamer, SLOT(newImage(Frame))); connect(&aih, SIGNAL(newAudio(framelist_t)), &ostreamer, SLOT(newAudio(framelist_t))); connect(&status_timer, SIGNAL(timeout()), this, SLOT(updateStatus())); status_timer.start(1000); statusBar()->showMessage("Starting..."); } void MainWindow::updateStatus() { size_t ob = ostreamer.getTotal() / 60; size_t ib = 0; QList::iterator i = islist.begin(); while(i != islist.end()) { ib += (*i)->getTotal() / 60; i++; } QString iunit = "b/s"; if(ib > 1024) { ib /= 1024; iunit = "kb/s"; } QString ounit = "b/s"; if(ob > 1024) { ob /= 1024; ounit = "kb/s"; } QString status = "In: " + QString::number(ib) + iunit + " - " + "Out: " + QString::number(ob) + ounit ; statusBar()->showMessage(status); } void MainWindow::newImage(int peer, Frame frame) { if(peer >= 10 || video[peer] == NULL) return; QImage img; bool res = img.loadFromData((const uchar*)frame.data, frame.size, "JPG"); // printf("processImage() => %s\n", res?"true":"false"); if(img.isNull()) { printf("Invalid image\n"); return; } // printf("img->w: %d\n", img.width()); // printf("img->h: %d\n", img.height()) QLabel *l = video[peer]; QPixmap p; p.convertFromImage(img); l->setPixmap(p); free(frame.data); // printf("v"); fflush(stdout); }