1f39251c4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3f39251c4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4f39251c4SAndrew Rist * or more contributor license agreements. See the NOTICE file 5f39251c4SAndrew Rist * distributed with this work for additional information 6f39251c4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7f39251c4SAndrew Rist * to you under the Apache License, Version 2.0 (the 8f39251c4SAndrew Rist * "License"); you may not use this file except in compliance 9f39251c4SAndrew Rist * with the License. You may obtain a copy of the License at 10f39251c4SAndrew Rist * 11f39251c4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12f39251c4SAndrew Rist * 13f39251c4SAndrew Rist * Unless required by applicable law or agreed to in writing, 14f39251c4SAndrew Rist * software distributed under the License is distributed on an 15f39251c4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16f39251c4SAndrew Rist * KIND, either express or implied. See the License for the 17f39251c4SAndrew Rist * specific language governing permissions and limitations 18f39251c4SAndrew Rist * under the License. 19f39251c4SAndrew Rist * 20f39251c4SAndrew Rist *************************************************************/ 21f39251c4SAndrew Rist 22f39251c4SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #include <stdio.h> 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <avmedia/mediawindow.hxx> 27cdf0e10cSrcweir #include "mediawindow_impl.hxx" 28cdf0e10cSrcweir #include "mediamisc.hxx" 29cdf0e10cSrcweir #include "mediawindow.hrc" 30cdf0e10cSrcweir #include <tools/urlobj.hxx> 31cdf0e10cSrcweir #include <vcl/msgbox.hxx> 32cdf0e10cSrcweir #include <unotools/pathoptions.hxx> 33cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx> 34cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 35cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 36cdf0e10cSrcweir #include <com/sun/star/media/XManager.hpp> 37cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp" 38cdf0e10cSrcweir 39cdf0e10cSrcweir #define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME 3.0 40cdf0e10cSrcweir 41cdf0e10cSrcweir using namespace ::com::sun::star; 42cdf0e10cSrcweir 43cdf0e10cSrcweir namespace avmedia { 44cdf0e10cSrcweir 45cdf0e10cSrcweir // --------------- 46cdf0e10cSrcweir // - MediaWindow - 47cdf0e10cSrcweir // --------------- 48cdf0e10cSrcweir 49cdf0e10cSrcweir MediaWindow::MediaWindow( Window* parent, bool bInternalMediaControl ) : 50cdf0e10cSrcweir mpImpl( new priv::MediaWindowImpl( parent, this, bInternalMediaControl ) ) 51cdf0e10cSrcweir { 52cdf0e10cSrcweir mpImpl->Show(); 53cdf0e10cSrcweir } 54cdf0e10cSrcweir 55cdf0e10cSrcweir // ------------------------------------------------------------------------- 56cdf0e10cSrcweir 57cdf0e10cSrcweir MediaWindow::~MediaWindow() 58cdf0e10cSrcweir { 59cdf0e10cSrcweir mpImpl->cleanUp(); 60cdf0e10cSrcweir delete mpImpl; 61cdf0e10cSrcweir mpImpl = NULL; 62cdf0e10cSrcweir } 63cdf0e10cSrcweir 64cdf0e10cSrcweir // ------------------------------------------------------------------------- 65cdf0e10cSrcweir 66cdf0e10cSrcweir void MediaWindow::setURL( const ::rtl::OUString& rURL ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir if( mpImpl ) 69cdf0e10cSrcweir mpImpl->setURL( rURL ); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir // ------------------------------------------------------------------------- 73cdf0e10cSrcweir 74cdf0e10cSrcweir const ::rtl::OUString& MediaWindow::getURL() const 75cdf0e10cSrcweir { 76cdf0e10cSrcweir return mpImpl->getURL(); 77cdf0e10cSrcweir } 78cdf0e10cSrcweir 79cdf0e10cSrcweir // ------------------------------------------------------------------------- 80cdf0e10cSrcweir 81cdf0e10cSrcweir bool MediaWindow::isValid() const 82cdf0e10cSrcweir { 83cdf0e10cSrcweir return( mpImpl != NULL && mpImpl->isValid() ); 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir // ------------------------------------------------------------------------- 87cdf0e10cSrcweir 88cdf0e10cSrcweir void MediaWindow::MouseMove( const MouseEvent& /* rMEvt */ ) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir } 91cdf0e10cSrcweir 92cdf0e10cSrcweir // --------------------------------------------------------------------- 93cdf0e10cSrcweir 94cdf0e10cSrcweir void MediaWindow::MouseButtonDown( const MouseEvent& /* rMEvt */ ) 95cdf0e10cSrcweir { 96cdf0e10cSrcweir } 97cdf0e10cSrcweir 98cdf0e10cSrcweir // --------------------------------------------------------------------- 99cdf0e10cSrcweir 100cdf0e10cSrcweir void MediaWindow::MouseButtonUp( const MouseEvent& /* rMEvt */ ) 101cdf0e10cSrcweir { 102cdf0e10cSrcweir } 103cdf0e10cSrcweir 104cdf0e10cSrcweir // ------------------------------------------------------------------------- 105cdf0e10cSrcweir 106cdf0e10cSrcweir void MediaWindow::KeyInput( const KeyEvent& /* rKEvt */ ) 107cdf0e10cSrcweir { 108cdf0e10cSrcweir } 109cdf0e10cSrcweir 110cdf0e10cSrcweir // ------------------------------------------------------------------------- 111cdf0e10cSrcweir 112cdf0e10cSrcweir void MediaWindow::KeyUp( const KeyEvent& /* rKEvt */ ) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir } 115cdf0e10cSrcweir 116cdf0e10cSrcweir // ------------------------------------------------------------------------- 117cdf0e10cSrcweir 118cdf0e10cSrcweir void MediaWindow::Command( const CommandEvent& /* rCEvt */ ) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir // ------------------------------------------------------------------------- 123cdf0e10cSrcweir 124cdf0e10cSrcweir sal_Int8 MediaWindow::AcceptDrop( const AcceptDropEvent& /* rEvt */ ) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir return 0; 127cdf0e10cSrcweir } 128cdf0e10cSrcweir 129cdf0e10cSrcweir // ------------------------------------------------------------------------- 130cdf0e10cSrcweir 131cdf0e10cSrcweir sal_Int8 MediaWindow::ExecuteDrop( const ExecuteDropEvent& /* rEvt */ ) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir return 0; 134cdf0e10cSrcweir } 135cdf0e10cSrcweir 136cdf0e10cSrcweir // ------------------------------------------------------------------------- 137cdf0e10cSrcweir 138cdf0e10cSrcweir void MediaWindow::StartDrag( sal_Int8 /* nAction */, const Point& /* rPosPixel */ ) 139cdf0e10cSrcweir { 140cdf0e10cSrcweir } 141cdf0e10cSrcweir 142cdf0e10cSrcweir // ------------------------------------------------------------------------- 143cdf0e10cSrcweir 144cdf0e10cSrcweir bool MediaWindow::hasPreferredSize() const 145cdf0e10cSrcweir { 146cdf0e10cSrcweir return( mpImpl != NULL && mpImpl->hasPreferredSize() ); 147cdf0e10cSrcweir } 148cdf0e10cSrcweir 149cdf0e10cSrcweir // ------------------------------------------------------------------------- 150cdf0e10cSrcweir 151cdf0e10cSrcweir Size MediaWindow::getPreferredSize() const 152cdf0e10cSrcweir { 153cdf0e10cSrcweir return mpImpl->getPreferredSize(); 154cdf0e10cSrcweir } 155cdf0e10cSrcweir 156cdf0e10cSrcweir // ------------------------------------------------------------------------- 157cdf0e10cSrcweir 158cdf0e10cSrcweir void MediaWindow::setPosSize( const Rectangle& rNewRect ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir if( mpImpl ) 161cdf0e10cSrcweir { 162cdf0e10cSrcweir mpImpl->setPosSize( rNewRect ); 163cdf0e10cSrcweir } 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir // ------------------------------------------------------------------------- 167cdf0e10cSrcweir 168cdf0e10cSrcweir Rectangle MediaWindow::getPosSize() const 169cdf0e10cSrcweir { 170cdf0e10cSrcweir return Rectangle( mpImpl->GetPosPixel(), mpImpl->GetSizePixel() ); 171cdf0e10cSrcweir } 172cdf0e10cSrcweir 173cdf0e10cSrcweir // ------------------------------------------------------------------------- 174cdf0e10cSrcweir 175cdf0e10cSrcweir void MediaWindow::setPointer( const Pointer& rPointer ) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir if( mpImpl ) 178cdf0e10cSrcweir mpImpl->setPointer( rPointer ); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir 181cdf0e10cSrcweir // ------------------------------------------------------------------------- 182cdf0e10cSrcweir 183cdf0e10cSrcweir const Pointer& MediaWindow::getPointer() const 184cdf0e10cSrcweir { 185cdf0e10cSrcweir return mpImpl->getPointer(); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir 188cdf0e10cSrcweir // ------------------------------------------------------------------------- 189cdf0e10cSrcweir 190cdf0e10cSrcweir bool MediaWindow::setZoom( ::com::sun::star::media::ZoomLevel eLevel ) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir return( mpImpl != NULL && mpImpl->setZoom( eLevel ) ); 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir // ------------------------------------------------------------------------- 196cdf0e10cSrcweir 197cdf0e10cSrcweir ::com::sun::star::media::ZoomLevel MediaWindow::getZoom() const 198cdf0e10cSrcweir { 199cdf0e10cSrcweir return mpImpl->getZoom(); 200cdf0e10cSrcweir } 201cdf0e10cSrcweir 202cdf0e10cSrcweir // ------------------------------------------------------------------------- 203cdf0e10cSrcweir 204cdf0e10cSrcweir bool MediaWindow::start() 205cdf0e10cSrcweir { 206cdf0e10cSrcweir return( mpImpl != NULL && mpImpl->start() ); 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir // ------------------------------------------------------------------------- 210cdf0e10cSrcweir 211cdf0e10cSrcweir void MediaWindow::stop() 212cdf0e10cSrcweir { 213cdf0e10cSrcweir if( mpImpl ) 214cdf0e10cSrcweir mpImpl->stop(); 215cdf0e10cSrcweir } 216cdf0e10cSrcweir 217cdf0e10cSrcweir // ------------------------------------------------------------------------- 218cdf0e10cSrcweir 219cdf0e10cSrcweir bool MediaWindow::isPlaying() const 220cdf0e10cSrcweir { 221cdf0e10cSrcweir return( mpImpl != NULL && mpImpl->isPlaying() ); 222cdf0e10cSrcweir } 223cdf0e10cSrcweir 224cdf0e10cSrcweir // ------------------------------------------------------------------------- 225cdf0e10cSrcweir 226cdf0e10cSrcweir double MediaWindow::getDuration() const 227cdf0e10cSrcweir { 228cdf0e10cSrcweir return mpImpl->getDuration(); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir 231cdf0e10cSrcweir // ------------------------------------------------------------------------- 232cdf0e10cSrcweir 233cdf0e10cSrcweir void MediaWindow::setMediaTime( double fTime ) 234cdf0e10cSrcweir { 235cdf0e10cSrcweir if( mpImpl ) 236cdf0e10cSrcweir mpImpl->setMediaTime( fTime ); 237cdf0e10cSrcweir } 238cdf0e10cSrcweir 239cdf0e10cSrcweir // ------------------------------------------------------------------------- 240cdf0e10cSrcweir 241cdf0e10cSrcweir double MediaWindow::getMediaTime() const 242cdf0e10cSrcweir { 243cdf0e10cSrcweir return mpImpl->getMediaTime(); 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir // ------------------------------------------------------------------------- 247cdf0e10cSrcweir 248cdf0e10cSrcweir void MediaWindow::setStopTime( double fTime ) 249cdf0e10cSrcweir { 250cdf0e10cSrcweir if( mpImpl ) 251cdf0e10cSrcweir mpImpl->setStopTime( fTime ); 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir // ------------------------------------------------------------------------- 255cdf0e10cSrcweir 256cdf0e10cSrcweir double MediaWindow::getStopTime() const 257cdf0e10cSrcweir { 258cdf0e10cSrcweir return mpImpl->getStopTime(); 259cdf0e10cSrcweir } 260cdf0e10cSrcweir 261cdf0e10cSrcweir // ------------------------------------------------------------------------- 262cdf0e10cSrcweir 263cdf0e10cSrcweir void MediaWindow::setRate( double fRate ) 264cdf0e10cSrcweir { 265cdf0e10cSrcweir if( mpImpl ) 266cdf0e10cSrcweir mpImpl->setRate( fRate ); 267cdf0e10cSrcweir } 268cdf0e10cSrcweir 269cdf0e10cSrcweir // ------------------------------------------------------------------------- 270cdf0e10cSrcweir 271cdf0e10cSrcweir double MediaWindow::getRate() const 272cdf0e10cSrcweir { 273cdf0e10cSrcweir return mpImpl->getRate(); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir 276cdf0e10cSrcweir // ------------------------------------------------------------------------- 277cdf0e10cSrcweir 278cdf0e10cSrcweir void MediaWindow::setPlaybackLoop( bool bSet ) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir if( mpImpl ) 281cdf0e10cSrcweir mpImpl->setPlaybackLoop( bSet ); 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284cdf0e10cSrcweir // ------------------------------------------------------------------------- 285cdf0e10cSrcweir 286cdf0e10cSrcweir bool MediaWindow::isPlaybackLoop() const 287cdf0e10cSrcweir { 288cdf0e10cSrcweir return mpImpl->isPlaybackLoop(); 289cdf0e10cSrcweir } 290cdf0e10cSrcweir 291cdf0e10cSrcweir // ------------------------------------------------------------------------- 292cdf0e10cSrcweir 293cdf0e10cSrcweir void MediaWindow::setMute( bool bSet ) 294cdf0e10cSrcweir { 295cdf0e10cSrcweir if( mpImpl ) 296cdf0e10cSrcweir mpImpl->setMute( bSet ); 297cdf0e10cSrcweir } 298cdf0e10cSrcweir 299cdf0e10cSrcweir // ------------------------------------------------------------------------- 300cdf0e10cSrcweir 301cdf0e10cSrcweir bool MediaWindow::isMute() const 302cdf0e10cSrcweir { 303cdf0e10cSrcweir return mpImpl->isMute(); 304cdf0e10cSrcweir } 305cdf0e10cSrcweir 306cdf0e10cSrcweir // ------------------------------------------------------------------------- 307cdf0e10cSrcweir 308cdf0e10cSrcweir void MediaWindow::updateMediaItem( MediaItem& rItem ) const 309cdf0e10cSrcweir { 310cdf0e10cSrcweir if( mpImpl ) 311cdf0e10cSrcweir mpImpl->updateMediaItem( rItem ); 312cdf0e10cSrcweir } 313cdf0e10cSrcweir 314cdf0e10cSrcweir // ------------------------------------------------------------------------- 315cdf0e10cSrcweir 316cdf0e10cSrcweir void MediaWindow::executeMediaItem( const MediaItem& rItem ) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir if( mpImpl ) 319cdf0e10cSrcweir mpImpl->executeMediaItem( rItem ); 320cdf0e10cSrcweir } 321cdf0e10cSrcweir 322cdf0e10cSrcweir // ------------------------------------------------------------------------- 323cdf0e10cSrcweir 324cdf0e10cSrcweir void MediaWindow::show() 325cdf0e10cSrcweir { 326cdf0e10cSrcweir if( mpImpl ) 327cdf0e10cSrcweir mpImpl->Show(); 328cdf0e10cSrcweir } 329cdf0e10cSrcweir 330cdf0e10cSrcweir // ------------------------------------------------------------------------- 331cdf0e10cSrcweir 332cdf0e10cSrcweir void MediaWindow::hide() 333cdf0e10cSrcweir { 334cdf0e10cSrcweir if( mpImpl ) 335cdf0e10cSrcweir mpImpl->Hide(); 336cdf0e10cSrcweir } 337cdf0e10cSrcweir 338cdf0e10cSrcweir // ------------------------------------------------------------------------- 339cdf0e10cSrcweir 340cdf0e10cSrcweir void MediaWindow::enable() 341cdf0e10cSrcweir { 342cdf0e10cSrcweir if( mpImpl ) 343cdf0e10cSrcweir mpImpl->Enable(); 344cdf0e10cSrcweir } 345cdf0e10cSrcweir 346cdf0e10cSrcweir // ------------------------------------------------------------------------- 347cdf0e10cSrcweir 348cdf0e10cSrcweir void MediaWindow::disable() 349cdf0e10cSrcweir { 350cdf0e10cSrcweir if( mpImpl ) 351cdf0e10cSrcweir mpImpl->Disable(); 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir // ------------------------------------------------------------------------- 355cdf0e10cSrcweir 356cdf0e10cSrcweir Window* MediaWindow::getWindow() const 357cdf0e10cSrcweir { 358cdf0e10cSrcweir return mpImpl; 359cdf0e10cSrcweir } 360cdf0e10cSrcweir 361cdf0e10cSrcweir // ------------------------------------------------------------------------- 362cdf0e10cSrcweir 363cdf0e10cSrcweir void MediaWindow::getMediaFilters( FilterNameVector& rFilterNameVector ) 364cdf0e10cSrcweir { 365cdf0e10cSrcweir static const char* pFilters[] = { "AIF Audio", "aif;aiff", 366cdf0e10cSrcweir "AU Audio", "au", 367cdf0e10cSrcweir "AVI", "avi", 368cdf0e10cSrcweir "CD Audio", "cda", 369*a00e7f9fSAriel Constenla-Haile "FLAC Audio", "flac", 370*a00e7f9fSAriel Constenla-Haile "Flash Video", "flv", 371cdf0e10cSrcweir "Matroska Media", "mkv", 372cdf0e10cSrcweir "MIDI Audio", "mid;midi", 373cdf0e10cSrcweir "MPEG Audio", "mp2;mp3;mpa", 374cdf0e10cSrcweir "MPEG Video", "mpg;mpeg;mpv;mp4", 375*a00e7f9fSAriel Constenla-Haile "Ogg bitstream", "ogg;oga;ogv", 376cdf0e10cSrcweir "Quicktime Video", "mov", 377cdf0e10cSrcweir "Vivo Video", "viv", 378*a00e7f9fSAriel Constenla-Haile "WAVE Audio", "wav", 379*a00e7f9fSAriel Constenla-Haile "Windows Media Video", "wmv" }; 380cdf0e10cSrcweir 381cdf0e10cSrcweir unsigned int i; 382cdf0e10cSrcweir for( i = 0; i < ( sizeof( pFilters ) / sizeof( char* ) ); i += 2 ) 383cdf0e10cSrcweir { 384cdf0e10cSrcweir rFilterNameVector.push_back( ::std::make_pair< ::rtl::OUString, ::rtl::OUString >( 385cdf0e10cSrcweir ::rtl::OUString::createFromAscii( pFilters[ i ] ), 386cdf0e10cSrcweir ::rtl::OUString::createFromAscii( pFilters[ i + 1 ] ) ) ); 387cdf0e10cSrcweir } 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir // ------------------------------------------------------------------------- 391cdf0e10cSrcweir 392cdf0e10cSrcweir bool MediaWindow::executeMediaURLDialog( Window* /* pParent */, ::rtl::OUString& rURL, bool bInsertDialog ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 ); 395cdf0e10cSrcweir static const ::rtl::OUString aWildcard( RTL_CONSTASCII_USTRINGPARAM( "*." ) ); 396cdf0e10cSrcweir FilterNameVector aFilters; 397cdf0e10cSrcweir const ::rtl::OUString aSeparator( RTL_CONSTASCII_USTRINGPARAM( ";" ) ); 398cdf0e10cSrcweir ::rtl::OUString aAllTypes; 399cdf0e10cSrcweir 400cdf0e10cSrcweir aDlg.SetTitle( AVMEDIA_RESID( bInsertDialog ? AVMEDIA_STR_INSERTMEDIA_DLG : AVMEDIA_STR_OPENMEDIA_DLG ) ); 401cdf0e10cSrcweir 402cdf0e10cSrcweir getMediaFilters( aFilters ); 403cdf0e10cSrcweir 404cdf0e10cSrcweir unsigned int i; 405cdf0e10cSrcweir for( i = 0; i < aFilters.size(); ++i ) 406cdf0e10cSrcweir { 407cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex >= 0; ) 408cdf0e10cSrcweir { 409cdf0e10cSrcweir if( aAllTypes.getLength() ) 410cdf0e10cSrcweir aAllTypes += aSeparator; 411cdf0e10cSrcweir 412cdf0e10cSrcweir ( aAllTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex ); 413cdf0e10cSrcweir } 414cdf0e10cSrcweir } 415cdf0e10cSrcweir 416cdf0e10cSrcweir // add filter for all media types 417cdf0e10cSrcweir aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_MEDIAFILES ), aAllTypes ); 418cdf0e10cSrcweir 419cdf0e10cSrcweir for( i = 0; i < aFilters.size(); ++i ) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir ::rtl::OUString aTypes; 422cdf0e10cSrcweir 423cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex >= 0; ) 424cdf0e10cSrcweir { 425cdf0e10cSrcweir if( aTypes.getLength() ) 426cdf0e10cSrcweir aTypes += aSeparator; 427cdf0e10cSrcweir 428cdf0e10cSrcweir ( aTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex ); 429cdf0e10cSrcweir } 430cdf0e10cSrcweir 431cdf0e10cSrcweir // add single filters 432cdf0e10cSrcweir aDlg.AddFilter( aFilters[ i ].first, aTypes ); 433cdf0e10cSrcweir } 434cdf0e10cSrcweir 435cdf0e10cSrcweir // add filter for all types 436cdf0e10cSrcweir aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_FILES ), String( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) ) ); 437cdf0e10cSrcweir 438cdf0e10cSrcweir if( aDlg.Execute() == ERRCODE_NONE ) 439cdf0e10cSrcweir { 440cdf0e10cSrcweir const INetURLObject aURL( aDlg.GetPath() ); 441cdf0e10cSrcweir rURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); 442cdf0e10cSrcweir } 443cdf0e10cSrcweir else if( rURL.getLength() ) 444cdf0e10cSrcweir rURL = ::rtl::OUString(); 445cdf0e10cSrcweir 446cdf0e10cSrcweir return( rURL.getLength() > 0 ); 447cdf0e10cSrcweir } 448cdf0e10cSrcweir 449cdf0e10cSrcweir // ------------------------------------------------------------------------- 450cdf0e10cSrcweir 451cdf0e10cSrcweir void MediaWindow::executeFormatErrorBox( Window* pParent ) 452cdf0e10cSrcweir { 453cdf0e10cSrcweir ErrorBox aErrBox( pParent, AVMEDIA_RESID( AVMEDIA_ERR_URL ) ); 454cdf0e10cSrcweir 455cdf0e10cSrcweir aErrBox.Execute(); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir 458cdf0e10cSrcweir // ------------------------------------------------------------------------- 459cdf0e10cSrcweir 460cdf0e10cSrcweir bool MediaWindow::isMediaURL( const ::rtl::OUString& rURL, bool bDeep, Size* pPreferredSizePixel ) 461cdf0e10cSrcweir { 462cdf0e10cSrcweir const INetURLObject aURL( rURL ); 463cdf0e10cSrcweir bool bRet = false; 464cdf0e10cSrcweir 465cdf0e10cSrcweir if( aURL.GetProtocol() != INET_PROT_NOT_VALID ) 466cdf0e10cSrcweir { 467cdf0e10cSrcweir if( bDeep || pPreferredSizePixel ) 468cdf0e10cSrcweir { 469cdf0e10cSrcweir try 470cdf0e10cSrcweir { 471cdf0e10cSrcweir sal_Bool bIsJavaBasedMediaWindow; 472cdf0e10cSrcweir uno::Reference< media::XPlayer > xPlayer( priv::MediaWindowImpl::createPlayer( 473cdf0e10cSrcweir aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ), 474cdf0e10cSrcweir bIsJavaBasedMediaWindow ) ); 475cdf0e10cSrcweir 476cdf0e10cSrcweir if( xPlayer.is() ) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir bRet = true; 479cdf0e10cSrcweir 480cdf0e10cSrcweir if( pPreferredSizePixel ) 481cdf0e10cSrcweir { 482cdf0e10cSrcweir const awt::Size aAwtSize( xPlayer->getPreferredPlayerWindowSize() ); 483cdf0e10cSrcweir 484cdf0e10cSrcweir pPreferredSizePixel->Width() = aAwtSize.Width; 485cdf0e10cSrcweir pPreferredSizePixel->Height() = aAwtSize.Height; 486cdf0e10cSrcweir } 487cdf0e10cSrcweir } 488cdf0e10cSrcweir } 489cdf0e10cSrcweir catch( ... ) 490cdf0e10cSrcweir { 491cdf0e10cSrcweir } 492cdf0e10cSrcweir } 493cdf0e10cSrcweir else 494cdf0e10cSrcweir { 495cdf0e10cSrcweir FilterNameVector aFilters; 496cdf0e10cSrcweir const ::rtl::OUString aExt( aURL.getExtension() ); 497cdf0e10cSrcweir 498cdf0e10cSrcweir getMediaFilters( aFilters ); 499cdf0e10cSrcweir 500cdf0e10cSrcweir unsigned int i; 501cdf0e10cSrcweir for( i = 0; ( i < aFilters.size() ) && !bRet; ++i ) 502cdf0e10cSrcweir { 503cdf0e10cSrcweir for( sal_Int32 nIndex = 0; nIndex >= 0 && !bRet; ) 504cdf0e10cSrcweir { 505cdf0e10cSrcweir if( aExt.equalsIgnoreAsciiCase( aFilters[ i ].second.getToken( 0, ';', nIndex ) ) ) 506cdf0e10cSrcweir bRet = true; 507cdf0e10cSrcweir } 508cdf0e10cSrcweir } 509cdf0e10cSrcweir } 510cdf0e10cSrcweir } 511cdf0e10cSrcweir 512cdf0e10cSrcweir return bRet; 513cdf0e10cSrcweir } 514cdf0e10cSrcweir 515cdf0e10cSrcweir // ------------------------------------------------------------------------- 516cdf0e10cSrcweir 517cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindow::createPlayer( const ::rtl::OUString& rURL ) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir sal_Bool bJavaBased = sal_False; 520cdf0e10cSrcweir return priv::MediaWindowImpl::createPlayer( rURL, bJavaBased ); 521cdf0e10cSrcweir } 522cdf0e10cSrcweir 523cdf0e10cSrcweir // ------------------------------------------------------------------------- 524cdf0e10cSrcweir 525cdf0e10cSrcweir uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const ::rtl::OUString& rURL, 526cdf0e10cSrcweir bool bAllowToCreateReplacementGraphic, 527cdf0e10cSrcweir double fMediaTime ) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir uno::Reference< media::XPlayer > xPlayer( createPlayer( rURL ) ); 530cdf0e10cSrcweir uno::Reference< graphic::XGraphic > xRet; 531cdf0e10cSrcweir ::std::auto_ptr< Graphic > apGraphic; 532cdf0e10cSrcweir 533cdf0e10cSrcweir if( xPlayer.is() ) 534cdf0e10cSrcweir { 535cdf0e10cSrcweir uno::Reference< media::XFrameGrabber > xGrabber( xPlayer->createFrameGrabber() ); 536cdf0e10cSrcweir 537cdf0e10cSrcweir if( xGrabber.is() ) 538cdf0e10cSrcweir { 539cdf0e10cSrcweir if( AVMEDIA_FRAMEGRABBER_DEFAULTFRAME == fMediaTime ) 540cdf0e10cSrcweir fMediaTime = AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME; 541cdf0e10cSrcweir 542cdf0e10cSrcweir if( fMediaTime >= xPlayer->getDuration() ) 543cdf0e10cSrcweir fMediaTime = ( xPlayer->getDuration() * 0.5 ); 544cdf0e10cSrcweir 545cdf0e10cSrcweir xRet = xGrabber->grabFrame( fMediaTime ); 546cdf0e10cSrcweir } 547cdf0e10cSrcweir 548cdf0e10cSrcweir if( !xRet.is() && bAllowToCreateReplacementGraphic ) 549cdf0e10cSrcweir { 550cdf0e10cSrcweir awt::Size aPrefSize( xPlayer->getPreferredPlayerWindowSize() ); 551cdf0e10cSrcweir 552cdf0e10cSrcweir if( !aPrefSize.Width && !aPrefSize.Height ) 553cdf0e10cSrcweir { 554cdf0e10cSrcweir const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) ); 555cdf0e10cSrcweir apGraphic.reset( new Graphic( aBmpEx ) ); 556cdf0e10cSrcweir } 557cdf0e10cSrcweir } 558cdf0e10cSrcweir } 559cdf0e10cSrcweir 560cdf0e10cSrcweir if( !xRet.is() && !apGraphic.get() && bAllowToCreateReplacementGraphic ) 561cdf0e10cSrcweir { 562cdf0e10cSrcweir const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) ); 563cdf0e10cSrcweir apGraphic.reset( new Graphic( aBmpEx ) ); 564cdf0e10cSrcweir } 565cdf0e10cSrcweir 566cdf0e10cSrcweir if( apGraphic.get() ) 567cdf0e10cSrcweir xRet = apGraphic->GetXGraphic(); 568cdf0e10cSrcweir 569cdf0e10cSrcweir return xRet; 570cdf0e10cSrcweir } 571cdf0e10cSrcweir 572cdf0e10cSrcweir } // namespace avemdia 573