LINUX.ORG.RU

C: Декодер MJPEG

 


0

1

Всем привет! Вопрос ко всем знатокам: нужно прочитать отдельные кадры из MJPEG, знает ли кто-нибудь некий проект на Си с гита или еще откуда-то, которым это можно сделать, соответственно, подшаманив под себя.

В общем и целом понятно, что это просто набор картинок, пожатых отдельно друг от друга, но , таки, нормального внутреннего строения этой кухни на задворках е'нтернета не нашел.

Может, как-то не так ищу. Формат, мол , не стандартизированный. Но как же быть, если он необходим.


нает ли кто-нибудь некий проект на Си с гита или еще откуда-то, которым это можно сделать

да! называется FFmpeg

Harald ★★★★★
()

На сайте apple была документация по QT с описанием структуры Motion-JPEG.

Да даже с вики туда есть ссылка.

boowai ★★★★
()
Последнее исправление: boowai (всего исправлений: 1)
Ответ на: комментарий от anonymous

Спасибо всем, кто откликнулся, завтра буду все это смотреть. FFmpeg попадался на глаза, ситуация такова, что у меня система embedded с очень малым количеством памяти, и я пока не понял, как можно сделать сборку этой либы на целевом устройстве. Контейнер АVI, будет конвертирован в mjpeg, и скормлен местному драйверу

Tumyq
() автор топика

Любой плейер, умеющий mjpeg, умеет разложить его на кадры. Попробуй vlc, ffmpeg, и если не ошибаюсь, в OpenCV тоже есть компоненты.

aiqu6Ait ★★★★
()
Ответ на: комментарий от Harald

ОЗУ 56Кбайт + 256Кбайт внешних, и SD-карта на 32 Мбайт. Плееры - это все хорошо, только мне нужен данный функционал непосредственно в embedded, где это не тривиальная задачка

Tumyq
() автор топика

если под MJPEG подразумевается отдельный готовый файл - то это просто слитые друг за другом JPEG. А jpeg - тегированный формат. Бежишь по тегам находишь границы кадров и всё. Информации из wikipedia должно быть более чем достаточно.

если имеется в виду поток видео MJPEG (например от камер), то там чуть сложнее - камеры передают только необходимый минимум и чтобы получить на выходе корректный файл mjpeg или отдельные jpeg надо дописывать недостающие теги.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Имеется в виду первое: слитые JPEG. Что-то я не найду какого-то конкретного примера с тегами.

Но! спасибо zvezdochiot, кажется, это то, что надо!

Tumyq
() автор топика
Ответ на: комментарий от Harald

Должны влезть, это уже другая история: видосы не будут слишком большие, и нужны просто для анимации

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

ОЗУ 56Кбайт

Видео-то в каком разрешении? Сколько цветов? по 4 байта на пиксель, даже 128х128 не влезет.

tiinn ★★★★★
()
Ответ на: комментарий от tiinn

ПАРДОН!! НЕ то скинул по поводу камня: 32Мб оперативка и SD-карта 8Гб, то были старые причуды от которых отказались

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

Плееры - это все хорошо, только мне нужен данный функционал непосредственно в embedded

Ну можно в цикле искать маркеры начала и конца JPEG-кадров (FFD8/FFD9) и резать по ним. Это не сложно, просто надо учитывать некоторые хитрости, например, что при буферизации файла/потока маркер может попасть на границу буфера.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Как раз поэтому спрашивал про структуру, идея была как раз нарезать. А если я отрежу до FFD9 (мне нужны только данные картинки)..?

Какие еще могут быть подводные камни?

Tumyq
() автор топика

libjpeg/libjpeg-turbo. Просто выполняешь декодирование JPEG с начала потока. В следующий раз - с того места, где декодер остановился в прошлый раз. И так далее. Примеров работы с этими либами - уйма.

KivApple ★★★★★
()
Ответ на: комментарий от Tumyq

Ну вот всё, что между маркерами, ВКЛЮЧАЯ САМИ МАРКЕРА — это и будет полноценный JPEG-файл, его можно скидывать на диск, открывать во вьювере или скармливать библиотеке распаковки.

Какие еще могут быть подводные камни?

Ну кроме того, что я назвал — разве что битая информация, когда попадаются повреждённые маркеры, кадры склеиваются и надо отделять овец от козлищ. Но это не всегда актуально, и тут уже надо думать по ситуации...

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Спасибо за ценную информацию.

Надеюсь в нашем деле ответственность за качество кадра возложат на пользователя.

Кстати, если на заметку, то - может ли склеивание кадров произойти в момент конвертирования в MJPEG?

Tumyq
() автор топика
Ответ на: комментарий от hobbit

Спасибо за маркеры, все получилось. В итоге так и сделал: распарсил по ним.

Tumyq
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.