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.
121 lines
4.5 KiB
121 lines
4.5 KiB
/*
|
|
* Copyright (C) 2016 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 DEFAULT_CAMERA_HAL_STATIC_PROPERTIES_H_
|
|
#define DEFAULT_CAMERA_HAL_STATIC_PROPERTIES_H_
|
|
|
|
#include <memory>
|
|
#include <set>
|
|
|
|
#include <hardware/camera3.h>
|
|
#include "common.h"
|
|
#include "metadata/metadata_reader.h"
|
|
#include "metadata/types.h"
|
|
|
|
namespace default_camera_hal {
|
|
|
|
// StaticProperties provides a wrapper around useful static metadata entries.
|
|
class StaticProperties {
|
|
public:
|
|
// Helpful types for interpreting some static properties.
|
|
struct StreamCapabilities {
|
|
int64_t stall_duration;
|
|
int32_t input_supported;
|
|
int32_t output_supported;
|
|
// Default constructor ensures no support
|
|
// and an invalid stall duration.
|
|
StreamCapabilities()
|
|
: stall_duration(-1), input_supported(0), output_supported(0) {}
|
|
};
|
|
// Map stream spec (format, size) to their
|
|
// capabilities (input, output, stall).
|
|
typedef std::map<StreamSpec, StreamCapabilities, StreamSpec::Compare>
|
|
CapabilitiesMap;
|
|
|
|
// Use this method to create StaticProperties objects.
|
|
// Functionally equivalent to "new StaticProperties",
|
|
// except that it may return nullptr in case of failure (missing entries).
|
|
static StaticProperties* NewStaticProperties(
|
|
std::unique_ptr<const MetadataReader> metadata_reader);
|
|
static StaticProperties* NewStaticProperties(
|
|
std::unique_ptr<android::CameraMetadata> metadata) {
|
|
return NewStaticProperties(
|
|
std::make_unique<MetadataReader>(std::move(metadata)));
|
|
}
|
|
virtual ~StaticProperties(){};
|
|
|
|
// Simple accessors.
|
|
int facing() const { return facing_; };
|
|
int orientation() const { return orientation_; };
|
|
// Carrying on the promise of the underlying reader,
|
|
// the returned pointer is valid only as long as this object is alive.
|
|
const camera_metadata_t* raw_metadata() const {
|
|
return metadata_reader_->raw_metadata();
|
|
};
|
|
|
|
// Check if a given template type is supported.
|
|
bool TemplateSupported(int type);
|
|
// Validators (check that values are consistent with the capabilities
|
|
// this object represents/base requirements of the camera HAL).
|
|
bool StreamConfigurationSupported(
|
|
const camera3_stream_configuration_t* stream_config);
|
|
// Check that the inputs and outputs for a request don't conflict.
|
|
bool ReprocessingSupported(
|
|
const camera3_stream_t* input_stream,
|
|
const std::set<const camera3_stream_t*>& output_streams);
|
|
|
|
private:
|
|
// Constructor private to allow failing on bad input.
|
|
// Use NewStaticProperties instead.
|
|
StaticProperties(std::unique_ptr<const MetadataReader> metadata_reader,
|
|
int facing,
|
|
int orientation,
|
|
int32_t max_input_streams,
|
|
int32_t max_raw_output_streams,
|
|
int32_t max_non_stalling_output_streams,
|
|
int32_t max_stalling_output_streams,
|
|
std::set<uint8_t> request_capabilities,
|
|
CapabilitiesMap stream_capabilities,
|
|
ReprocessFormatMap supported_reprocess_outputs);
|
|
|
|
// Helper functions for StreamConfigurationSupported.
|
|
bool SanityCheckStreamConfiguration(
|
|
const camera3_stream_configuration_t* stream_config);
|
|
bool InputStreamsSupported(
|
|
const camera3_stream_configuration_t* stream_config);
|
|
bool OutputStreamsSupported(
|
|
const camera3_stream_configuration_t* stream_config);
|
|
bool OperationModeSupported(
|
|
const camera3_stream_configuration_t* stream_config);
|
|
|
|
const std::unique_ptr<const MetadataReader> metadata_reader_;
|
|
const int facing_;
|
|
const int orientation_;
|
|
const int32_t max_input_streams_;
|
|
const int32_t max_raw_output_streams_;
|
|
const int32_t max_non_stalling_output_streams_;
|
|
const int32_t max_stalling_output_streams_;
|
|
const std::set<uint8_t> request_capabilities_;
|
|
const CapabilitiesMap stream_capabilities_;
|
|
const ReprocessFormatMap supported_reprocess_outputs_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(StaticProperties);
|
|
};
|
|
|
|
} // namespace default_camera_hal
|
|
|
|
#endif // DEFAULT_CAMERA_HAL_STATIC_PROPERTIES_H_
|