[vlc-commits] chromecast: use a local sout_stream_id_sys_t containing the es_format_t
Steve Lhomme
git at videolan.org
Tue May 3 13:22:59 CEST 2016
vlc | branch: master | Steve Lhomme <robux4 at videolabs.io> | Thu Apr 28 14:20:55 2016 +0200| [ada686e8b0a5795640beca905faa6234fec9b39f] | committer: Thomas Guillem
chromecast: use a local sout_stream_id_sys_t containing the es_format_t
Signed-off-by: Thomas Guillem <thomas at gllm.fr>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ada686e8b0a5795640beca905faa6234fec9b39f
---
modules/stream_out/chromecast/cast.cpp | 59 ++++++++++++++++++++++++++++++--
1 file changed, 57 insertions(+), 2 deletions(-)
diff --git a/modules/stream_out/chromecast/cast.cpp b/modules/stream_out/chromecast/cast.cpp
index d05ca1c..4a244f8 100644
--- a/modules/stream_out/chromecast/cast.cpp
+++ b/modules/stream_out/chromecast/cast.cpp
@@ -54,6 +54,10 @@ struct sout_stream_sys_t
sout_stream_t * const p_out;
intf_sys_t * const p_intf;
const bool b_has_video;
+
+ sout_stream_id_sys_t *GetSubId( sout_stream_t*, sout_stream_id_sys_t* );
+
+ std::vector<sout_stream_id_sys_t*> streams;
};
#define SOUT_CFG_PREFIX "sout-chromecast-"
@@ -100,6 +104,12 @@ vlc_module_begin ()
vlc_module_end ()
+struct sout_stream_id_sys_t
+{
+ es_format_t fmt;
+ sout_stream_id_sys_t *p_sub_id;
+};
+
/*****************************************************************************
* Sout callbacks
*****************************************************************************/
@@ -112,7 +122,16 @@ static sout_stream_id_sys_t *Add(sout_stream_t *p_stream, const es_format_t *p_f
if (p_fmt->i_cat != AUDIO_ES)
return NULL;
}
- return sout_StreamIdAdd(p_sys->p_out, p_fmt);
+
+ sout_stream_id_sys_t *p_sys_id = (sout_stream_id_sys_t *)malloc( sizeof(sout_stream_id_sys_t) );
+ if (p_sys_id != NULL)
+ {
+ es_format_Copy( &p_sys_id->fmt, p_fmt );
+ p_sys_id->p_sub_id = NULL;
+
+ p_sys->streams.push_back( p_sys_id );
+ }
+ return p_sys_id;
}
@@ -120,15 +139,47 @@ static void Del(sout_stream_t *p_stream, sout_stream_id_sys_t *id)
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
- sout_StreamIdDel(p_sys->p_out, id);
+ for (size_t i=0; i<p_sys->streams.size(); i++)
+ {
+ if ( p_sys->streams[i] == id )
+ {
+ if ( p_sys->streams[i]->p_sub_id != NULL )
+ sout_StreamIdDel( p_sys->p_out, p_sys->streams[i]->p_sub_id );
+
+ es_format_Clean( &p_sys->streams[i]->fmt );
+ free( p_sys->streams[i] );
+ p_sys->streams.erase( p_sys->streams.begin() + i );
+ break;
+ }
+ }
}
+sout_stream_id_sys_t *sout_stream_sys_t::GetSubId( sout_stream_t *p_stream,
+ sout_stream_id_sys_t *id )
+{
+ size_t i;
+
+ assert( p_stream->p_sys == this );
+
+ for (i = 0; i < streams.size(); ++i)
+ {
+ if ( id == (sout_stream_id_sys_t*) streams[i] )
+ return streams[i]->p_sub_id;
+ }
+
+ msg_Err( p_stream, "unknown stream ID" );
+ return NULL;
+}
static int Send(sout_stream_t *p_stream, sout_stream_id_sys_t *id,
block_t *p_buffer)
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
+ id = p_sys->GetSubId( p_stream, id );
+ if ( id == NULL )
+ return VLC_EGENERIC;
+
return sout_StreamIdSend(p_sys->p_out, id, p_buffer);
}
@@ -136,6 +187,10 @@ static void Flush( sout_stream_t *p_stream, sout_stream_id_sys_t *id )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
+ id = p_sys->GetSubId( p_stream, id );
+ if ( id == NULL )
+ return;
+
sout_StreamFlush( p_sys->p_out, id );
}
More information about the vlc-commits
mailing list