gl: Change GL VideoFrame implementation
Following the discussion on !1279 (closed) this merge request changes the implementation for GL mapped video frames in the Rust bindings.
This is supposed to address these problems in the current implementation:
- When the
VideoFrameGLExt
trait is in scope allVideoFrame
objects provides thetexture_id
function - not only those that are mapped with the GL methods. - Similarly,
VideoFrame
objects that are mapped with the GL methods will provide all the methods that non-GLVideoFrame
objects use to access planar data, even though they don't make sense at all for GL video frames.
To solve this I introduced new GLVideoFrame
and GLVideoFrameRef
structs that mirror the ones in gst-video. To avoid unnecessary code duplication I extracted as many shared accessor functions I could into a new VideoFrameExt
trait.
Note that this is a breaking change in the API, as can be seen in the examples/src/glupload.rs
file. Instead of this:
gst_video::VideoFrame::from_buffer_readable_gl(buffer, &info)
one now has to do:
gst_gl::GLVideoFrame::from_buffer_readable(buffer, &info)