gtk4: Support RGBx formats in SW paths

GTK4 has matching enums and thus should handle them fine. Further more
it should allow renderers to reduce memory bandwidth by applying
occlusion culling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1660>
This commit is contained in:
Robert Mader 2024-07-08 19:00:31 +02:00 committed by Robert Mader
parent 3609411801
commit 2238db2005
2 changed files with 20 additions and 0 deletions

View file

@ -231,6 +231,14 @@ impl AsRef<[u8]> for FrameWrapper {
fn video_format_to_memory_format(f: gst_video::VideoFormat) -> gdk::MemoryFormat {
match f {
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Bgrx => gdk::MemoryFormat::B8g8r8x8,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Xrgb => gdk::MemoryFormat::X8r8g8b8,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Rgbx => gdk::MemoryFormat::R8g8b8x8,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Xbgr => gdk::MemoryFormat::X8b8g8r8,
gst_video::VideoFormat::Bgra => gdk::MemoryFormat::B8g8r8a8,
gst_video::VideoFormat::Argb => gdk::MemoryFormat::A8r8g8b8,
gst_video::VideoFormat::Rgba => gdk::MemoryFormat::R8g8b8a8,
@ -318,6 +326,10 @@ fn video_frame_to_gl_texture(
gdk::MemoryFormat::R8g8b8a8 => gdk::MemoryFormat::R8g8b8a8Premultiplied,
gdk::MemoryFormat::A8b8g8r8 => gdk::MemoryFormat::A8r8g8b8Premultiplied,
gdk::MemoryFormat::R8g8b8 | gdk::MemoryFormat::B8g8r8 => format,
gdk::MemoryFormat::B8g8r8x8
| gdk::MemoryFormat::X8r8g8b8
| gdk::MemoryFormat::R8g8b8x8
| gdk::MemoryFormat::X8b8g8r8 => format,
_ => unreachable!(),
}
} else {

View file

@ -241,6 +241,14 @@ impl ElementImpl for PaintableSink {
const GL_FORMATS: &[gst_video::VideoFormat] =
&[gst_video::VideoFormat::Rgba, gst_video::VideoFormat::Rgb];
const NON_GL_FORMATS: &[gst_video::VideoFormat] = &[
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Bgrx,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Xrgb,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Rgbx,
#[cfg(feature = "gtk_v4_14")]
gst_video::VideoFormat::Xbgr,
gst_video::VideoFormat::Bgra,
gst_video::VideoFormat::Argb,
gst_video::VideoFormat::Rgba,