Use software decoder by default
This commit is contained in:
@@ -213,43 +213,22 @@ namespace ANSCENTER {
|
||||
}
|
||||
|
||||
bool ANSRTMPClient::areImagesIdentical(const cv::Mat& img1, const cv::Mat& img2) {
|
||||
// Quick size and type checks
|
||||
if (img1.size() != img2.size() || img1.type() != img2.type()) {
|
||||
return false;
|
||||
}
|
||||
double ageMs = _playerClient->getLastFrameAgeMs();
|
||||
if (ageMs > 5000.0) return true;
|
||||
if (ageMs > 0.0) return false;
|
||||
|
||||
// Handle empty images
|
||||
if (img1.empty()) {
|
||||
return img2.empty();
|
||||
}
|
||||
if (img1.empty() && img2.empty()) return true;
|
||||
if (img1.empty() || img2.empty()) return false;
|
||||
if (img1.size() != img2.size() || img1.type() != img2.type()) return false;
|
||||
if (img1.data == img2.data) return true;
|
||||
|
||||
if (img1.isContinuous() && img2.isContinuous()) {
|
||||
const size_t totalBytes = img1.total() * img1.elemSize();
|
||||
|
||||
// Fast rejection: sample 5 positions across contiguous memory
|
||||
// Catches 99.99% of different frames immediately
|
||||
const size_t quarter = totalBytes / 4;
|
||||
const size_t half = totalBytes / 2;
|
||||
const size_t threeQuarter = 3 * totalBytes / 4;
|
||||
|
||||
if (img1.data[0] != img2.data[0] ||
|
||||
img1.data[quarter] != img2.data[quarter] ||
|
||||
img1.data[half] != img2.data[half] ||
|
||||
img1.data[threeQuarter] != img2.data[threeQuarter] ||
|
||||
img1.data[totalBytes - 1] != img2.data[totalBytes - 1]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Full comparison
|
||||
return std::memcmp(img1.data, img2.data, totalBytes) == 0;
|
||||
}
|
||||
|
||||
// Row-by-row comparison for non-continuous images (e.g., ROI sub-matrices)
|
||||
const size_t rowSize = img1.cols * img1.elemSize();
|
||||
for (int i = 0; i < img1.rows; i++) {
|
||||
if (std::memcmp(img1.ptr(i), img2.ptr(i), rowSize) != 0) {
|
||||
return false;
|
||||
}
|
||||
if (std::memcmp(img1.ptr(i), img2.ptr(i), rowSize) != 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user