[vlc-commits] demux: adaptative: virtualize es callbacks handlers

Francois Cartegnie git at videolan.org
Thu Jul 16 23:04:28 CEST 2015


vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Jul 15 22:07:21 2015 +0200| [1e4a17c3f18939e3ea7a6d477574168999ca0707] | committer: Francois Cartegnie

demux: adaptative: virtualize es callbacks handlers

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1e4a17c3f18939e3ea7a6d477574168999ca0707
---

 modules/demux/adaptative/Streams.cpp |  125 ++++++++++++++++++++--------------
 modules/demux/adaptative/Streams.hpp |   17 +++--
 2 files changed, 87 insertions(+), 55 deletions(-)

diff --git a/modules/demux/adaptative/Streams.cpp b/modules/demux/adaptative/Streams.cpp
index 4c87641..6b86704 100644
--- a/modules/demux/adaptative/Streams.cpp
+++ b/modules/demux/adaptative/Streams.cpp
@@ -316,11 +316,11 @@ BaseStreamOutput::BaseStreamOutput(demux_t *demux, const StreamFormat &format, c
 
     vlc_mutex_init(&lock);
 
-    fakeesout->pf_add = esOutAdd;
-    fakeesout->pf_control = esOutControl;
-    fakeesout->pf_del = esOutDel;
-    fakeesout->pf_destroy = esOutDestroy;
-    fakeesout->pf_send = esOutSend;
+    fakeesout->pf_add = esOutAdd_Callback;
+    fakeesout->pf_control = esOutControl_Callback;
+    fakeesout->pf_del = esOutDel_Callback;
+    fakeesout->pf_destroy = esOutDestroy_Callback;
+    fakeesout->pf_send = esOutSend_Callback;
     fakeesout->p_sys = (es_out_sys_t*) this;
 
     demuxstream = stream_DemuxNew(realdemux, name.c_str(), fakeesout);
@@ -497,17 +497,46 @@ void BaseStreamOutput::Demuxed::drop()
 }
 
 /* Static callbacks */
-es_out_id_t * BaseStreamOutput::esOutAdd(es_out_t *fakees, const es_format_t *p_fmt)
+es_out_id_t * BaseStreamOutput::esOutAdd_Callback(es_out_t *fakees, const es_format_t *p_fmt)
 {
     BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
+    return me->esOutAdd(p_fmt);
+}
+
+int BaseStreamOutput::esOutSend_Callback(es_out_t *fakees, es_out_id_t *p_es, block_t *p_block)
+{
+    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
+    return me->esOutSend(p_es, p_block);
+}
+
+void BaseStreamOutput::esOutDel_Callback(es_out_t *fakees, es_out_id_t *p_es)
+{
+    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
+    me->esOutDel(p_es);
+}
+
+int BaseStreamOutput::esOutControl_Callback(es_out_t *fakees, int i_query, va_list ap)
+{
+    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
+    return me->esOutControl(i_query, ap);
+}
+
+void BaseStreamOutput::esOutDestroy_Callback(es_out_t *fakees)
+{
+    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
+    me->esOutDestroy();
+}
+/* !Static callbacks */
 
+es_out_id_t * BaseStreamOutput::esOutAdd(const es_format_t *p_fmt)
+{
     es_out_id_t *p_es = NULL;
 
-    vlc_mutex_lock(&me->lock);
+    vlc_mutex_lock(&lock);
 
     std::list<Demuxed *>::iterator it;
     bool b_hasestorecyle = false;
-    for(it=me->queues.begin(); it!=me->queues.end();++it)
+    for(it=queues.begin(); it!=queues.end();++it)
     {
         Demuxed *pair = *it;
         b_hasestorecyle |= pair->recycle;
@@ -515,14 +544,14 @@ es_out_id_t * BaseStreamOutput::esOutAdd(es_out_t *fakees, const es_format_t *p_
         if( p_es )
             continue;
 
-        if( me->restarting )
+        if( restarting )
         {
             /* If we're recycling from same format */
             if( es_format_IsSimilar(p_fmt, &pair->fmtcpy) &&
                     p_fmt->i_extra == pair->fmtcpy.i_extra &&
                     !memcmp(p_fmt->p_extra, pair->fmtcpy.p_extra, p_fmt->i_extra) )
             {
-                msg_Err(me->realdemux, "using recycled");
+                msg_Err(realdemux, "using recycled");
                 pair->recycle = false;
                 p_es = pair->es_id;
             }
@@ -531,45 +560,44 @@ es_out_id_t * BaseStreamOutput::esOutAdd(es_out_t *fakees, const es_format_t *p_
 
     if(!b_hasestorecyle)
     {
-        me->restarting = false;
+        restarting = false;
     }
 
     if(!p_es)
     {
-        p_es = me->realdemux->out->pf_add(me->realdemux->out, p_fmt);
+        p_es = realdemux->out->pf_add(realdemux->out, p_fmt);
         if(p_es)
         {
             Demuxed *pair = new (std::nothrow) Demuxed(p_es, p_fmt);
             if(pair)
-                me->queues.push_back(pair);
+                queues.push_back(pair);
         }
     }
-    vlc_mutex_unlock(&me->lock);
+    vlc_mutex_unlock(&lock);
 
     return p_es;
 }
 
-int BaseStreamOutput::esOutSend(es_out_t *fakees, es_out_id_t *p_es, block_t *p_block)
+int BaseStreamOutput::esOutSend(es_out_id_t *p_es, block_t *p_block)
 {
-    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
-    vlc_mutex_lock(&me->lock);
-    if(me->b_drop)
+    vlc_mutex_lock(&lock);
+    if(b_drop)
     {
         block_ChainRelease( p_block );
     }
     else
     {
-        if( me->timestamps_offset > VLC_TS_INVALID )
+        if( timestamps_offset > VLC_TS_INVALID )
         {
             if(p_block->i_dts > VLC_TS_INVALID)
-                p_block->i_dts += (me->timestamps_offset - VLC_TS_0);
+                p_block->i_dts += (timestamps_offset - VLC_TS_0);
 
             if(p_block->i_pts > VLC_TS_INVALID)
-                p_block->i_pts += (me->timestamps_offset - VLC_TS_0);
+                p_block->i_pts += (timestamps_offset - VLC_TS_0);
         }
 
         std::list<Demuxed *>::const_iterator it;
-        for(it=me->queues.begin(); it!=me->queues.end();++it)
+        for(it=queues.begin(); it!=queues.end();++it)
         {
             Demuxed *pair = *it;
             if(pair->es_id == p_es)
@@ -579,62 +607,60 @@ int BaseStreamOutput::esOutSend(es_out_t *fakees, es_out_id_t *p_es, block_t *p_
             }
         }
     }
-    vlc_mutex_unlock(&me->lock);
+    vlc_mutex_unlock(&lock);
     return VLC_SUCCESS;
 }
 
-void BaseStreamOutput::esOutDel(es_out_t *fakees, es_out_id_t *p_es)
+void BaseStreamOutput::esOutDel(es_out_id_t *p_es)
 {
-    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
-    vlc_mutex_lock(&me->lock);
+    vlc_mutex_lock(&lock);
     std::list<Demuxed *>::iterator it;
-    for(it=me->queues.begin(); it!=me->queues.end();++it)
+    for(it=queues.begin(); it!=queues.end();++it)
     {
         if((*it)->es_id == p_es)
         {
-            me->sendToDecoderUnlocked(INT64_MAX - VLC_TS_0);
+            sendToDecoderUnlocked(INT64_MAX - VLC_TS_0);
             break;
         }
     }
 
-    if(it != me->queues.end())
+    if(it != queues.end())
     {
-        if(me->restarting)
+        if(restarting)
         {
             (*it)->recycle = true;
         }
         else
         {
             delete *it;
-            me->queues.erase(it);
+            queues.erase(it);
         }
     }
 
-    if(!me->restarting)
-        me->realdemux->out->pf_del(me->realdemux->out, p_es);
+    if(!restarting)
+        realdemux->out->pf_del(realdemux->out, p_es);
 
-    vlc_mutex_unlock(&me->lock);
+    vlc_mutex_unlock(&lock);
 }
 
-int BaseStreamOutput::esOutControl(es_out_t *fakees, int i_query, va_list args)
+int BaseStreamOutput::esOutControl(int i_query, va_list args)
 {
-    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
     if (i_query == ES_OUT_SET_PCR )
     {
         vlc_mutex_lock(&lock);
         pcr = (int64_t)va_arg( args, int64_t );
-        if(me->pcr > VLC_TS_INVALID && me->timestamps_offset > VLC_TS_INVALID)
-            me->pcr += (me->timestamps_offset - VLC_TS_0);
+        if(pcr > VLC_TS_INVALID && timestamps_offset > VLC_TS_INVALID)
+            pcr += (timestamps_offset - VLC_TS_0);
         vlc_mutex_unlock(&lock);
         return VLC_SUCCESS;
     }
     else if( i_query == ES_OUT_SET_GROUP_PCR )
     {
         vlc_mutex_lock(&lock);
-        me->group = (int) va_arg( args, int );
-        me->pcr = (int64_t)va_arg( args, int64_t );
-        if(me->pcr > VLC_TS_INVALID && me->timestamps_offset > VLC_TS_INVALID)
-            me->pcr += (me->timestamps_offset - VLC_TS_0);
+        group = (int) va_arg( args, int );
+        pcr = (int64_t)va_arg( args, int64_t );
+        if(pcr > VLC_TS_INVALID && timestamps_offset > VLC_TS_INVALID)
+            pcr += (timestamps_offset - VLC_TS_0);
         vlc_mutex_unlock(&lock);
         return VLC_SUCCESS;
     }
@@ -646,21 +672,20 @@ int BaseStreamOutput::esOutControl(es_out_t *fakees, int i_query, va_list args)
         return VLC_SUCCESS;
     }
 
-    vlc_mutex_lock(&me->lock);
-    bool b_restarting = me->restarting;
-    vlc_mutex_unlock(&me->lock);
+    vlc_mutex_lock(&lock);
+    bool b_restarting = restarting;
+    vlc_mutex_unlock(&lock);
 
     if( b_restarting )
     {
         return VLC_EGENERIC;
     }
 
-    return me->realdemux->out->pf_control(me->realdemux->out, i_query, args);
+    return realdemux->out->pf_control(realdemux->out, i_query, args);
 }
 
-void BaseStreamOutput::esOutDestroy(es_out_t *fakees)
+void BaseStreamOutput::esOutDestroy()
 {
-    BaseStreamOutput *me = (BaseStreamOutput *) fakees->p_sys;
-    me->realdemux->out->pf_destroy(me->realdemux->out);
+    realdemux->out->pf_destroy(realdemux->out);
 }
-/* !Static callbacks */
+
diff --git a/modules/demux/adaptative/Streams.hpp b/modules/demux/adaptative/Streams.hpp
index af1475d..d36317b 100644
--- a/modules/demux/adaptative/Streams.hpp
+++ b/modules/demux/adaptative/Streams.hpp
@@ -152,12 +152,19 @@ namespace adaptative
         bool      restarting;
         mtime_t   timestamps_offset;
 
+        virtual es_out_id_t *esOutAdd(const es_format_t *);
+        virtual int esOutSend(es_out_id_t *, block_t *);
+        virtual void esOutDel(es_out_id_t *);
+        virtual int esOutControl(int, va_list);
+        virtual void esOutDestroy();
+
     private:
-        static es_out_id_t *esOutAdd(es_out_t *, const es_format_t *);
-        static int esOutSend(es_out_t *, es_out_id_t *, block_t *);
-        static void esOutDel(es_out_t *, es_out_id_t *);
-        static int esOutControl(es_out_t *, int, va_list);
-        static void esOutDestroy(es_out_t *);
+        /* static callbacks for demuxer */
+        static es_out_id_t *esOutAdd_Callback(es_out_t *, const es_format_t *);
+        static int esOutSend_Callback(es_out_t *, es_out_id_t *, block_t *);
+        static void esOutDel_Callback(es_out_t *, es_out_id_t *);
+        static int esOutControl_Callback(es_out_t *, int, va_list);
+        static void esOutDestroy_Callback(es_out_t *);
 
         class Demuxed
         {



More information about the vlc-commits mailing list