Bug 116899

Summary: Fly-in animation doesn't play after roundtripping from LO through PP (PPT format)
Product: LibreOffice Reporter: Aron Budea <aron.budea>
Component: filters and storageAssignee: Aron Budea <aron.budea>
Status: RESOLVED FIXED    
Severity: normal Keywords: filter:ppt
Priority: medium    
Version: 3.5.0 release   
Hardware: All   
OS: All   
Whiteboard: target:6.1.0
Crash report or crash signature: Regression By:
Bug Depends on:    
Bug Blocks: 113331    
Attachments: Sample ODP
Sample PPT (saved from ODP in Impress)
Sample PPT (saved from previous PPT in PowerPoint)
Dump of different animation properties

Description Aron Budea 2018-04-09 14:44:08 UTC
Created attachment 141228 [details]
Sample ODP

- Add Fly-in animation to a text box in Impress, and save it as PPT.
- Open the PPT in PowerPoint, and simply save it.
- Open the PPT in Impress again, and play the slideshow.

=> There's no animation for the text box.

In PowerPoint the animation still appears in the very same file. Setting the same animation again either in PowerPoint or Impress will play the animation in Impress again.
Attaching a sample ODP, the ODP saved as PPT in Impress 6.0.3.2, and the PPT saved again in PowerPoint.

Observed using LO 6.0.3.2 & 3.5.0.3 / Windows 7.
Comment 1 Aron Budea 2018-04-09 14:45:09 UTC
Created attachment 141229 [details]
Sample PPT (saved from ODP in Impress)
Comment 2 Aron Budea 2018-04-09 14:45:58 UTC
Created attachment 141230 [details]
Sample PPT (saved from previous PPT in PowerPoint)
Comment 3 Aron Budea 2018-04-11 04:16:15 UTC
The problem is with the unusual key times.

Dumping animation data gives the following:
- good:
...
<animate fill="hold" dur="0.5" calcmode="linear" valueType="number" keyTimes="0.000000;1.000000;" values="#ppt_x;#ppt_x" additive="replace" attributeName="ppt_x" paragraph 0, 5 characters target=""/>
<animate fill="hold" dur="0.5" calcmode="linear" valueType="number" keyTimes="0.000000;1.000000;" values="1+#ppt_h/2;#ppt_y" additive="replace" attributeName="ppt_y" paragraph 0, 5 characters target=""/>
...

- bad:
...
<animate fill="hold" dur="0.5" calcmode="linear" valueType="number" keyTimes="1.000000;-1.000000;" values="#ppt_x;#ppt_x" additive="replace" attributeName="ppt_x" paragraph 0, 5 characters target=""/>
<animate fill="hold" dur="0.5" calcmode="linear" valueType="number" keyTimes="1.000000;-1.000000;" values="1+#ppt_h/2;#ppt_y" additive="replace" attributeName="ppt_y" paragraph 0, 5 characters target=""/>
...

Animations only permit key times in the range of [0, 1], and the first entry has to be 0.
Solution: if the key times are outside the range, normalize key times during import, at least both for PPT and PPTX formats.

Note: in OOXML format the key times are stored in element 'tav'.
Comment 4 Aron Budea 2018-04-11 15:07:03 UTC
Created attachment 141288 [details]
Dump of different animation properties

Attaching four dumps of four different cases:
- flyin_good.xml: PPT as created in Impress,
- flyin_origPP.xml: PPT as created in PowerPoint,
- flyin_bad.xml: PPT created in Impress, then roundtripped in PowerPoint,
- flyin_PPfixed.xml: PPT created in Impress, then roundripped in PowerPoint, while setting the same animation again.

Out of these only the third (flyin_bad.xml) isn't played correctly in Impress.
Nevertheless, the original PPT produced by Impress might contain attribute combinations PowerPoint isn't expecting, hopefully the dumps shed some light on that.
Comment 5 Commit Notification 2018-05-17 10:41:21 UTC
Aron Budea committed a patch related to this issue.
It has been pushed to "master":

http://cgit.freedesktop.org/libreoffice/core/commit/?id=4e207c2e17d75a3cb7b6b72690375279be40d64a

tdf#116899: normalize key times during PPT import if needed

It will be available in 6.1.0.

The patch should be included in the daily builds available at
http://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
http://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.