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

Commit 15c39964 authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru
Browse files

Revert "Add support for camera preview to be in overlay surfaces."

This reverts commit c35feb106e8ded282a261ae89075361ae5dc4214.
parent 6015dfc9
Loading
Loading
Loading
Loading
+17 −38
Original line number Diff line number Diff line
@@ -158,7 +158,6 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
    mCameraClient = cameraClient;
    mClientPid = clientPid;
    mHardware = openCameraHardware();
    mUseOverlay = mHardware->useOverlay();

    // Callback is disabled by default
    mFrameCallbackFlag = FRAME_CALLBACK_FLAG_NOOP;
@@ -234,7 +233,7 @@ CameraService::Client::~Client()
{
    // tear down client
    LOGD("Client E destructor");
    if (mSurface != 0 && !mUseOverlay) {
    if (mSurface != 0) {
#if HAVE_ANDROID_OS
        pthread_t thr;
        // We unregister the buffers in a different thread because binder does
@@ -289,7 +288,7 @@ status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface)
    Mutex::Autolock surfaceLock(mSurfaceLock);
    // asBinder() is safe on NULL (returns NULL)
    if (surface->asBinder() != mSurface->asBinder()) {
        if (mSurface != 0 && !mUseOverlay) {
        if (mSurface != 0) {
            LOGD("clearing old preview surface %p", mSurface.get());
            mSurface->unregisterBuffers();
        }
@@ -342,39 +341,17 @@ status_t CameraService::Client::startPreview()
#if DEBUG_DUMP_PREVIEW_FRAME_TO_FILE
    debug_frame_cnt = 0;
#endif
    status_t ret;
    if (mUseOverlay) {
        const char *format = params.getPreviewFormat();
        int fmt;
        LOGD("Use Overlays");
        if (!strcmp(format, "yuv422i"))
            fmt = OVERLAY_FORMAT_YCbCr_422_I;
        else if (!strcmp(format, "rgb565"))
            fmt = OVERLAY_FORMAT_RGB_565;
        else {
            LOGE("Invalid preview format for overlays");
            return -EINVAL;
        }
        sp<OverlayRef> ref = mSurface->createOverlay(w, h, fmt);
        ret = mHardware->setOverlay(new Overlay(ref));
        if (ret != NO_ERROR) {
            LOGE("mHardware->setOverlay() failed with status %d\n", ret);
            return ret;
        }
        ret = mHardware->startPreview(NULL, mCameraService.get());
        if (ret != NO_ERROR)
            LOGE("mHardware->startPreview() failed with status %d\n", ret);
    } else {
        LOGD("Don't use Overlays");
        ret = mHardware->startPreview(previewCallback,

    status_t ret = mHardware->startPreview(previewCallback,
                                           mCameraService.get());
    if (ret == NO_ERROR) {
        mSurface->unregisterBuffers();
            mSurface->registerBuffers(w, h, w, h, PIXEL_FORMAT_YCbCr_420_SP,
        mSurface->registerBuffers(w,h,w,h,
                                  PIXEL_FORMAT_YCbCr_420_SP,
                                  mHardware->getPreviewHeap());
    }
        else LOGE("mHardware->startPreview() failed with status %d\n", ret);
    }
    else LOGE("mHardware->startPreview() failed with status %d\n",
              ret);

    return ret;
}
@@ -395,7 +372,7 @@ void CameraService::Client::stopPreview()
    mHardware->stopPreview();
    LOGD("stopPreview(), hardware stopped OK");

    if (mSurface != 0 && !mUseOverlay) {
    if (mSurface != 0) {
        mSurface->unregisterBuffers();
    }
    mPreviewBuffer.clear();
@@ -543,7 +520,7 @@ status_t CameraService::Client::takePicture()
        return INVALID_OPERATION;
    }

    if (mSurface != NULL && !mUseOverlay)
    if (mSurface != NULL)
        mSurface->unregisterBuffers();

    return mHardware->takePicture(shutterCallback,
@@ -596,7 +573,7 @@ void CameraService::Client::yuvPictureCallback(const sp<IMemory>& mem,
    params.getPictureSize(&w, &h);

//  Mutex::Autolock clientLock(client->mLock);
    if (client->mSurface != 0 && !client->mUseOverlay) {
    if (client->mSurface != 0) {
        client->mSurface->unregisterBuffers();
        client->mSurface->registerBuffers(w,h,w,h,
                                          PIXEL_FORMAT_YCbCr_420_SP, heap);
@@ -903,3 +880,5 @@ status_t CameraService::onTransact(
#endif // DEBUG_HEAP_LEAKS

}; // namespace android

+0 −1
Original line number Diff line number Diff line
@@ -159,7 +159,6 @@ private:
                    sp<ICameraClient>           mCameraClient;
                    sp<CameraHardwareInterface> mHardware;
                    pid_t                       mClientPid;
                    bool                        mUseOverlay;
    };

// ----------------------------------------------------------------------------
+0 −6
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@
#include <utils/IMemory.h>
#include <utils/RefBase.h>
#include <ui/CameraParameters.h>
#include <ui/Overlay.h>

namespace android {

@@ -90,11 +89,6 @@ public:
     * call back parameter may be null.
     */
    virtual status_t    startPreview(preview_callback cb, void* user) = 0;
    /**
     * Only used if overlays are used for camera preview.
     */
    virtual bool useOverlay() {return false;}
    virtual status_t setOverlay(const sp<Overlay> &overlay) {return BAD_VALUE;}

    /**
     * Stop a previously started preview.