vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Oct 2 15:24:31 2014 +0200| [8b38a343f53ed220c1c2286cbe2fbc7f07cd9da9] | committer: Francois Cartegnie
sout: chromecast: check app presence on status Stop sending and disconnect when app has changed. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8b38a343f53ed220c1c2286cbe2fbc7f07cd9da9 --- modules/stream_out/chromecast/cast.cpp | 47 ++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/modules/stream_out/chromecast/cast.cpp b/modules/stream_out/chromecast/cast.cpp index 069bd31..8303761 100644 --- a/modules/stream_out/chromecast/cast.cpp +++ b/modules/stream_out/chromecast/cast.cpp @@ -609,22 +609,51 @@ static int processMessage(sout_stream_t *p_stream, const castchannel::CastMessag if (type == "RECEIVER_STATUS") { json_value applications = (*p_data)["status"]["applications"]; + const json_value *p_app = NULL; for (unsigned i = 0; i < applications.u.array.length; ++i) { std::string appId(applications[i]["appId"]); if (appId == APP_ID) - p_sys->appTransportId = std::string(applications[i]["transportId"]); + { + p_app = &applications[i]; + vlc_mutex_lock(&p_sys->lock); + if (p_sys->appTransportId.empty()) + p_sys->appTransportId = std::string(applications[i]["transportId"]); + vlc_mutex_unlock(&p_sys->lock); + break; + } } - vlc_mutex_locker locker(&p_sys->lock); - if (!p_sys->appTransportId.empty() - && p_sys->i_status == CHROMECAST_AUTHENTICATED) + + vlc_mutex_lock(&p_sys->lock); + if ( p_app ) { - p_sys->i_status = CHROMECAST_APP_STARTED; - msgConnect(p_stream, p_sys->appTransportId); - msgLoad(p_stream); - p_sys->i_status = CHROMECAST_MEDIA_LOAD_SENT; - vlc_cond_signal(&p_sys->loadCommandCond); + if (!p_sys->appTransportId.empty() + && p_sys->i_status == CHROMECAST_AUTHENTICATED) + { + p_sys->i_status = CHROMECAST_APP_STARTED; + msgConnect(p_stream, p_sys->appTransportId); + msgLoad(p_stream); + p_sys->i_status = CHROMECAST_MEDIA_LOAD_SENT; + vlc_cond_signal(&p_sys->loadCommandCond); + } } + else + { + switch(p_sys->i_status) + { + /* If the app is no longer present */ + case CHROMECAST_APP_STARTED: + case CHROMECAST_MEDIA_LOAD_SENT: + msg_Warn(p_stream, "app is no longer present. closing"); + msgClose(p_stream, p_sys->appTransportId); + i_ret = -1; + // ft + default: + break; + } + + } + vlc_mutex_unlock(&p_sys->lock); } else { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
