summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/ipa_vimc.cpp68
1 files changed, 67 insertions, 1 deletions
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
*/