Merge pull request #2557 from alicevision/dev/sequencePlayer

[ui] Use the improved Sequence Player and enable it by default
This commit is contained in:
Candice Bentéjac 2024-11-06 16:57:38 +01:00 committed by GitHub
commit 6c00826a11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 35 additions and 12 deletions

View file

@ -587,7 +587,7 @@ class MeshroomApp(QApplication):
return bool(os.environ.get("MESHROOM_USE_8BIT_VIEWER", False))
def _defaultSequencePlayerEnabled(self):
return bool(os.environ.get("MESHROOM_USE_SEQUENCE_PLAYER", False))
return bool(os.environ.get("MESHROOM_USE_SEQUENCE_PLAYER", True))
activeProjectChanged = Signal()
activeProject = Property(Variant, lambda self: self._activeProject, notify=activeProjectChanged)

View file

@ -82,7 +82,7 @@ FloatingPane {
onPlayingChanged: {
if (!playing) {
updateReconstructionView()
} else if (playing && (frame + 1 >= frameRange + 1)) {
} else if (playing && (frame + 1 >= frameRange.max + 1)) {
frame = frameRange.min
}
viewer.playback(playing)

View file

@ -36,6 +36,10 @@ FocusScope {
property alias currentFrame: sequencePlayer.frameId
property alias frameRange: sequencePlayer.frameRange
property bool fittedOnce: false
property int previousWidth: -1
property int previousHeight: -1
QtObject {
id: m
property variant viewpointMetadata: {
@ -472,11 +476,13 @@ FocusScope {
orientationTag: imgContainer.orientationTag
xOrigin: imgContainer.width / 2
yOrigin: imgContainer.height / 2
property bool fittedOnce: false
property int previousWidth: 0
property int previousHeight: 0
property real targetSize: Math.max(width, height) * imgContainer.scale
onHeightChanged: {
property real resizeRatio: imgContainer.scale
function sizeChanged() {
/* Image size is not updated through a single signal with the floatImage viewer, unlike
* the simple QML image viewer: instead of updating straight away the width and height to x and
* y, the emitted signals look like:
@ -488,13 +494,29 @@ FocusScope {
* group has already been auto-fitted. If we change the group of images (when another project is
* opened, for example, and the images have a different size), then another auto-fit needs to be
* performed */
if ((!fittedOnce && imgContainer.image && imgContainer.image.height > 0) ||
(fittedOnce && ((width > 1 && previousWidth != width) ||
(height > 1 && previousHeight != height)))) {
var sizeValid = (width > 0) && (height > 0)
var layoutValid = (root.width > 50) && (root.height > 50)
var sizeChanged = (root.previousWidth != width) || (root.previousHeight != height)
var sizeChanged = (root.previousWidth != width) || (root.previousHeight != height)
if ((!root.fittedOnce && imgContainer.image && sizeValid && layoutValid) ||
(root.fittedOnce && sizeChanged && sizeValid && layoutValid)) {
fit()
fittedOnce = true
previousWidth = width
previousHeight = height
root.fittedOnce = true
root.previousWidth = width
root.previousHeight = height
}
}
onHeightChanged : {
floatImageViewerLoader.sizeChanged();
}
Connections {
target: root
function onHeightChanged() {
floatImageViewerLoader.sizeChanged()
}
}
@ -519,6 +541,7 @@ FocusScope {
'idView': Qt.binding(function() { return ((root.displayedNode && !root.displayedNode.hasSequenceOutput && _reconstruction) ? _reconstruction.selectedViewId : -1) }),
'cropFisheye': false,
'sequence': Qt.binding(function() { return ((root.enableSequencePlayer && (_reconstruction || (root.displayedNode && root.displayedNode.hasSequenceOutput))) ? getSequence() : []) }),
'resizeRatio': Qt.binding(function() { return floatImageViewerLoader.resizeRatio }),
'targetSize': Qt.binding(function() { return floatImageViewerLoader.targetSize }),
'useSequence': Qt.binding(function() {
return (root.enableSequencePlayer && !useExternal && (_reconstruction || (root.displayedNode && root.displayedNode.hasSequenceOutput && (displayedAttr.desc.semantic === "imageList" || displayedAttr.desc.semantic === "sequence"))))