Kaydet (Commit) 793eaa8b authored tarafından Minh Ngo's avatar Minh Ngo

Mute sound when grabbing a frame.

Change-Id: I8190d6c9a93183d48076c95a7cd0b978a2954afb
üst 5480482b
...@@ -25,15 +25,23 @@ namespace ...@@ -25,15 +25,23 @@ namespace
const ::rtl::OUString AVMEDIA_VLC_GRABBER_IMPLEMENTATIONNAME = "com.sun.star.comp.avmedia.VLCFrameGrabber_VLC"; const ::rtl::OUString AVMEDIA_VLC_GRABBER_IMPLEMENTATIONNAME = "com.sun.star.comp.avmedia.VLCFrameGrabber_VLC";
const ::rtl::OUString AVMEDIA_VLC_GRABBER_SERVICENAME = "com.sun.star.media.VLCFrameGrabber_VLC"; const ::rtl::OUString AVMEDIA_VLC_GRABBER_SERVICENAME = "com.sun.star.media.VLCFrameGrabber_VLC";
const int MSEC_IN_SEC = 1000; const int MSEC_IN_SEC = 1000;
const char * const VLC_ARGS[] = {
"-Vdummy",
"--snapshot-format=png",
"--ffmpeg-threads",
"--verbose=-1",
"--no-audio"
};
} }
VLCFrameGrabber::VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, const rtl::OUString& url ) VLCFrameGrabber::VLCFrameGrabber( VLC::EventHandler& eh, const rtl::OUString& url )
: FrameGrabber_BASE() : FrameGrabber_BASE()
, mPlayer( player ) , mInstance( sizeof( VLC_ARGS ) / sizeof( VLC_ARGS[0] ), VLC_ARGS )
, mUrl( url ) , mMedia( url, mInstance )
, mPlayer( mMedia )
, mEventHandler( eh ) , mEventHandler( eh )
{ {
std::cout << "URL: " << url << std::endl;
} }
::uno::Reference< css::graphic::XGraphic > SAL_CALL VLCFrameGrabber::grabFrame( double fMediaTime ) ::uno::Reference< css::graphic::XGraphic > SAL_CALL VLCFrameGrabber::grabFrame( double fMediaTime )
...@@ -46,8 +54,6 @@ VLCFrameGrabber::VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, co ...@@ -46,8 +54,6 @@ VLCFrameGrabber::VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, co
VLC::EventManager manager( mPlayer, mEventHandler ); VLC::EventManager manager( mPlayer, mEventHandler );
manager.onPaused(boost::bind(&osl::Condition::set, &condition)); manager.onPaused(boost::bind(&osl::Condition::set, &condition));
mPlayer.setMute( true );
if ( !mPlayer.play() ) if ( !mPlayer.play() )
{ {
std::cerr << "Couldn't play when trying to grab frame" << std::endl; std::cerr << "Couldn't play when trying to grab frame" << std::endl;
...@@ -60,19 +66,14 @@ VLCFrameGrabber::VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, co ...@@ -60,19 +66,14 @@ VLCFrameGrabber::VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, co
const TimeValue timeout = {2, 0}; const TimeValue timeout = {2, 0};
condition.wait(&timeout); condition.wait(&timeout);
if ( mUrl.isEmpty() || !mPlayer.hasVout() ) if ( !mPlayer.hasVout() )
{ {
std::cerr << "Couldn't grab frame" << std::endl; std::cerr << "Couldn't grab frame" << std::endl;
mPlayer.setMute( false );
manager.onPaused(); manager.onPaused();
return ::uno::Reference< css::graphic::XGraphic >(); return ::uno::Reference< css::graphic::XGraphic >();
} }
std::cout << "Take snapshot " << fileName << std::endl; mPlayer.takeSnapshot( fileName );
std::cout << mPlayer.takeSnapshot( fileName ) << std::endl;
mPlayer.setMute( false );
mPlayer.stop(); mPlayer.stop();
manager.onPaused(); manager.onPaused();
......
...@@ -24,10 +24,10 @@ ...@@ -24,10 +24,10 @@
#include <com/sun/star/media/XFrameGrabber.hpp> #include <com/sun/star/media/XFrameGrabber.hpp>
#include <cppuhelper/implbase2.hxx> #include <cppuhelper/implbase2.hxx>
#include "vlccommon.hxx" #include "vlccommon.hxx"
#include "wrapper/Wrapper.hxx"
namespace VLC namespace VLC
{ {
class Player;
class EventHandler; class EventHandler;
} }
...@@ -39,11 +39,12 @@ typedef ::cppu::WeakImplHelper2< ::com::sun::star::media::XFrameGrabber, ...@@ -39,11 +39,12 @@ typedef ::cppu::WeakImplHelper2< ::com::sun::star::media::XFrameGrabber,
class VLCFrameGrabber : public FrameGrabber_BASE class VLCFrameGrabber : public FrameGrabber_BASE
{ {
VLC::Player& mPlayer; VLC::Instance mInstance;
const rtl::OUString& mUrl; VLC::Media mMedia;
VLC::Player mPlayer;
VLC::EventHandler& mEventHandler; VLC::EventHandler& mEventHandler;
public: public:
VLCFrameGrabber( VLC::Player& player, VLC::EventHandler& eh, const rtl::OUString& url ); VLCFrameGrabber( VLC::EventHandler& eh, const rtl::OUString& url );
::com::sun::star::uno::Reference< css::graphic::XGraphic > SAL_CALL grabFrame( double fMediaTime ) throw ( ::com::sun::star::uno::RuntimeException ); ::com::sun::star::uno::Reference< css::graphic::XGraphic > SAL_CALL grabFrame( double fMediaTime ) throw ( ::com::sun::star::uno::RuntimeException );
......
...@@ -29,8 +29,6 @@ namespace ...@@ -29,8 +29,6 @@ namespace
const char * const VLC_ARGS[] = { const char * const VLC_ARGS[] = {
"-Vdummy", "-Vdummy",
"--snapshot-format=png",
"--ffmpeg-threads",
"--verbose=-1" "--verbose=-1"
}; };
} }
......
...@@ -189,8 +189,13 @@ uno::Reference< css::media::XFrameGrabber > SAL_CALL VLCPlayer::createFrameGrabb ...@@ -189,8 +189,13 @@ uno::Reference< css::media::XFrameGrabber > SAL_CALL VLCPlayer::createFrameGrabb
throw ( ::com::sun::star::uno::RuntimeException ) throw ( ::com::sun::star::uno::RuntimeException )
{ {
::osl::MutexGuard aGuard(m_aMutex); ::osl::MutexGuard aGuard(m_aMutex);
VLCFrameGrabber *frameGrabber = new VLCFrameGrabber( mPlayer, mEventHandler, mUrl ); if ( !mrFrameGrabber.is() )
return uno::Reference< css::media::XFrameGrabber >( frameGrabber ); {
VLCFrameGrabber *frameGrabber = new VLCFrameGrabber( mEventHandler, mUrl );
mrFrameGrabber = uno::Reference< css::media::XFrameGrabber >( frameGrabber );
}
return mrFrameGrabber;
} }
::rtl::OUString SAL_CALL VLCPlayer::getImplementationName() ::rtl::OUString SAL_CALL VLCPlayer::getImplementationName()
......
...@@ -50,6 +50,7 @@ class VLCPlayer : public ::cppu::BaseMutex, ...@@ -50,6 +50,7 @@ class VLCPlayer : public ::cppu::BaseMutex,
VLC::EventManager mEventManager; VLC::EventManager mEventManager;
const rtl::OUString mUrl; const rtl::OUString mUrl;
bool mPlaybackLoop; bool mPlaybackLoop;
::com::sun::star::uno::Reference< css::media::XFrameGrabber > mrFrameGrabber;
public: public:
VLCPlayer( const rtl::OUString& url, VLCPlayer( const rtl::OUString& url,
VLC::Instance& instance, VLC::Instance& instance,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment