You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
96 lines
2.8 KiB
4 months ago
|
/*
|
||
|
* Copyright (C) 2013-2018 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
#ifndef ANDROID_SERVERS_CAMERA3_INPUT_STREAM_H
|
||
|
#define ANDROID_SERVERS_CAMERA3_INPUT_STREAM_H
|
||
|
|
||
|
#include <utils/RefBase.h>
|
||
|
#include <gui/Surface.h>
|
||
|
#include <gui/BufferItemConsumer.h>
|
||
|
|
||
|
#include "Camera3IOStreamBase.h"
|
||
|
|
||
|
namespace android {
|
||
|
|
||
|
namespace camera3 {
|
||
|
|
||
|
/**
|
||
|
* A class for managing a single stream of input data to the camera device.
|
||
|
*
|
||
|
* This class serves as a consumer adapter for the HAL, and will consume the
|
||
|
* buffers by feeding them into the HAL, as well as releasing the buffers back
|
||
|
* the buffers once the HAL is done with them.
|
||
|
*/
|
||
|
class Camera3InputStream : public Camera3IOStreamBase,
|
||
|
public BufferItemConsumer::BufferFreedListener {
|
||
|
public:
|
||
|
/**
|
||
|
* Set up a stream for formats that have fixed size, such as RAW and YUV.
|
||
|
*/
|
||
|
Camera3InputStream(int id, uint32_t width, uint32_t height, int format);
|
||
|
~Camera3InputStream();
|
||
|
|
||
|
virtual void dump(int fd, const Vector<String16> &args) const;
|
||
|
|
||
|
// TODO: expose an interface to get the IGraphicBufferProducer
|
||
|
|
||
|
private:
|
||
|
|
||
|
sp<BufferItemConsumer> mConsumer;
|
||
|
sp<IGraphicBufferProducer> mProducer;
|
||
|
Vector<BufferItem> mBuffersInFlight;
|
||
|
|
||
|
static const String8 FAKE_ID;
|
||
|
|
||
|
/**
|
||
|
* Camera3IOStreamBase
|
||
|
*/
|
||
|
virtual status_t returnBufferCheckedLocked(
|
||
|
const camera_stream_buffer &buffer,
|
||
|
nsecs_t timestamp,
|
||
|
bool output,
|
||
|
const std::vector<size_t>& surface_ids,
|
||
|
/*out*/
|
||
|
sp<Fence> *releaseFenceOut);
|
||
|
|
||
|
/**
|
||
|
* Camera3Stream interface
|
||
|
*/
|
||
|
|
||
|
virtual status_t getInputBufferLocked(camera_stream_buffer *buffer, Size *size);
|
||
|
virtual status_t returnInputBufferLocked(
|
||
|
const camera_stream_buffer &buffer);
|
||
|
virtual status_t getInputBufferProducerLocked(
|
||
|
sp<IGraphicBufferProducer> *producer);
|
||
|
virtual status_t disconnectLocked();
|
||
|
|
||
|
virtual status_t configureQueueLocked();
|
||
|
|
||
|
virtual status_t getEndpointUsage(uint64_t *usage) const;
|
||
|
|
||
|
/**
|
||
|
* BufferItemConsumer::BufferFreedListener interface
|
||
|
*/
|
||
|
virtual void onBufferFreed(const wp<GraphicBuffer>&) override;
|
||
|
|
||
|
}; // class Camera3InputStream
|
||
|
|
||
|
}; // namespace camera3
|
||
|
|
||
|
}; // namespace android
|
||
|
|
||
|
#endif
|