Size: a a a

2020 May 28

v

vehlwn in pro.cxx
При чем тут линукс?
источник

АК

Александр Караев... in pro.cxx
Ruben
в Linux требуется организовать межпроцессное взаимодействие по типу кольцевого буфера:
1) один процесс пишет в кольцевой буфер медиа-данные (по сути, кадры)
2) множество процессоров читает эти данные из кольцевого буфера. Каджый процесс читает данные независимо от других, то есть у каждого свой текущий кадр.
3) Если какой-то процесс не успел прочитать кадр, то он перезаписывается. Следующий кадр, который получит процесс, должен быть последним ключевым, который еще не перезаписал writer.
4) (Пока не обязательно, можно принебречь) Если процесс захватил кадр, то есть область в кольцевом буфере, она не может быть перезаписана, пока он не вернет её.

Подскажите способ IPC в линуксе, который больше подходит под такую задачу? размер буфера порядка 2-3 мегабайт, линукс embedded, то есть всего свободной памяти порядка 10 мегабайт.
shared_memory + контейнер поверх, думаю
источник

SK

Stas Koynov in pro.cxx
Ruben
в Linux требуется организовать межпроцессное взаимодействие по типу кольцевого буфера:
1) один процесс пишет в кольцевой буфер медиа-данные (по сути, кадры)
2) множество процессоров читает эти данные из кольцевого буфера. Каджый процесс читает данные независимо от других, то есть у каждого свой текущий кадр.
3) Если какой-то процесс не успел прочитать кадр, то он перезаписывается. Следующий кадр, который получит процесс, должен быть последним ключевым, который еще не перезаписал writer.
4) (Пока не обязательно, можно принебречь) Если процесс захватил кадр, то есть область в кольцевом буфере, она не может быть перезаписана, пока он не вернет её.

Подскажите способ IPC в линуксе, который больше подходит под такую задачу? размер буфера порядка 2-3 мегабайт, линукс embedded, то есть всего свободной памяти порядка 10 мегабайт.
смотри реализацию в любом драйвере камеры. из драйвера камеры делай через запрос буфера, если быть точным указателя на него. до этого пробрось каждый из них через mmap. внутри драйвера будет лок на тот который занят в узерспэйсе. внутри достаточно иметь 3. в один пишем, другой читается(обрабатывается) в юзерспейс. так как скорости разные. 3 буфер служит для быстрого переклчения камеры (ей всегда нужно куда-то писать). если юзерспейс успел прочитать но нового кадра (по временным меткам) нет он блокируется
источник

v

vehlwn in pro.cxx
Если ембедед, то объявляй в начале вопроса большими буквами старость компелятора и версию стандарта.
источник

R

Ruben in pro.cxx
vehlwn
Если ембедед, то объявляй в начале вопроса большими буквами старость компелятора и версию стандарта.
c++11, gcc 4.8.3
источник

АК

Александр Караев... in pro.cxx
Ruben
c++11, gcc 4.8.3
соболезную
источник

v

vehlwn in pro.cxx
Ruben
c++11, gcc 4.8.3
Это вопрос про линукс, интерпроцессное взаимодействие, ембедед, драйверы видеокамеры?
источник

АК

Александр Караев... in pro.cxx
Ruben
в Linux требуется организовать межпроцессное взаимодействие по типу кольцевого буфера:
1) один процесс пишет в кольцевой буфер медиа-данные (по сути, кадры)
2) множество процессоров читает эти данные из кольцевого буфера. Каджый процесс читает данные независимо от других, то есть у каждого свой текущий кадр.
3) Если какой-то процесс не успел прочитать кадр, то он перезаписывается. Следующий кадр, который получит процесс, должен быть последним ключевым, который еще не перезаписал writer.
4) (Пока не обязательно, можно принебречь) Если процесс захватил кадр, то есть область в кольцевом буфере, она не может быть перезаписана, пока он не вернет её.

Подскажите способ IPC в линуксе, который больше подходит под такую задачу? размер буфера порядка 2-3 мегабайт, линукс embedded, то есть всего свободной памяти порядка 10 мегабайт.
https://gist.github.com/sehe/9376856
нагуглилось по запросу:
ring buffer shared memory c++ boost
источник

R

Ruben in pro.cxx
драйверы видеокамеры тут не причем, так как процесс генерации кадров уже реализован и есть внешнее API
источник

R

Ruben in pro.cxx
нужно только раздать эти кадры всем процессам
источник

R

Ruben in pro.cxx
которым они требуются
источник

AZ

Alexander Zaitsev in pro.cxx
Ioann_V
Знаю, что ребята на вроде @zamazan4ik сразу набегут, и забанят: чисто из личной неприязни. И все же... Почему нельзя делиться интересным вопросом. Хотя тут, наверное, ответ знают все.
Не личная неприязнь, а запрет рекламы. Вот и всего
источник

AZ

Alexander Zaitsev in pro.cxx
Тут в опросе все ок, так что отлично
источник

R

Ruben in pro.cxx
а в новых версиях есть что-то подходящее для этого? Если есть, то добавлю в копилку причин смены SDK
источник

АК

Александр Караев... in pro.cxx
Ruben
а в новых версиях есть что-то подходящее для этого? Если есть, то добавлю в копилку причин смены SDK
выше версия -> больше доступных современных библиотек
источник

АК

Александр Караев... in pro.cxx
большинство библиотек, за которыми я слежу, уже задепрекейтили поддержку C++11 и требуют минимум C++14
источник

AZ

Alexander Zaitsev in pro.cxx
Александр Караев
большинство библиотек, за которыми я слежу, уже задепрекейтили поддержку C++11 и требуют минимум C++14
Тут cpr собрался переключаться на с++17, например
источник

AZ

Alexander Zaitsev in pro.cxx
Там автор даже хотел на с++20 сразу переключиться, но наверное я смог его отговорить
источник

R

Ruben in pro.cxx
ну связался с embedded, что поделать. В другой раз на работу с ембедом не пойду)
источник

АК

Александр Караев... in pro.cxx
Alexander Zaitsev
Тут cpr собрался переключаться на с++17, например
будет прекрасно, если его начнут вновь поддерживать.
а вообще, большинство хороших библиотек основаны на шаблонных шаблонах поверх шаблонов, что приводит к очень многословному коду или костылям на <C++17
вон sol2 сильно почистился при переходе на C++17 (sol3)
источник