24 #include <sys/types.h>
29 #define ISP_META_WIDTH 272
30 #define ISP_META_HEIGHT 1
49 #ifdef JEVOIS_PLATFORM_PRO
58 while (itsDev.empty() ==
false) itsDev.pop_back();
62 unsigned int capw = m.cw, caph = m.ch;
63 if (itsSensor == jevois::CameraSensor::imx290)
65 capw = 1920; caph = 1080;
66 LINFO(
"imx290: using native video capture size " << capw <<
'x' << caph <<
" + crop/resize as needed");
70 if (m.cw > capw || m.ch > caph)
71 LFATAL(
"Sensor cannot capture desired " << m.cw <<
'x' << m.ch <<
": max is " << capw <<
'x' << caph);
78 if (capw == m.cw && caph == m.ch)
LINFO(
"Capture: " << capw <<
'x' << caph);
79 else LINFO(
"Capture: " << capw <<
'x' << caph <<
", crop to " << m.cw <<
'x' << m.ch);
82 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, itsNbufs,
false));
83 itsDev.back()->setFormat(m.cfmt, capw, caph, m.cfps, m.cw, m.ch);
85 itsFd = itsDev.back()->getFd(); itsDevIdx = itsDev.size() - 1;
86 itsFd2 = -1; itsDev2Idx = -1;
90 case jevois::CropType::Scale:
92 LINFO(
"Capture: " << capw <<
'x' << caph <<
", rescale to " << m.cw <<
'x' << m.ch);
95 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, 2,
true));
96 itsDev.back()->setFormat(m.cfmt, capw, caph, m.cfps, m.cw, m.ch);
98 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, 2,
true));
102 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, itsNbufs,
false));
103 itsDev.back()->setFormat(m.cfmt, m.cw, m.ch, 0.0F, m.cw, m.ch);
105 itsFd = itsDev.back()->getFd(); itsDevIdx = itsDev.size() - 1;
106 itsFd2 = -1; itsDev2Idx = -1;
110 case jevois::CropType::CropScale:
112 LINFO(
"Capture: " << capw <<
'x' << caph <<
", plus ISP scaled to " << m.c2w <<
'x' << m.c2h);
115 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, 2,
false));
116 itsDev.back()->setFormat(m.cfmt, capw, caph, m.cfps, m.cw, m.ch);
118 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, 2,
true));
122 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, itsNbufs,
false));
123 itsDev.back()->setFormat(m.c2fmt, m.c2w, m.c2h, m.cfps, m.c2w, m.c2h);
125 itsFd = itsDev.front()->getFd(); itsDevIdx = 0;
126 itsFd2 = itsDev.back()->getFd(); itsDev2Idx = itsDev.size() - 1;
130 default:
LFATAL(
"Invalid crop type: " <<
int(m.crop));
134 #else // JEVOIS_PLATFORM_PRO
143 while (itsDev.empty() ==
false) itsDev.pop_back();
146 itsDev.push_back(std::make_shared<jevois::CameraDevice>(itsDevName, itsNbufs,
false));
147 itsDev.back()->setFormat(m.cfmt, m.cw, m.ch, m.cfps, m.cw, m.ch);
148 itsFd = itsDev.back()->getFd(); itsDevIdx = itsDev.size() - 1;
149 itsFd2 = -1; itsDev2Idx = -1;
151 #endif // JEVOIS_PLATFORM_PRO
197 if (itsDevIdx == -1)
LFATAL(
"Need to call setFormat() first");
198 itsDev[itsDevIdx]->get(img);
204 return (itsDev2Idx != -1);
213 if (itsDev2Idx == -1)
LFATAL(
"No JeVois Pro Platform ISP-scaled image available");
214 itsDev[itsDev2Idx]->get(img);
222 if (itsDevIdx == -1)
LFATAL(
"Need to call setFormat() first");
223 itsDev[itsDevIdx]->done(img);
231 if (itsDev2Idx == -1)
LFATAL(
"No JeVois Pro Platform ISP-scaled image available");
232 itsDev[itsDev2Idx]->done(img);
239 if (itsFd == -1)
LFATAL(
"Not initialized");
240 XIOCTL_QUIET(itsFd, VIDIOC_QUERYCTRL, &qc);
247 if (itsFd == -1)
LFATAL(
"Not initialized");
248 XIOCTL_QUIET(itsFd, VIDIOC_QUERYMENU, &qm);
255 if (itsFd == -1)
LFATAL(
"Not initialized");
256 #ifdef JEVOIS_PLATFORM_A33
257 XIOCTL_QUIET(itsFd, 0xc00c561b , &ctrl);
259 XIOCTL_QUIET(itsFd, VIDIOC_G_CTRL, &ctrl);
267 if (itsFd == -1)
LFATAL(
"Not initialized");
268 #ifdef JEVOIS_PLATFORM_A33
269 XIOCTL_QUIET(itsFd, 0xc00c561c , &ctrl);
271 XIOCTL_QUIET(itsFd, VIDIOC_S_CTRL, &ctrl);
279 if (itsFd == -1)
LFATAL(
"Not initialized");
280 unsigned short data[2] = { reg, val };
282 LDEBUG(
"Writing 0x" << std::hex << val <<
" to 0x" << reg);
283 XIOCTL(itsFd, _IOW(
'V', 192,
int), data);
290 if (itsFd == -1)
LFATAL(
"Not initialized");
291 unsigned short data[2] = { reg, 0 };
293 XIOCTL(itsFd, _IOWR(
'V', 193,
int), data);
294 LDEBUG(
"Register 0x" << std::hex << reg <<
" has value 0x" << data[1]);
302 if (itsFd == -1)
LFATAL(
"Not initialized");
316 if (itsFd == -1)
LFATAL(
"Not initialized");