GDE_gozen_CSharp/addons/gde_gozen/VideoControl.cs

84 lines
No EOL
2 KiB
C#

using Godot;
using System;
using Godot.NativeInterop;
public partial class VideoControl : Control
{
[Signal]
public delegate void FrameChangedEventHandler(int frame_nr);
[Signal]
public delegate void NextFrameCalledEventHandler(int frame_nr);
[Signal]
public delegate void VideoLoadedEventHandler();
[Signal]
public delegate void VideoEndedEventHandler();
[Signal]
public delegate void PlaybackStartedEventHandler();
[Signal]
public delegate void PlaybackPausedEventHandler();
[Signal]
public delegate void PlaybackReadyEventHandler();
public const float PLAYBACK_SPEED_MIN = 0.25f;
public const float PLAYBACK_SPEED_MAX = 4.0f;
[Export(PropertyHint.File)] public string Path;
[Export] public bool EnableAudio = true;
[Export] public bool EnableAutoPlay = false;
[Export(PropertyHint.Range, $"0.25,4.0,0.05")]
public float PlaybackSpeed = 1.0f;
[Export] public bool PitchAdjust = true;
[Export] public bool Loop = false;
[ExportGroup("Extra's")]
[Export] public ColorProfile ColorProfile = ColorProfile.Auto;
[Export] public bool Debug = false;
public GoZenVideo? Video;
public TextureRect VideoTexture = new TextureRect();
public AudioStreamPlayer AudioStream = new AudioStreamPlayer();
public bool IsPlaying = false;
public int CurrentFrame = 0;
private float _timeElapsed = 0.0f;
private float _timeFrame = 0.0f;
private int _skippedFrames = 0;
private int _rotation = 0;
private int _padding = 0;
private float _frameRate = 0.0f;
private int _frameCount = 0;
private Vector2I _resolution = Vector2I.Zero;
private ShaderMaterial _shaderMaterial;
private long[] _threads = [];
private AudioEffectPitchShift _audioPitchEffect = new AudioEffectPitchShift();
private ImageTexture _yTexture;
private ImageTexture _uTexture;
private ImageTexture _vTexture;
}
public enum ColorProfile
{
Auto,
Bt470,
Bt601,
Bt709,
Bt2020,
Bt2100
}