diff options
author | Herbert Dürr <hdu@apache.org> | 2014-05-12 16:07:09 +0000 |
---|---|---|
committer | Herbert Dürr <hdu@apache.org> | 2014-05-12 16:07:09 +0000 |
commit | 976e787f6b33389ea9dcd35ff7680dedeace47ac (patch) | |
tree | b9b30a16ef648aea64f143c800ba648fa1becc5d /avmedia/source | |
parent | c8ae4566ddb961775f35952dff52233faa0a0668 (diff) |
#i124875# avoid wasteful loading of an AVAsset in MacAVF::Framegrabber
FrameGrabber used to load its own copy of a movie. Since multimedia content
is often very data-intensive this should and can be avoided by using the
movie asset already available in the Player.
Notes
Notes:
merged as: 754380524d6b9f3b5f49629ac8b3ad392cc5173c
Diffstat (limited to 'avmedia/source')
-rw-r--r-- | avmedia/source/macavf/macavf_framegrabber.cxx | 12 | ||||
-rw-r--r-- | avmedia/source/macavf/macavf_framegrabber.hxx | 1 | ||||
-rw-r--r-- | avmedia/source/macavf/macavf_player.cxx | 23 | ||||
-rw-r--r-- | avmedia/source/macavf/macavf_player.hxx | 4 |
4 files changed, 15 insertions, 25 deletions
diff --git a/avmedia/source/macavf/macavf_framegrabber.cxx b/avmedia/source/macavf/macavf_framegrabber.cxx index 1748199ca1c9..55611af6b35b 100644 --- a/avmedia/source/macavf/macavf_framegrabber.cxx +++ b/avmedia/source/macavf/macavf_framegrabber.cxx @@ -51,8 +51,6 @@ FrameGrabber::~FrameGrabber() bool FrameGrabber::create( const ::rtl::OUString& rURL ) { - // TODO: use AVPlayer's movie directly instead of loading it here? - NSString* pNSStr = [NSString stringWithCharacters:rURL.getStr() length:rURL.getLength()]; NSURL* pNSURL = [NSURL URLWithString: [pNSStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; AVAsset* pMovie = [AVURLAsset URLAssetWithURL:pNSURL options:nil]; @@ -61,9 +59,17 @@ bool FrameGrabber::create( const ::rtl::OUString& rURL ) OSL_TRACE( "AVGrabber::create() cannot load url=\"%s\"", [pNSStr UTF8String] ); return false; } + + return create( pMovie ); +} + +// ------------------------------------------------------------------------------ + +bool FrameGrabber::create( AVAsset* pMovie ) +{ if( [[pMovie tracksWithMediaType:AVMediaTypeVideo] count] == 0) { - OSL_TRACE( "AVGrabber::create() found no video in url=\"%s\"", [pNSStr UTF8String] ); + OSL_TRACE( "AVGrabber::create() found no video content!" ); return false; } diff --git a/avmedia/source/macavf/macavf_framegrabber.hxx b/avmedia/source/macavf/macavf_framegrabber.hxx index 21d1dad5732d..940e54db4976 100644 --- a/avmedia/source/macavf/macavf_framegrabber.hxx +++ b/avmedia/source/macavf/macavf_framegrabber.hxx @@ -42,6 +42,7 @@ public: virtual ~FrameGrabber(); bool create( const ::rtl::OUString& rURL ); + bool create( AVAsset* pMovie ); // XFrameGrabber virtual ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > SAL_CALL grabFrame( double fMediaTime ) throw (::com::sun::star::uno::RuntimeException); diff --git a/avmedia/source/macavf/macavf_player.cxx b/avmedia/source/macavf/macavf_player.cxx index 2e159071453b..26bc07a2d926 100644 --- a/avmedia/source/macavf/macavf_player.cxx +++ b/avmedia/source/macavf/macavf_player.cxx @@ -112,17 +112,6 @@ Player::~Player() // ------------------------------------------------------------------------------ -AVAsset* Player::getMovie() -{ - if( !mpPlayer ) - return nil; - AVAsset* pMovie = [[mpPlayer currentItem] asset]; - OSL_ASSERT( pMovie ); - return pMovie; -} - -// ------------------------------------------------------------------------------ - bool Player::handleObservation( NSString* pKeyPath ) { OSL_TRACE( "AVPlayer::handleObservation key=\"%s\"", [pKeyPath UTF8String]); @@ -139,8 +128,6 @@ bool Player::handleObservation( NSString* pKeyPath ) bool Player::create( const ::rtl::OUString& rURL ) { - maURL = rURL; - // get the media asset NSString* aNSStr = [NSString stringWithCharacters:rURL.getStr() length:rURL.getLength()]; NSURL* aNSURL = [NSURL URLWithString: [aNSStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; @@ -433,12 +420,10 @@ uno::Reference< media::XFrameGrabber > SAL_CALL Player::createFrameGrabber() uno::Reference< media::XFrameGrabber > xRet; OSL_TRACE ("Player::createFrameGrabber"); - if( !maURL.isEmpty() ) - { - FrameGrabber* pGrabber = new FrameGrabber( mxMgr ); - if( pGrabber->create( maURL ) ) - xRet = pGrabber; - } + FrameGrabber* pGrabber = new FrameGrabber( mxMgr ); + AVAsset* pMovie = [[mpPlayer currentItem] asset]; + if( pGrabber->create( pMovie ) ) + xRet = pGrabber; return xRet; } diff --git a/avmedia/source/macavf/macavf_player.hxx b/avmedia/source/macavf/macavf_player.hxx index 98c545419f76..fc995516247b 100644 --- a/avmedia/source/macavf/macavf_player.hxx +++ b/avmedia/source/macavf/macavf_player.hxx @@ -46,6 +46,7 @@ public: virtual ~Player(); bool create( const ::rtl::OUString& rURL ); + bool create( AVAsset* ); // XPlayer virtual void SAL_CALL start() throw (::com::sun::star::uno::RuntimeException); @@ -72,15 +73,12 @@ public: virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); - AVAsset* getMovie(); AVPlayer* getAVPlayer() const { return mpPlayer; } virtual bool handleObservation( NSString* pKeyPath ); private: ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxMgr; - ::rtl::OUString maURL; - AVPlayer* mpPlayer; float mfUnmutedVolume; |