player: auto-enable HW decode when VPU accessible — remove R36S_HW_DECODE opt-in gate
This commit is contained in:
@@ -62,32 +62,16 @@ def _probe_hw_decoders(gst_module) -> list:
|
||||
"""
|
||||
Probe for available hardware video decoder GStreamer elements.
|
||||
|
||||
Hardware decode (mppvideodec / V4L2) is only auto-selected when
|
||||
R36S_HW_DECODE=1 is set in the environment. By default the probe is a
|
||||
no-op: software avdec_h264 (libav, NEON-optimised) remains preferred
|
||||
because mppvideodec outputs NV12 which requires an additional software
|
||||
NV12→BGRA conversion step that outweighs the decode speedup.
|
||||
|
||||
Set R36S_HW_DECODE=1 (e.g. in MatHacks.sh) to enable hardware decode with
|
||||
zero-copy NV12→SDL upload via SDL_UpdateNVTexture.
|
||||
Probe for hardware video decoder GStreamer elements and boost their rank
|
||||
above avdec_h264 when a VPU device node is accessible, so decodebin picks
|
||||
them automatically. NV12 frames are uploaded zero-copy via
|
||||
SDL_UpdateNVTexture so no software colourspace conversion is needed.
|
||||
|
||||
Returns the list of element names whose rank was boosted.
|
||||
"""
|
||||
if os.environ.get("R36S_HW_DECODE", "0") != "1":
|
||||
# Still probe and log availability so the user knows the plugin is
|
||||
# installed, but do not boost rank.
|
||||
if _vpu_device_accessible():
|
||||
for name in _HW_DECODER_ELEMENTS:
|
||||
if gst_module.ElementFactory.find(name) is not None:
|
||||
log.info(
|
||||
"HW decode: %s available (VPU accessible) — not auto-selected. "
|
||||
"Set R36S_HW_DECODE=1 to enable (experimental).", name
|
||||
)
|
||||
return []
|
||||
|
||||
if not _vpu_device_accessible():
|
||||
log.info(
|
||||
"HW decode: R36S_HW_DECODE=1 but no accessible VPU device node — "
|
||||
"HW decode: no accessible VPU device node — "
|
||||
"falling back to software decode. "
|
||||
"Run deploy/arkos/setup_hw_decode.sh as root to fix permissions."
|
||||
)
|
||||
@@ -416,8 +400,7 @@ class GStreamerBackend(PlayerBackend):
|
||||
sink.set_property("drop", True)
|
||||
# Accept NV12 when hardware decode is active (avoids a software colourspace
|
||||
# conversion step); fall back to BGRA for the software-decode path.
|
||||
hw_active = os.environ.get("R36S_HW_DECODE", "0") == "1"
|
||||
if hw_active:
|
||||
if self._hw_decoders:
|
||||
caps_str = "video/x-raw,format=NV12;video/x-raw,format=BGRA"
|
||||
else:
|
||||
caps_str = "video/x-raw,format=BGRA"
|
||||
|
||||
Reference in New Issue
Block a user