2025-02-21 10:21:19 +01:00

171 lines
2.7 KiB
C#

#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_TVOS
#define UNITY_PLATFORM_SUPPORTS_YPCBCR
#endif
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace RenderHeads.Media.AVProVideo
{
/// <summary>
/// Base class to apply texture from MediaPlayer
/// </summary>
public abstract class ApplyToBase : MonoBehaviour
{
[Header("Media Source")]
[SerializeField]
protected MediaPlayer _media = null;
public MediaPlayer Player
{
get
{
return _media;
}
set
{
ChangeMediaPlayer(value);
}
}
[Space(8f)]
[Header("Display")]
[SerializeField]
bool _automaticStereoPacking = true;
public bool AutomaticStereoPacking
{
get
{
return _automaticStereoPacking;
}
set
{
if (_automaticStereoPacking != value)
{
_automaticStereoPacking = value;
_isDirty = true;
}
}
}
[SerializeField]
StereoPacking _overrideStereoPacking = StereoPacking.None;
public StereoPacking OverrideStereoPacking
{
get
{
return _overrideStereoPacking;
}
set
{
if (_overrideStereoPacking != value)
{
_overrideStereoPacking = value;
_isDirty = true;
}
}
}
[SerializeField]
bool _stereoRedGreenTint = false;
public bool StereoRedGreenTint
{
get
{
return _stereoRedGreenTint;
}
set
{
if (_stereoRedGreenTint != value)
{
_stereoRedGreenTint = value;
_isDirty = true;
}
}
}
protected bool _isDirty = false;
void Awake()
{
ChangeMediaPlayer(_media, force: true);
}
private void ChangeMediaPlayer(MediaPlayer player, bool force = false)
{
if (_media != player || force)
{
if (_media != null)
{
_media.Events.RemoveListener(OnMediaPlayerEvent);
}
_media = player;
if (_media != null)
{
_media.Events.AddListener(OnMediaPlayerEvent);
}
_isDirty = true;
}
}
// Callback function to handle events
private void OnMediaPlayerEvent(MediaPlayer mp, MediaPlayerEvent.EventType et, ErrorCode errorCode)
{
switch (et)
{
case MediaPlayerEvent.EventType.FirstFrameReady:
case MediaPlayerEvent.EventType.PropertiesChanged:
ForceUpdate();
break;
}
}
public void ForceUpdate()
{
_isDirty = true;
if (this.isActiveAndEnabled)
{
Apply();
}
}
private void Start()
{
SaveProperties();
Apply();
}
protected virtual void OnEnable()
{
SaveProperties();
ForceUpdate();
}
protected virtual void OnDisable()
{
RestoreProperties();
}
private void OnDestroy()
{
ChangeMediaPlayer(null);
}
protected virtual void SaveProperties()
{
}
protected virtual void RestoreProperties()
{
}
public abstract void Apply();
}
}