diff options
-rw-r--r-- | include/ipa/ipa_vimc.h | 22 | ||||
-rw-r--r-- | src/ipa/ipa_vimc.cpp | 68 |
2 files changed, 89 insertions, 1 deletions
diff --git a/include/ipa/ipa_vimc.h b/include/ipa/ipa_vimc.h new file mode 100644 index 00000000..05b561d8 --- /dev/null +++ b/include/ipa/ipa_vimc.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_vimc.h - Vimc Image Processing Algorithm module + */ + +#ifndef __LIBCAMERA_IPA_VIMC_H__ +#define __LIBCAMERA_IPA_VIMC_H__ + +namespace libcamera { + +#define VIMC_IPA_FIFO_PATH "/tmp/libcamera_ipa_vimc_fifo" + +enum IPAOperationCode { + IPAOperationNone, + IPAOperationInit, +}; + +}; /* namespace libcamera */ + +#endif /* __LIBCAMERA_IPA_VIMC_H__ */ diff --git a/src/ipa/ipa_vimc.cpp b/src/ipa/ipa_vimc.cpp index abc06e7f..70d28fe2 100644 --- a/src/ipa/ipa_vimc.cpp +++ b/src/ipa/ipa_vimc.cpp @@ -5,25 +5,91 @@ * ipa_vimc.cpp - Vimc Image Processing Algorithm module */ +#include <ipa/ipa_vimc.h> + +#include <fcntl.h> +#include <string.h> +#include <sys/stat.h> +#include <unistd.h> + #include <iostream> #include <ipa/ipa_interface.h> #include <ipa/ipa_module_info.h> +#include "log.h" + namespace libcamera { +LOG_DEFINE_CATEGORY(IPAVimc) + class IPAVimc : public IPAInterface { public: + IPAVimc(); + ~IPAVimc(); + int init(); + +private: + void initTrace(); + void trace(enum IPAOperationCode operation); + + int fd_; }; +IPAVimc::IPAVimc() + : fd_(-1) +{ + initTrace(); +} + +IPAVimc::~IPAVimc() +{ + if (fd_) + ::close(fd_); +} + int IPAVimc::init() { - std::cout << "initializing vimc IPA!" << std::endl; + trace(IPAOperationInit); + + LOG(IPAVimc, Debug) << "initializing vimc IPA!"; + return 0; } +void IPAVimc::initTrace() +{ + struct stat fifoStat; + int ret = stat(VIMC_IPA_FIFO_PATH, &fifoStat); + if (ret) + return; + + ret = ::open(VIMC_IPA_FIFO_PATH, O_WRONLY); + if (ret < 0) { + ret = errno; + LOG(IPAVimc, Error) << "Failed to open vimc IPA test FIFO: " + << strerror(ret); + return; + } + + fd_ = ret; +} + +void IPAVimc::trace(enum IPAOperationCode operation) +{ + if (fd_ < 0) + return; + + int ret = ::write(fd_, &operation, sizeof(operation)); + if (ret < 0) { + ret = errno; + LOG(IPAVimc, Error) << "Failed to write to vimc IPA test FIFO: " + << strerror(ret); + } +} + /* * External IPA module interface */ |