upload android base code part6
This commit is contained in:
parent
421e214c7d
commit
4e516ec6ed
35396 changed files with 9188716 additions and 0 deletions
274
android/device/generic/goldfish/camera/EmulatedCamera2.h
Normal file
274
android/device/generic/goldfish/camera/EmulatedCamera2.h
Normal file
|
@ -0,0 +1,274 @@
|
|||
/*
|
||||
* Copyright (C) 2012 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 HW_EMULATOR_CAMERA_EMULATED_CAMERA2_H
|
||||
#define HW_EMULATOR_CAMERA_EMULATED_CAMERA2_H
|
||||
|
||||
/*
|
||||
* Contains declaration of a class EmulatedCamera that encapsulates
|
||||
* functionality common to all version 2.0 emulated camera devices. Instances
|
||||
* of this class (for each emulated camera) are created during the construction
|
||||
* of the EmulatedCameraFactory instance. This class serves as an entry point
|
||||
* for all camera API calls that defined by camera2_device_ops_t API.
|
||||
*/
|
||||
|
||||
#include "hardware/camera2.h"
|
||||
#include "system/camera_metadata.h"
|
||||
#include "EmulatedBaseCamera.h"
|
||||
#include <utils/Thread.h>
|
||||
#include <utils/Mutex.h>
|
||||
|
||||
namespace android {
|
||||
|
||||
/* Encapsulates functionality common to all version 2.0 emulated camera devices
|
||||
*
|
||||
* Note that EmulatedCameraFactory instantiates object of this class just once,
|
||||
* when EmulatedCameraFactory instance gets constructed. Connection to /
|
||||
* disconnection from the actual camera device is handled by calls to
|
||||
* connectDevice(), and closeCamera() methods of this class that are invoked in
|
||||
* response to hw_module_methods_t::open, and camera_device::close callbacks.
|
||||
*/
|
||||
class EmulatedCamera2 : public camera2_device, public EmulatedBaseCamera {
|
||||
public:
|
||||
/* Constructs EmulatedCamera2 instance.
|
||||
* Param:
|
||||
* cameraId - Zero based camera identifier, which is an index of the camera
|
||||
* instance in camera factory's array.
|
||||
* module - Emulated camera HAL module descriptor.
|
||||
*/
|
||||
EmulatedCamera2(int cameraId,
|
||||
struct hw_module_t* module);
|
||||
|
||||
/* Destructs EmulatedCamera2 instance. */
|
||||
virtual ~EmulatedCamera2();
|
||||
|
||||
/****************************************************************************
|
||||
* Abstract API
|
||||
***************************************************************************/
|
||||
|
||||
public:
|
||||
|
||||
/****************************************************************************
|
||||
* Public API
|
||||
***************************************************************************/
|
||||
|
||||
public:
|
||||
virtual status_t Initialize();
|
||||
|
||||
/****************************************************************************
|
||||
* Camera module API and generic hardware device API implementation
|
||||
***************************************************************************/
|
||||
|
||||
public:
|
||||
virtual status_t connectCamera(hw_device_t** device);
|
||||
|
||||
virtual status_t closeCamera();
|
||||
|
||||
virtual status_t getCameraInfo(struct camera_info* info) = 0;
|
||||
|
||||
/****************************************************************************
|
||||
* Camera API implementation.
|
||||
* These methods are called from the camera API callback routines.
|
||||
***************************************************************************/
|
||||
|
||||
protected:
|
||||
/** Request input queue notification */
|
||||
virtual int requestQueueNotify();
|
||||
|
||||
/** Count of requests in flight */
|
||||
virtual int getInProgressCount();
|
||||
|
||||
/** Cancel all captures in flight */
|
||||
virtual int flushCapturesInProgress();
|
||||
|
||||
virtual int constructDefaultRequest(
|
||||
int request_template,
|
||||
camera_metadata_t **request);
|
||||
|
||||
/** Output stream creation and management */
|
||||
virtual int allocateStream(
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
int format,
|
||||
const camera2_stream_ops_t *stream_ops,
|
||||
uint32_t *stream_id,
|
||||
uint32_t *format_actual,
|
||||
uint32_t *usage,
|
||||
uint32_t *max_buffers);
|
||||
|
||||
virtual int registerStreamBuffers(
|
||||
uint32_t stream_id,
|
||||
int num_buffers,
|
||||
buffer_handle_t *buffers);
|
||||
|
||||
virtual int releaseStream(uint32_t stream_id);
|
||||
|
||||
/** Input stream creation and management */
|
||||
virtual int allocateReprocessStream(
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
uint32_t format,
|
||||
const camera2_stream_in_ops_t *reprocess_stream_ops,
|
||||
uint32_t *stream_id,
|
||||
uint32_t *consumer_usage,
|
||||
uint32_t *max_buffers);
|
||||
|
||||
virtual int allocateReprocessStreamFromStream(
|
||||
uint32_t output_stream_id,
|
||||
const camera2_stream_in_ops_t *reprocess_stream_ops,
|
||||
uint32_t *stream_id);
|
||||
|
||||
virtual int releaseReprocessStream(uint32_t stream_id);
|
||||
|
||||
/** 3A action triggering */
|
||||
virtual int triggerAction(uint32_t trigger_id,
|
||||
int32_t ext1, int32_t ext2);
|
||||
|
||||
/** Custom tag definitions */
|
||||
virtual const char* getVendorSectionName(uint32_t tag);
|
||||
virtual const char* getVendorTagName(uint32_t tag);
|
||||
virtual int getVendorTagType(uint32_t tag);
|
||||
|
||||
/** Debug methods */
|
||||
|
||||
virtual int dump(int fd);
|
||||
|
||||
/****************************************************************************
|
||||
* Camera API callbacks as defined by camera2_device_ops structure. See
|
||||
* hardware/libhardware/include/hardware/camera2.h for information on each
|
||||
* of these callbacks. Implemented in this class, these callbacks simply
|
||||
* dispatch the call into an instance of EmulatedCamera2 class defined in
|
||||
* the 'camera_device2' parameter.
|
||||
***************************************************************************/
|
||||
|
||||
private:
|
||||
/** Input request queue */
|
||||
static int set_request_queue_src_ops(const camera2_device_t *,
|
||||
const camera2_request_queue_src_ops *queue_src_ops);
|
||||
static int notify_request_queue_not_empty(const camera2_device_t *);
|
||||
|
||||
/** Output frame queue */
|
||||
static int set_frame_queue_dst_ops(const camera2_device_t *,
|
||||
const camera2_frame_queue_dst_ops *queue_dst_ops);
|
||||
|
||||
/** In-progress request management */
|
||||
static int get_in_progress_count(const camera2_device_t *);
|
||||
|
||||
static int flush_captures_in_progress(const camera2_device_t *);
|
||||
|
||||
/** Request template creation */
|
||||
static int construct_default_request(const camera2_device_t *,
|
||||
int request_template,
|
||||
camera_metadata_t **request);
|
||||
|
||||
/** Stream management */
|
||||
static int allocate_stream(const camera2_device_t *,
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
int format,
|
||||
const camera2_stream_ops_t *stream_ops,
|
||||
uint32_t *stream_id,
|
||||
uint32_t *format_actual,
|
||||
uint32_t *usage,
|
||||
uint32_t *max_buffers);
|
||||
|
||||
static int register_stream_buffers(const camera2_device_t *,
|
||||
uint32_t stream_id,
|
||||
int num_buffers,
|
||||
buffer_handle_t *buffers);
|
||||
|
||||
static int release_stream(const camera2_device_t *,
|
||||
uint32_t stream_id);
|
||||
|
||||
static int allocate_reprocess_stream(const camera2_device_t *,
|
||||
uint32_t width,
|
||||
uint32_t height,
|
||||
uint32_t format,
|
||||
const camera2_stream_in_ops_t *reprocess_stream_ops,
|
||||
uint32_t *stream_id,
|
||||
uint32_t *consumer_usage,
|
||||
uint32_t *max_buffers);
|
||||
|
||||
static int allocate_reprocess_stream_from_stream(const camera2_device_t *,
|
||||
uint32_t output_stream_id,
|
||||
const camera2_stream_in_ops_t *reprocess_stream_ops,
|
||||
uint32_t *stream_id);
|
||||
|
||||
static int release_reprocess_stream(const camera2_device_t *,
|
||||
uint32_t stream_id);
|
||||
|
||||
/** 3A triggers*/
|
||||
static int trigger_action(const camera2_device_t *,
|
||||
uint32_t trigger_id,
|
||||
int ext1,
|
||||
int ext2);
|
||||
|
||||
/** Notifications to application */
|
||||
static int set_notify_callback(const camera2_device_t *,
|
||||
camera2_notify_callback notify_cb,
|
||||
void *user);
|
||||
|
||||
/** Vendor metadata registration */
|
||||
static int get_metadata_vendor_tag_ops(const camera2_device_t *,
|
||||
vendor_tag_query_ops_t **ops);
|
||||
// for get_metadata_vendor_tag_ops
|
||||
static const char* get_camera_vendor_section_name(
|
||||
const vendor_tag_query_ops_t *,
|
||||
uint32_t tag);
|
||||
static const char* get_camera_vendor_tag_name(
|
||||
const vendor_tag_query_ops_t *,
|
||||
uint32_t tag);
|
||||
static int get_camera_vendor_tag_type(
|
||||
const vendor_tag_query_ops_t *,
|
||||
uint32_t tag);
|
||||
|
||||
static int dump(const camera2_device_t *, int fd);
|
||||
|
||||
/** For hw_device_t ops */
|
||||
static int close(struct hw_device_t* device);
|
||||
|
||||
/****************************************************************************
|
||||
* Data members shared with implementations
|
||||
***************************************************************************/
|
||||
protected:
|
||||
/** Mutex for calls through camera2 device interface */
|
||||
Mutex mMutex;
|
||||
|
||||
bool mStatusPresent;
|
||||
|
||||
const camera2_request_queue_src_ops *mRequestQueueSrc;
|
||||
const camera2_frame_queue_dst_ops *mFrameQueueDst;
|
||||
|
||||
struct TagOps : public vendor_tag_query_ops {
|
||||
EmulatedCamera2 *parent;
|
||||
};
|
||||
TagOps mVendorTagOps;
|
||||
|
||||
void sendNotification(int32_t msgType,
|
||||
int32_t ext1, int32_t ext2, int32_t ext3);
|
||||
|
||||
/****************************************************************************
|
||||
* Data members
|
||||
***************************************************************************/
|
||||
private:
|
||||
static camera2_device_ops_t sDeviceOps;
|
||||
camera2_notify_callback mNotifyCb;
|
||||
void* mNotifyUserPtr;
|
||||
};
|
||||
|
||||
}; /* namespace android */
|
||||
|
||||
#endif /* HW_EMULATOR_CAMERA_EMULATED_CAMERA2_H */
|
Loading…
Add table
Add a link
Reference in a new issue