[vlc-devel] [PATCH 05/12] chromecast: chromecast_ctrl is no longer an interface plugin
Steve Lhomme
robux4 at videolabs.io
Mon Apr 25 17:46:09 CEST 2016
---
modules/stream_out/Makefile.am | 10 --
modules/stream_out/chromecast/chromecast.h | 5 +-
modules/stream_out/chromecast/chromecast_ctrl.cpp | 141 ----------------------
3 files changed, 4 insertions(+), 152 deletions(-)
diff --git a/modules/stream_out/Makefile.am b/modules/stream_out/Makefile.am
index e30cd43..26c0cf2 100644
--- a/modules/stream_out/Makefile.am
+++ b/modules/stream_out/Makefile.am
@@ -80,15 +80,6 @@ SUFFIXES += .proto .pb.cc
%.pb.h %.pb.cc: %.proto
$(PROTOC) --cpp_out=. -I$(srcdir) $<
-libchromecast_plugin_la_SOURCES = \
- stream_out/chromecast/cast_channel.proto stream_out/chromecast/chromecast.h \
- stream_out/chromecast/chromecast_ctrl.cpp \
- misc/webservices/json.h misc/webservices/json.c
-nodist_libchromecast_plugin_la_SOURCES = stream_out/chromecast/cast_channel.pb.cc
-libchromecast_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -Istream_out/chromecast $(CHROMECAST_CFLAGS)
-libchromecast_plugin_la_LIBADD = $(CHROMECAST_LIBS) $(SOCKET_LIBS)
-CLEANFILES += $(nodist_libchromecast_plugin_la_SOURCES)
-
libstream_out_chromecast_plugin_la_SOURCES = stream_out/chromecast/cast.cpp stream_out/chromecast/chromecast.h
libstream_out_chromecast_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -Istream_out/chromecast $(CHROMECAST_CFLAGS)
libstream_out_chromecast_plugin_la_LIBADD = $(CHROMECAST_LIBS) $(SOCKET_LIBS)
@@ -97,6 +88,5 @@ if ENABLE_SOUT
if BUILD_CHROMECAST
BUILT_SOURCES += stream_out/chromecast/cast_channel.pb.h
sout_LTLIBRARIES += libstream_out_chromecast_plugin.la
-control_LTLIBRARIES += libchromecast_plugin.la
endif
endif
diff --git a/modules/stream_out/chromecast/chromecast.h b/modules/stream_out/chromecast/chromecast.h
index 2031fee..6998c22 100644
--- a/modules/stream_out/chromecast/chromecast.h
+++ b/modules/stream_out/chromecast/chromecast.h
@@ -72,6 +72,10 @@ enum receiver_state {
RECEIVER_PAUSED,
};
+
+/*****************************************************************************
+ * intf_sys_t: description and status of interface
+ *****************************************************************************/
struct intf_sys_t
{
intf_sys_t(vlc_object_t * const p_this);
@@ -80,7 +84,6 @@ struct intf_sys_t
vlc_object_t * const p_module;
std::string serverIP;
std::string mime;
- std::string muxer;
std::string appTransportId;
std::string mediaSessionId;
diff --git a/modules/stream_out/chromecast/chromecast_ctrl.cpp b/modules/stream_out/chromecast/chromecast_ctrl.cpp
index c7fce9b..7bc3224 100644
--- a/modules/stream_out/chromecast/chromecast_ctrl.cpp
+++ b/modules/stream_out/chromecast/chromecast_ctrl.cpp
@@ -32,8 +32,6 @@
#include "chromecast.h"
-#include <vlc_playlist.h>
-
#include <cassert>
#include <cerrno>
#ifdef HAVE_POLL
@@ -66,147 +64,8 @@ static const std::string NAMESPACE_RECEIVER = "urn:x-cast:com.google.cas
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static int Open(vlc_object_t *);
-static void Close(vlc_object_t *);
-
static void *ChromecastThread(void *data);
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
-
-#define IP_TEXT N_("Chromecast IP address")
-#define IP_LONGTEXT N_("This sets the IP address of the Chromecast receiver.")
-#define HTTP_PORT_TEXT N_("HTTP port")
-#define HTTP_PORT_LONGTEXT N_("This sets the HTTP port of the server " \
- "used to stream the media to the Chromecast.")
-#define MUXER_TEXT N_("Muxer")
-#define MUXER_LONGTEXT N_("This sets the muxer used to stream to the Chromecast.")
-#define MIME_TEXT N_("MIME content type")
-#define MIME_LONGTEXT N_("This sets the media MIME content type sent to the Chromecast.")
-
-vlc_module_begin ()
- set_shortname( N_("Chromecast") )
- set_category( CAT_INTERFACE )
- set_subcategory( SUBCAT_INTERFACE_CONTROL )
- set_description( N_("Chromecast interface") )
- set_capability( "interface", 0 )
- add_shortcut("chromecast")
- add_string(CONTROL_CFG_PREFIX "addr", "", IP_TEXT, IP_LONGTEXT, false)
- add_integer(CONTROL_CFG_PREFIX "http-port", HTTP_PORT, HTTP_PORT_TEXT, HTTP_PORT_LONGTEXT, false)
- add_string(CONTROL_CFG_PREFIX "mime", "video/x-matroska", MIME_TEXT, MIME_LONGTEXT, false)
- add_string(CONTROL_CFG_PREFIX "mux", "avformat{mux=matroska}", MUXER_TEXT, MUXER_LONGTEXT, false)
- set_callbacks( Open, Close )
-
-vlc_module_end ()
-
-/*****************************************************************************
- * Open: connect to the Chromecast and initialize the sout
- *****************************************************************************/
-int Open(vlc_object_t *p_module)
-{
- intf_thread_t *p_intf = reinterpret_cast<intf_thread_t*>(p_module);
- intf_sys_t *p_sys = new(std::nothrow) intf_sys_t(p_module);
- if (unlikely(p_sys == NULL))
- return VLC_ENOMEM;
- p_intf->p_sys = p_sys;
-
- mtime_t deadline;
- char *psz_mux;
-
- char *psz_ipChromecast = var_InheritString( p_module, CONTROL_CFG_PREFIX "addr");
- if (psz_ipChromecast == NULL)
- {
- msg_Err( p_module, "No Chromecast receiver IP provided");
- goto error;
- }
-
- p_sys->i_sock_fd = p_sys->connectChromecast(psz_ipChromecast);
- free(psz_ipChromecast);
- if (p_sys->i_sock_fd < 0)
- {
- msg_Err( p_module, "Could not connect the Chromecast");
- goto error;
- }
- p_sys->setConnectionStatus(CHROMECAST_TLS_CONNECTED);
-
- char psz_localIP[NI_MAXNUMERICHOST];
- if (net_GetSockAddress(p_sys->i_sock_fd, psz_localIP, NULL))
- {
- msg_Err( p_module, "Cannot get local IP address");
- goto error;
- }
- p_sys->serverIP = psz_localIP;
-
- psz_mux = var_InheritString( p_module, CONTROL_CFG_PREFIX "mux");
- if (psz_mux == NULL)
- {
- msg_Err( p_module, "Bad muxer provided");
- goto error;
- }
- p_sys->muxer = psz_mux;
- free(psz_mux);
-
- psz_mux = var_InheritString( p_module, CONTROL_CFG_PREFIX "mime");
- if (psz_mux == NULL)
- {
- msg_Err( p_module, "Bad MIME type provided");
- goto error;
- }
- p_sys->mime = psz_mux; /* TODO get the MIME type from the playlist/input ? */
- free(psz_mux);
-
- // Start the Chromecast event thread.
- if (vlc_clone(&p_sys->chromecastThread, ChromecastThread, p_module,
- VLC_THREAD_PRIORITY_LOW))
- {
- msg_Err( p_module, "Could not start the Chromecast talking thread");
- goto error;
- }
-
- /* Ugly part:
- * We want to be sure that the Chromecast receives the first data packet sent by
- * the HTTP server. */
-
- // Lock the sout thread until we have sent the media loading command to the Chromecast.
- deadline = mdate() + 6 * CLOCK_FREQ;
- vlc_mutex_lock(&p_sys->lock);
- while (p_sys->getPlayerStatus() != CMD_LOAD_SENT)
- {
- int i_ret = vlc_cond_timedwait(&p_sys->loadCommandCond, &p_sys->lock, deadline);
- if (i_ret == ETIMEDOUT)
- {
- msg_Err( p_module, "Timeout reached before sending the media loading command");
- vlc_mutex_unlock(&p_sys->lock);
- vlc_cancel(p_sys->chromecastThread);
- goto error;
- }
- }
- vlc_mutex_unlock(&p_sys->lock);
-
- /* Even uglier: sleep more to let to the Chromecast initiate the connection
- * to the http server. */
- msleep(2 * CLOCK_FREQ);
-
- return VLC_SUCCESS;
-
-error:
- delete p_sys;
- return VLC_EGENERIC;
-}
-
-
-/*****************************************************************************
- * Close: destroy interface
- *****************************************************************************/
-void Close(vlc_object_t *p_module)
-{
- intf_thread_t *p_intf = reinterpret_cast<intf_thread_t*>(p_module);
- intf_sys_t *p_sys = p_intf->p_sys;
-
- delete p_sys;
-}
-
/**
* @brief Build a CastMessage to send to the Chromecast
* @param namespace_ the message namespace
--
2.7.0
More information about the vlc-devel
mailing list