[vlc-commits] chromecast: use a pointer for m_communication

Thomas Guillem git at videolan.org
Thu Mar 29 14:04:13 CEST 2018


vlc/vlc-3.0 | branch: master | Thomas Guillem <thomas at gllm.fr> | Wed Mar 28 18:46:18 2018 +0200| [93ddf7868ad9663068cb38ed14a5248017deb020] | committer: Thomas Guillem

chromecast: use a pointer for m_communication

In order to delete/create during the life time of intf_sys_t.

(cherry picked from commit a74e7ff8a1d43078a51472c110810cadc8ab1bed)
Signed-off-by: Thomas Guillem <thomas at gllm.fr>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=93ddf7868ad9663068cb38ed14a5248017deb020
---

 modules/stream_out/chromecast/chromecast.h        |  2 +-
 modules/stream_out/chromecast/chromecast_ctrl.cpp | 45 ++++++++++++-----------
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/modules/stream_out/chromecast/chromecast.h b/modules/stream_out/chromecast/chromecast.h
index 417ad5b09f..5e93c70e18 100644
--- a/modules/stream_out/chromecast/chromecast.h
+++ b/modules/stream_out/chromecast/chromecast.h
@@ -255,7 +255,7 @@ private:
     on_paused_changed_itf m_on_paused_changed;
     void                 *m_on_paused_changed_data;
 
-    ChromecastCommunication m_communication;
+    ChromecastCommunication *m_communication;
     std::queue<QueueableMessages> m_msgQueue;
     States m_state;
     bool m_retry_on_fail;
diff --git a/modules/stream_out/chromecast/chromecast_ctrl.cpp b/modules/stream_out/chromecast/chromecast_ctrl.cpp
index 598cdf6392..0703c841e5 100644
--- a/modules/stream_out/chromecast/chromecast_ctrl.cpp
+++ b/modules/stream_out/chromecast/chromecast_ctrl.cpp
@@ -97,7 +97,6 @@ intf_sys_t::intf_sys_t(vlc_object_t * const p_this, int port, std::string device
  , m_on_input_event_data( NULL )
  , m_on_paused_changed( NULL )
  , m_on_paused_changed_data( NULL )
- , m_communication( p_this, device_addr.c_str(), device_port )
  , m_state( Authenticating )
  , m_retry_on_fail( false )
  , m_played_once( false )
@@ -117,6 +116,8 @@ intf_sys_t::intf_sys_t(vlc_object_t * const p_this, int port, std::string device
  , m_pause_delay( VLC_TS_INVALID )
  , m_pingRetriesLeft( PING_WAIT_RETRIES )
 {
+    m_communication = new ChromecastCommunication( p_this, device_addr.c_str(), device_port );
+
     m_ctl_thread_interrupt = vlc_interrupt_create();
     if( unlikely(m_ctl_thread_interrupt == NULL) )
         throw std::runtime_error( "error creating interrupt context" );
@@ -126,7 +127,7 @@ intf_sys_t::intf_sys_t(vlc_object_t * const p_this, int port, std::string device
     vlc_cond_init( &m_pace_cond );
 
     std::stringstream ss;
-    ss << "http://" << m_communication.getServerIp() << ":" << port;
+    ss << "http://" << m_communication->getServerIp() << ":" << port;
     m_art_http_ip = ss.str();
 
     m_common.p_opaque = this;
@@ -168,12 +169,12 @@ intf_sys_t::~intf_sys_t()
     case Stopping:
     case Stopped:
         // Generate the close messages.
-        m_communication.msgReceiverClose( m_appTransportId );
+        m_communication->msgReceiverClose( m_appTransportId );
         /* fallthrough */
     case Connecting:
     case Connected:
     case Launching:
-        m_communication.msgReceiverClose(DEFAULT_CHOMECAST_RECEIVER);
+        m_communication->msgReceiverClose(DEFAULT_CHOMECAST_RECEIVER);
         /* fallthrough */
     default:
         break;
@@ -186,6 +187,8 @@ intf_sys_t::~intf_sys_t()
 
     vlc_interrupt_destroy( m_ctl_thread_interrupt );
 
+    delete m_communication;
+
     if (m_meta != NULL)
         vlc_meta_Delete(m_meta);
 
@@ -316,7 +319,7 @@ void intf_sys_t::tryLoad()
             msg_Dbg( m_module, "Starting the media receiver application" );
             // Don't use setState as we don't want to signal the condition in this case.
             m_state = Launching;
-            m_communication.msgReceiverLaunchApp();
+            m_communication->msgReceiverLaunchApp();
         }
         return;
     }
@@ -328,7 +331,7 @@ void intf_sys_t::tryLoad()
     // Reset the mediaSessionID to allow the new session to become the current one.
     // we cannot start a new load when the last one is still processing
     m_last_request_id =
-        m_communication.msgPlayerLoad( m_appTransportId, m_streaming_port,
+        m_communication->msgPlayerLoad( m_appTransportId, m_streaming_port,
                                        m_mime, m_meta );
     if( m_last_request_id != ChromecastCommunication::kInvalidId )
         m_state = Loading;
@@ -549,7 +552,7 @@ void intf_sys_t::mainLoop()
     vlc_interrupt_set( m_ctl_thread_interrupt );
 
     // State was already initialized as Authenticating
-    m_communication.msgAuth();
+    m_communication->msgAuth();
 
     while ( !vlc_killed() )
     {
@@ -594,8 +597,8 @@ void intf_sys_t::processAuthMessage( const castchannel::CastMessage& msg )
     {
         vlc_mutex_locker locker(&m_lock);
         setState( Connecting );
-        m_communication.msgConnect(DEFAULT_CHOMECAST_RECEIVER);
-        m_communication.msgReceiverGetStatus();
+        m_communication->msgConnect(DEFAULT_CHOMECAST_RECEIVER);
+        m_communication->msgReceiverGetStatus();
     }
 }
 
@@ -607,7 +610,7 @@ void intf_sys_t::processHeartBeatMessage( const castchannel::CastMessage& msg )
     if (type == "PING")
     {
         msg_Dbg( m_module, "PING received from the Chromecast");
-        m_communication.msgPong();
+        m_communication->msgPong();
     }
     else if (type == "PONG")
     {
@@ -655,7 +658,7 @@ void intf_sys_t::processReceiverMessage( const castchannel::CastMessage& msg )
             {
                 msg_Dbg( m_module, "Media receiver application was already running" );
                 m_appTransportId = (const char*)(*p_app)["transportId"];
-                m_communication.msgConnect( m_appTransportId );
+                m_communication->msgConnect( m_appTransportId );
                 setState( Ready );
             }
             else
@@ -669,7 +672,7 @@ void intf_sys_t::processReceiverMessage( const castchannel::CastMessage& msg )
             {
                 msg_Dbg( m_module, "Media receiver application has been started." );
                 m_appTransportId = (const char*)(*p_app)["transportId"];
-                m_communication.msgConnect( m_appTransportId );
+                m_communication->msgConnect( m_appTransportId );
                 setState( Ready );
             }
             break;
@@ -699,7 +702,7 @@ void intf_sys_t::processReceiverMessage( const castchannel::CastMessage& msg )
             // This is likely because the chromecast refused the playback, but
             // let's check by explicitely probing the media status
             if (m_last_request_id == 0)
-                m_last_request_id = m_communication.msgPlayerGetStatus( m_appTransportId );
+                m_last_request_id = m_communication->msgPlayerGetStatus( m_appTransportId );
             break;
         }
     }
@@ -803,7 +806,7 @@ void intf_sys_t::processMediaMessage( const castchannel::CastMessage& msg )
             {
                 m_request_stop = false;
                 m_last_request_id =
-                    m_communication.msgPlayerStop( m_appTransportId, m_mediaSessionId );
+                    m_communication->msgPlayerStop( m_appTransportId, m_mediaSessionId );
                 setState( Stopping );
             }
             else if (newPlayerState == "PLAYING")
@@ -906,7 +909,7 @@ bool intf_sys_t::handleMessages()
     {
         // If we haven't received the payload size yet, let's wait for it. Otherwise, we know
         // how many bytes to read
-        ssize_t i_ret = m_communication.receive( p_packet + i_received,
+        ssize_t i_ret = m_communication->receive( p_packet + i_received,
                                         i_payloadSize + PACKET_HEADER_LEN - i_received,
                                         PING_WAIT_TIME - ( mdate() - i_begin_time ) / CLOCK_FREQ,
                                         &b_timeout );
@@ -931,8 +934,8 @@ bool intf_sys_t::handleMessages()
                 return false;
             }
             --m_pingRetriesLeft;
-            m_communication.msgPing();
-            m_communication.msgReceiverGetStatus();
+            m_communication->msgPing();
+            m_communication->msgReceiverGetStatus();
             return true;
         }
         assert( i_ret != 0 );
@@ -969,7 +972,7 @@ void intf_sys_t::doStop()
     else
     {
         m_last_request_id =
-            m_communication.msgPlayerStop( m_appTransportId, m_mediaSessionId );
+            m_communication->msgPlayerStop( m_appTransportId, m_mediaSessionId );
         setState( Stopping );
     }
 }
@@ -1040,12 +1043,12 @@ void intf_sys_t::setPauseState(bool paused, mtime_t delay)
     if ( !paused )
     {
         m_last_request_id =
-            m_communication.msgPlayerPlay( m_appTransportId, m_mediaSessionId );
+            m_communication->msgPlayerPlay( m_appTransportId, m_mediaSessionId );
         m_pause_delay = delay;
     }
     else if ( m_state != Paused )
         m_last_request_id =
-            m_communication.msgPlayerPause( m_appTransportId, m_mediaSessionId );
+            m_communication->msgPlayerPause( m_appTransportId, m_mediaSessionId );
 }
 
 mtime_t intf_sys_t::getPauseDelay()
@@ -1085,7 +1088,7 @@ mtime_t intf_sys_t::getPlaybackTimestamp()
             {
                 m_cc_time_last_request_date = now;
                 m_last_request_id =
-                    m_communication.msgPlayerGetStatus( m_appTransportId );
+                    m_communication->msgPlayerGetStatus( m_appTransportId );
             }
             return m_cc_time + now - m_cc_time_date;
         }



More information about the vlc-commits mailing list