Sulphide
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: так понимаю у меня проблема в том же русле: нужно на каждом кадре видеопотока (камера\файл) отрисовывать своё изображение. на камере ещё что-то можно, но вот с видео файлом вообще тяжко. одного кросплатформенного решения может и вовсе нет. пока что под винду делаю отдельный модуль через директ как давно знаю, а вот для андроида может кто реализовывал рендеринг для видеофайлов? так как вообще опыта нет тут.. | С этим вообще геморрой тот еще... Если нужно кроссплатформенное решение, то надо смотреть в сторону ffmpeg, НО аппаратный декодер для каждой платформы должен будет иметь свою реализацию и ковырять придется уже сам ffmpeg. Можно оставить софтовый декодер получать YUV кадр, не конвертированный в RGB (если конвертировать, то будет дикая просадка по процессору) и рендерить этот кадр шейдерами. Шейдеры впринципе все можно найти в инете, но надо вникнуть в суть как устроены YUV форматы. если кадр необходимо еще хоть как-то обрабатывать искажать или преобразовывать то (если для винды) о есть несколько путей: 1) софтовый декодер + аппаратный рендер (кадр из памяти перекидывать в текстуру в видеопамять и работать дальше уже с ним, перекидывание занимает время, терпимо, больше жрет декодер все равно), рендерить шейдерами. 2) nvcuvid декодер (только для карт nvidia 2-3 последних поколений), кадр декодируется целиком кудой во vram и дальше работа идет с ним именно во vram, ничего никуда кидать не надо. по времени отлично. Есть значительные ограничения. 3) для винды DXVA2-copyback режим (смотреть в lav-filters и lav-ffmpeg. Кадр декодируется аппаратным декодером видеокарты на DX поверхность, далее используется opengl interop расширение для переброски из DX в OpenGL текстуру. Впринципе первый пункт работает для всех платформ. зы я еще раз повторю - это все если надо производить над каждым кадром какие-то изменения. Если просто показать, то думаю тут полегче все, но опять же реализация под каждую платформу будет своя. С битмапами даже не думайте работать, не хватит процессора. зыы еще забыл сказать что FMX очень плохо дружит с GL, не смотря на то что хедеры OpenGL.pas и OpenGLext.pas вылизаны до блеска, например нельзя выводить контекст GL в TPanel как в vcl, напрмер, т.к. HWND есть только у FMX окна, но не его компонентов. Как с DX - не знаю, скорее всего тоже плохо. зыы ну и еще раз повторюсь, я не понимаю для чего и для кого писалась FMX... я еще понимаю если бы она на всех платформах использовала GL с низкоуровневым доступом. А так это заранее ущербная штука, нужная лишь для того чтобы выводить контролы. Все сейчас стремятся ближе к железу а эмбаркадеро, наоборот как можно дальше от него и добавляя новые тормоза, при этом начисто отрубая все плюсы конкретной платформы, что GL, что DX... | Всего записей: 277 | Зарегистр. 20-03-2008 | Отправлено: 21:06 14-08-2015 | Исправлено: Sulphide, 21:49 14-08-2015 |
|