/****************************************************************************** VideoRendererTypes: type id and manually id register function Copyright (C) 2012-2016 Wang Bin * This file is part of QtAV (from 2015) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ******************************************************************************/ #include "global.h" #include #include #include #include #include #include #include "WidgetRenderer.h" #include "GraphicsItemRenderer.h" #if QTAV_HAVE(GL) #include "GLWidgetRenderer2.h" #endif //QTAV_HAVE(GL) #if QTAV_HAVE(GL1) #include "GLWidgetRenderer.h" #endif //QTAV_HAVE(GL1) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #ifndef QT_NO_OPENGL #include "OpenGLWidgetRenderer.h" #endif //QT_NO_OPENGL #endif #include "../factory.h" #include "../mkid.h" namespace FAV { VideoRendererId VideoRendererId_Widget = mkid::id32base36_6<'W', 'i', 'd', 'g', 'e', 't'>::value; VideoRendererId VideoRendererId_OpenGLWidget = mkid::id32base36_6<'Q', 'O', 'G', 'L', 'W', 't'>::value; #if (TEST_GRAPHIC_ACCEL) VideoRendererId VideoRendererId_GLWidget = mkid::id32base36_6<'Q', 'G', 'L', 'W', 't', '1'>::value; VideoRendererId VideoRendererId_GLWidget2 = mkid::id32base36_6<'Q', 'G', 'L', 'W', 't', '2'>::value; #endif //VideoRendererId VideoRendererId_GraphicsItem = mkid::id32base36_6<'Q', 'G', 'r', 'a', 'p', 'h'>::value; //VideoRendererId VideoRendererId_GDI = mkid::id32base36_3<'G', 'D', 'I'>::value; //VideoRendererId VideoRendererId_Direct2D = mkid::id32base36_3<'D', '2', 'D'>::value; //VideoRendererId VideoRendererId_XV = mkid::id32base36_6<'X', 'V', 'i', 'd', 'e', 'o'>::value; //VideoRendererId VideoRendererId_X11 = mkid::id32base36_3<'X', '1', '1'>::value; //QPainterRenderer is abstract. So can not register(operator new will needed) #if AUTO_REGISTER FACTORY_REGISTER(VideoRenderer, Widget, "QWidegt") FACTORY_REGISTER(VideoRenderer, GraphicsItem, "QGraphicsItem") #if QTAV_HAVE(GL) #if QTAV_HAVE(GL1) FACTORY_REGISTER(VideoRenderer, GLWidget, "QGLWidegt") #endif //QTAV_HAVE(GL1) FACTORY_REGISTER(VideoRenderer, GLWidget2, "QGLWidegt2") #endif //QTAV_HAVE(GL) #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #ifndef QT_NO_OPENGL FACTORY_REGISTER(VideoRenderer, OpenGLWidget, "OpenGLWidget") #endif //QT_NO_OPENGL #endif #endif //extern void RegisterVideoRendererGDI_Man(); //extern void RegisterVideoRendererDirect2D_Man(); //extern void RegisterVideoRendererXV_Man(); //extern void RegisterVideoRendererX11_Man(); namespace Widgets { void registerRenderers() { #if !defined(QT_NO_DEBUG) #if !(OFF_OTHER_DEBUG) qDebug("registerRenderers..........."); #endif #endif // check whether it is called static bool initialized = false; if (initialized) return; initialized = true; // factory.h does not check whether an id is registered if (VideoRenderer::name(VideoRendererId_Widget)) return; #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) #ifndef QT_NO_OPENGL VideoRenderer::Register(VideoRendererId_OpenGLWidget, "OpenGLWidget"); #endif //QT_NO_OPENGL #endif #if QTAV_HAVE(GL) VideoRenderer::Register(VideoRendererId_GLWidget2, "QGLWidget2"); #endif //QTAV_HAVE(GL) #if QTAV_HAVE(GL1) VideoRenderer::Register(VideoRendererId_GLWidget, "QGLWidget"); #endif //QTAV_HAVE(GL1) VideoRenderer::Register(VideoRendererId_Widget, "Widget"); #if QTAV_HAVE(GDIPLUS) RegisterVideoRendererGDI_Man(); #endif //QTAV_HAVE(GDIPLUS) #if QTAV_HAVE(DIRECT2D) RegisterVideoRendererDirect2D_Man(); #endif //QTAV_HAVE(DIRECT2D) #if QTAV_HAVE(XV) RegisterVideoRendererXV_Man(); #endif //QTAV_HAVE(XV) #if QTAV_HAVE(X11) RegisterVideoRendererX11_Man(); #endif //QTAV_HAVE(XV) #if !(REMOVE_GRAPHIC_ITEM_RENDERER) VideoRenderer::Register(VideoRendererId_GraphicsItem, "GraphicsItem"); #endif } } //namespace Widgets namespace { static const struct register_renderers { inline register_renderers() { FAV::Widgets::registerRenderers(); } } sRegisterVO; } void about() { //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, QStringLiteral("QtAV")); tab->addTab(viewFFmpeg, QStringLiteral("FFmpeg")); QPushButton *qbtn = new QPushButton("About Qt"); QPushButton *btn = new QPushButton("Ok"); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->addWidget(btn); btnLayout->addStretch(); btnLayout->addWidget(qbtn); btn->setFocus(); QDialog dialog; dialog.setWindowTitle("About" + QStringLiteral(" FAV")); QVBoxLayout *layout = new QVBoxLayout; dialog.setLayout(layout); layout->addWidget(tab); layout->addLayout(btnLayout); QObject::connect(qbtn, SIGNAL(clicked()), qApp, SLOT(aboutQt())); QObject::connect(btn, SIGNAL(clicked()), &dialog, SLOT(accept())); dialog.exec(); } void aboutFFmpeg() { QMessageBox::about(0, "About FFmpeg", aboutFFmpeg_HTML()); } void aboutQtAV() { QMessageBox::about(0, "About QtAV", aboutQtAV_HTML()); } }//namespace FAV