//TODO: auto add new depend libraries information void about() { #if QTAV_HAVE(WIDGETS) //we should use new because a qobject will delete it's children QTextBrowser *viewQtAV = new QTextBrowser; QTextBrowser *viewFFmpeg = new QTextBrowser; viewQtAV->setOpenExternalLinks(true); viewFFmpeg->setOpenExternalLinks(true); viewQtAV->setHtml(aboutQtAV_HTML()); viewFFmpeg->setHtml(aboutFFmpeg_HTML()); QTabWidget *tab = new QTabWidget; tab->addTab(viewQtAV, "QtAV"); tab->addTab(viewFFmpeg, "FFmpeg"); QPushButton *btn = new QPushButton(QObject::tr("Ok")); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->addStretch(); btnLayout->addWidget(btn); QDialog dialog; dialog.setWindowTitle(QObject::tr("About") + " QtAV"); QVBoxLayout *layout = new QVBoxLayout; dialog.setLayout(layout); layout->addWidget(tab); layout->addLayout(btnLayout); QObject::connect(btn, SIGNAL(clicked()), &dialog, SLOT(accept())); dialog.exec(); #else aboutQtAV(); aboutFFmpeg(); #endif //QTAV_HAVE(WIDGETS) }
AVPlayer::AVPlayer(QObject *parent) : QObject(parent),loaded(false),capture_dir("capture"),_renderer(0),_audio(0) ,event_filter(0),video_capture(0) { qDebug("%s", aboutQtAV().toUtf8().constData()); /* * call stop() before the window(_renderer) closed to stop the waitcondition * If close the _renderer widget, the the _renderer may destroy before waking up. */ connect(qApp, SIGNAL(aboutToQuit()), SLOT(stop())); clock = new AVClock(AVClock::AudioClock); //clock->setClockType(AVClock::ExternalClock); demuxer.setClock(clock); connect(&demuxer, SIGNAL(started()), clock, SLOT(start())); #if HAVE_OPENAL _audio = new AOOpenAL(); #elif HAVE_PORTAUDIO _audio = new AOPortAudio(); #endif audio_dec = new AudioDecoder(); audio_thread = new AudioThread(this); audio_thread->setClock(clock); //audio_thread->setPacketQueue(&audio_queue); audio_thread->setDecoder(audio_dec); audio_thread->setOutput(_audio); video_dec = new VideoDecoder(); video_thread = new VideoThread(this); video_thread->setClock(clock); video_thread->setDecoder(video_dec); demuxer_thread = new AVDemuxThread(this); demuxer_thread->setDemuxer(&demuxer); demuxer_thread->setAudioThread(audio_thread); demuxer_thread->setVideoThread(video_thread); setPlayerEventFilter(new EventFilter(this)); setVideoCapture(new VideoCapture()); }