Здравствуйте. Очередная проблемка на тему декодирования видео.
Использую все тот же OpenH264 lib. Декодирую кадры и рисую их на форме.
Но вот возникает проблема что при частоте 30 фпс я естественно пытаюсь заливать данные в контрол с этой частотой и у меня можно засказать зависает весь GUI формы. Чтобы остановить потом проигрывание приходится нажимать на кнопку 100500 раз пока наконец событие не проскочит в код.
И это всего 30 фпс … а если видос будет в 100 фпс. Как быть то ним?? Как вообще VLC отрисовывает так что не заметно этой тормозни?
Так и есть. Запускаю отдельный поток, он декодирует и затем шлет Dispather.BeginInvoke для обновления.
А вообще есть какая нибудь максимальная скорость с которой можно обновление формы делать???
Ну да … у меня есть в версии с vlc реализация такого.
А вообще как думаете на чем будет быстрее на WPF или на WF?
Мне почему то кажется что WPF это сделано для красивых приложений в ущерб производительности. Сколько проектов не делал вечно в них возникают какие то траблы при больших объемах данных, либо высоких скоростях обработки. И постоянно какие то костыли предлагается выпиливать.
Сейчас вот новая задача требует получение данных с камеры в 200 кадров в сек. Весь в сомнениях на WF делать или WPF.
При больших объемах везде проблемы будут если без виртуализации и прочих оптимизаций, в винформс вроде бы нет ничего особенного по сравнению с WPF, разве что может быть разобраться проще.
Так а UI тут причем? Монитор же не 200 Гц наверно ))
Ну если я буду 200 раз в сек пытаться обновлять контрол на форме то мне кажется это отобразится на работе GUI.
И еще. Вот в медиаэлемент есть метод OnRender. Как я понял этот метод вызывает сама система для всех компонентов приложения. А в WF я что то такого не нашел.
Там я переопределяю OnPaint но чтобы компонент перерисовался мне нужно обязательно вызвать Invalidate(). Но мне кажется это не самый лучшый способ вызывать из разных частей кода перерисовку исли вдруг изменилось состояние объекта.