diff --git a/src/rocjpeg_vaapi_decoder.cpp b/src/rocjpeg_vaapi_decoder.cpp index 22e9d5de93..a9a7e362cc 100644 --- a/src/rocjpeg_vaapi_decoder.cpp +++ b/src/rocjpeg_vaapi_decoder.cpp @@ -675,28 +675,32 @@ void RocJpegVappiDecoder::GetVisibleDevices(std::vector& visible_devices_ve void RocJpegVappiDecoder::GetCurrentComputePartition(std::vector ¤t_compute_partitions) { std::string search_path = "/sys/devices/"; std::string partition_file = "current_compute_partition"; -#if __cplusplus >= 201703L && __has_include() - for (const auto& entry : std::filesystem::recursive_directory_iterator(search_path)) { -#else - for (const auto& entry : std::experimental::filesystem::recursive_directory_iterator(search_path)) { -#endif - if (entry.path().filename() == partition_file) { - std::ifstream file(entry.path()); - if (file.is_open()) { - std::string partition; - std::getline(file, partition); - if (partition.compare("SPX") == 0 || partition.compare("spx") == 0) { - current_compute_partitions.push_back(kSpx); - } else if (partition.compare("DPX") == 0 || partition.compare("dpx") == 0) { - current_compute_partitions.push_back(kDpx); - } else if (partition.compare("TPX") == 0 || partition.compare("tpx") == 0) { - current_compute_partitions.push_back(kTpx); - } else if (partition.compare("QPX") == 0 || partition.compare("qpx") == 0) { - current_compute_partitions.push_back(kQpx); - } else if (partition.compare("CPX") == 0 || partition.compare("cpx") == 0) { - current_compute_partitions.push_back(kCpx); + std::error_code ec; + if (fs::exists(search_path)) { + for (auto it = fs::recursive_directory_iterator(search_path, fs::directory_options::skip_permission_denied); it != fs::recursive_directory_iterator(); ) { + try { + if (it->path().filename() == partition_file) { + std::ifstream file(it->path()); + if (file.is_open()) { + std::string partition; + std::getline(file, partition); + if (partition.compare("SPX") == 0 || partition.compare("spx") == 0) { + current_compute_partitions.push_back(kSpx); + } else if (partition.compare("DPX") == 0 || partition.compare("dpx") == 0) { + current_compute_partitions.push_back(kDpx); + } else if (partition.compare("TPX") == 0 || partition.compare("tpx") == 0) { + current_compute_partitions.push_back(kTpx); + } else if (partition.compare("QPX") == 0 || partition.compare("qpx") == 0) { + current_compute_partitions.push_back(kQpx); + } else if (partition.compare("CPX") == 0 || partition.compare("cpx") == 0) { + current_compute_partitions.push_back(kCpx); + } + file.close(); + } } - file.close(); + ++it; + } catch (fs::filesystem_error& e) { + it.increment(ec); } } } diff --git a/src/rocjpeg_vaapi_decoder.h b/src/rocjpeg_vaapi_decoder.h index 1dd3cf7bbd..d676aa44c9 100644 --- a/src/rocjpeg_vaapi_decoder.h +++ b/src/rocjpeg_vaapi_decoder.h @@ -33,8 +33,10 @@ THE SOFTWARE. #include #if __cplusplus >= 201703L && __has_include() #include + namespace fs = std::filesystem; #else #include + namespace fs = std::experimental::filesystem; #endif #include #include