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);