23#include <bitmaps.hlst>
31#include <com/sun/star/awt/Size.hpp>
32#include <com/sun/star/frame/XDispatchHelper.hpp>
33#include <com/sun/star/media/XPlayer.hpp>
34#include <com/sun/star/media/XPlayerNotifier.hpp>
35#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
36#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
37#include <com/sun/star/ui/dialogs/XFilePicker3.hpp>
38#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
39#include <com/sun/star/util/URLTransformer.hpp>
46#define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME 3.0
53 mpImpl(
VclPtr<priv::MediaWindowImpl>::
Create( parent, this, bInternalMediaControl ) )
67 mpImpl->setURL( rURL, OUString(), rReferer );
131 return mpImpl->getPreferredSize();
137 mpImpl->setPosSize( rNewRect );
143 mpImpl->setPointer( nPointer );
154 mpImpl->updateMediaItem( rItem );
159 mpImpl->executeMediaItem( rItem );
174 return mpImpl->IsVisible();
185 return {{
"Advanced Audio Coding",
"aac"},
186 {
"AIF Audio",
"aif;aiff"},
187 {
"Advanced Systems Format",
"asf;wma;wmv"},
189 {
"AC3 Audio",
"ac3"},
192 {
"Digital Video",
"dv"},
193 {
"FLAC Audio",
"flac"},
194 {
"Flash Video",
"flv"},
195 {
"Matroska Media",
"mkv"},
196 {
"MIDI Audio",
"mid;midi"},
197 {
"MPEG Audio",
"mp2;mp3;mpa;m4a"},
198 {
"MPEG Video",
"mpg;mpeg;mpv;mp4;m4v"},
199 {
"Ogg Audio",
"ogg;oga;opus"},
200 {
"Ogg Video",
"ogv;ogx"},
201 {
"Real Audio",
"ra"},
202 {
"Real Media",
"rm"},
203 {
"RMI MIDI Audio",
"rmi"},
204 {
"SND (SouND) Audio",
"snd"},
205 {
"Quicktime Video",
"mov"},
206 {
"Vivo Video",
"viv"},
207 {
"WAVE Audio",
"wav"},
208 {
"WebM Video",
"webm"},
209 {
"Windows Media Audio",
"wma"},
210 {
"Windows Media Video",
"wmv"}};
217 ? ui::dialogs::TemplateDescription::FILEOPEN_LINK_PREVIEW
218 : ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
219 FileDialogFlags::NONE, pParent);
222 static const char aSeparator[] =
";";
223 OUStringBuffer aAllTypes;
227 ? AVMEDIA_STR_INSERTMEDIA_DLG : AVMEDIA_STR_OPENMEDIA_DLG ) );
229 for(
const auto &
filter : aFilters )
233 if( !aAllTypes.isEmpty() )
234 aAllTypes.append(aSeparator);
241 aDlg.
AddFilter(
AvmResId( AVMEDIA_STR_ALL_MEDIAFILES ), aAllTypes.makeStringAndClear() );
243 for(
const auto &
filter : aFilters )
250 aTypes.append(aSeparator);
262 uno::Reference<ui::dialogs::XFilePicker3>
const xFP(aDlg.
GetFilePicker());
263 uno::Reference<ui::dialogs::XFilePickerControlAccess>
const xCtrlAcc(xFP,
264 uno::UNO_QUERY_THROW);
265 if (o_pbLink !=
nullptr)
269 ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_LINK, 0,
272 xCtrlAcc->enableControl(
273 ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_PREVIEW,
282 if (o_pbLink !=
nullptr)
285 ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_LINK, 0);
286 if (!(
any >>= *o_pbLink))
288 SAL_WARN(
"avmedia",
"invalid link property");
293 else if( !rURL.isEmpty() )
296 return !rURL.isEmpty();
302 VclMessageType::Warning, VclButtonsType::Ok,
AvmResId(AVMEDIA_STR_ERR_URL)));
310 if(
aURL.GetProtocol() == INetProtocol::NotValid )
313 if (bDeep || xPreferredPixelSizeListener)
319 rReferer,
nullptr ) );
323 if (xPreferredPixelSizeListener)
325 uno::Reference<media::XPlayerNotifier> xPlayerNotifier(xPlayer, css::uno::UNO_QUERY);
329 xPreferredPixelSizeListener->startListening(xPlayerNotifier);
334 xPreferredPixelSizeListener->callPlayerWindowSizeAvailable(xPlayer);
347 const OUString aExt(
aURL.getExtension() );
349 for(
const auto &
filter : aFilters )
367uno::Reference<graphic::XGraphic>
369 const uno::Reference<graphic::XGraphic>& rGraphic)
371 uno::Reference< graphic::XGraphic > xRet;
372 std::optional< Graphic > oGraphic;
376 uno::Reference< media::XFrameGrabber > xGrabber( xPlayer->createFrameGrabber() );
382 if( fMediaTime >= xPlayer->getDuration() )
383 fMediaTime = ( xPlayer->getDuration() * 0.5 );
385 xRet = xGrabber->grabFrame( fMediaTime );
390 awt::Size aPrefSize( xPlayer->getPreferredPlayerWindowSize() );
392 if( !aPrefSize.Width && !aPrefSize.Height )
394 const BitmapEx aBmpEx(AVMEDIA_BMP_AUDIOLOGO);
395 oGraphic.emplace( aBmpEx );
400 if (!xRet.is() && !oGraphic)
402 const BitmapEx aBmpEx(AVMEDIA_BMP_EMPTYLOGO);
403 oGraphic.emplace( aBmpEx );
409 oGraphic.emplace(rGraphic);
410 xRet = oGraphic->GetXGraphic();
417 const OUString& rReferer,
418 const OUString& sMimeType,
421 uno::Reference<media::XPlayer> xPlayer(
createPlayer(rURL, rReferer, &sMimeType));
423 if (xPreferredPixelSizeListener)
425 uno::Reference<media::XPlayerNotifier> xPlayerNotifier(xPlayer, css::uno::UNO_QUERY);
430 xPreferredPixelSizeListener->startListening(xPlayerNotifier);
435 xPreferredPixelSizeListener->callPlayerWindowSizeAvailable(xPlayer);
445 const css::awt::Size& rSize,
const OUString& rURL,
bool bLink)
447 util::URL aDispatchURL;
448 aDispatchURL.Complete =
".uno:InsertAVMedia";
450 css::uno::Reference<css::util::XURLTransformer> xTrans(css::util::URLTransformer::create(::comphelper::getProcessComponentContext()));
451 xTrans->parseStrict(aDispatchURL);
453 css::uno::Reference<css::frame::XDispatch>
xDispatch = rDispatchProvider->queryDispatch(aDispatchURL,
"", 0);
455 {
"URL", css::uno::Any(rURL) },
456 {
"Size.Width",
uno::Any(rSize.Width)},
457 {
"Size.Height",
uno::Any(rSize.Height)},
458 {
"IsLink", css::uno::Any(bLink) },
460 xDispatch->dispatch(aDispatchURL, aArgs);
465 , m_aFn(
std::move(fn))
472 PlayerListener_BASE::dispose();
496 css::uno::Reference<media::XPlayer> xPlayer(
m_xNotifier, css::uno::UNO_QUERY_THROW);
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
mutable::osl::Mutex m_aMutex
void AddFilter(const OUString &rFilterName, const OUString &rExtension)
const css::uno::Reference< css::ui::dialogs::XFilePicker3 > & GetFilePicker() const
void SetTitle(const OUString &rNewTitle)
void SetContext(Context _eNewContext)
Reference< XDispatch > xDispatch
#define SAL_WARN(area, stream)
css::uno::Sequence< css::beans::PropertyValue > InitPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)