first commit
This commit is contained in:
170
Assets/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs
Normal file
170
Assets/AVProVideo/Runtime/Scripts/Internal/ApplyToBase.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
#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.Monoscopic;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user