您当前的位置: 首页 >  android

暂无认证

  • 5浏览

    0关注

    95281博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android Multimedia框架总结(十九)Camera2框架C/S模型之CameraService启动及与Client连接过程

发布时间:2016-11-13 18:20:37 ,浏览量:5

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼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 &params); 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 &params, bool restart); void stopPreviewL();
    status_t startRecordingL(Parameters &params, 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 &params);
    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 &params, int flag);
    status_t updateRequests(Parameters &params);

    templatestatus_t updateProcessorStream(spprocessor, Parameters params);
    template             
关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.2644s