История изменений
Исправление nickleiten, (текущая версия) :
Кстати, почему всё-таки mozilla не делает аппаратное ускорение? Ведь многие плееры поддерживают его.
Основная проблема - отрисовка. Суть вот в чём, браузер оперирует плоскостями в контексте opengl (под linux, под виндой всё через directx делается, по-моему, может по-другому называется фреймворк) для отрисовки картиночек, текста и эффектов для css. Для проигрывания видео, на плоскости рисуется фигура с закрашенным «псевдоцветом», на который накладывается видео - как в кино сначала снимают на вырвиглазно зелёном/синем фоне, а потом этот цвет заменяют спецэффектами на компьютере.
Собственно, когда встроили gstreamer, с точки зрения отрисовки было хорошо, но проблема была в контекстах декодирования и отрисовки. То есть, рисовали макет через opengl, а декодировали отдельными вызовами vaapi/vdpau, и «совмещали» картинки своими силами. С программной и аппаратной точки зрения, реализация через gstreamer выглядела так: нарисовали макет страницы с областью наложения видео (этим занимается аппаратно видеокарта), взяли видеопоток, декодировали его (аппаратно видеокартой), но выхлоп декодирования gstreamer выплёвывали в оперативку, из которой видеопоток снова загоняли в видеокарту для наложения на макет. Выигрыша в плане производительности не получилось, поэтому от gstreamer отказались и забыли как страшный сон.
Для получения макс. производительности и выгрыша по энергопотреблению, декодирование и отрисовка должны происходить в одном контексте opengl (читай, всё должна обрабатывать видеокарта). То есть браузер тем или иным способом должен скармливать видеокарте инструкции по отрисовке макета страницы, видеопоток и инструкцию, как одно наложить на другое, больше ничего браузер делать не должен.
Под виндой directx (или как-то иначе фреймворк называется) всё это делается в одном контексте. Под линуксом такого фреймворка нет, есть отдельно opengl, есть отдельно vaapi/vdpau, а как их связать, чтоб не терять контекст отрисовки - самый главный вопрос. Я могу ошибаться, но вроде бы, сейчас можно это делать, но т.к. каждый производитель видеокарт тянет свой API по декодированию видео, мозиловцы не могут выбрать один эталонный, а лепить костыли под всех - слишком много ресурсов потребуется.
PS. А плееры не занимаются отрисовкой, они сразу получают контекст в пределах окна и туда через vaapi/vdpau шлют картинку.
Исходная версия nickleiten, :
Кстати, почему всё-таки mozilla не делает аппаратное ускорение? Ведь многие плееры поддерживают его.
Основная проблема - отрисовка. Суть вот в чём, браузер оперирует плоскостями в контексте opengl (под linux, под виндой всё через directx делается, по-моему, может по-другому называется фреймворк) для отрисовки картиночек, текста и эффектов для css. Для проигрывания видео, на плоскости рисуется фигура с закрашенным «псевдоцветом», на который накладывается видео - как в кино сначала снимают на вырвиглазно зелёном/синем фоне, а потом этот цвет заменяют спецэффектами на компьютере.
Собственно, когда встроили gstreamer, с точки зрения отрисовки было хорошо, но проблема была в контекстах декодирования и отрисовки. То есть, рисовали макет через opengl, а декодировали отдельными вызовами vaapi/vdpau, и «совмещали» картинки своими силами. С программной и аппаратной точки зрения, реализация через gstreamer выглядела так: нарисовали макет страницы с областью наложения видео (этим занимается аппаратно видеокарта), взяли видеопоток, декодировали его (аппаратно видеокартой), но выхлоп декодирования gstreamer выплёвывали в оперативку, из которой видеопоток снова загоняли в видеокарту для наложения на макет. Выигрыша в плане производительности не получилось, поэтому от gstreamer отказались и забыли как страшный сон.
Для получения макс. производительности и выгрыша по энергопотреблению, декодирование и отрисовка должны происходить в одном контексте opengl (читай, всё должна обрабатывать видеокарта). То есть браузер тем или иным способом должен скармливать видеокарте инструкции по отрисовке макета страницы, видеопоток и инструкцию, как одно наложить на другое, больше ничего браузер делать не должен.
Под виндой directx (или как-то иначе фреймворк называется) всё это делается в одном контексте. Под линуксом такого фреймворка нет, есть отдельно opengl, есть отдельно vaapi/vdpau, а как их связать, чтоб не терять контекст отрисовки - самый главный вопрос. Я могу ошибаться, но вроде бы, сейчас можно это делать, но т.к. каждый производитель видеокарт тянет свой API по декодированию видео, мозиловцы не могут выбрать один эталонный, а лепить костыли под всех - слишком много ресурсов потребуется.