и асинхронному сообщению.
Конкретно, я работаю с камерами интел рилсенс, когда работаю с одной, то за 10 секунд "сна" процесс собирает в буффер около 300 фреймов, как и обещано около 30 fps.
естественно создается некоторый pipe, делается pipe.start(callback), pipe.stop, и колбеки вызываются асинхронно.
теперь СДК позволяет запустить pipe2.start(callback2) и по такой же схеме стоп и тд, с колбеком в другой буффер (так я написла колбек).
При запуске двух одновременно я не получаю 30 fps на каждый, а иногда 30 на оба, то есть около 300 фреймов в сумме в обоих буферах, иногда там 200 и 250, 100 и 250, пару раз было что один 300, а другой 2 или 10 или 40.
Процессор Intel(R) Core(TM) i3-4000M CPU @ 2.40GHz 2.39 GHz.
коротко код (можно читать примерно словами, детали не суть важно, там все через api, никакого моего мультитрединга или ассинхрона):
rs2::context ctx;
std::vector<rs2::pipeline> pipelines;
std::vector<std::string> serials;
rs2::pipeline pipe;
rs2::config cfg;
cfg.enable_device(serials[0]);
rs2::pipeline_profile profiles = pipe.start(cfg, callback);
pipelines.emplace_back(pipe);
rs2::pipeline pipe2(ctx);
rs2::pipeline_profile profiles2;
if(serials.size() > 1) {
rs2::config cfg2;
cfg2.enable_device(serials[1]);
profiles2 = pipe2.start(cfg2, callback2);
pipelines.emplace_back(pipe2);
}
sleep_for(nanoseconds(10000000000));
pipe.stop();
if(serials.size() > 1)
pipe2.stop();
Ничего сверхъестественного, старты, слип, стопы. (рилсенс дает контекст который менеджит обеими пайпами которые запускают колбеки ассинхроно).
Из того, насколько я понимаю, следует что либо они криво имплементировали ассинк общение когда больше одного девайса (то есть их context так себе) либо мой комп не тянет реальную эффективность в 60 fps ?
ну либо я криво использую их api, но вроде и колбеки и мульти-камеры на их примерах буквально написаны.
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Обсуждают сегодня