Commit 8e989a2e authored by Hugo Beauzée-Luyssen's avatar Hugo Beauzée-Luyssen

Add renderer discoverer bindings

parent af592750
......@@ -17,6 +17,7 @@ libvlcpp_HEADERS = \
vlcpp/MediaListPlayer.hpp \
vlcpp/MediaPlayer.hpp \
vlcpp/Dialog.hpp \
vlcpp/RendererDiscoverer.hpp \
vlcpp/structures.hpp \
vlcpp/vlc.hpp \
$(NULL)
......@@ -25,7 +26,7 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libvlcpp.pc
if HAVE_EXAMPLES
noinst_PROGRAMS = helloworld tests imem
noinst_PROGRAMS = helloworld tests imem discovery
AM_CPPFLAGS = $(vlc_CFLAGS) -Wextra -Wall
AM_LDFLAGS = $(vlc_LIBS)
......@@ -38,5 +39,6 @@ endif
helloworld_SOURCES = examples/helloworld/main.cpp
imem_SOURCES = examples/imem/imem.cpp
tests_SOURCES = test/main.cpp
discovery_SOURCES = examples/renderers/discovery.cpp
endif
/*****************************************************************************
* discovery.cpp: Test vlcpp renderer discoverer binding
*****************************************************************************
* Copyright © 2015-2018 libvlcpp authors & VideoLAN
*
* Authors: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#include "vlcpp/vlc.hpp"
#include <thread>
#include <iostream>
int main()
{
#if LIBVLC_VERSION_INT >= LIBVLC_VERSION(3, 0, 0, 0)
VLC::Instance inst( 0, nullptr );
VLC::RendererDiscoverer disc( inst, "microdns" );
auto& em = disc.eventManager();
em.onItemAdded( []( const VLC::RendererDiscoverer::Item& item ) {
std::cout << "New item discovered: " << item.name() << '\n'
<< "\tType: " << item.type() << '\n';
if ( item.canRenderVideo() )
std::cout << "\tCan render video\n";
if ( item.canRenderAudio() )
std::cout << "\tCan render audio\n";
std::cout << std::endl;
});
if ( disc.start() == false )
abort();
std::this_thread::sleep_for( std::chrono::seconds{ 10 } );
#else
std::cerr << "Renderer discovery isn't available before VLC 3." << std::endl;
return 1;
#endif
}
......@@ -1153,6 +1153,46 @@ class VLMEventManager : public EventManager
});
}
};
#if LIBVLC_VERSION_INT >= LIBVLC_VERSION(3, 0, 0, 0)
/*
* \brief The RendererDiscovererEventManager class allows one to register
* renderer discoverer related events
*/
class RendererDiscovererEventManager : public EventManager
{
public:
RendererDiscovererEventManager( InternalPtr ptr ) : EventManager(ptr) {}
template <typename Func>
RegisteredEvent onItemAdded( Func&& f )
{
EXPECT_SIGNATURE(void(const RendererDiscoverer::Item&));
return handle(libvlc_RendererDiscovererItemAdded, std::forward<Func>( f ),
[](const libvlc_event_t* e, void* data)
{
auto callback = static_cast<DecayPtr<Func>>( data );
(*callback)( RendererDiscoverer::Item( e->u.renderer_discoverer_item_added.item ) );
});
}
template <typename Func>
RegisteredEvent onItemDeleted( Func&& f )
{
EXPECT_SIGNATURE(void(const RendererDiscoverer::Item&));
return handle(libvlc_RendererDiscovererItemDeleted, std::forward<Func>( f ),
[](const libvlc_event_t* e, void* data)
{
auto callback = static_cast<DecayPtr<Func>>( data );
(*callback)( RendererDiscoverer::Item( e->u.renderer_discoverer_item_deleted.item ) );
});
}
};
#endif
}
#endif // LIBVLC_EVENTMANAGER_HPP
/*****************************************************************************
* RendererDiscovery.hpp: Media Discoverer API
*****************************************************************************
* Copyright © 2015-2018 libvlcpp authors & VideoLAN
*
* Authors: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef LIBVLC_CXX_RENDERERDISCOVERER_HPP
#define LIBVLC_CXX_RENDERERDISCOVERER_HPP
#include "common.hpp"
#if LIBVLC_VERSION_INT >= LIBVLC_VERSION(3, 0, 0, 0)
namespace VLC
{
class RendererDiscovererEventManager;
class RendererDiscoverer : public Internal<libvlc_renderer_discoverer_t>
{
public:
class Item : public Internal<libvlc_renderer_item_t>
{
private:
Item( InternalPtr item ) : Internal( item, libvlc_renderer_item_release )
{
libvlc_renderer_item_hold( *this );
}
public:
std::string name() const
{
return libvlc_renderer_item_name( *this );
}
std::string type() const
{
return libvlc_renderer_item_type( *this );
}
std::string iconUri() const
{
return libvlc_renderer_item_icon_uri( *this );
}
bool canRenderVideo() const
{
return ( libvlc_renderer_item_flags( *this ) &
LIBVLC_RENDERER_CAN_VIDEO ) != 0;
}
bool canRenderAudio() const
{
return ( libvlc_renderer_item_flags( *this ) &
LIBVLC_RENDERER_CAN_AUDIO ) != 0;
}
friend RendererDiscovererEventManager;
};
RendererDiscoverer( Instance& instance, const std::string& name )
: Internal( libvlc_renderer_discoverer_new( getInternalPtr<libvlc_instance_t>( instance ),
name.c_str() ), libvlc_renderer_discoverer_release )
{
}
bool start()
{
return libvlc_renderer_discoverer_start( *this ) == 0;
}
void stop()
{
libvlc_renderer_discoverer_stop( *this );
}
RendererDiscovererEventManager& eventManager()
{
if ( m_eventManager == nullptr )
{
libvlc_event_manager_t* obj = libvlc_renderer_discoverer_event_manager( *this );
m_eventManager = std::make_shared<RendererDiscovererEventManager>( obj );
}
return *m_eventManager;
}
private:
std::shared_ptr<RendererDiscovererEventManager> m_eventManager;
};
}
#endif
#endif // LIBVLC_CXX_RENDERERDISCOVERER_HPP
......@@ -32,6 +32,7 @@
#include "MediaList.hpp"
#include "MediaPlayer.hpp"
#include "MediaLibrary.hpp"
#include "RendererDiscoverer.hpp"
#include "EventManager.hpp"
#include "structures.hpp"
......
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