diff options
Diffstat (limited to 'examples/multimedia/video/qmlvideo/qmlvideo/SceneMulti.qml')
-rw-r--r-- | examples/multimedia/video/qmlvideo/qmlvideo/SceneMulti.qml | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/examples/multimedia/video/qmlvideo/qmlvideo/SceneMulti.qml b/examples/multimedia/video/qmlvideo/qmlvideo/SceneMulti.qml new file mode 100644 index 000000000..f93dabcdd --- /dev/null +++ b/examples/multimedia/video/qmlvideo/qmlvideo/SceneMulti.qml @@ -0,0 +1,186 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +import QtQuick +import QtQuick.Controls + +Scene { + id: root + + property real itemWidth: (width / 3) - 40 + property real itemTopMargin: 50 + + QtObject { + id: contentProxy + function initialize() { + video1.initialize() + video2.initialize() + } + } + + Component { + id: startStopComponent + + Rectangle { + id: root + color: "transparent" + + signal start + signal stop + + Label { + anchors { + horizontalCenter: parent.horizontalCenter + bottom: parent.bottom + margins: 20 + } + // qmllint disable + text: root.started ? qsTr("Tap to stop") : qsTr("Tap to start") + // qmllint enable + } + + MouseArea { + anchors.fill: parent + // qmllint disable + onClicked: { + if (root.started) + root.stop() + else + root.start() + } + // qmllint enable + } + } + } + + Content { + id: video1 + anchors { + left: parent.left + leftMargin: 10 + top: parent.top + topMargin: root.itemTopMargin + } + autoStart: false + contentType: "video" + showBorder: true + showFrameRate: started + source: parent.source1 + width: root.itemWidth + volume: parent.volume + + Loader { + id: video1StartStopLoader + + property bool started: parent.started + + onLoaded: { + item.parent = video1 + item.anchors.fill = video1 + item.start.connect(video1.start) + item.stop.connect(video1.stop) + } + } + + onInitialized: video1StartStopLoader.sourceComponent = startStopComponent + } + + Rectangle { + id: cameraHolder + + property bool started: false + + anchors { + horizontalCenter: parent.horizontalCenter + top: parent.top + topMargin: root.itemTopMargin + } + border.width: 1 + border.color: palette.base + color: "transparent" + width: root.itemWidth + height: width + + Loader { + id: cameraLoader + onLoaded: { + item.parent = cameraHolder + item.anchors.centerIn = cameraHolder + item.contentType = "camera" + item.showFrameRate = true + item.width = root.itemWidth + item.z = 1.0 + cameraErrorConnection.target = item + item.initialize() + } + } + + Loader { + id: cameraStartStopLoader + + property bool started: parent.started + + sourceComponent: startStopComponent + onLoaded: { + item.parent = cameraHolder + item.anchors.fill = cameraHolder + item.z = 2.0 + item.start.connect(cameraHolder.start) + item.stop.connect(cameraHolder.stop) + } + } + + Connections { + id: cameraErrorConnection + function onError() { + console.log("[qmlvideo] SceneMulti.camera.onError") + cameraHolder.stop() + } + ignoreUnknownSignals: true + } + + function start() { + cameraLoader.source = "Content.qml" + cameraHolder.started = true + } + + function stop() { + cameraLoader.source = "" + cameraHolder.started = false + } + } + + Content { + id: video2 + anchors { + right: parent.right + rightMargin: 10 + top: parent.top + topMargin: root.itemTopMargin + } + autoStart: false + contentType: "video" + showBorder: true + showFrameRate: started + source: parent.source2 + width: root.itemWidth + volume: parent.volume + + Loader { + id: video2StartStopLoader + + property bool started: parent.started + + onLoaded: { + item.parent = video2 + item.anchors.fill = video2 + item.start.connect(video2.start) + item.stop.connect(video2.stop) + } + } + + onInitialized: video2StartStopLoader.sourceComponent = startStopComponent + } + + Component.onCompleted: root.content = contentProxy +} |