Loading camera/device/3.4/default/ExternalCameraDevice.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -44,9 +44,10 @@ const std::array<uint32_t, /*size*/1> kSupportedFourCCs {{ } // anonymous namespace ExternalCameraDevice::ExternalCameraDevice(const std::string& cameraId) : ExternalCameraDevice::ExternalCameraDevice( const std::string& cameraId, const ExternalCameraConfig& cfg) : mCameraId(cameraId), mCfg(ExternalCameraDeviceConfig::loadFromCfg()) { mCfg(cfg) { status_t ret = initCameraCharacteristics(); if (ret != OK) { Loading camera/device/3.4/default/ExternalCameraDeviceSession.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ HandleImporter ExternalCameraDeviceSession::sHandleImporter; ExternalCameraDeviceSession::ExternalCameraDeviceSession( const sp<ICameraDeviceCallback>& callback, const ExternalCameraDeviceConfig& cfg, const ExternalCameraConfig& cfg, const std::vector<SupportedV4L2Format>& sortedFormats, const CroppingType& croppingType, const common::V1_0::helper::CameraMetadata& chars, Loading camera/device/3.4/default/ExternalCameraUtils.cpp +51 −21 Original line number Diff line number Diff line Loading @@ -30,14 +30,6 @@ namespace device { namespace V3_4 { namespace implementation { namespace { const int kDefaultJpegBufSize = 5 << 20; // 5MB const int kDefaultNumVideoBuffer = 4; const int kDefaultNumStillBuffer = 2; } // anonymous namespace const char* ExternalCameraDeviceConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml"; V4L2Frame::V4L2Frame( uint32_t w, uint32_t h, uint32_t fourcc, int bufIdx, int fd, uint32_t dataSize, uint64_t offset) : Loading Loading @@ -148,10 +140,32 @@ int AllocatedFrame::getCroppedLayout(const IMapper::Rect& rect, YCbCrLayout* out return 0; } bool isAspectRatioClose(float ar1, float ar2) { const float kAspectRatioMatchThres = 0.025f; // This threshold is good enough to distinguish // 4:3/16:9/20:9 // 1.33 / 1.78 / 2 return (std::abs(ar1 - ar2) < kAspectRatioMatchThres); } } // namespace implementation } // namespace V3_4 } // namespace device namespace external { namespace common { namespace { const int kDefaultJpegBufSize = 5 << 20; // 5MB const int kDefaultNumVideoBuffer = 4; const int kDefaultNumStillBuffer = 2; } // anonymous namespace const char* ExternalCameraConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml"; ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* cfgPath) { ExternalCameraConfig ExternalCameraConfig::loadFromCfg(const char* cfgPath) { using namespace tinyxml2; ExternalCameraDeviceConfig ret; ExternalCameraConfig ret; XMLDocument configXml; XMLError err = configXml.LoadFile(cfgPath); Loading @@ -169,6 +183,29 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c return ret; } XMLElement *providerCfg = extCam->FirstChildElement("Provider"); if (providerCfg == nullptr) { ALOGI("%s: no external camera provider config specified", __FUNCTION__); return ret; } XMLElement *ignore = providerCfg->FirstChildElement("ignore"); if (ignore == nullptr) { ALOGI("%s: no internal ignored device specified", __FUNCTION__); return ret; } XMLElement *id = ignore->FirstChildElement("id"); while (id != nullptr) { const char* text = id->GetText(); if (text != nullptr) { ret.mInternalDevices.insert(text); ALOGI("%s: device %s will be ignored by external camera provider", __FUNCTION__, text); } id = id->NextSiblingElement("id"); } XMLElement *deviceCfg = extCam->FirstChildElement("Device"); if (deviceCfg == nullptr) { ALOGI("%s: no external camera device config specified", __FUNCTION__); Loading Loading @@ -226,7 +263,7 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c ret.fpsLimits = limits; } ALOGI("%s: external camera cfd loaded: maxJpgBufSize %d," ALOGI("%s: external camera cfg loaded: maxJpgBufSize %d," " num video buffers %d, num still buffers %d", __FUNCTION__, ret.maxJpegBufSize, ret.numVideoBuffers, ret.numStillBuffers); Loading @@ -237,7 +274,7 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c return ret; } ExternalCameraDeviceConfig::ExternalCameraDeviceConfig() : ExternalCameraConfig::ExternalCameraConfig() : maxJpegBufSize(kDefaultJpegBufSize), numVideoBuffers(kDefaultNumVideoBuffer), numStillBuffers(kDefaultNumStillBuffer) { Loading @@ -247,16 +284,9 @@ ExternalCameraDeviceConfig::ExternalCameraDeviceConfig() : fpsLimits.push_back({/*Size*/{4096, 3072}, /*FPS upper bound*/5.0}); } bool isAspectRatioClose(float ar1, float ar2) { const float kAspectRatioMatchThres = 0.025f; // This threshold is good enough to distinguish // 4:3/16:9/20:9 // 1.33 / 1.78 / 2 return (std::abs(ar1 - ar2) < kAspectRatioMatchThres); } } // namespace implementation } // namespace V3_4 } // namespace device } // namespace common } // namespace external } // namespace camera } // namespace hardware } // namespace android camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h +6 −3 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ using ::android::hardware::camera::device::V3_4::ICameraDeviceSession; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::common::V1_0::helper::HandleImporter; using ::android::hardware::camera::common::V1_0::helper::ExifUtils; using ::android::hardware::camera::external::common::ExternalCameraConfig; using ::android::hardware::camera::external::common::Size; using ::android::hardware::camera::external::common::SizeHasher; using ::android::hardware::graphics::common::V1_0::BufferUsage; using ::android::hardware::graphics::common::V1_0::Dataspace; using ::android::hardware::graphics::common::V1_0::PixelFormat; Loading @@ -84,7 +87,7 @@ using ::android::base::unique_fd; struct ExternalCameraDeviceSession : public virtual RefBase { ExternalCameraDeviceSession(const sp<ICameraDeviceCallback>&, const ExternalCameraDeviceConfig& cfg, const ExternalCameraConfig& cfg, const std::vector<SupportedV4L2Format>& sortedFormats, const CroppingType& croppingType, const common::V1_0::helper::CameraMetadata& chars, Loading Loading @@ -273,7 +276,7 @@ protected: mutable Mutex mLock; // Protect all private members except otherwise noted const sp<ICameraDeviceCallback> mCallback; const ExternalCameraDeviceConfig mCfg; const ExternalCameraConfig& mCfg; const common::V1_0::helper::CameraMetadata mCameraCharacteristics; const std::vector<SupportedV4L2Format> mSupportedFormats; const CroppingType mCroppingType; Loading @@ -289,7 +292,7 @@ protected: bool mV4l2Streaming = false; SupportedV4L2Format mV4l2StreamingFmt; size_t mV4L2BufferCount; size_t mV4L2BufferCount = 0; static const int kBufferWaitTimeoutSec = 3; // TODO: handle long exposure (or not allowing) std::mutex mV4l2BufferLock; // protect the buffer count and condition below Loading camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDevice_3_4.h +4 −2 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ using ::android::hardware::camera::device::V3_2::ICameraDeviceCallback; using ::android::hardware::camera::common::V1_0::CameraResourceCost; using ::android::hardware::camera::common::V1_0::TorchMode; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::external::common::ExternalCameraConfig; using ::android::hardware::camera::external::common::Size; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_vec; Loading @@ -54,7 +56,7 @@ struct ExternalCameraDevice : public ICameraDevice { // be multiple CameraDevice trying to access the same physical camera. Also, provider will have // to keep track of all CameraDevice objects in order to notify CameraDevice when the underlying // camera is detached. ExternalCameraDevice(const std::string& cameraId); ExternalCameraDevice(const std::string& cameraId, const ExternalCameraConfig& cfg); ~ExternalCameraDevice(); // Caller must use this method to check if CameraDevice ctor failed Loading Loading @@ -95,7 +97,7 @@ protected: Mutex mLock; bool mInitFailed = false; std::string mCameraId; const ExternalCameraDeviceConfig mCfg; const ExternalCameraConfig& mCfg; std::vector<SupportedV4L2Format> mSupportedFormats; CroppingType mCroppingType; Loading Loading
camera/device/3.4/default/ExternalCameraDevice.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -44,9 +44,10 @@ const std::array<uint32_t, /*size*/1> kSupportedFourCCs {{ } // anonymous namespace ExternalCameraDevice::ExternalCameraDevice(const std::string& cameraId) : ExternalCameraDevice::ExternalCameraDevice( const std::string& cameraId, const ExternalCameraConfig& cfg) : mCameraId(cameraId), mCfg(ExternalCameraDeviceConfig::loadFromCfg()) { mCfg(cfg) { status_t ret = initCameraCharacteristics(); if (ret != OK) { Loading
camera/device/3.4/default/ExternalCameraDeviceSession.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ HandleImporter ExternalCameraDeviceSession::sHandleImporter; ExternalCameraDeviceSession::ExternalCameraDeviceSession( const sp<ICameraDeviceCallback>& callback, const ExternalCameraDeviceConfig& cfg, const ExternalCameraConfig& cfg, const std::vector<SupportedV4L2Format>& sortedFormats, const CroppingType& croppingType, const common::V1_0::helper::CameraMetadata& chars, Loading
camera/device/3.4/default/ExternalCameraUtils.cpp +51 −21 Original line number Diff line number Diff line Loading @@ -30,14 +30,6 @@ namespace device { namespace V3_4 { namespace implementation { namespace { const int kDefaultJpegBufSize = 5 << 20; // 5MB const int kDefaultNumVideoBuffer = 4; const int kDefaultNumStillBuffer = 2; } // anonymous namespace const char* ExternalCameraDeviceConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml"; V4L2Frame::V4L2Frame( uint32_t w, uint32_t h, uint32_t fourcc, int bufIdx, int fd, uint32_t dataSize, uint64_t offset) : Loading Loading @@ -148,10 +140,32 @@ int AllocatedFrame::getCroppedLayout(const IMapper::Rect& rect, YCbCrLayout* out return 0; } bool isAspectRatioClose(float ar1, float ar2) { const float kAspectRatioMatchThres = 0.025f; // This threshold is good enough to distinguish // 4:3/16:9/20:9 // 1.33 / 1.78 / 2 return (std::abs(ar1 - ar2) < kAspectRatioMatchThres); } } // namespace implementation } // namespace V3_4 } // namespace device namespace external { namespace common { namespace { const int kDefaultJpegBufSize = 5 << 20; // 5MB const int kDefaultNumVideoBuffer = 4; const int kDefaultNumStillBuffer = 2; } // anonymous namespace const char* ExternalCameraConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml"; ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* cfgPath) { ExternalCameraConfig ExternalCameraConfig::loadFromCfg(const char* cfgPath) { using namespace tinyxml2; ExternalCameraDeviceConfig ret; ExternalCameraConfig ret; XMLDocument configXml; XMLError err = configXml.LoadFile(cfgPath); Loading @@ -169,6 +183,29 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c return ret; } XMLElement *providerCfg = extCam->FirstChildElement("Provider"); if (providerCfg == nullptr) { ALOGI("%s: no external camera provider config specified", __FUNCTION__); return ret; } XMLElement *ignore = providerCfg->FirstChildElement("ignore"); if (ignore == nullptr) { ALOGI("%s: no internal ignored device specified", __FUNCTION__); return ret; } XMLElement *id = ignore->FirstChildElement("id"); while (id != nullptr) { const char* text = id->GetText(); if (text != nullptr) { ret.mInternalDevices.insert(text); ALOGI("%s: device %s will be ignored by external camera provider", __FUNCTION__, text); } id = id->NextSiblingElement("id"); } XMLElement *deviceCfg = extCam->FirstChildElement("Device"); if (deviceCfg == nullptr) { ALOGI("%s: no external camera device config specified", __FUNCTION__); Loading Loading @@ -226,7 +263,7 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c ret.fpsLimits = limits; } ALOGI("%s: external camera cfd loaded: maxJpgBufSize %d," ALOGI("%s: external camera cfg loaded: maxJpgBufSize %d," " num video buffers %d, num still buffers %d", __FUNCTION__, ret.maxJpegBufSize, ret.numVideoBuffers, ret.numStillBuffers); Loading @@ -237,7 +274,7 @@ ExternalCameraDeviceConfig ExternalCameraDeviceConfig::loadFromCfg(const char* c return ret; } ExternalCameraDeviceConfig::ExternalCameraDeviceConfig() : ExternalCameraConfig::ExternalCameraConfig() : maxJpegBufSize(kDefaultJpegBufSize), numVideoBuffers(kDefaultNumVideoBuffer), numStillBuffers(kDefaultNumStillBuffer) { Loading @@ -247,16 +284,9 @@ ExternalCameraDeviceConfig::ExternalCameraDeviceConfig() : fpsLimits.push_back({/*Size*/{4096, 3072}, /*FPS upper bound*/5.0}); } bool isAspectRatioClose(float ar1, float ar2) { const float kAspectRatioMatchThres = 0.025f; // This threshold is good enough to distinguish // 4:3/16:9/20:9 // 1.33 / 1.78 / 2 return (std::abs(ar1 - ar2) < kAspectRatioMatchThres); } } // namespace implementation } // namespace V3_4 } // namespace device } // namespace common } // namespace external } // namespace camera } // namespace hardware } // namespace android
camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h +6 −3 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ using ::android::hardware::camera::device::V3_4::ICameraDeviceSession; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::common::V1_0::helper::HandleImporter; using ::android::hardware::camera::common::V1_0::helper::ExifUtils; using ::android::hardware::camera::external::common::ExternalCameraConfig; using ::android::hardware::camera::external::common::Size; using ::android::hardware::camera::external::common::SizeHasher; using ::android::hardware::graphics::common::V1_0::BufferUsage; using ::android::hardware::graphics::common::V1_0::Dataspace; using ::android::hardware::graphics::common::V1_0::PixelFormat; Loading @@ -84,7 +87,7 @@ using ::android::base::unique_fd; struct ExternalCameraDeviceSession : public virtual RefBase { ExternalCameraDeviceSession(const sp<ICameraDeviceCallback>&, const ExternalCameraDeviceConfig& cfg, const ExternalCameraConfig& cfg, const std::vector<SupportedV4L2Format>& sortedFormats, const CroppingType& croppingType, const common::V1_0::helper::CameraMetadata& chars, Loading Loading @@ -273,7 +276,7 @@ protected: mutable Mutex mLock; // Protect all private members except otherwise noted const sp<ICameraDeviceCallback> mCallback; const ExternalCameraDeviceConfig mCfg; const ExternalCameraConfig& mCfg; const common::V1_0::helper::CameraMetadata mCameraCharacteristics; const std::vector<SupportedV4L2Format> mSupportedFormats; const CroppingType mCroppingType; Loading @@ -289,7 +292,7 @@ protected: bool mV4l2Streaming = false; SupportedV4L2Format mV4l2StreamingFmt; size_t mV4L2BufferCount; size_t mV4L2BufferCount = 0; static const int kBufferWaitTimeoutSec = 3; // TODO: handle long exposure (or not allowing) std::mutex mV4l2BufferLock; // protect the buffer count and condition below Loading
camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDevice_3_4.h +4 −2 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ using ::android::hardware::camera::device::V3_2::ICameraDeviceCallback; using ::android::hardware::camera::common::V1_0::CameraResourceCost; using ::android::hardware::camera::common::V1_0::TorchMode; using ::android::hardware::camera::common::V1_0::Status; using ::android::hardware::camera::external::common::ExternalCameraConfig; using ::android::hardware::camera::external::common::Size; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_vec; Loading @@ -54,7 +56,7 @@ struct ExternalCameraDevice : public ICameraDevice { // be multiple CameraDevice trying to access the same physical camera. Also, provider will have // to keep track of all CameraDevice objects in order to notify CameraDevice when the underlying // camera is detached. ExternalCameraDevice(const std::string& cameraId); ExternalCameraDevice(const std::string& cameraId, const ExternalCameraConfig& cfg); ~ExternalCameraDevice(); // Caller must use this method to check if CameraDevice ctor failed Loading Loading @@ -95,7 +97,7 @@ protected: Mutex mLock; bool mInitFailed = false; std::string mCameraId; const ExternalCameraDeviceConfig mCfg; const ExternalCameraConfig& mCfg; std::vector<SupportedV4L2Format> mSupportedFormats; CroppingType mCroppingType; Loading