Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
LibreOffice:7.3
libreoffice
bsc1202032.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bsc1202032.patch of Package libreoffice
From fd8dc87cc895a6e478596873764bdbdfb8fd2d7a Mon Sep 17 00:00:00 2001 From: Miklos Vajna <vmiklos@collabora.com> Date: Fri, 2 Sep 2022 14:19:41 +0200 Subject: [PATCH] Related: tdf#149969 PPTX export: add loop from the animation of a media shape The PPTX import maps media nodes to XAudio nodes, but the export side in PPTXAnimationExport::WriteAnimationNodeAudio() only handled audio, not video. This is fine, that code was added for audio narration purposes, but the same animation handles looping for videos, so this needs extending. Fix the problem by exporting <p:audio> conditionally and write video markup (especially info about repeat count) when the content of the media shape is video, not audio. (cherry picked from commit 38671e21d7dbcd5019912b9468305018de0c922e) Change-Id: Iba6bb4901b984c4363023f05232efc06ff069022 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139399 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com> --- sd/source/filter/eppt/pptx-animations.cxx | 47 ++++++++++++++++++---- 3 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 sd/qa/filter/eppt/data/video-loop.pptx diff --git a/sd/source/filter/eppt/pptx-animations.cxx b/sd/source/filter/eppt/pptx-animations.cxx index 43ef7ce4d55d..f0f46968bcd8 100644 --- a/sd/source/filter/eppt/pptx-animations.cxx +++ b/sd/source/filter/eppt/pptx-animations.cxx @@ -659,6 +659,9 @@ bool IsAudioURL(const OUString& rURL) { return rURL.endsWithIgnoreAsciiCase(".wav") || rURL.endsWithIgnoreAsciiCase(".m4a"); } + +/// Returns if rURL has an extension which is a video format. +bool IsVideoURL(const OUString& rURL) { return rURL.endsWithIgnoreAsciiCase(".mp4"); } } namespace oox::core @@ -1235,6 +1238,7 @@ void PPTXAnimationExport::WriteAnimationNodeAudio() bValid = true; } + bool bVideo = false; if (!bValid) { if (xAudio->getSource() >>= xShape) @@ -1243,7 +1247,8 @@ void PPTXAnimationExport::WriteAnimationNodeAudio() bool bHasMediaURL = xShapeProps->getPropertySetInfo()->hasPropertyByName("MediaURL"); if (bHasMediaURL && (xShapeProps->getPropertyValue("MediaURL") >>= sUrl)) { - bValid = IsAudioURL(sUrl); + bVideo = IsVideoURL(sUrl); + bValid = IsAudioURL(sUrl) || bVideo; } } } @@ -1256,12 +1261,31 @@ void PPTXAnimationExport::WriteAnimationNodeAudio() mrPowerPointExport.embedEffectAudio(mpFS, sUrl, sRelId, sName); } - bool bNarration = xAudio->getNarration(); - mpFS->startElementNS(XML_p, XML_audio, XML_isNarration, bNarration ? "1" : "0"); - bool bHideDuringShow = xAudio->getHideDuringShow(); - mpFS->startElementNS(XML_p, XML_cMediaNode, XML_showWhenStopped, bHideDuringShow ? "0" : "1"); + if (bVideo) + { + mpFS->startElementNS(XML_p, XML_video); + mpFS->startElementNS(XML_p, XML_cMediaNode); + } + else + { + bool bNarration = xAudio->getNarration(); + mpFS->startElementNS(XML_p, XML_audio, XML_isNarration, bNarration ? "1" : "0"); + bool bHideDuringShow = xAudio->getHideDuringShow(); + mpFS->startElementNS(XML_p, XML_cMediaNode, XML_showWhenStopped, + bHideDuringShow ? "0" : "1"); + } - mpFS->startElementNS(XML_p, XML_cTn); + animations::Timing eTiming{}; + bool bLooping + = (xAudio->getRepeatCount() >>= eTiming) && eTiming == animations::Timing_INDEFINITE; + if (bVideo && bLooping) + { + mpFS->startElementNS(XML_p, XML_cTn, XML_repeatCount, "indefinite"); + } + else + { + mpFS->startElementNS(XML_p, XML_cTn); + } WriteAnimationCondList(mpContext->getCondition(true), XML_stCondLst); WriteAnimationCondList(mpContext->getCondition(false), XML_endCondLst); mpFS->endElementNS(XML_p, XML_cTn); @@ -1281,7 +1305,14 @@ void PPTXAnimationExport::WriteAnimationNodeAudio() mpFS->endElementNS(XML_p, XML_tgtEl); mpFS->endElementNS(XML_p, XML_cMediaNode); - mpFS->endElementNS(XML_p, XML_audio); + if (bVideo) + { + mpFS->endElementNS(XML_p, XML_video); + } + else + { + mpFS->endElementNS(XML_p, XML_audio); + } } void PPTXAnimationExport::WriteAnimationNode(const NodeContextPtr& pContext) @@ -1456,7 +1487,7 @@ void NodeContext::initValid(bool bHasValidChild, bool bIsIterateChild) = xShapeProps->getPropertySetInfo()->hasPropertyByName("MediaURL"); if (bHasMediaURL && (xShapeProps->getPropertyValue("MediaURL") >>= sURL)) { - mbValid = IsAudioURL(sURL); + mbValid = IsAudioURL(sURL) || IsVideoURL(sURL); } } } -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor