[vlc-commits] chromecast: move connect/disconnectChromecast in the communication handler
Steve Lhomme
git at videolan.org
Wed Dec 23 20:28:27 CET 2015
vlc | branch: master | Steve Lhomme <robUx4 at videolabs.io> | Wed Dec 23 12:58:49 2015 +0100| [51174cd75ea041398a525785836a13eb3f7c0c2e] | committer: Jean-Baptiste Kempf
chromecast: move connect/disconnectChromecast in the communication handler
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=51174cd75ea041398a525785836a13eb3f7c0c2e
---
modules/stream_out/chromecast/cast.cpp | 71 ++-------------------
modules/stream_out/chromecast/chromecast.h | 4 ++
modules/stream_out/chromecast/chromecast_ctrl.cpp | 48 ++++++++++++++
3 files changed, 59 insertions(+), 64 deletions(-)
diff --git a/modules/stream_out/chromecast/cast.cpp b/modules/stream_out/chromecast/cast.cpp
index e51d26a..a5a6d6f 100644
--- a/modules/stream_out/chromecast/cast.cpp
+++ b/modules/stream_out/chromecast/cast.cpp
@@ -57,18 +57,12 @@ struct sout_stream_sys_t
delete p_intf;
}
- vlc_tls_creds_t *p_creds;
-
vlc_thread_t chromecastThread;
sout_stream_t *p_out;
intf_sys_t * const p_intf;
};
-// Media player Chromecast app id
-#define APP_ID "CC1AD845" // Default media player
-
-#define CHROMECAST_CONTROL_PORT 8009
#define HTTP_PORT 8010
#define SOUT_CFG_PREFIX "sout-chromecast-"
@@ -79,8 +73,6 @@ struct sout_stream_sys_t
static int Open(vlc_object_t *);
static void Close(vlc_object_t *);
static void Clean(sout_stream_t *p_stream);
-static int connectChromecast(sout_stream_t *p_stream, char *psz_ipChromecast);
-static void disconnectChromecast(sout_stream_t *p_stream);
static void *chromecastThread(void *data);
@@ -189,18 +181,18 @@ static int Open(vlc_object_t *p_this)
return VLC_EGENERIC;
}
- p_sys->p_intf->i_sock_fd = connectChromecast(p_stream, psz_ipChromecast);
+ p_intf->i_sock_fd = p_intf->connectChromecast(psz_ipChromecast);
free(psz_ipChromecast);
- if (p_sys->p_intf->i_sock_fd < 0)
+ if (p_intf->i_sock_fd < 0)
{
msg_Err(p_stream, "Could not connect the Chromecast");
Clean(p_stream);
return VLC_EGENERIC;
}
- p_sys->p_intf->setConnectionStatus(CHROMECAST_TLS_CONNECTED);
+ p_intf->setConnectionStatus(CHROMECAST_TLS_CONNECTED);
char psz_localIP[NI_MAXNUMERICHOST];
- if (net_GetSockAddress(p_sys->p_intf->i_sock_fd, psz_localIP, NULL))
+ if (net_GetSockAddress(p_intf->i_sock_fd, psz_localIP, NULL))
{
msg_Err(p_this, "Cannot get local IP address");
Clean(p_stream);
@@ -250,9 +242,9 @@ static int Open(vlc_object_t *p_this)
int i_ret = 0;
const mtime_t deadline = mdate() + 6 * CLOCK_FREQ;
vlc_mutex_lock(&p_intf->lock);
- while (p_sys->p_intf->getConnectionStatus() != CHROMECAST_MEDIA_LOAD_SENT)
+ while (p_intf->getConnectionStatus() != CHROMECAST_MEDIA_LOAD_SENT)
{
- i_ret = vlc_cond_timedwait(&p_sys->p_intf->loadCommandCond, &p_intf->lock, deadline);
+ i_ret = vlc_cond_timedwait(&p_intf->loadCommandCond, &p_intf->lock, deadline);
if (i_ret == ETIMEDOUT)
{
msg_Err(p_stream, "Timeout reached before sending the media loading command");
@@ -322,61 +314,12 @@ static void Clean(sout_stream_t *p_stream)
sout_StreamChainDelete(p_sys->p_out, p_sys->p_out);
}
- disconnectChromecast(p_stream);
+ p_sys->p_intf->disconnectChromecast();
delete p_sys;
}
-/**
- * @brief Connect to the Chromecast
- * @param p_stream the sout_stream_t structure
- * @return the opened socket file descriptor or -1 on error
- */
-static int connectChromecast(sout_stream_t *p_stream, char *psz_ipChromecast)
-{
- sout_stream_sys_t *p_sys = p_stream->p_sys;
- int fd = net_ConnectTCP(p_stream, psz_ipChromecast, CHROMECAST_CONTROL_PORT);
- if (fd < 0)
- return -1;
-
- p_sys->p_creds = vlc_tls_ClientCreate(VLC_OBJECT(p_stream));
- if (p_sys->p_creds == NULL)
- {
- net_Close(fd);
- return -1;
- }
-
- p_sys->p_intf->p_tls = vlc_tls_ClientSessionCreate(p_sys->p_creds, fd, psz_ipChromecast,
- "tcps", NULL, NULL);
-
- if (p_sys->p_intf->p_tls == NULL)
- {
- vlc_tls_Delete(p_sys->p_creds);
- return -1;
- }
-
- return fd;
-}
-
-
-/**
- * @brief Disconnect from the Chromecast
- */
-static void disconnectChromecast(sout_stream_t *p_stream)
-{
- sout_stream_sys_t *p_sys = p_stream->p_sys;
-
- if (p_sys->p_intf->p_tls)
- {
- vlc_tls_SessionDelete(p_sys->p_intf->p_tls);
- vlc_tls_Delete(p_sys->p_creds);
- p_sys->p_intf->p_tls = NULL;
- p_sys->p_intf->setConnectionStatus(CHROMECAST_DISCONNECTED);
- }
-}
-
-
/*****************************************************************************
diff --git a/modules/stream_out/chromecast/chromecast.h b/modules/stream_out/chromecast/chromecast.h
index 6ce8984..d5ef655 100644
--- a/modules/stream_out/chromecast/chromecast.h
+++ b/modules/stream_out/chromecast/chromecast.h
@@ -67,6 +67,7 @@ struct intf_sys_t
std::string appTransportId;
int i_sock_fd;
+ vlc_tls_creds_t *p_creds;
vlc_tls_t *p_tls;
vlc_mutex_t lock;
@@ -95,6 +96,9 @@ struct intf_sys_t
}
}
+ int connectChromecast(char *psz_ipChromecast);
+ void disconnectChromecast();
+
void msgPing();
void msgPong();
void msgConnect(const std::string & destinationId = DEFAULT_CHOMECAST_RECEIVER);
diff --git a/modules/stream_out/chromecast/chromecast_ctrl.cpp b/modules/stream_out/chromecast/chromecast_ctrl.cpp
index b94cc7e..25aea79 100644
--- a/modules/stream_out/chromecast/chromecast_ctrl.cpp
+++ b/modules/stream_out/chromecast/chromecast_ctrl.cpp
@@ -46,6 +46,8 @@
// Media player Chromecast app id
#define APP_ID "CC1AD845" // Default media player aka DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
+#define CHROMECAST_CONTROL_PORT 8009
+
/* deadline regarding pings sent from receiver */
#define PING_WAIT_TIME 6000
#define PING_WAIT_RETRIES 0
@@ -107,6 +109,52 @@ intf_sys_t::~intf_sys_t()
}
/**
+ * @brief Connect to the Chromecast
+ * @param p_stream the sout_stream_t structure
+ * @return the opened socket file descriptor or -1 on error
+ */
+int intf_sys_t::connectChromecast(char *psz_ipChromecast)
+{
+ int fd = net_ConnectTCP(p_stream, psz_ipChromecast, CHROMECAST_CONTROL_PORT);
+ if (fd < 0)
+ return -1;
+
+ p_creds = vlc_tls_ClientCreate(VLC_OBJECT(p_stream));
+ if (p_creds == NULL)
+ {
+ net_Close(fd);
+ return -1;
+ }
+
+ p_tls = vlc_tls_ClientSessionCreate(p_creds, fd, psz_ipChromecast,
+ "tcps", NULL, NULL);
+
+ if (p_tls == NULL)
+ {
+ vlc_tls_Delete(p_creds);
+ return -1;
+ }
+
+ return fd;
+}
+
+
+/**
+ * @brief Disconnect from the Chromecast
+ */
+void intf_sys_t::disconnectChromecast()
+{
+ if (p_tls)
+ {
+ vlc_tls_SessionDelete(p_tls);
+ vlc_tls_Delete(p_creds);
+ p_tls = NULL;
+ setConnectionStatus(CHROMECAST_DISCONNECTED);
+ }
+}
+
+
+/**
* @brief Receive a data packet from the Chromecast
* @param p_stream the sout_stream_t structure
* @param b_msgReceived returns true if a message has been entirely received else false
More information about the vlc-commits
mailing list