int main(int argc, char *argv[]) { QApplication a(argc, argv); QVideoWidget *videoOutputWidget = new QVideoWidget(); QMediaPlayer *player = new QMediaPlayer(); QVideoProbe *probe = new QVideoProbe(); DemoCoq* demo = new DemoCoq(); QTimer* timer = new QTimer(); probe->setSource(player); player->setMedia(QUrl::fromLocalFile("C:/Users/louis/Desktop/Cinefeel/Video.avi")); player->setVideoOutput(videoOutputWidget); videoOutputWidget->show(); player->play(); demo->connect(timer, SIGNAL(timeout()), SLOT(updateColor())); timer->start(1000 / 10); demo->addAPIConnector(new APIConnector("192.168.43.254:34000")); // demo->addAPIConnector(new APIConnector("192.168.43.254:34000")); // demo->addAPIConnector(new APIConnector("192.168.43.254:34000")); // demo->addAPIConnector(new APIConnector("192.168.43.254:34000")); //demo.launch(); VideoDebugger *videoDebugger = new VideoDebugger((QObject *)0, true); QObject::connect(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), videoDebugger, SLOT(mediaCheck(QMediaPlayer::MediaStatus))); QObject::connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), videoDebugger, SLOT(processFrame(QVideoFrame))); return a.exec(); }
void QmlCameraSource::start() { if (view == nullptr) { qWarning() << "No view. Cannot find QML Camera"; return; } QObject *qmlCamera = view->rootObject()->findChild<QObject*>("qrCameraQML"); if (qmlCamera == nullptr) { qWarning() << "Cannot find QML camera object"; return; } camera = qvariant_cast<QCamera*>(qmlCamera->property("mediaObject")); if (camera == nullptr) { qWarning() << "Cannot retrieve camera from qml object"; return; } LOG_INFO() << camera->supportedViewfinderResolutions(); LOG_INFO() << camera->viewfinderSettings().resolution(); connect(&probe,SIGNAL(videoFrameProbed(QVideoFrame)),this,SLOT(onFrame(QVideoFrame))); probe.setSource(camera); connect(view, SIGNAL(closing(QQuickCloseEvent)), qApp, SLOT(quit())); }
VideoThumbnailer::Private::Private(VideoThumbnailer* const parent) : QObject(parent), createStrip(false), thumbSize(ThumbnailSize::Huge), isReady(false), player(0), probe(0), media(0), errorCount(0), position(0), dd(parent) { player = new QMediaPlayer(this); probe = new QVideoProbe(this); connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(slotHandlePlayerError())); connect(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(slotMediaStatusChanged(QMediaPlayer::MediaStatus))); connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(slotProcessframe(QVideoFrame))); strip = QImage::fromData(sprocket_large_png, sprocket_large_png_len, "PNG"); isReady = true; }
/*! Destroys this probe and disconnects from any media object. */ QVideoProbe::~QVideoProbe() { if (d->source) { // Disconnect if (d->probee) { disconnect(d->probee.data(), SIGNAL(videoFrameProbed(QVideoFrame)), this, SIGNAL(videoFrameProbed(QVideoFrame))); disconnect(d->probee.data(), SIGNAL(flush()), this, SIGNAL(flush())); } d->source.data()->service()->releaseControl(d->probee.data()); } }
/*! Sets the media object to monitor to \a source. If \a source is zero, this probe will be deactivated and this function wil return true. If the media object does not support monitoring video, this function will return false. Any previously monitored objects will no longer be monitored. Passing in the same object will be ignored, but monitoring will continue. */ bool QVideoProbe::setSource(QMediaObject *source) { // Need to: // 1) disconnect from current source if necessary // 2) see if new one has the probe control // 3) connect if so // in case source was destroyed but probe control is still valid if (!d->source && d->probee) { disconnect(d->probee.data(), SIGNAL(videoFrameProbed(QVideoFrame)), this, SIGNAL(videoFrameProbed(QVideoFrame))); disconnect(d->probee.data(), SIGNAL(flush()), this, SIGNAL(flush())); d->probee.clear(); } if (source != d->source.data()) { if (d->source) { Q_ASSERT(d->probee); disconnect(d->probee.data(), SIGNAL(videoFrameProbed(QVideoFrame)), this, SIGNAL(videoFrameProbed(QVideoFrame))); disconnect(d->probee.data(), SIGNAL(flush()), this, SIGNAL(flush())); d->source.data()->service()->releaseControl(d->probee.data()); d->source.clear(); d->probee.clear(); } if (source) { QMediaService *service = source->service(); if (service) { d->probee = service->requestControl<QMediaVideoProbeControl*>(); } if (d->probee) { connect(d->probee.data(), SIGNAL(videoFrameProbed(QVideoFrame)), this, SIGNAL(videoFrameProbed(QVideoFrame))); connect(d->probee.data(), SIGNAL(flush()), this, SIGNAL(flush())); d->source = source; } } } return (!source || d->probee != 0); }
void MyProbe::setQmlCamera(QObject *qmlCamera) { this->_qmlCamera = qmlCamera; if (_qmlCamera) { _camera = qvariant_cast<QCamera*>(_qmlCamera->property("mediaObject")); if (_probe.setSource(_camera)) { connect(&_probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(processFrame(QVideoFrame))); } else qDebug() << "Couln't set qmlCamera to C++ backend!"; } }
xcorr::xcorr(QWidget *parent) : QWidget(parent) { // Create needed objects player = new QMediaPlayer(this); probe = new QVideoProbe(this); // Connect objects // 'probe' will eavesdrop the frames "displayed" by 'player' probe->setSource(player); // when 'probe' eavesdropped a frame call 'processFrame' connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(processFrame(QVideoFrame))); // Do heavy stuff on a new Thread m_processor.moveToThread(&m_processorThread); qRegisterMetaType<QVector<qreal> >("QVector<qreal>"); connect(&m_processor, SIGNAL(dataReady(int,int)), SLOT(addData(int,int))); m_processorThread.start(QThread::HighPriority); }
Player::Player(QWidget *parent) : QWidget(parent) , videoWidget(0) , coverLabel(0) , slider(0) #ifndef PLAYER_NO_COLOROPTIONS , colorDialog(0) #endif { //! [create-objs] player = new QMediaPlayer(this); // owned by PlaylistModel playlist = new QMediaPlaylist(); player->setPlaylist(playlist); //! [create-objs] connect(player, SIGNAL(durationChanged(qint64)), SLOT(durationChanged(qint64))); connect(player, SIGNAL(positionChanged(qint64)), SLOT(positionChanged(qint64))); connect(player, SIGNAL(metaDataChanged()), SLOT(metaDataChanged())); connect(playlist, SIGNAL(currentIndexChanged(int)), SLOT(playlistPositionChanged(int))); connect(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), this, SLOT(statusChanged(QMediaPlayer::MediaStatus))); connect(player, SIGNAL(bufferStatusChanged(int)), this, SLOT(bufferingProgress(int))); connect(player, SIGNAL(videoAvailableChanged(bool)), this, SLOT(videoAvailableChanged(bool))); connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(displayErrorMessage())); //! [2] videoWidget = new VideoWidget(this); player->setVideoOutput(videoWidget); playlistModel = new PlaylistModel(this); playlistModel->setPlaylist(playlist); //! [2] playlistView = new QListView(this); playlistView->setModel(playlistModel); playlistView->setCurrentIndex(playlistModel->index(playlist->currentIndex(), 0)); connect(playlistView, SIGNAL(activated(QModelIndex)), this, SLOT(jump(QModelIndex))); slider = new QSlider(Qt::Horizontal, this); slider->setRange(0, player->duration() / SLIDER_DIVISOR); labelDuration = new QLabel(this); connect(slider, SIGNAL(sliderMoved(int)), this, SLOT(seek(int))); labelHistogram = new QLabel(this); labelHistogram->setText("Histogram:"); histogram = new HistogramWidget(this); QHBoxLayout *histogramLayout = new QHBoxLayout; histogramLayout->addWidget(labelHistogram); histogramLayout->addWidget(histogram, 1); probe = new QVideoProbe(this); connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), histogram, SLOT(processFrame(QVideoFrame))); probe->setSource(player); QPushButton *openButton = new QPushButton(tr("Open"), this); connect(openButton, SIGNAL(clicked()), this, SLOT(open())); PlayerControls *controls = new PlayerControls(this); controls->setState(player->state()); controls->setVolume(player->volume()); controls->setMuted(controls->isMuted()); connect(controls, SIGNAL(play()), player, SLOT(play())); connect(controls, SIGNAL(pause()), player, SLOT(pause())); connect(controls, SIGNAL(stop()), player, SLOT(stop())); connect(controls, SIGNAL(next()), playlist, SLOT(next())); connect(controls, SIGNAL(previous()), this, SLOT(previousClicked())); connect(controls, SIGNAL(changeVolume(int)), player, SLOT(setVolume(int))); connect(controls, SIGNAL(changeMuting(bool)), player, SLOT(setMuted(bool))); connect(controls, SIGNAL(changeRate(qreal)), player, SLOT(setPlaybackRate(qreal))); connect(controls, SIGNAL(stop()), videoWidget, SLOT(update())); connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), controls, SLOT(setState(QMediaPlayer::State))); connect(player, SIGNAL(volumeChanged(int)), controls, SLOT(setVolume(int))); connect(player, SIGNAL(mutedChanged(bool)), controls, SLOT(setMuted(bool))); fullScreenButton = new QPushButton(tr("FullScreen"), this); fullScreenButton->setCheckable(true); #ifndef PLAYER_NO_COLOROPTIONS colorButton = new QPushButton(tr("Color Options..."), this); colorButton->setEnabled(false); connect(colorButton, SIGNAL(clicked()), this, SLOT(showColorDialog())); #endif QBoxLayout *displayLayout = new QHBoxLayout; displayLayout->addWidget(videoWidget, 2); displayLayout->addWidget(playlistView); QBoxLayout *controlLayout = new QHBoxLayout; controlLayout->setMargin(0); controlLayout->addWidget(openButton); controlLayout->addStretch(1); controlLayout->addWidget(controls); controlLayout->addStretch(1); controlLayout->addWidget(fullScreenButton); #ifndef PLAYER_NO_COLOROPTIONS controlLayout->addWidget(colorButton); #endif QBoxLayout *layout = new QVBoxLayout; layout->addLayout(displayLayout); QHBoxLayout *hLayout = new QHBoxLayout; hLayout->addWidget(slider); hLayout->addWidget(labelDuration); layout->addLayout(hLayout); layout->addLayout(controlLayout); layout->addLayout(histogramLayout); setLayout(layout); if (!player->isAvailable()) { QMessageBox::warning(this, tr("Service not available"), tr("The QMediaPlayer object does not have a valid service.\n"\ "Please check the media service plugins are installed.")); controls->setEnabled(false); playlistView->setEnabled(false); openButton->setEnabled(false); #ifndef PLAYER_NO_COLOROPTIONS colorButton->setEnabled(false); #endif fullScreenButton->setEnabled(false); } metaDataChanged(); QStringList arguments = qApp->arguments(); arguments.removeAt(0); addToPlaylist(arguments); }
void QAndroidMediaVideoProbeControl::newFrameProbed(const QVideoFrame &frame) { emit videoFrameProbed(frame); }