[haiku-commits] r34565 - in haiku/trunk: headers/private/media src/kits/media src/servers/media

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 8 Dec 2009 20:56:04 +0100 (CET)

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


Other related posts:

  • » [haiku-commits] r34565 - in haiku/trunk: headers/private/media src/kits/media src/servers/media - axeld