StreamingProcessor.h revision 43cbdc5b5545d3344c556014b9afe8249add91e4
143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala/*
243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala *
443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * you may not use this file except in compliance with the License.
643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * You may obtain a copy of the License at
743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala *
843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala *
1043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
1143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
1243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * See the License for the specific language governing permissions and
1443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * limitations under the License.
1543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala */
1643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
1743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H
1843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H
1943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
2043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <utils/Mutex.h>
2143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <utils/String16.h>
2243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <gui/BufferItemConsumer.h>
2343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
2443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include "Parameters.h"
2543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include "CameraMetadata.h"
2643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
2743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalanamespace android {
2843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
2943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass Camera2Client;
3043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass IMemory;
3143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
3243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalanamespace camera2 {
3343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
3443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass Camera2Heap;
3543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
3643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala/**
3743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Management and processing for preview and recording streams
3843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala */
3943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass StreamingProcessor: public BufferItemConsumer::FrameAvailableListener {
4043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala  public:
4143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    StreamingProcessor(wp<Camera2Client> client);
4243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    ~StreamingProcessor();
4343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
4443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t setPreviewWindow(sp<ANativeWindow> window);
4543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
4643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    bool haveValidPreviewWindow() const;
4743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
4843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t updatePreviewRequest(const Parameters &params);
4943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t updatePreviewStream(const Parameters &params);
5043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t deletePreviewStream();
5143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    int getPreviewStreamId() const;
5243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
5343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t setRecordingBufferCount(size_t count);
5443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t updateRecordingRequest(const Parameters &params);
5543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t updateRecordingStream(const Parameters &params);
5643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t deleteRecordingStream();
5743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    int getRecordingStreamId() const;
5843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
5943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    enum StreamType {
6043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala        PREVIEW,
6143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala        RECORD
6243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    };
6343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t startStream(StreamType type,
6443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala            const Vector<uint8_t> &outputStreams);
6543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
6643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t stopStream();
6743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
6843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    // Callback for new recording frames from HAL
6943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    virtual void onFrameAvailable();
7043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    // Callback from stagefright which returns used recording frames
7143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    void releaseRecordingFrame(const sp<IMemory>& mem);
7243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
7343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    status_t dump(int fd, const Vector<String16>& args);
7443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
7543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala  private:
7643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    mutable Mutex mMutex;
7743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
7843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    enum {
7943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala        NO_STREAM = -1
8043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    };
8143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
8243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    wp<Camera2Client> mClient;
8343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
8443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    // Preview-related members
8543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    int mPreviewStreamId;
8643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    CameraMetadata mPreviewRequest;
8743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    sp<ANativeWindow> mPreviewWindow;
8843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
8943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    // Recording-related members
9043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    int mRecordingStreamId;
9143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    int mRecordingFrameCount;
9243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    sp<BufferItemConsumer> mRecordingConsumer;
9343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    sp<ANativeWindow>  mRecordingWindow;
9443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    CameraMetadata mRecordingRequest;
9543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    sp<camera2::Camera2Heap> mRecordingHeap;
9643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
9743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    static const size_t kDefaultRecordingHeapCount = 8;
9843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    size_t mRecordingHeapCount;
9943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    Vector<BufferItemConsumer::BufferItem> mRecordingBuffers;
10043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala    size_t mRecordingHeapHead, mRecordingHeapFree;
10143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
10243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala};
10343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
10443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
10543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala}; // namespace camera2
10643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala}; // namespace android
10743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala
10843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#endif
109