bool FolderScanner::createDir(const string &path, bool allowRecursive) { if (isDir(path)) return true; std::cout << "creating dir <" << path << ">" << std::endl; std::system(("mkdir " + path).c_str()); if (!isDir(path)) { if (!allowRecursive) { L_ERROR_P("couldn't create dir <%s>", path.c_str()); return false; } L_INFO_P("creating subfolders of <%s>", path.c_str()); auto subfolders = HelperUtils::stringSplit(path, PATH_SEPARATOR[0]); string p; for (auto& subfolder : subfolders) { if (!p.empty()) p += PATH_SEPARATOR; p += subfolder; if (!createDir(p, false)) return false; } } return true; }
void FolderScanner::emptyDir(const string &path) { #ifdef WIN32 std::system(("rd /s /q " + path).c_str()); #else int result = std::system(("rm -rf " + path).c_str()); CORE_UNUSED(result); #endif L_INFO_P("The <%s> folder is deleted.", path.c_str()); }
DirectShowCaptureInterface::DirectShowCaptureInterface(const string &devname, bool isRgb) { mDevname = devname; mIsRgb = isRgb; // Group Number 1 2 3 4 5 6 7 8 9 10 11 1213 14 QRegExp deviceStringPattern(QString("^([^,:]*)(,([^:]*))?(:(\\d*)/(\\d*))?((:mjpeg)|(:yuyv)|(:rgb)|(:fjpeg))?(:(\\d*)x(\\d*))?$")); static const int Device1Group = 1; static const int Device2Group = 3; static const int FpsNumGroup = 5; static const int FpsDenumGroup = 6; static const int CompressionGroup = 7; static const int WidthGroup = 13; static const int HeightGroup = 14; L_DDEBUG_P("Input string <%s>", devname.c_str()); QString qdevname(devname.c_str()); int result = deviceStringPattern.indexIn(qdevname); if (result == -1) { L_ERROR_P("Error in device string format:<%s>", devname.c_str()); return; } L_INFO_P("Parsed data:\n" " | - Device 1=%s\n" " | - Device 2=%s\n" " | - FPS %s/%s\n" " | - Size [%sx%s]\n" " \\ - Compressing: %s\n" "RGB decoding is %s", deviceStringPattern.cap(Device1Group).toLatin1().constData(), deviceStringPattern.cap(Device2Group).toLatin1().constData(), deviceStringPattern.cap(FpsNumGroup).toLatin1().constData(), deviceStringPattern.cap(FpsDenumGroup).toLatin1().constData(), deviceStringPattern.cap(WidthGroup).toLatin1().constData(), deviceStringPattern.cap(HeightGroup).toLatin1().constData(), deviceStringPattern.cap(CompressionGroup).toLatin1().constData(), mIsRgb ? "on" : "off" ); mDeviceIDs[Frames::LEFT_FRAME ] = deviceStringPattern.cap(Device1Group).isEmpty() ? -1 : deviceStringPattern.cap(Device1Group).toInt(); mDeviceIDs[Frames::RIGHT_FRAME] = deviceStringPattern.cap(Device2Group).isEmpty() ? -1 : deviceStringPattern.cap(Device2Group).toInt(); bool err; int fpsnum = deviceStringPattern.cap(FpsNumGroup).toInt(&err); if (!err) fpsnum = 1; int fpsdenum = deviceStringPattern.cap(FpsDenumGroup).toInt(&err); if (!err) fpsdenum = 10; int width = deviceStringPattern.cap(WidthGroup).toInt(&err); if (!err || width <= 0) width = 800; int height = deviceStringPattern.cap(HeightGroup).toInt(&err); if (!err || height <= 0) height = 600; mCompressed = DirectShowCameraDescriptor::UNCOMPRESSED_YUV; if (!deviceStringPattern.cap(CompressionGroup).isEmpty()) { if (!deviceStringPattern.cap(CompressionGroup).compare(QString(":rgb"))) { mCompressed = DirectShowCameraDescriptor::UNCOMPRESSED_RGB; mIsRgb = true; } else if (!deviceStringPattern.cap(CompressionGroup).compare(QString(":mjpeg"))) { mCompressed = DirectShowCameraDescriptor::COMPRESSED_JPEG; } else if (!deviceStringPattern.cap(CompressionGroup).compare(QString(":fjpeg"))) { mCompressed = DirectShowCameraDescriptor::COMPRESSED_FAST_JPEG; } } for (int i = 0; i < Frames::MAX_INPUTS_NUMBER; i++) { L_INFO_P("Capture %s device: DShow:%d", Frames::getEnumName((Frames::FrameSourceId)i), mDeviceIDs[i]); } L_INFO_P("Format is: %s", DirectShowCameraDescriptor::codec_names[mCompressed]); /* TODO: Make cycle here */ for (int i = 0; i < Frames::MAX_INPUTS_NUMBER; i++) { mFormats[i].type = DirectShowCameraDescriptor::codec_types[mCompressed]; mFormats[i].height = height; mFormats[i].width = width; mFormats[i].fps = (int)((double)fpsdenum / fpsnum); } skippedCount = 0; isRunning = false; }