转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53150322
Agenda:
- 一张图看Camera2框架类图
- CameraService启动
- ICameraService.cpp
- Camera2Client.h与Camera2Client.cpp
- ICamera.h与 ICamera.cpp
- Camera2Client与CameraService连接
一张图看Camera2框架类图:
CameraService启动
CameraService是在MediaServer启动过程中进行的
main_mediaserver.cpp (frameworks\av\media\mediaserver)
在 main函数中会执行到CameraService::instantiate(), CameraService 本身并没有实现这个方法
CameraService.h (frameworks\av\services\camera\libcameraservice)
BinderService.h (frameworks\native\include\binder)
在其父类中instantiate()函数,BinderService是一个模板类
CameraService.cpp (frameworks\av\services\camera\libcameraservice)
到这里,CameraService就启动了。
ICameraService.cpp
在\frameworks\av\services\camera libcameraservice.so中相关文件 Camera2Client.h
namespace camera2 { class StreamingProcessor; class JpegProcessor; class ZslProcessorInterface; class CaptureSequencer; class CallbackProcessor; } class IMemory; /** * Interface between android.hardware.Camera API and Camera HAL device for versions * CAMERA_DEVICE_API_VERSION_2_0 and 3_0. */ class Camera2Client : public Camera2ClientBase{ public: /** * ICamera interface (see ICamera for details) */ virtual void disconnect(); virtual status_t connect(const sp& client); virtual status_t lock(); virtual status_t unlock(); virtual status_t setPreviewTarget( const sp& bufferProducer); virtual void setPreviewCallbackFlag(int flag); virtual status_t setPreviewCallbackTarget( const sp& callbackProducer); virtual status_t startPreview(); virtual void stopPreview(); virtual bool previewEnabled(); virtual status_t storeMetaDataInBuffers(bool enabled); virtual status_t startRecording(); virtual void stopRecording(); virtual bool recordingEnabled(); virtual void releaseRecordingFrame(const sp& mem); virtual status_t autoFocus(); virtual status_t cancelAutoFocus(); virtual status_t takePicture(int msgType); virtual status_t setParameters(const String8& params); virtual String8 getParameters() const; virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2); virtual void notifyError(ICameraDeviceCallbacks::CameraErrorCode errorCode, const CaptureResultExtras& resultExtras); /** * Interface used by CameraService */ Camera2Client(const sp& cameraService, const sp& cameraClient, const String16& clientPackageName, int cameraId, int cameraFacing, int clientPid, uid_t clientUid, int servicePid, bool legacyMode); virtual ~Camera2Client(); status_t initialize(CameraModule *module); virtual status_t dump(int fd, const Vector& args); /** * Interface used by CameraDeviceBase */ virtual void notifyAutoFocus(uint8_t newState, int triggerId); virtual void notifyAutoExposure(uint8_t newState, int triggerId); virtual void notifyShutter(const CaptureResultExtras& resultExtras, nsecs_t timestamp); /** * Interface used by independent components of Camera2Client. */ camera2::SharedParameters& getParameters(); int getPreviewStreamId() const; int getCaptureStreamId() const; int getCallbackStreamId() const; int getRecordingStreamId() const; int getZslStreamId() const; status_t registerFrameListener(int32_t minId, int32_t maxId, wplistener, bool sendPartials = true); status_t removeFrameListener(int32_t minId, int32_t maxId, wplistener); status_t stopStream(); // For the slowJpegMode to create jpeg stream when precapture sequence is done status_t createJpegStreamL(camera2::Parameters ¶ms); static size_t calculateBufferSize(int width, int height, int format, int stride); static const int32_t kPreviewRequestIdStart = 10000000; static const int32_t kPreviewRequestIdEnd = 20000000; static const int32_t kRecordingRequestIdStart = 20000000; static const int32_t kRecordingRequestIdEnd = 30000000; static const int32_t kCaptureRequestIdStart = 30000000; static const int32_t kCaptureRequestIdEnd = 40000000; // Constant strings for ATRACE logging static const char* kAutofocusLabel; static const char* kTakepictureLabel; // Used with stream IDs static const int NO_STREAM = -1; private: /** ICamera interface-related private members */ typedef camera2::Parameters Parameters; status_t setPreviewWindowL(const sp& binder, spwindow); status_t startPreviewL(Parameters ¶ms, bool restart); void stopPreviewL(); status_t startRecordingL(Parameters ¶ms, bool restart); bool recordingEnabledL(); // Individual commands for sendCommand() status_t commandStartSmoothZoomL(); status_t commandStopSmoothZoomL(); status_t commandSetDisplayOrientationL(int degrees); status_t commandEnableShutterSoundL(bool enable); status_t commandPlayRecordingSoundL(); status_t commandStartFaceDetectionL(int type); status_t commandStopFaceDetectionL(Parameters ¶ms); status_t commandEnableFocusMoveMsgL(bool enable); status_t commandPingL(); status_t commandSetVideoBufferCountL(size_t count); status_t commandSetVideoFormatL(int format, android_dataspace dataSpace); // Current camera device configuration camera2::SharedParameters mParameters; /** Camera device-related private members */ void setPreviewCallbackFlagL(Parameters ¶ms, int flag); status_t updateRequests(Parameters ¶ms); templatestatus_t updateProcessorStream(spprocessor, Parameters params); template关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?