[vlc-commits] chromecast: hide sout_access_out_sys_t implementation
Thomas Guillem
git at videolan.org
Wed Feb 7 16:52:43 CET 2018
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Wed Feb 7 16:51:12 2018 +0100| [ea9b6ce162651c2ecddabb32c4eeb984a183f97c] | committer: Thomas Guillem
chromecast: hide sout_access_out_sys_t implementation
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ea9b6ce162651c2ecddabb32c4eeb984a183f97c
---
modules/stream_out/chromecast/cast.cpp | 91 +++++++++++++++++++---------------
1 file changed, 51 insertions(+), 40 deletions(-)
diff --git a/modules/stream_out/chromecast/cast.cpp b/modules/stream_out/chromecast/cast.cpp
index 7d25c63533..01514eeeb1 100644
--- a/modules/stream_out/chromecast/cast.cpp
+++ b/modules/stream_out/chromecast/cast.cpp
@@ -42,25 +42,29 @@
struct sout_access_out_sys_t
{
- intf_sys_t * const m_intf;
- httpd_url_t *m_url;
- vlc_fifo_t *m_fifo;
- block_t *m_header;
- bool m_eof;
- bool m_flushing;
- bool m_seeking;
- std::string m_mime;
-
sout_access_out_sys_t(httpd_host_t *httpd_host, intf_sys_t * const intf,
const char *psz_url);
~sout_access_out_sys_t();
- void clearUnlocked();
void clear();
void flush();
void prepare(sout_stream_t *p_stream, const std::string &mime);
int url_cb(httpd_client_t *cl, httpd_message_t *answer, const httpd_message_t *query);
void seek_done_cb();
+ ssize_t write(sout_access_out_t *p_access, block_t *p_block);
+ void close();
+
+private:
+ void clearUnlocked();
+
+ intf_sys_t * const m_intf;
+ httpd_url_t *m_url;
+ vlc_fifo_t *m_fifo;
+ block_t *m_header;
+ bool m_eof;
+ bool m_flushing;
+ bool m_seeking;
+ std::string m_mime;
};
struct sout_stream_sys_t
@@ -487,58 +491,73 @@ int sout_access_out_sys_t::url_cb(httpd_client_t *cl, httpd_message_t *answer,
return VLC_SUCCESS;
}
-
-static ssize_t AccessWrite(sout_access_out_t *p_access, block_t *p_block)
+ssize_t sout_access_out_sys_t::write(sout_access_out_t *p_access, block_t *p_block)
{
- sout_access_out_sys_t *p_sys = p_access->p_sys;
size_t i_len = p_block->i_buffer;
- vlc_fifo_Lock(p_sys->m_fifo);
+ vlc_fifo_Lock(m_fifo);
- if (p_sys->m_flushing)
+ if (m_flushing)
{
- p_sys->m_flushing = false;
- p_sys->m_seeking = true;
+ m_flushing = false;
+ m_seeking = true;
- vlc_fifo_Unlock(p_sys->m_fifo);
+ vlc_fifo_Unlock(m_fifo);
/* TODO: put better timestamp */
- bool success = p_sys->m_intf->requestPlayerSeek(mdate() + INT64_C(1000000));
- vlc_fifo_Lock(p_sys->m_fifo);
+ bool success = m_intf->requestPlayerSeek(mdate() + INT64_C(1000000));
+ vlc_fifo_Lock(m_fifo);
if (!success)
- p_sys->m_seeking = false;
+ m_seeking = false;
}
bool do_pace = false;
if (p_block->i_flags & BLOCK_FLAG_HEADER)
{
- if (p_sys->m_header)
- block_Release(p_sys->m_header);
- p_sys->m_header = p_block;
+ if (m_header)
+ block_Release(m_header);
+ m_header = p_block;
}
else
{
/* Tell the demux filter to pace when the fifo starts to be full */
- do_pace = vlc_fifo_GetBytes(p_sys->m_fifo) >= HTTPD_BUFFER_MAX;
+ do_pace = vlc_fifo_GetBytes(m_fifo) >= HTTPD_BUFFER_MAX;
/* Drop buffer is the fifo is really full */
- while (vlc_fifo_GetBytes(p_sys->m_fifo) >= (HTTPD_BUFFER_MAX * 2))
+ while (vlc_fifo_GetBytes(m_fifo) >= (HTTPD_BUFFER_MAX * 2))
{
- block_t *p_drop = vlc_fifo_DequeueUnlocked(p_sys->m_fifo);
+ block_t *p_drop = vlc_fifo_DequeueUnlocked(m_fifo);
msg_Warn(p_access, "httpd buffer full: dropping %zuB", p_drop->i_buffer);
block_Release(p_drop);
}
- vlc_fifo_QueueUnlocked(p_sys->m_fifo, p_block);
+ vlc_fifo_QueueUnlocked(m_fifo, p_block);
}
- vlc_fifo_Unlock(p_sys->m_fifo);
- vlc_fifo_Signal(p_sys->m_fifo);
+ vlc_fifo_Unlock(m_fifo);
+ vlc_fifo_Signal(m_fifo);
if (do_pace)
- p_sys->m_intf->setPacing(true);
+ m_intf->setPacing(true);
return i_len;
}
+void sout_access_out_sys_t::close()
+{
+ vlc_fifo_Lock(m_fifo);
+ m_eof = true;
+ m_flushing = false;
+ vlc_fifo_Unlock(m_fifo);
+ vlc_fifo_Signal(m_fifo);
+
+ m_intf->setPacing(false);
+}
+
+ssize_t AccessWrite(sout_access_out_t *p_access, block_t *p_block)
+{
+ sout_access_out_sys_t *p_sys = p_access->p_sys;
+ return p_sys->write(p_access, p_block);
+}
+
static int AccessControl(sout_access_out_t *p_access, int i_query, va_list args)
{
(void) p_access;
@@ -563,8 +582,6 @@ static int AccessOpen(vlc_object_t *p_this)
if (p_sys == NULL)
return VLC_EGENERIC;
- assert(!p_sys->m_eof);
-
p_access->pf_write = AccessWrite;
p_access->pf_control = AccessControl;
p_access->p_sys = p_sys;
@@ -577,13 +594,7 @@ static void AccessClose(vlc_object_t *p_this)
sout_access_out_t *p_access = (sout_access_out_t*)p_this;
sout_access_out_sys_t *p_sys = p_access->p_sys;
- vlc_fifo_Lock(p_sys->m_fifo);
- p_sys->m_eof = true;
- p_sys->m_flushing = false;
- vlc_fifo_Unlock(p_sys->m_fifo);
- vlc_fifo_Signal(p_sys->m_fifo);
-
- p_sys->m_intf->setPacing(false);
+ p_sys->close();
}
/*****************************************************************************
More information about the vlc-commits
mailing list