/** \param parent \param f **/ BlWidget::BlWidget ( QWidget *parent, Qt::WFlags flags ) : QWidget ( parent, flags), BlMainCompanyPointer() { BL_FUNC_DEBUG #ifdef AREA_QMDI /// Deshabilita el doble buffer de las X11. Va todo mucho mas rapido, pero no dibuja bien. qt_x11_set_global_double_buffer(false); #endif setAttribute(Qt::WA_StaticContents); }
VideoWidget::VideoWidget(GstBus *bus, QWidget *parent, const QString &name, const QString &video_sink_name) : Communication::VideoPlaybackWidgetInterface(parent), bus_((GstBus *) gst_object_ref(bus)), video_overlay_(0), video_playback_element_(0), video_playback_bin_(0), name_(name), window_id_(0), on_element_added_g_signal_(0), on_sync_message_g_signal_(0) { qDebug() << "VideoWidget " << name << " INIT STARTED"; setWindowTitle(name); // Element notifier init notifier_ = fs_element_added_notifier_new(); on_element_added_g_signal_ = g_signal_connect(notifier_, "element-added", G_CALLBACK(&VideoWidget::OnElementAdded), this); // UNIX -> autovideosink #ifdef Q_WS_X11 qt_x11_set_global_double_buffer(false); //video_playback_element_ = gst_element_factory_make(video_sink_name.toStdString().c_str(), 0); //gst_object_ref(video_playback_element_); //gst_object_sink(video_playback_element_); //fs_element_added_notifier_add(notifier_, GST_BIN(video_playback_element_)); #endif // WINDOWS -> autovideosink will chose one of there: glimagesink (best), directdrawsink (possible buffer errors), dshowvideosink (possible buffer errors) // X11 -> video_playback_element_ = gst_element_factory_make(video_sink_name.toStdString().c_str(), 0); if (!video_playback_element_) { qDebug() << "VideoWidget " << name << " CANNOT CREATE video_playback_element_ (" << video_sink_name <<")"; return; } // Video bin init const QString video_bin_name = "video_bin_for_" + name; video_playback_bin_ = gst_bin_new(video_bin_name.toStdString().c_str()); if (!video_playback_bin_) { qDebug() << "VideoWidget " << name << " CANNOT CREATE video_bin_"; return; } // Add playback element to video bin gst_bin_add(GST_BIN(video_playback_bin_), video_playback_element_); // Pad inits GstPad *static_sink_pad = gst_element_get_static_pad(video_playback_element_, "sink"); GstPad *sink_ghost_pad = gst_ghost_pad_new("sink", static_sink_pad); // Add pad to video bin gst_element_add_pad(GST_ELEMENT(video_playback_bin_), sink_ghost_pad); gst_object_unref(G_OBJECT(static_sink_pad)); gst_object_ref(video_playback_bin_); gst_object_sink(video_playback_bin_); fs_element_added_notifier_add(notifier_, GST_BIN(video_playback_bin_)); gst_bus_enable_sync_message_emission(bus_); on_sync_message_g_signal_ = g_signal_connect(bus_, "sync-message", G_CALLBACK(&VideoWidget::OnSyncMessage), this); qDebug() << "VideoWidget " << name << " INIT COMPLETE"; // QWidget properties QPalette palette; palette.setColor(QPalette::Background, Qt::black); palette.setColor(QPalette::Window, Qt::black); setPalette(palette); // Show nothing and lets put qwidgets as normal external windows //setAutoFillBackground(true); //setAttribute(Qt::WA_NoSystemBackground, true); //setAttribute(Qt::WA_PaintOnScreen, true); setWindowFlags(Qt::Dialog); resize(VIDEO_WIDTH, VIDEO_HEIGHT); setMinimumSize(VIDEO_WIDTH, VIDEO_HEIGHT); }