* Implemented getting/setting the audio gain of media files.

* Renamed "remove_ref_for" command structures and constants to
  "invalidate_item".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34565 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2009-12-08 19:56:04 +00:00
parent e3745f7643
commit c28dd9fdc3
3 changed files with 91 additions and 17 deletions

View File

@ -139,8 +139,10 @@ enum {
SERVER_GET_MEDIA_FILE_ITEMS,
SERVER_GET_REF_FOR,
SERVER_SET_REF_FOR,
SERVER_REMOVE_REF_FOR,
SERVER_INVALIDATE_MEDIA_ITEM,
SERVER_REMOVE_MEDIA_ITEM,
SERVER_GET_ITEM_AUDIO_GAIN,
SERVER_SET_ITEM_AUDIO_GAIN,
SERVER_GET_FORMAT_FOR_DESCRIPTION,
SERVER_GET_DESCRIPTION_FOR_FORMAT,
SERVER_GET_READERS,
@ -800,12 +802,12 @@ struct server_set_ref_for_request : request_data {
struct server_set_ref_for_reply : reply_data {
};
struct server_remove_ref_for_request : request_data {
struct server_invalidate_item_request : request_data {
char type[B_MEDIA_NAME_LENGTH];
char item[B_MEDIA_NAME_LENGTH];
};
struct server_remove_ref_for_reply : reply_data {
struct server_invalidate_item_reply : reply_data {
};
struct server_remove_media_item_request : request_data {
@ -816,6 +818,24 @@ struct server_remove_media_item_request : request_data {
struct server_remove_media_item_reply : reply_data {
};
struct server_get_item_audio_gain_request : request_data {
char type[B_MEDIA_NAME_LENGTH];
char item[B_MEDIA_NAME_LENGTH];
};
struct server_get_item_audio_gain_reply : reply_data {
float gain;
};
struct server_set_item_audio_gain_request : request_data {
char type[B_MEDIA_NAME_LENGTH];
char item[B_MEDIA_NAME_LENGTH];
float gain;
};
struct server_set_item_audio_gain_reply : reply_data {
};
struct server_get_decoder_for_format_request : request_data {
media_format format;
};

View File

@ -162,11 +162,26 @@ BMediaFiles::GetRefFor(const char* type, const char* item, entry_ref* _ref)
status_t
BMediaFiles::GetAudioGainFor(const char* type, const char* item,
float* _audioGain)
BMediaFiles::GetAudioGainFor(const char* type, const char* item, float* _gain)
{
UNIMPLEMENTED();
*_audioGain = 1.0f;
CALLED();
if (type == NULL || item == NULL || _gain == NULL)
return B_BAD_VALUE;
server_get_item_audio_gain_request request;
strncpy(request.type, type, B_MEDIA_NAME_LENGTH);
strncpy(request.item, item, B_MEDIA_NAME_LENGTH);
server_get_item_audio_gain_reply reply;
status_t status = QueryServer(SERVER_GET_ITEM_AUDIO_GAIN, &request,
sizeof(request), &reply, sizeof(reply));
if (status != B_OK) {
ERROR("BMediaFiles::GetRefFor: failed: %s\n", strerror(status));
return status;
}
*_gain = reply.gain;
return B_OK;
}
@ -195,10 +210,23 @@ BMediaFiles::SetRefFor(const char* type, const char* item,
status_t
BMediaFiles::SetAudioGainFor(const char* type, const char* item,
float audioGain)
BMediaFiles::SetAudioGainFor(const char* type, const char* item, float gain)
{
UNIMPLEMENTED();
CALLED();
server_set_item_audio_gain_request request;
strncpy(request.type, type, B_MEDIA_NAME_LENGTH);
strncpy(request.item, item, B_MEDIA_NAME_LENGTH);
request.gain = gain;
server_set_item_audio_gain_reply reply;
status_t status = QueryServer(SERVER_SET_ITEM_AUDIO_GAIN, &request,
sizeof(request), &reply, sizeof(reply));
if (status != B_OK) {
ERROR("BMediaFiles::SetAudioGainFor: failed: %s\n", strerror(status));
return status;
}
return B_OK;
}
@ -209,12 +237,12 @@ BMediaFiles::RemoveRefFor(const char* type, const char* item,
{
CALLED();
server_remove_ref_for_request request;
server_invalidate_item_request request;
strncpy(request.type, type, B_MEDIA_NAME_LENGTH);
strncpy(request.item, item, B_MEDIA_NAME_LENGTH);
server_remove_ref_for_reply reply;
status_t status = QueryServer(SERVER_REMOVE_REF_FOR, &request,
server_invalidate_item_reply reply;
status_t status = QueryServer(SERVER_INVALIDATE_MEDIA_ITEM, &request,
sizeof(request), &reply, sizeof(reply));
if (status != B_OK) {
ERROR("BMediaFiles::RemoveRefFor: failed: %s\n", strerror(status));

View File

@ -804,11 +804,11 @@ ServerApp::_HandleMessage(int32 code, void* data, size_t size)
break;
}
case SERVER_REMOVE_REF_FOR:
case SERVER_INVALIDATE_MEDIA_ITEM:
{
const server_remove_ref_for_request* request
= reinterpret_cast<const server_remove_ref_for_request*>(data);
server_remove_ref_for_reply reply;
const server_invalidate_item_request* request
= reinterpret_cast<const server_invalidate_item_request*>(data);
server_invalidate_item_reply reply;
status_t status = gMediaFilesManager->InvalidateItem(
request->type, request->item);
@ -829,6 +829,32 @@ ServerApp::_HandleMessage(int32 code, void* data, size_t size)
break;
}
case SERVER_GET_ITEM_AUDIO_GAIN:
{
const server_get_item_audio_gain_request& request
= *reinterpret_cast<const server_get_item_audio_gain_request*>(
data);
server_get_item_audio_gain_reply reply;
status_t status = gMediaFilesManager->GetAudioGainFor(request.type,
request.item, &reply.gain);
request.SendReply(status, &reply, sizeof(reply));
break;
}
case SERVER_SET_ITEM_AUDIO_GAIN:
{
const server_set_item_audio_gain_request& request
= *reinterpret_cast<const server_set_item_audio_gain_request*>(
data);
server_set_ref_for_reply reply;
status_t status = gMediaFilesManager->SetAudioGainFor(request.type,
request.item, request.gain);
request.SendReply(status, &reply, sizeof(reply));
break;
}
case SERVER_GET_READERS:
{
const server_get_readers_request *request