Author: axeld Date: 2009-12-08 20:56:04 +0100 (Tue, 08 Dec 2009) New Revision: 34565 Changeset: http://dev.haiku-os.org/changeset/34565/haiku Modified: haiku/trunk/headers/private/media/DataExchange.h haiku/trunk/src/kits/media/MediaFiles.cpp haiku/trunk/src/servers/media/media_server.cpp Log: * Implemented getting/setting the audio gain of media files. * Renamed "remove_ref_for" command structures and constants to "invalidate_item". Modified: haiku/trunk/headers/private/media/DataExchange.h =================================================================== --- haiku/trunk/headers/private/media/DataExchange.h 2009-12-08 18:49:54 UTC (rev 34564) +++ haiku/trunk/headers/private/media/DataExchange.h 2009-12-08 19:56:04 UTC (rev 34565) @@ -139,8 +139,10 @@ 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_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_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; }; Modified: haiku/trunk/src/kits/media/MediaFiles.cpp =================================================================== --- haiku/trunk/src/kits/media/MediaFiles.cpp 2009-12-08 18:49:54 UTC (rev 34564) +++ haiku/trunk/src/kits/media/MediaFiles.cpp 2009-12-08 19:56:04 UTC (rev 34565) @@ -162,11 +162,26 @@ 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 @@ 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 @@ { 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)); Modified: haiku/trunk/src/servers/media/media_server.cpp =================================================================== --- haiku/trunk/src/servers/media/media_server.cpp 2009-12-08 18:49:54 UTC (rev 34564) +++ haiku/trunk/src/servers/media/media_server.cpp 2009-12-08 19:56:04 UTC (rev 34565) @@ -804,11 +804,11 @@ 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 @@ 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