[haiku-commits] haiku: hrev50177 - src/servers/media headers/private/media src/kits/media

  • From: b.vitruvio@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 31 Mar 2016 18:26:41 +0200 (CEST)

hrev50177 adds 2 changesets to branch 'master'
old head: e38a85b86ab9f6ac67cf97afeedba76de47068bf
new head: cb80fc94c246e789c3b469dd51fdfbdb54f00451
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=cb80fc94c246+%5Ee38a85b86ab9

----------------------------------------------------------------------------

7eaa054b87d8: StreamerPlugin: Use BDataIO as base interface
  
  * There's no need to force the streamer plugin to use a
  BMediaIO. This class is supplied to accomodate more smart uses,
  but in certain cases it makes just things more complex. If a
  plugin doesn't need to have an internal caching method, then it
  will be simpler to implement a block-consuming BDataIO and let
  the internal BMediaIOWrapper to deal with caching.

cb80fc94c246: NodeManager: Allow to overwrite the system clock
  
  * This is another brick into making the media_addon_server survive
  to media_server crashes and vice versa.

                                [ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]

----------------------------------------------------------------------------

3 files changed, 25 insertions(+), 8 deletions(-)
headers/private/media/StreamerPlugin.h |  2 +-
src/kits/media/PluginManager.cpp       |  2 +-
src/servers/media/NodeManager.cpp      | 29 +++++++++++++++++++++++------

############################################################################

Commit:      7eaa054b87d834aaec7b666fd8530f49ed19ee8a
URL:         http://cgit.haiku-os.org/haiku/commit/?id=7eaa054b87d8
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Thu Mar 31 15:56:24 2016 UTC

StreamerPlugin: Use BDataIO as base interface

* There's no need to force the streamer plugin to use a
BMediaIO. This class is supplied to accomodate more smart uses,
but in certain cases it makes just things more complex. If a
plugin doesn't need to have an internal caching method, then it
will be simpler to implement a block-consuming BDataIO and let
the internal BMediaIOWrapper to deal with caching.

----------------------------------------------------------------------------

diff --git a/headers/private/media/StreamerPlugin.h 
b/headers/private/media/StreamerPlugin.h
index 60f26ff..907134e 100644
--- a/headers/private/media/StreamerPlugin.h
+++ b/headers/private/media/StreamerPlugin.h
@@ -18,7 +18,7 @@ public:
                                                                Streamer();
        virtual                                         ~Streamer();
 
-       virtual status_t                        Sniff(BUrl* url, BMediaIO** 
source) = 0;
+       virtual status_t                        Sniff(BUrl* url, BDataIO** 
source) = 0;
 private:
        virtual void                            _ReservedStreamer1();
        virtual void                            _ReservedStreamer2();
diff --git a/src/kits/media/PluginManager.cpp b/src/kits/media/PluginManager.cpp
index fca9cb6..34a5d9c 100644
--- a/src/kits/media/PluginManager.cpp
+++ b/src/kits/media/PluginManager.cpp
@@ -623,7 +623,7 @@ PluginManager::CreateStreamer(Streamer** streamer, BUrl* 
url, BDataIO** source)
 
                (*streamer)->fMediaPlugin = plugin;
 
-               BMediaIO* streamSource = NULL;
+               BDataIO* streamSource = NULL;
                if ((*streamer)->Sniff(url, &streamSource) == B_OK) {
                        TRACE("PluginManager::CreateStreamer: Sniff success ");
                        *source = streamSource;

############################################################################

Revision:    hrev50177
Commit:      cb80fc94c246e789c3b469dd51fdfbdb54f00451
URL:         http://cgit.haiku-os.org/haiku/commit/?id=cb80fc94c246
Author:      Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date:        Thu Mar 31 16:02:32 2016 UTC

NodeManager: Allow to overwrite the system clock

* This is another brick into making the media_addon_server survive
to media_server crashes and vice versa.

----------------------------------------------------------------------------

diff --git a/src/servers/media/NodeManager.cpp 
b/src/servers/media/NodeManager.cpp
index d9315a2..9a79db8 100644
--- a/src/servers/media/NodeManager.cpp
+++ b/src/servers/media/NodeManager.cpp
@@ -151,7 +151,6 @@ NodeManager::RegisterNode(media_addon_id addOnID, int32 
flavorID,
        BAutolock _(this);
 
        registered_node node;
-       node.node_id = fNextNodeID;
        node.timesource_id = timesource;
        node.add_on_id = addOnID;
        node.flavor_id = flavorID;
@@ -162,15 +161,30 @@ NodeManager::RegisterNode(media_addon_id addOnID, int32 
flavorID,
        node.creator = -1; // will be set later
        node.ref_count = 1;
 
+       if (node.kinds & B_TIME_SOURCE
+                       && strcmp(node.name, "System clock") == 0) {
+               // This may happen when media_addon_server crash,
+               // we will replace the old timesource.
+               node.node_id = NODE_SYSTEM_TIMESOURCE_ID;
+
+               NodeMap::iterator found = fNodeMap.find(node.node_id);
+               if (found != fNodeMap.end())
+                       fNodeMap.erase(node.node_id);
+
+               *_nodeID = node.node_id;
+       } else {
+               node.node_id = fNextNodeID;
+               *_nodeID = node.node_id;
+       }
+
        try {
                node.team_ref_count.insert(std::make_pair(team, 1));
-
-               fNodeMap.insert(std::make_pair(fNextNodeID, node));
+               fNodeMap.insert(std::make_pair(node.node_id, node));
        } catch (std::bad_alloc& exception) {
                return B_NO_MEMORY;
        }
 
-       *_nodeID = fNextNodeID++;
+       fNextNodeID++;
 
        TRACE("NodeManager::RegisterNode: node %" B_PRId32 ", addon_id %" 
B_PRId32
                ", flavor_id %" B_PRId32 ", name \"%s\", kinds %#Lx, port %" 
B_PRId32
@@ -211,8 +225,11 @@ NodeManager::UnregisterNode(media_node_id id, team_id team,
                //return B_ERROR;
        }
 
-       *_addOnID = node.add_on_id;
-       *_flavorID = node.flavor_id;
+       if (_addOnID != NULL)
+               *_addOnID = node.add_on_id;
+
+       if (_flavorID != NULL)
+               *_flavorID = node.flavor_id;
 
        fNodeMap.erase(found);
 


Other related posts: