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

Commit 986e0dcf authored by Wu-cheng Li's avatar Wu-cheng Li
Browse files

Use image rect information to display zoomed picture.

parent d6223663
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -865,7 +865,11 @@ status_t CameraService::Client::takePicture()
}

// snapshot taken
void CameraService::Client::handleShutter()
void CameraService::Client::handleShutter(
    image_rect_type *size // The width and height of yuv picture for
                          // registerBuffer. If this is NULL, use the picture
                          // size from parameters.
)
{
    // Play shutter sound.
    if (mMediaPlayerClick.get() != NULL) {
@@ -889,12 +893,21 @@ void CameraService::Client::handleShutter()
    if (mSurface != 0 && !mUseOverlay) {
        int w, h;
        CameraParameters params(mHardware->getParameters());
        params.getPictureSize(&w, &h);
        uint32_t transform = 0;
        if (params.getOrientation() == CameraParameters::CAMERA_ORIENTATION_PORTRAIT) {
            LOGV("portrait mode");
            transform = ISurface::BufferHeap::ROT_90;
        }

        if (size == NULL) {
            params.getPictureSize(&w, &h);
        } else {
            w = size->width;
            h = size->height;
            w &= ~1;
            h &= ~1;
            LOGD("Snapshot image width=%d, height=%d", w, h);
        }
        ISurface::BufferHeap buffers(w, h, w, h,
            PIXEL_FORMAT_YCbCr_420_SP, transform, 0, mHardware->getRawHeap());

@@ -1048,7 +1061,8 @@ void CameraService::Client::notifyCallback(int32_t msgType, int32_t ext1, int32_

    switch (msgType) {
        case CAMERA_MSG_SHUTTER:
            client->handleShutter();
            // ext1 is the dimension of the yuv picture.
            client->handleShutter((image_rect_type *)ext1);
            break;
        default:
            sp<ICameraClient> c = client->mCameraClient;
+1 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ private:
        static      sp<Client>  getClientFromCookie(void* user);

                    void        handlePreviewData(const sp<IMemory>&);
                    void        handleShutter();
                    void        handleShutter(image_rect_type *image);
                    void        handlePostview(const sp<IMemory>&);
                    void        handleRawPicture(const sp<IMemory>&);
                    void        handleCompressedPicture(const sp<IMemory>&);
+9 −0
Original line number Diff line number Diff line
@@ -25,6 +25,15 @@
#include <ui/Overlay.h>

namespace android {
/**
 *  The size of image for display.
 */
typedef struct image_rect_struct
{
  uint32_t width;      /* Image width */
  uint32_t height;     /* Image height */
} image_rect_type;


typedef void (*notify_callback)(int32_t msgType,
                                int32_t ext1,