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

Commit 191a25e1 authored by Wu-cheng Li's avatar Wu-cheng Li Committed by Android Git Automerger
Browse files

am 83ea6389: Merge "The old overlay should be destroyed if orientation changes." into gingerbread

Merge commit '83ea6389' into gingerbread-plus-aosp

* commit '83ea6389':
  The old overlay should be destroyed if orientation changes.
parents e7dd4e38 83ea6389
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -319,6 +319,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
    // Callback is disabled by default
    mPreviewCallbackFlag = FRAME_CALLBACK_FLAG_NOOP;
    mOrientation = 0;
    mOrientationChanged = false;
    cameraService->setCameraBusy(cameraId);
    cameraService->loadSound();
    LOG1("Client::Client X (pid %d)", callingPid);
@@ -496,6 +497,7 @@ status_t CameraService::Client::setPreviewDisplay(const sp<ISurface>& surface) {
            // Force the destruction of any previous overlay
            sp<Overlay> dummy;
            mHardware->setOverlay(dummy);
            mOverlayRef = 0;
        } else {
            mSurface->unregisterBuffers();
        }
@@ -539,11 +541,12 @@ status_t CameraService::Client::setOverlay() {
    CameraParameters params(mHardware->getParameters());
    params.getPreviewSize(&w, &h);

    if (w != mOverlayW || h != mOverlayH) {
    if (w != mOverlayW || h != mOverlayH || mOrientationChanged) {
        // Force the destruction of any previous overlay
        sp<Overlay> dummy;
        mHardware->setOverlay(dummy);
        mOverlayRef = 0;
        mOrientationChanged = false;
    }

    status_t result = NO_ERROR;
@@ -810,6 +813,7 @@ String8 CameraService::Client::getParameters() const {

status_t CameraService::Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) {
    LOG1("sendCommand (pid %d)", getCallingPid());
    int orientation;
    Mutex::Autolock lock(mLock);
    status_t result = checkPidAndHardware();
    if (result != NO_ERROR) return result;
@@ -821,20 +825,24 @@ status_t CameraService::Client::sendCommand(int32_t cmd, int32_t arg1, int32_t a
        }
        switch (arg1) {
            case 0:
                mOrientation = ISurface::BufferHeap::ROT_0;
                orientation = ISurface::BufferHeap::ROT_0;
                break;
            case 90:
                mOrientation = ISurface::BufferHeap::ROT_90;
                orientation = ISurface::BufferHeap::ROT_90;
                break;
            case 180:
                mOrientation = ISurface::BufferHeap::ROT_180;
                orientation = ISurface::BufferHeap::ROT_180;
                break;
            case 270:
                mOrientation = ISurface::BufferHeap::ROT_270;
                orientation = ISurface::BufferHeap::ROT_270;
                break;
            default:
                return BAD_VALUE;
        }
        if (mOrientation != orientation) {
            mOrientation = orientation;
            if (mOverlayRef != 0) mOrientationChanged = true;
        }
        return OK;
    }

+3 −1
Original line number Diff line number Diff line
@@ -164,7 +164,9 @@ private:
        int                             mOverlayW;
        int                             mOverlayH;
        int                             mPreviewCallbackFlag;
        int                             mOrientation;
        int                             mOrientation;     // Current display orientation
        // True if display orientation has been changed. This is only used in overlay.
        int                             mOrientationChanged;

        // Ensures atomicity among the public methods
        mutable Mutex                   mLock;