content/media/omx/mediaresourcemanager/IMediaResourceManagerService.cpp

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
     3 /* This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
     5  * You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 //#define LOG_NDEBUG 0
     8 #define LOG_TAG "IMediaResourceManagerService"
    10 #include <stdint.h>
    11 #include <sys/types.h>
    13 #include <binder/Parcel.h>
    14 #include <utils/Log.h>
    16 #include "IMediaResourceManagerService.h"
    18 namespace android {
    20 /**
    21  * Function ID used between BpMediaResourceManagerService and 
    22  *  BnMediaResourceManagerService by using Binder ipc.
    23  */
    24 enum {
    25     REQUEST_MEDIA_RESOURCE = IBinder::FIRST_CALL_TRANSACTION,
    26     DEREGISTER_CLIENT
    27 };
    29 class BpMediaResourceManagerService : public BpInterface<IMediaResourceManagerService>
    30 {
    31 public:
    32     BpMediaResourceManagerService(const sp<IBinder>& impl)
    33         : BpInterface<IMediaResourceManagerService>(impl)
    34     {
    35     }
    37     virtual void requestMediaResource(const sp<IMediaResourceManagerClient>& client, int resourceType)
    38     {
    39         Parcel data, reply;
    40         data.writeInterfaceToken(IMediaResourceManagerService::getInterfaceDescriptor());
    41         data.writeStrongBinder(client->asBinder());
    42         data.writeInt32(resourceType);
    43         remote()->transact(REQUEST_MEDIA_RESOURCE, data, &reply);
    44     }
    46     virtual status_t cancelClient(const sp<IMediaResourceManagerClient>& client)
    47     {
    48         Parcel data, reply;
    49         data.writeInterfaceToken(IMediaResourceManagerService::getInterfaceDescriptor());
    50         data.writeStrongBinder(client->asBinder());
    51         remote()->transact(DEREGISTER_CLIENT, data, &reply);
    52         return reply.readInt32();
    53     }
    54 };
    56 IMPLEMENT_META_INTERFACE(MediaResourceManagerService, "android.media.IMediaResourceManagerService");
    58 // ----------------------------------------------------------------------
    60 status_t BnMediaResourceManagerService::onTransact(
    61     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
    62 {
    63     switch(code) {
    65         case REQUEST_MEDIA_RESOURCE: {
    66             CHECK_INTERFACE(IMediaResourceManagerService, data, reply);
    67             sp<IMediaResourceManagerClient> client = interface_cast<IMediaResourceManagerClient>(data.readStrongBinder());
    68             int resourceType = data.readInt32();
    69             requestMediaResource(client, resourceType);
    70             return NO_ERROR;
    71         } break;
    72         case DEREGISTER_CLIENT: {
    73             CHECK_INTERFACE(IMediaResourceManagerService, data, reply);
    74             sp<IMediaResourceManagerClient> client = interface_cast<IMediaResourceManagerClient>(data.readStrongBinder());
    75             cancelClient(client);
    76             reply->writeInt32(NO_ERROR);
    77             return NO_ERROR;
    78         } break;
    79         default:
    80             return BBinder::onTransact(code, data, reply, flags);
    81     }
    82 }
    84 // ----------------------------------------------------------------------------
    86 }; // namespace android

mercurial