Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca0ff170 authored by Carlos Martinez Romero's avatar Carlos Martinez Romero
Browse files

Remove some usage of IGBPs in the ICamera.

This change removes the usage of IGBPs in ICamera and the surrounding
code where reasonable. This is part of a refactor outline at go/warren-buffers.

BYPASS_IGBP_IGBC_API_REASON: this CL is part of the migration.
Bug: 342197849
Test: atest android.hardware.cts.CameraTest
Flag: com.android.graphics.libgui.flags.wb_libcameraservice

Change-Id: I06fbf42e6a249f3b30266ac5b3dad0bdbc4f585a
parent aa7d9130
Loading
Loading
Loading
Loading
+14 −18
Original line number Diff line number Diff line
@@ -99,23 +99,21 @@ status_t Camera::unlock()
    return c->unlock();
}

// pass the buffered IGraphicBufferProducer to the camera service
status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer)
{
    ALOGV("setPreviewTarget(%p)", bufferProducer.get());
// pass the Surface to the camera service
status_t Camera::setPreviewTarget(const sp<SurfaceType>& target) {
    ALOGV("setPreviewTarget(%p)", target.get());
    sp<::android::hardware::ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    ALOGD_IF(bufferProducer == 0, "app passed NULL surface");
    return c->setPreviewTarget(bufferProducer);
    ALOGD_IF(target == 0, "app passed NULL surface");
    return c->setPreviewTarget(target);
}

status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer)
{
    ALOGV("setVideoTarget(%p)", bufferProducer.get());
status_t Camera::setVideoTarget(const sp<SurfaceType>& target) {
    ALOGV("setVideoTarget(%p)", target.get());
    sp<::android::hardware::ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    ALOGD_IF(bufferProducer == 0, "app passed NULL video surface");
    return c->setVideoTarget(bufferProducer);
    ALOGD_IF(target == 0, "app passed NULL video surface");
    return c->setVideoTarget(target);
}

// start preview mode
@@ -272,12 +270,10 @@ void Camera::setPreviewCallbackFlags(int flag)
    c->setPreviewCallbackFlag(flag);
}

status_t Camera::setPreviewCallbackTarget(
        const sp<IGraphicBufferProducer>& callbackProducer)
{
status_t Camera::setPreviewCallbackTarget(const sp<SurfaceType>& target) {
    sp<::android::hardware::ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    return c->setPreviewCallbackTarget(callbackProducer);
    return c->setPreviewCallbackTarget(target);
}

status_t Camera::setAudioRestriction(int32_t mode)
+88 −17
Original line number Diff line number Diff line
@@ -17,16 +17,16 @@

//#define LOG_NDEBUG 0
#define LOG_TAG "ICamera"
#include <utils/Log.h>
#include <stdint.h>
#include <sys/types.h>
#include <binder/Parcel.h>
#include <camera/CameraUtils.h>
#include <android/hardware/ICamera.h>
#include <android/hardware/ICameraClient.h>
#include <gui/IGraphicBufferProducer.h>
#include <binder/Parcel.h>
#include <camera/CameraUtils.h>
#include <gui/Surface.h>
#include <gui/view/Surface.h>
#include <media/hardware/HardwareAPI.h>
#include <stdint.h>
#include <sys/types.h>
#include <utils/Log.h>

namespace android {
namespace hardware {
@@ -34,8 +34,14 @@ namespace hardware {
enum {
    DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
    SET_PREVIEW_TARGET,
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    SET_PREVIEW_TARGET_SURFACE,
#endif
    SET_PREVIEW_CALLBACK_FLAG,
    SET_PREVIEW_CALLBACK_TARGET,
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    SET_PREVIEW_CALLBACK_TARGET_SURFACE,
#endif
    START_PREVIEW,
    STOP_PREVIEW,
    AUTO_FOCUS,
@@ -54,6 +60,9 @@ enum {
    RELEASE_RECORDING_FRAME,
    SET_VIDEO_BUFFER_MODE,
    SET_VIDEO_BUFFER_TARGET,
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    SET_VIDEO_BUFFER_TARGET_SURFACE,
#endif
    RELEASE_RECORDING_FRAME_HANDLE,
    RELEASE_RECORDING_FRAME_HANDLE_BATCH,
    SET_AUDIO_RESTRICTION,
@@ -79,15 +88,20 @@ public:
        return binder::Status::ok();
    }

    // pass the buffered IGraphicBufferProducer to the camera service
    status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer)
    {
    // pass the Surface to the camera service
    status_t setPreviewTarget(const sp<SurfaceType>& target) {
        ALOGV("setPreviewTarget");
        Parcel data, reply;
        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
        sp<IBinder> b(IInterface::asBinder(bufferProducer));
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        view::Surface viewSurfaceProducer = view::Surface::fromSurface(target);
        data.writeParcelable(viewSurfaceProducer);
        remote()->transact(SET_PREVIEW_TARGET_SURFACE, data, &reply);
#else
        sp<IBinder> b(IInterface::asBinder(target));
        data.writeStrongBinder(b);
        remote()->transact(SET_PREVIEW_TARGET, data, &reply);
#endif
        return reply.readInt32();
    }

@@ -102,15 +116,19 @@ public:
        remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply);
    }

    status_t setPreviewCallbackTarget(
            const sp<IGraphicBufferProducer>& callbackProducer)
    {
    status_t setPreviewCallbackTarget(const sp<SurfaceType>& target) {
        ALOGV("setPreviewCallbackTarget");
        Parcel data, reply;
        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
        sp<IBinder> b(IInterface::asBinder(callbackProducer));
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        view::Surface viewCallbackProducer = view::Surface::fromSurface(target);
        data.writeParcelable(viewCallbackProducer);
        remote()->transact(SET_PREVIEW_CALLBACK_TARGET_SURFACE, data, &reply);
#else
        sp<IBinder> b(IInterface::asBinder(target));
        data.writeStrongBinder(b);
        remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply);
#endif
        return reply.readInt32();
    }

@@ -326,14 +344,19 @@ public:
        return reply.readInt32();
    }

    status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer)
    {
    status_t setVideoTarget(const sp<SurfaceType>& target) {
        ALOGV("setVideoTarget");
        Parcel data, reply;
        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
        sp<IBinder> b(IInterface::asBinder(bufferProducer));
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        view::Surface viewSurfaceProducer = view::Surface::fromSurface(target);
        data.writeParcelable(viewSurfaceProducer);
        remote()->transact(SET_VIDEO_BUFFER_TARGET_SURFACE, data, &reply);
#else
        sp<IBinder> b(IInterface::asBinder(target));
        data.writeStrongBinder(b);
        remote()->transact(SET_VIDEO_BUFFER_TARGET, data, &reply);
#endif
        return reply.readInt32();
    }
};
@@ -358,9 +381,25 @@ status_t BnCamera::onTransact(
            CHECK_INTERFACE(ICamera, data, reply);
            sp<IGraphicBufferProducer> st =
                interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
            sp<Surface> sp = new Surface(st);
            reply->writeInt32(setPreviewTarget(sp));
#else
            reply->writeInt32(setPreviewTarget(st));
#endif
            return NO_ERROR;
        } break;
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        case SET_PREVIEW_TARGET_SURFACE: {
            ALOGV("SET_PREVIEW_TARGET_SURFACE");
            CHECK_INTERFACE(ICamera, data, reply);
            view::Surface viewSurface;
            data.readParcelable(&viewSurface);
            sp<Surface> st = viewSurface.toSurface();
            reply->writeInt32(setPreviewTarget(st));
            return NO_ERROR;
        } break;
#endif
        case SET_PREVIEW_CALLBACK_FLAG: {
            ALOGV("SET_PREVIEW_CALLBACK_TYPE");
            CHECK_INTERFACE(ICamera, data, reply);
@@ -373,9 +412,25 @@ status_t BnCamera::onTransact(
            CHECK_INTERFACE(ICamera, data, reply);
            sp<IGraphicBufferProducer> cp =
                interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
            sp<Surface> sp = new Surface(cp);
            reply->writeInt32(setPreviewCallbackTarget(sp));
#else
            reply->writeInt32(setPreviewCallbackTarget(cp));
#endif
            return NO_ERROR;
        }
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        case SET_PREVIEW_CALLBACK_TARGET_SURFACE: {
            ALOGV("SET_PREVIEW_CALLBACK_TARGET_SURFACE");
            CHECK_INTERFACE(ICamera, data, reply);
            view::Surface viewSurface;
            data.readParcelable(&viewSurface);
            sp<Surface> cp = viewSurface.toSurface();
            reply->writeInt32(setPreviewCallbackTarget(cp));
            return NO_ERROR;
        }
#endif
        case START_PREVIEW: {
            ALOGV("START_PREVIEW");
            CHECK_INTERFACE(ICamera, data, reply);
@@ -508,9 +563,25 @@ status_t BnCamera::onTransact(
            CHECK_INTERFACE(ICamera, data, reply);
            sp<IGraphicBufferProducer> st =
                interface_cast<IGraphicBufferProducer>(data.readStrongBinder());
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
            sp<Surface> sp = new Surface(st);
            reply->writeInt32(setVideoTarget(sp));
#else
            reply->writeInt32(setVideoTarget(st));
#endif
            return NO_ERROR;
        } break;
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
        case SET_VIDEO_BUFFER_TARGET_SURFACE: {
            ALOGV("SET_VIDEO_BUFFER_TARGET_SURFACE");
            CHECK_INTERFACE(ICamera, data, reply);
            view::Surface viewSurface;
            data.readParcelable(&viewSurface);
            sp<Surface> cp = viewSurface.toSurface();
            reply->writeInt32(setVideoTarget(cp));
            return NO_ERROR;
        } break;
#endif
        case SET_AUDIO_RESTRICTION: {
            CHECK_INTERFACE(ICamera, data, reply);
            int32_t mode = data.readInt32();
+13 −9
Original line number Diff line number Diff line
@@ -21,13 +21,18 @@

#include <android/hardware/ICameraService.h>

#include <gui/IGraphicBufferProducer.h>
#include <system/camera.h>
#include <camera/CameraBase.h>
#include <camera/CameraUtils.h>
#include <camera/ICameraRecordingProxy.h>
#include <camera/android/hardware/ICamera.h>
#include <camera/android/hardware/ICameraClient.h>
#include <camera/CameraBase.h>
#include <camera/CameraUtils.h>
#include <gui/Flags.h>
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
#include <gui/Surface.h>
#else
#include <gui/IGraphicBufferProducer.h>
#endif
#include <system/camera.h>

namespace android {

@@ -91,8 +96,8 @@ public:
            status_t    lock();
            status_t    unlock();

            // pass the buffered IGraphicBufferProducer to the camera service
            status_t    setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer);
            // pass the SurfaceType to the camera service
            status_t    setPreviewTarget(const sp<SurfaceType>& target);

            // start preview mode, must call setPreviewTarget first
            status_t    startPreview();
@@ -148,7 +153,7 @@ public:

            // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE
            // mode.
            status_t    setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer);
            status_t    setVideoTarget(const sp<SurfaceType>& target);

            void        setListener(const sp<CameraListener>& listener);

@@ -158,8 +163,7 @@ public:
            // disabled by calling it with CAMERA_FRAME_CALLBACK_FLAG_NOOP, and
            // Target by calling it with a NULL interface.
            void        setPreviewCallbackFlags(int preview_callback_flag);
            status_t    setPreviewCallbackTarget(
                    const sp<IGraphicBufferProducer>& callbackProducer);
            status_t    setPreviewCallbackTarget(const sp<SurfaceType>& target);

            sp<ICameraRecordingProxy> getRecordingProxy();

+5 −7
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <binder/Parcel.h>
#include <binder/IMemory.h>
#include <binder/Status.h>
#include <gui/Flags.h>
#include <utils/String8.h>

namespace android {
@@ -61,9 +62,8 @@ public:
    // allow other processes to use this ICamera interface
    virtual status_t        unlock() = 0;

    // pass the buffered IGraphicBufferProducer to the camera service
    virtual status_t        setPreviewTarget(
            const sp<IGraphicBufferProducer>& bufferProducer) = 0;
    // pass the SurfaceType to the camera service
    virtual status_t        setPreviewTarget(const sp<SurfaceType>& bufferProducer) = 0;

    // set the preview callback flag to affect how the received frames from
    // preview are handled. Enabling preview callback flags disables any active
@@ -73,8 +73,7 @@ public:
    // of preview callback buffers. Passing a valid interface here disables any
    // active preview callbacks set by setPreviewCallbackFlag(). Passing NULL
    // disables the use of the callback target.
    virtual status_t        setPreviewCallbackTarget(
            const sp<IGraphicBufferProducer>& callbackProducer) = 0;
    virtual status_t        setPreviewCallbackTarget(const sp<SurfaceType>& callbackProducer) = 0;

    // start preview mode, must call setPreviewTarget first
    virtual status_t        startPreview() = 0;
@@ -138,8 +137,7 @@ public:
    virtual status_t        setVideoBufferMode(int32_t videoBufferMode) = 0;

    // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode.
    virtual status_t        setVideoTarget(
            const sp<IGraphicBufferProducer>& bufferProducer) = 0;
    virtual status_t        setVideoTarget(const sp<SurfaceType>& bufferProducer) = 0;

    // Set the audio restriction mode
    virtual status_t        setAudioRestriction(int32_t mode) = 0;
+13 −9
Original line number Diff line number Diff line
@@ -20,17 +20,18 @@
#include <gtest/gtest.h>

#include <android/content/AttributionSourceState.h>
#include <android/hardware/ICameraService.h>
#include <binder/ProcessState.h>
#include <utils/Errors.h>
#include <utils/Log.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <camera/CameraParameters.h>
#include <camera/CameraMetadata.h>
#include <camera/Camera.h>
#include <camera/CameraMetadata.h>
#include <camera/CameraParameters.h>
#include <camera/CameraUtils.h>
#include <camera/StringUtils.h>
#include <android/hardware/ICameraService.h>
#include <gui/Flags.h>
#include <gui/Surface.h>
#include <gui/SurfaceComposerClient.h>
#include <utils/Errors.h>
#include <utils/Log.h>

using namespace android;
using namespace android::hardware;
@@ -276,8 +277,11 @@ TEST_F(CameraZSLTests, TestAllPictureSizes) {

        previewSurface = surfaceControl->getSurface();
        ASSERT_TRUE(previewSurface != NULL);
        ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget(
                previewSurface->getIGraphicBufferProducer()));
        ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget(previewSurface
#if !WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
                                                                   ->getIGraphicBufferProducer()
#endif
                                                                   ));

        cameraDevice->setPreviewCallbackFlag(
                CAMERA_FRAME_CALLBACK_FLAG_CAMCORDER);
Loading