11900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen/*
21900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen**
31900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** Copyright 2015, The Android Open Source Project
41900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen**
51900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** Licensed under the Apache License, Version 2.0 (the "License");
61900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** you may not use this file except in compliance with the License.
71900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** You may obtain a copy of the License at
81900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen**
91900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen**     http://www.apache.org/licenses/LICENSE-2.0
101900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen**
111900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** Unless required by applicable law or agreed to in writing, software
121900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** distributed under the License is distributed on an "AS IS" BASIS,
131900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
141900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** See the License for the specific language governing permissions and
151900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen** limitations under the License.
161900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen*/
171900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
181900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#define LOG_TAG "IMediaCodecService"
191900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen//#define LOG_NDEBUG 0
201900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
211900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#include <utils/Log.h>
221900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#include <stdint.h>
231900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#include <sys/types.h>
241900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#include <binder/Parcel.h>
251900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen#include <media/IMediaCodecService.h>
261900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
271900e77bac4276f247f80fd06d19316cac598f57Marco Nelissennamespace android {
281900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
291900e77bac4276f247f80fd06d19316cac598f57Marco Nelissenenum {
301900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    GET_OMX = IBinder::FIRST_CALL_TRANSACTION
311900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen};
321900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
331900e77bac4276f247f80fd06d19316cac598f57Marco Nelissenclass BpMediaCodecService : public BpInterface<IMediaCodecService>
341900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen{
351900e77bac4276f247f80fd06d19316cac598f57Marco Nelissenpublic:
3664a2870d8515fd914638c60803db86dbd92f5b06Chih-Hung Hsieh    explicit BpMediaCodecService(const sp<IBinder>& impl)
371900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        : BpInterface<IMediaCodecService>(impl)
381900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    {
391900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    }
401900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
411900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    virtual sp<IOMX> getOMX() {
421900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        Parcel data, reply;
431900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        data.writeInterfaceToken(IMediaCodecService::getInterfaceDescriptor());
441900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        remote()->transact(GET_OMX, data, &reply);
451900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        return interface_cast<IOMX>(reply.readStrongBinder());
461900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    }
471900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
481900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen};
491900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
501900e77bac4276f247f80fd06d19316cac598f57Marco NelissenIMPLEMENT_META_INTERFACE(MediaCodecService, "android.media.IMediaCodecService");
511900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
521900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen// ----------------------------------------------------------------------
531900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
541900e77bac4276f247f80fd06d19316cac598f57Marco Nelissenstatus_t BnMediaCodecService::onTransact(
551900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
561900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen{
571900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    switch (code) {
581900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
591900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        case GET_OMX: {
601900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen            CHECK_INTERFACE(IMediaCodecService, data, reply);
611900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen            sp<IOMX> omx = getOMX();
621900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen            reply->writeStrongBinder(IInterface::asBinder(omx));
631900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen            return NO_ERROR;
641900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        }
651900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen        default:
661900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen            return BBinder::onTransact(code, data, reply, flags);
671900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen    }
681900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen}
691900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
701900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen// ----------------------------------------------------------------------------
711900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen
721900e77bac4276f247f80fd06d19316cac598f57Marco Nelissen} // namespace android
73