161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/*
261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala *
461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * you may not use this file except in compliance with the License.
661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * You may obtain a copy of the License at
761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala *
861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala *
1061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
1161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
1261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * See the License for the specific language governing permissions and
1461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * limitations under the License.
1561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */
1661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
1761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2CLIENT_H
1861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2CLIENT_H
1961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
2061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include "CameraService.h"
217b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "common/CameraDeviceBase.h"
227b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "common/Camera2ClientBase.h"
237b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "api1/client2/Parameters.h"
247b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "api1/client2/FrameProcessor.h"
257b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala//#include "api1/client2/StreamingProcessor.h"
267b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala//#include "api1/client2/JpegProcessor.h"
27d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvala//#include "api1/client2/ZslProcessor.h"
287b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala//#include "api1/client2/CaptureSequencer.h"
297b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala//#include "api1/client2/CallbackProcessor.h"
3061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalanamespace android {
3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
337b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalanamespace camera2 {
347b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
357b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass StreamingProcessor;
367b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass JpegProcessor;
37d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvalaclass ZslProcessor;
387b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass CaptureSequencer;
397b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass CallbackProcessor;
407b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
417b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala}
427b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala
4373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass IMemory;
4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/**
45b99c5b8eebb35133a08c46b015624bd4c4a6c477Eino-Ville Talvala * Interface between android.hardware.Camera API and Camera HAL device for versions
46d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvala * CAMERA_DEVICE_API_VERSION_3_0 and above.
4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */
488ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvalaclass Camera2Client :
4944cfcf00b9008c1c04f4c8277c6c06af039fd976Igor Murashkin        public Camera2ClientBase<CameraService::Client>
5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala{
5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalapublic:
52ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    /**
53ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     * ICamera interface (see ICamera for details)
54ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     */
55160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala
56d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual binder::Status  disconnect();
57d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual status_t        connect(const sp<hardware::ICameraClient>& client);
5861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        lock();
5961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        unlock();
601ce7c34e67c2cf58dd88c31f36f4bd62e375f7f0Eino-Ville Talvala    virtual status_t        setPreviewTarget(
618ba01021b573889802e67e029225a96f0dfa471aAndy McFadden        const sp<IGraphicBufferProducer>& bufferProducer);
6261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual void            setPreviewCallbackFlag(int flag);
633ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala    virtual status_t        setPreviewCallbackTarget(
643ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala        const sp<IGraphicBufferProducer>& callbackProducer);
653ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala
6661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        startPreview();
6761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual void            stopPreview();
6861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual bool            previewEnabled();
698cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen    virtual status_t        setVideoBufferMode(int32_t videoBufferMode);
7061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        startRecording();
7161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual void            stopRecording();
7261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual bool            recordingEnabled();
7361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual void            releaseRecordingFrame(const sp<IMemory>& mem);
742d13b1d3eeaba31d8c15acc6037fd68b150a9a66Chien-Yu Chen    virtual void            releaseRecordingFrameHandle(native_handle_t *handle);
75b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh    virtual void            releaseRecordingFrameHandleBatch(
76b5df547bce900fa5764d735bee304e79c001d60dYin-Chia Yeh                                    const std::vector<native_handle_t*>& handles);
7761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        autoFocus();
7861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        cancelAutoFocus();
7961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        takePicture(int msgType);
8061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        setParameters(const String8& params);
8161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual String8         getParameters() const;
8261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t        sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
83d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual void            notifyError(int32_t errorCode,
84a485dfec4ad98283b911cf983566b0ce947343b6Ruben Brunk                                        const CaptureResultExtras& resultExtras);
858cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen    virtual status_t        setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer);
8661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
87ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    /**
88ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     * Interface used by CameraService
89ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     */
90160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala
9161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    Camera2Client(const sp<CameraService>& cameraService,
92d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala            const sp<hardware::ICameraClient>& cameraClient,
93ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            const String16& clientPackageName,
9461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala            int cameraId,
9561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala            int cameraFacing,
96ecf17e82505fdb60d59e00b6dd59036df93de655Igor Murashkin            int clientPid,
97ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala            uid_t clientUid,
98a858ea0495c887621a2fd9c0afc13780deccb597Igor Murashkin            int servicePid,
99a858ea0495c887621a2fd9c0afc13780deccb597Igor Murashkin            bool legacyMode);
100b99c5b8eebb35133a08c46b015624bd4c4a6c477Eino-Ville Talvala
101160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala    virtual ~Camera2Client();
10261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
103dce65c8103a8e8c3267590e90c5141d6bf842872Yin-Chia Yeh    virtual status_t initialize(sp<CameraProviderManager> manager) override;
104f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala
10561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala    virtual status_t dump(int fd, const Vector<String16>& args);
10661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
107c4003965258404a19b99280ac0f475e2f290bf27Eino-Ville Talvala    virtual status_t dumpClient(int fd, const Vector<String16>& args);
108c4003965258404a19b99280ac0f475e2f290bf27Eino-Ville Talvala
109ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    /**
110b99c5b8eebb35133a08c46b015624bd4c4a6c477Eino-Ville Talvala     * Interface used by CameraDeviceBase
111ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     */
112160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala
113160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala    virtual void notifyAutoFocus(uint8_t newState, int triggerId);
114160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala    virtual void notifyAutoExposure(uint8_t newState, int triggerId);
115216db7455a19a2f1a5b29e3a9610231365b6c778Yin-Chia Yeh    virtual void notifyShutter(const CaptureResultExtras& resultExtras,
116216db7455a19a2f1a5b29e3a9610231365b6c778Yin-Chia Yeh                               nsecs_t timestamp);
117160d4af9d933fe9461bb213e5876fc5c8c2178c2Eino-Ville Talvala
118ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    /**
119ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     * Interface used by independent components of Camera2Client.
120ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala     */
121a16733eeb9c40db4793bec408f29b4204e5f23b1Eino-Ville Talvala
122a16733eeb9c40db4793bec408f29b4204e5f23b1Eino-Ville Talvala    camera2::SharedParameters& getParameters();
123a16733eeb9c40db4793bec408f29b4204e5f23b1Eino-Ville Talvala
124da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    int getPreviewStreamId() const;
125da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    int getCaptureStreamId() const;
126da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    int getCallbackStreamId() const;
127da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    int getRecordingStreamId() const;
128da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    int getZslStreamId() const;
129da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
1304865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    status_t registerFrameListener(int32_t minId, int32_t maxId,
1318b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh            const wp<camera2::FrameProcessor::FilteredListener>& listener,
13225a0aef19e170d2695f64b4c48296e7914155a88Zhijun He            bool sendPartials = true);
1334865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    status_t removeFrameListener(int32_t minId, int32_t maxId,
1348b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh            const wp<camera2::FrameProcessor::FilteredListener>& listener);
1354865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala
1364865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    status_t stopStream();
137da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
138355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh    // For the slowJpegMode to create jpeg stream when precapture sequence is done
139355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh    status_t createJpegStreamL(camera2::Parameters &params);
140355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh
141ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala    static size_t calculateBufferSize(int width, int height,
142ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala            int format, int stride);
143ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala
1444865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kPreviewRequestIdStart = 10000000;
1454865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kPreviewRequestIdEnd   = 20000000;
1464865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala
1474865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kRecordingRequestIdStart  = 20000000;
1484865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kRecordingRequestIdEnd    = 30000000;
1494865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala
1504865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kCaptureRequestIdStart = 30000000;
1514865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    static const int32_t kCaptureRequestIdEnd   = 40000000;
152da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala
1532b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala    // Constant strings for ATRACE logging
1542b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala    static const char* kAutofocusLabel;
1552b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala    static const char* kTakepictureLabel;
1562b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala
157355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh    // Used with stream IDs
158355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh    static const int NO_STREAM = -1;
159355d9c6b74cd22a88fc7d1c9ba2e928ba566c69eYin-Chia Yeh
16061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalaprivate:
1613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala    /** ICamera interface-related private members */
1622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    typedef camera2::Parameters Parameters;
163228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala
16436cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t setPreviewWindowL(const sp<IBinder>& binder,
1658b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh            const sp<Surface>& window);
166228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    status_t startPreviewL(Parameters &params, bool restart);
167228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    void     stopPreviewL();
168228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    status_t startRecordingL(Parameters &params, bool restart);
169228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    bool     recordingEnabledL();
1708da4cd7d706d9f551bf2d08cd8b61907a10cd38dJames Dong
17136cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    // Individual commands for sendCommand()
17236cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandStartSmoothZoomL();
17336cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandStopSmoothZoomL();
17436cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandSetDisplayOrientationL(int degrees);
17536cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandEnableShutterSoundL(bool enable);
17636cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandPlayRecordingSoundL();
17736cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandStartFaceDetectionL(int type);
178228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    status_t commandStopFaceDetectionL(Parameters &params);
17936cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandEnableFocusMoveMsgL(bool enable);
18036cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandPingL();
18136cdfb185877a7f573621d19ed2b2e1cac13d62eEino-Ville Talvala    status_t commandSetVideoBufferCountL(size_t count);
182d46a6b9fd8b2a4f9098757384711e2cd03a91651Eino-Ville Talvala    status_t commandSetVideoFormatL(int format, android_dataspace dataSpace);
183ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala
1842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    // Current camera device configuration
1852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala    camera2::SharedParameters mParameters;
1868ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala
1873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala    /** Camera device-related private members */
1883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala
189228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    void     setPreviewCallbackFlagL(Parameters &params, int flag);
1905a4f93eaaab7518fd734fdc9f0f686d632f31a59Eino-Ville Talvala    status_t updateRequests(Parameters &params);
1918ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala
192dca254aef0c09867e50fe6613c6fad405de72842Igor Murashkin    template <typename ProcessorT>
193dca254aef0c09867e50fe6613c6fad405de72842Igor Murashkin    status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params);
19482db9e6126812dd2ee74e33e4c475cae2c7e48f6Igor Murashkin    template <typename ProcessorT,
19582db9e6126812dd2ee74e33e4c475cae2c7e48f6Igor Murashkin              status_t (ProcessorT::*updateStreamF)(const Parameters &)>
19682db9e6126812dd2ee74e33e4c475cae2c7e48f6Igor Murashkin    status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params);
197dca254aef0c09867e50fe6613c6fad405de72842Igor Murashkin
198a16733eeb9c40db4793bec408f29b4204e5f23b1Eino-Ville Talvala    sp<camera2::FrameProcessor> mFrameProcessor;
1998ce89d9e2b132bf58a030acec88acf0a998926a1Eino-Ville Talvala
20073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala    /* Preview/Recording related members */
201be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala
2029cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala    sp<IBinder> mPreviewSurface;
2038cca0750a84c2d97224c0cfef7cf255308ee80b3Chien-Yu Chen    sp<IBinder> mVideoSurface;
20473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala    sp<camera2::StreamingProcessor> mStreamingProcessor;
2059cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala
206228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala    /** Preview callback related members */
207228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala
208d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala    sp<camera2::CallbackProcessor> mCallbackProcessor;
209228a53805808a24cb19fcf13b1f0bdc2ed89bbe1Eino-Ville Talvala
2109cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala    /* Still image capture related members */
2116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala
212da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    sp<camera2::CaptureSequencer> mCaptureSequencer;
213da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala    sp<camera2::JpegProcessor> mJpegProcessor;
214d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvala    sp<camera2::ZslProcessor> mZslProcessor;
215174181eec57c963a2a17bd156d81c3f18b3ba75cEino-Ville Talvala
2169cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala    /** Utility members */
217a858ea0495c887621a2fd9c0afc13780deccb597Igor Murashkin    bool mLegacyMode;
2189cca4c6d976d2d4127286e9eaa54d1b99880c25cEino-Ville Talvala
2194865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    // Wait until the camera device has received the latest control settings
2204865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala    status_t syncWithDevice();
221a53021f776d0c82271727e5817388936513feb92Yin-Chia Yeh
222a53021f776d0c82271727e5817388936513feb92Yin-Chia Yeh    // Video snapshot jpeg size overriding helper function
223a53021f776d0c82271727e5817388936513feb92Yin-Chia Yeh    status_t overrideVideoSnapshotSize(Parameters &params);
224dce65c8103a8e8c3267590e90c5141d6bf842872Yin-Chia Yeh
225dce65c8103a8e8c3267590e90c5141d6bf842872Yin-Chia Yeh    template<typename TProviderPtr>
226dce65c8103a8e8c3267590e90c5141d6bf842872Yin-Chia Yeh    status_t initializeImpl(TProviderPtr providerPtr);
22761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala};
22861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
22961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala}; // namespace android
23061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala
23161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#endif
232