фиксированной длинны? Задача следующая - имеется отдельный поток, он получает с камеры фреймы и запихивает их в очередь:
queue<Mat> frame;
void reader(){
VideoCapture video("rtsp://admin:qwqwqwe1@cam1/0");
Mat tmp;
if (!video.isOpened()){
exit(1);
}
while (video.grab()) {
video >> tmp;
frame.push(tmp);
this_thread::sleep_for(30ms);
}
exit(127);
}
запускается при старте приложения.
По определённым событиям мне надо начать выгребать из очереди кадры и обрабатывать. Обработка тяжёлая и не всегда к появлению следующего кадра я успею. Необходимо реализовать очередь, где может хранится определённое количество элементов. например 60. если пришол новый кадр, а очередь заполнена, самый старый удаляется, а новый в конец очереди. есть штатные классы для подобной реализации?
М.б. boost::circular_buffer
Реализовать кольцевой буфер на базе std::array и хранить индексы чтения записи, записывая увеличиваешь индекс записи по модулю 60, читая увеличиваешь индекс чтения по модулю 60, если они равны, буфер пуст или ты опаздал на 60 кадров
Просто как делаешь push, проверь, если длина больше нужной, сделай стирание ненужных элементов.
Обсуждают сегодня