avmedia/source/vlc/vlcframegrabber.cxx | 13 +++++++++++-- avmedia/source/vlc/vlcmanager.cxx | 10 +++++++++- avmedia/source/vlc/vlcplayer.cxx | 6 +++++- avmedia/source/vlc/wrapper/Common.cxx | 5 ++++- avmedia/source/vlc/wrapper/Instance.cxx | 4 ++++ avmedia/source/vlc/wrapper/Media.cxx | 13 +++++++++++-- avmedia/source/vlc/wrapper/Player.cxx | 5 ++++- avmedia/source/vlc/wrapper/SymbolLoader.hxx | 15 +++++++++------ 8 files changed, 57 insertions(+), 14 deletions(-)
New commits: commit bc43c1ca942c4c111aa7f45b268e13ab03c7f613 Author: Minh Ngo <[email protected]> Date: Mon Oct 7 10:23:04 2013 +0300 Avmedia/VLC: Fixing some errors when creating libvlc_instance_t. condition wait is temporary only for non-windows system. Looks like there is some hang. Must be investigate later... Change-Id: Ia20227503f70244d33411164d4af95ba69e86509 diff --git a/avmedia/source/vlc/vlcframegrabber.cxx b/avmedia/source/vlc/vlcframegrabber.cxx index f5b7091..7a742e9 100644 --- a/avmedia/source/vlc/vlcframegrabber.cxx +++ b/avmedia/source/vlc/vlcframegrabber.cxx @@ -28,10 +28,15 @@ namespace const char * const VLC_ARGS[] = { "-Vdummy", + // "--ignore-config" + "--demux", + "ffmpeg", "--snapshot-format=png", - "--ffmpeg-threads", + "--ffmpeg-threads", /* Is deprecated in 2.1.0 */ "--verbose=2", - "--no-audio" + "--no-audio"//, + //"--file-logging", + //"--logfile=C:/home/dev/log/vlc_log" }; } @@ -64,7 +69,11 @@ VLCFrameGrabber::VLCFrameGrabber( wrapper::EventHandler& eh, const rtl::OUString mPlayer.pause(); const TimeValue timeout = {2, 0}; + + //TODO: Fix this hang on Windows +#ifndef WNT condition.wait(&timeout); +#endif if ( !mPlayer.hasVout() ) { diff --git a/avmedia/source/vlc/vlcmanager.cxx b/avmedia/source/vlc/vlcmanager.cxx index 8453bb4..370505d 100644 --- a/avmedia/source/vlc/vlcmanager.cxx +++ b/avmedia/source/vlc/vlcmanager.cxx @@ -30,7 +30,13 @@ namespace const char * const VLC_ARGS[] = { "-Vdummy", - "--verbose=2" +#ifdef WNT + "--demux", + "ffmpeg", +#endif + "--verbose=2"//, + //"--file-logging", + //"--logfile=C:/home/dev/log/vlc_log" }; } @@ -69,7 +75,9 @@ Manager::Manager( const uno::Reference< lang::XMultiServiceFactory >& rxMgr ) SAL_WARN("avmedia", "Cannot load symbols"); if (m_is_vlc_found) + { mEventHandler.create(); + } } Manager::~Manager() diff --git a/avmedia/source/vlc/vlcplayer.cxx b/avmedia/source/vlc/vlcplayer.cxx index a1fef95..8d54672 100644 --- a/avmedia/source/vlc/vlcplayer.cxx +++ b/avmedia/source/vlc/vlcplayer.cxx @@ -50,7 +50,10 @@ unsigned VLCPlayer::getHeight() const void SAL_CALL VLCPlayer::start() throw ( ::com::sun::star::uno::RuntimeException ) { ::osl::MutexGuard aGuard(m_aMutex); - mPlayer.play(); + if (!mPlayer.play()) + { + // TODO: Error + } } void SAL_CALL VLCPlayer::stop() throw ( ::com::sun::star::uno::RuntimeException ) @@ -226,6 +229,7 @@ uno::Reference< css::media::XFrameGrabber > SAL_CALL VLCPlayer::createFrameGrabb throw ( ::com::sun::star::uno::RuntimeException ) { ::osl::MutexGuard aGuard(m_aMutex); + if ( !mrFrameGrabber.is() ) { VLCFrameGrabber *frameGrabber = new VLCFrameGrabber( mEventHandler, mUrl ); commit 8de1f54e19b68194b79a642750b9d3a4c8707d7b Author: Minh Ngo <[email protected]> Date: Mon Oct 7 10:21:24 2013 +0300 Avmedia/VLC: Adding some todo Change-Id: I5c01ae2f0e2109460aa332b31b524f855b87948a diff --git a/avmedia/source/vlc/wrapper/Instance.cxx b/avmedia/source/vlc/wrapper/Instance.cxx index 4d117d6..a6a71d1 100644 --- a/avmedia/source/vlc/wrapper/Instance.cxx +++ b/avmedia/source/vlc/wrapper/Instance.cxx @@ -38,6 +38,10 @@ namespace wrapper Instance::Instance( int argc, const char * const argv[] ) : mInstance( libvlc_new( argc, argv ) ) { + if ( mInstance == NULL) + { + //TODO: error + } } Instance::Instance( const Instance& other ) diff --git a/avmedia/source/vlc/wrapper/Player.cxx b/avmedia/source/vlc/wrapper/Player.cxx index 92348e2..d8608d8 100644 --- a/avmedia/source/vlc/wrapper/Player.cxx +++ b/avmedia/source/vlc/wrapper/Player.cxx @@ -12,6 +12,7 @@ #include "Player.hxx" #include "Media.hxx" #include "SymbolLoader.hxx" + #include "Common.hxx" struct libvlc_media_t; @@ -50,6 +51,7 @@ namespace void ( *libvlc_video_set_scale ) ( libvlc_media_player_t *p_mi, float f_factor ); int ( *libvlc_video_get_size ) ( libvlc_media_player_t *p_mi, unsigned num, unsigned *px, unsigned *py ); + int ( *libvlc_video_get_track_count ) ( libvlc_media_player_t *p_mi ); } namespace avmedia @@ -87,7 +89,8 @@ namespace wrapper SYM_MAP( libvlc_video_set_mouse_input ), SYM_MAP( libvlc_media_player_retain ), SYM_MAP( libvlc_video_set_scale ), - SYM_MAP( libvlc_video_get_size ) + SYM_MAP( libvlc_video_get_size ), + SYM_MAP( libvlc_video_get_track_count ) }; return InitApiMap( VLC_PLAYER_API ); commit 926fcc560b7a5dc45968ddeffbf8cf185eb6f1c6 Author: Minh Ngo <[email protected]> Date: Mon Oct 7 10:18:29 2013 +0300 Avmedia/VLC: Using *_new_location instead of *_new_path function. There are some bug in *_new_location in the latest VLC versions. It doesn't parse URI correctly from the string "file:///blah-blah-blah". Change-Id: Iae54ad79fce0775a2f0a325766f713ff43e5d9ed diff --git a/avmedia/source/vlc/wrapper/Media.cxx b/avmedia/source/vlc/wrapper/Media.cxx index c2627de..d48ad49 100644 --- a/avmedia/source/vlc/wrapper/Media.cxx +++ b/avmedia/source/vlc/wrapper/Media.cxx @@ -25,18 +25,21 @@ namespace wrapper namespace { libvlc_media_t* ( *libvlc_media_new_path ) ( libvlc_instance_t *p_instance, const char *path ); + libvlc_media_t* ( *libvlc_media_new_location ) (libvlc_instance_t *p_instance, const char *psz_mrl); void ( *libvlc_media_release ) ( libvlc_media_t *p_md ); void ( *libvlc_media_retain ) ( libvlc_media_t *p_md ); libvlc_time_t ( *libvlc_media_get_duration ) ( libvlc_media_t *p_md ); void ( *libvlc_media_parse ) ( libvlc_media_t *p_md ); int ( *libvlc_media_is_parsed ) ( libvlc_media_t *p_md ); + char* ( *libvlc_media_get_mrl )(libvlc_media_t *p_md); + libvlc_media_t* InitMedia( const rtl::OUString& url, Instance& instance ) { rtl::OString dest; url.convertToString(&dest, RTL_TEXTENCODING_UTF8, 0); - return libvlc_media_new_path(instance, dest.getStr()); + return libvlc_media_new_location(instance, dest.getStr()); } } @@ -49,7 +52,9 @@ bool Media::LoadSymbols() SYM_MAP( libvlc_media_retain ), SYM_MAP( libvlc_media_get_duration ), SYM_MAP( libvlc_media_parse ), - SYM_MAP( libvlc_media_is_parsed ) + SYM_MAP( libvlc_media_is_parsed ), + SYM_MAP( libvlc_media_get_mrl ), + SYM_MAP( libvlc_media_new_location ) }; return InitApiMap( VLC_MEDIA_API ); @@ -58,6 +63,10 @@ bool Media::LoadSymbols() Media::Media( const rtl::OUString& url, Instance& instance ) : mMedia( InitMedia( url, instance ) ) { + if (mMedia == NULL) + { + // TODO: Error + } } Media::Media( const Media& other ) commit 3196e5b7a52580bfa9242a35175e241db328a49f Author: Minh Ngo <[email protected]> Date: Mon Oct 7 10:16:43 2013 +0300 Avmedia/VLC: Returns "No error" if there aren't any error. Change-Id: Ic080cbcef56a82129347bbb4f008d1c36b0a927a diff --git a/avmedia/source/vlc/wrapper/Common.cxx b/avmedia/source/vlc/wrapper/Common.cxx index 1ed5256..4c28b6d 100644 --- a/avmedia/source/vlc/wrapper/Common.cxx +++ b/avmedia/source/vlc/wrapper/Common.cxx @@ -11,6 +11,8 @@ namespace { + const char AVMEDIA_NO_ERROR[] = "No error"; + const char* ( *libvlc_get_version ) (void); char * ( * libvlc_errmsg ) (void); } @@ -39,7 +41,8 @@ const char* Common::Version() const char* Common::LastErrorMessage() { - return libvlc_errmsg(); + const char *errorMsg = libvlc_errmsg(); + return errorMsg == NULL ? AVMEDIA_NO_ERROR : errorMsg; } } } commit c2f9e24ecfdc36decb9c3042d88976399e4606aa Author: Minh Ngo <[email protected]> Date: Mon Oct 7 10:14:10 2013 +0300 Avmedia/VLC: Correct reading from the WINx86_64 registry for LO 32-bit. Change-Id: Ic98a179e5cfa34183e71a72bb417147612500a61 TODO: Unfortunately. Another cases must be checked later.... diff --git a/avmedia/source/vlc/wrapper/SymbolLoader.hxx b/avmedia/source/vlc/wrapper/SymbolLoader.hxx index ec38d1b..7061faf 100644 --- a/avmedia/source/vlc/wrapper/SymbolLoader.hxx +++ b/avmedia/source/vlc/wrapper/SymbolLoader.hxx @@ -47,21 +47,23 @@ namespace wchar_t arCurrent[MAX_PATH]; DWORD dwType, dwCurrentSize = sizeof( arCurrent ); - if ( ::RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SOFTWARE\\VideoLAN\\VLC", - 0, KEY_READ, &hKey ) == ERROR_SUCCESS ) + //TODO: This one will work only with LibreOffice 32-bit + VLC 32-bit on Win x86_64. + const LONG errorCore = ::RegOpenKeyExW( HKEY_LOCAL_MACHINE, L"SOFTWARE\\Wow6432Node\\VideoLAN\\VLC", 0, KEY_READ | KEY_WOW64_64KEY, &hKey ); + if ( errorCore == ERROR_SUCCESS ) { if ( ::RegQueryValueExW( hKey, L"InstallDir", NULL, &dwType, (LPBYTE) arCurrent, &dwCurrentSize ) == ERROR_SUCCESS && dwType == REG_SZ ) { ::RegCloseKey( hKey ); - // The value might be 0-terminated or not - if (arCurrent[dwCurrentSize/2] == 0) - dwCurrentSize -= 2; - return OUString( arCurrent, dwCurrentSize ) + "/"; + dwCurrentSize -= 2; + dwCurrentSize /= 2; + + return OUString( arCurrent, dwCurrentSize ) + OUString::createFromAscii("\\"); } ::RegCloseKey( hKey ); } + return OUString(); } #endif @@ -100,6 +102,7 @@ namespace oslModule aModule = osl_loadModule( fullPath.pData, SAL_LOADMODULE_DEFAULT ); + if( aModule == NULL) { SAL_WARN("avmedia", "Cannot load libvlc"); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
