void QGraphicsVideoItemPrivate::clearService() { if (windowControl) { QObject::disconnect(windowControl, SIGNAL(nativeSizeChanged()), q_ptr, SLOT(_q_updateNativeSize())); service->releaseControl(windowControl); windowControl = 0; } if (service) { QObject::disconnect(service, SIGNAL(destroyed()), q_ptr, SLOT(_q_serviceDestroyed())); service = 0; } }
void QGraphicsVideoItemPrivate::clearService() { if (rendererControl) { surface->stop(); rendererControl->setSurface(0); service->releaseControl(rendererControl); rendererControl = 0; } if (service) { QObject::disconnect(service, SIGNAL(destroyed()), q_ptr, SLOT(_q_serviceDestroyed())); service = 0; } }
/* \internal */ bool QGraphicsVideoItem::setMediaObject(QMediaObject *object) { Q_D(QGraphicsVideoItem); if (object == d->mediaObject) return true; d->clearService(); d->mediaObject = object; if (d->mediaObject) { d->service = d->mediaObject->service(); if (d->service) { QMediaControl *control = d->service->requestControl(QVideoRendererControl_iid); if (control) { d->rendererControl = qobject_cast<QVideoRendererControl *>(control); if (d->rendererControl) { connect(d->rendererControl, SIGNAL(nativeSizeChanged()), this, SLOT(_q_updateNativeSize()), Qt::QueuedConnection); d->_q_updateNativeSize(); //don't set the surface untill the item is painted //at least once and the surface is configured if (!d->updatePaintDevice) d->rendererControl->setSurface(d->surface); else update(boundingRect()); connect(d->service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed())); return true; } if (control) d->service->releaseControl(control); } } } d->mediaObject = 0; return false; }