Я хочу нарисовать некоторый пользовательский интерфейс поверх видеопотока, который отображается с использованием Xoverlay.Я использую gstreamer для воспроизведения видео и рендеринга его на xvimagesink с помощью xoverlay.Мой виджет наследуется от QGLWidget, и я хочу рисовать 2D-элементы с помощью QPainter. Я сделал следующее:
VideoPlayer::VideoPlayer(QWidget *parent) :
QGLWidget(parent)
{
setAutoFillBackground(false);
QString fname = QFileDialog::getOpenFileName(0,tr("Open video"),tr("/"));
GstElement *pipeline,*source,*decoder,*q,*converter,*resampler,*audiosink,*videosink;
GstBus *bus;
pipeline = gst_pipeline_new("my-player");
source = gst_element_factory_make("filesrc","source");
decoder = gst_element_factory_make("decodebin2","decoder");
q = gst_element_factory_make("queue","q");
converter = gst_element_factory_make("audioconvert","converter");
resampler = gst_element_factory_make("audioresample","resampler");
audiosink = gst_element_factory_make("autoaudiosink","audio-sink");
videosink = gst_element_factory_make("xvimagesink","video-sink");
//Set the bin properties
g_object_set(G_OBJECT(source),"location",fname.toAscii().constData(),NULL);
g_object_set(G_OBJECT(decoder),"name","decoder");
gst_bin_add_many(GST_BIN(pipeline),source,decoder,q,converter,resampler,audiosink,videosink,NULL);
gst_element_link(source,decoder);
gst_element_link_many(q,converter,resampler,audiosink,NULL);
//gst_element_link(decoder,q);
g_signal_connect(decoder,"pad-added",G_CALLBACK(on_pad_added),videosink);
g_signal_connect(decoder,"pad-added",G_CALLBACK(on_pad_added),q);
bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
gst_bus_add_watch(bus,bus_call,NULL);
gst_object_unref(bus);
if (GST_IS_X_OVERLAY (videosink))
{
unsigned long win_id=winId();
QApplication::syncX();
gst_x_overlay_set_xwindow_id (GST_X_OVERLAY(videosink),win_id);
}
gst_element_set_state(pipeline,GST_STATE_PLAYING);
}
Затем я переопределяю paintEvent следующим образом
void VideoPlayer::paintEvent(QPaintEvent *event) {
QPainter painter(this);
painter.save();
painter.setPen(QColor(255,0,0,140));
painter.drawRect(QRectF(50,50,100,100));
painter.restore();
}
Проблема в том, что прямоугольникраскрашивается под видео.Как мне перекрасить его так, чтобы оно показывалось над видео?