LINUX.ORG.RU

Помогите разобраться в чем проблема

 ,


0

1

Есть задача написать тестовое приложение для проверки скорости отображения данных в формате YUV (кадры видео) полученных после ffmpeg с использованием OpenGL ES 2.0 и шейдеров под Android. Было приложение, которое конвертировало YUV в RGB средствами CPU. Теперь же эту же задачу нужно переложить на GPU, так как он более оптимизирован для этого и в теории должен датиь болше производительности и освободить процессор. Был взят код с проекта web-rtc - https://github.com/roisagiv/webrtc-ndk/blob/b22a896d995a5601dade8a26ad20f6eb1... и переписан на С (в коректности я совниваюсь). Идея хорошо илюстрирована здесь: http://helloworld.naver.com/helloworld/8794

На данный момент я думаю проблемы в инициализации. Весь экран девайса закрашивается зеленым цветом (это не цвет ClearColor хотя он тоже отрабатывает, проверено) это результат работы программы.

По теме: http://www.mdk.org.pl/2007/11/17/gl-colorspace-conversions

Исходник проекта на githab C+Java (путь к видео нужно заменить в java коде): https://DASAR@github.com/DASAR/work.git

P.S. Думаю было бы неплохо допилить. Цель FullHD видео 1440x1080@60FPS - не достижимая конечно, но хотелось бы немного ускорить это узкое место.


В принципе, твоя проблема решена внутри Linphone под Android, в модуле mediastreamer2, который и занимается отбражением видео с помощью OpenGL ES, кодеками и всем прочим хозяйством.

Можешь посмотреть как это сделано там и сделать на основе этого свой плеер.

Тут можно взять исходники.

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

«Можешь посмотреть как это сделано там и сделать на основе этого свой плеер.» Спасибо гляну. Но я еще зеленый новечок. Да и цель сделатьтестовое приложение, код которого потом соединят с основным большим проектом если мне удасться доказать что это рабочий метод. А он рабочий) Есть конечно вариент конвертировать все пиксели кадра в native коде, который у нас сейчас работает. Есть даже вариант с asm под neon если не ошибаюсь (их несколько разнообразных). Это все не то. Графигой должен заниматься GPU. Тем более в это время можно заполнить буфер YUV силами CPU. И народ если кому не лень советы в студию, может кто код проверит? Я в рендере не уверен и в заполнении буфера. По какой причине такой результат работы? Что и как нужно исправить? (инициализировать?). Есть оригинал web-rtc. Буду очень благодарен помощи.

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

Я прямо сейчас посмотрел, там YUV в RGB переводится шейдером, и выводится в OpenGL ES окно, и все это работает.

Код достаточно понятный.

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

«и все это работает» В каком смысле в теории? Посмотрели web-rtc или мой проект? Я уже вызубрил наверное теорию работы этой идеи. Уверился что должно работать быстро. Вообще хот результата на экране невижу, но FPS выдает в логи замечательный. В тестовом остальные части не идеальные так что после переноса в основной проект я надеюсь там перестанет отображаться слайд шоу в HD и FullHD хотя бы 30 FPS было бы отлично.

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

К сожалению собрать web-rtc не вышло, да и толку от этого было бы только доказать что идея имеет право на существование. Все равно нужен рабочий пример, который смогут исполльзовать для включения в проект.

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

В смысле, прямо на практике, в linphone этот метод используется. Но там, это используется для вывода удаленного потока, который декодируется с помощью ffmpeg (например).

Я просто не очень понимаю, зачем делать то что уже до тебя сделано. Разве что, только чтобы изучить OpenGL ES.

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

web-rtc и у меня не получилось завести, факт.

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

Там пример есть, приложение, которое шлет RTP-поток самому себе, в качестве данных - берутся данные с камеры, можешь собрать, посмотреть.

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

«Я просто не очень понимаю, зачем делать то что уже до тебя сделано. Разве что, только чтобы изучить OpenGL ES.» И изучит и понять почему не работает. Да и не знал я, что есть решение под эту платформу linphone. Про него слышал, но не видел. Спасибо вам недеюсь поможет. И все таки интересно чего нехватет в моем коде?) linphone уже тяну к сибе, буду разбираться. Сказали пока отложить эту задачу, но думаю все равно буду заниматься этим. Кто-то же должен сделать наконец. Итак весь проект на соплях и копипасте.

«web-rtc и у меня не получилось завести, факт.» Его много у кого не получается. Завести можно есть вроде редкие прициденты, но надо долго возиться. Совсем не мой уровень знаний нужен и времени вагон. У web-rtc пока тестовая неофиц. поддержка Android. Этот API используют кстати в mail agente с новой версией. Он сейчас google принадлежит. Известная штука. Думаю Android допилят.

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

Народ если у кого есть скайпы или mail можно обсудить в живую. Я так если кому интересно.

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

там YUV в RGB переводится шейдером, и выводится в OpenGL ES окно, и все это работает.

Код достаточно понятный.

за этот, что это за код, где он лежит

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

«там YUV в RGB переводится шейдером, и выводится в OpenGL ES окно, и все это работает.» Я думаю он имел в виду linphone, ну и в web-rtc теже грабли. Под iOS и виндуз много примеров рабочих. И для меня непригодно неясных.

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

mono глупый вопрос в linphone где эта самая часть рендеринга с текстурами (YUV в RGB) ? Стянул вариант для Android и основной.

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