summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ipa/ipa_vimc.h22
-rw-r--r--src/ipa/ipa_vimc.cpp68
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
*/