Skip to content

Add hold and ghost #781

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

eloisebrosseau
Copy link
Contributor

Add hold and ghost

Summarize your change.

This PR adds hold and ghost in the PaintIPNode based on the implementation in Create and the cherry-pick in shotgun-rv that was never merged. The following properties were added to enabled the feature in RV: startFrame, duration, hold, ghost, ghostBefore and ghostAfter. The Open RV documentation reflects this addition in the Paint node.

Hold and ghost can be enable on both polylines and text boxes. To hold annotations, a duration property was needed to know the number of frames on which the annotation should be held from the specified startFrame. To ghost annotations, a ghostBefore and ghostAfter properties were added to set the number of frames on which the ghosted annotation should be displayed before and after the actual annotation. The opacity to apply on ghosted annotations was also updated to match the web app instead of Create to make the annotations more visible the closer they are to the actual annotation, and the more transparent the further they are. Note that some code that was part of the cherry-pick was to fix some thread safeness issues, without being directly related to the hold and ghost feature, but more generally for the PaintIPNode. This code is also part of this PR to make sure everything is on par with what should have been merged back then, but I can remove it, if it makes this PR too hard to review.

Since this was added as a feature for Live Review, the annotation schema, the annotation hook and the otio reader are also updated in this PR. The hold and ghost properties are received for now as part of the annotation metadata. To access the values in the annotation hook, the context in the otio reader needed to be added the metadata propertyof OTIO effects. In the annotation hook, all the new properties to enable hold and ghost were added. The duration property is calculated so that a held annotation will stay on the frames until the next annotated frame or the end of the media. For ghosted annotations and "normal" annotations, the duration is simply the specified OTIO time range, which is normally 1, but it could be any other values.

To see the complete implementation of hold and ghost in the Live Review plugin, and some screen recordings, please refer to this other PR. Also note that a playback issue is currently present when enabling ghost where the first frame without any annotation will completely freeze until the next annotated frame. However, the ghost feature is working as expected when scrubbing on the timeline. Held annotations and "normal" annotations are not affected by this issue.

Describe the reason for the change.

RV is missing the hold and ghost feature that is needed for Live Review.

Describe what you have tested and on which operating system.

All the test were done on macos between RV and the web app during a Live Review session.

Copy link
Contributor

@bernie-laberge bernie-laberge left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
Excellent work @eloisebrosseau and thank you for your constant effort of modernizing the code along the way !

Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: Éloïse Brosseau <[email protected]>
@eloisebrosseau eloisebrosseau merged commit 3183a0f into AcademySoftwareFoundation:main May 27, 2025
20 checks passed
eloisebrosseau added a commit that referenced this pull request Jun 16, 2025
### [SG-38044:](https://jira.autodesk.com/browse/SG-38044) Add
stand-alone hold and ghost

### Summarize your change.

Enable Hold and Ghost in the annotation tool based on
[#781](#781)
where the functionality is added to the PaintIPNode. Note that if a Live
Review session is on-going, Hold and Ghost is disabled for participants.

### Describe the reason for the change.

A stand-alone version of the feature was needed to match what we have in
the Live Review plugin.

### Describe what you have tested and on which operating system.

The feature was tested on macOS. 

### Add a list of changes, and note any that might need special
attention during the review.

This branch is based on hold-and-ghost that is not merged yet. The only
files to consider for this PR are rv-reference-manual-chapter-five.md,
RvBottomViewToolBar.cpp, RvBottomViewToolBar.h, RvCommon.qrc, ghost.png,
hold.png, Session.cpp and annotate_mode.mu.

### If possible, provide screenshots.


https://github.com/user-attachments/assets/4d8c8ffd-21b4-486e-af29-ff20ec843c8f

---------

Signed-off-by: Éloïse Brosseau <[email protected]>
richardssam pushed a commit to richardssam/OpenRV that referenced this pull request Jun 17, 2025
### Add hold and ghost

### Summarize your change.

This PR adds hold and ghost in the PaintIPNode based on the
implementation in Create and the cherry-pick in
[shotgun-rv](https://git.autodesk.com/media-and-entertainment/shotgun-rv/pull/1262)
that was never merged. The following properties were added to enabled
the feature in RV: `startFrame`, `duration`, `hold`, `ghost`,
`ghostBefore` and `ghostAfter`. The Open RV documentation reflects this
addition in the Paint node.

Hold and ghost can be enable on both polylines and text boxes. To hold
annotations, a `duration` property was needed to know the number of
frames on which the annotation should be held from the specified
`startFrame`. To ghost annotations, a `ghostBefore` and `ghostAfter`
properties were added to set the number of frames on which the ghosted
annotation should be displayed before and after the actual annotation.
The opacity to apply on ghosted annotations was also updated to match
the web app instead of Create to make the annotations more visible the
closer they are to the actual annotation, and the more transparent the
further they are. Note that some code that was part of the cherry-pick
was to fix some thread safeness issues, without being directly related
to the hold and ghost feature, but more generally for the PaintIPNode.
This code is also part of this PR to make sure everything is on par with
what should have been merged back then, but I can remove it, if it makes
this PR too hard to review.

Since this was added as a feature for Live Review, the annotation
schema, the annotation hook and the otio reader are also updated in this
PR. The `hold` and `ghost` properties are received for now as part of
the annotation metadata. To access the values in the annotation hook,
the context in the otio reader needed to be added the metadata
propertyof OTIO effects. In the annotation hook, all the new properties
to enable hold and ghost were added. The `duration` property is
calculated so that a held annotation will stay on the frames until the
next annotated frame or the end of the media. For ghosted annotations
and "normal" annotations, the duration is simply the specified OTIO time
range, which is normally 1, but it could be any other values.

To see the complete implementation of hold and ghost in the Live Review
plugin, and some screen recordings, please refer to this other
[PR](https://git.autodesk.com/media-and-entertainment/rv/pull/362). Also
note that a playback issue in Live Review is currently present when enabling `ghost`
where the first frame without any annotation will completely freeze
until the next annotated frame. However, the ghost feature is working as
expected when scrubbing on the timeline. Held annotations and "normal"
annotations are not affected by this issue.

### Describe the reason for the change.

RV is missing the hold and ghost feature that is needed for Live Review.

### Describe what you have tested and on which operating system.
All the test were done on macos between RV and the web app during a Live
Review session.

---------

Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: [email protected] <[email protected]>
richardssam pushed a commit to richardssam/OpenRV that referenced this pull request Jun 17, 2025
### Add hold and ghost

### Summarize your change.

This PR adds hold and ghost in the PaintIPNode based on the
implementation in Create and the cherry-pick in
[shotgun-rv](https://git.autodesk.com/media-and-entertainment/shotgun-rv/pull/1262)
that was never merged. The following properties were added to enabled
the feature in RV: `startFrame`, `duration`, `hold`, `ghost`,
`ghostBefore` and `ghostAfter`. The Open RV documentation reflects this
addition in the Paint node.

Hold and ghost can be enable on both polylines and text boxes. To hold
annotations, a `duration` property was needed to know the number of
frames on which the annotation should be held from the specified
`startFrame`. To ghost annotations, a `ghostBefore` and `ghostAfter`
properties were added to set the number of frames on which the ghosted
annotation should be displayed before and after the actual annotation.
The opacity to apply on ghosted annotations was also updated to match
the web app instead of Create to make the annotations more visible the
closer they are to the actual annotation, and the more transparent the
further they are. Note that some code that was part of the cherry-pick
was to fix some thread safeness issues, without being directly related
to the hold and ghost feature, but more generally for the PaintIPNode.
This code is also part of this PR to make sure everything is on par with
what should have been merged back then, but I can remove it, if it makes
this PR too hard to review.

Since this was added as a feature for Live Review, the annotation
schema, the annotation hook and the otio reader are also updated in this
PR. The `hold` and `ghost` properties are received for now as part of
the annotation metadata. To access the values in the annotation hook,
the context in the otio reader needed to be added the metadata
propertyof OTIO effects. In the annotation hook, all the new properties
to enable hold and ghost were added. The `duration` property is
calculated so that a held annotation will stay on the frames until the
next annotated frame or the end of the media. For ghosted annotations
and "normal" annotations, the duration is simply the specified OTIO time
range, which is normally 1, but it could be any other values.

To see the complete implementation of hold and ghost in the Live Review
plugin, and some screen recordings, please refer to this other
[PR](https://git.autodesk.com/media-and-entertainment/rv/pull/362). Also
note that a playback issue in Live Review is currently present when enabling `ghost`
where the first frame without any annotation will completely freeze
until the next annotated frame. However, the ghost feature is working as
expected when scrubbing on the timeline. Held annotations and "normal"
annotations are not affected by this issue.

### Describe the reason for the change.

RV is missing the hold and ghost feature that is needed for Live Review.

### Describe what you have tested and on which operating system.
All the test were done on macos between RV and the web app during a Live
Review session.

---------

Signed-off-by: Éloïse Brosseau <[email protected]>
Signed-off-by: [email protected] <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants