using System;
using UnityEngine;

namespace RenderHeads.Media.AVProVideo
{
	public interface IMediaControl
	{
		bool OpenVideoFromFile(string path, long offset, string httpHeaderJson);

		bool OpenVideoFromBuffer(byte[] buffer);

		void CloseVideo();

		void SetLooping(bool bLooping);

		bool IsLooping();

		bool HasMetaData();

		bool CanPlay();

		bool IsPlaying();

		bool IsSeeking();

		bool IsPaused();

		bool IsFinished();

		bool IsBuffering();

		void Play();

		void Pause();

		void Stop();

		void Rewind();

		void Seek(float timeMs);

		void SeekFast(float timeMs);

		float GetCurrentTimeMs();

		float GetPlaybackRate();

		void SetPlaybackRate(float rate);

		void MuteAudio(bool bMute);

		bool IsMuted();

		void SetVolume(float volume);

		void SetBalance(float balance);

		float GetVolume();

		float GetBalance();

		int GetCurrentAudioTrack();

		void SetAudioTrack(int index);

		int GetCurrentVideoTrack();

		void SetVideoTrack(int index);

		float GetBufferingProgress();

		int GetBufferedTimeRangeCount();

		bool GetBufferedTimeRange(int index, ref float startTimeMs, ref float endTimeMs);

		ErrorCode GetLastError();

		void SetTextureProperties(FilterMode filterMode = FilterMode.Bilinear, TextureWrapMode wrapMode = TextureWrapMode.Clamp, int anisoLevel = 1);

		void GrabAudio(float[] buffer, int floatCount, int channelCount);

		int GetNumAudioChannels();

		void SetAudioHeadRotation(Quaternion q);

		void ResetAudioHeadRotation();

		void SetAudioChannelMode(Audio360ChannelMode channelMode);

		void SetAudioFocusEnabled(bool enabled);

		void SetAudioFocusProperties(float offFocusLevel, float widthDegrees);

		void SetAudioFocusRotation(Quaternion q);

		void ResetAudioFocus();

		bool WaitForNextFrame(Camera dummyCamera, int previousFrameCount);
	}
}
