Привет, Хабр. Я тимлид уже 4 года. По истечению этого времени накопилась некоторая усталость и отчасти негодование от этой роли(должности). Поэтому хочу накинуть говна на вентилятор и поразмышлять с вами о руководстве в IT, каким оно бывает, какое оно должно быть. Надеюсь у вас тоже на этот счет есть свои мысли и вы мне про них расскажете.
В своей предыдущей статье я начал рассказывать о разработке плеера на основе VLC. В данной статье я расскажу об основных аспектах и сложностях, с которыми мне пришлось столкнуться при написании плеера. Вот как выглядит главное окно программы:
Главное окно программы
Отрисовка кадра на экран с помощью Direct3D
Итак, как я уже говорил для декодирования потокового видео используется библиотека LibVLC, которая является основной частью плеера VLC. Плагин VMem позволяет декодировать видео поток, применяя к нему различные фильтры и в конце концов сохранять ее в пользовательский участок памяти. Для того, чтобы ускорить вывод картинки я использовал Direct3D 9. В Direct3D есть понятие поверхностей(surfaces) а также текстур(textures). Поверхность — это массив байтов имеющий размер width x height:
Схематичное изображение поверхности
Т.е. по сути поверхность есть bitmap
Текстура отличается от поверхности тем, что ее можно «накладывать» на примитивы(полигоны). Также текстура имеет mip-map уровни — уменьшенные копии текстуры(применяется в 3D графике)
Не так давно я стал работать с Qt под Windows. Моей задачей является разработка графического приложения с отрисовкой пользовательского интерфейса в реальном времени с анимацией и прочими плюшками. Работает вся эта красота через DirectX, а Qt очень помогает анимацией, окнами, сигналами и прочими полезными вещами.
Зачем это надо?
Если кто занимался разработкой игр, то знает, что перерисовка экрана происходит во время «простоя приложения» — т.е. те моменты, когда очередь сообщений к окну пустая. Это позволяет перерисовывать окно довольно быстро, так в частности пустое окно, может отрисовываться несколько тысяч фреймов в секунду(с отключенной вертикальной синхронизацией).
Когда я пришел устраиваться на работу, мне показали макет того, что я должен буду сделать. Это был видео-плеер с довольно симпатичным интерфейсом. Предполагалось, что мой плеер будет использовать плеер VLC (а точнее его библиотеку LibVLC) в качестве видео-движка. Дело в том, что плеер, который все привыкли видеть на своем рабочем столе — VLC по сути лишь интерфейс для библиотеки LibVLC, которая позволяет загружать и декодировать видео файлы с локального диска, мультикаст поток.
С языком разработки определились сразу же — С++. Что касается среды разработки, то у меня, как и у начальства были свои предложения (Visual Studio IDE) — в итоге сошлись на Qt IDE, т.к. SDK имеет множество классов, позволяющих ускорить разработку приложения с пользовательским интерфейсом.