Camera AIDL - BpCamera,AIDL

来源:互联网 发布:java和net就业前景 编辑:程序博客网 时间:2024/06/06 15:40

  1. frameworks/base/core/java/android/hardware/ICamera.aidl
/** @hide */interface ICamera{    /**     * Keep up-to-date with frameworks/av/include/camera/ICamera.h     */    void disconnect();}
  1. icamera 接口 实现,BpCamera 继承 ICamera 转成BpInterface 的接口类.
    frameworks/av/camera/ICamera.cpp
class BpCamera: public BpInterface<ICamera>{public:    BpCamera(const sp<IBinder>& impl)        : BpInterface<ICamera>(impl)    {    }    // disconnect from camera service    void disconnect()    {        ALOGV("disconnect");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(DISCONNECT, data, &reply);        reply.readExceptionCode();    }    // pass the buffered IGraphicBufferProducer to the camera service    status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer)    {        ALOGV("setPreviewTarget");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        sp<IBinder> b(bufferProducer->asBinder());        data.writeStrongBinder(b);        remote()->transact(SET_PREVIEW_TARGET, data, &reply);        return reply.readInt32();    }    // set the preview callback flag to affect how the received frames from    // preview are handled. See Camera.h for details.    void setPreviewCallbackFlag(int flag)    {        ALOGV("setPreviewCallbackFlag(%d)", flag);        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeInt32(flag);        remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply);    }    status_t setPreviewCallbackTarget(            const sp<IGraphicBufferProducer>& callbackProducer)    {        ALOGV("setPreviewCallbackTarget");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        sp<IBinder> b(callbackProducer->asBinder());        data.writeStrongBinder(b);        remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply);        return reply.readInt32();    }    // start preview mode, must call setPreviewTarget first    status_t startPreview()    {        ALOGV("startPreview");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(START_PREVIEW, data, &reply);        return reply.readInt32();    }    // start recording mode, must call setPreviewTarget first    status_t startRecording()    {        ALOGV("startRecording");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(START_RECORDING, data, &reply);        return reply.readInt32();    }    // stop preview mode    void stopPreview()    {        ALOGV("stopPreview");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(STOP_PREVIEW, data, &reply);    }    // stop recording mode    void stopRecording()    {        ALOGV("stopRecording");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(STOP_RECORDING, data, &reply);    }    void releaseRecordingFrame(const sp<IMemory>& mem)    {        ALOGV("releaseRecordingFrame");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeStrongBinder(mem->asBinder());        remote()->transact(RELEASE_RECORDING_FRAME, data, &reply);    }    status_t storeMetaDataInBuffers(bool enabled)    {        ALOGV("storeMetaDataInBuffers: %s", enabled? "true": "false");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeInt32(enabled);        remote()->transact(STORE_META_DATA_IN_BUFFERS, data, &reply);        return reply.readInt32();    }    // check preview state    bool previewEnabled()    {        ALOGV("previewEnabled");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(PREVIEW_ENABLED, data, &reply);        return reply.readInt32();    }    // check recording state    bool recordingEnabled()    {        ALOGV("recordingEnabled");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(RECORDING_ENABLED, data, &reply);        return reply.readInt32();    }    // auto focus    status_t autoFocus()    {        ALOGV("autoFocus");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(AUTO_FOCUS, data, &reply);        status_t ret = reply.readInt32();        return ret;    }    // cancel focus    status_t cancelAutoFocus()    {        ALOGV("cancelAutoFocus");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(CANCEL_AUTO_FOCUS, data, &reply);        status_t ret = reply.readInt32();        return ret;    }    // take a picture - returns an IMemory (ref-counted mmap)    status_t takePicture(int msgType)    {        ALOGV("takePicture: 0x%x", msgType);        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeInt32(msgType);        remote()->transact(TAKE_PICTURE, data, &reply);        status_t ret = reply.readInt32();        return ret;    }    // set preview/capture parameters - key/value pairs    status_t setParameters(const String8& params)    {        ALOGV("setParameters");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeString8(params);        remote()->transact(SET_PARAMETERS, data, &reply);        return reply.readInt32();    }    // get preview/capture parameters - key/value pairs    String8 getParameters() const    {        ALOGV("getParameters");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(GET_PARAMETERS, data, &reply);        return reply.readString8();    }    virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2)    {        ALOGV("sendCommand");        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeInt32(cmd);        data.writeInt32(arg1);        data.writeInt32(arg2);        remote()->transact(SEND_COMMAND, data, &reply);        return reply.readInt32();    }    virtual status_t connect(const sp<ICameraClient>& cameraClient)    {        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        data.writeStrongBinder(cameraClient->asBinder());        remote()->transact(CONNECT, data, &reply);        return reply.readInt32();    }    virtual status_t lock()    {        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(LOCK, data, &reply);        return reply.readInt32();    }    virtual status_t unlock()    {        Parcel data, reply;        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());        remote()->transact(UNLOCK, data, &reply);        return reply.readInt32();    }}
0 0
原创粉丝点击