[haiku-commits] haiku: hrev49384 - in src: servers/media_addon kits/media servers/media

  • From: b.vitruvio@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 10 Jul 2015 00:33:15 +0200 (CEST)

hrev49384 adds 4 changesets to branch 'master'
old head: b7d5c81a958801a4cc1860c0517a117cb7ce0950
new head: 1363ef8d859de3956bcad53a2c9ef6430938fe89
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=1363ef8d859d+%5Eb7d5c81a9588

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

d97447ba40e2: media_server: Add missing notifications for flavors/nodes changes

7bcdb3624951: media_server: Improve BTimeSource slave nodes management

The media_server is now able to remember the timesource associated to
a certain registered_node and always remove it when the owner
application crash, Fixes Ticket #11852

820864182214: media_addon_server: cleanup of MediaFilePlayer

1363ef8d859d: MediaFilePlayer: use BString for fName attribute

[ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]

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

8 files changed, 215 insertions(+), 99 deletions(-)
headers/private/media/ServerInterface.h | 10 ++++
src/kits/media/MediaRoster.cpp | 79 ++++++++++++++-----------
src/kits/media/TimeSource.cpp | 6 --
src/servers/media/NodeManager.cpp | 73 +++++++++++++++++++++--
src/servers/media/NodeManager.h | 6 ++
src/servers/media/media_server.cpp | 13 +++-
src/servers/media_addon/MediaFilePlayer.cpp | 75 ++++++++++++++---------
src/servers/media_addon/MediaFilePlayer.h | 52 +++++++++-------

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

Commit: d97447ba40e2740723e663973fa1b20e090c85df
URL: http://cgit.haiku-os.org/haiku/commit/?id=d97447ba40e2
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Thu Jul 9 10:57:05 2015 UTC

media_server: Add missing notifications for flavors/nodes changes

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

diff --git a/src/servers/media/NodeManager.cpp
b/src/servers/media/NodeManager.cpp
index 69e72c6..f29fe3e 100644
--- a/src/servers/media/NodeManager.cpp
+++ b/src/servers/media/NodeManager.cpp
@@ -41,6 +41,7 @@

#include <debug.h>
#include <MediaMisc.h>
+#include <Notifications.h>

#include "AppManager.h"
#include "DefaultManager.h"
@@ -980,8 +981,17 @@ NodeManager::CleanupDormantFlavorInfos()
PRINT(1, "NodeManager::CleanupDormantFlavorInfos\n");

BAutolock _(this);
+
+ for (DormantFlavorList::iterator iterator = fDormantFlavors.begin();
+ iterator != fDormantFlavors.end(); iterator++) {
+ dormant_add_on_flavor_info& info = *iterator;
+
+ // Current instance count is zero since the media_addon_server
crashed.
+ BPrivate::media::notifications::FlavorsChanged(info.add_on_id,
+ 0, info.instances_count);
+ }
+
fDormantFlavors.clear();
- // TODO: FlavorsChanged() notification

PRINT(1, "NodeManager::CleanupDormantFlavorInfos done\n");
}
@@ -1091,8 +1101,6 @@ NodeManager::CleanupTeam(team_id team)

PRINT(1, "NodeManager::CleanupTeam: team %" B_PRId32 "\n", team);

- // TODO: send notifications after removing nodes
-
// Cleanup node references

for (NodeMap::iterator iterator = fNodeMap.begin();
@@ -1113,6 +1121,7 @@ NodeManager::CleanupTeam(team_id team)
PRINT(1, "NodeManager::CleanupTeam: removing node id %"
B_PRId32
", team %" B_PRId32 "\n", node.node_id, team);
fNodeMap.erase(remove);
+
BPrivate::media::notifications::NodesDeleted(&node.node_id, 1);
continue;
}

@@ -1129,6 +1138,7 @@ NodeManager::CleanupTeam(team_id team)
B_PRId32 " that has no teams\n",
node.node_id);

fNodeMap.erase(remove);
+
BPrivate::media::notifications::NodesDeleted(&node.node_id, 1);
} else
node.team_ref_count.erase(teamRef);
}
@@ -1147,10 +1157,13 @@ NodeManager::CleanupTeam(team_id team)
instanceCount->second, flavorInfo.add_on_id,
flavorInfo.flavor_id);

+ int32 count = flavorInfo.instances_count;
flavorInfo.instances_count -= instanceCount->second;
- if (flavorInfo.instances_count <= 0)
+ if (flavorInfo.instances_count <= 0) {
fDormantFlavors.erase(fDormantFlavors.begin() +
index--);
- else
+ BPrivate::media::notifications::FlavorsChanged(
+ flavorInfo.add_on_id, 0, count);
+ } else
flavorInfo.team_instances_count.erase(team);
}
}

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

Commit: 7bcdb3624951ebf640098d2a860cef7d9557e1df
URL: http://cgit.haiku-os.org/haiku/commit/?id=7bcdb3624951
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Mon May 25 10:43:27 2015 UTC

Ticket: https://dev.haiku-os.org/ticket/11852

media_server: Improve BTimeSource slave nodes management

The media_server is now able to remember the timesource associated to
a certain registered_node and always remove it when the owner
application crash, Fixes Ticket #11852

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

diff --git a/headers/private/media/ServerInterface.h
b/headers/private/media/ServerInterface.h
index 13249eb..5b04b60 100644
--- a/headers/private/media/ServerInterface.h
+++ b/headers/private/media/ServerInterface.h
@@ -79,6 +79,7 @@ enum {
SERVER_REGISTER_DORMANT_NODE,
SERVER_GET_DORMANT_NODES,
SERVER_GET_DORMANT_FLAVOR_INFO,
+ SERVER_SET_NODE_TIMESOURCE,
SERVER_MESSAGE_END,

NODE_MESSAGE_START = 0x200,
@@ -390,6 +391,7 @@ struct server_change_flavor_instances_count_reply :
reply_data {
struct server_register_node_request : request_data {
media_addon_id add_on_id;
int32 flavor_id;
+ media_node_id timesource_id;
char name[B_MEDIA_NAME_LENGTH];
uint64 kinds;
port_id port;
@@ -634,6 +636,14 @@ struct server_register_dormant_node_command : command_data
{
// a flattened dormant_flavor_info, flattened_size large
};

+struct server_set_node_timesource_request : request_data {
+ media_node_id node_id;
+ media_node_id timesource_id;
+};
+
+struct server_set_node_timesource_reply : reply_data {
+};
+

// #pragma mark - buffer producer commands

diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp
index 8201be0..18a0786 100644
--- a/src/kits/media/MediaRoster.cpp
+++ b/src/kits/media/MediaRoster.cpp
@@ -1,6 +1,7 @@
/*
- * Copyright 2008 Maurice Kalinowski, haiku@xxxxxxxxxxxxx
+ * Copyright 2015 Dario Casalinuovo
* Copyright 2009-2012, Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
+ * Copyright 2008 Maurice Kalinowski, haiku@xxxxxxxxxxxxx
*
* All rights reserved. Distributed under the terms of the MIT License.
*/
@@ -1972,6 +1973,7 @@ BMediaRosterEx::RegisterNode(BMediaNode* node,
media_addon_id addOnID,
request.kinds = node->Kinds();
request.port = node->ControlPort();
request.team = BPrivate::current_team();
+ request.timesource_id = node->fTimeSourceID;

TRACE("BMediaRoster::RegisterNode: sending SERVER_REGISTER_NODE: port "
"%" B_PRId32 ", kinds 0x%" B_PRIx64 ", team %" B_PRId32 ", name
'%s'\n",
@@ -2176,44 +2178,51 @@ BMediaRoster::SetTimeSourceFor(media_node_id node,
media_node_id time_source)
return B_BAD_VALUE;

media_node clone;
- status_t rv, result;
-
- TRACE("BMediaRoster::SetTimeSourceFor: node %" B_PRId32 " will be
assigned "
- "time source %" B_PRId32 "\n", node, time_source);
- TRACE("BMediaRoster::SetTimeSourceFor: node %" B_PRId32 " time source %"
- B_PRId32 " enter\n", node, time_source);
-
- // we need to get a clone of the node to have a port id
- rv = GetNodeFor(node, &clone);
- if (rv != B_OK) {
- ERROR("BMediaRoster::SetTimeSourceFor, GetNodeFor failed, node
id %"
- B_PRId32 "\n", node);
- return B_ERROR;
- }
-
- // we just send the request to set time_source-id as timesource to the
node,
- // the NODE_SET_TIMESOURCE handler code will do the real assignment
- result = B_OK;
- node_set_timesource_command cmd;
- cmd.timesource_id = time_source;
- rv = SendToPort(clone.port, NODE_SET_TIMESOURCE, &cmd, sizeof(cmd));
- if (rv != B_OK) {
- ERROR("BMediaRoster::SetTimeSourceFor, sending
NODE_SET_TIMESOURCE "
- "failed, node id %" B_PRId32 "\n", node);
- result = B_ERROR;
+ // We need to get a clone of the node to have a port id
+ status_t result = GetNodeFor(node, &clone);
+ if (result == B_OK) {
+ // We just send the request to set time_source-id as
+ // timesource to the node, the NODE_SET_TIMESOURCE handler
+ // code will do the real assignment.
+ result = B_OK;
+ node_set_timesource_command cmd;
+ cmd.timesource_id = time_source;
+ result = SendToPort(clone.port, NODE_SET_TIMESOURCE,
+ &cmd, sizeof(cmd));
+ if (result != B_OK) {
+ ERROR("BMediaRoster::SetTimeSourceFor"
+ "sending NODE_SET_TIMESOURCE failed, node id %"
+ B_PRId32 "\n", clone.node);
+ }
+ // We release the clone
+ result = ReleaseNode(clone);
+ if (result != B_OK) {
+ ERROR("BMediaRoster::SetTimeSourceFor, ReleaseNode
failed,"
+ " node id %" B_PRId32 "\n", clone.node);
+ }
+ } else {
+ ERROR("BMediaRoster::SetTimeSourceFor GetCloneForID failed, "
+ "node id %" B_PRId32 "\n", node);
}

- // we release the clone
- rv = ReleaseNode(clone);
- if (rv != B_OK) {
- ERROR("BMediaRoster::SetTimeSourceFor, ReleaseNode failed, node
id %"
- B_PRId32 "\n", node);
- result = B_ERROR;
- }
+ if (result == B_OK) {
+ // Notify the server
+ server_set_node_timesource_request request;
+ server_set_node_timesource_reply reply;

- TRACE("BMediaRoster::SetTimeSourceFor: node %" B_PRId32 " time source %"
- B_PRId32 " leave\n", node, time_source);
+ request.node_id = node;
+ request.timesource_id = time_source;

+ result = QueryServer(SERVER_SET_NODE_TIMESOURCE, &request,
+ sizeof(request), &reply, sizeof(reply));
+ if (result != B_OK) {
+ ERROR("BMediaRoster::SetTimeSourceFor, sending
NODE_SET_TIMESOURCE "
+ "failed, node id %" B_PRId32 "\n", node);
+ } else {
+ TRACE("BMediaRoster::SetTimeSourceFor: node %" B_PRId32
" time source %"
+ B_PRId32 " OK\n", node, time_source);
+ }
+ }
return result;
}

diff --git a/src/kits/media/TimeSource.cpp b/src/kits/media/TimeSource.cpp
index f3f6ad2..89f1e57 100644
--- a/src/kits/media/TimeSource.cpp
+++ b/src/kits/media/TimeSource.cpp
@@ -545,9 +545,6 @@ BTimeSource::AddMe(BMediaNode* node)
void
BTimeSource::DirectAddMe(const media_node& node)
{
- // XXX this code has race conditions and is pretty dumb, and it
- // XXX won't detect nodes that crash and don't remove themself.
-
CALLED();
ASSERT(fSlaveNodes != NULL);
BAutolock lock(fSlaveNodes);
@@ -582,9 +579,6 @@ BTimeSource::DirectAddMe(const media_node& node)
void
BTimeSource::DirectRemoveMe(const media_node& node)
{
- // XXX this code has race conditions and is pretty dumb, and it
- // XXX won't detect nodes that crash and don't remove themself.
-
CALLED();
ASSERT(fSlaveNodes != NULL);
BAutolock lock(fSlaveNodes);
diff --git a/src/servers/media/NodeManager.cpp
b/src/servers/media/NodeManager.cpp
index f29fe3e..d9315a2 100644
--- a/src/servers/media/NodeManager.cpp
+++ b/src/servers/media/NodeManager.cpp
@@ -1,4 +1,5 @@
/*
+ * Copyright (c) 2015 Dario Casalinuovo
* Copyright (c) 2002, 2003 Marcus Overhagen <Marcus@xxxxxxxxxxxx>
*
* Permission is hereby granted, free of charge, to any person obtaining
@@ -30,6 +31,7 @@

#include "NodeManager.h"

+#include <Application.h>
#include <Autolock.h>
#include <Entry.h>
#include <MediaAddOn.h>
@@ -144,12 +146,13 @@ NodeManager::RescanDefaultNodes()
status_t
NodeManager::RegisterNode(media_addon_id addOnID, int32 flavorID,
const char* name, uint64 kinds, port_id port, team_id team,
- media_node_id* _nodeID)
+ media_node_id timesource, media_node_id* _nodeID)
{
BAutolock _(this);

registered_node node;
node.node_id = fNextNodeID;
+ node.timesource_id = timesource;
node.add_on_id = addOnID;
node.flavor_id = flavorID;
strlcpy(node.name, name, sizeof(node.name));
@@ -1092,6 +1095,24 @@ NodeManager::GetDormantFlavorInfoFor(media_addon_id
addOnID, int32 flavorID,
// #pragma mark - Misc.


+status_t
+NodeManager::SetNodeTimeSource(media_node_id node,
+ media_node_id timesource)
+{
+ BAutolock _(this);
+
+ NodeMap::iterator found = fNodeMap.find(node);
+ if (found == fNodeMap.end()) {
+ ERROR("NodeManager::SetNodeTimeSource: node %"
+ B_PRId32 " not found\n", node);
+ return B_ERROR;
+ }
+ registered_node& registeredNode = found->second;
+ registeredNode.timesource_id = timesource;
+ return B_OK;
+}
+
+
void
NodeManager::CleanupTeam(team_id team)
{
@@ -1120,6 +1141,8 @@ NodeManager::CleanupTeam(team_id team)
if (node.containing_team == team) {
PRINT(1, "NodeManager::CleanupTeam: removing node id %"
B_PRId32
", team %" B_PRId32 "\n", node.node_id, team);
+ // Ensure the slave node is removed from it's timesource
+ _NotifyTimeSource(node);
fNodeMap.erase(remove);

BPrivate::media::notifications::NodesDeleted(&node.node_id, 1);
continue;
@@ -1137,6 +1160,8 @@ NodeManager::CleanupTeam(team_id team)
PRINT(1, "NodeManager::CleanupTeam: removing
node id %"
B_PRId32 " that has no teams\n",
node.node_id);

+ // Ensure the slave node is removed from it's
timesource
+ _NotifyTimeSource(node);
fNodeMap.erase(remove);

BPrivate::media::notifications::NodesDeleted(&node.node_id, 1);
} else
@@ -1340,3 +1365,26 @@ NodeManager::_AcquireNodeReference(media_node_id id,
team_id team)
node.ref_count, node.team_ref_count.find(team)->second);
return B_OK;
}
+
+
+void
+NodeManager::_NotifyTimeSource(registered_node& node)
+{
+ team_id team = be_app->Team();
+ media_node timeSource;
+ // Ensure the timesource ensure still exists
+ if (GetCloneForID(node.timesource_id, team, &timeSource) != B_OK)
+ return;
+
+ media_node currentNode;
+ if (GetCloneForID(node.node_id, team,
+ &currentNode) == B_OK) {
+ timesource_remove_slave_node_command cmd;
+ cmd.node = currentNode;
+ // Notify slave node removal to owner timesource
+ SendToPort(timeSource.port, TIMESOURCE_REMOVE_SLAVE_NODE,
+ &cmd, sizeof(cmd));
+ ReleaseNode(timeSource, team);
+ }
+ ReleaseNode(currentNode, team);
+}
diff --git a/src/servers/media/NodeManager.h b/src/servers/media/NodeManager.h
index 83569ec..fab52e4 100644
--- a/src/servers/media/NodeManager.h
+++ b/src/servers/media/NodeManager.h
@@ -27,6 +27,7 @@ typedef std::vector<live_node_info> LiveNodeList;

struct registered_node {
media_node_id node_id;
+ media_node_id timesource_id;
media_addon_id add_on_id;
int32 flavor_id;
char name[B_MEDIA_NAME_LENGTH];
@@ -73,6 +74,7 @@ public:
status_t
RegisterNode(media_addon_id addOnID,
int32
flavorID, const char* name,
uint64
kinds, port_id port, team_id team,
+
media_node_id timesource,

media_node_id* _nodeID);
status_t
UnregisterNode(media_node_id nodeID,
team_id
team, media_addon_id* addOnID,
@@ -141,6 +143,9 @@ public:
int32
flavorID,

dormant_flavor_info* flavorInfo);

+ status_t
SetNodeTimeSource(media_node_id node,
+
media_node_id timesource);
+
void CleanupTeam(team_id
team);

status_t LoadState();
@@ -151,6 +156,7 @@ public:
private:
status_t
_AcquireNodeReference(media_node_id id,
team_id
team);
+ void
_NotifyTimeSource(registered_node& node);

private:
typedef std::map<media_addon_id, registered_node>
NodeMap;
diff --git a/src/servers/media/media_server.cpp
b/src/servers/media/media_server.cpp
index def5467..b7fdfc7 100644
--- a/src/servers/media/media_server.cpp
+++ b/src/servers/media/media_server.cpp
@@ -447,7 +447,7 @@ ServerApp::_HandleMessage(int32 code, const void* data,
size_t size)

status_t status =
gNodeManager->RegisterNode(request.add_on_id,
request.flavor_id, request.name, request.kinds,
request.port,
- request.team, &reply.node_id);
+ request.team, request.timesource_id,
&reply.node_id);
request.SendReply(status, &reply, sizeof(reply));
break;
}
@@ -580,6 +580,17 @@ ServerApp::_HandleMessage(int32 code, const void* data,
size_t size)
break;
}

+ case SERVER_SET_NODE_TIMESOURCE:
+ {
+ const server_set_node_timesource_request& request
+ = *static_cast<const
server_set_node_timesource_request*>(data);
+ server_set_node_timesource_reply reply;
+ status_t result =
gNodeManager->SetNodeTimeSource(request.node_id,
+ request.timesource_id);
+ request.SendReply(result, &reply, sizeof(reply));
+ break;
+ }
+
case SERVER_REGISTER_ADD_ON:
{
const server_register_add_on_request& request =
*static_cast<

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

Commit: 820864182214c88aa8406a1df80afd8594e12467
URL: http://cgit.haiku-os.org/haiku/commit/?id=820864182214
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Fri Apr 17 16:31:12 2015 UTC

media_addon_server: cleanup of MediaFilePlayer

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

diff --git a/src/servers/media_addon/MediaFilePlayer.cpp
b/src/servers/media_addon/MediaFilePlayer.cpp
index de872ea..9ce7818 100644
--- a/src/servers/media_addon/MediaFilePlayer.cpp
+++ b/src/servers/media_addon/MediaFilePlayer.cpp
@@ -4,34 +4,39 @@
* Distributed under the terms of the MIT License.
*/

-#include <MediaFiles.h>
+
#include "MediaFilePlayer.h"
-#include "ObjectList.h"

-#include <stdio.h>
+#include <MediaFiles.h>
+#include <ObjectList.h>
+
#include <stdlib.h>

+
BObjectList<MediaFilePlayer> list;

-MediaFilePlayer *
-FindMediaFilePlayer(MediaFilePlayer *player, void *media_name)
+
+MediaFilePlayer*
+FindMediaFilePlayer(MediaFilePlayer* player, void* media_name)
{
- if (!strcmp(player->Name(), (const char *)media_name))
+ if (strcmp(player->Name(), (const char*)media_name) == 0)
return player;
return NULL;
}


void
-PlayMediaFile(const char *media_type, const char *media_name)
+PlayMediaFile(const char* media_type, const char* media_name)
{
entry_ref ref;
- if (BMediaFiles().GetRefFor(media_type, media_name, &ref)!=B_OK
+ if (BMediaFiles().GetRefFor(media_type, media_name, &ref) != B_OK
|| !BEntry(&ref).Exists())
return;

- MediaFilePlayer *player = list.EachElement(FindMediaFilePlayer, (void
*)media_name);
- if (player) {
+ MediaFilePlayer* player = list.EachElement(FindMediaFilePlayer,
+ (void*)media_name);
+
+ if (player != NULL) {
if (*(player->Ref()) == ref) {
player->Restart();
return;
@@ -42,7 +47,7 @@ PlayMediaFile(const char *media_type, const char *media_name)
player = NULL;
}

- if (!player) {
+ if (player == NULL) {
player = new MediaFilePlayer(media_type, media_name, &ref);
if (player->InitCheck() == B_OK)
list.AddItem(player);
@@ -53,8 +58,9 @@ PlayMediaFile(const char *media_type, const char *media_name)



-MediaFilePlayer::MediaFilePlayer(const char *media_type,
- const char *media_name, entry_ref *ref) :
+MediaFilePlayer::MediaFilePlayer(const char* media_type,
+ const char* media_name, entry_ref* ref)
+ :
fInitCheck(B_ERROR),
fRef(*ref),
fSoundPlayer(NULL),
@@ -63,14 +69,14 @@ MediaFilePlayer::MediaFilePlayer(const char *media_type,
fName = strdup(media_name);

fPlayFile = new BMediaFile(&fRef);
- if ((fInitCheck = fPlayFile->InitCheck()) <B_OK) {
+ fInitCheck = fPlayFile->InitCheck();
+ if (fInitCheck != B_OK)
return;
- }

memset(&fPlayFormat, 0, sizeof(fPlayFormat));

for (int i=0; i < fPlayFile->CountTracks(); i++) {
- BMediaTrack *track = fPlayFile->TrackAt(i);
+ BMediaTrack* track = fPlayFile->TrackAt(i);
if (track == NULL)
continue;
fPlayFormat.type = B_MEDIA_RAW_AUDIO;
@@ -88,11 +94,12 @@ MediaFilePlayer::MediaFilePlayer(const char *media_type,
return;
}

- fSoundPlayer = new BSoundPlayer(&fPlayFormat.u.raw_audio, media_name,
PlayFunction,
- NULL, this);
- if ((fInitCheck = fSoundPlayer->InitCheck()) != B_OK) {
+ fSoundPlayer = new BSoundPlayer(&fPlayFormat.u.raw_audio,
+ media_name, PlayFunction, NULL, this);
+
+ fInitCheck = fSoundPlayer->InitCheck();
+ if (fInitCheck != B_OK)
return;
- }

fSoundPlayer->SetVolume(1.0f);
fSoundPlayer->SetHasData(true);
@@ -115,10 +122,24 @@ MediaFilePlayer::InitCheck()
}


+const char*
+MediaFilePlayer::Name()
+{
+ return fName;
+}
+
+
+const entry_ref*
+MediaFilePlayer::Ref()
+{
+ return &fRef;
+}
+
+
bool
MediaFilePlayer::IsPlaying()
{
- return (fSoundPlayer && fSoundPlayer->HasData());
+ return (fSoundPlayer != NULL && fSoundPlayer->HasData());
}

void
@@ -140,13 +161,13 @@ MediaFilePlayer::Stop()


void
-MediaFilePlayer::PlayFunction(void *cookie, void * buffer, size_t size, const
media_raw_audio_format & format)
+MediaFilePlayer::PlayFunction(void* cookie, void* buffer,
+ size_t size, const media_raw_audio_format& format)
{
- MediaFilePlayer *player = (MediaFilePlayer *)cookie;
+ MediaFilePlayer* player = (MediaFilePlayer*)cookie;
int64 frames = 0;
player->fPlayTrack->ReadFrames(buffer, &frames);

- if (frames <=0) {
+ if (frames <= 0)
player->fSoundPlayer->SetHasData(false);
- }
}
diff --git a/src/servers/media_addon/MediaFilePlayer.h
b/src/servers/media_addon/MediaFilePlayer.h
index 4c85458..508be95 100644
--- a/src/servers/media_addon/MediaFilePlayer.h
+++ b/src/servers/media_addon/MediaFilePlayer.h
@@ -5,41 +5,46 @@
#ifndef _MEDIA_FILE_PLAYER_H
#define _MEDIA_FILE_PLAYER_H

+
#include <Entry.h>
-#include <SoundPlayer.h>
+#include <MediaDefs.h>
#include <MediaFile.h>
#include <MediaTrack.h>
-#include <MediaDefs.h>
+#include <SoundPlayer.h>


-void PlayMediaFile(const char *media_type, const char *media_name);
+void PlayMediaFile(const char* media_type, const char* media_name);


class MediaFilePlayer
{
public:
- MediaFilePlayer(const char *media_type, const char *media_name,
- entry_ref *ref);
- ~MediaFilePlayer();
-
- bool IsPlaying();
- void Restart();
- void Stop();
- status_t InitCheck();
- const char *Name() { return fName; };
- const entry_ref *Ref() { return &fRef; };
-
- static void PlayFunction(void *cookie, void * buffer,
- size_t size, const media_raw_audio_format & format);
+ MediaFilePlayer(const
char* media_type,
+ const char*
media_name,
+ entry_ref* ref);
+ ~MediaFilePlayer();
+
+ status_t InitCheck();
+
+ bool IsPlaying();
+ void Restart();
+ void Stop();
+
+ const char* Name();
+ const entry_ref* Ref();
+
+ static void PlayFunction(void* cookie,
void* buffer,
+ size_t size,
+ const
media_raw_audio_format& format);

private:
- char *fName;
- status_t fInitCheck;
- entry_ref fRef;
- BSoundPlayer *fSoundPlayer;
- BMediaFile *fPlayFile;
- BMediaTrack *fPlayTrack;
- media_format fPlayFormat;
+ char* fName;
+ status_t fInitCheck;
+ entry_ref fRef;
+ BSoundPlayer* fSoundPlayer;
+ BMediaFile* fPlayFile;
+ BMediaTrack* fPlayTrack;
+ media_format fPlayFormat;
};

#endif // _MEDIA_FILE_PLAYER_H

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

Revision: hrev49384
Commit: 1363ef8d859de3956bcad53a2c9ef6430938fe89
URL: http://cgit.haiku-os.org/haiku/commit/?id=1363ef8d859d
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Wed Apr 1 22:55:49 2015 UTC

MediaFilePlayer: use BString for fName attribute

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

diff --git a/src/servers/media_addon/MediaFilePlayer.cpp
b/src/servers/media_addon/MediaFilePlayer.cpp
index 9ce7818..0b997e2 100644
--- a/src/servers/media_addon/MediaFilePlayer.cpp
+++ b/src/servers/media_addon/MediaFilePlayer.cpp
@@ -61,13 +61,12 @@ PlayMediaFile(const char* media_type, const char*
media_name)
MediaFilePlayer::MediaFilePlayer(const char* media_type,
const char* media_name, entry_ref* ref)
:
+ fName(media_name),
fInitCheck(B_ERROR),
fRef(*ref),
fSoundPlayer(NULL),
fPlayTrack(NULL)
{
- fName = strdup(media_name);
-
fPlayFile = new BMediaFile(&fRef);
fInitCheck = fPlayFile->InitCheck();
if (fInitCheck != B_OK)
@@ -111,7 +110,6 @@ MediaFilePlayer::~MediaFilePlayer()
{
delete fSoundPlayer;
delete fPlayFile;
- free(fName);
}


diff --git a/src/servers/media_addon/MediaFilePlayer.h
b/src/servers/media_addon/MediaFilePlayer.h
index 508be95..5ef0bb5 100644
--- a/src/servers/media_addon/MediaFilePlayer.h
+++ b/src/servers/media_addon/MediaFilePlayer.h
@@ -11,6 +11,7 @@
#include <MediaFile.h>
#include <MediaTrack.h>
#include <SoundPlayer.h>
+#include <String.h>


void PlayMediaFile(const char* media_type, const char* media_name);
@@ -38,7 +39,7 @@ public:
const
media_raw_audio_format& format);

private:
- char* fName;
+ BString fName;
status_t fInitCheck;
entry_ref fRef;
BSoundPlayer* fSoundPlayer;


Other related posts: