2.13.0 deleted the display-agnostic EGL/Flutter-texture renderer and made the native Wayland plane the only path, hard-rejecting every session that cannot host one - X11, XWayland (SteamOS Gaming Mode runs native apps through Gamescope's XWayland), or a plane whose EGL bootstrap failed. This restores the 2.11.0 texture path from git history as the fallback: - Re-add mpv_texture.cc/.h and mpv_gpu_bootstrap.cc/.h (2.11.0 verbatim): an FlTextureGL whose populate renders mpv into an offscreen FBO sampled by Flutter via an EGL image. - MpvPlayer gains the texture-mode render-context API (InitRenderContext, HasRenderContext, GetEglDisplay/Context, Render(w,h,fbo)) beside the plane's InitRenderContextForSurface/RenderToSurface. The isolated ES 2.0 context on Flutter's display and the X11 display param are exactly the 2.11.0 configuration hardware decode demonstrably worked in. - initialize now tries the plane first and falls back to the texture path when it cannot be brought up, returning the texture id (Dart's 2.11.0 'result is int' contract) with waitForVideoReady gating playback until the GPU bootstrap settles. Both paths share one mpv core, so the plane/texture decision precedes render-context creation. - hdr-enabled/hdr-tone-mapping are intercepted in texture mode (no plane, no HDR); the HDR toggle hides itself via isHDRSupported. - New Linux setting 'Video rendering mode' (Automatic / Texture) forces the fallback - the user-visible workaround for plane-only trouble and for the hwdec interop regression, plus translations in all locales. SDR only on the fallback, matching 2.11.0; the plane path is unchanged.
35 lines
1.0 KiB
C
35 lines
1.0 KiB
C
#ifndef MPV_TEXTURE_H_
|
|
#define MPV_TEXTURE_H_
|
|
|
|
#include <flutter_linux/flutter_linux.h>
|
|
|
|
#include "mpv_player.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define MPV_TEXTURE_TYPE (mpv_texture_get_type())
|
|
|
|
G_DECLARE_FINAL_TYPE(MpvTexture, mpv_texture, MPV, TEXTURE, FlTextureGL)
|
|
|
|
/// Creates a new MpvTexture that renders mpv video to an offscreen FBO.
|
|
MpvTexture* mpv_texture_new(mpv::MpvPlayer* player, FlTextureRegistrar* registrar, FlView* view);
|
|
|
|
typedef void (*MpvTextureReadyCallback)(gboolean success, const gchar* error_message, gpointer user_data);
|
|
|
|
/// Installs the one-shot video bootstrap result callback.
|
|
void mpv_texture_set_ready_callback(
|
|
MpvTexture* self, MpvTextureReadyCallback callback, gpointer user_data, GDestroyNotify destroy_notify);
|
|
|
|
/// Notifies Flutter that a new frame is available.
|
|
void mpv_texture_mark_frame_available(MpvTexture* self);
|
|
|
|
/// Cleans up GL resources (FBO/texture).
|
|
void mpv_texture_dispose(MpvTexture* self);
|
|
|
|
/// Returns the Flutter texture ID.
|
|
int64_t mpv_texture_get_id(MpvTexture* self);
|
|
|
|
G_END_DECLS
|
|
|
|
#endif // MPV_TEXTURE_H_
|